Core/Units: Fixed crash happening whenall tappers of a creature are logged out when it dies inside a dungeon

Port From (https://github.com/TrinityCore/TrinityCore/commit/6cac60782f0bc67c0f4b70b41cac36357fbd2531)
This commit is contained in:
hondacrx
2023-01-18 17:01:40 -05:00
parent 48842f24bd
commit 23ff218f0e
2 changed files with 14 additions and 11 deletions
@@ -105,6 +105,8 @@ namespace Game.Entities
instance.UpdateEncounterStateForKilledCreature(_victim.GetEntry(), _victim); instance.UpdateEncounterStateForKilledCreature(_victim.GetEntry(), _victim);
} }
if (!_killers.Empty())
{
uint guildId = victim.GetMap().GetOwnerGuildId(); uint guildId = victim.GetMap().GetOwnerGuildId();
var guild = Global.GuildMgr.GetGuildById(guildId); var guild = Global.GuildMgr.GetGuildById(guildId);
if (guild != null) if (guild != null)
@@ -115,6 +117,7 @@ namespace Game.Entities
scenario.UpdateCriteria(CriteriaType.KillCreature, victim.GetEntry(), 1, 0, victim, _killers.First()); scenario.UpdateCriteria(CriteriaType.KillCreature, victim.GetEntry(), 1, 0, victim, _killers.First());
} }
} }
}
void _InitGroupData(Player killer) void _InitGroupData(Player killer)
{ {
+4 -4
View File
@@ -765,17 +765,17 @@ namespace Game.Entities
if (creature.GetMap().IsDungeon()) if (creature.GetMap().IsDungeon())
{ {
Group group = !groups.Empty() ? groups.First() : null;
Player looter = group ? Global.ObjAccessor.GetPlayer(creature, group.GetLooterGuid()) : tappers[0];
if (dungeonEncounter != null) if (dungeonEncounter != null)
{ {
creature.m_personalLoot = LootManager.GenerateDungeonEncounterPersonalLoot(dungeonEncounter.Id, creature.GetCreatureTemplate().LootId, creature.m_personalLoot = LootManager.GenerateDungeonEncounterPersonalLoot(dungeonEncounter.Id, creature.GetCreatureTemplate().LootId,
LootStorage.Creature, LootType.Corpse, creature, creature.GetCreatureTemplate().MinGold, creature.GetCreatureTemplate().MaxGold, LootStorage.Creature, LootType.Corpse, creature, creature.GetCreatureTemplate().MinGold, creature.GetCreatureTemplate().MaxGold,
(ushort)creature.GetLootMode(), creature.GetMap().GetDifficultyLootItemContext(), tappers); (ushort)creature.GetLootMode(), creature.GetMap().GetDifficultyLootItemContext(), tappers);
} }
else else if (!tappers.Empty())
{ {
Group group = !groups.Empty() ? groups.First() : null;
Player looter = group ? Global.ObjAccessor.GetPlayer(creature, group.GetLooterGuid()) : tappers[0];
Loot loot = new(creature.GetMap(), creature.GetGUID(), LootType.Corpse, dungeonEncounter != null ? group : null); Loot loot = new(creature.GetMap(), creature.GetGUID(), LootType.Corpse, dungeonEncounter != null ? group : null);
uint lootid = creature.GetCreatureTemplate().LootId; uint lootid = creature.GetCreatureTemplate().LootId;