add: INVENTORIES:hotbar

10-use-item-shortcut-client
bensaine 3 years ago
parent b6b67f7482
commit e7dec3d6b0

@ -2496,6 +2496,58 @@ class CHandlerRingXpCatalyserStopUse : public IActionHandler
}; };
REGISTER_ACTION_HANDLER( CHandlerRingXpCatalyserStopUse, "ring_xp_catalyser_stop_use" ); REGISTER_ACTION_HANDLER( CHandlerRingXpCatalyserStopUse, "ring_xp_catalyser_stop_use" );
// ***************************************************************************
class CHandlerUseHotbarItem : public IActionHandler
{
void execute(CCtrlBase * /* pCaller */, const std::string &sParams)
{
CInterfaceManager *pIM = CInterfaceManager::getInstance();
pIM->displaySystemInfo("use item: " + getParam(sParams, "slot") + " " + sParams);
sint64 slot;
if (!CInterfaceExpr::evalAsInt(getParam(sParams, "slot"), slot))
{
nlwarning("<CHandlerUseHotbarItem::execute> Can't retrieve counter.");
return;
}
if (slot > INVENTORIES::NbHotbarSlots) {
nlwarning("<CHandlerUseHotbarItem::execute> Slot out of range.");
return;
}
CDBCtrlSheet *pCS = getInventory().getHotbarSheet(slot);
if (!pCS)
{
nlwarning("<CHandlerUseHotbarItem::execute> Can't retrieve sheet.");
return;
}
const CItemSheet *pIS = pCS->asItemSheet();
if (!pIS)
{
nlwarning("<CHandlerUseHotbarItem::execute> Can't retrieve item.");
return;
}
ITEMFAMILY::EItemFamily fam = pIS->Family;
if (!getInventory().isUsableItem(pCS->getSheetId())) {
nlwarning("<CHandlerUseHotbarItem::execute> Item is not usable.");
return;
}
if (fam == ITEMFAMILY::ITEM_SAP_RECHARGE || fam == ITEMFAMILY::CRYSTALLIZED_SPELL)
{
sendToServerEnchantMessage((uint8)pCS->getInventoryIndex(), (uint16)pCS->getIndexInDB());
}
else if (fam == ITEMFAMILY::CONSUMABLE || fam == ITEMFAMILY::XP_CATALYSER)
{
sendMsgUseItem(uint16(pCS->getIndexInDB()));
}
}
};
REGISTER_ACTION_HANDLER( CHandlerUseHotbarItem, "use_hotbar_item" );
// *************************************************************************** // ***************************************************************************
// item groups // item groups

