Fix issue when deleting non reforged items

This commit is contained in:
silviu20092
2025-04-18 08:38:44 +03:00
parent ce454a37ca
commit acfbb5e0b5
4 changed files with 14 additions and 8 deletions

View File

@@ -429,13 +429,19 @@ bool ItemReforge::RemoveReforge(Player* player, ObjectGuid itemGuid)
return RemoveReforge(player, player->GetItemByGuid(itemGuid)); return RemoveReforge(player, player->GetItemByGuid(itemGuid));
} }
bool ItemReforge::RemoveReforge(Player* player, Item* item, bool force) bool ItemReforge::RemoveReforge(Player* player, Item* item)
{ {
if (!force && !CanRemoveReforge(item)) if (!item || !IsAlreadyReforged(item))
return false; return false;
bool equipped = item->IsEquipped();
if (equipped)
player->_ApplyItemMods(item, item->GetSlot(), false); player->_ApplyItemMods(item, item->GetSlot(), false);
reforgingDataMap.erase(item->GetGUID().GetCounter()); reforgingDataMap.erase(item->GetGUID().GetCounter());
if (equipped)
player->_ApplyItemMods(item, item->GetSlot(), true); player->_ApplyItemMods(item, item->GetSlot(), true);
CharacterDatabase.Execute("DELETE FROM character_reforging WHERE item_guid = {}", item->GetGUID().GetCounter()); CharacterDatabase.Execute("DELETE FROM character_reforging WHERE item_guid = {}", item->GetGUID().GetCounter());

View File

@@ -76,7 +76,7 @@ public:
std::vector<Item*> GetPlayerItems(const Player* player, bool inBankAlso) const; std::vector<Item*> GetPlayerItems(const Player* player, bool inBankAlso) const;
bool CanRemoveReforge(const Item* item) const; bool CanRemoveReforge(const Item* item) const;
bool RemoveReforge(Player* player, ObjectGuid itemGuid); bool RemoveReforge(Player* player, ObjectGuid itemGuid);
bool RemoveReforge(Player* player, Item* item, bool force = false); bool RemoveReforge(Player* player, Item* item);
void VisualFeedback(Player* player); void VisualFeedback(Player* player);
void HandleCharacterRemove(uint32 guid); void HandleCharacterRemove(uint32 guid);

View File

@@ -12,7 +12,7 @@ public:
bool CanItemRemove(Player* player, Item* item) override bool CanItemRemove(Player* player, Item* item) override
{ {
sItemReforge->RemoveReforge(player, item, true); sItemReforge->RemoveReforge(player, item);
return true; return true;
} }
}; };

View File

@@ -39,7 +39,7 @@ public:
void OnPlayerAfterMoveItemFromInventory(Player* player, Item* it, uint8 /*bag*/, uint8 /*slot*/, bool /*update*/) override void OnPlayerAfterMoveItemFromInventory(Player* player, Item* it, uint8 /*bag*/, uint8 /*slot*/, bool /*update*/) override
{ {
sItemReforge->RemoveReforge(player, it, true); sItemReforge->RemoveReforge(player, it);
} }
void OnPlayerDeleteFromDB(CharacterDatabaseTransaction trans, uint32 guid) override void OnPlayerDeleteFromDB(CharacterDatabaseTransaction trans, uint32 guid) override