From 82f886e3c1daa6ae9049bb0c0c0c00219e9735ba Mon Sep 17 00:00:00 2001 From: megamage Date: Sun, 10 May 2009 22:48:22 -0500 Subject: *Update AI scripts. Use better default AI. --HG-- branch : trunk --- src/bindings/scripts/include/sc_creature.cpp | 32 ++++++++++++++++++++++++++++ src/bindings/scripts/include/sc_creature.h | 27 +++++++++++++++++++++++ 2 files changed, 59 insertions(+) (limited to 'src/bindings/scripts/include') diff --git a/src/bindings/scripts/include/sc_creature.cpp b/src/bindings/scripts/include/sc_creature.cpp index 42ee15074ed..e5a6eb958e0 100644 --- a/src/bindings/scripts/include/sc_creature.cpp +++ b/src/bindings/scripts/include/sc_creature.cpp @@ -55,6 +55,7 @@ void SummonList::DespawnAll() else { erase(begin()); + summon->SetVisibility(VISIBILITY_OFF); summon->setDeathState(JUST_DIED); summon->RemoveCorpse(); } @@ -634,6 +635,37 @@ void Scripted_NoMovementAI::AttackStart(Unit* who) } } +void BossAI::_Reset() +{ + events.Reset(); + summons.DespawnAll(); + instance->SetBossState(bossId, NOT_STARTED); +} + +void BossAI::_JustDied() +{ + events.Reset(); + summons.DespawnAll(); + instance->SetBossState(bossId, DONE); +} + +void BossAI::_EnterCombat() +{ + DoZoneInCombat(); + instance->SetBossState(bossId, IN_PROGRESS); +} + +void BossAI::JustSummoned(Creature *summon) +{ + summons.Summon(summon); + DoZoneInCombat(summon); +} + +void BossAI::SummonedCreatureDespawn(Creature *summon) +{ + summons.Despawn(summon); +} + #define GOBJECT(x) (const_cast(GetGameObjectInfo(x))) void LoadOverridenSQLData() diff --git a/src/bindings/scripts/include/sc_creature.h b/src/bindings/scripts/include/sc_creature.h index 8336df545b6..26bf5fb400b 100644 --- a/src/bindings/scripts/include/sc_creature.h +++ b/src/bindings/scripts/include/sc_creature.h @@ -12,6 +12,8 @@ #include "CreatureAI.h" #include "CreatureAIImpl.h" +class ScriptedInstance; + class SummonList : private std::list { public: @@ -216,5 +218,30 @@ struct TRINITY_DLL_DECL NullCreatureAI : public ScriptedAI void UpdateAI(const uint32) {} }; +struct TRINITY_DLL_DECL BossAI : public ScriptedAI +{ + BossAI(Creature *c, uint32 id) : ScriptedAI(c), bossId(id) + , summons(me), instance((ScriptedInstance*)c->GetInstanceData()) + {} + + uint32 bossId; + EventMap events; + SummonList summons; + ScriptedInstance *instance; + + void JustSummoned(Creature *summon); + void SummonedCreatureDespawn(Creature *summon); + + void UpdateAI(const uint32 diff) = 0; + + void _Reset(); + void _EnterCombat(); + void _JustDied(); + + void Reset() { _Reset(); } + void EnterCombat(Unit *who) { _EnterCombat(); } + void JustDied(Unit *killer) { _JustDied(); } +}; + #endif -- cgit v1.2.3