aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorrobinsch <robinsch@users.noreply.github.com>2020-08-22 23:09:13 +0200
committerShauren <shauren.trinity@gmail.com>2022-02-04 00:27:12 +0100
commit5ba95cb42f9354e5be923629c32be71cf2705324 (patch)
tree540ea72669bd003913b1cd492ee0b3efeac47f54 /src
parent1f2c48f8bb2396995c1e37e914ef2f3fa6bca490 (diff)
Core/Unit: Fixed race condition when loot recipient is in different map (#25312)
(cherry picked from commit aaa089ab7f634b50acfabb5ad312edd5ee82d2e2)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp26
1 files changed, 24 insertions, 2 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index b339b55e7d1..c5bee109aff 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -10443,8 +10443,30 @@ void Unit::SetMeleeAnimKitId(uint16 animKitId)
creature->SetLootRecipient(nullptr);
}
- if (isRewardAllowed && creature && creature->GetLootRecipient())
- player = creature->GetLootRecipient();
+ if (isRewardAllowed && creature)
+ {
+ if (Player* lootRecipient = creature->GetLootRecipient())
+ {
+ // Loot recipient can be in a different map
+ if (!creature->IsInMap(lootRecipient))
+ {
+ if (Group* group = creature->GetLootRecipientGroup())
+ {
+ for (GroupReference* itr = group->GetFirstMember(); itr != nullptr; itr = itr->next())
+ {
+ Player* member = itr->GetSource();
+ if (!member || !creature->IsInMap(member))
+ continue;
+
+ player = member;
+ break;
+ }
+ }
+ }
+ else
+ player = creature->GetLootRecipient();
+ }
+ }
// Exploit fix
if (creature && creature->IsPet() && creature->GetOwnerGUID().IsPlayer())