diff --git a/Source/Game/Arenas/Zones/BladesEdgeArena.cs b/Source/Game/Arenas/Zones/BladesEdgeArena.cs index 79fe6cdd1..b25a71a22 100644 --- a/Source/Game/Arenas/Zones/BladesEdgeArena.cs +++ b/Source/Game/Arenas/Zones/BladesEdgeArena.cs @@ -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; diff --git a/Source/Game/Arenas/Zones/DalaranSewers.cs b/Source/Game/Arenas/Zones/DalaranSewers.cs index 038ab4003..732bef85e 100644 --- a/Source/Game/Arenas/Zones/DalaranSewers.cs +++ b/Source/Game/Arenas/Zones/DalaranSewers.cs @@ -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; } diff --git a/Source/Game/Arenas/Zones/NagrandArena.cs b/Source/Game/Arenas/Zones/NagrandArena.cs index 239e49cfe..d8f8925b4 100644 --- a/Source/Game/Arenas/Zones/NagrandArena.cs +++ b/Source/Game/Arenas/Zones/NagrandArena.cs @@ -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; diff --git a/Source/Game/Arenas/Zones/RingofValor.cs b/Source/Game/Arenas/Zones/RingofValor.cs index 5cb022c9b..0e10ec047 100644 --- a/Source/Game/Arenas/Zones/RingofValor.cs +++ b/Source/Game/Arenas/Zones/RingofValor.cs @@ -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) diff --git a/Source/Game/Arenas/Zones/RuinsofLordaeron.cs b/Source/Game/Arenas/Zones/RuinsofLordaeron.cs index 626b748c1..beb1ba2cf 100644 --- a/Source/Game/Arenas/Zones/RuinsofLordaeron.cs +++ b/Source/Game/Arenas/Zones/RuinsofLordaeron.cs @@ -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 diff --git a/Source/Game/BattleGrounds/Zones/ArathiBasin.cs b/Source/Game/BattleGrounds/Zones/ArathiBasin.cs index bbddaf232..035d72bd3 100644 --- a/Source/Game/BattleGrounds/Zones/ArathiBasin.cs +++ b/Source/Game/BattleGrounds/Zones/ArathiBasin.cs @@ -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 diff --git a/Source/Game/BattleGrounds/Zones/EyeofStorm.cs b/Source/Game/BattleGrounds/Zones/EyeofStorm.cs index 6ebc26e00..d1de6477e 100644 --- a/Source/Game/BattleGrounds/Zones/EyeofStorm.cs +++ b/Source/Game/BattleGrounds/Zones/EyeofStorm.cs @@ -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 diff --git a/Source/Game/BattleGrounds/Zones/StrandofAncients.cs b/Source/Game/BattleGrounds/Zones/StrandofAncients.cs index 346120d88..50fb5fd39 100644 --- a/Source/Game/BattleGrounds/Zones/StrandofAncients.cs +++ b/Source/Game/BattleGrounds/Zones/StrandofAncients.cs @@ -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()) diff --git a/Source/Game/BattleGrounds/Zones/WarsongGluch.cs b/Source/Game/BattleGrounds/Zones/WarsongGluch.cs index d99692775..3ce31e0e7 100644 --- a/Source/Game/BattleGrounds/Zones/WarsongGluch.cs +++ b/Source/Game/BattleGrounds/Zones/WarsongGluch.cs @@ -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; diff --git a/Source/Scripts/EasternKingdoms/AlteracValley/AlteracValley.cs b/Source/Scripts/EasternKingdoms/AlteracValley/AlteracValley.cs index 727a1fb45..53250924e 100644 --- a/Source/Scripts/EasternKingdoms/AlteracValley/AlteracValley.cs +++ b/Source/Scripts/EasternKingdoms/AlteracValley/AlteracValley.cs @@ -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; + } + } } \ No newline at end of file