From 6cf82048a5345cab9fb20930268fce7e64b2fdc1 Mon Sep 17 00:00:00 2001 From: Trazom62 Date: Tue, 12 Jan 2010 20:51:59 +0100 Subject: Fix normal10/normal25 raid detection in scripts. Replace HEROIC(n,h) macro by DUNGEON_MODE(n,h), RAID_MODE(n10,n25) and RAID_MODE(n10,n25,h10,h25) functions Cleanup all HeroicMode like flags in ScriptedAI sub-class Fix some missing virtual destructors --HG-- branch : trunk --- src/bindings/scripts/include/sc_creature.cpp | 3 +- src/bindings/scripts/include/sc_creature.h | 65 ++++++++++++++++++++++++++-- 2 files changed, 64 insertions(+), 4 deletions(-) (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 bb4d3e68888..565eb76cfae 100644 --- a/src/bindings/scripts/include/sc_creature.cpp +++ b/src/bindings/scripts/include/sc_creature.cpp @@ -87,7 +87,8 @@ ScriptedAI::ScriptedAI(Creature* pCreature) : CreatureAI(pCreature), m_bCombatMovement(true), m_uiEvadeCheckCooldown(2500) { - HeroicMode = m_creature->GetMap()->IsHeroic(); + m_heroicMode = m_creature->GetMap()->IsHeroic(); + m_difficulty = Difficulty(m_creature->GetMap()->GetSpawnMode()); } void ScriptedAI::AttackStartNoMove(Unit* pWho) diff --git a/src/bindings/scripts/include/sc_creature.h b/src/bindings/scripts/include/sc_creature.h index fdeea02997c..ac6cc4fcba5 100644 --- a/src/bindings/scripts/include/sc_creature.h +++ b/src/bindings/scripts/include/sc_creature.h @@ -43,7 +43,7 @@ class SummonList : public std::list struct TRINITY_DLL_DECL ScriptedAI : public CreatureAI { explicit ScriptedAI(Creature* pCreature); - ~ScriptedAI() {} + virtual ~ScriptedAI() {} //************* //CreatureAI Functions @@ -91,8 +91,6 @@ struct TRINITY_DLL_DECL ScriptedAI : public CreatureAI //For fleeing bool IsFleeing; - bool HeroicMode; - //************* //Pure virtual functions //************* @@ -171,14 +169,74 @@ struct TRINITY_DLL_DECL ScriptedAI : public CreatureAI bool EnterEvadeIfOutOfCombatArea(const uint32 uiDiff); + // return true for heroic mode. i.e. + // - for dungeon in mode 10-heroic, + // - for raid in mode 10-Heroic + // - for raid in mode 25-heroic + // DO NOT USE to check raid in mode 25-normal. + bool IsHeroic() { return m_heroicMode; } + + // return the dungeon or raid difficulty + Difficulty getDifficulty() { return m_difficulty; } + + template inline + const T& DUNGEON_MODE(const T& normal5, const T& heroic10) + { + switch(m_difficulty) + { + case DUNGEON_DIFFICULTY_NORMAL: + return normal5; + case DUNGEON_DIFFICULTY_HEROIC: + return heroic10; + } + + return heroic10; + } + + template inline + const T& RAID_MODE(const T& normal10, const T& normal25) + { + switch(m_difficulty) + { + case RAID_DIFFICULTY_10MAN_NORMAL: + return normal10; + case RAID_DIFFICULTY_25MAN_NORMAL: + return normal25; + } + + return normal25; + } + + template inline + const T& RAID_MODE(const T& normal10, const T& normal25, const T& heroic10, const T& heroic25) + { + switch(m_difficulty) + { + case RAID_DIFFICULTY_10MAN_NORMAL: + return normal10; + case RAID_DIFFICULTY_25MAN_NORMAL: + return normal25; + case RAID_DIFFICULTY_10MAN_HEROIC: + return heroic10; + case RAID_DIFFICULTY_25MAN_HEROIC: + return heroic25; + } + + return heroic25; + } + private: bool m_bCombatMovement; uint32 m_uiEvadeCheckCooldown; + + bool m_heroicMode; + Difficulty m_difficulty; }; struct TRINITY_DLL_DECL Scripted_NoMovementAI : public ScriptedAI { Scripted_NoMovementAI(Creature* creature) : ScriptedAI(creature) {} + virtual ~Scripted_NoMovementAI() {} //Called at each attack of m_creature by any victim void AttackStart(Unit* who); @@ -187,6 +245,7 @@ struct TRINITY_DLL_DECL Scripted_NoMovementAI : public ScriptedAI struct TRINITY_DLL_DECL BossAI : public ScriptedAI { BossAI(Creature *c, uint32 id); + virtual ~BossAI() {} const uint32 bossId; EventMap events; -- cgit v1.2.3