mirror of
https://port.numenaute.org/aleajactaest/khanat-opennel-code.git
synced 2024-11-22 15:16:12 +00:00
Added interface for item groups
--HG-- branch : item_group
This commit is contained in:
parent
fdbc261a7e
commit
9fffec8ef1
4 changed files with 138 additions and 21 deletions
|
@ -1819,6 +1819,37 @@
|
||||||
name="uimItemTextEdit"
|
name="uimItemTextEdit"
|
||||||
handler="item_text_edition"
|
handler="item_text_edition"
|
||||||
params="ui:interface:edit_custom" />
|
params="ui:interface:edit_custom" />
|
||||||
|
<action id="item_group"
|
||||||
|
name="uiGroup">
|
||||||
|
<action id="group_name" />
|
||||||
|
<action id="group_equip"
|
||||||
|
name="uimEquip"
|
||||||
|
handler="item_group_equip"/>
|
||||||
|
<action id="group_move"
|
||||||
|
name="uimMoveTo">
|
||||||
|
<action id="group_bag"
|
||||||
|
name="uimMtBag"
|
||||||
|
handler="item_group_move"
|
||||||
|
params="bag" />
|
||||||
|
<action id="group_pa0"
|
||||||
|
name="uimMtPaMount0"
|
||||||
|
handler="item_group_move"
|
||||||
|
params="pet_animal1" /> <!-- Offset because they are named petanimal1/2/3/4 in Inventories::TEnumType -->
|
||||||
|
<action id="group_pa1"
|
||||||
|
name="uimMtPaMount1"
|
||||||
|
handler="item_group_move"
|
||||||
|
params="pet_animal2" />
|
||||||
|
<action id="group_pa2"
|
||||||
|
name="uimMtPaMount2"
|
||||||
|
handler="item_group_move"
|
||||||
|
params="pet_animal3" />
|
||||||
|
<action id="group_pa3"
|
||||||
|
name="uimMtPaMount3"
|
||||||
|
handler="item_group_move"
|
||||||
|
params="pet_animal4" />
|
||||||
|
</action> <!-- move !-->
|
||||||
|
</action> <!-- item_group !-->
|
||||||
|
|
||||||
</group>
|
</group>
|
||||||
<!-- MAX_INVENTORY_ANIMAL -->
|
<!-- MAX_INVENTORY_ANIMAL -->
|
||||||
<link expr="switch(@%pa_beast0:TYPE, 'uimMtPaMount0', 'uimMtPaMount0', 'uimMtPaPacker0', 'uimMtPaDemon0')"
|
<link expr="switch(@%pa_beast0:TYPE, 'uimMtPaMount0', 'uimMtPaMount0', 'uimMtPaPacker0', 'uimMtPaDemon0')"
|
||||||
|
@ -1829,6 +1860,15 @@
|
||||||
target="ui:interface:item_menu_in_bag:move:pa2:hardtext" />
|
target="ui:interface:item_menu_in_bag:move:pa2:hardtext" />
|
||||||
<link expr="switch(@%pa_beast3:TYPE, 'uimMtPaMount3', 'uimMtPaMount3', 'uimMtPaPacker3', 'uimMtPaDemon3')"
|
<link expr="switch(@%pa_beast3:TYPE, 'uimMtPaMount3', 'uimMtPaMount3', 'uimMtPaPacker3', 'uimMtPaDemon3')"
|
||||||
target="ui:interface:item_menu_in_bag:move:pa3:hardtext" />
|
target="ui:interface:item_menu_in_bag:move:pa3:hardtext" />
|
||||||
|
<!-- Item group submenu -->
|
||||||
|
<link expr="switch(@%pa_beast0:TYPE, 'uimMtPaMount0', 'uimMtPaMount0', 'uimMtPaPacker0', 'uimMtPaDemon0')"
|
||||||
|
target="ui:interface:item_menu_in_bag:item_group:group_move:group_pa0:hardtext" />
|
||||||
|
<link expr="switch(@%pa_beast1:TYPE, 'uimMtPaMount1', 'uimMtPaMount1', 'uimMtPaPacker1', 'uimMtPaDemon1')"
|
||||||
|
target="ui:interface:item_menu_in_bag:item_group:group_move:group_pa1:hardtext" />
|
||||||
|
<link expr="switch(@%pa_beast2:TYPE, 'uimMtPaMount2', 'uimMtPaMount2', 'uimMtPaPacker2', 'uimMtPaDemon2')"
|
||||||
|
target="ui:interface:item_menu_in_bag:item_group:group_move:group_pa2:hardtext" />
|
||||||
|
<link expr="switch(@%pa_beast3:TYPE, 'uimMtPaMount3', 'uimMtPaMount3', 'uimMtPaPacker3', 'uimMtPaDemon3')"
|
||||||
|
target="ui:interface:item_menu_in_bag:item_group:group_move:group_pa3:hardtext" />
|
||||||
<!-- item menu when we are in self -->
|
<!-- item menu when we are in self -->
|
||||||
<group type="menu"
|
<group type="menu"
|
||||||
id="item_menu_in_self"
|
id="item_menu_in_self"
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
#include "nel/gui/ctrl_base_button.h"
|
#include "nel/gui/ctrl_base_button.h"
|
||||||
#include "../connection.h"
|
#include "../connection.h"
|
||||||
#include "nel/gui/view_bitmap.h"
|
#include "nel/gui/view_bitmap.h"
|
||||||
|
#include "../item_group_manager.h"
|
||||||
extern CSheetManager SheetMngr;
|
extern CSheetManager SheetMngr;
|
||||||
extern NLMISC::CLog g_log;
|
extern NLMISC::CLog g_log;
|
||||||
|
|
||||||
|
@ -1758,12 +1758,18 @@ class CHandlerItemMenuCheck : public IActionHandler
|
||||||
CViewTextMenu *pMoveToGuild = dynamic_cast<CViewTextMenu*>(pMenu->getView("guild"));
|
CViewTextMenu *pMoveToGuild = dynamic_cast<CViewTextMenu*>(pMenu->getView("guild"));
|
||||||
CViewTextMenu *pMoveToRoom = dynamic_cast<CViewTextMenu*>(pMenu->getView("room"));
|
CViewTextMenu *pMoveToRoom = dynamic_cast<CViewTextMenu*>(pMenu->getView("room"));
|
||||||
CViewTextMenu *pMoveToPa[MAX_INVENTORY_ANIMAL];
|
CViewTextMenu *pMoveToPa[MAX_INVENTORY_ANIMAL];
|
||||||
|
CViewTextMenu *pGroupSubMenu = dynamic_cast<CViewTextMenu*>(pMenu->getView("item_group"));
|
||||||
|
CViewTextMenu *pGroupMoveToBag = dynamic_cast<CViewTextMenu*>(pMenu->getView("group_bag"));
|
||||||
|
CViewTextMenu *pGroupName = dynamic_cast<CViewTextMenu*>(pMenu->getView("group_name"));
|
||||||
|
CViewTextMenu *pGroupMoveToPa[MAX_INVENTORY_ANIMAL];
|
||||||
|
|
||||||
bool bIsLockedByOwner = pCS->getLockedByOwner();
|
bool bIsLockedByOwner = pCS->getLockedByOwner();
|
||||||
|
|
||||||
for(i=0;i<MAX_INVENTORY_ANIMAL;i++)
|
for(i=0;i<MAX_INVENTORY_ANIMAL;i++)
|
||||||
{
|
{
|
||||||
pMoveToPa[i]= dynamic_cast<CViewTextMenu*>(pMenu->getView(toString("pa%d", i)));
|
pMoveToPa[i]= dynamic_cast<CViewTextMenu*>(pMenu->getView(toString("pa%d", i)));
|
||||||
|
pGroupMoveToPa[i]= dynamic_cast<CViewTextMenu*>(pMenu->getView(toString("group_pa%d", i)));
|
||||||
|
|
||||||
}
|
}
|
||||||
CViewTextMenu *pItemInfos = dynamic_cast<CViewTextMenu*>(pMenu->getView("infos"));
|
CViewTextMenu *pItemInfos = dynamic_cast<CViewTextMenu*>(pMenu->getView("infos"));
|
||||||
CViewTextMenu *pItemTextDisplay = dynamic_cast<CViewTextMenu*>(pMenu->getView("item_text_display"));
|
CViewTextMenu *pItemTextDisplay = dynamic_cast<CViewTextMenu*>(pMenu->getView("item_text_display"));
|
||||||
|
@ -1780,6 +1786,13 @@ class CHandlerItemMenuCheck : public IActionHandler
|
||||||
if(pItemTextDisplay) pItemTextDisplay->setActive(false);
|
if(pItemTextDisplay) pItemTextDisplay->setActive(false);
|
||||||
if(pItemTextEdition) pItemTextEdition->setActive(false);
|
if(pItemTextEdition) pItemTextEdition->setActive(false);
|
||||||
|
|
||||||
|
//Item GROUP logic
|
||||||
|
if(pGroupSubMenu && pGroupName)
|
||||||
|
{
|
||||||
|
std::string groupName = CItemGroupManager::getInstance()->getGroupName(pCS);
|
||||||
|
pGroupSubMenu->setActive(groupName != "");
|
||||||
|
pGroupName->setHardText(groupName);
|
||||||
|
}
|
||||||
if(pLockUnlock) pLockUnlock->setActive(true);
|
if(pLockUnlock) pLockUnlock->setActive(true);
|
||||||
|
|
||||||
const CItemSheet *pIS = pCS->asItemSheet();
|
const CItemSheet *pIS = pCS->asItemSheet();
|
||||||
|
@ -1859,8 +1872,13 @@ class CHandlerItemMenuCheck : public IActionHandler
|
||||||
{
|
{
|
||||||
// cannot move to other animals! :)
|
// cannot move to other animals! :)
|
||||||
if(pMoveToBag) pMoveToBag->setActive(false);
|
if(pMoveToBag) pMoveToBag->setActive(false);
|
||||||
|
if(pGroupMoveToBag) pGroupMoveToBag->setActive(false);
|
||||||
for(i=0;i<MAX_INVENTORY_ANIMAL;i++)
|
for(i=0;i<MAX_INVENTORY_ANIMAL;i++)
|
||||||
|
{
|
||||||
if(pMoveToPa[i]) pMoveToPa[i]->setActive(false);
|
if(pMoveToPa[i]) pMoveToPa[i]->setActive(false);
|
||||||
|
if(pGroupMoveToPa[i]) pGroupMoveToPa[i]->setActive(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// additionnaly, cannot drop/destroy/lock an animal item.
|
// additionnaly, cannot drop/destroy/lock an animal item.
|
||||||
if(pDrop) pDrop->setActive(false);
|
if(pDrop) pDrop->setActive(false);
|
||||||
|
@ -1875,6 +1893,10 @@ class CHandlerItemMenuCheck : public IActionHandler
|
||||||
pMoveToBag->setActive( invId!=INVENTORIES::bag &&
|
pMoveToBag->setActive( invId!=INVENTORIES::bag &&
|
||||||
invMngr.isInventoryPresent(INVENTORIES::bag) &&
|
invMngr.isInventoryPresent(INVENTORIES::bag) &&
|
||||||
(invId!=INVENTORIES::guild || invMngr.isInventoryPresent(INVENTORIES::guild)) );
|
(invId!=INVENTORIES::guild || invMngr.isInventoryPresent(INVENTORIES::guild)) );
|
||||||
|
if(pGroupMoveToBag)
|
||||||
|
pGroupMoveToBag->setActive( invId!=INVENTORIES::bag &&
|
||||||
|
invMngr.isInventoryPresent(INVENTORIES::bag) &&
|
||||||
|
(invId!=INVENTORIES::guild || invMngr.isInventoryPresent(INVENTORIES::guild)) );
|
||||||
|
|
||||||
for(i=0;i<MAX_INVENTORY_ANIMAL;i++)
|
for(i=0;i<MAX_INVENTORY_ANIMAL;i++)
|
||||||
{
|
{
|
||||||
|
@ -1882,6 +1904,10 @@ class CHandlerItemMenuCheck : public IActionHandler
|
||||||
pMoveToPa[i]->setActive(invId!=INVENTORIES::guild &&
|
pMoveToPa[i]->setActive(invId!=INVENTORIES::guild &&
|
||||||
(uint)invId!=INVENTORIES::pet_animal+i &&
|
(uint)invId!=INVENTORIES::pet_animal+i &&
|
||||||
invMngr.isInventoryPresent((INVENTORIES::TInventory)(INVENTORIES::pet_animal+i)) );
|
invMngr.isInventoryPresent((INVENTORIES::TInventory)(INVENTORIES::pet_animal+i)) );
|
||||||
|
if (pGroupMoveToPa[i])
|
||||||
|
pGroupMoveToPa[i]->setActive(invId!=INVENTORIES::guild &&
|
||||||
|
(uint)invId!=INVENTORIES::pet_animal+i &&
|
||||||
|
invMngr.isInventoryPresent((INVENTORIES::TInventory)(INVENTORIES::pet_animal+i)) );
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pMoveToGuild)
|
if (pMoveToGuild)
|
||||||
|
@ -1901,9 +1927,13 @@ class CHandlerItemMenuCheck : public IActionHandler
|
||||||
if(pMoveSubMenu)
|
if(pMoveSubMenu)
|
||||||
{
|
{
|
||||||
if(pMoveToBag) someMovePossible= someMovePossible || pMoveToBag->getActive();
|
if(pMoveToBag) someMovePossible= someMovePossible || pMoveToBag->getActive();
|
||||||
|
if(pGroupMoveToBag) someMovePossible= someMovePossible || pGroupMoveToBag->getActive();
|
||||||
|
|
||||||
for(i=0;i<MAX_INVENTORY_ANIMAL;i++)
|
for(i=0;i<MAX_INVENTORY_ANIMAL;i++)
|
||||||
{
|
{
|
||||||
if(pMoveToPa[i]) someMovePossible= someMovePossible || pMoveToPa[i]->getActive();
|
if(pMoveToPa[i]) someMovePossible= someMovePossible || pMoveToPa[i]->getActive();
|
||||||
|
if(pGroupMoveToPa[i]) someMovePossible= someMovePossible || pGroupMoveToPa[i]->getActive();
|
||||||
|
|
||||||
}
|
}
|
||||||
if(pMoveToGuild) someMovePossible= someMovePossible || pMoveToGuild->getActive();
|
if(pMoveToGuild) someMovePossible= someMovePossible || pMoveToGuild->getActive();
|
||||||
if(pMoveToRoom) someMovePossible= someMovePossible || pMoveToRoom->getActive();
|
if(pMoveToRoom) someMovePossible= someMovePossible || pMoveToRoom->getActive();
|
||||||
|
@ -1986,9 +2016,12 @@ class CHandlerItemMenuCheck : public IActionHandler
|
||||||
if(pLockUnlock) pLockUnlock->setGrayed(true);
|
if(pLockUnlock) pLockUnlock->setGrayed(true);
|
||||||
if(pMoveSubMenu) pMoveSubMenu->setGrayed(true);
|
if(pMoveSubMenu) pMoveSubMenu->setGrayed(true);
|
||||||
if(pMoveToBag) pMoveToBag->setGrayed(true);
|
if(pMoveToBag) pMoveToBag->setGrayed(true);
|
||||||
|
if(pGroupMoveToBag) pGroupMoveToBag->setGrayed(true);
|
||||||
|
|
||||||
for(i=0;i<MAX_INVENTORY_ANIMAL;i++)
|
for(i=0;i<MAX_INVENTORY_ANIMAL;i++)
|
||||||
{
|
{
|
||||||
if(pMoveToPa[i]) pMoveToPa[i]->setGrayed(true);
|
if(pMoveToPa[i]) pMoveToPa[i]->setGrayed(true);
|
||||||
|
if(pGroupMoveToPa[i]) pGroupMoveToPa[i]->setGrayed(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Gray Text entries according to Availables Destinations
|
// Gray Text entries according to Availables Destinations
|
||||||
|
@ -2007,10 +2040,14 @@ class CHandlerItemMenuCheck : public IActionHandler
|
||||||
|
|
||||||
// check each inventory dest if available
|
// check each inventory dest if available
|
||||||
if(pMoveToBag) pMoveToBag->setGrayed(!invMngr.isInventoryAvailable(INVENTORIES::bag));
|
if(pMoveToBag) pMoveToBag->setGrayed(!invMngr.isInventoryAvailable(INVENTORIES::bag));
|
||||||
|
if(pGroupMoveToBag) pGroupMoveToBag->setGrayed(!invMngr.isInventoryAvailable(INVENTORIES::bag));
|
||||||
|
|
||||||
for(i=0;i<MAX_INVENTORY_ANIMAL;i++)
|
for(i=0;i<MAX_INVENTORY_ANIMAL;i++)
|
||||||
{
|
{
|
||||||
if(pMoveToPa[i]) pMoveToPa[i]->setGrayed(!invMngr.isInventoryAvailable(
|
if(pMoveToPa[i]) pMoveToPa[i]->setGrayed(!invMngr.isInventoryAvailable(
|
||||||
(INVENTORIES::TInventory)(INVENTORIES::pet_animal+i)));
|
(INVENTORIES::TInventory)(INVENTORIES::pet_animal+i)));
|
||||||
|
if(pGroupMoveToPa[i]) pGroupMoveToPa[i]->setGrayed(!invMngr.isInventoryAvailable(
|
||||||
|
(INVENTORIES::TInventory)(INVENTORIES::pet_animal+i)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2247,4 +2284,48 @@ class CHandlerRingXpCatalyserStopUse : public IActionHandler
|
||||||
REGISTER_ACTION_HANDLER( CHandlerRingXpCatalyserStopUse, "ring_xp_catalyser_stop_use" );
|
REGISTER_ACTION_HANDLER( CHandlerRingXpCatalyserStopUse, "ring_xp_catalyser_stop_use" );
|
||||||
|
|
||||||
|
|
||||||
|
// ***************************************************************************
|
||||||
|
// item groups
|
||||||
|
class CHandlerItemGroupMove : public IActionHandler
|
||||||
|
{
|
||||||
|
void execute (CCtrlBase *caller, const std::string &sParams)
|
||||||
|
{
|
||||||
|
CDBCtrlSheet* pCS = dynamic_cast<CDBCtrlSheet*>(caller);
|
||||||
|
if(!pCS)
|
||||||
|
{
|
||||||
|
nlinfo("Wrong cast");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
std::string groupName = CItemGroupManager::getInstance()->getGroupName(pCS);
|
||||||
|
if(groupName.empty())
|
||||||
|
{
|
||||||
|
nlinfo("Trying to move a group with a caller not part of any group");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
CItemGroupManager::getInstance()->moveGroup(groupName, INVENTORIES::toInventory(sParams));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
REGISTER_ACTION_HANDLER(CHandlerItemGroupMove, "item_group_move");
|
||||||
|
|
||||||
|
|
||||||
|
// ***************************************************************************
|
||||||
|
class CHandlerItemGroupEquip : public IActionHandler
|
||||||
|
{
|
||||||
|
void execute (CCtrlBase *caller, const std::string &/* sParams */)
|
||||||
|
{
|
||||||
|
CDBCtrlSheet* pCS = dynamic_cast<CDBCtrlSheet*>(caller);
|
||||||
|
if(!pCS)
|
||||||
|
{
|
||||||
|
nlinfo("Wrong cast");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
std::string groupName = CItemGroupManager::getInstance()->getGroupName(pCS);
|
||||||
|
if(groupName.empty())
|
||||||
|
{
|
||||||
|
nlinfo("Trying to move a group with a caller not part of any group");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
CItemGroupManager::getInstance()->equipGroup(groupName);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
REGISTER_ACTION_HANDLER(CHandlerItemGroupEquip, "item_group_equip");
|
||||||
|
|
|
@ -251,9 +251,6 @@ bool CItemGroupManager::loadGroups()
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//move a group from all available inventory to dst
|
//move a group from all available inventory to dst
|
||||||
bool CItemGroupManager::moveGroup(std::string name, INVENTORIES::TInventory dst)
|
bool CItemGroupManager::moveGroup(std::string name, INVENTORIES::TInventory dst)
|
||||||
{
|
{
|
||||||
|
@ -284,7 +281,6 @@ bool CItemGroupManager::moveGroup(std::string name, INVENTORIES::TInventory dst)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool CItemGroupManager::equipGroup(std::string name, bool pullBefore)
|
bool CItemGroupManager::equipGroup(std::string name, bool pullBefore)
|
||||||
{
|
{
|
||||||
CItemGroup* group = findGroup(name);
|
CItemGroup* group = findGroup(name);
|
||||||
|
@ -400,6 +396,20 @@ bool CItemGroupManager::deleteGroup(std::string name)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Used by AH
|
||||||
|
|
||||||
|
std::string CItemGroupManager::getGroupName(CDBCtrlSheet* pCS)
|
||||||
|
{
|
||||||
|
for(auto &group: _Groups)
|
||||||
|
{
|
||||||
|
if(group.contains(pCS))
|
||||||
|
return group.name;
|
||||||
|
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
//Private methods
|
||||||
CItemGroup* CItemGroupManager::findGroup(std::string name)
|
CItemGroup* CItemGroupManager::findGroup(std::string name)
|
||||||
{
|
{
|
||||||
for(auto &group: _Groups)
|
for(auto &group: _Groups)
|
||||||
|
|
|
@ -22,21 +22,6 @@
|
||||||
#include "interface_v3/dbctrl_sheet.h"
|
#include "interface_v3/dbctrl_sheet.h"
|
||||||
#include "game_share/inventories.h"
|
#include "game_share/inventories.h"
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
* Il me faut une fonction à la build() pour le chrgt XML, et un save pour le save
|
|
||||||
* ou stream.h en XML mode, todo
|
|
||||||
* TODO list :
|
|
||||||
* * DONE bool usePrice support
|
|
||||||
* * DONE Sauvegarde / Chargement .xml
|
|
||||||
* * DONE Singleton manager
|
|
||||||
* * DONE Commandes de test : loadXML, savexML, equip, move
|
|
||||||
* * Init au bon moment (où ?)
|
|
||||||
* * DONE Création de /saveGroup (stuff équipé -> groupe)
|
|
||||||
* *
|
|
||||||
* ********* premier commit
|
|
||||||
* * interface clic droit
|
|
||||||
* */
|
|
||||||
struct CInventoryItem {
|
struct CInventoryItem {
|
||||||
public:
|
public:
|
||||||
CDBCtrlSheet* pCS;
|
CDBCtrlSheet* pCS;
|
||||||
|
@ -95,9 +80,10 @@ public:
|
||||||
//Return NULL if no group was found
|
//Return NULL if no group was found
|
||||||
//Return false if no group was found
|
//Return false if no group was found
|
||||||
bool moveGroup(std::string name, INVENTORIES::TInventory dst);
|
bool moveGroup(std::string name, INVENTORIES::TInventory dst);
|
||||||
bool equipGroup(std::string name, bool pullBefore=false);
|
bool equipGroup(std::string name, bool pullBefore=true);
|
||||||
bool createGroup(std::string name);
|
bool createGroup(std::string name);
|
||||||
bool deleteGroup(std::string name);
|
bool deleteGroup(std::string name);
|
||||||
|
std::string getGroupName(CDBCtrlSheet *pCS);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CItemGroup* findGroup(std::string name);
|
CItemGroup* findGroup(std::string name);
|
||||||
|
|
Loading…
Reference in a new issue