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);
|
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()
|
public override bool SetupBattleground()
|
||||||
{
|
{
|
||||||
bool result = true;
|
bool result = true;
|
||||||
|
|||||||
@@ -12,6 +12,9 @@ namespace Game.Arenas
|
|||||||
{
|
{
|
||||||
class DalaranSewersArena : Arena
|
class DalaranSewersArena : Arena
|
||||||
{
|
{
|
||||||
|
uint _pipeKnockBackTimer;
|
||||||
|
uint _pipeKnockBackCount;
|
||||||
|
|
||||||
public DalaranSewersArena(BattlegroundTemplate battlegroundTemplate) : base(battlegroundTemplate)
|
public DalaranSewersArena(BattlegroundTemplate battlegroundTemplate) : base(battlegroundTemplate)
|
||||||
{
|
{
|
||||||
_events = new EventMap();
|
_events = new EventMap();
|
||||||
@@ -32,7 +35,10 @@ namespace Game.Arenas
|
|||||||
SpawnBGObject(i, 60);
|
SpawnBGObject(i, 60);
|
||||||
|
|
||||||
_events.ScheduleEvent(DalaranSewersEvents.WaterfallWarning, DalaranSewersData.WaterfallTimerMin, DalaranSewersData.WaterfallTimerMax);
|
_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);
|
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()
|
public override bool SetupBattleground()
|
||||||
{
|
{
|
||||||
bool result = true;
|
bool result = true;
|
||||||
@@ -139,7 +123,7 @@ namespace Game.Arenas
|
|||||||
waterSpout.CastSpell(waterSpout, DalaranSewersSpells.WaterSpout, true);
|
waterSpout.CastSpell(waterSpout, DalaranSewersSpells.WaterSpout, true);
|
||||||
_events.ScheduleEvent(eventId, DalaranSewersData.WaterfallKnockbackTimer);
|
_events.ScheduleEvent(eventId, DalaranSewersData.WaterfallKnockbackTimer);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DalaranSewersEvents.PipeKnockback:
|
case DalaranSewersEvents.PipeKnockback:
|
||||||
{
|
{
|
||||||
for (uint i = DalaranSewersCreatureTypes.PipeKnockback1; i <= DalaranSewersCreatureTypes.PipeKnockback2; ++i)
|
for (uint i = DalaranSewersCreatureTypes.PipeKnockback1; i <= DalaranSewersCreatureTypes.PipeKnockback2; ++i)
|
||||||
@@ -149,9 +133,42 @@ namespace Game.Arenas
|
|||||||
waterSpout.CastSpell(waterSpout, DalaranSewersSpells.Flush, true);
|
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 WaterfallDuration = TimeSpan.FromSeconds(30);
|
||||||
public static TimeSpan WaterfallKnockbackTimer = TimeSpan.FromSeconds(1.5);
|
public static TimeSpan WaterfallKnockbackTimer = TimeSpan.FromSeconds(1.5);
|
||||||
|
|
||||||
public static TimeSpan PipeKnockbackFirstDelay = TimeSpan.FromSeconds(5);
|
public static uint PipeKnockbackFirstDelay = 5000;
|
||||||
public static TimeSpan PipeKnockbackDelay = TimeSpan.FromSeconds(3);
|
public static uint PipeKnockbackDelay = 3000;
|
||||||
public const uint PipeKnockbackTotalCount = 2;
|
public const uint PipeKnockbackTotalCount = 2;
|
||||||
|
public const uint PipeKnockbackCount = 1;
|
||||||
|
|
||||||
public const uint NpcWaterSpout = 28567;
|
public const uint NpcWaterSpout = 28567;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,22 +42,6 @@ namespace Game.Arenas
|
|||||||
SpawnBGObject(i, 60);
|
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()
|
public override bool SetupBattleground()
|
||||||
{
|
{
|
||||||
bool result = true;
|
bool result = true;
|
||||||
|
|||||||
@@ -88,25 +88,6 @@ namespace Game.Arenas
|
|||||||
TogglePillarCollision(true);
|
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)
|
public override void PostUpdateImpl(uint diff)
|
||||||
{
|
{
|
||||||
if (GetStatus() != BattlegroundStatus.InProgress)
|
if (GetStatus() != BattlegroundStatus.InProgress)
|
||||||
|
|||||||
@@ -63,22 +63,6 @@ namespace Game.Arenas
|
|||||||
for (int i = RuinsofLordaeronObjectTypes.Buff1; i <= RuinsofLordaeronObjectTypes.Buff2; ++i)
|
for (int i = RuinsofLordaeronObjectTypes.Buff1; i <= RuinsofLordaeronObjectTypes.Buff2; ++i)
|
||||||
SpawnBGObject(i, 60);
|
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
|
struct RuinsofLordaeronObjectTypes
|
||||||
|
|||||||
@@ -208,31 +208,6 @@ namespace Game.BattleGrounds.Zones
|
|||||||
TriggerGameEvent(EventStartBattle);
|
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)
|
void _CreateBanner(byte node, ABNodeStatus type, int teamIndex, bool delay)
|
||||||
{
|
{
|
||||||
// Just put it into the queue
|
// Just put it into the queue
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ using Framework.Constants;
|
|||||||
using Game.Entities;
|
using Game.Entities;
|
||||||
using Game.Maps;
|
using Game.Maps;
|
||||||
using Game.Networking.Packets;
|
using Game.Networking.Packets;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace Game.BattleGrounds.Zones.EyeofStorm
|
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)
|
public override void HandleAreaTrigger(Player player, uint trigger, bool entered)
|
||||||
{
|
{
|
||||||
if (!player.IsAlive()) //hack code, must be removed later
|
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 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()
|
void TeleportPlayers()
|
||||||
{
|
{
|
||||||
foreach (var pair in GetPlayers())
|
foreach (var pair in GetPlayers())
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ using Game.Entities;
|
|||||||
using Game.Networking.Packets;
|
using Game.Networking.Packets;
|
||||||
using Game.DataStorage;
|
using Game.DataStorage;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System;
|
||||||
|
|
||||||
namespace Game.BattleGrounds.Zones
|
namespace Game.BattleGrounds.Zones
|
||||||
{
|
{
|
||||||
@@ -598,6 +599,7 @@ namespace Game.BattleGrounds.Zones
|
|||||||
UpdateWorldState(WSGWorldStates.FlagCapturesHorde, (int)GetTeamScore(team));
|
UpdateWorldState(WSGWorldStates.FlagCapturesHorde, (int)GetTeamScore(team));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Obsolete("Remove me when warsong gluch is updated.")]
|
||||||
public override void HandleAreaTrigger(Player player, uint trigger, bool entered)
|
public override void HandleAreaTrigger(Player player, uint trigger, bool entered)
|
||||||
{
|
{
|
||||||
//uint SpellId = 0;
|
//uint SpellId = 0;
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
using Framework.Constants;
|
using Framework.Constants;
|
||||||
using Game.AI;
|
using Game.AI;
|
||||||
|
using Game.DataStorage;
|
||||||
using Game.Entities;
|
using Game.Entities;
|
||||||
using Game.Scripting;
|
using Game.Scripting;
|
||||||
using System;
|
using System;
|
||||||
@@ -134,4 +135,19 @@ namespace Scripts.EasternKingdoms.AlteracValley
|
|||||||
return;
|
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