mirror of
https://port.numenaute.org/aleajactaest/khanat-opennel-code.git
synced 2024-12-24 01:48:44 +00:00
Add support for removing items before equipping an item group
--HG-- branch : item_group
This commit is contained in:
parent
a6f541aad2
commit
83dea32f41
2 changed files with 34 additions and 2 deletions
|
@ -74,6 +74,11 @@ void CItemGroup::writeTo(xmlNodePtr node)
|
||||||
xmlSetProp (itemNode, (const xmlChar*)"minPrice", (const xmlChar*)NLMISC::toString(item.minPrice).c_str());
|
xmlSetProp (itemNode, (const xmlChar*)"minPrice", (const xmlChar*)NLMISC::toString(item.minPrice).c_str());
|
||||||
xmlSetProp (itemNode, (const xmlChar*)"maxPrice", (const xmlChar*)NLMISC::toString(item.maxPrice).c_str());
|
xmlSetProp (itemNode, (const xmlChar*)"maxPrice", (const xmlChar*)NLMISC::toString(item.maxPrice).c_str());
|
||||||
}
|
}
|
||||||
|
for(int i=0;i<removeBeforeEquip.size();i++)
|
||||||
|
{
|
||||||
|
xmlNodePtr removeNode = xmlNewChild(groupNode, NULL, (const xmlChar*)"remove", NULL);
|
||||||
|
xmlSetProp(removeNode, (const xmlChar*)"slot", (const xmlChar*)removeBeforeEquip[i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -107,6 +112,16 @@ void CItemGroup::readFrom(xmlNodePtr node)
|
||||||
if(item.sheetName != "unknown.unknown")
|
if(item.sheetName != "unknown.unknown")
|
||||||
Items.push_back(item);
|
Items.push_back(item);
|
||||||
}
|
}
|
||||||
|
if (strcmp((char*)curNode->name, "remove") == 0)
|
||||||
|
{
|
||||||
|
std::string slot;
|
||||||
|
ptrName = (char*) xmlGetProp(curNode, (xmlChar*)"slot");
|
||||||
|
if (ptrName) NLMISC::fromString((const char*)ptrName, slot);
|
||||||
|
nlinfo("Got a slot %s", slot.c_str());
|
||||||
|
if(SLOTTYPE::stringToSlotType(slot) != SLOTTYPE::UNDEFINED)
|
||||||
|
removeBeforeEquip.push_back(SLOTTYPE::stringToSlotType(slot));
|
||||||
|
}
|
||||||
|
|
||||||
curNode = curNode->next;
|
curNode = curNode->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -320,6 +335,21 @@ bool CItemGroupManager::equipGroup(std::string name, bool pullBefore)
|
||||||
}
|
}
|
||||||
|
|
||||||
if(pullBefore) moveGroup(name, INVENTORIES::TInventory::bag);
|
if(pullBefore) moveGroup(name, INVENTORIES::TInventory::bag);
|
||||||
|
//Start by unequipping all slot that user wants to unequip
|
||||||
|
for(int i=0; i < group->removeBeforeEquip.size(); i++)
|
||||||
|
{
|
||||||
|
SLOTTYPE::TSlotType slot = group->removeBeforeEquip[i];
|
||||||
|
nlinfo("removing slot %d", slot);
|
||||||
|
std::string dbPath;
|
||||||
|
if(slot > SLOTTYPE::RIGHT_HAND)
|
||||||
|
dbPath = "LOCAL:INVENTORY:HAND:";
|
||||||
|
else
|
||||||
|
dbPath = "LOCAL:INVENTORY:EQUIP:";
|
||||||
|
//offset by 1 : TSlotType begins at 1 for actual items (because of UNDEFINED), whereas dbPath start at 0
|
||||||
|
dbPath += NLMISC::toString((uint8)slot - 1);
|
||||||
|
nlinfo("Removing path %s", dbPath.c_str());
|
||||||
|
CInventoryManager::getInstance()->unequip(dbPath);
|
||||||
|
}
|
||||||
|
|
||||||
uint32 maxEquipTime = 0;
|
uint32 maxEquipTime = 0;
|
||||||
|
|
||||||
|
@ -333,7 +363,7 @@ bool CItemGroupManager::equipGroup(std::string name, bool pullBefore)
|
||||||
};
|
};
|
||||||
std::vector<CInventoryItem> duals;
|
std::vector<CInventoryItem> duals;
|
||||||
std::vector<CInventoryItem> items = matchingItems(group, INVENTORIES::TInventory::bag);
|
std::vector<CInventoryItem> items = matchingItems(group, INVENTORIES::TInventory::bag);
|
||||||
for(int i=0;i<items.size(); i++)
|
for(int i=0; i < items.size(); i++)
|
||||||
{
|
{
|
||||||
CInventoryItem item = items[i];
|
CInventoryItem item = items[i];
|
||||||
ITEM_TYPE::TItemType ItemType = item.pCS->asItemSheet()->ItemType;
|
ITEM_TYPE::TItemType ItemType = item.pCS->asItemSheet()->ItemType;
|
||||||
|
@ -352,7 +382,7 @@ bool CItemGroupManager::equipGroup(std::string name, bool pullBefore)
|
||||||
CInventoryManager::getInstance()->autoEquip(item.indexInBag, true);
|
CInventoryManager::getInstance()->autoEquip(item.indexInBag, true);
|
||||||
}
|
}
|
||||||
// Manually equip dual items
|
// Manually equip dual items
|
||||||
for(int i=0;i<duals.size();i++)
|
for(int i=0;i < duals.size();i++)
|
||||||
{
|
{
|
||||||
CInventoryItem item = duals[i];
|
CInventoryItem item = duals[i];
|
||||||
ITEM_TYPE::TItemType ItemType = item.pCS->asItemSheet()->ItemType;
|
ITEM_TYPE::TItemType ItemType = item.pCS->asItemSheet()->ItemType;
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include "interface_v3/inventory_manager.h"
|
#include "interface_v3/inventory_manager.h"
|
||||||
#include "interface_v3/dbctrl_sheet.h"
|
#include "interface_v3/dbctrl_sheet.h"
|
||||||
#include "game_share/inventories.h"
|
#include "game_share/inventories.h"
|
||||||
|
#include "game_share/slot_types.h"
|
||||||
|
|
||||||
struct CInventoryItem {
|
struct CInventoryItem {
|
||||||
public:
|
public:
|
||||||
|
@ -61,6 +62,7 @@ public:
|
||||||
|
|
||||||
std::string name;
|
std::string name;
|
||||||
std::vector<CItem> Items;
|
std::vector<CItem> Items;
|
||||||
|
std::vector<SLOTTYPE::TSlotType> removeBeforeEquip;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CItemGroupManager {
|
class CItemGroupManager {
|
||||||
|
|
Loading…
Reference in a new issue