diff options
author | megamage <none@none> | 2009-06-09 16:18:08 -0500 |
---|---|---|
committer | megamage <none@none> | 2009-06-09 16:18:08 -0500 |
commit | 63c07a5767cd9a1171c6db24db0ff59dd7773235 (patch) | |
tree | 42dcec722782d81649891ebda056a2e156f50f24 | |
parent | 2625b4b6c61f3e8bb95454a2b97e7434bfb22b0b (diff) |
*Do not trigger spells with triggers with scripts. This fixes the bug that shadow fissure of Kel'thuzad deals damage without delay.
--HG--
branch : trunk
-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); } } } |