aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Scripting/ScriptMgr.cpp2
-rw-r--r--src/server/game/Scripting/ScriptMgr.h2
-rw-r--r--src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp236
3 files changed, 123 insertions, 117 deletions
diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp
index 8e660f7116e..1ef16ec2488 100644
--- a/src/server/game/Scripting/ScriptMgr.cpp
+++ b/src/server/game/Scripting/ScriptMgr.cpp
@@ -719,7 +719,7 @@ CreatureAI* ScriptMgr::GetCreatureAI(Creature* creature)
ASSERT(creature);
GET_SCRIPT_RET(CreatureScript, creature->GetScriptId(), tmpscript, NULL);
- return tmpscript->OnGetAI();
+ return tmpscript->OnGetAI(creature);
}
void ScriptMgr::OnCreatureUpdate(Creature* creature, uint32 diff)
diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h
index 64d8e92abea..842befaf057 100644
--- a/src/server/game/Scripting/ScriptMgr.h
+++ b/src/server/game/Scripting/ScriptMgr.h
@@ -487,7 +487,7 @@ class CreatureScript : public ScriptObject, public UpdatableScript<Creature>
virtual uint32 OnDialogStatus(Player* player, Creature* creature) { return 0; }
// Called when a CreatureAI object is needed for the creature.
- virtual CreatureAI* OnGetAI() { return NULL; }
+ virtual CreatureAI* OnGetAI(Creature* creature) const { return NULL; }
};
class GameObjectScript : public ScriptObject, public UpdatableScript<GameObject>
diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp
index 7592742ef23..848d587253a 100644
--- a/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp
+++ b/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp
@@ -47,135 +47,141 @@ enum Creatures
NPC_WEST_FROSTWOLF_WARMASTER = 14777
};
-struct mob_av_marshal_or_warmasterAI : public ScriptedAI
+class mob_av_marshal_or_warmaster : public CreatureScript
{
- mob_av_marshal_or_warmasterAI(Creature *c) : ScriptedAI(c) {}
-
- uint32 uiChargeTimer;
- uint32 uiCleaveTimer;
- uint32 uiDemoralizingShoutTimer;
- uint32 uiWhirlwind1Timer;
- uint32 uiWhirlwind2Timer;
- uint32 uiEnrageTimer;
- uint32 uiResetTimer;
-
- bool bHasAura;
-
- void Reset()
- {
- uiChargeTimer = urand(2*IN_MILLISECONDS,12*IN_MILLISECONDS);
- uiCleaveTimer = urand(1*IN_MILLISECONDS,11*IN_MILLISECONDS);
- uiDemoralizingShoutTimer = urand(2*IN_MILLISECONDS,2*IN_MILLISECONDS);
- uiWhirlwind1Timer = urand(1*IN_MILLISECONDS,12*IN_MILLISECONDS);
- uiWhirlwind2Timer = urand(5*IN_MILLISECONDS,20*IN_MILLISECONDS);
- uiEnrageTimer = urand(5*IN_MILLISECONDS,20*IN_MILLISECONDS);
- uiResetTimer = 5*IN_MILLISECONDS;
-
- bHasAura = false;
- }
-
- void JustRespawned()
- {
- Reset();
- }
-
- void UpdateAI(const uint32 diff)
- {
- if (!bHasAura)
- {
- switch(me->GetEntry())
- {
- case NPC_NORTH_MARSHAL:
- DoCast(me,SPELL_NORTH_MARSHAL);
- break;
- case NPC_SOUTH_MARSHAL:
- DoCast(me,SPELL_SOUTH_MARSHAL);
- break;
- case NPC_STONEHEARTH_MARSHAL:
- DoCast(me,SPELL_STONEHEARTH_MARSHAL);
- break;
- case NPC_ICEWING_MARSHAL:
- DoCast(me,SPELL_ICEWING_MARSHAL);
- break;
- case NPC_EAST_FROSTWOLF_WARMASTER:
- DoCast(me,SPELL_EAST_FROSTWOLF_WARMASTER);
- break;
- case NPC_WEST_FROSTWOLF_WARMASTER:
- DoCast(me,SPELL_WEST_FROSTWOLF_WARMASTER);
- break;
- case NPC_ICEBLOOD_WARMASTER:
- DoCast(me,SPELL_ICEBLOOD_WARMASTER);
- break;
- case NPC_TOWER_POINT_WARMASTER:
- DoCast(me,SPELL_TOWER_POINT_WARMASTER);
- break;
- }
-
- bHasAura = true;
- }
-
- if (!UpdateVictim())
- return;
+ public:
- if (uiChargeTimer <= diff)
+ mob_av_marshal_or_warmaster()
+ : CreatureScript("mob_av_marshal_or_warmaster")
{
- DoCast(me->getVictim(), SPELL_CHARGE);
- uiChargeTimer = urand(10*IN_MILLISECONDS,25*IN_MILLISECONDS);
- } else uiChargeTimer -= diff;
+ }
- if (uiCleaveTimer <= diff)
+ struct mob_av_marshal_or_warmasterAI : public ScriptedAI
{
- DoCast(me->getVictim(), SPELL_CLEAVE);
- uiCleaveTimer = urand(10*IN_MILLISECONDS,16*IN_MILLISECONDS);
- } else uiCleaveTimer -= diff;
+ mob_av_marshal_or_warmasterAI(Creature *c) : ScriptedAI(c) {}
- if (uiDemoralizingShoutTimer <= diff)
- {
- DoCast(me->getVictim(), SPELL_DEMORALIZING_SHOUT);
- uiDemoralizingShoutTimer = urand(10*IN_MILLISECONDS,15*IN_MILLISECONDS);
- } else uiDemoralizingShoutTimer -= diff;
+ uint32 uiChargeTimer;
+ uint32 uiCleaveTimer;
+ uint32 uiDemoralizingShoutTimer;
+ uint32 uiWhirlwind1Timer;
+ uint32 uiWhirlwind2Timer;
+ uint32 uiEnrageTimer;
+ uint32 uiResetTimer;
- if (uiWhirlwind1Timer <= diff)
- {
- DoCast(me->getVictim(), SPELL_WHIRLWIND1);
- uiWhirlwind1Timer = urand(6*IN_MILLISECONDS,20*IN_MILLISECONDS);
- } else uiWhirlwind1Timer -= diff;
+ bool bHasAura;
- if (uiWhirlwind2Timer <= diff)
- {
- DoCast(me->getVictim(), SPELL_WHIRLWIND2);
- uiWhirlwind2Timer = urand(10*IN_MILLISECONDS,25*IN_MILLISECONDS);
- } else uiWhirlwind2Timer -= diff;
+ void Reset()
+ {
+ uiChargeTimer = urand(2*IN_MILLISECONDS,12*IN_MILLISECONDS);
+ uiCleaveTimer = urand(1*IN_MILLISECONDS,11*IN_MILLISECONDS);
+ uiDemoralizingShoutTimer = urand(2*IN_MILLISECONDS,2*IN_MILLISECONDS);
+ uiWhirlwind1Timer = urand(1*IN_MILLISECONDS,12*IN_MILLISECONDS);
+ uiWhirlwind2Timer = urand(5*IN_MILLISECONDS,20*IN_MILLISECONDS);
+ uiEnrageTimer = urand(5*IN_MILLISECONDS,20*IN_MILLISECONDS);
+ uiResetTimer = 5*IN_MILLISECONDS;
+
+ bHasAura = false;
+ }
- if (uiEnrageTimer <= diff)
- {
- DoCast(me->getVictim(), SPELL_ENRAGE);
- uiEnrageTimer = urand(10*IN_MILLISECONDS,30*IN_MILLISECONDS);
- }else uiEnrageTimer -= diff;
+ void JustRespawned()
+ {
+ Reset();
+ }
+ void UpdateAI(const uint32 diff)
+ {
+ if (!bHasAura)
+ {
+ switch(me->GetEntry())
+ {
+ case NPC_NORTH_MARSHAL:
+ DoCast(me,SPELL_NORTH_MARSHAL);
+ break;
+ case NPC_SOUTH_MARSHAL:
+ DoCast(me,SPELL_SOUTH_MARSHAL);
+ break;
+ case NPC_STONEHEARTH_MARSHAL:
+ DoCast(me,SPELL_STONEHEARTH_MARSHAL);
+ break;
+ case NPC_ICEWING_MARSHAL:
+ DoCast(me,SPELL_ICEWING_MARSHAL);
+ break;
+ case NPC_EAST_FROSTWOLF_WARMASTER:
+ DoCast(me,SPELL_EAST_FROSTWOLF_WARMASTER);
+ break;
+ case NPC_WEST_FROSTWOLF_WARMASTER:
+ DoCast(me,SPELL_WEST_FROSTWOLF_WARMASTER);
+ break;
+ case NPC_ICEBLOOD_WARMASTER:
+ DoCast(me,SPELL_ICEBLOOD_WARMASTER);
+ break;
+ case NPC_TOWER_POINT_WARMASTER:
+ DoCast(me,SPELL_TOWER_POINT_WARMASTER);
+ break;
+ }
+
+ bHasAura = true;
+ }
+
+ if (!UpdateVictim())
+ return;
+
+ if (uiChargeTimer <= diff)
+ {
+ DoCast(me->getVictim(), SPELL_CHARGE);
+ uiChargeTimer = urand(10*IN_MILLISECONDS,25*IN_MILLISECONDS);
+ } else uiChargeTimer -= diff;
+
+ if (uiCleaveTimer <= diff)
+ {
+ DoCast(me->getVictim(), SPELL_CLEAVE);
+ uiCleaveTimer = urand(10*IN_MILLISECONDS,16*IN_MILLISECONDS);
+ } else uiCleaveTimer -= diff;
+
+ if (uiDemoralizingShoutTimer <= diff)
+ {
+ DoCast(me->getVictim(), SPELL_DEMORALIZING_SHOUT);
+ uiDemoralizingShoutTimer = urand(10*IN_MILLISECONDS,15*IN_MILLISECONDS);
+ } else uiDemoralizingShoutTimer -= diff;
+
+ if (uiWhirlwind1Timer <= diff)
+ {
+ DoCast(me->getVictim(), SPELL_WHIRLWIND1);
+ uiWhirlwind1Timer = urand(6*IN_MILLISECONDS,20*IN_MILLISECONDS);
+ } else uiWhirlwind1Timer -= diff;
+
+ if (uiWhirlwind2Timer <= diff)
+ {
+ DoCast(me->getVictim(), SPELL_WHIRLWIND2);
+ uiWhirlwind2Timer = urand(10*IN_MILLISECONDS,25*IN_MILLISECONDS);
+ } else uiWhirlwind2Timer -= diff;
+
+ if (uiEnrageTimer <= diff)
+ {
+ DoCast(me->getVictim(), SPELL_ENRAGE);
+ uiEnrageTimer = urand(10*IN_MILLISECONDS,30*IN_MILLISECONDS);
+ }else uiEnrageTimer -= diff;
+
+
+ // check if creature is not outside of building
+ if (uiResetTimer <= diff)
+ {
+ if (me->GetDistance2d(me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY()) > 50)
+ EnterEvadeMode();
+ uiResetTimer = 5*IN_MILLISECONDS;
+ } else uiResetTimer -= diff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
- // check if creature is not outside of building
- if (uiResetTimer <= diff)
+ CreatureAI* OnGetAI(Creature* creature) const
{
- if (me->GetDistance2d(me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY()) > 50)
- EnterEvadeMode();
- uiResetTimer = 5*IN_MILLISECONDS;
- } else uiResetTimer -= diff;
-
- DoMeleeAttackIfReady();
- }
+ return new mob_av_marshal_or_warmasterAI(creature);
+ }
};
-CreatureAI* GetAI_mob_av_marshal_or_warmaster(Creature *_Creature)
-{
- return new mob_av_marshal_or_warmasterAI (_Creature);
-}
-
void AddSC_alterac_valley()
{
- Script *newscript;
- newscript = new Script;
- newscript->Name = "mob_av_marshal_or_warmaster";
- newscript->GetAI = &GetAI_mob_av_marshal_or_warmaster;
- newscript->RegisterSelf();
+ new mob_av_marshal_or_warmaster();
}