diff options
| author | Ovahlord <dreadkiller@gmx.de> | 2024-06-01 17:45:20 +0200 |
|---|---|---|
| committer | Ovahlord <dreadkiller@gmx.de> | 2024-06-01 19:32:24 +0200 |
| commit | 57c36d758fabadd0385cde75b5b6abdcd8c493dd (patch) | |
| tree | 5a9ef5b1822347cda950fc2c1cf9e0d900c8c769 /src/server/game/Handlers/ItemHandler.cpp | |
| parent | d4c36db8aca9b3da8c589ac313c230763687f171 (diff) | |
Core/Items: implement reforging items
Diffstat (limited to 'src/server/game/Handlers/ItemHandler.cpp')
| -rw-r--r-- | src/server/game/Handlers/ItemHandler.cpp | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp index c95463666b1..7224191b9dd 100644 --- a/src/server/game/Handlers/ItemHandler.cpp +++ b/src/server/game/Handlers/ItemHandler.cpp @@ -1256,3 +1256,48 @@ void WorldSession::HandleRemoveNewItem(WorldPackets::Item::RemoveNewItem& remove item->SetState(ITEM_CHANGED, _player); } } + +void WorldSession::HandleReforgeItem(WorldPackets::Item::ReforgeItem& reforgeItem) +{ + if (!_player->GetNPCIfCanInteractWith(reforgeItem.ReforgerGUID, UNIT_NPC_FLAG_NONE, UNIT_NPC_FLAG_2_REFORGER)) + { + TC_LOG_DEBUG("network", "WorldSession::HandleReforgeItem - Reforger {} not found or player can't interact with it (missing UNIT_NPC_FLAG_2_REFORGER)!", reforgeItem.ReforgerGUID.ToString()); + return; + } + + Item* item = _player->GetItemByPos(reforgeItem.ContainerId, reforgeItem.SlotNum); + if (!item) + { + TC_LOG_DEBUG("network", "WorldSession::HandleReforgeItem: {} tried to reforge a non-existing item! Possible cheater or malformed packet.", GetPlayerInfo()); + return; + } + + // Items must at least be of item level 200 to be allowed to get reforged + if (item->GetItemLevel(_player) < 200) + return; + + if (reforgeItem.ItemReforgeRecId != 0) + { + if (!sItemReforgeStore.HasRecord(reforgeItem.ItemReforgeRecId)) + { + TC_LOG_DEBUG("network", "WorldSession::HandleReforgeItem: {} tried to reforge an item with a non-existing reforge entry! Possible cheater or malformed packet.", GetPlayerInfo()); + return; + } + + if (!_player->HasEnoughMoney(uint64(item->GetTemplate()->GetSellPrice()))) + { + _player->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, nullptr, 0, 0); + return; + } + else + _player->ModifyMoney(-int64(item->GetTemplate()->GetSellPrice())); + } + + if (item->IsEquipped()) + _player->ApplyReforgedStats(item, false); + + item->SetReforgeId(reforgeItem.ItemReforgeRecId); + + if (item->IsEquipped()) + _player->ApplyReforgedStats(item, true); +} |
