Core/Battlegrounds: Moved AreaSpiritHealer resurrection handling to respective npc flags
Port From (https://github.com/TrinityCore/TrinityCore/commit/205aba1ff3a6f1ff92a8b26af646fd25f139c697)
This commit is contained in:
@@ -427,6 +427,9 @@ namespace Game.Entities
|
||||
{
|
||||
if (IsAIEnabled() && triggerJustAppeared && m_deathState != DeathState.Dead)
|
||||
{
|
||||
if (IsAreaSpiritHealer() && !IsAreaSpiritHealerIndividual())
|
||||
CastSpell(null, BattlegroundConst.SpellSpiritHealChannelAoE, false);
|
||||
|
||||
if (m_respawnCompatibilityMode && VehicleKit != null)
|
||||
VehicleKit.Reset();
|
||||
|
||||
@@ -1129,6 +1132,19 @@ namespace Game.Entities
|
||||
SetHomePosition(GetPosition());
|
||||
}
|
||||
|
||||
public void SummonGraveyardTeleporter()
|
||||
{
|
||||
if (!IsAreaSpiritHealer())
|
||||
return;
|
||||
|
||||
uint npcEntry = GetFaction() == (uint)FactionTemplates.AllianceGeneric ? 26350 : 26351u;
|
||||
|
||||
// maybe NPC is summoned with these spells:
|
||||
// ID - 24237 Summon Alliance Graveyard Teleporter (SERVERSIDE)
|
||||
// ID - 46894 Summon Horde Graveyard Teleporter (SERVERSIDE)
|
||||
SummonCreature(npcEntry, GetPosition(), TempSummonType.TimedDespawn, TimeSpan.FromSeconds(1), 0, 0);
|
||||
}
|
||||
|
||||
public bool HasFlag(CreatureStaticFlags flag) { return _staticFlags.HasFlag(flag); }
|
||||
public bool HasFlag(CreatureStaticFlags2 flag) { return _staticFlags.HasFlag(flag); }
|
||||
public bool HasFlag(CreatureStaticFlags3 flag) { return _staticFlags.HasFlag(flag); }
|
||||
|
||||
@@ -55,6 +55,7 @@ namespace Game.Entities
|
||||
long m_lastHonorUpdateTime;
|
||||
uint m_contestedPvPTimer;
|
||||
bool _usePvpItemLevels;
|
||||
ObjectGuid _areaSpiritHealerGUID;
|
||||
|
||||
//Groups/Raids
|
||||
GroupReference m_group = new();
|
||||
|
||||
@@ -3938,6 +3938,8 @@ namespace Game.Entities
|
||||
|
||||
public void ResurrectPlayer(float restore_percent, bool applySickness = false)
|
||||
{
|
||||
SetAreaSpiritHealer(null);
|
||||
|
||||
DeathReleaseLoc packet = new();
|
||||
packet.MapID = -1;
|
||||
SendPacket(packet);
|
||||
@@ -4021,6 +4023,44 @@ namespace Game.Entities
|
||||
}
|
||||
}
|
||||
|
||||
ObjectGuid GetSpiritHealerGUID() { return _areaSpiritHealerGUID; }
|
||||
|
||||
public bool CanAcceptAreaSpiritHealFrom(Unit spiritHealer) { return spiritHealer.GetGUID() == _areaSpiritHealerGUID; }
|
||||
|
||||
public void SetAreaSpiritHealer(Creature creature)
|
||||
{
|
||||
if (!creature)
|
||||
{
|
||||
_areaSpiritHealerGUID = ObjectGuid.Empty;
|
||||
RemoveAurasDueToSpell(BattlegroundConst.SpellWaitingForResurrect);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!creature.IsAreaSpiritHealer())
|
||||
return;
|
||||
|
||||
_areaSpiritHealerGUID = creature.GetGUID();
|
||||
CastSpell(null, BattlegroundConst.SpellWaitingForResurrect);
|
||||
}
|
||||
|
||||
public void SendAreaSpiritHealerTime(Unit spiritHealer)
|
||||
{
|
||||
int timeLeft = 0;
|
||||
Spell spell = spiritHealer.GetCurrentSpell(CurrentSpellTypes.Channeled);
|
||||
if (spell != null)
|
||||
timeLeft = spell.GetTimer();
|
||||
|
||||
SendAreaSpiritHealerTime(spiritHealer.GetGUID(), timeLeft);
|
||||
}
|
||||
|
||||
public void SendAreaSpiritHealerTime(ObjectGuid spiritHealerGUID, int timeLeft)
|
||||
{
|
||||
AreaSpiritHealerTime areaSpiritHealerTime = new();
|
||||
areaSpiritHealerTime.HealerGuid = spiritHealerGUID;
|
||||
areaSpiritHealerTime.TimeLeft = (uint)timeLeft;
|
||||
SendPacket(areaSpiritHealerTime);
|
||||
}
|
||||
|
||||
public void KillPlayer()
|
||||
{
|
||||
if (IsFlying() && GetTransport() == null)
|
||||
|
||||
@@ -466,6 +466,9 @@ namespace Game.Entities
|
||||
|
||||
if (IsInWorld)
|
||||
{
|
||||
if (IsAreaSpiritHealer())
|
||||
ToCreature()?.SummonGraveyardTeleporter();
|
||||
|
||||
m_duringRemoveFromWorld = true;
|
||||
UnitAI ai = GetAI();
|
||||
if (ai != null)
|
||||
@@ -847,6 +850,7 @@ namespace Game.Entities
|
||||
NPCFlags.AreaSpiritHealer | NPCFlags.TabardDesigner | NPCFlags.Auctioneer);
|
||||
}
|
||||
public bool IsSpiritService() { return HasNpcFlag(NPCFlags.SpiritHealer | NPCFlags.AreaSpiritHealer); }
|
||||
public bool IsAreaSpiritHealerIndividual() { return HasNpcFlag2(NPCFlags2.AreaSpiritHealerIndividual); }
|
||||
public bool IsCritter() { return GetCreatureType() == CreatureType.Critter; }
|
||||
public bool IsInFlight() { return HasUnitState(UnitState.InFlight); }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user