Core/Items:
- Added basic inventory item movements (packets need to be ported to new handlers after more testing) - Fixed some item visual bugs
This commit is contained in:
@@ -1078,12 +1078,14 @@ void Object::SetUInt64Value(uint16 index, uint64 value)
|
||||
|
||||
bool Object::AddGuidValue(uint16 index, ObjectGuid const& value)
|
||||
{
|
||||
ASSERT(index + 1 < m_valuesCount || PrintIndexError(index, true));
|
||||
ASSERT(index + 3 < m_valuesCount || PrintIndexError(index, true));
|
||||
if (!value.IsEmpty() && ((ObjectGuid*)&(m_uint32Values[index]))->IsEmpty())
|
||||
{
|
||||
*((ObjectGuid*)&(m_uint32Values[index])) = value;
|
||||
_changesMask.SetBit(index);
|
||||
_changesMask.SetBit(index + 1);
|
||||
_changesMask.SetBit(index + 2);
|
||||
_changesMask.SetBit(index + 3);
|
||||
|
||||
if (m_inWorld && !m_objectUpdated)
|
||||
{
|
||||
@@ -1099,13 +1101,15 @@ bool Object::AddGuidValue(uint16 index, ObjectGuid const& value)
|
||||
|
||||
bool Object::RemoveGuidValue(uint16 index, ObjectGuid const& value)
|
||||
{
|
||||
ASSERT(index + 1 < m_valuesCount || PrintIndexError(index, true));
|
||||
ASSERT(index + 3 < m_valuesCount || PrintIndexError(index, true));
|
||||
if (!value.IsEmpty() && *((ObjectGuid*)&(m_uint32Values[index])) == value)
|
||||
{
|
||||
m_uint32Values[index] = 0;
|
||||
m_uint32Values[index + 1] = 0;
|
||||
_changesMask.SetBit(index);
|
||||
_changesMask.SetBit(index + 1);
|
||||
_changesMask.SetBit(index + 2);
|
||||
_changesMask.SetBit(index + 3);
|
||||
|
||||
if (m_inWorld && !m_objectUpdated)
|
||||
{
|
||||
@@ -1186,12 +1190,14 @@ void Object::SetUInt16Value(uint16 index, uint8 offset, uint16 value)
|
||||
|
||||
void Object::SetGuidValue(uint16 index, ObjectGuid const& value)
|
||||
{
|
||||
ASSERT(index + 1 < m_valuesCount || PrintIndexError(index, true));
|
||||
ASSERT(index + 3 < m_valuesCount || PrintIndexError(index, true));
|
||||
if (*((ObjectGuid*)&(m_uint32Values[index])) != value)
|
||||
{
|
||||
*((ObjectGuid*)&(m_uint32Values[index])) = value;
|
||||
_changesMask.SetBit(index);
|
||||
_changesMask.SetBit(index + 1);
|
||||
_changesMask.SetBit(index + 2);
|
||||
_changesMask.SetBit(index + 3);
|
||||
|
||||
if (m_inWorld && !m_objectUpdated)
|
||||
{
|
||||
|
||||
@@ -12012,14 +12012,14 @@ void Player::SetVisibleItemSlot(uint8 slot, Item* pItem)
|
||||
{
|
||||
if (pItem)
|
||||
{
|
||||
SetUInt32Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENTRY_OFFSET + (slot * 2), pItem->GetVisibleEntry());
|
||||
SetUInt16Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENCHANTMENT_OFFSET + (slot * 2), 0, pItem->GetEnchantmentId(PERM_ENCHANTMENT_SLOT));
|
||||
SetUInt16Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENCHANTMENT_OFFSET + (slot * 2), 1, pItem->GetEnchantmentId(TEMP_ENCHANTMENT_SLOT));
|
||||
SetUInt32Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENTRY_OFFSET + (slot * 3), pItem->GetVisibleEntry());
|
||||
SetUInt16Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENCHANTMENT_OFFSET + (slot * 3), 0, pItem->GetEnchantmentId(PERM_ENCHANTMENT_SLOT));
|
||||
SetUInt16Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENCHANTMENT_OFFSET + (slot * 3), 1, pItem->GetEnchantmentId(TEMP_ENCHANTMENT_SLOT));
|
||||
}
|
||||
else
|
||||
{
|
||||
SetUInt32Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENTRY_OFFSET + (slot * 2), 0);
|
||||
SetUInt32Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENCHANTMENT_OFFSET + (slot * 2), 0);
|
||||
SetUInt32Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENTRY_OFFSET + (slot * 3), 0);
|
||||
SetUInt32Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENCHANTMENT_OFFSET + (slot * 3), 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13968,10 +13968,10 @@ void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool
|
||||
|
||||
// visualize enchantment at player and equipped items
|
||||
if (slot == PERM_ENCHANTMENT_SLOT)
|
||||
SetUInt16Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENCHANTMENT_OFFSET + (item->GetSlot() * 2), 0, apply ? item->GetEnchantmentId(slot) : 0);
|
||||
|
||||
SetUInt16Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENCHANTMENT_OFFSET + (item->GetSlot() * 3), 0, apply ? item->GetEnchantmentId(slot) : 0);
|
||||
|
||||
if (slot == TEMP_ENCHANTMENT_SLOT)
|
||||
SetUInt16Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENCHANTMENT_OFFSET + (item->GetSlot() * 2), 1, apply ? item->GetEnchantmentId(slot) : 0);
|
||||
SetUInt16Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENCHANTMENT_OFFSET + (item->GetSlot() * 3), 1, apply ? item->GetEnchantmentId(slot) : 0);
|
||||
|
||||
if (apply_dur)
|
||||
{
|
||||
@@ -19188,7 +19188,7 @@ void Player::SaveToDB(bool create /*=false*/)
|
||||
|
||||
ss.str("");
|
||||
// cache equipment...
|
||||
for (uint32 i = 0; i < EQUIPMENT_SLOT_END * 2; ++i)
|
||||
for (uint32 i = 0; i < EQUIPMENT_SLOT_END * 3; ++i)
|
||||
ss << GetUInt32Value(PLAYER_VISIBLE_ITEM + i) << ' ';
|
||||
|
||||
// ...and bags for enum opcode
|
||||
@@ -19317,7 +19317,7 @@ void Player::SaveToDB(bool create /*=false*/)
|
||||
|
||||
ss.str("");
|
||||
// cache equipment...
|
||||
for (uint32 i = 0; i < EQUIPMENT_SLOT_END * 2; ++i)
|
||||
for (uint32 i = 0; i < EQUIPMENT_SLOT_END * 3; ++i)
|
||||
ss << GetUInt32Value(PLAYER_VISIBLE_ITEM + i) << ' ';
|
||||
|
||||
// ...and bags for enum opcode
|
||||
|
||||
@@ -128,11 +128,18 @@ void WorldSession::HandleAutoEquipItemSlotOpcode(WorldPacket& recvData)
|
||||
|
||||
void WorldSession::HandleSwapItem(WorldPacket& recvData)
|
||||
{
|
||||
//TC_LOG_DEBUG("network", "WORLD: CMSG_SWAP_ITEM");
|
||||
uint8 dstbag, dstslot, srcbag, srcslot;
|
||||
uint32 itemCount = recvData.ReadBits(2);
|
||||
|
||||
recvData >> dstbag >> dstslot >> srcbag >> srcslot;
|
||||
//TC_LOG_DEBUG("STORAGE: receive srcbag = %u, srcslot = %u, dstbag = %u, dstslot = %u", srcbag, srcslot, dstbag, dstslot);
|
||||
if (itemCount != 2)
|
||||
{
|
||||
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;
|
||||
TC_LOG_DEBUG("network", "STORAGE: receive srcbag = %u, srcslot = %u, dstbag = %u, dstslot = %u", srcbag, srcslot, dstbag, dstslot);
|
||||
|
||||
uint16 src = ((srcbag << 8) | srcslot);
|
||||
uint16 dst = ((dstbag << 8) | dstslot);
|
||||
@@ -170,11 +177,19 @@ void WorldSession::HandleSwapItem(WorldPacket& recvData)
|
||||
|
||||
void WorldSession::HandleAutoEquipItemOpcode(WorldPacket& recvData)
|
||||
{
|
||||
//TC_LOG_DEBUG("network", "WORLD: CMSG_AUTOEQUIP_ITEM");
|
||||
uint8 srcbag, srcslot;
|
||||
uint32 itemCount = recvData.ReadBits(2);
|
||||
|
||||
recvData >> srcbag >> srcslot;
|
||||
//TC_LOG_DEBUG("STORAGE: receive srcbag = %u, srcslot = %u", srcbag, srcslot);
|
||||
if (itemCount != 1)
|
||||
{
|
||||
TC_LOG_ERROR("network", "WORLD: HandleAutoEquipItemOpcode - Invalid itemCount (%u)", itemCount);
|
||||
return;
|
||||
}
|
||||
|
||||
//TC_LOG_DEBUG("network", "WORLD: CMSG_AUTOEQUIP_ITEM");
|
||||
uint8 srcbag, srcslot, slotA, slotB;
|
||||
|
||||
recvData >> srcbag >> srcslot >> slotA >> slotB;
|
||||
TC_LOG_DEBUG("network", "STORAGE: receive srcbag = %u, srcslot = %u", srcbag, srcslot);
|
||||
|
||||
Item* pSrcItem = _player->GetItemByPos(srcbag, srcslot);
|
||||
if (!pSrcItem)
|
||||
@@ -265,10 +280,11 @@ void WorldSession::HandleAutoEquipItemOpcode(WorldPacket& recvData)
|
||||
void WorldSession::HandleDestroyItemOpcode(WorldPacket& recvData)
|
||||
{
|
||||
//TC_LOG_DEBUG("network", "WORLD: CMSG_DESTROY_ITEM");
|
||||
uint8 bag, slot, count, data1, data2, data3;
|
||||
uint8 bag, slot;
|
||||
uint32 count;
|
||||
|
||||
recvData >> bag >> slot >> count >> data1 >> data2 >> data3;
|
||||
//TC_LOG_DEBUG("STORAGE: receive bag = %u, slot = %u, count = %u", bag, slot, count);
|
||||
recvData >> count >> slot >> bag;
|
||||
TC_LOG_DEBUG("network", "STORAGE: receive bag = %u, slot = %u, count = %u", bag, slot, count);
|
||||
|
||||
uint16 pos = (bag << 8) | slot;
|
||||
|
||||
|
||||
@@ -99,7 +99,7 @@ WorldPackets::Character::EnumCharactersResult::CharacterInfo::CharacterInfo(Fiel
|
||||
|
||||
for (uint8 slot = 0; slot < INVENTORY_SLOT_BAG_END; ++slot)
|
||||
{
|
||||
uint32 visualBase = slot * 2;
|
||||
uint32 visualBase = slot * 3;
|
||||
uint32 itemId = Player::GetUInt32ValueFromArray(equipment, visualBase);
|
||||
if (ItemTemplate const* proto = sObjectMgr->GetItemTemplate(itemId))
|
||||
{
|
||||
|
||||
@@ -165,7 +165,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_AUTH_CONTINUED_SESSION, STATUS_NEVER, PROCESS_THREADUNSAFE, &WorldSession::Handle_EarlyProccess );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_AUTH_SESSION, STATUS_NEVER, PROCESS_THREADUNSAFE, &WorldSession::Handle_EarlyProccess );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_AUTOBANK_ITEM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoBankItemOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_AUTOEQUIP_ITEM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoEquipItemOpcode );
|
||||
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_BANK_ITEM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoStoreBankItemOpcode );
|
||||
@@ -282,7 +282,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_DEL_IGNORE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleDelIgnoreOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_DEL_MUTE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_DEL_VOICE_IGNORE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_DESTROY_ITEM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleDestroyItemOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_DESTROY_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleDestroyItemOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_DISMISS_CONTROLLED_VEHICLE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleDismissControlledVehicle );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_DISMISS_CRITTER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleDismissCritter );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_DUEL_ACCEPTED, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleDuelAcceptedOpcode );
|
||||
@@ -631,7 +631,7 @@ void OpcodeTable::Initialize()
|
||||
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_ITEM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleSwapItem );
|
||||
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 );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_TAXIQUERYAVAILABLENODES, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::HandleTaxiQueryAvailableNodes );
|
||||
|
||||
@@ -591,7 +591,7 @@ enum OpcodeClient : uint32
|
||||
CMSG_SUSPEND_COMMS_ACK = 0x0C56,
|
||||
CMSG_SUSPEND_TOKEN_RESPONSE = 0xBADD,
|
||||
CMSG_SWAP_INV_ITEM = 0xBADD,
|
||||
CMSG_SWAP_ITEM = 0xBADD,
|
||||
CMSG_SWAP_ITEM = 0x0F17,
|
||||
CMSG_SYNC_DANCE = 0xBADD,
|
||||
CMSG_TAXICLEARALLNODES = 0xBADD,
|
||||
CMSG_TAXIENABLEALLNODES = 0xBADD,
|
||||
|
||||
@@ -5452,7 +5452,7 @@ void Spell::SummonGuardian(uint32 i, uint32 entry, SummonPropertiesEntry const*
|
||||
|
||||
if (summon->GetEntry() == 27893)
|
||||
{
|
||||
if (uint32 weapon = m_caster->GetUInt32Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENTRY_OFFSET + (EQUIPMENT_SLOT_MAINHAND * 2)))
|
||||
if (uint32 weapon = m_caster->GetUInt32Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENTRY_OFFSET + (EQUIPMENT_SLOT_MAINHAND * 3)))
|
||||
{
|
||||
summon->SetDisplayId(11686); // modelid2
|
||||
summon->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID, weapon);
|
||||
|
||||
Reference in New Issue
Block a user