mirror of
https://github.com/araxiaonline/TrinityCore.git
synced 2026-06-18 14:10:18 -04:00
Core/Items: fixed inventory item moving/splitting
This commit is contained in:
@@ -13091,7 +13091,7 @@ void Player::SendEquipError(InventoryResult msg, Item* pItem, Item* pItem2, uint
|
||||
WorldPacket data(SMSG_INVENTORY_CHANGE_FAILURE, (msg == EQUIP_ERR_CANT_EQUIP_LEVEL_I ? 22 : 18));
|
||||
data << uint8(msg);
|
||||
|
||||
if (msg != EQUIP_ERR_OK)
|
||||
//if (msg != EQUIP_ERR_OK)
|
||||
{
|
||||
data << (pItem ? pItem->GetGUID() : ObjectGuid::Empty);
|
||||
data << (pItem2 ? pItem2->GetGUID() : ObjectGuid::Empty);
|
||||
@@ -13106,21 +13106,6 @@ void Player::SendEquipError(InventoryResult msg, Item* pItem, Item* pItem2, uint
|
||||
data << uint32(proto ? proto->RequiredLevel : 0);
|
||||
break;
|
||||
}
|
||||
case EQUIP_ERR_NO_OUTPUT: // no idea about this one...
|
||||
{
|
||||
data << uint64(0); // item guid
|
||||
data << uint32(0); // slot
|
||||
data << uint64(0); // container
|
||||
break;
|
||||
}
|
||||
case EQUIP_ERR_ITEM_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS:
|
||||
case EQUIP_ERR_ITEM_MAX_LIMIT_CATEGORY_SOCKETED_EXCEEDED_IS:
|
||||
case EQUIP_ERR_ITEM_MAX_LIMIT_CATEGORY_EQUIPPED_EXCEEDED_IS:
|
||||
{
|
||||
ItemTemplate const* proto = pItem ? pItem->GetTemplate() : sObjectMgr->GetItemTemplate(itemid);
|
||||
data << uint32(proto ? proto->ItemLimitCategory : 0);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -34,12 +34,19 @@
|
||||
|
||||
void WorldSession::HandleSplitItemOpcode(WorldPacket& recvData)
|
||||
{
|
||||
uint32 itemCount = recvData.ReadBits(2);
|
||||
|
||||
if (itemCount)
|
||||
{
|
||||
TC_LOG_ERROR("network", "WORLD: HandleSplitItemOpcode - Invalid itemCount (%u)", itemCount);
|
||||
return;
|
||||
}
|
||||
//TC_LOG_DEBUG("network", "WORLD: CMSG_SPLIT_ITEM");
|
||||
uint8 srcbag, srcslot, dstbag, dstslot;
|
||||
uint32 count;
|
||||
|
||||
recvData >> srcbag >> srcslot >> dstbag >> dstslot >> count;
|
||||
//TC_LOG_DEBUG("STORAGE: receive srcbag = %u, srcslot = %u, dstbag = %u, dstslot = %u, count = %u", srcbag, srcslot, dstbag, dstslot, count);
|
||||
TC_LOG_DEBUG("network", "STORAGE: receive srcbag = %u, srcslot = %u, dstbag = %u, dstslot = %u, count = %u", srcbag, srcslot, dstbag, dstslot, count);
|
||||
|
||||
uint16 src = ((srcbag << 8) | srcslot);
|
||||
uint16 dst = ((dstbag << 8) | dstslot);
|
||||
@@ -67,11 +74,25 @@ void WorldSession::HandleSplitItemOpcode(WorldPacket& recvData)
|
||||
|
||||
void WorldSession::HandleSwapInvItemOpcode(WorldPacket& recvData)
|
||||
{
|
||||
uint32 itemCount = recvData.ReadBits(2);
|
||||
|
||||
if (itemCount != 2)
|
||||
{
|
||||
TC_LOG_ERROR("network", "WORLD: HandleSwapInvItemOpcode - Invalid itemCount (%u)", itemCount);
|
||||
return;
|
||||
}
|
||||
|
||||
for (uint32 i = 0; i < itemCount; ++i)
|
||||
{
|
||||
recvData.read_skip<uint8>(); // bag
|
||||
recvData.read_skip<uint8>(); // slot
|
||||
}
|
||||
|
||||
//TC_LOG_DEBUG("network", "WORLD: CMSG_SWAP_INV_ITEM");
|
||||
uint8 srcslot, dstslot;
|
||||
|
||||
recvData >> dstslot >> srcslot;
|
||||
//TC_LOG_DEBUG("STORAGE: receive srcslot = %u, dstslot = %u", srcslot, dstslot);
|
||||
TC_LOG_DEBUG("network", "STORAGE: receive srcslot = %u, dstslot = %u", srcslot, dstslot);
|
||||
|
||||
// prevent attempt swap same item to current position generated by client at special checting sequence
|
||||
if (srcslot == dstslot)
|
||||
@@ -135,10 +156,17 @@ void WorldSession::HandleSwapItem(WorldPacket& recvData)
|
||||
TC_LOG_ERROR("network", "WORLD: HandleSwapItem - Invalid itemCount (%u)", itemCount);
|
||||
return;
|
||||
}
|
||||
//TC_LOG_DEBUG("network", "WORLD: CMSG_SWAP_ITEM");
|
||||
uint8 dstbag, dstslot, srcbag, srcslot, slotA, slotB;
|
||||
|
||||
recvData >> dstbag >> dstslot >> srcbag >> srcslot >> slotA >> slotB;
|
||||
for (uint32 i = 0; i < itemCount; ++i)
|
||||
{
|
||||
recvData.read_skip<uint8>();
|
||||
recvData.read_skip<uint8>();
|
||||
}
|
||||
|
||||
//TC_LOG_DEBUG("network", "WORLD: CMSG_SWAP_ITEM");
|
||||
uint8 dstbag, dstslot, srcbag, srcslot;
|
||||
|
||||
recvData >> dstbag >> srcbag >> dstslot >> srcslot;
|
||||
TC_LOG_DEBUG("network", "STORAGE: receive srcbag = %u, srcslot = %u, dstbag = %u, dstslot = %u", srcbag, srcslot, dstbag, dstslot);
|
||||
|
||||
uint16 src = ((srcbag << 8) | srcslot);
|
||||
@@ -701,11 +729,25 @@ void WorldSession::SendListInventory(ObjectGuid vendorGuid)
|
||||
|
||||
void WorldSession::HandleAutoStoreBagItemOpcode(WorldPacket& recvData)
|
||||
{
|
||||
uint32 itemCount = recvData.ReadBits(2);
|
||||
|
||||
if (itemCount)
|
||||
{
|
||||
TC_LOG_ERROR("network", "WORLD: HandleAutoStoreBagItemOpcode - Invalid itemCount (%u)", itemCount);
|
||||
return;
|
||||
}
|
||||
|
||||
/*for (uint32 i = 0; i < itemCount; ++i)
|
||||
{
|
||||
recvData.read_skip<uint8>();
|
||||
recvData.read_skip<uint8>();
|
||||
}*/
|
||||
|
||||
//TC_LOG_DEBUG("network", "WORLD: CMSG_AUTOSTORE_BAG_ITEM");
|
||||
uint8 srcbag, srcslot, dstbag;
|
||||
|
||||
recvData >> srcbag >> srcslot >> dstbag;
|
||||
//TC_LOG_DEBUG("STORAGE: receive srcbag = %u, srcslot = %u, dstbag = %u", srcbag, srcslot, dstbag);
|
||||
recvData >> srcbag >> dstbag >> srcslot;
|
||||
TC_LOG_DEBUG("network", "STORAGE: receive srcbag = %u, srcslot = %u, dstbag = %u", srcbag, srcslot, dstbag);
|
||||
|
||||
Item* pItem = _player->GetItemByPos(srcbag, srcslot);
|
||||
if (!pItem)
|
||||
|
||||
@@ -167,7 +167,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_AUTOBANK_ITEM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoBankItemOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_AUTOEQUIP_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoEquipItemOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_AUTOEQUIP_ITEM_SLOT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoEquipItemSlotOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_AUTOSTORE_BAG_ITEM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoStoreBagItemOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_AUTOSTORE_BAG_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoStoreBagItemOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_AUTOSTORE_BANK_ITEM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoStoreBankItemOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_AUTOSTORE_LOOT_ITEM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleAutostoreLootItemOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_AUTO_DECLINE_GUILD_INVITES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoDeclineGuildInvites );
|
||||
@@ -621,7 +621,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_SOCKET_GEMS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleSocketOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_SPELLCLICK, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleSpellClick );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_SPIRIT_HEALER_ACTIVATE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleSpiritHealerActivateOpcode);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_SPLIT_ITEM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleSplitItemOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_SPLIT_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSplitItemOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_STANDSTATECHANGE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleStandStateChangeOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_STOP_DANCE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_SUBMIT_BUG, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
@@ -630,7 +630,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_SUMMON_RESPONSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleSummonResponseOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_SUSPEND_COMMS_ACK, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_SUSPEND_TOKEN_RESPONSE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_SWAP_INV_ITEM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleSwapInvItemOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_SWAP_INV_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSwapInvItemOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_SWAP_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSwapItem );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_SYNC_DANCE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_TAXINODE_STATUS_QUERY, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::HandleTaxiNodeStatusQueryOpcode );
|
||||
@@ -1029,7 +1029,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INVALIDATE_DANCE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INVALIDATE_PLAYER, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INVALID_PROMOTION_CODE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INVENTORY_CHANGE_FAILURE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INVENTORY_CHANGE_FAILURE, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ITEM_ADD_PASSIVE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ITEM_COOLDOWN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ITEM_ENCHANT_TIME_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
|
||||
@@ -579,7 +579,7 @@ enum OpcodeClient : uint32
|
||||
CMSG_SOCKET_GEMS = 0xBADD,
|
||||
CMSG_SPELLCLICK = 0x0BC2,
|
||||
CMSG_SPIRIT_HEALER_ACTIVATE = 0xBADD,
|
||||
CMSG_SPLIT_ITEM = 0xBADD,
|
||||
CMSG_SPLIT_ITEM = 0x0795,
|
||||
CMSG_STANDSTATECHANGE = 0xBADD,
|
||||
CMSG_START_QUEST = 0xBADD,
|
||||
CMSG_STOP_DANCE = 0xBADD,
|
||||
@@ -590,8 +590,8 @@ enum OpcodeClient : uint32
|
||||
CMSG_SUMMON_RESPONSE = 0xBADD,
|
||||
CMSG_SUSPEND_COMMS_ACK = 0x0C56,
|
||||
CMSG_SUSPEND_TOKEN_RESPONSE = 0xBADD,
|
||||
CMSG_SWAP_INV_ITEM = 0xBADD,
|
||||
CMSG_SWAP_ITEM = 0x0F17,
|
||||
CMSG_SWAP_INV_ITEM = 0x0F17,
|
||||
CMSG_SWAP_ITEM = 0x0736,
|
||||
CMSG_SYNC_DANCE = 0xBADD,
|
||||
CMSG_TAXICLEARALLNODES = 0xBADD,
|
||||
CMSG_TAXIENABLEALLNODES = 0xBADD,
|
||||
@@ -1028,7 +1028,7 @@ enum OpcodeServer : uint32
|
||||
SMSG_INVALIDATE_DANCE = 0xBADD,
|
||||
SMSG_INVALIDATE_PLAYER = 0x0B37,
|
||||
SMSG_INVALID_PROMOTION_CODE = 0xBADD,
|
||||
SMSG_INVENTORY_CHANGE_FAILURE = 0xBADD,
|
||||
SMSG_INVENTORY_CHANGE_FAILURE = 0x0112,
|
||||
SMSG_ITEM_ADD_PASSIVE = 0xBADD,
|
||||
SMSG_ITEM_COOLDOWN = 0xBADD,
|
||||
SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x010D,
|
||||
|
||||
Reference in New Issue
Block a user