aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2023-03-30 22:47:19 +0200
committerShauren <shauren.trinity@gmail.com>2023-03-30 22:47:19 +0200
commit81cf682cfe0ba30931f9588f83e1e072325defce (patch)
treefe9f9b360eba15ae46d4211aebb54d12fa144407
parent1bd192d3b3c39d52b8fb6ab57ec5f692d06d9372 (diff)
Core/Loot: Fixed iterator invalidation crash in WorldSession::HandleLootMoneyOpcode
Closes #28885
-rw-r--r--src/server/game/Handlers/LootHandler.cpp6
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)