Core/Battlegrounds: Move some areatrigger handling to scripts
Port From (https://github.com/TrinityCore/TrinityCore/commit/9c5b8927f89cda74eb7350801c364b003048ba2b)
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user