aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRat <none@none>2009-11-03 13:10:11 +0100
committerRat <none@none>2009-11-03 13:10:11 +0100
commit609b8246f508053d4bb1441754af1da785c98867 (patch)
tree0ed44d38a01812f550bcf44b6a101502c13a19fd /src
parentffb28c06a7719b7a1f908aa4d7d20954d990a82f (diff)
*implement new creatureAI called: AOEAI
-it takes the spell1 from creature_template and casts on him self if aura not found, it can not attack or move -creature becomes unattackable and invisible NOTE: flag 128 should not be set in flags_extra field in creature_template, otherwise spells will be only visible to GMs --HG-- branch : trunk
Diffstat (limited to 'src')
-rw-r--r--src/game/CombatAI.cpp34
-rw-r--r--src/game/CombatAI.h11
-rw-r--r--src/game/CreatureAIRegistry.cpp1
3 files changed, 46 insertions, 0 deletions
diff --git a/src/game/CombatAI.cpp b/src/game/CombatAI.cpp
index b4b7e662188..8be14d32787 100644
--- a/src/game/CombatAI.cpp
+++ b/src/game/CombatAI.cpp
@@ -54,6 +54,11 @@ int TurretAI::Permissible(const Creature *creature)
return PERMIT_BASE_NO;
}
+int AOEAI::Permissible(const Creature *creature)
+{
+ return PERMIT_BASE_NO;
+}
+
void CombatAI::InitializeAI()
{
for (uint32 i = 0; i < CREATURE_MAX_SPELLS; ++i)
@@ -246,3 +251,32 @@ void TurretAI::UpdateAI(const uint32 diff)
//if(HostilReference *ref = me->getThreatManager().getCurrentVictim())
//ref->removeReference();
}
+
+//////////////
+//AOEAI
+//////////////
+
+AOEAI::AOEAI(Creature *c) : CreatureAI(c)
+{
+ ASSERT(me->m_spells[0]);
+ me->SetVisibility(VISIBILITY_ON);//visible to see all spell anims
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);//can't be targeted
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_1);//can't be damaged
+ me->SetDisplayId(11686);//invisible model,around a size of a player
+}
+
+bool AOEAI::CanAIAttack(const Unit *who) const
+{
+ return false;
+}
+
+void AOEAI::AttackStart(Unit *who)
+{
+
+}
+
+void AOEAI::UpdateAI(const uint32 diff)
+{
+ if(!me->HasAura(me->m_spells[0]))
+ me->CastSpell(me, me->m_spells[0],false);
+} \ No newline at end of file
diff --git a/src/game/CombatAI.h b/src/game/CombatAI.h
index 5ded95601ae..8646b572aaf 100644
--- a/src/game/CombatAI.h
+++ b/src/game/CombatAI.h
@@ -90,4 +90,15 @@ struct TRINITY_DLL_SPEC TurretAI : public CreatureAI
float m_minRange;
};
+struct TRINITY_DLL_SPEC AOEAI : public CreatureAI
+{
+ public:
+ explicit AOEAI(Creature *c);
+ bool CanAIAttack(const Unit *who) const;
+ void AttackStart(Unit *who);
+ void UpdateAI(const uint32 diff);
+
+ static int Permissible(const Creature *);
+};
+
#endif
diff --git a/src/game/CreatureAIRegistry.cpp b/src/game/CreatureAIRegistry.cpp
index 67c1f857a56..f68d1124a35 100644
--- a/src/game/CreatureAIRegistry.cpp
+++ b/src/game/CreatureAIRegistry.cpp
@@ -49,6 +49,7 @@ namespace AIRegistry
(new CreatureAIFactory<ArchorAI>("ArchorAI"))->RegisterSelf();
(new CreatureAIFactory<TurretAI>("TurretAI"))->RegisterSelf();
(new CreatureAIFactory<CreatureEventAI>("EventAI"))->RegisterSelf();
+ (new CreatureAIFactory<AOEAI>("AOEAI"))->RegisterSelf();
(new MovementGeneratorFactory<RandomMovementGenerator<Creature> >(RANDOM_MOTION_TYPE))->RegisterSelf();
(new MovementGeneratorFactory<WaypointMovementGenerator<Creature> >(WAYPOINT_MOTION_TYPE))->RegisterSelf();