diff --git a/ryzom/server/src/entities_game_service/game_item_manager/player_inv_xchg.cpp b/ryzom/server/src/entities_game_service/game_item_manager/player_inv_xchg.cpp index acef0766b..db9d163f4 100644 --- a/ryzom/server/src/entities_game_service/game_item_manager/player_inv_xchg.cpp +++ b/ryzom/server/src/entities_game_service/game_item_manager/player_inv_xchg.cpp @@ -87,6 +87,10 @@ bool CExchangeView::putItemInExchange(uint32 bagSlot, uint32 exchangeSlot, uint3 if (!item->getMovable() && _InterlocutorView != NULL && form->Family != ITEMFAMILY::PET_ANIMAL_TICKET && (!form->DropOrSell || item->getUnMovable())) return false; + // pet animal ticket must be exchangeable only if shardExchangeable + if (form->Family == ITEMFAMILY::PET_ANIMAL_TICKET && !form->ShardExchangeable) + return false; + // Can't trade items locked by owner if (item->getLockedByOwner()) return false; @@ -318,7 +322,7 @@ void CExchangeView::onInterlocutorSlotChanged(uint32 interlocutorGiveSlot) { const INVENTORIES::TItemId &itemId = item->getItemId(); RM_FABER_STAT_TYPE::TRMStatType itemBestStat = RM_FABER_STAT_TYPE::Unknown; - + if (item->getCraftParameters() != NULL) itemBestStat = item->getCraftParameters()->getBestItemStat(); @@ -371,7 +375,7 @@ void CExchangeView::onInterlocutorSlotChanged(uint32 interlocutorGiveSlot) // getCharacter()->_PropertyDatabase.setProp(sDBPath+":PREREQUISIT_VALID", 0); recvItem.setPREREQUISIT_VALID(getCharacter()->_PropertyDatabase, false); } - + // increment the info version // sint64 nPropValue = getCharacter()->_PropertyDatabase.getProp(sDBPath+":INFO_VERSION"); uint8 nPropValue = recvItem.getINFO_VERSION(getCharacter()->_PropertyDatabase); @@ -393,7 +397,7 @@ void CExchangeView::updateExchangeSlot(uint32 exchangeSlot) { const INVENTORIES::TItemId &itemId = item->getItemId(); RM_FABER_STAT_TYPE::TRMStatType itemBestStat = RM_FABER_STAT_TYPE::Unknown; - + if (item->getCraftParameters() != NULL) itemBestStat = item->getCraftParameters()->getBestItemStat(); @@ -446,7 +450,7 @@ void CExchangeView::updateExchangeSlot(uint32 exchangeSlot) // getCharacter()->_PropertyDatabase.setProp(sDBPath+":PREREQUISIT_VALID", 0); giveItem.setPREREQUISIT_VALID(getCharacter()->_PropertyDatabase, false); } - + // increment the info version // sint64 nPropValue = getCharacter()->_PropertyDatabase.getProp(sDBPath+":INFO_VERSION"); uint8 nPropValue = giveItem.getINFO_VERSION(getCharacter()->_PropertyDatabase);