Core/Battlegrounds: Move some areatrigger handling to scripts

Port From (https://github.com/TrinityCore/TrinityCore/commit/9c5b8927f89cda74eb7350801c364b003048ba2b)
This commit is contained in:
hondacrx
2024-02-24 15:44:44 -05:00
parent 18d20e0a75
commit 1940e1613c
10 changed files with 65 additions and 126 deletions
@@ -45,22 +45,6 @@ namespace Game.Arenas
SpawnBGObject(i, 60);
}
public override void HandleAreaTrigger(Player player, uint trigger, bool entered)
{
if (GetStatus() != BattlegroundStatus.InProgress)
return;
switch (trigger)
{
case 4538: // buff trigger?
case 4539: // buff trigger?
break;
default:
base.HandleAreaTrigger(player, trigger, entered);
break;
}
}
public override bool SetupBattleground()
{
bool result = true;
+45 -27
View File
@@ -12,6 +12,9 @@ namespace Game.Arenas
{
class DalaranSewersArena : Arena
{
uint _pipeKnockBackTimer;
uint _pipeKnockBackCount;
public DalaranSewersArena(BattlegroundTemplate battlegroundTemplate) : base(battlegroundTemplate)
{
_events = new EventMap();
@@ -32,7 +35,10 @@ namespace Game.Arenas
SpawnBGObject(i, 60);
_events.ScheduleEvent(DalaranSewersEvents.WaterfallWarning, DalaranSewersData.WaterfallTimerMin, DalaranSewersData.WaterfallTimerMax);
_events.ScheduleEvent(DalaranSewersEvents.PipeKnockback, DalaranSewersData.PipeKnockbackFirstDelay);
//_events.ScheduleEvent(DalaranSewersEvents.PipeKnockback, DalaranSewersData.PipeKnockbackFirstDelay);
_pipeKnockBackCount = 0;
_pipeKnockBackTimer = DalaranSewersData.PipeKnockbackFirstDelay;
SpawnBGObject(DalaranSewersObjectTypes.Water2, BattlegroundConst.RespawnImmediately);
@@ -48,28 +54,6 @@ namespace Game.Arenas
}
}
public override void HandleAreaTrigger(Player player, uint trigger, bool entered)
{
if (GetStatus() != BattlegroundStatus.InProgress)
return;
switch (trigger)
{
case 5347:
case 5348:
// Remove effects of Demonic Circle Summon
player.RemoveAurasDueToSpell(DalaranSewersSpells.DemonicCircle);
// Someone has get back into the pipes and the knockback has already been performed,
// so we reset the knockback count for kicking the player again into the arena.
_events.ScheduleEvent(DalaranSewersEvents.PipeKnockback, DalaranSewersData.PipeKnockbackDelay);
break;
default:
base.HandleAreaTrigger(player, trigger, entered);
break;
}
}
public override bool SetupBattleground()
{
bool result = true;
@@ -139,7 +123,7 @@ namespace Game.Arenas
waterSpout.CastSpell(waterSpout, DalaranSewersSpells.WaterSpout, true);
_events.ScheduleEvent(eventId, DalaranSewersData.WaterfallKnockbackTimer);
}
break;
break;
case DalaranSewersEvents.PipeKnockback:
{
for (uint i = DalaranSewersCreatureTypes.PipeKnockback1; i <= DalaranSewersCreatureTypes.PipeKnockback2; ++i)
@@ -149,9 +133,42 @@ namespace Game.Arenas
waterSpout.CastSpell(waterSpout, DalaranSewersSpells.Flush, true);
}
}
break;
break;
}
});
if (_pipeKnockBackCount < DalaranSewersData.PipeKnockbackTotalCount)
{
if (_pipeKnockBackTimer < diff)
{
for (uint i = DalaranSewersCreatureTypes.PipeKnockback1; i <= DalaranSewersCreatureTypes.PipeKnockback2; ++i)
{
Creature waterSpout = GetBGCreature(i);
if (waterSpout != null)
waterSpout.CastSpell(waterSpout, DalaranSewersSpells.Flush, true);
}
++_pipeKnockBackCount;
_pipeKnockBackTimer = DalaranSewersData.PipeKnockbackDelay;
}
else
_pipeKnockBackTimer -= diff;
}
}
public override void SetData(uint dataId, uint value)
{
base.SetData(dataId, value);
if (dataId == DalaranSewersData.PipeKnockbackCount)
_pipeKnockBackCount = value;
}
public override uint GetData(uint dataId)
{
if (dataId == DalaranSewersData.PipeKnockbackCount)
return _pipeKnockBackCount;
return base.GetData(dataId);
}
}
@@ -203,9 +220,10 @@ namespace Game.Arenas
public static TimeSpan WaterfallDuration = TimeSpan.FromSeconds(30);
public static TimeSpan WaterfallKnockbackTimer = TimeSpan.FromSeconds(1.5);
public static TimeSpan PipeKnockbackFirstDelay = TimeSpan.FromSeconds(5);
public static TimeSpan PipeKnockbackDelay = TimeSpan.FromSeconds(3);
public static uint PipeKnockbackFirstDelay = 5000;
public static uint PipeKnockbackDelay = 3000;
public const uint PipeKnockbackTotalCount = 2;
public const uint PipeKnockbackCount = 1;
public const uint NpcWaterSpout = 28567;
}
-16
View File
@@ -42,22 +42,6 @@ namespace Game.Arenas
SpawnBGObject(i, 60);
}
public override void HandleAreaTrigger(Player player, uint trigger, bool entered)
{
if (GetStatus() != BattlegroundStatus.InProgress)
return;
switch (trigger)
{
case 4536: // buff trigger?
case 4537: // buff trigger?
break;
default:
base.HandleAreaTrigger(player, trigger, entered);
break;
}
}
public override bool SetupBattleground()
{
bool result = true;
-19
View File
@@ -88,25 +88,6 @@ namespace Game.Arenas
TogglePillarCollision(true);
}
public override void HandleAreaTrigger(Player player, uint trigger, bool entered)
{
if (GetStatus() != BattlegroundStatus.InProgress)
return;
switch (trigger)
{
case 5224:
case 5226:
// fire was removed in 3.2.0
case 5473:
case 5474:
break;
default:
base.HandleAreaTrigger(player, trigger, entered);
break;
}
}
public override void PostUpdateImpl(uint diff)
{
if (GetStatus() != BattlegroundStatus.InProgress)
@@ -63,22 +63,6 @@ namespace Game.Arenas
for (int i = RuinsofLordaeronObjectTypes.Buff1; i <= RuinsofLordaeronObjectTypes.Buff2; ++i)
SpawnBGObject(i, 60);
}
public override void HandleAreaTrigger(Player player, uint trigger, bool entered)
{
if (GetStatus() != BattlegroundStatus.InProgress)
return;
switch (trigger)
{
case 4696: // buff trigger?
case 4697: // buff trigger?
break;
default:
base.HandleAreaTrigger(player, trigger, entered);
break;
}
}
}
struct RuinsofLordaeronObjectTypes