Core/Battlegrounds: Moved AreaSpiritHealer resurrection handling to respective npc flags

Port From (https://github.com/TrinityCore/TrinityCore/commit/205aba1ff3a6f1ff92a8b26af646fd25f139c697)
This commit is contained in:
hondacrx
2023-05-21 18:38:55 -04:00
parent 3e72da9f1e
commit 35961a0121
17 changed files with 248 additions and 331 deletions
+33 -18
View File
@@ -10,6 +10,7 @@ using Game.Entities;
using Game.Groups;
using Game.Networking;
using Game.Networking.Packets;
using Game.Spells;
using System;
using System.Collections.Generic;
@@ -618,39 +619,53 @@ namespace Game
[WorldPacketHandler(ClientOpcodes.AreaSpiritHealerQuery)]
void HandleAreaSpiritHealerQuery(AreaSpiritHealerQuery areaSpiritHealerQuery)
{
Creature unit = ObjectAccessor.GetCreature(GetPlayer(), areaSpiritHealerQuery.HealerGuid);
if (!unit)
Player player = GetPlayer();
Creature spiritHealer = ObjectAccessor.GetCreature(player, areaSpiritHealerQuery.HealerGuid);
if (spiritHealer == null)
return;
if (!unit.IsSpiritService()) // it's not spirit service
if (!spiritHealer.IsAreaSpiritHealer())
return;
Battleground bg = GetPlayer().GetBattleground();
if (bg != null)
Global.BattlegroundMgr.SendAreaSpiritHealerQuery(GetPlayer(), bg, areaSpiritHealerQuery.HealerGuid);
if (_player.GetExactDist(spiritHealer) > PlayerConst.MaxAreaSpiritHealerRange)
return;
BattleField bf = Global.BattleFieldMgr.GetBattlefieldToZoneId(GetPlayer().GetMap(), GetPlayer().GetZoneId());
if (bf != null)
bf.SendAreaSpiritHealerQuery(GetPlayer(), areaSpiritHealerQuery.HealerGuid);
if (spiritHealer.IsAreaSpiritHealerIndividual())
{
Aura aura = player.GetAura(BattlegroundConst.SpellSpiritHealPlayerAura);
if (aura != null)
{
player.SendAreaSpiritHealerTime(spiritHealer.GetGUID(), aura.GetDuration());
}
else
{
SpellInfo spellInfo = Global.SpellMgr.GetSpellInfo(BattlegroundConst.SpellSpiritHealPlayerAura, Difficulty.None);
if (spellInfo != null)
{
spiritHealer.CastSpell(player, BattlegroundConst.SpellSpiritHealPlayerAura);
player.SendAreaSpiritHealerTime(spiritHealer.GetGUID(), spellInfo.GetDuration());
spiritHealer.CastSpell(null, BattlegroundConst.SpellSpiritHealChannelSelf);
}
}
}
else
_player.SendAreaSpiritHealerTime(spiritHealer);
}
[WorldPacketHandler(ClientOpcodes.AreaSpiritHealerQueue)]
void HandleAreaSpiritHealerQueue(AreaSpiritHealerQueue areaSpiritHealerQueue)
{
Creature unit = ObjectAccessor.GetCreature(GetPlayer(), areaSpiritHealerQueue.HealerGuid);
if (!unit)
Creature spiritHealer = ObjectAccessor.GetCreature(GetPlayer(), areaSpiritHealerQueue.HealerGuid);
if (spiritHealer == null)
return;
if (!unit.IsSpiritService()) // it's not spirit service
if (!spiritHealer.IsAreaSpiritHealer())
return;
Battleground bg = GetPlayer().GetBattleground();
if (bg)
bg.AddPlayerToResurrectQueue(areaSpiritHealerQueue.HealerGuid, GetPlayer().GetGUID());
if (_player.GetExactDist(spiritHealer) > PlayerConst.MaxAreaSpiritHealerRange)
return;
BattleField bf = Global.BattleFieldMgr.GetBattlefieldToZoneId(GetPlayer().GetMap(), GetPlayer().GetZoneId());
if (bf != null)
bf.AddPlayerToResurrectQueue(areaSpiritHealerQueue.HealerGuid, GetPlayer().GetGUID());
_player.SetAreaSpiritHealer(spiritHealer);
}
[WorldPacketHandler(ClientOpcodes.HearthAndResurrect)]
+2 -8
View File
@@ -138,16 +138,10 @@ namespace Game
unit.PauseMovement(pause);
unit.SetHomePosition(unit.GetPosition());
// If spiritguide, no need for gossip menu, just put player into resurrect queue
if (unit.IsAreaSpiritHealer())
{
Battleground bg = GetPlayer().GetBattleground();
if (bg)
{
bg.AddPlayerToResurrectQueue(unit.GetGUID(), GetPlayer().GetGUID());
Global.BattlegroundMgr.SendAreaSpiritHealerQuery(GetPlayer(), bg, unit.GetGUID());
return;
}
_player.SetAreaSpiritHealer(unit);
_player.SendAreaSpiritHealerTime(unit);
}
_player.PlayerTalkClass.ClearMenus();