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
+16
View File
@@ -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();
+40
View File
@@ -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)
+4
View File
@@ -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); }