diff --git a/ryzom/client/src/interface_v3/action_handler_item.cpp b/ryzom/client/src/interface_v3/action_handler_item.cpp index da7e95fd8..67f0d18ee 100644 --- a/ryzom/client/src/interface_v3/action_handler_item.cpp +++ b/ryzom/client/src/interface_v3/action_handler_item.cpp @@ -562,7 +562,7 @@ static void openStackItem(CCtrlBase *pCaller, CDBCtrlSheet *pCSSrc, CDBCtrlSheet //===================================================================================================================== - static void sendExchangeAddToServer(uint16 srcSlotIndex, uint16 destSlotIndex, uint16 quantitySrc) + static void sendExchangeAddToServer(uint16 srcInvIndex, uint16 srcSlotIndex, uint16 destSlotIndex, uint16 quantitySrc) { CInterfaceManager *pIM= CInterfaceManager::getInstance(); @@ -571,6 +571,7 @@ static void openStackItem(CCtrlBase *pCaller, CDBCtrlSheet *pCSSrc, CDBCtrlSheet if(GenericMsgHeaderMngr.pushNameToStream(sMsg, out)) { // Swap all the Src (quantity= quantitySrc) to dest + out.serial(srcInvIndex); out.serial(srcSlotIndex); out.serial(destSlotIndex); out.serial(quantitySrc); @@ -615,7 +616,7 @@ static void openStackItem(CCtrlBase *pCaller, CDBCtrlSheet *pCSSrc, CDBCtrlSheet NLGUI::CDBManager::getInstance()->getDbProp("LOCAL:EXCHANGE:ACCEPTED")->setValue32(0); // send msg to server - sendExchangeAddToServer((uint16)src->getIndexInDB(), (uint8)dest->getIndexInDB(), (uint16)quantitySrc); + sendExchangeAddToServer((uint16) src->getSecondIndexInDB(), (uint16)src->getIndexInDB(), (uint8)dest->getIndexInDB(), (uint16)quantitySrc); } else { @@ -725,7 +726,7 @@ static void validateStackItem(CDBCtrlSheet *pCSSrc, CDBCtrlSheet *pCSDst, sint32 NLGUI::CDBManager::getInstance()->getDbProp("LOCAL:EXCHANGE:ACCEPTED")->setValue32(0); // send msg to server - sendExchangeAddToServer((uint16)pCSSrc->getIndexInDB(), (uint8)pCSDst->getIndexInDB(), (uint16)val); + sendExchangeAddToServer((uint16)pCSSrc->getSecondIndexInDB(), (uint16)pCSSrc->getIndexInDB(), (uint8)pCSDst->getIndexInDB(), (uint16)val); } } } @@ -1049,9 +1050,21 @@ class CCanDropToExchange : public IActionHandler if (!pCSSrc || !pCSDst) return; // Exchange can only be done from bag to exchange inventories - - if (pCSSrc->getSecondIndexInDB() == INVENTORIES::bag && - pCSDst->getSecondIndexInDB() == INVENTORIES::exchange) + 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::guild || + srcInventory == INVENTORIES::player_room) + && getInventory().isInventoryAvailable((INVENTORIES::TInventory) pCSSrc->getSecondIndexInDB()) + && pCSDst->getSecondIndexInDB() == INVENTORIES::exchange + ) { if (checkCanExchangeItem(pCSSrc)) {