diff options
author | XTZGZoReX <none@none> | 2010-08-06 20:42:42 +0200 |
---|---|---|
committer | XTZGZoReX <none@none> | 2010-08-06 20:42:42 +0200 |
commit | 731eaf72cbd0c4162efd63a16ea6f950b053c50a (patch) | |
tree | d68fd735b5c507a89781888cefdfa95f6abe2acc /src | |
parent | 23c434cfd86d5c74b9d0a62b89d3423ef3551e15 (diff) |
* Example on AI script conversion (and minor correction in CreatureScript).
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Scripting/ScriptMgr.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Scripting/ScriptMgr.h | 2 | ||||
-rw-r--r-- | src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp | 236 |
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(); } |