diff options
author | Shauren <shauren.trinity@gmail.com> | 2023-03-30 22:47:19 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2023-03-30 22:47:19 +0200 |
commit | 81cf682cfe0ba30931f9588f83e1e072325defce (patch) | |
tree | fe9f9b360eba15ae46d4211aebb54d12fa144407 | |
parent | 1bd192d3b3c39d52b8fb6ab57ec5f692d06d9372 (diff) |
Core/Loot: Fixed iterator invalidation crash in WorldSession::HandleLootMoneyOpcode
Closes #28885
-rw-r--r-- | src/server/game/Handlers/LootHandler.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/server/game/Handlers/LootHandler.cpp b/src/server/game/Handlers/LootHandler.cpp index 3f32460f93b..0e975838e32 100644 --- a/src/server/game/Handlers/LootHandler.cpp +++ b/src/server/game/Handlers/LootHandler.cpp @@ -142,6 +142,7 @@ void WorldSession::HandleAutostoreLootItemOpcode(WorldPackets::Loot::LootItem& p void WorldSession::HandleLootMoneyOpcode(WorldPackets::Loot::LootMoney& /*packet*/) { Player* player = GetPlayer(); + std::vector<Loot*> forceLootRelease; for (std::pair<ObjectGuid const, Loot*> const& lootView : player->GetAELootView()) { Loot* loot = lootView.second; @@ -205,8 +206,11 @@ void WorldSession::HandleLootMoneyOpcode(WorldPackets::Loot::LootMoney& /*packet // Delete container if empty if (loot->isLooted() && guid.IsItem()) - player->GetSession()->DoLootRelease(loot); + forceLootRelease.push_back(loot); } + + for (Loot* loot : forceLootRelease) + player->GetSession()->DoLootRelease(loot); } void WorldSession::HandleLootOpcode(WorldPackets::Loot::LootUnit& packet) |