aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts
diff options
context:
space:
mode:
authorJeremy <Golrag@users.noreply.github.com>2024-01-01 23:33:25 +0100
committerGitHub <noreply@github.com>2024-01-01 23:33:25 +0100
commit6db980b69eed8275a9ffb474bae3ddbbd8cedfe9 (patch)
treee1d61e30d27fd88f301f6acff65efcae7dd6dd6c /src/server/scripts
parent9e22f4fa535d3c26fcb2a6ef7b8e923002f14d26 (diff)
Core/Battlegrounds: Rework Alterac Valley (#29530)
Diffstat (limited to 'src/server/scripts')
-rw-r--r--src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp108
1 files changed, 57 insertions, 51 deletions
diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp
index 79bddc01009..b189434b495 100644
--- a/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp
+++ b/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp
@@ -16,24 +16,21 @@
*/
#include "ScriptMgr.h"
+#include "BattlegroundAV.h"
+#include "GameObject.h"
+#include "GameObjectAI.h"
+#include "Player.h"
#include "ScriptedCreature.h"
+#include <chrono>
+
enum Spells
{
SPELL_CHARGE = 22911,
SPELL_CLEAVE = 40504,
SPELL_DEMORALIZING_SHOUT = 23511,
SPELL_ENRAGE = 8599,
- SPELL_WHIRLWIND = 13736,
-
- SPELL_NORTH_MARSHAL = 45828,
- SPELL_SOUTH_MARSHAL = 45829,
- SPELL_STONEHEARTH_MARSHAL = 45830,
- SPELL_ICEWING_MARSHAL = 45831,
- SPELL_ICEBLOOD_WARMASTER = 45822,
- SPELL_TOWER_POINT_WARMASTER = 45823,
- SPELL_WEST_FROSTWOLF_WARMASTER = 45824,
- SPELL_EAST_FROSTWOLF_WARMASTER = 45826
+ SPELL_WHIRLWIND = 13736
};
enum Creatures
@@ -58,41 +55,12 @@ enum Events
EVENT_CHECK_RESET = 6
};
-struct SpellPair
-{
- uint32 npcEntry;
- uint32 spellId;
-};
-
-uint8 const MAX_SPELL_PAIRS = 8;
-SpellPair const _auraPairs[MAX_SPELL_PAIRS] =
-{
- { NPC_NORTH_MARSHAL, SPELL_NORTH_MARSHAL },
- { NPC_SOUTH_MARSHAL, SPELL_SOUTH_MARSHAL },
- { NPC_STONEHEARTH_MARSHAL, SPELL_STONEHEARTH_MARSHAL },
- { NPC_ICEWING_MARSHAL, SPELL_ICEWING_MARSHAL },
- { NPC_EAST_FROSTWOLF_WARMASTER, SPELL_EAST_FROSTWOLF_WARMASTER },
- { NPC_WEST_FROSTWOLF_WARMASTER, SPELL_WEST_FROSTWOLF_WARMASTER },
- { NPC_TOWER_POINT_WARMASTER, SPELL_TOWER_POINT_WARMASTER },
- { NPC_ICEBLOOD_WARMASTER, SPELL_ICEBLOOD_WARMASTER }
-};
-
struct npc_av_marshal_or_warmaster : public ScriptedAI
{
- npc_av_marshal_or_warmaster(Creature* creature) : ScriptedAI(creature)
- {
- Initialize();
- }
-
- void Initialize()
- {
- _hasAura = false;
- }
+ npc_av_marshal_or_warmaster(Creature* creature) : ScriptedAI(creature) { }
void Reset() override
{
- Initialize();
-
events.Reset();
events.ScheduleEvent(EVENT_CHARGE_TARGET, 2s, 12s);
events.ScheduleEvent(EVENT_CLEAVE, 1s, 11s);
@@ -109,16 +77,6 @@ struct npc_av_marshal_or_warmaster : public ScriptedAI
void UpdateAI(uint32 diff) override
{
- // I have a feeling this isn't blizzlike, but owell, I'm only passing by and cleaning up.
- if (!_hasAura)
- {
- for (uint8 i = 0; i < MAX_SPELL_PAIRS; ++i)
- if (_auraPairs[i].npcEntry == me->GetEntry())
- DoCast(me, _auraPairs[i].spellId);
-
- _hasAura = true;
- }
-
if (!UpdateVictim())
return;
@@ -172,10 +130,58 @@ struct npc_av_marshal_or_warmaster : public ScriptedAI
private:
EventMap events;
- bool _hasAura;
+};
+
+struct go_av_capturable_object : public GameObjectAI
+{
+ go_av_capturable_object(GameObject* go) : GameObjectAI(go) { }
+
+ void Reset() override
+ {
+ me->setActive(true);
+ }
+
+ bool OnGossipHello(Player* player) override
+ {
+ if (me->GetGoState() != GO_STATE_READY)
+ return true;
+
+ if (ZoneScript* zonescript = me->GetZoneScript())
+ {
+ zonescript->DoAction(ACTION_AV_INTERACT_CAPTURABLE_OBJECT, player, me);
+ return false;
+ }
+
+ return true;
+ }
+};
+
+struct go_av_contested_object : public go_av_capturable_object
+{
+ go_av_contested_object(GameObject* go) : go_av_capturable_object(go) { }
+
+ void Reset() override
+ {
+ go_av_capturable_object::Reset();
+ _scheduler.Schedule(4min, [&](TaskContext)
+ {
+ if (ZoneScript* zonescript = me->GetZoneScript())
+ zonescript->DoAction(ACTION_AV_CAPTURE_CAPTURABLE_OBJECT, me, me);
+ });
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ _scheduler.Update(diff);
+ }
+
+private:
+ TaskScheduler _scheduler;
};
void AddSC_alterac_valley()
{
RegisterCreatureAI(npc_av_marshal_or_warmaster);
+ RegisterGameObjectAI(go_av_capturable_object);
+ RegisterGameObjectAI(go_av_contested_object);
}