diff options
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); +} |