diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Item/ItemTemplate.h | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 1 | ||||
-rw-r--r-- | src/server/game/Handlers/ItemHandler.cpp | 16 | ||||
-rw-r--r-- | src/server/game/Server/Packets/ItemPackets.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Server/Packets/ItemPackets.h | 10 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 2 |
7 files changed, 36 insertions, 2 deletions
diff --git a/src/server/game/Entities/Item/ItemTemplate.h b/src/server/game/Entities/Item/ItemTemplate.h index 3d6617f7410..54977fca703 100644 --- a/src/server/game/Entities/Item/ItemTemplate.h +++ b/src/server/game/Entities/Item/ItemTemplate.h @@ -156,7 +156,7 @@ enum ItemFieldFlags : uint32 ITEM_FIELD_FLAG_UNK13 = 0x00040000, ITEM_FIELD_FLAG_CHILD = 0x00080000, ITEM_FIELD_FLAG_UNK15 = 0x00100000, - ITEM_FIELD_FLAG_UNK16 = 0x00200000, + ITEM_FIELD_FLAG_NEW_ITEM = 0x00200000, // Item glows in inventory ITEM_FIELD_FLAG_UNK17 = 0x00400000, ITEM_FIELD_FLAG_UNK18 = 0x00800000, ITEM_FIELD_FLAG_UNK19 = 0x01000000, diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 8800bfef2ff..abfe384e0f2 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -11611,6 +11611,7 @@ Item* Player::StoreNewItem(ItemPosCountVec const& pos, uint32 itemId, bool updat UpdateCriteria(CRITERIA_TYPE_RECEIVE_EPIC_ITEM, itemId, count); UpdateCriteria(CRITERIA_TYPE_OWN_ITEM, itemId, 1); + item->SetFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_NEW_ITEM); item->SetItemRandomProperties(randomPropertyId); if (uint32 upgradeID = sDB2Manager.GetRulesetItemUpgrade(itemId)) diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp index 0e14a16d415..e24e2bfc7a2 100644 --- a/src/server/game/Handlers/ItemHandler.cpp +++ b/src/server/game/Handlers/ItemHandler.cpp @@ -1274,3 +1274,19 @@ void WorldSession::HandleSortReagentBankBags(WorldPackets::Item::SortReagentBank // Placeholder to prevent completely locking out bags clientside SendPacket(WorldPackets::Item::SortBagsResult().Write()); } + +void WorldSession::HandleRemoveNewItem(WorldPackets::Item::RemoveNewItem& removeNewItem) +{ + Item* item = _player->GetItemByGuid(removeNewItem.ItemGuid); + if (!item) + { + TC_LOG_DEBUG("network", "WorldSession::HandleRemoveNewItem: Item (%s) not found for %s!", removeNewItem.ItemGuid.ToString().c_str(), GetPlayerInfo().c_str()); + return; + } + + if (item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_NEW_ITEM)) + { + item->RemoveFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_NEW_ITEM); + item->SetState(ITEM_CHANGED, _player); + } +} diff --git a/src/server/game/Server/Packets/ItemPackets.cpp b/src/server/game/Server/Packets/ItemPackets.cpp index 89dfa245a06..9e61e4a5a90 100644 --- a/src/server/game/Server/Packets/ItemPackets.cpp +++ b/src/server/game/Server/Packets/ItemPackets.cpp @@ -358,3 +358,8 @@ WorldPacket const* WorldPackets::Item::ItemUpgradeResult::Write() return &_worldPacket; } + +void WorldPackets::Item::RemoveNewItem::Read() +{ + _worldPacket >> ItemGuid; +} diff --git a/src/server/game/Server/Packets/ItemPackets.h b/src/server/game/Server/Packets/ItemPackets.h index fc7a1ab7d9d..8b87fcfb389 100644 --- a/src/server/game/Server/Packets/ItemPackets.h +++ b/src/server/game/Server/Packets/ItemPackets.h @@ -523,6 +523,16 @@ namespace WorldPackets WorldPacket const* Write() override { return &_worldPacket; } }; + + class RemoveNewItem final : public ClientPacket + { + public: + RemoveNewItem(WorldPacket&& packet) : ClientPacket(CMSG_REMOVE_NEW_ITEM, std::move(packet)) { } + + void Read() override; + + ObjectGuid ItemGuid; + }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index dd809d0ecec..e098e3effa4 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -677,7 +677,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_RECRUIT_A_FRIEND, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_REDEEM_WOW_TOKEN_CONFIRM, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_REDEEM_WOW_TOKEN_START, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_REMOVE_NEW_ITEM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_REMOVE_NEW_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRemoveNewItem); DEFINE_HANDLER(CMSG_REORDER_CHARACTERS, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleReorderCharacters); DEFINE_HANDLER(CMSG_REPAIR_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRepairItemOpcode); DEFINE_HANDLER(CMSG_REPLACE_TROPHY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index a70e527e937..74791bc94c2 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -398,6 +398,7 @@ namespace WorldPackets class SortBankBags; class SortReagentBankBags; struct ItemInstance; + class RemoveNewItem; } namespace LFG @@ -1570,6 +1571,7 @@ class TC_GAME_API WorldSession void HandleSortBags(WorldPackets::Item::SortBags& sortBags); void HandleSortBankBags(WorldPackets::Item::SortBankBags& sortBankBags); void HandleSortReagentBankBags(WorldPackets::Item::SortReagentBankBags& sortReagentBankBags); + void HandleRemoveNewItem(WorldPackets::Item::RemoveNewItem& removeNewItem); void HandleCancelTempEnchantmentOpcode(WorldPackets::Item::CancelTempEnchantment& cancelTempEnchantment); |