diff options
-rw-r--r-- | src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp | 2 | ||||
-rw-r--r-- | src/game/CreatureAIRegistry.cpp | 1 | ||||
-rw-r--r-- | src/game/CreatureAISelector.cpp | 11 | ||||
-rw-r--r-- | src/game/NullCreatureAI.cpp | 11 | ||||
-rw-r--r-- | src/game/NullCreatureAI.h | 9 | ||||
-rw-r--r-- | src/game/TemporarySummon.cpp | 1 |
6 files changed, 30 insertions, 5 deletions
diff --git a/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp b/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp index 4790bf1f97d..68e15fd0282 100644 --- a/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp +++ b/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp @@ -629,7 +629,7 @@ CreatureAI* GetAI_npc_dkc1_gothik(Creature *_Creature) return new npc_dkc1_gothikAI(_Creature); } -// npc 28912 quest 17217 boss 29001 go 191092 +// npc 28912 quest 17217 boss 29001 mob 29007 go 191092 void AddSC_the_scarlet_enclave() { diff --git a/src/game/CreatureAIRegistry.cpp b/src/game/CreatureAIRegistry.cpp index d4b30508563..03c12afaaf6 100644 --- a/src/game/CreatureAIRegistry.cpp +++ b/src/game/CreatureAIRegistry.cpp @@ -37,6 +37,7 @@ namespace AIRegistry void Initialize() { (new CreatureAIFactory<NullCreatureAI>("NullCreatureAI"))->RegisterSelf(); + (new CreatureAIFactory<TriggerAI>("TriggerAI"))->RegisterSelf(); (new CreatureAIFactory<AggressorAI>("AggressorAI"))->RegisterSelf(); (new CreatureAIFactory<ReactorAI>("ReactorAI"))->RegisterSelf(); (new CreatureAIFactory<PassiveAI>("PassiveAI"))->RegisterSelf(); diff --git a/src/game/CreatureAISelector.cpp b/src/game/CreatureAISelector.cpp index bcec34781b0..65e50a2e41b 100644 --- a/src/game/CreatureAISelector.cpp +++ b/src/game/CreatureAISelector.cpp @@ -60,12 +60,17 @@ namespace FactorySelector ai_factory = ai_registry.GetRegistryItem("NullCreatureAI"); else if(creature->isGuard()) ai_factory = ai_registry.GetRegistryItem("GuardAI"); - else if(creature->HasSummonMask(SUMMON_MASK_GUARDIAN)) + else if(creature->isGuardian()) ai_factory = ai_registry.GetRegistryItem("PetAI"); else if(creature->isTotem()) ai_factory = ai_registry.GetRegistryItem("TotemAI"); - else if(creature->GetCreatureInfo()->flags_extra & CREATURE_FLAG_EXTRA_TRIGGER) - ai_factory = ai_registry.GetRegistryItem("NullCreatureAI"); + else if(creature->isTrigger()) + { + if(creature->m_spells[0]) + ai_factory = ai_registry.GetRegistryItem("TriggerAI"); + else + ai_factory = ai_registry.GetRegistryItem("NullCreatureAI"); + } else if(creature->GetCreatureType() == CREATURE_TYPE_CRITTER) ai_factory = ai_registry.GetRegistryItem("CritterAI"); } diff --git a/src/game/NullCreatureAI.cpp b/src/game/NullCreatureAI.cpp index be59ed6e40d..5547ad8f059 100644 --- a/src/game/NullCreatureAI.cpp +++ b/src/game/NullCreatureAI.cpp @@ -20,6 +20,7 @@ #include "NullCreatureAI.h" #include "Creature.h" +#include "TemporarySummon.h" void PassiveAI::UpdateAI(const uint32) { @@ -68,3 +69,13 @@ void CritterAI::EnterEvadeMode() me->SetControlled(false, UNIT_STAT_FLEEING); CreatureAI::EnterEvadeMode(); } + +void TriggerAI::UpdateAI(const uint32 diff) +{ + if(!casted) + { + casted = true; + if(me->m_spells[0] && me->isSummon()) + me->CastSpell(me, me->m_spells[0], false, 0, 0, ((TempSummon*)me)->GetSummonerGUID()); + } +} diff --git a/src/game/NullCreatureAI.h b/src/game/NullCreatureAI.h index 2f481c0a758..84031f179b0 100644 --- a/src/game/NullCreatureAI.h +++ b/src/game/NullCreatureAI.h @@ -75,5 +75,14 @@ class TRINITY_DLL_DECL CritterAI : public PassiveAI void EnterEvadeMode(); }; +class TRINITY_DLL_DECL TriggerAI : public NullCreatureAI +{ + public: + explicit TriggerAI(Creature *c) : NullCreatureAI(c), casted(false) {} + void UpdateAI(const uint32); + private: + bool casted; +}; + #endif diff --git a/src/game/TemporarySummon.cpp b/src/game/TemporarySummon.cpp index 7a405fc57ec..d10f45dd7dd 100644 --- a/src/game/TemporarySummon.cpp +++ b/src/game/TemporarySummon.cpp @@ -209,7 +209,6 @@ void TempSummon::InitSummon() { setFaction(owner->getFaction()); SetLevel(owner->getLevel()); - CastSpell(this, m_spells[0], false, 0, 0, m_summonerGUID); } } } |