diff options
author | Shauren <shauren.trinity@gmail.com> | 2023-01-12 13:29:53 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2023-01-12 13:29:53 +0100 |
commit | 6cac60782f0bc67c0f4b70b41cac36357fbd2531 (patch) | |
tree | 7184c8e4f98fa2933fefab7853c02a5e101de307 /src | |
parent | 67137da1c914f93ba73164c6b534094ab57b57d8 (diff) |
Core/Units: Fixed crash happening whenall tappers of a creature are logged out when it dies inside a dungeon
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/KillRewarder.cpp | 13 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 8 |
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) |