10-use-item-shortcut-client
bensaine 3 years ago
parent fe4c39b593
commit df24bf6129

@ -1079,41 +1079,6 @@ class CCanDropToExchange : public IActionHandler
};
REGISTER_ACTION_HANDLER (CCanDropToExchange, "can_drop_to_exchange");
// **********************************************************************************************************
class CCanDropToHotbar : public IActionHandler
{
virtual void execute (CCtrlBase *pCaller, const string &Params)
{
CInterfaceManager *pIM = CInterfaceManager::getInstance();
nlinfo("hey");
string src = getParam(Params, "src");
CInterfaceElement *pElt = CWidgetManager::getInstance()->getElementFromId(src);
CDBCtrlSheet *pCSSrc = dynamic_cast<CDBCtrlSheet*>(pElt);
CDBCtrlSheet *pCSDst = dynamic_cast<CDBCtrlSheet*>(pCaller);
if (!pCSSrc || !pCSDst) return;
// Exchange can only be done from bag to exchange inventories
uint32 srcInventory = pCSSrc->getSecondIndexInDB();
if (
(srcInventory == INVENTORIES::bag ||
srcInventory == INVENTORIES::pet_animal1 ||
srcInventory == INVENTORIES::pet_animal2 ||
srcInventory == INVENTORIES::pet_animal3 ||
srcInventory == INVENTORIES::pet_animal4 ||
srcInventory == INVENTORIES::pet_animal5 ||
srcInventory == INVENTORIES::pet_animal6 ||
srcInventory == INVENTORIES::pet_animal7 ||
srcInventory == INVENTORIES::player_room)
&& getInventory().isInventoryAvailable((INVENTORIES::TInventory) pCSSrc->getSecondIndexInDB())
&& getInventory().isUsableItem(pCSSrc->getSheetId())
)
{
pCSDst->setCanDrop ( true );
}
}
};
REGISTER_ACTION_HANDLER (CCanDropToHotbar, "can_drop_to_hotbar");
// **********************************************************************************************************
/** Clear the selected sheet

@ -3789,12 +3789,6 @@ bool CDBCtrlSheet::canDropItem(CDBCtrlSheet *src) const
bf|= 1<<SLOTTYPE::RIGHT_HAND_EXCLUSIVE;
}
string invPath = getInventory().getDBIndexPath(src);
if ( strnicmp(invPath.c_str(),"LOCAL:INVENTORY:HOTBAR",22) == 0 && getInventory().isUsableItem(src->getSheetId()) )
{
return true;
}
// Look if one slot solution match.
if( pIS->SlotBF & bf )
{

@ -1375,14 +1375,11 @@ void CInventoryManager::CDBEquipObs::update(ICDBNode* node)
// Remove Last reference and update database
sint16 oldVal = pNL->getOldValue16();
sint16 newVal = pNL->getValue16();
if (sIE != CTRL_HOTBAR_1 && sIE != CTRL_HOTBAR_2 && sIE != CTRL_HOTBAR_3 && sIE != CTRL_HOTBAR_4 && sIE != CTRL_HOTBAR_5)
{
if (oldVal != 0)
getInventory().unwearBagItem (oldVal-1);
if (oldVal != 0)
getInventory().unwearBagItem (oldVal-1);
if (newVal != 0)
getInventory().wearBagItem (newVal-1);
}
if (newVal != 0)
getInventory().wearBagItem (newVal-1);
// Update Display
if (newVal == 0)
@ -3123,7 +3120,7 @@ class CHandlerInvDropTo : public IActionHandler
{
CInterfaceGroup *pIG = CWidgetManager::getInstance()->getModalWindow();
if (pIG == NULL) return;
if (pIG->getId() != "ui:interface:bag_choose" || pIG->getId() != "ui:interface:hotbar_choose") return;
if (pIG->getId() != "ui:interface:bag_choose" && pIG->getId() != "ui:interface:hotbar_choose") return;
getInventory().beginDrag(NULL, CInventoryManager::TextList);
// Special case for choose in bag dialog
@ -3286,172 +3283,39 @@ class CHandlerInvCannotDrop : public IActionHandler
{
CDBCtrlSheet *pCSDst = dynamic_cast<CDBCtrlSheet*>(pCaller);
string invPath = getInventory().getDBIndexPath(pCSDst);
if (strnicmp(invPath.c_str(),"LOCAL:INVENTORY:HOTBAR",22) != 0) {
getInventory().unequip(invPath);
}
getInventory().unequip(invPath);
}
getInventory().endDrag();
}
};
REGISTER_ACTION_HANDLER( CHandlerInvCannotDrop, "inv_cannot_drop" );
// ***************************************************************************
class CHandlerHotbarDropTo : public IActionHandler
// **********************************************************************************************************
class CCanDropToHotbar : public IActionHandler
{
virtual void execute (CCtrlBase *pCaller, const string &Params)
{
CInterfaceManager *pIM = CInterfaceManager::getInstance();
// Check that we have drag'n'drop from inventory (list or slot)
// Or if we have launched the choose_bag modal
// To prevent other things to happens
nlinfo("hey");
string src = getParam(Params, "src");
CInterfaceElement *pElt = CWidgetManager::getInstance()->getElementFromId(src);
CDBCtrlSheet *pCSSrc = dynamic_cast<CDBCtrlSheet*>(pElt);
CDBCtrlSheet *pCSDst = dynamic_cast<CDBCtrlSheet*>(pCaller);
CAHManager::getInstance()->runActionHandler("swap_item", pCSDst, "src="+toString(pCSSrc->getId()));
getInventory().endDrag();
// if (!getInventory().isDragging())
// {
// CInterfaceGroup *pIG = CWidgetManager::getInstance()->getModalWindow();
// if (pIG == NULL) return;
// if (pIG->getId() != "ui:interface:bag_choose") return;
// getInventory().beginDrag(NULL, CInventoryManager::TextList);
// // Special case for choose in bag dialog
// string src = getParam(Params, "src");
// CInterfaceElement *pElt = CWidgetManager::getInstance()->getElementFromId(src);
// CDBCtrlSheet *pCSSrc = dynamic_cast<CDBCtrlSheet*>(pElt);
// CDBCtrlSheet *pCSDst = dynamic_cast<CDBCtrlSheet*>(pCaller);
// string invPath = getInventory().getDBIndexPath(pCSSrc);
// string bagPath = pCSDst->getSheet();
// if (bagPath == "UI:EMPTY")
// CAHManager::getInstance()->runActionHandler("swap_item", pCSDst, "src="+toString(pCSSrc->getId()));
// else
// getInventory().equip (bagPath, invPath);
// getInventory().endDrag();
// return;
// }
// string src = getParam(Params, "src");
// CInterfaceElement *pElt = CWidgetManager::getInstance()->getElementFromId(src);
// CDBCtrlSheet *pCSSrc = dynamic_cast<CDBCtrlSheet*>(pElt);
// CDBCtrlSheet *pCSDst = dynamic_cast<CDBCtrlSheet*>(pCaller);
// if (pCSSrc == NULL) return;
// // Is the dragged sheet comes from an inventory list
// if (getInventory().isDraggingFromTextList() || getInventory().isDraggingFromIconList())
// {
// // If the destination is an equipment slot ?
// if (pCSDst != NULL)
// {
// string invPath = getInventory().getDBIndexPath(pCSDst); // Get the index in the equipment
// if (!invPath.empty())
// {
// // 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
// if (pCSSrc && pCSSrc->getType() == CCtrlSheetInfo::SheetType_Item)
// if (pCSDst && pCSDst->getType() == CCtrlSheetInfo::SheetType_Item)
// {
// // If the destination slot match with the type of incoming item
// if (pCSDst->canDropItem(pCSSrc))
// {
// // So directly equip
// getInventory().equip(bagPath, invPath);
// }
// else
// {
// // Else try to auto equip the player with the incoming item
// const string sTmp = bagPath.substr(bagPath.rfind(':')+1,bagPath.size());
// sint index;
// fromString(sTmp, index);
// if (!getInventory().autoEquip(index, false))
// getInventory().autoEquip(index, true);
// }
// }
// getInventory().endDrag();
// return;
// }
// }
// // If the destination is a list sheet
// IListSheetBase *pListDst = dynamic_cast<IListSheetBase*>(pCaller);
// if ((pListDst == NULL) && (pCSDst != NULL))
// pListDst = IListSheetBase::getListContaining(pCSDst);
// IListSheetBase *pListSrc = IListSheetBase::getListContaining(pCSSrc);
// if ((pListDst != NULL) && (pListSrc != NULL))
// {
// // If the source list and destination list are the same
// if (pListDst == pListSrc)
// {
// // no op
// getInventory().endDrag();
// return;
// }
// else // Source list and destination list are not the same
// {
// // Move the item to the destination list using the procedure move_to_xxx
// CDBGroupListSheetBag *pListDstText = dynamic_cast<CDBGroupListSheetBag*>(pListDst);
// CDBGroupIconListBag *pListDstIcon = dynamic_cast<CDBGroupIconListBag*>(pListDst);
// if (((pListDstText != NULL) && (pListDstText->getInvType() == CInventoryManager::InvBag)) ||
// ((pListDstIcon != NULL) && (pListDstIcon->getInvType() == CInventoryManager::InvBag)))
// {
// CAHManager::getInstance()->runActionHandler("proc", pCSSrc, "move_to_bag");
// }
// else if (((pListDstText != NULL) && ((pListDstText->getInvType() == CInventoryManager::InvPA0) ||
// (pListDstText->getInvType() == CInventoryManager::InvPA1) ||
// (pListDstText->getInvType() == CInventoryManager::InvPA2) ||
// (pListDstText->getInvType() == CInventoryManager::InvPA3) ||
// (pListDstText->getInvType() == CInventoryManager::InvPA4) ||
// (pListDstText->getInvType() == CInventoryManager::InvPA5) ||
// (pListDstText->getInvType() == CInventoryManager::InvPA6)
// )) ||
// ((pListDstIcon != NULL) && ((pListDstIcon->getInvType() == CInventoryManager::InvPA0) ||
// (pListDstIcon->getInvType() == CInventoryManager::InvPA1) ||
// (pListDstIcon->getInvType() == CInventoryManager::InvPA2) ||
// (pListDstIcon->getInvType() == CInventoryManager::InvPA3) ||
// (pListDstIcon->getInvType() == CInventoryManager::InvPA4) ||
// (pListDstIcon->getInvType() == CInventoryManager::InvPA5) ||
// (pListDstIcon->getInvType() == CInventoryManager::InvPA6)
// )))
// {
// string sTmp;
// if (pListDstText != NULL) sTmp = toString("%d",pListDstText->getInvType()-CInventoryManager::InvPA0);
// if (pListDstIcon != NULL) sTmp = toString("%d",pListDstIcon->getInvType()-CInventoryManager::InvPA0);
// nlinfo("ici :%s", sTmp.c_str());
// CAHManager::getInstance()->runActionHandler("proc", pCSSrc, "move_to_pa|"+sTmp);
// }
// else if (((pListDstText != NULL) && (pListDstText->getInvType() == CInventoryManager::InvGuild)) ||
// ((pListDstIcon != NULL) && (pListDstIcon->getInvType() == CInventoryManager::InvGuild)))
// {
// CAHManager::getInstance()->runActionHandler("proc", pCSSrc, "move_to_guild");
// }
// else if (((pListDstText != NULL) && (pListDstText->getInvType() == CInventoryManager::InvRoom)) ||
// ((pListDstIcon != NULL) && (pListDstIcon->getInvType() == CInventoryManager::InvRoom)))
// {
// CAHManager::getInstance()->runActionHandler("proc", pCSSrc, "move_to_room");
// }
// }
// }
// }
// // Is the dragged sheet comes from another slot
// if (pCSDst != NULL)
// if (getInventory().isDraggingFromSlot())
// {
// CAHManager::getInstance()->runActionHandler("swap_item", pCSDst, "src="+toString(pCSSrc->getId()));
// }
// CAHManager::getInstance()->runActionHandler("inv_cannot_drop", pCSSrc);
CDBCtrlSheet *pCSDst = dynamic_cast<CDBCtrlSheet*>(pCaller);
if (!pCSSrc || !pCSDst) return;
// Exchange can only be done from bag to exchange inventories
uint32 srcInventory = pCSSrc->getSecondIndexInDB();
if (
srcInventory == INVENTORIES::bag
&& getInventory().isInventoryAvailable((INVENTORIES::TInventory) pCSSrc->getSecondIndexInDB())
&& getInventory().isUsableItem(pCSSrc->getSheetId())
)
{
pCSDst->setCanDrop ( true );
}
}
};
REGISTER_ACTION_HANDLER( CHandlerHotbarDropTo, "hotbar_drop" );
REGISTER_ACTION_HANDLER (CCanDropToHotbar, "can_drop_to_hotbar");
// **********************************************************************************************************
class CHotbarLeftClickOnSlotHandler : public IActionHandler

Loading…
Cancel
Save