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
@@ -208,31 +208,6 @@ namespace Game.BattleGrounds.Zones
TriggerGameEvent(EventStartBattle);
}
public override void HandleAreaTrigger(Player player, uint trigger, bool entered)
{
switch (trigger)
{
case 6635: // Horde Start
case 6634: // Alliance Start
if (GetStatus() == BattlegroundStatus.WaitJoin && !entered)
TeleportPlayerToExploitLocation(player);
break;
case 3948: // Arathi Basin Alliance Exit.
case 3949: // Arathi Basin Horde Exit.
case 3866: // Stables
case 3869: // Gold Mine
case 3867: // Farm
case 3868: // Lumber Mill
case 3870: // Black Smith
case 4020: // Unk1
case 4021: // Unk2
case 4674: // Unk3
default:
base.HandleAreaTrigger(player, trigger, entered);
break;
}
}
void _CreateBanner(byte node, ABNodeStatus type, int teamIndex, bool delay)
{
// Just put it into the queue
@@ -5,6 +5,7 @@ using Framework.Constants;
using Game.Entities;
using Game.Maps;
using Game.Networking.Packets;
using System;
using System.Collections.Generic;
namespace Game.BattleGrounds.Zones.EyeofStorm
@@ -219,6 +220,7 @@ namespace Game.BattleGrounds.Zones.EyeofStorm
}
}
[Obsolete("Remove me when eye of the storm is updated.")]
public override void HandleAreaTrigger(Player player, uint trigger, bool entered)
{
if (!player.IsAlive()) //hack code, must be removed later
@@ -429,13 +429,6 @@ namespace Game.BattleGrounds.Zones
public override void RemovePlayer(Player player, ObjectGuid guid, Team team) { }
public override void HandleAreaTrigger(Player source, uint trigger, bool entered)
{
// this is wrong way to implement these things. On official it done by gameobject spell cast.
if (GetStatus() != BattlegroundStatus.InProgress)
return;
}
void TeleportPlayers()
{
foreach (var pair in GetPlayers())
@@ -6,6 +6,7 @@ using Game.Entities;
using Game.Networking.Packets;
using Game.DataStorage;
using System.Collections.Generic;
using System;
namespace Game.BattleGrounds.Zones
{
@@ -598,6 +599,7 @@ namespace Game.BattleGrounds.Zones
UpdateWorldState(WSGWorldStates.FlagCapturesHorde, (int)GetTeamScore(team));
}
[Obsolete("Remove me when warsong gluch is updated.")]
public override void HandleAreaTrigger(Player player, uint trigger, bool entered)
{
//uint SpellId = 0;
@@ -3,6 +3,7 @@
using Framework.Constants;
using Game.AI;
using Game.DataStorage;
using Game.Entities;
using Game.Scripting;
using System;
@@ -134,4 +135,19 @@ namespace Scripts.EasternKingdoms.AlteracValley
return;
}
}
[Script]
class at_av_exploit : AreaTriggerScript
{
public at_av_exploit() : base("at_av_exploit") { }
public override bool OnTrigger(Player player, AreaTriggerRecord trigger)
{
var battleground = player.GetBattleground();
if (battleground != null && battleground.GetStatus() == BattlegroundStatus.WaitJoin)
battleground.TeleportPlayerToExploitLocation(player);
return true;
}
}
}