@ -324,6 +324,14 @@ CInventoryManager::CInventoryManager()
UIEquip2[i] = NULL; UIEquip2[i] = NULL;
} }
for (i = 0; i < MAX_HOTBARINV_ENTRIES; ++i)
{
Hotbar[i] = ServerHotbar[i] = 0;
UIHotbar[i] = NULL;
UIHotbar2[i] = NULL;
UIHotbar3[i] = NULL;
}
for (i = 0; i < MAX_BAGINV_ENTRIES; i++) for (i = 0; i < MAX_BAGINV_ENTRIES; i++)
{ {
BagItemEquipped[i]= false; BagItemEquipped[i]= false;
@ -391,6 +399,16 @@ CItemImage *CInventoryManager::getEquipItem(uint index)
return NULL; return NULL;
} }
// *************************************************************************************************
CItemImage *CInventoryManager::getHotbarItem(uint index)
{
nlassert(index < MAX_HOTBARINV_ENTRIES);
if (Hotbar[index] != 0)
return &Bag[Hotbar[index]];
else
return NULL;
}
// ************************************************************************************************* // *************************************************************************************************
CDBCtrlSheet *CInventoryManager::getHandSheet(uint index) CDBCtrlSheet *CInventoryManager::getHandSheet(uint index)
{ {
@ -403,6 +421,11 @@ CDBCtrlSheet *CInventoryManager::getEquipSheet(uint index)
return UIEquip[index]; return UIEquip[index];
} }
// *************************************************************************************************
CDBCtrlSheet *CInventoryManager::getHotbarSheet(uint index)
{
return UIHotbar[index];
}
// ************************************************************************************************* // *************************************************************************************************
CItemImage &CInventoryManager::getServerBagItem(uint index) CItemImage &CInventoryManager::getServerBagItem(uint index)
@ -481,6 +504,7 @@ void CInventoryManager::init()
Money = NLGUI::CDBManager::getInstance()->getDbProp(LOCAL_INVENTORY ":MONEY"); Money = NLGUI::CDBManager::getInstance()->getDbProp(LOCAL_INVENTORY ":MONEY");
initIndirection (LOCAL_INVENTORY ":HAND:", Hands, MAX_HANDINV_ENTRIES, true); initIndirection (LOCAL_INVENTORY ":HAND:", Hands, MAX_HANDINV_ENTRIES, true);
initIndirection (LOCAL_INVENTORY ":EQUIP:", Equip, MAX_EQUIPINV_ENTRIES, true); initIndirection (LOCAL_INVENTORY ":EQUIP:", Equip, MAX_EQUIPINV_ENTRIES, true);
initIndirection (LOCAL_INVENTORY ":HOTBAR:", Hotbar, MAX_HOTBARINV_ENTRIES, true);
// Init observers for auto equipment // Init observers for auto equipment
{ {
for (uint i = 0; i < MAX_BAGINV_ENTRIES; ++i) for (uint i = 0; i < MAX_BAGINV_ENTRIES; ++i)
@ -528,11 +552,11 @@ void CInventoryManager::init()
UIEquip[SLOT_EQUIPMENT::LEGS] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_ARMOR_LEGS)); UIEquip[SLOT_EQUIPMENT::LEGS] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_ARMOR_LEGS));
UIEquip[SLOT_EQUIPMENT::HANDS] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_ARMOR_HANDS)); UIEquip[SLOT_EQUIPMENT::HANDS] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_ARMOR_HANDS));
UIEquip[19] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_HOTBAR_1)); UIHotbar[0] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_HOTBAR_1));
UIEquip[20] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_HOTBAR_2)); UIHotbar[1] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_HOTBAR_2));
UIEquip[21] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_HOTBAR_3)); UIHotbar[2] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_HOTBAR_3));
UIEquip[22] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_HOTBAR_4)); UIHotbar[3] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_HOTBAR_4));
UIEquip[23] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_HOTBAR_5)); UIHotbar[4] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_HOTBAR_5));
UIEquip2[SLOT_EQUIPMENT::HEADDRESS] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_JEWL2_HEADDRESS)); UIEquip2[SLOT_EQUIPMENT::HEADDRESS] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_JEWL2_HEADDRESS));
UIEquip2[SLOT_EQUIPMENT::EARL] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_JEWL2_EARING_LEFT)); UIEquip2[SLOT_EQUIPMENT::EARL] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_JEWL2_EARING_LEFT));
@ -552,11 +576,17 @@ void CInventoryManager::init()
UIEquip2[SLOT_EQUIPMENT::LEGS] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_ARMR2_LEGS)); UIEquip2[SLOT_EQUIPMENT::LEGS] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_ARMR2_LEGS));
UIEquip2[SLOT_EQUIPMENT::HANDS] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_ARMR2_HANDS)); UIEquip2[SLOT_EQUIPMENT::HANDS] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_ARMR2_HANDS));
UIEquip2[19] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_HOTBAR2_1)); UIHotbar2[0] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_HOTBAR2_1));
UIEquip2[20] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_HOTBAR2_2)); UIHotbar2[1] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_HOTBAR2_2));
UIEquip2[21] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_HOTBAR2_3)); UIHotbar2[2] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_HOTBAR2_3));
UIEquip2[22] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_HOTBAR2_4)); UIHotbar2[3] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_HOTBAR2_4));
UIEquip2[23] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_HOTBAR2_5)); UIHotbar2[4] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_HOTBAR2_5));
UIHotbar3[0] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_HOTBAR3_1));
UIHotbar3[1] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_HOTBAR3_2));
UIHotbar3[2] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_HOTBAR3_3));
UIHotbar3[3] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_HOTBAR3_4));
UIHotbar3[4] = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(CTRL_HOTBAR3_5));
// Init ItemInfoObservers // Init ItemInfoObservers
{ {
@ -683,6 +713,23 @@ std::string CInventoryManager::getDBIndexPath(CDBCtrlSheet *pCS)
return string(LOCAL_INVENTORY) + ":EQUIP:" + toString(i); return string(LOCAL_INVENTORY) + ":EQUIP:" + toString(i);
} }
} }
for (i = 0; i < MAX_HOTBARINV_ENTRIES; ++i)
{
if (UIHotbar[i] == pCS)
{
return string(LOCAL_INVENTORY) + ":HOTBAR:" + toString(i);
}
if (UIHotbar2[i] == pCS)
{
return string(LOCAL_INVENTORY) + ":HOTBAR:" + toString(i);
}
if (UIHotbar3[i] == pCS)
{
return string(LOCAL_INVENTORY) + ":HOTBAR:" + toString(i);
}
}
return ""; return "";
} }
@ -1202,7 +1249,7 @@ void CInventoryManager::CDBEquipObs::update(ICDBNode* node)
{ {
CInterfaceManager *pIM = CInterfaceManager::getInstance(); CInterfaceManager *pIM = CInterfaceManager::getInstance();
string sTmp = node->getFullName(); string sTmp = node->getFullName();
string sIE, sIE2; // Interface Element string sIE, sIE2, sIE3; // Interface Element
CCDBNodeLeaf *pNL = dynamic_cast<CCDBNodeLeaf*>(node); CCDBNodeLeaf *pNL = dynamic_cast<CCDBNodeLeaf*>(node);
if (pNL == NULL) return; if (pNL == NULL) return;
if (strnicmp(sTmp.c_str(),"LOCAL:INVENTORY:HAND",20) == 0) if (strnicmp(sTmp.c_str(),"LOCAL:INVENTORY:HAND",20) == 0)
@ -1271,20 +1318,61 @@ void CInventoryManager::CDBEquipObs::update(ICDBNode* node)
// update Equips. // update Equips.
getInventory().Equip[index]= pNL->getValue16(); getInventory().Equip[index]= pNL->getValue16();
} }
else if (strnicmp(sTmp.c_str(),"LOCAL:INVENTORY:HOTBAR",22) == 0)
{
// Coming from hand
sTmp = sTmp.substr(23,sTmp.size());
sTmp = sTmp.substr(0,sTmp.rfind(':'));
sint index;
fromString(sTmp, index);
switch (index) {
case 0:
sIE = CTRL_HOTBAR_1;
sIE2 = CTRL_HOTBAR2_1;
sIE3 = CTRL_HOTBAR3_1;
break;
case 1:
sIE = CTRL_HOTBAR_2;
sIE2 = CTRL_HOTBAR2_2;
sIE3 = CTRL_HOTBAR3_2;
break;
case 2:
sIE = CTRL_HOTBAR_3;
sIE2 = CTRL_HOTBAR2_3;
sIE3 = CTRL_HOTBAR3_3;
break;
case 3:
sIE = CTRL_HOTBAR_4;
sIE2 = CTRL_HOTBAR2_4;
sIE3 = CTRL_HOTBAR3_4;
break;
case 4:
sIE = CTRL_HOTBAR_5;
sIE2 = CTRL_HOTBAR2_5;
sIE3 = CTRL_HOTBAR3_5;
break;
}
// update Hotbar.
getInventory().Hotbar[index]= pNL->getValue16();
}
else return; else return;
// Set database for wearing the right item // Set database for wearing the right item
CDBCtrlSheet *pCS = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(sIE)); CDBCtrlSheet *pCS = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(sIE));
CDBCtrlSheet *pCS2 = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(sIE2)); CDBCtrlSheet *pCS2 = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(sIE2));
CDBCtrlSheet *pCS3 = dynamic_cast<CDBCtrlSheet*>(CWidgetManager::getInstance()->getElementFromId(sIE3));
// Remove Last reference and update database // Remove Last reference and update database
sint16 oldVal = pNL->getOldValue16(); sint16 oldVal = pNL->getOldValue16();
sint16 newVal = pNL->getValue16(); sint16 newVal = pNL->getValue16();
if (oldVal != 0) if (sIE != CTRL_HOTBAR_1 && sIE != CTRL_HOTBAR_2 && sIE != CTRL_HOTBAR_3 && sIE != CTRL_HOTBAR_4 && sIE != CTRL_HOTBAR_5)
getInventory().unwearBagItem (oldVal-1); {
if (oldVal != 0)
getInventory().unwearBagItem (oldVal-1);
if (newVal != 0) if (newVal != 0)
getInventory().wearBagItem (newVal-1); getInventory().wearBagItem (newVal-1);
}
// Update Display // Update Display
if (newVal == 0) if (newVal == 0)
@ -1294,12 +1382,14 @@ void CInventoryManager::CDBEquipObs::update(ICDBNode* node)
{ {
if (pCS != NULL) pCS->setSheet(""); if (pCS != NULL) pCS->setSheet("");
if (pCS2 != NULL) pCS2->setSheet(""); if (pCS2 != NULL) pCS2->setSheet("");
if (pCS3 != NULL) pCS3->setSheet("");
} }
} }
else else
{ {
if (pCS != NULL) pCS->setSheet(LOCAL_INVENTORY ":BAG:"+ toString(newVal-1)); if (pCS != NULL) pCS->setSheet(LOCAL_INVENTORY ":BAG:"+ toString(newVal-1));
if (pCS2 != NULL) pCS2->setSheet(LOCAL_INVENTORY ":BAG:"+ toString(newVal-1)); if (pCS2 != NULL) pCS2->setSheet(LOCAL_INVENTORY ":BAG:"+ toString(newVal-1));
if (pCS3 != NULL) pCS3->setSheet(LOCAL_INVENTORY ":BAG:"+ toString(newVal-1));
} }
// Hands management // Hands management
@ -1431,6 +1521,7 @@ void CInventoryManager::CDBEquipObs::update(ICDBNode* node)
{ {
if (pCS != NULL) pCS->setSheet(""); if (pCS != NULL) pCS->setSheet("");
if (pCS2 != NULL) pCS2->setSheet(""); if (pCS2 != NULL) pCS2->setSheet("");
if (pCS3 != NULL) pCS3->setSheet("");
} }
} }
} }
@ -3211,143 +3302,143 @@ class CHandlerHotbarDropTo : public IActionHandler
CDBCtrlSheet *pCSDst = dynamic_cast<CDBCtrlSheet*>(pCaller); CDBCtrlSheet *pCSDst = dynamic_cast<CDBCtrlSheet*>(pCaller);
CAHManager::getInstance()->runActionHandler("swap_item", pCSDst, "src="+toString(pCSSrc->getId())); CAHManager::getInstance()->runActionHandler("swap_item", pCSDst, "src="+toString(pCSSrc->getId()));
getInventory().endDrag(); getInventory().endDrag();
if (!getInventory().isDragging()) // if (!getInventory().isDragging())
{ // {
CInterfaceGroup *pIG = CWidgetManager::getInstance()->getModalWindow(); // CInterfaceGroup *pIG = CWidgetManager::getInstance()->getModalWindow();
if (pIG == NULL) return; // if (pIG == NULL) return;
if (pIG->getId() != "ui:interface:bag_choose") return; // if (pIG->getId() != "ui:interface:bag_choose") return;
getInventory().beginDrag(NULL, CInventoryManager::TextList); // getInventory().beginDrag(NULL, CInventoryManager::TextList);
// Special case for choose in bag dialog // // Special case for choose in bag dialog
string src = getParam(Params, "src"); // string src = getParam(Params, "src");
CInterfaceElement *pElt = CWidgetManager::getInstance()->getElementFromId(src); // CInterfaceElement *pElt = CWidgetManager::getInstance()->getElementFromId(src);
CDBCtrlSheet *pCSSrc = dynamic_cast<CDBCtrlSheet*>(pElt); // CDBCtrlSheet *pCSSrc = dynamic_cast<CDBCtrlSheet*>(pElt);
CDBCtrlSheet *pCSDst = dynamic_cast<CDBCtrlSheet*>(pCaller); // CDBCtrlSheet *pCSDst = dynamic_cast<CDBCtrlSheet*>(pCaller);
string invPath = getInventory().getDBIndexPath(pCSSrc); // string invPath = getInventory().getDBIndexPath(pCSSrc);
string bagPath = pCSDst->getSheet(); // string bagPath = pCSDst->getSheet();
if (bagPath == "UI:EMPTY") // if (bagPath == "UI:EMPTY")
CAHManager::getInstance()->runActionHandler("swap_item", pCSDst, "src="+toString(pCSSrc->getId())); // CAHManager::getInstance()->runActionHandler("swap_item", pCSDst, "src="+toString(pCSSrc->getId()));
else // else
getInventory().equip (bagPath, invPath); // getInventory().equip (bagPath, invPath);
getInventory().endDrag(); // getInventory().endDrag();
return; // return;
} // }
string src = getParam(Params, "src"); // string src = getParam(Params, "src");
CInterfaceElement *pElt = CWidgetManager::getInstance()->getElementFromId(src); // CInterfaceElement *pElt = CWidgetManager::getInstance()->getElementFromId(src);
CDBCtrlSheet *pCSSrc = dynamic_cast<CDBCtrlSheet*>(pElt); // CDBCtrlSheet *pCSSrc = dynamic_cast<CDBCtrlSheet*>(pElt);
CDBCtrlSheet *pCSDst = dynamic_cast<CDBCtrlSheet*>(pCaller); // CDBCtrlSheet *pCSDst = dynamic_cast<CDBCtrlSheet*>(pCaller);
if (pCSSrc == NULL) return; // if (pCSSrc == NULL) return;
// Is the dragged sheet comes from an inventory list // // Is the dragged sheet comes from an inventory list
if (getInventory().isDraggingFromTextList() || getInventory().isDraggingFromIconList()) // if (getInventory().isDraggingFromTextList() || getInventory().isDraggingFromIconList())
{ // {
// If the destination is an equipment slot ? // // If the destination is an equipment slot ?
if (pCSDst != NULL) // if (pCSDst != NULL)
{ // {
string invPath = getInventory().getDBIndexPath(pCSDst); // Get the index in the equipment // string invPath = getInventory().getDBIndexPath(pCSDst); // Get the index in the equipment
if (!invPath.empty()) // if (!invPath.empty())
{ // {
// Drop to the slot ie write the database with the index of the slot // // Drop to the slot ie write the database with the index of the slot
string bagPath = pCSSrc->getSheet(); // Get the database branch of the dragged sheet // string bagPath = pCSSrc->getSheet(); // Get the database branch of the dragged sheet
if (pCSSrc && pCSSrc->getType() == CCtrlSheetInfo::SheetType_Item) // if (pCSSrc && pCSSrc->getType() == CCtrlSheetInfo::SheetType_Item)
if (pCSDst && pCSDst->getType() == CCtrlSheetInfo::SheetType_Item) // if (pCSDst && pCSDst->getType() == CCtrlSheetInfo::SheetType_Item)
{ // {
// If the destination slot match with the type of incoming item // // If the destination slot match with the type of incoming item
if (pCSDst->canDropItem(pCSSrc)) // if (pCSDst->canDropItem(pCSSrc))
{ // {
// So directly equip // // So directly equip
getInventory().equip(bagPath, invPath); // getInventory().equip(bagPath, invPath);
} // }
else // else
{ // {
// Else try to auto equip the player with the incoming item // // Else try to auto equip the player with the incoming item
const string sTmp = bagPath.substr(bagPath.rfind(':')+1,bagPath.size()); // const string sTmp = bagPath.substr(bagPath.rfind(':')+1,bagPath.size());
sint index; // sint index;
fromString(sTmp, index); // fromString(sTmp, index);
if (!getInventory().autoEquip(index, false)) // if (!getInventory().autoEquip(index, false))
getInventory().autoEquip(index, true); // getInventory().autoEquip(index, true);
} // }
} // }
getInventory().endDrag(); // getInventory().endDrag();
return; // return;
} // }
} // }
// If the destination is a list sheet // // If the destination is a list sheet
IListSheetBase *pListDst = dynamic_cast<IListSheetBase*>(pCaller); // IListSheetBase *pListDst = dynamic_cast<IListSheetBase*>(pCaller);
if ((pListDst == NULL) && (pCSDst != NULL)) // if ((pListDst == NULL) && (pCSDst != NULL))
pListDst = IListSheetBase::getListContaining(pCSDst); // pListDst = IListSheetBase::getListContaining(pCSDst);
IListSheetBase *pListSrc = IListSheetBase::getListContaining(pCSSrc); // IListSheetBase *pListSrc = IListSheetBase::getListContaining(pCSSrc);
if ((pListDst != NULL) && (pListSrc != NULL)) // if ((pListDst != NULL) && (pListSrc != NULL))
{ // {
// If the source list and destination list are the same // // If the source list and destination list are the same
if (pListDst == pListSrc) // if (pListDst == pListSrc)
{ // {
// no op // // no op
getInventory().endDrag(); // getInventory().endDrag();
return; // return;
} // }
else // Source list and destination list are not the same // else // Source list and destination list are not the same
{ // {
// Move the item to the destination list using the procedure move_to_xxx // // Move the item to the destination list using the procedure move_to_xxx
CDBGroupListSheetBag *pListDstText = dynamic_cast<CDBGroupListSheetBag*>(pListDst); // CDBGroupListSheetBag *pListDstText = dynamic_cast<CDBGroupListSheetBag*>(pListDst);
CDBGroupIconListBag *pListDstIcon = dynamic_cast<CDBGroupIconListBag*>(pListDst); // CDBGroupIconListBag *pListDstIcon = dynamic_cast<CDBGroupIconListBag*>(pListDst);
if (((pListDstText != NULL) && (pListDstText->getInvType() == CInventoryManager::InvBag)) || // if (((pListDstText != NULL) && (pListDstText->getInvType() == CInventoryManager::InvBag)) ||
((pListDstIcon != NULL) && (pListDstIcon->getInvType() == CInventoryManager::InvBag))) // ((pListDstIcon != NULL) && (pListDstIcon->getInvType() == CInventoryManager::InvBag)))
{ // {
CAHManager::getInstance()->runActionHandler("proc", pCSSrc, "move_to_bag"); // CAHManager::getInstance()->runActionHandler("proc", pCSSrc, "move_to_bag");
} // }
else if (((pListDstText != NULL) && ((pListDstText->getInvType() == CInventoryManager::InvPA0) || // else if (((pListDstText != NULL) && ((pListDstText->getInvType() == CInventoryManager::InvPA0) ||
(pListDstText->getInvType() == CInventoryManager::InvPA1) || // (pListDstText->getInvType() == CInventoryManager::InvPA1) ||
(pListDstText->getInvType() == CInventoryManager::InvPA2) || // (pListDstText->getInvType() == CInventoryManager::InvPA2) ||
(pListDstText->getInvType() == CInventoryManager::InvPA3) || // (pListDstText->getInvType() == CInventoryManager::InvPA3) ||
(pListDstText->getInvType() == CInventoryManager::InvPA4) || // (pListDstText->getInvType() == CInventoryManager::InvPA4) ||
(pListDstText->getInvType() == CInventoryManager::InvPA5) || // (pListDstText->getInvType() == CInventoryManager::InvPA5) ||
(pListDstText->getInvType() == CInventoryManager::InvPA6) // (pListDstText->getInvType() == CInventoryManager::InvPA6)
)) || // )) ||
((pListDstIcon != NULL) && ((pListDstIcon->getInvType() == CInventoryManager::InvPA0) || // ((pListDstIcon != NULL) && ((pListDstIcon->getInvType() == CInventoryManager::InvPA0) ||
(pListDstIcon->getInvType() == CInventoryManager::InvPA1) || // (pListDstIcon->getInvType() == CInventoryManager::InvPA1) ||
(pListDstIcon->getInvType() == CInventoryManager::InvPA2) || // (pListDstIcon->getInvType() == CInventoryManager::InvPA2) ||
(pListDstIcon->getInvType() == CInventoryManager::InvPA3) || // (pListDstIcon->getInvType() == CInventoryManager::InvPA3) ||
(pListDstIcon->getInvType() == CInventoryManager::InvPA4) || // (pListDstIcon->getInvType() == CInventoryManager::InvPA4) ||
(pListDstIcon->getInvType() == CInventoryManager::InvPA5) || // (pListDstIcon->getInvType() == CInventoryManager::InvPA5) ||
(pListDstIcon->getInvType() == CInventoryManager::InvPA6) // (pListDstIcon->getInvType() == CInventoryManager::InvPA6)
))) // )))
{ // {
string sTmp; // string sTmp;
if (pListDstText != NULL) sTmp = toString("%d",pListDstText->getInvType()-CInventoryManager::InvPA0); // if (pListDstText != NULL) sTmp = toString("%d",pListDstText->getInvType()-CInventoryManager::InvPA0);
if (pListDstIcon != NULL) sTmp = toString("%d",pListDstIcon->getInvType()-CInventoryManager::InvPA0); // if (pListDstIcon != NULL) sTmp = toString("%d",pListDstIcon->getInvType()-CInventoryManager::InvPA0);
nlinfo("ici :%s", sTmp.c_str()); // nlinfo("ici :%s", sTmp.c_str());
CAHManager::getInstance()->runActionHandler("proc", pCSSrc, "move_to_pa|"+sTmp); // CAHManager::getInstance()->runActionHandler("proc", pCSSrc, "move_to_pa|"+sTmp);
} // }
else if (((pListDstText != NULL) && (pListDstText->getInvType() == CInventoryManager::InvGuild)) || // else if (((pListDstText != NULL) && (pListDstText->getInvType() == CInventoryManager::InvGuild)) ||
((pListDstIcon != NULL) && (pListDstIcon->getInvType() == CInventoryManager::InvGuild))) // ((pListDstIcon != NULL) && (pListDstIcon->getInvType() == CInventoryManager::InvGuild)))
{ // {
CAHManager::getInstance()->runActionHandler("proc", pCSSrc, "move_to_guild"); // CAHManager::getInstance()->runActionHandler("proc", pCSSrc, "move_to_guild");
} // }
else if (((pListDstText != NULL) && (pListDstText->getInvType() == CInventoryManager::InvRoom)) || // else if (((pListDstText != NULL) && (pListDstText->getInvType() == CInventoryManager::InvRoom)) ||
((pListDstIcon != NULL) && (pListDstIcon->getInvType() == CInventoryManager::InvRoom))) // ((pListDstIcon != NULL) && (pListDstIcon->getInvType() == CInventoryManager::InvRoom)))
{ // {
CAHManager::getInstance()->runActionHandler("proc", pCSSrc, "move_to_room"); // CAHManager::getInstance()->runActionHandler("proc", pCSSrc, "move_to_room");
} // }
} // }
} // }
} // }
// Is the dragged sheet comes from another slot // // Is the dragged sheet comes from another slot
if (pCSDst != NULL) // if (pCSDst != NULL)
if (getInventory().isDraggingFromSlot()) // if (getInventory().isDraggingFromSlot())
{ // {
CAHManager::getInstance()->runActionHandler("swap_item", pCSDst, "src="+toString(pCSSrc->getId())); // CAHManager::getInstance()->runActionHandler("swap_item", pCSDst, "src="+toString(pCSSrc->getId()));
} // }
CAHManager::getInstance()->runActionHandler("inv_cannot_drop", pCSSrc); // CAHManager::getInstance()->runActionHandler("inv_cannot_drop", pCSSrc);
} }
}; };
REGISTER_ACTION_HANDLER( CHandlerHotbarDropTo, "hotbar_drop" ); REGISTER_ACTION_HANDLER( CHandlerHotbarDropTo, "hotbar_drop" );

@ -41,6 +41,7 @@ const uint MAX_TEMPINV_ENTRIES = INVENTORIES::NbTempInvSlots;
const uint MAX_BAGINV_ENTRIES = INVENTORIES::NbBagSlots; const uint MAX_BAGINV_ENTRIES = INVENTORIES::NbBagSlots;
const uint MAX_HANDINV_ENTRIES = 2; const uint MAX_HANDINV_ENTRIES = 2;
const uint MAX_EQUIPINV_ENTRIES = 19; const uint MAX_EQUIPINV_ENTRIES = 19;
const uint MAX_HOTBARINV_ENTRIES = INVENTORIES::NbHotbarSlots;
const uint MAX_ANIMALINV_ENTRIES = INVENTORIES::NbPackerSlots; const uint MAX_ANIMALINV_ENTRIES = INVENTORIES::NbPackerSlots;
const uint MAX_GUILDINV_ENTRIES = INVENTORIES::NbGuildSlots; const uint MAX_GUILDINV_ENTRIES = INVENTORIES::NbGuildSlots;
const uint MAX_ROOMINV_ENTRIES = INVENTORIES::NbRoomSlots; const uint MAX_ROOMINV_ENTRIES = INVENTORIES::NbRoomSlots;
@ -193,10 +194,14 @@ public:
CItemImage *getHandItem(uint index); CItemImage *getHandItem(uint index);
// get equip item (local inventory) // get equip item (local inventory)
CItemImage *getEquipItem(uint index); CItemImage *getEquipItem(uint index);
// get hotbar item (local inventory)
CItemImage *getHotbarItem(uint index);
// get hand item (local inventory) // get hand item (local inventory)
CDBCtrlSheet *getHandSheet(uint index); CDBCtrlSheet *getHandSheet(uint index);
// get equip item (local inventory) // get equip item (local inventory)
CDBCtrlSheet *getEquipSheet(uint index); CDBCtrlSheet *getEquipSheet(uint index);
// get hotbar item (local inventory)
CDBCtrlSheet *getHotbarSheet(uint index);
// get/set money // get/set money
uint64 getMoney() const; uint64 getMoney() const;
void setMoney(uint64 value); void setMoney(uint64 value);
@ -338,6 +343,10 @@ private:
sint32 Equip[MAX_EQUIPINV_ENTRIES]; sint32 Equip[MAX_EQUIPINV_ENTRIES];
CDBCtrlSheet *UIEquip[MAX_EQUIPINV_ENTRIES]; CDBCtrlSheet *UIEquip[MAX_EQUIPINV_ENTRIES];
CDBCtrlSheet *UIEquip2[MAX_EQUIPINV_ENTRIES]; CDBCtrlSheet *UIEquip2[MAX_EQUIPINV_ENTRIES];
sint32 Hotbar[MAX_HOTBARINV_ENTRIES];
CDBCtrlSheet *UIHotbar[MAX_HOTBARINV_ENTRIES];
CDBCtrlSheet *UIHotbar2[MAX_HOTBARINV_ENTRIES];
CDBCtrlSheet *UIHotbar3[MAX_HOTBARINV_ENTRIES];
NLMISC::CCDBNodeLeaf *Money; NLMISC::CCDBNodeLeaf *Money;
CItemImage PAInv[MAX_INVENTORY_ANIMAL][MAX_ANIMALINV_ENTRIES]; CItemImage PAInv[MAX_INVENTORY_ANIMAL][MAX_ANIMALINV_ENTRIES];
// SERVER INVENTORY // SERVER INVENTORY
@ -345,6 +354,7 @@ private:
CItemImage ServerTempInv[MAX_TEMPINV_ENTRIES]; CItemImage ServerTempInv[MAX_TEMPINV_ENTRIES];
sint32 ServerHands[MAX_HANDINV_ENTRIES]; sint32 ServerHands[MAX_HANDINV_ENTRIES];
sint32 ServerEquip[MAX_EQUIPINV_ENTRIES]; sint32 ServerEquip[MAX_EQUIPINV_ENTRIES];
sint32 ServerHotbar[MAX_EQUIPINV_ENTRIES];
NLMISC::CCDBNodeLeaf *ServerMoney; NLMISC::CCDBNodeLeaf *ServerMoney;
CItemImage ServerPAInv[MAX_INVENTORY_ANIMAL][MAX_ANIMALINV_ENTRIES]; CItemImage ServerPAInv[MAX_INVENTORY_ANIMAL][MAX_ANIMALINV_ENTRIES];
// Drag'n'Drop // Drag'n'Drop
@ -882,11 +892,11 @@ private:
#define CTRL_ARMOR_ARMS "ui:interface:inv_equip:content:equip:armors:arms" #define CTRL_ARMOR_ARMS "ui:interface:inv_equip:content:equip:armors:arms"
#define CTRL_ARMOR_HANDS "ui:interface:inv_equip:content:equip:armors:hands" #define CTRL_ARMOR_HANDS "ui:interface:inv_equip:content:equip:armors:hands"
#define CTRL_HOTBAR_1 "ui:interface:inv_equip:content:equip:hotbar:hotbar1" #define CTRL_HOTBAR_1 "ui:interface:inv_equip:content:equip:hotbar_c:hotbar:hotbar1"
#define CTRL_HOTBAR_2 "ui:interface:inv_equip:content:equip:hotbar:hotbar2" #define CTRL_HOTBAR_2 "ui:interface:inv_equip:content:equip:hotbar_c:hotbar:hotbar2"
#define CTRL_HOTBAR_3 "ui:interface:inv_equip:content:equip:hotbar:hotbar3" #define CTRL_HOTBAR_3 "ui:interface:inv_equip:content:equip:hotbar_c:hotbar:hotbar3"
#define CTRL_HOTBAR_4 "ui:interface:inv_equip:content:equip:hotbar:hotbar4" #define CTRL_HOTBAR_4 "ui:interface:inv_equip:content:equip:hotbar_c:hotbar:hotbar4"
#define CTRL_HOTBAR_5 "ui:interface:inv_equip:content:equip:hotbar:hotbar5" #define CTRL_HOTBAR_5 "ui:interface:inv_equip:content:equip:hotbar_c:hotbar:hotbar5"
#define CTRL_JEWL2_EARING_LEFT "ui:interface:inventory:content:equip:jewelry:earing_l" #define CTRL_JEWL2_EARING_LEFT "ui:interface:inventory:content:equip:jewelry:earing_l"
#define CTRL_JEWL2_BRACELET_LEFT "ui:interface:inventory:content:equip:jewelry:bracelet_l" #define CTRL_JEWL2_BRACELET_LEFT "ui:interface:inventory:content:equip:jewelry:bracelet_l"
@ -906,11 +916,17 @@ private:
#define CTRL_ARMR2_ARMS "ui:interface:inventory:content:equip:armors:arms" #define CTRL_ARMR2_ARMS "ui:interface:inventory:content:equip:armors:arms"
#define CTRL_ARMR2_HANDS "ui:interface:inventory:content:equip:armors:hands" #define CTRL_ARMR2_HANDS "ui:interface:inventory:content:equip:armors:hands"
#define CTRL_HOTBAR2_1 "ui:interface:inventory:content:equip:hotbar:hotbar1" #define CTRL_HOTBAR2_1 "ui:interface:inventory:content:equip:hotbar_c:hotbar:hotbar1"
#define CTRL_HOTBAR2_2 "ui:interface:inventory:content:equip:hotbar:hotbar2" #define CTRL_HOTBAR2_2 "ui:interface:inventory:content:equip:hotbar_c:hotbar:hotbar2"
#define CTRL_HOTBAR2_3 "ui:interface:inventory:content:equip:hotbar:hotbar3" #define CTRL_HOTBAR2_3 "ui:interface:inventory:content:equip:hotbar_c:hotbar:hotbar3"
#define CTRL_HOTBAR2_4 "ui:interface:inventory:content:equip:hotbar:hotbar4" #define CTRL_HOTBAR2_4 "ui:interface:inventory:content:equip:hotbar_c:hotbar:hotbar4"
#define CTRL_HOTBAR2_5 "ui:interface:inventory:content:equip:hotbar:hotbar5" #define CTRL_HOTBAR2_5 "ui:interface:inventory:content:equip:hotbar_c:hotbar:hotbar5"
#define CTRL_HOTBAR3_1 "ui:interface:inv_hotbar:content:hot:hotbar:hotbar1"
#define CTRL_HOTBAR3_2 "ui:interface:inv_hotbar:content:hot:hotbar:hotbar2"
#define CTRL_HOTBAR3_3 "ui:interface:inv_hotbar:content:hot:hotbar:hotbar3"
#define CTRL_HOTBAR3_4 "ui:interface:inv_hotbar:content:hot:hotbar:hotbar4"
#define CTRL_HOTBAR3_5 "ui:interface:inv_hotbar:content:hot:hotbar:hotbar5"
#endif // RY_INVENTORY_MANAGER_H #endif // RY_INVENTORY_MANAGER_H

@ -49,6 +49,7 @@ namespace INVENTORIES
NL_STRING_CONVERSION_TABLE_ENTRY(reward_sharing) NL_STRING_CONVERSION_TABLE_ENTRY(reward_sharing)
NL_STRING_CONVERSION_TABLE_ENTRY(guild) NL_STRING_CONVERSION_TABLE_ENTRY(guild)
NL_STRING_CONVERSION_TABLE_ENTRY(player_room) NL_STRING_CONVERSION_TABLE_ENTRY(player_room)
NL_STRING_CONVERSION_TABLE_ENTRY(hotbar)
NL_END_STRING_CONVERSION_TABLE(TInventory, InventoryToString, UNDEFINED) NL_END_STRING_CONVERSION_TABLE(TInventory, InventoryToString, UNDEFINED)
@ -108,6 +109,7 @@ namespace INVENTORIES
// "", // exchange_proposition // "", // exchange_proposition
"", // guild "", // guild
"", // player_room "", // player_room
"HOTBAR", // hotbar
"" // unknown "" // unknown
}; };

@ -178,6 +178,7 @@ namespace INVENTORIES
reward_sharing, // 15 fake inventory, not in database.xml. Used by the item info protocol only reward_sharing, // 15 fake inventory, not in database.xml. Used by the item info protocol only
guild, // 16 (warning: number stored in guild saved file) guild, // 16 (warning: number stored in guild saved file)
player_room, // 17 player_room, // 17
hotbar, // 18
NUM_ALL_INVENTORY // warning: distinct from NUM_INVENTORY NUM_ALL_INVENTORY // warning: distinct from NUM_INVENTORY
}; };
@ -262,6 +263,7 @@ namespace INVENTORIES
const uint NbRoomSlots = 1000; const uint NbRoomSlots = 1000;
const uint NbGuildSlots = 1000; const uint NbGuildSlots = 1000;
const uint NbTempInvSlots = 16; const uint NbTempInvSlots = 16;
const uint NbHotbarSlots = 5;
enum TItemPropId enum TItemPropId
{ {

@ -130,8 +130,7 @@ namespace ITEMFAMILY
fam == ITEM_SAP_RECHARGE || fam == ITEM_SAP_RECHARGE ||
fam == CRYSTALLIZED_SPELL || fam == CRYSTALLIZED_SPELL ||
fam == CONSUMABLE || fam == CONSUMABLE ||
fam == XP_CATALYSER || fam == XP_CATALYSER;
fam == TELEPORT;
} }

Loading…
Cancel
Save