aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bindings/scripts/scripts/creature/mob_event_ai.cpp25
-rw-r--r--src/bindings/scripts/scripts/custom/test.cpp2
-rw-r--r--src/bindings/scripts/scripts/zone/aunchindoun/sethekk_halls/instance_sethekk_halls.cpp18
-rw-r--r--src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp20
-rw-r--r--src/bindings/scripts/scripts/zone/black_temple/.boss_teron_gorefiend.cpp-woains5
-rw-r--r--src/bindings/scripts/scripts/zone/black_temple/boss_supremus.cpp6
-rw-r--r--src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_lady_vashj.cpp11
-rw-r--r--src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_broggok.cpp19
-rw-r--r--src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_kelidan_the_breaker.cpp66
-rw-r--r--src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_the_maker.cpp26
-rw-r--r--src/bindings/scripts/scripts/zone/hellfire_citadel/magtheridons_lair/instance_magtheridons_lair.cpp2
-rw-r--r--src/bindings/scripts/scripts/zone/naxxramas/boss_highlord_mograine.cpp2
-rw-r--r--src/bindings/scripts/scripts/zone/shadowfang_keep/instance_shadowfang_keep.cpp12
-rw-r--r--src/bindings/scripts/scripts/zone/stratholme/instance_stratholme.cpp12
-rw-r--r--src/bindings/scripts/scripts/zone/sunwell_plateau/boss_eredar_twins.cpp12
-rw-r--r--src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_ouro.cpp1
-rw-r--r--src/bindings/scripts/scripts/zone/uldaman/boss_archaedas.cpp6
-rw-r--r--src/game/InstanceData.cpp37
-rw-r--r--src/game/InstanceData.h6
19 files changed, 161 insertions, 127 deletions
diff --git a/src/bindings/scripts/scripts/creature/mob_event_ai.cpp b/src/bindings/scripts/scripts/creature/mob_event_ai.cpp
index d43b863300d..e59c50e1311 100644
--- a/src/bindings/scripts/scripts/creature/mob_event_ai.cpp
+++ b/src/bindings/scripts/scripts/creature/mob_event_ai.cpp
@@ -128,7 +128,7 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
{
case EVENT_T_TIMER:
{
- if (!InCombat)
+ if (!m_creature->isInCombat())
return false;
//Repeat Timers
@@ -148,7 +148,7 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
break;
case EVENT_T_TIMER_OOC:
{
- if (InCombat)
+ if (m_creature->isInCombat())
return false;
//Repeat Timers
@@ -168,7 +168,7 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
break;
case EVENT_T_HP:
{
- if (!InCombat || !m_creature->GetMaxHealth())
+ if (!m_creature->isInCombat() || !m_creature->GetMaxHealth())
return false;
uint32 perc = (m_creature->GetHealth()*100) / m_creature->GetMaxHealth();
@@ -193,7 +193,7 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
break;
case EVENT_T_MANA:
{
- if (!InCombat || !m_creature->GetMaxPower(POWER_MANA))
+ if (!m_creature->isInCombat() || !m_creature->GetMaxPower(POWER_MANA))
return false;
uint32 perc = (m_creature->GetPower(POWER_MANA)*100) / m_creature->GetMaxPower(POWER_MANA);
@@ -303,7 +303,7 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
break;
case EVENT_T_TARGET_HP:
{
- if (!InCombat || !m_creature->getVictim() || !m_creature->getVictim()->GetMaxHealth())
+ if (!m_creature->isInCombat() || !m_creature->getVictim() || !m_creature->getVictim()->GetMaxHealth())
return false;
uint32 perc = (m_creature->getVictim()->GetHealth()*100) / m_creature->getVictim()->GetMaxHealth();
@@ -328,7 +328,7 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
break;
case EVENT_T_TARGET_CASTING:
{
- if (!InCombat || !m_creature->getVictim() || !m_creature->getVictim()->IsNonMeleeSpellCasted(false, false, true))
+ if (!m_creature->isInCombat() || !m_creature->getVictim() || !m_creature->getVictim()->IsNonMeleeSpellCasted(false, false, true))
return false;
//Repeat Timers
@@ -348,7 +348,7 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
break;
case EVENT_T_FRIENDLY_HP:
{
- if (!InCombat)
+ if (!m_creature->isInCombat())
return false;
Unit* pUnit = DoSelectLowestHpFriendly(param2, param1);
@@ -375,7 +375,7 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
break;
case EVENT_T_FRIENDLY_IS_CC:
{
- if (!InCombat)
+ if (!m_creature->isInCombat())
return false;
std::list<Creature*> pList = DoFindFriendlyCC(param2);
@@ -1030,7 +1030,6 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
void JustRespawned()
{
- InCombat = false;
IsFleeing = false;
Reset();
@@ -1110,7 +1109,6 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
void JustDied(Unit* killer)
{
- InCombat = false;
IsFleeing = false;
Reset();
@@ -1207,9 +1205,8 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
{
//Begin melee attack if we are within range
- if (!InCombat)
+ if (!m_creature->isInCombat())
{
- InCombat = true;
Aggro(who);
}
@@ -1226,7 +1223,7 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
void MoveInLineOfSight(Unit *who)
{
- if (!who || InCombat)
+ if (!who || m_creature->isInCombat())
return;
//Check for OOC LOS Event
@@ -1278,7 +1275,7 @@ struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI
void UpdateAI(const uint32 diff)
{
//Check if we are in combat (also updates calls threat update code)
- bool Combat = InCombat ? UpdateVictim() : false;
+ bool Combat = m_creature->isInCombat() ? UpdateVictim() : false;
//Must return if creature isn't alive. Normally select hostil target and get victim prevent this
if (!m_creature->isAlive())
diff --git a/src/bindings/scripts/scripts/custom/test.cpp b/src/bindings/scripts/scripts/custom/test.cpp
index ff3de65f599..a372de8f65c 100644
--- a/src/bindings/scripts/scripts/custom/test.cpp
+++ b/src/bindings/scripts/scripts/custom/test.cpp
@@ -103,7 +103,7 @@ struct TRINITY_DLL_DECL npc_testAI : public npc_escortAI
npc_escortAI::UpdateAI(diff);
//Combat check
- if (InCombat && m_creature->getVictim())
+ if (m_creature->isInCombat() && m_creature->getVictim())
{
if (DeathCoilTimer < diff)
{
diff --git a/src/bindings/scripts/scripts/zone/aunchindoun/sethekk_halls/instance_sethekk_halls.cpp b/src/bindings/scripts/scripts/zone/aunchindoun/sethekk_halls/instance_sethekk_halls.cpp
index fbe926ffba0..9e0ee3ad8c7 100644
--- a/src/bindings/scripts/scripts/zone/aunchindoun/sethekk_halls/instance_sethekk_halls.cpp
+++ b/src/bindings/scripts/scripts/zone/aunchindoun/sethekk_halls/instance_sethekk_halls.cpp
@@ -30,21 +30,17 @@ struct TRINITY_DLL_DECL instance_sethekk_halls : public ScriptedInstance
{
instance_sethekk_halls(Map *map) : ScriptedInstance(map) {Initialize();};
- GameObject *IkissDoor;
+ uint64 m_uiIkissDoorGUID;
void Initialize()
{
- IkissDoor = NULL;
+ m_uiIkissDoorGUID = 0;
}
- void OnGameObjectCreate(GameObject *go, bool add)
+ void OnObjectCreate(GameObject* pGo)
{
- switch(go->GetEntry())
- {
- case IKISS_DOOR:
- IkissDoor = go;
- break;
- }
+ if (pGo->GetEntry() == IKISS_DOOR)
+ m_uiIkissDoorGUID = pGo->GetGUID();
}
void SetData(uint32 type, uint32 data)
@@ -52,8 +48,8 @@ struct TRINITY_DLL_DECL instance_sethekk_halls : public ScriptedInstance
switch(type)
{
case DATA_IKISSDOOREVENT:
- if( IkissDoor )
- IkissDoor->SetGoState(GO_STATE_ACTIVE);
+ if (data == DONE)
+ DoUseDoorOrButton(m_uiIkissDoorGUID,DAY*IN_MILISECONDS);
break;
}
}
diff --git a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp
index 9747159fcaf..f740e0d9596 100644
--- a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp
+++ b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp
@@ -73,8 +73,16 @@ struct TRINITY_DLL_DECL instance_shadow_labyrinth : public ScriptedInstance
{
switch(go->GetEntry())
{
- case REFECTORY_DOOR: RefectoryDoorGUID = go->GetGUID(); break;
- case SCREAMING_HALL_DOOR: ScreamingHallDoorGUID = go->GetGUID(); break;
+ case REFECTORY_DOOR:
+ RefectoryDoorGUID = go->GetGUID();
+ if (Encounter[2] == DONE)
+ DoUseDoorOrButton(RefectoryDoorGUID);
+ break;
+ case SCREAMING_HALL_DOOR:
+ ScreamingHallDoorGUID = go->GetGUID();
+ if (Encounter[3] == DONE)
+ DoUseDoorOrButton(ScreamingHallDoorGUID);
+ break;
}
}
@@ -117,17 +125,13 @@ struct TRINITY_DLL_DECL instance_shadow_labyrinth : public ScriptedInstance
case DATA_BLACKHEARTTHEINCITEREVENT:
if( data == DONE )
- {
- HandleGameObject(RefectoryDoorGUID, true);
- }
+ DoUseDoorOrButton(RefectoryDoorGUID);
Encounter[2] = data;
break;
case DATA_GRANDMASTERVORPILEVENT:
if( data == DONE )
- {
- HandleGameObject(ScreamingHallDoorGUID, true);
- }
+ DoUseDoorOrButton(ScreamingHallDoorGUID);
Encounter[3] = data;
break;
diff --git a/src/bindings/scripts/scripts/zone/black_temple/.boss_teron_gorefiend.cpp-woains b/src/bindings/scripts/scripts/zone/black_temple/.boss_teron_gorefiend.cpp-woains
index 327b670c6d3..19a31cd35d6 100644
--- a/src/bindings/scripts/scripts/zone/black_temple/.boss_teron_gorefiend.cpp-woains
+++ b/src/bindings/scripts/scripts/zone/black_temple/.boss_teron_gorefiend.cpp-woains
@@ -92,7 +92,7 @@ struct TRINITY_DLL_DECL mob_doom_blossomAI : public ScriptedAI
CheckTeronTimer = 5000;
}else CheckTeronTimer -= diff;
- if(ShadowBoltTimer < diff && InCombat)
+ if(ShadowBoltTimer < diff && m_creature->isInCombat())
{
DoCast(SelectUnit(SELECT_TARGET_RANDOM, 0), SPELL_SHADOWBOLT);
ShadowBoltTimer = 10000;
@@ -255,7 +255,7 @@ struct TRINITY_DLL_DECL boss_teron_gorefiendAI : public ScriptedAI
m_creature->AddThreat(who, 1.0f);
}
- if(!InCombat && !Intro && m_creature->IsWithinDistInMap(who, 60.0f) && (who->GetTypeId() == TYPEID_PLAYER))
+ if(!m_creature->isInCombat() && !Intro && m_creature->IsWithinDistInMap(who, 60.0f) && (who->GetTypeId() == TYPEID_PLAYER))
{
if(pInstance)
pInstance->SetData(DATA_TERONGOREFIENDEVENT, IN_PROGRESS);
@@ -427,7 +427,6 @@ struct TRINITY_DLL_DECL boss_teron_gorefiendAI : public ScriptedAI
DoomBlossom->setFaction(m_creature->getFaction());
DoomBlossom->AddThreat(target, 1.0f);
((mob_doom_blossomAI*)DoomBlossom->AI())->SetTeronGUID(m_creature->GetGUID());
- ((mob_doom_blossomAI*)DoomBlossom->AI())->InCombat = true;
SetThreatList(DoomBlossom);
SummonDoomBlossomTimer = 35000;
}
diff --git a/src/bindings/scripts/scripts/zone/black_temple/boss_supremus.cpp b/src/bindings/scripts/scripts/zone/black_temple/boss_supremus.cpp
index c8a48fe63ce..1805019dc42 100644
--- a/src/bindings/scripts/scripts/zone/black_temple/boss_supremus.cpp
+++ b/src/bindings/scripts/scripts/zone/black_temple/boss_supremus.cpp
@@ -107,8 +107,10 @@ struct TRINITY_DLL_DECL boss_supremusAI : public ScriptedAI
{
if(GameObject* Doors = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_SUPREMUS_DOORS)))
{
- if(close) Doors->SetGoState(GO_STATE_READY); // Closed
- else Doors->SetGoState(GO_STATE_ACTIVE); // Open
+ if(close)
+ Doors->SetGoState(GO_STATE_READY); // Closed
+ else
+ Doors->SetGoState(GO_STATE_ACTIVE); // Open
}
}
diff --git a/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_lady_vashj.cpp b/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_lady_vashj.cpp
index 76023dd6acb..2481e6d858f 100644
--- a/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_lady_vashj.cpp
+++ b/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_lady_vashj.cpp
@@ -158,7 +158,6 @@ struct TRINITY_DLL_DECL boss_lady_vashjAI : public ScriptedAI
uint8 Phase;
bool Entangle;
- bool InCombat;
bool Intro;
bool CanAttack;
bool JustCreated;
@@ -181,7 +180,6 @@ struct TRINITY_DLL_DECL boss_lady_vashjAI : public ScriptedAI
Phase = 0;
Entangle = false;
- InCombat = false;
if(JustCreated)
{
CanAttack = false;
@@ -241,7 +239,6 @@ struct TRINITY_DLL_DECL boss_lady_vashjAI : public ScriptedAI
case 3: DoScriptText(SAY_AGGRO4, m_creature); break;
}
- InCombat = true;
Phase = 1;
if(pInstance)
@@ -266,7 +263,7 @@ struct TRINITY_DLL_DECL boss_lady_vashjAI : public ScriptedAI
if(Phase != 2)
AttackStart(who);
- if(!InCombat)
+ if(!m_creature->isInCombat())
StartEvent();
}
@@ -293,7 +290,7 @@ struct TRINITY_DLL_DECL boss_lady_vashjAI : public ScriptedAI
if(Phase != 2)
AttackStart(who);
- if(!InCombat)
+ if(!m_creature->isInCombat())
StartEvent();
}
}
@@ -340,7 +337,7 @@ struct TRINITY_DLL_DECL boss_lady_vashjAI : public ScriptedAI
}
}
//to prevent abuses during phase 2
- if(Phase == 2 && !m_creature->getVictim() && InCombat)
+ if(Phase == 2 && !m_creature->getVictim() && m_creature->isInCombat())
{
EnterEvadeMode();
return;
@@ -672,7 +669,7 @@ struct TRINITY_DLL_DECL mob_enchanted_elementalAI : public ScriptedAI
m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
}
}
- if(CAST_AI(boss_lady_vashjAI, Vashj->AI())->InCombat == false || CAST_AI(boss_lady_vashjAI, Vashj->AI())->Phase != 2 || Vashj->isDead())
+ if(!Vashj->isInCombat() || CAST_AI(boss_lady_vashjAI, Vashj->AI())->Phase != 2 || Vashj->isDead())
{
//call Unsummon()
m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
diff --git a/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_broggok.cpp b/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_broggok.cpp
index 7e227620b02..e77ce3d2fdf 100644
--- a/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_broggok.cpp
+++ b/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_broggok.cpp
@@ -24,21 +24,22 @@ EndScriptData */
#include "precompiled.h"
#include "def_blood_furnace.h"
-
-#define SAY_AGGRO -1542008
-
-#define SPELL_SLIME_SPRAY 30913
-#define SPELL_POISON_CLOUD 30916
-#define SPELL_POISON_BOLT 30917
-
-#define SPELL_POISON 30914
+enum
+{
+ SAY_AGGRO = -1542008,
+
+ SPELL_SLIME_SPRAY = 30913,
+ SPELL_POISON_CLOUD = 30916,
+ SPELL_POISON_BOLT = 30917,
+
+ SPELL_POISON = 30914
+};
struct TRINITY_DLL_DECL boss_broggokAI : public ScriptedAI
{
boss_broggokAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
- Reset();
}
ScriptedInstance* pInstance;
diff --git a/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_kelidan_the_breaker.cpp b/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_kelidan_the_breaker.cpp
index 30fb505b30c..63c6bc3832a 100644
--- a/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_kelidan_the_breaker.cpp
+++ b/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_kelidan_the_breaker.cpp
@@ -29,29 +29,32 @@ EndContentData */
#include "precompiled.h"
#include "def_blood_furnace.h"
-#define SAY_WAKE -1542000
-
-#define SAY_ADD_AGGRO_1 -1542001
-#define SAY_ADD_AGGRO_2 -1542002
-#define SAY_ADD_AGGRO_3 -1542003
-
-#define SAY_KILL_1 -1542004
-#define SAY_KILL_2 -1542005
-#define SAY_NOVA -1542006
-#define SAY_DIE -1542007
-
-#define SPELL_CORRUPTION 30938
-#define SPELL_EVOCATION 30935
-#define SPELL_BURNING_NOVA 30940
-
-#define SPELL_FIRE_NOVA 33132
-#define H_SPELL_FIRE_NOVA 37371
-
-#define SPELL_SHADOW_BOLT_VOLLEY 28599
-#define H_SPELL_SHADOW_BOLT_VOLLEY 40070
-
-#define ENTRY_KELIDAN 17377
-#define ENTRY_CHANNELER 17653
+enum
+{
+ SAY_WAKE = -1542000,
+ SAY_ADD_AGGRO_1 = -1542001,
+ SAY_ADD_AGGRO_2 = -1542002,
+ SAY_ADD_AGGRO_3 = -1542003,
+ SAY_KILL_1 = -1542004,
+ SAY_KILL_2 = -1542005,
+ SAY_NOVA = -1542006,
+ SAY_DIE = -1542007,
+
+ SPELL_CORRUPTION = 30938,
+ SPELL_EVOCATION = 30935,
+
+ SPELL_FIRE_NOVA = 33132,
+ H_SPELL_FIRE_NOVA = 37371,
+
+ SPELL_SHADOW_BOLT_VOLLEY = 28599,
+ H_SPELL_SHADOW_BOLT_VOLLEY = 40070,
+
+ SPELL_BURNING_NOVA = 30940,
+ SPELL_VORTEX = 37370,
+
+ ENTRY_KELIDAN = 17377,
+ ENTRY_CHANNELER = 17653
+};
const float ShadowmoonChannelers[5][4]=
{
@@ -67,7 +70,7 @@ struct TRINITY_DLL_DECL boss_kelidan_the_breakerAI : public ScriptedAI
boss_kelidan_the_breakerAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
- HeroicMode = m_creature->GetMap()->IsHeroic();
+ HeroicMode = c->GetMap()->IsHeroic();
for(int i=0; i<5; ++i)
Channelers[i] = 0;
}
@@ -281,18 +284,21 @@ CreatureAI* GetAI_boss_kelidan_the_breaker(Creature *_Creature)
## mob_shadowmoon_channeler
######*/
-#define SPELL_SHADOW_BOLT 12739
-#define H_SPELL_SHADOW_BOLT 15472
-
-#define SPELL_MARK_OF_SHADOW 30937
-#define SPELL_CHANNELING 39123
+enum
+{
+ SPELL_SHADOW_BOLT = 12739,
+ H_SPELL_SHADOW_BOLT = 15472,
+
+ SPELL_MARK_OF_SHADOW = 30937,
+ SPELL_CHANNELING = 39123
+};
struct TRINITY_DLL_DECL mob_shadowmoon_channelerAI : public ScriptedAI
{
mob_shadowmoon_channelerAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
- HeroicMode = m_creature->GetMap()->IsHeroic();
+ HeroicMode = c->GetMap()->IsHeroic();
}
ScriptedInstance* pInstance;
diff --git a/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_the_maker.cpp b/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_the_maker.cpp
index b91f071dc5d..97676ece79c 100644
--- a/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_the_maker.cpp
+++ b/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_the_maker.cpp
@@ -24,24 +24,26 @@ EndScriptData */
#include "precompiled.h"
#include "def_blood_furnace.h"
-#define SAY_AGGRO_1 -1542009
-#define SAY_AGGRO_2 -1542010
-#define SAY_AGGRO_3 -1542011
-#define SAY_KILL_1 -1542012
-#define SAY_KILL_2 -1542013
-#define SAY_DIE -1542014
-
-#define SPELL_ACID_SPRAY 38153 // heroic 38973 ??? 38153
-#define SPELL_EXPLODING_BREAKER 30925
-#define SPELL_KNOCKDOWN 20276
-#define SPELL_DOMINATION 25772 // ???
+enum
+{
+ SAY_AGGRO_1 = -1542009,
+ SAY_AGGRO_2 = -1542010,
+ SAY_AGGRO_3 = -1542011,
+ SAY_KILL_1 = -1542012,
+ SAY_KILL_2 = -1542013,
+ SAY_DIE = -1542014,
+
+ SPELL_ACID_SPRAY = 38153, // heroic 38973 ??? 38153
+ SPELL_EXPLODING_BREAKER = 30925,
+ SPELL_KNOCKDOWN = 20276,
+ SPELL_DOMINATION = 25772 // ???
+};
struct TRINITY_DLL_DECL boss_the_makerAI : public ScriptedAI
{
boss_the_makerAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
- Reset();
}
ScriptedInstance* pInstance;
diff --git a/src/bindings/scripts/scripts/zone/hellfire_citadel/magtheridons_lair/instance_magtheridons_lair.cpp b/src/bindings/scripts/scripts/zone/hellfire_citadel/magtheridons_lair/instance_magtheridons_lair.cpp
index 872c074373d..6b49df203f4 100644
--- a/src/bindings/scripts/scripts/zone/hellfire_citadel/magtheridons_lair/instance_magtheridons_lair.cpp
+++ b/src/bindings/scripts/scripts/zone/hellfire_citadel/magtheridons_lair/instance_magtheridons_lair.cpp
@@ -189,7 +189,7 @@ struct TRINITY_DLL_DECL instance_magtheridons_lair : public ScriptedInstance
case DATA_COLLAPSE:
// true - collapse / false - reset
for(std::set<uint64>::iterator i = ColumnGUID.begin(); i != ColumnGUID.end(); ++i)
- HandleGameObject(*i, data);
+ DoUseDoorOrButton(*i);
break;
default:
break;
diff --git a/src/bindings/scripts/scripts/zone/naxxramas/boss_highlord_mograine.cpp b/src/bindings/scripts/scripts/zone/naxxramas/boss_highlord_mograine.cpp
index 8bfce605bc4..44e8455d41a 100644
--- a/src/bindings/scripts/scripts/zone/naxxramas/boss_highlord_mograine.cpp
+++ b/src/bindings/scripts/scripts/zone/naxxramas/boss_highlord_mograine.cpp
@@ -74,7 +74,7 @@ struct TRINITY_DLL_DECL boss_highlord_mograineAI : public ScriptedAI
void InitialYell()
{
- if(!InCombat)
+ if(!m_creature->isInCombat())
{
switch(rand()%3)
{
diff --git a/src/bindings/scripts/scripts/zone/shadowfang_keep/instance_shadowfang_keep.cpp b/src/bindings/scripts/scripts/zone/shadowfang_keep/instance_shadowfang_keep.cpp
index c8382eaaa96..a5f8c84d918 100644
--- a/src/bindings/scripts/scripts/zone/shadowfang_keep/instance_shadowfang_keep.cpp
+++ b/src/bindings/scripts/scripts/zone/shadowfang_keep/instance_shadowfang_keep.cpp
@@ -82,17 +82,17 @@ struct TRINITY_DLL_DECL instance_shadowfang_keep : public ScriptedInstance
case GO_COURTYARD_DOOR:
DoorCourtyardGUID = go->GetGUID();
if (Encounter[0] == DONE)
- go->SetGoState(GO_STATE_ACTIVE);
+ DoUseDoorOrButton(DoorCourtyardGUID);
break;
case GO_SORCERER_DOOR:
DoorSorcererGUID = go->GetGUID();
if (Encounter[2] == DONE)
- go->SetGoState(GO_STATE_ACTIVE);
+ DoUseDoorOrButton(DoorSorcererGUID);
break;
case GO_ARUGAL_DOOR:
DoorArugalGUID = go->GetGUID();
if (Encounter[3] == DONE)
- go->SetGoState(GO_STATE_ACTIVE);
+ DoUseDoorOrButton(DoorArugalGUID);
break;
}
}
@@ -115,7 +115,7 @@ struct TRINITY_DLL_DECL instance_shadowfang_keep : public ScriptedInstance
{
case TYPE_FREE_NPC:
if(data == DONE)
- HandleGameObject(DoorCourtyardGUID,0);
+ DoUseDoorOrButton(DoorCourtyardGUID);
Encounter[0] = data;
break;
case TYPE_RETHILGORE:
@@ -125,12 +125,12 @@ struct TRINITY_DLL_DECL instance_shadowfang_keep : public ScriptedInstance
break;
case TYPE_FENRUS:
if(data == DONE)
- HandleGameObject(DoorSorcererGUID,0);
+ DoUseDoorOrButton(DoorSorcererGUID);
Encounter[2] = data;
break;
case TYPE_NANDOS:
if(data == DONE)
- HandleGameObject(DoorArugalGUID,0);
+ DoUseDoorOrButton(DoorArugalGUID);
Encounter[3] = data;
break;
}
diff --git a/src/bindings/scripts/scripts/zone/stratholme/instance_stratholme.cpp b/src/bindings/scripts/scripts/zone/stratholme/instance_stratholme.cpp
index 12f68359a4a..523b117181c 100644
--- a/src/bindings/scripts/scripts/zone/stratholme/instance_stratholme.cpp
+++ b/src/bindings/scripts/scripts/zone/stratholme/instance_stratholme.cpp
@@ -193,21 +193,21 @@ struct TRINITY_DLL_DECL instance_stratholme : public ScriptedInstance
case TYPE_BARONESS:
Encounter[1] = data;
if (data == IN_PROGRESS)
- UpdateGoState(ziggurat1GUID,0,false);
+ UpdateGoState(ziggurat1GUID,GO_STATE_ACTIVE,false);
if (data == IN_PROGRESS) //change to DONE when crystals implemented
StartSlaugtherSquare();
break;
case TYPE_NERUB:
Encounter[2] = data;
if (data == IN_PROGRESS)
- UpdateGoState(ziggurat2GUID,0,false);
+ UpdateGoState(ziggurat2GUID,GO_STATE_ACTIVE,false);
if (data == IN_PROGRESS) //change to DONE when crystals implemented
StartSlaugtherSquare();
break;
case TYPE_PALLID:
Encounter[3] = data;
if (data == IN_PROGRESS)
- UpdateGoState(ziggurat3GUID,0,false);
+ UpdateGoState(ziggurat3GUID,GO_STATE_ACTIVE,false);
if (data == IN_PROGRESS) //change to DONE when crystals implemented
StartSlaugtherSquare();
break;
@@ -215,7 +215,7 @@ struct TRINITY_DLL_DECL instance_stratholme : public ScriptedInstance
if (data == IN_PROGRESS)
{
if (Encounter[4] != IN_PROGRESS)
- UpdateGoState(portGauntletGUID,1,false);
+ UpdateGoState(portGauntletGUID,GO_STATE_READY,false);
uint32 count = abomnationGUID.size();
for(std::set<uint64>::iterator i = abomnationGUID.begin(); i != abomnationGUID.end(); ++i)
@@ -348,8 +348,8 @@ struct TRINITY_DLL_DECL instance_stratholme : public ScriptedInstance
for(uint8 i = 0; i < 4; i++)
pBaron->SummonCreature(C_BLACK_GUARD,4032.84,-3390.24,119.73,4.71,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,1800000);
- UpdateGoState(ziggurat4GUID,0,false);
- UpdateGoState(ziggurat5GUID,0,false);
+ UpdateGoState(ziggurat4GUID,GO_STATE_ACTIVE,false);
+ UpdateGoState(ziggurat5GUID,GO_STATE_ACTIVE,false);
debug_log("TSCR: Instance Stratholme: Black guard sentries spawned. Opening gates to baron.");
}
SlaugtherSquare_Timer = 0;
diff --git a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_eredar_twins.cpp b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_eredar_twins.cpp
index 814ad0c6b46..10cf91a0c28 100644
--- a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_eredar_twins.cpp
+++ b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_eredar_twins.cpp
@@ -99,7 +99,6 @@ struct TRINITY_DLL_DECL boss_sacrolashAI : public ScriptedAI
ScriptedInstance *pInstance;
- bool InCombat;
bool SisterDeath;
bool Enraged;
@@ -112,7 +111,6 @@ struct TRINITY_DLL_DECL boss_sacrolashAI : public ScriptedAI
void Reset()
{
- InCombat = false;
Enraged = false;
if(pInstance)
@@ -127,12 +125,11 @@ struct TRINITY_DLL_DECL boss_sacrolashAI : public ScriptedAI
if(Temp->getVictim())
{
m_creature->getThreatManager().addThreat(Temp->getVictim(),0.0f);
- InCombat = true;
}
}
}
- if(!InCombat)
+ if(!m_creature->isInCombat())
{
ShadowbladesTimer = 10000;
ShadownovaTimer = 30000;
@@ -360,7 +357,6 @@ struct TRINITY_DLL_DECL boss_alythessAI : public Scripted_NoMovementAI
ScriptedInstance *pInstance;
- bool InCombat;
bool SisterDeath;
bool Enraged;
@@ -376,7 +372,6 @@ struct TRINITY_DLL_DECL boss_alythessAI : public Scripted_NoMovementAI
void Reset()
{
- InCombat = false;
Enraged = false;
if(pInstance)
@@ -391,12 +386,11 @@ struct TRINITY_DLL_DECL boss_alythessAI : public Scripted_NoMovementAI
if(Temp->getVictim())
{
m_creature->getThreatManager().addThreat(Temp->getVictim(),0.0f);
- InCombat = true;
}
}
}
- if(!InCombat)
+ if(!m_creature->isInCombat())
{
ConflagrationTimer = 45000;
BlazeTimer = 100;
@@ -430,7 +424,7 @@ struct TRINITY_DLL_DECL boss_alythessAI : public Scripted_NoMovementAI
void AttackStart(Unit *who)
{
- if (!InCombat)
+ if (!m_creature->isInCombat())
{
Scripted_NoMovementAI::AttackStart(who);
}
diff --git a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_ouro.cpp b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_ouro.cpp
index 700e7230d14..9a59c5b7dbc 100644
--- a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_ouro.cpp
+++ b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_ouro.cpp
@@ -44,7 +44,6 @@ struct TRINITY_DLL_DECL boss_ouroAI : public ScriptedAI
bool Enrage;
bool Submerged;
- bool InCombat;
void Reset()
{
diff --git a/src/bindings/scripts/scripts/zone/uldaman/boss_archaedas.cpp b/src/bindings/scripts/scripts/zone/uldaman/boss_archaedas.cpp
index 3221466bfd3..17caebe85bb 100644
--- a/src/bindings/scripts/scripts/zone/uldaman/boss_archaedas.cpp
+++ b/src/bindings/scripts/scripts/zone/uldaman/boss_archaedas.cpp
@@ -59,7 +59,6 @@ struct TRINITY_DLL_DECL boss_archaedasAI : public ScriptedAI
uint32 WallMinionTimer;
bool wakingUp;
- bool InCombat;
bool guardiansAwake;
bool vaultWalkersAwake;
ScriptedInstance* pInstance;
@@ -70,7 +69,6 @@ struct TRINITY_DLL_DECL boss_archaedasAI : public ScriptedAI
Awaken_Timer = 0;
WallMinionTimer = 10000;
- InCombat = false;
wakingUp = false;
guardiansAwake = false;
vaultWalkersAwake = false;
@@ -217,7 +215,6 @@ struct TRINITY_DLL_DECL mob_archaedas_minionsAI : public ScriptedAI
int32 Awaken_Timer;
bool wakingUp;
- bool InCombat;
bool amIAwake;
ScriptedInstance* pInstance;
@@ -226,7 +223,6 @@ struct TRINITY_DLL_DECL mob_archaedas_minionsAI : public ScriptedAI
Arcing_Timer = 3000;
Awaken_Timer = 0;
- InCombat = false;
wakingUp = false;
amIAwake = false;
@@ -362,12 +358,10 @@ struct TRINITY_DLL_DECL mob_stonekeepersAI : public ScriptedAI
pInstance = (m_creature->GetInstanceData());
}
- bool InCombat;
ScriptedInstance* pInstance;
void Reset()
{
- InCombat = false;
m_creature->setFaction(35);
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
diff --git a/src/game/InstanceData.cpp b/src/game/InstanceData.cpp
index d2b341b2d2c..551db4eb2cb 100644
--- a/src/game/InstanceData.cpp
+++ b/src/game/InstanceData.cpp
@@ -242,3 +242,40 @@ std::string InstanceData::GetBossSaveData()
saveStream << (uint32)i->state << " ";
return saveStream.str();
}
+
+void InstanceData::DoUseDoorOrButton(uint64 uiGuid, uint32 uiWithRestoreTime, bool bUseAlternativeState)
+{
+ if (!uiGuid)
+ return;
+
+ GameObject* pGo = instance->GetGameObject(uiGuid);
+
+ if (pGo)
+ {
+ if (pGo->GetGoType() == GAMEOBJECT_TYPE_DOOR || pGo->GetGoType() == GAMEOBJECT_TYPE_BUTTON)
+ {
+ if (pGo->getLootState() == GO_READY)
+ pGo->UseDoorOrButton(uiWithRestoreTime,bUseAlternativeState);
+ else if (pGo->getLootState() == GO_ACTIVATED)
+ pGo->ResetDoorOrButton();
+ }
+ else
+ error_log("SD2: Script call DoUseDoorOrButton, but gameobject entry %u is type %u.",pGo->GetEntry(),pGo->GetGoType());
+ }
+}
+
+void InstanceData::DoRespawnGameObject(uint64 uiGuid, uint32 uiTimeToDespawn)
+{
+ if (GameObject* pGo = instance->GetGameObject(uiGuid))
+ {
+ //not expect any of these should ever be handled
+ if (pGo->GetGoType()==GAMEOBJECT_TYPE_FISHINGNODE || pGo->GetGoType()==GAMEOBJECT_TYPE_DOOR ||
+ pGo->GetGoType()==GAMEOBJECT_TYPE_BUTTON || pGo->GetGoType()==GAMEOBJECT_TYPE_TRAP)
+ return;
+
+ if (pGo->isSpawned())
+ return;
+
+ pGo->SetRespawnTime(uiTimeToDespawn);
+ }
+}
diff --git a/src/game/InstanceData.h b/src/game/InstanceData.h
index 819185eacaa..fac766c761e 100644
--- a/src/game/InstanceData.h
+++ b/src/game/InstanceData.h
@@ -143,6 +143,12 @@ class TRINITY_DLL_SPEC InstanceData : public ZoneScript
//use HandleGameObject(GUID,boolen,NULL); in any other script
void HandleGameObject(uint64 GUID, bool open, GameObject *go = NULL);
+ //change active state of doors or buttons
+ void DoUseDoorOrButton(uint64 uiGuid, uint32 uiWithRestoreTime = 0, bool bUseAlternativeState = false);
+
+ //Respawns a GO having negative spawntimesecs in gameobject-table
+ void DoRespawnGameObject(uint64 uiGuid, uint32 uiTimeToDespawn = MINUTE);
+
virtual bool SetBossState(uint32 id, EncounterState state);
const BossBoundaryMap * GetBossBoundary(uint32 id) const { return id < bosses.size() ? &bosses[id].boundary : NULL; }
protected: