aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2023-01-12 13:29:53 +0100
committerShauren <shauren.trinity@gmail.com>2023-01-12 13:29:53 +0100
commit6cac60782f0bc67c0f4b70b41cac36357fbd2531 (patch)
tree7184c8e4f98fa2933fefab7853c02a5e101de307
parent67137da1c914f93ba73164c6b534094ab57b57d8 (diff)
Core/Units: Fixed crash happening whenall tappers of a creature are logged out when it dies inside a dungeon
-rw-r--r--src/server/game/Entities/Player/KillRewarder.cpp13
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp8
2 files changed, 12 insertions, 9 deletions
diff --git a/src/server/game/Entities/Player/KillRewarder.cpp b/src/server/game/Entities/Player/KillRewarder.cpp
index 5f352fba290..921bf521a92 100644
--- a/src/server/game/Entities/Player/KillRewarder.cpp
+++ b/src/server/game/Entities/Player/KillRewarder.cpp
@@ -296,11 +296,14 @@ void KillRewarder::Reward()
if (InstanceScript* instance = _victim->GetInstanceScript())
instance->UpdateEncounterStateForKilledCreature(_victim->GetEntry(), _victim);
- if (ObjectGuid::LowType guildId = victim->GetMap()->GetOwnerGuildId())
- if (Guild* guild = sGuildMgr->GetGuildById(guildId))
- guild->UpdateCriteria(CriteriaType::KillCreature, victim->GetEntry(), 1, 0, victim, *_killers.begin());
+ if (_killers.begin() != _killers.end())
+ {
+ if (ObjectGuid::LowType guildId = victim->GetMap()->GetOwnerGuildId())
+ if (Guild* guild = sGuildMgr->GetGuildById(guildId))
+ guild->UpdateCriteria(CriteriaType::KillCreature, victim->GetEntry(), 1, 0, victim, *_killers.begin());
- if (Scenario* scenario = victim->GetScenario())
- scenario->UpdateCriteria(CriteriaType::KillCreature, victim->GetEntry(), 1, 0, victim, *_killers.begin());
+ if (Scenario* scenario = victim->GetScenario())
+ scenario->UpdateCriteria(CriteriaType::KillCreature, victim->GetEntry(), 1, 0, victim, *_killers.begin());
+ }
}
}
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 564df7d5519..0f6cd37659a 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -10644,17 +10644,17 @@ void Unit::SetMeleeAnimKitId(uint16 animKitId)
if (creature->GetMap()->IsDungeon())
{
- Group* group = !groups.empty() ? *groups.begin() : nullptr;
- Player* looter = group ? ASSERT_NOTNULL(ObjectAccessor::GetPlayer(*creature, group->GetLooterGuid())) : tappers[0];
-
if (dungeonEncounter)
{
creature->m_personalLoot = GenerateDungeonEncounterPersonalLoot(dungeonEncounter->ID, creature->GetCreatureTemplate()->lootid,
LootTemplates_Creature, LOOT_CORPSE, creature, creature->GetCreatureTemplate()->mingold, creature->GetCreatureTemplate()->maxgold,
creature->GetLootMode(), creature->GetMap()->GetDifficultyLootItemContext(), tappers);
}
- else
+ else if (!tappers.empty())
{
+ Group* group = !groups.empty() ? *groups.begin() : nullptr;
+ Player* looter = group ? ASSERT_NOTNULL(ObjectAccessor::GetPlayer(*creature, group->GetLooterGuid())) : tappers[0];
+
Loot* loot = new Loot(creature->GetMap(), creature->GetGUID(), LOOT_CORPSE, dungeonEncounter ? group : nullptr);
if (uint32 lootid = creature->GetCreatureTemplate()->lootid)