aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNyeriah <sarah.trysan@live.com>2014-09-10 03:45:44 -0300
committerNyeriah <sarah.trysan@live.com>2014-09-10 03:45:44 -0300
commit561cc47a0021d23d2a2f3106002a8ef44735ec65 (patch)
treedaa48d5929aebad26f6b0a292b316ec92cd717ed /src
parentb7866336010f1346a43a95a977ee5eb9eda74467 (diff)
Scripts/AV: Captain Galvangar updated to EventMaps
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp133
1 files changed, 65 insertions, 68 deletions
diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp
index e422975bd1a..0c029537add 100644
--- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp
+++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp
@@ -27,11 +27,20 @@ enum Spells
SPELL_MORTAL_STRIKE = 16856
};
-enum Yells
+enum Texts
{
- YELL_AGGRO = 0,
- YELL_EVADE = 1,
- YELL_BUFF = 2
+ SAY_AGGRO = 0,
+ SAY_EVADE = 1,
+ SAY_BUFF = 2
+};
+
+enum Events
+{
+ EVENT_CLEAVE = 1,
+ EVENT_FRIGHTENING_SHOUT,
+ EVENT_WHIRLWIND1,
+ EVENT_WHIRLWIND2,
+ EVENT_MORTAL_STRIKE
};
enum Action
@@ -46,97 +55,85 @@ public:
struct boss_galvangarAI : public ScriptedAI
{
- boss_galvangarAI(Creature* creature) : ScriptedAI(creature)
- {
- Initialize();
- }
-
- void Initialize()
- {
- CleaveTimer = urand(1 * IN_MILLISECONDS, 9 * IN_MILLISECONDS);
- FrighteningShoutTimer = urand(2 * IN_MILLISECONDS, 19 * IN_MILLISECONDS);
- Whirlwind1Timer = urand(1 * IN_MILLISECONDS, 13 * IN_MILLISECONDS);
- Whirlwind2Timer = urand(5 * IN_MILLISECONDS, 20 * IN_MILLISECONDS);
- MortalStrikeTimer = urand(5 * IN_MILLISECONDS, 20 * IN_MILLISECONDS);
- ResetTimer = 5 * IN_MILLISECONDS;
- }
-
- uint32 CleaveTimer;
- uint32 FrighteningShoutTimer;
- uint32 Whirlwind1Timer;
- uint32 Whirlwind2Timer;
- uint32 MortalStrikeTimer;
- uint32 ResetTimer;
+ boss_galvangarAI(Creature* creature) : ScriptedAI(creature) { }
void Reset() override
{
- Initialize();
+ events.Reset();
}
void EnterCombat(Unit* /*who*/) override
{
- Talk(YELL_AGGRO);
- }
-
- void JustRespawned() override
- {
- Reset();
+ Talk(SAY_AGGRO);
+ events.ScheduleEvent(EVENT_CLEAVE, urand(1 * IN_MILLISECONDS, 9 * IN_MILLISECONDS));
+ events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, urand(2 * IN_MILLISECONDS, 19 * IN_MILLISECONDS));
+ events.ScheduleEvent(EVENT_WHIRLWIND1, urand(1 * IN_MILLISECONDS, 13 * IN_MILLISECONDS));
+ events.ScheduleEvent(EVENT_WHIRLWIND2, urand(5 * IN_MILLISECONDS, 20 * IN_MILLISECONDS));
+ events.ScheduleEvent(EVENT_MORTAL_STRIKE, urand(5 * IN_MILLISECONDS, 20 * IN_MILLISECONDS));
}
void DoAction(int32 actionId) override
{
if (actionId == ACTION_BUFF_YELL)
- Talk(YELL_BUFF);
+ Talk(SAY_BUFF);
}
- void UpdateAI(uint32 diff) override
+ bool CheckInRoom()
{
- if (!UpdateVictim())
- return;
-
- if (CleaveTimer <= diff)
+ if (me->GetDistance2d(me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY()) > 50)
{
- DoCastVictim(SPELL_CLEAVE);
- CleaveTimer = urand(10 * IN_MILLISECONDS, 16 * IN_MILLISECONDS);
- } else CleaveTimer -= diff;
+ EnterEvadeMode();
+ Talk(SAY_EVADE);
+ return false;
+ }
- if (FrighteningShoutTimer <= diff)
- {
- DoCastVictim(SPELL_FRIGHTENING_SHOUT);
- FrighteningShoutTimer = urand(10 * IN_MILLISECONDS, 15 * IN_MILLISECONDS);
- } else FrighteningShoutTimer -= diff;
+ return true;
+ }
- if (Whirlwind1Timer <= diff)
- {
- DoCastVictim(SPELL_WHIRLWIND1);
- Whirlwind1Timer = urand(6 * IN_MILLISECONDS, 10 * IN_MILLISECONDS);
- } else Whirlwind1Timer -= diff;
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim() || !CheckInRoom())
+ return;
- if (Whirlwind2Timer <= diff)
- {
- DoCastVictim(SPELL_WHIRLWIND2);
- Whirlwind2Timer = urand(10 * IN_MILLISECONDS, 25 * IN_MILLISECONDS);
- } else Whirlwind2Timer -= diff;
+ events.Update(diff);
- if (MortalStrikeTimer <= diff)
- {
- DoCastVictim(SPELL_MORTAL_STRIKE);
- MortalStrikeTimer = urand(10 * IN_MILLISECONDS, 30 * IN_MILLISECONDS);
- } else MortalStrikeTimer -= diff;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- // check if creature is not outside of building
- if (ResetTimer <= diff)
+ while (uint32 eventId = events.ExecuteEvent())
{
- if (me->GetDistance2d(me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY()) > 50)
+ switch (eventId)
{
- EnterEvadeMode();
- Talk(YELL_EVADE);
+ case EVENT_CLEAVE:
+ DoCastVictim(SPELL_CLEAVE);
+ events.ScheduleEvent(EVENT_CLEAVE, urand(10 * IN_MILLISECONDS, 16 * IN_MILLISECONDS));
+ break;
+ case EVENT_FRIGHTENING_SHOUT:
+ DoCastVictim(SPELL_FRIGHTENING_SHOUT);
+ events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, urand(10 * IN_MILLISECONDS, 15 * IN_MILLISECONDS));
+ break;
+ case EVENT_WHIRLWIND1:
+ DoCastVictim(SPELL_WHIRLWIND1);
+ events.ScheduleEvent(EVENT_WHIRLWIND1, urand(6 * IN_MILLISECONDS, 10 * IN_MILLISECONDS));
+ break;
+ case EVENT_WHIRLWIND2:
+ DoCastVictim(SPELL_WHIRLWIND2);
+ events.ScheduleEvent(EVENT_WHIRLWIND2, urand(10 * IN_MILLISECONDS, 25 * IN_MILLISECONDS));
+ break;
+ case EVENT_MORTAL_STRIKE:
+ DoCastVictim(SPELL_MORTAL_STRIKE);
+ events.ScheduleEvent(EVENT_MORTAL_STRIKE, urand(10 * IN_MILLISECONDS, 30 * IN_MILLISECONDS));
+ break;
+ default:
+ break;
}
- ResetTimer = 5 * IN_MILLISECONDS;
- } else ResetTimer -= diff;
+ }
DoMeleeAttackIfReady();
}
+
+ private:
+ EventMap events;
};
CreatureAI* GetAI(Creature* creature) const override