aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Item/ItemTemplate.h2
-rw-r--r--src/server/game/Entities/Player/Player.cpp1
-rw-r--r--src/server/game/Handlers/ItemHandler.cpp16
-rw-r--r--src/server/game/Server/Packets/ItemPackets.cpp5
-rw-r--r--src/server/game/Server/Packets/ItemPackets.h10
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp2
-rw-r--r--src/server/game/Server/WorldSession.h2
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);