aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormegamage <none@none>2009-06-09 16:18:08 -0500
committermegamage <none@none>2009-06-09 16:18:08 -0500
commit63c07a5767cd9a1171c6db24db0ff59dd7773235 (patch)
tree42dcec722782d81649891ebda056a2e156f50f24
parent2625b4b6c61f3e8bb95454a2b97e7434bfb22b0b (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.cpp2
-rw-r--r--src/game/CreatureAIRegistry.cpp1
-rw-r--r--src/game/CreatureAISelector.cpp11
-rw-r--r--src/game/NullCreatureAI.cpp11
-rw-r--r--src/game/NullCreatureAI.h9
-rw-r--r--src/game/TemporarySummon.cpp1
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);
}
}
}