diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_balnazzar.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_balnazzar.cpp
index da54b6461b..ccdeef693c 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_balnazzar.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_balnazzar.cpp
@@ -46,7 +46,7 @@ enum Texts
struct boss_balnazzar : public BossAI
{
- boss_balnazzar(Creature* creature) : BossAI(creature, DATA_BALNAZZAR) { }
+ boss_balnazzar(Creature* creature) : BossAI(creature, BOSS_BALNAZZAR) { }
void JustEngagedWith(Unit* who) override
{
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp
index 8c769438b3..608156cd9f 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp
@@ -15,88 +15,98 @@
* with this program. If not, see .
*/
-/* ScriptData
-SDName: boss_timmy_the_cruel
-SD%Complete: 100
-SDComment:
-SDCategory: Stratholme
-EndScriptData */
-
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "stratholme.h"
-enum Says
+enum Texts
{
- SAY_SPAWN = 0
+ // Timmy the Cruel
+ SAY_AGGRO = 0
};
enum Spells
{
- SPELL_RAVENOUSCLAW = 17470
+ // Timmy the Cruel
+ SPELL_THRASH = 12787,
+ SPELL_ENRAGE = 8599,
+ SPELL_RAVENOUS_CLAW = 17470
};
-class boss_timmy_the_cruel : public CreatureScript
+enum Events
{
-public:
- boss_timmy_the_cruel() : CreatureScript("boss_timmy_the_cruel") { }
+ // Timmy the Cruel
+ EVENT_ENRAGE = 1,
+ EVENT_RAVENOUS_CLAW
+};
- CreatureAI* GetAI(Creature* creature) const override
+struct boss_timmy_the_cruel : public BossAI
+{
+ boss_timmy_the_cruel(Creature* creature) : BossAI(creature, BOSS_TIMMY_THE_CRUEL), _enraged(false) { }
+
+ void JustAppeared() override
{
- return new boss_timmy_the_cruelAI(creature);
+ DoCastSelf(SPELL_THRASH);
}
- struct boss_timmy_the_cruelAI : public ScriptedAI
+ void JustEngagedWith(Unit* who) override
{
- boss_timmy_the_cruelAI(Creature* creature) : ScriptedAI(creature)
+ BossAI::JustEngagedWith(who);
+ Talk(SAY_AGGRO, who);
+ events.ScheduleEvent(EVENT_RAVENOUS_CLAW, 14s);
+ }
+
+ void EnterEvadeMode(EvadeReason /*why*/)
+ {
+ _DespawnAtEvade();
+ }
+
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
+ {
+ if (!_enraged && me->HealthBelowPctDamaged(25, damage))
{
- Initialize();
+ _enraged = true;
+ events.ScheduleEvent(EVENT_ENRAGE, 1ms);
}
+ }
- void Initialize()
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
+
+ events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ while (uint32 eventId = events.ExecuteEvent())
{
- RavenousClaw_Timer = 10000;
- HasYelled = false;
- }
-
- uint32 RavenousClaw_Timer;
- bool HasYelled;
-
- void Reset() override
- {
- Initialize();
- }
-
- void JustEngagedWith(Unit* /*who*/) override
- {
- if (!HasYelled)
+ switch (eventId)
{
- Talk(SAY_SPAWN);
- HasYelled = true;
+ case EVENT_ENRAGE:
+ DoCastSelf(SPELL_ENRAGE);
+ break;
+ case EVENT_RAVENOUS_CLAW:
+ DoCastVictim(SPELL_RAVENOUS_CLAW);
+ events.Repeat(5s, 8s);
+ break;
+ default:
+ break;
}
- }
- void UpdateAI(uint32 diff) override
- {
- //Return since we have no target
- if (!UpdateVictim())
+ if (me->HasUnitState(UNIT_STATE_CASTING))
return;
-
- //RavenousClaw
- if (RavenousClaw_Timer <= diff)
- {
- //Cast
- DoCastVictim(SPELL_RAVENOUSCLAW);
- //15 seconds until we should cast this again
- RavenousClaw_Timer = 15000;
- } else RavenousClaw_Timer -= diff;
-
- DoMeleeAttackIfReady();
}
- };
+ DoMeleeAttackIfReady();
+ }
+
+private:
+ bool _enraged;
};
void AddSC_boss_timmy_the_cruel()
{
- new boss_timmy_the_cruel();
+ RegisterStratholmeCreatureAI(boss_timmy_the_cruel);
}
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp b/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp
index 2afdbea4e4..39971cf0a9 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp
@@ -15,13 +15,6 @@
* with this program. If not, see .
*/
-/* ScriptData
-SDName: instance_stratholme
-SD%Complete: 50
-SDComment: In progress. Undead side 75% implemented. Save/load not implemented.
-SDCategory: Stratholme
-EndScriptData */
-
#include "ScriptMgr.h"
#include "AreaBoundary.h"
#include "Creature.h"
@@ -51,13 +44,13 @@ EllipseBoundary const beforeScarletGate(Position(3671.158f, -3181.79f), 60.0f, 4
ObjectData const creatureData[] =
{
- { BOSS_HEARTSINGER_FORRESTEN, DATA_HEARTHSINGER_FORRESTEN },
- { BOSS_TIMMY_THE_CRUEL, DATA_TIMMY_THE_CRUEL },
- { BOSS_COMMANDER_MALOR, DATA_COMMANDER_MALOR },
- { BOSS_WILLEY_HOPEBREAKER, DATA_WILLEY_HOPEBREAKER },
- { BOSS_INSTRUCTOR_GALFORD, DATA_INSTRUCTOR_GALFORD },
- { BOSS_BALNAZZAR, DATA_BALNAZZAR },
- { 0, 0 }, // END
+ { NPC_HEARTSINGER_FORRESTEN, BOSS_HEARTHSINGER_FORRESTEN },
+ { NPC_TIMMY_THE_CRUEL, BOSS_TIMMY_THE_CRUEL },
+ { NPC_COMMANDER_MALOR, BOSS_COMMANDER_MALOR },
+ { NPC_WILLEY_HOPEBREAKER, BOSS_WILLEY_HOPEBREAKER },
+ { NPC_INSTRUCTOR_GALFORD, BOSS_INSTRUCTOR_GALFORD },
+ { NPC_BALNAZZAR, BOSS_BALNAZZAR },
+ { 0, 0 }, // END
};
class instance_stratholme : public InstanceMapScript
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.h b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.h
index 8d66a96499..80dd925036 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.h
+++ b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.h
@@ -26,12 +26,13 @@
enum STRData
{
// Crusader Square
- DATA_HEARTHSINGER_FORRESTEN = 0,
- DATA_TIMMY_THE_CRUEL = 1,
- DATA_COMMANDER_MALOR = 2,
- DATA_WILLEY_HOPEBREAKER = 3,
- DATA_INSTRUCTOR_GALFORD = 4,
- DATA_BALNAZZAR = 5,
+ BOSS_HEARTHSINGER_FORRESTEN = 0,
+ BOSS_TIMMY_THE_CRUEL = 1,
+ BOSS_COMMANDER_MALOR = 2,
+ BOSS_WILLEY_HOPEBREAKER = 3,
+ BOSS_INSTRUCTOR_GALFORD = 4,
+ BOSS_BALNAZZAR = 5,
+
// The Gauntlet
DATA_THE_UNFORGIVEN = 6,
DATA_BARONESS_ANASTARI = 7,
@@ -69,12 +70,12 @@ enum STRDataTypes
enum STRCreatureIds
{
// Crusader Square
- BOSS_HEARTSINGER_FORRESTEN = 10558,
- BOSS_TIMMY_THE_CRUEL = 10808,
- BOSS_COMMANDER_MALOR = 11032,
- BOSS_WILLEY_HOPEBREAKER = 10997,
- BOSS_INSTRUCTOR_GALFORD = 10811,
- BOSS_BALNAZZAR = 10813,
+ NPC_HEARTSINGER_FORRESTEN = 10558,
+ NPC_TIMMY_THE_CRUEL = 10808,
+ NPC_COMMANDER_MALOR = 11032,
+ NPC_WILLEY_HOPEBREAKER = 10997,
+ NPC_INSTRUCTOR_GALFORD = 10811,
+ NPC_BALNAZZAR = 10813,
NPC_CRYSTAL = 10415, // ziggurat crystal
NPC_BARON = 10440, // ziggurat crystal
@@ -90,9 +91,7 @@ enum STRCreatureIds
NPC_CRIMSON_GUARDSMAN = 10418,
NPC_CRIMSON_CONJUROR = 10419,
NPC_CRIMSON_INITATE = 10420,
- NPC_CRIMSON_GALLANT = 10424,
-
- NPC_TIMMY_THE_CRUEL = 10808
+ NPC_CRIMSON_GALLANT = 10424
};
enum STRGameobjectIds