Scripts/DrakTharonKeep: reworked InstanceScript

This commit is contained in:
joschiwald
2013-07-29 12:49:27 +02:00
parent 4559e99e0d
commit d868f9db4b
9 changed files with 246 additions and 318 deletions

View File

@@ -0,0 +1,2 @@
UPDATE `instance_template` SET `script`="instance_drak_tharon_keep" WHERE `map`=600;
UPDATE `creature_template` SET `ScriptName`="boss_king_dred" WHERE `entry`=27483;

View File

@@ -468,9 +468,9 @@ void AddSC_boss_toravon();
void AddSC_instance_archavon();
void AddSC_boss_trollgore(); //Drak'Tharon Keep
void AddSC_boss_novos();
void AddSC_boss_dred();
void AddSC_boss_king_dred();
void AddSC_boss_tharon_ja();
void AddSC_instance_drak_tharon();
void AddSC_instance_drak_tharon_keep();
void AddSC_boss_cyanigosa(); //Violet Hold
void AddSC_boss_erekem();
void AddSC_boss_ichoron();
@@ -1211,9 +1211,9 @@ void AddNorthrendScripts()
AddSC_instance_archavon();
AddSC_boss_trollgore(); //Drak'Tharon Keep
AddSC_boss_novos();
AddSC_boss_dred();
AddSC_boss_king_dred();
AddSC_boss_tharon_ja();
AddSC_instance_drak_tharon();
AddSC_instance_drak_tharon_keep();
AddSC_boss_cyanigosa(); //Violet Hold
AddSC_boss_erekem();
AddSC_boss_ichoron();

View File

@@ -193,7 +193,7 @@ set(scripts_STAT_SRCS
Northrend/DraktharonKeep/boss_novos.cpp
Northrend/DraktharonKeep/drak_tharon_keep.h
Northrend/DraktharonKeep/boss_tharon_ja.cpp
Northrend/DraktharonKeep/boss_dred.cpp
Northrend/DraktharonKeep/boss_king_dred.cpp
)
message(" -> Prepared: Northrend")

View File

@@ -36,26 +36,20 @@ enum Spells
SPELL_REND = 13738
};
enum Creatures
{
NPC_RAPTOR_1 = 26641,
NPC_RAPTOR_2 = 26628
};
enum Misc
{
ACTION_RAPTOR_KILLED = 1,
DATA_KING_DRED = 2
DATA_RAPTORS_KILLED = 2
};
class boss_dred : public CreatureScript
class boss_king_dred : public CreatureScript
{
public:
boss_dred() : CreatureScript("boss_dred") { }
boss_king_dred() : CreatureScript("boss_king_dred") { }
struct boss_dredAI : public ScriptedAI
struct boss_king_dredAI : public ScriptedAI
{
boss_dredAI(Creature* creature) : ScriptedAI(creature)
boss_king_dredAI(Creature* creature) : ScriptedAI(creature)
{
instance = me->GetInstanceScript();
}
@@ -73,7 +67,7 @@ class boss_dred : public CreatureScript
void Reset() OVERRIDE
{
if (instance)
instance->SetData(DATA_DRED_EVENT, NOT_STARTED);
instance->SetData(DATA_KING_DRED, NOT_STARTED);
uiBellowingRoarTimer = 33000;
uiGrievousBiteTimer = 20000;
@@ -86,7 +80,7 @@ class boss_dred : public CreatureScript
void EnterCombat(Unit* /*who*/) OVERRIDE
{
if (instance)
instance->SetData(DATA_DRED_EVENT, IN_PROGRESS);
instance->SetData(DATA_KING_DRED, IN_PROGRESS);
}
void UpdateAI(uint32 diff) OVERRIDE
@@ -141,7 +135,7 @@ class boss_dred : public CreatureScript
float x, y, z;
me->GetClosePoint(x, y, z, me->GetObjectSize() / 3, 10.0f);
me->SummonCreature(RAND(NPC_RAPTOR_1, NPC_RAPTOR_2), x, y, z, 0, TEMPSUMMON_DEAD_DESPAWN, 1000);
me->SummonCreature(RAND(NPC_DRAKKARI_GUTRIPPER, NPC_DRAKKARI_SCYTHECLAW), x, y, z, 0, TEMPSUMMON_DEAD_DESPAWN, 1000);
uiRaptorCallTimer = urand(20000, 25000);
}
@@ -159,7 +153,7 @@ class boss_dred : public CreatureScript
uint32 GetData(uint32 type) const OVERRIDE
{
if (type == DATA_KING_DRED)
if (type == DATA_RAPTORS_KILLED)
return raptorsKilled;
return 0;
@@ -168,13 +162,13 @@ class boss_dred : public CreatureScript
void JustDied(Unit* /*killer*/) OVERRIDE
{
if (instance)
instance->SetData(DATA_DRED_EVENT, DONE);
instance->SetData(DATA_KING_DRED, DONE);
}
};
CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
return new boss_dredAI(creature);
return GetDrakTharonKeepAI<boss_king_dredAI>(creature);
}
};
@@ -217,14 +211,14 @@ class npc_drakkari_gutripper : public CreatureScript
void JustDied(Unit* /*killer*/) OVERRIDE
{
if (Creature* Dred = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DRED)))
if (Creature* Dred = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KING_DRED)))
Dred->AI()->DoAction(ACTION_RAPTOR_KILLED);
}
};
CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
return new npc_drakkari_gutripperAI(creature);
return GetDrakTharonKeepAI<npc_drakkari_gutripperAI>(creature);
}
};
@@ -267,14 +261,14 @@ class npc_drakkari_scytheclaw : public CreatureScript
void JustDied(Unit* /*killer*/) OVERRIDE
{
if (Creature* Dred = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DRED)))
if (Creature* Dred = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KING_DRED)))
Dred->AI()->DoAction(ACTION_RAPTOR_KILLED);
}
};
CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
return new npc_drakkari_scytheclawAI(creature);
return GetDrakTharonKeepAI<npc_drakkari_scytheclawAI>(creature);
}
};
@@ -291,16 +285,16 @@ class achievement_king_dred : public AchievementCriteriaScript
return false;
if (Creature* Dred = target->ToCreature())
if (Dred->AI()->GetData(DATA_KING_DRED) >= 6)
if (Dred->AI()->GetData(DATA_RAPTORS_KILLED) >= 6)
return true;
return false;
}
};
void AddSC_boss_dred()
void AddSC_boss_king_dred()
{
new boss_dred;
new boss_king_dred;
new npc_drakkari_gutripper;
new npc_drakkari_scytheclaw;
new achievement_king_dred();

View File

@@ -32,8 +32,7 @@ enum Misc
enum Creatures
{
NPC_CRYSTAL_CHANNEL_TARGET = 26712,
NPC_FETID_TROLL_CORPSE = 27597,
NPC_FETID_TROLL_CORPSE = 27598,
NPC_RISEN_SHADOWCASTER = 27600,
NPC_HULKING_CORPSE = 27597
};
@@ -77,13 +76,11 @@ public:
struct boss_novosAI : public BossAI
{
boss_novosAI(Creature* creature) : BossAI(creature, DATA_NOVOS_EVENT) {}
boss_novosAI(Creature* creature) : BossAI(creature, DATA_NOVOS) { }
void Reset() OVERRIDE
{
events.Reset();
summons.DespawnAll();
instance->SetData(DATA_NOVOS_EVENT, NOT_STARTED);
_Reset();
_ohNovos = true;
_crystalHandlerCount = 0;
@@ -94,9 +91,7 @@ public:
void EnterCombat(Unit* /* victim */) OVERRIDE
{
me->setActive(true);
DoZoneInCombat();
instance->SetData(DATA_NOVOS_EVENT, IN_PROGRESS);
_EnterCombat();
SetCrystalsStatus(true);
SetSummonerStatus(true);
@@ -148,7 +143,6 @@ public:
}
void MoveInLineOfSight(Unit* who) OVERRIDE
{
BossAI::MoveInLineOfSight(who);
@@ -260,7 +254,7 @@ public:
CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
return new boss_novosAI(creature);
return GetDrakTharonKeepAI<boss_novosAI>(creature);
}
};
@@ -323,7 +317,7 @@ public:
CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
return new npc_crystal_channel_targetAI(creature);
return GetDrakTharonKeepAI<npc_crystal_channel_targetAI>(creature);
}
};

View File

@@ -95,16 +95,13 @@ public:
uiShadowVolleyTimer = urand(8*IN_MILLISECONDS, 10*IN_MILLISECONDS);
Phase = SKELETAL;
me->SetDisplayId(me->GetNativeDisplayId());
if (instance)
instance->SetData(DATA_THARON_JA_EVENT, NOT_STARTED);
instance->SetBossState(DATA_THARON_JA, NOT_STARTED);
}
void EnterCombat(Unit* /*who*/) OVERRIDE
{
Talk(SAY_AGGRO);
if (instance)
instance->SetData(DATA_THARON_JA_EVENT, IN_PROGRESS);
instance->SetBossState(DATA_THARON_JA, IN_PROGRESS);
}
void UpdateAI(uint32 diff) OVERRIDE
@@ -239,14 +236,14 @@ public:
DoCast(me, SPELL_ACHIEVEMENT_CHECK);
instance->SetData(DATA_THARON_JA_EVENT, DONE);
instance->SetBossState(DATA_THARON_JA, DONE);
}
}
};
CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
return new boss_tharon_jaAI(creature);
return GetDrakTharonKeepAI<boss_tharon_jaAI>(creature);
}
};

View File

@@ -99,16 +99,13 @@ public:
me->RemoveAura(DUNGEON_MODE(SPELL_CONSUME_AURA, H_SPELL_CONSUME_AURA));
if (instance)
instance->SetData(DATA_TROLLGORE_EVENT, NOT_STARTED);
instance->SetData(DATA_TROLLGORE, NOT_STARTED);
}
void EnterCombat(Unit* /*who*/) OVERRIDE
{
Talk(SAY_AGGRO);
if (instance)
instance->SetData(DATA_TROLLGORE_EVENT, IN_PROGRESS);
instance->SetBossState(DATA_TROLLGORE, IN_PROGRESS);
}
void UpdateAI(uint32 diff) OVERRIDE
@@ -167,8 +164,7 @@ public:
lSummons.DespawnAll();
if (instance)
instance->SetData(DATA_TROLLGORE_EVENT, DONE);
instance->SetBossState(DATA_TROLLGORE, DONE);
}
uint32 GetData(uint32 type) const OVERRIDE
@@ -197,7 +193,7 @@ public:
CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
return new boss_trollgoreAI(creature);
return GetDrakTharonKeepAI<boss_trollgoreAI>(creature);
}
};

View File

@@ -15,22 +15,26 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef DEF_DRAK_THARON_H
#define DEF_DRAK_THARON_H
enum Data
#ifndef DRAK_THARON_KEEP_H_
#define DRAK_THARON_KEEP_H_
#include "Map.h"
#include "Creature.h"
#define DrakTharonKeepScriptName "instance_drak_tharon_keep"
uint32 const EncounterCount = 4;
enum DataTypes
{
DATA_TROLLGORE_EVENT,
DATA_NOVOS_EVENT,
DATA_DRED_EVENT,
DATA_THARON_JA_EVENT,
DATA_KING_DRED_ACHIEV
};
enum Data64
{
DATA_TROLLGORE,
DATA_NOVOS,
DATA_DRED,
DATA_THARON_JA,
// Encounter States/Boss GUIDs
DATA_TROLLGORE = 0,
DATA_NOVOS = 1,
DATA_KING_DRED = 2,
DATA_THARON_JA = 3,
// Additional data
//DATA_KING_DRED_ACHIEV,
DATA_NOVOS_CRYSTAL_1,
DATA_NOVOS_CRYSTAL_2,
@@ -43,4 +47,39 @@ enum Data64
ACTION_CRYSTAL_HANDLER_DIED
};
#endif
enum CreatureIds
{
NPC_TROLLGORE = 26630,
NPC_NOVOS = 26631,
NPC_KING_DRED = 27483,
NPC_THARON_JA = 26632,
// Novos
NPC_CRYSTAL_CHANNEL_TARGET = 26712,
NPC_CRYSTAL_HANDLER = 26627,
// King Dred
NPC_DRAKKARI_GUTRIPPER = 26641,
NPC_DRAKKARI_SCYTHECLAW = 26628
};
enum GameObjectIds
{
GO_NOVOS_CRYSTAL_1 = 189299,
GO_NOVOS_CRYSTAL_2 = 189300,
GO_NOVOS_CRYSTAL_3 = 189301,
GO_NOVOS_CRYSTAL_4 = 189302
};
template<class AI>
AI* GetDrakTharonKeepAI(Creature* creature)
{
if (InstanceMap* instance = creature->GetMap()->ToInstanceMap())
if (instance->GetInstanceScript())
if (instance->GetScriptId() == sObjectMgr->GetScriptId(DrakTharonKeepScriptName))
return new AI(creature);
return NULL;
}
#endif // DRAK_THARON_KEEP_H_

View File

@@ -20,279 +20,185 @@
#include "InstanceScript.h"
#include "drak_tharon_keep.h"
#define MAX_ENCOUNTER 4
/* Drak'Tharon Keep encounters:
0 - Trollgore
1 - Novos
2 - King Dred
3 - Tharon Ja
*/
enum Creatures
class instance_drak_tharon_keep : public InstanceMapScript
{
NPC_TROLLGORE = 26630,
NPC_NOVOS = 26631,
NPC_KING_DRED = 27483,
NPC_THARON_JA = 26632,
NPC_CRYSTAL_CHANNEL_TARGET = 26712,
NPC_CRYSTAL_HANDLER = 26627
};
enum GameObjects
{
GO_NOVOS_CRYSTAL_1 = 189299,
GO_NOVOS_CRYSTAL_2 = 189300,
GO_NOVOS_CRYSTAL_3 = 189301,
GO_NOVOS_CRYSTAL_4 = 189302
};
enum Achievements
{
ACM_CRITERIA_OH_NOVOS = 7361
};
public:
instance_drak_tharon_keep() : InstanceMapScript(DrakTharonKeepScriptName, 600) { }
class instance_drak_tharon : public InstanceMapScript
{
public:
instance_drak_tharon() : InstanceMapScript("instance_drak_tharon", 600) { }
struct instance_drak_tharon_InstanceScript : public InstanceScript
{
instance_drak_tharon_InstanceScript(Map* map) : InstanceScript(map) {}
uint8 dredAchievCounter;
uint64 trollgoreGUID;
uint64 novosGUID;
uint64 dredGUID;
uint64 tharonJaGUID;
uint64 novosCrystalGUID1;
uint64 novosCrystalGUID2;
uint64 novosCrystalGUID3;
uint64 novosCrystalGUID4;
uint64 novosSummonerGUID1;
uint64 novosSummonerGUID2;
uint64 novosSummonerGUID3;
uint64 novosSummonerGUID4;
uint16 m_auiEncounter[MAX_ENCOUNTER];
std::string str_data;
void Initialize()
struct instance_drak_tharon_keep_InstanceScript : public InstanceScript
{
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
dredAchievCounter = 0;
trollgoreGUID = 0;
novosGUID = 0;
dredGUID = 0;
tharonJaGUID = 0;
novosCrystalGUID1 = 0;
novosCrystalGUID2 = 0;
novosCrystalGUID3 = 0;
novosCrystalGUID4 = 0;
novosSummonerGUID1 = 0;
novosSummonerGUID2 = 0;
novosSummonerGUID3 = 0;
novosSummonerGUID4 = 0;
}
bool IsEncounterInProgress() const
{
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
if (m_auiEncounter[i] == IN_PROGRESS)
return true;
return false;
}
void OnGameObjectCreate(GameObject* go)
{
switch (go->GetEntry())
instance_drak_tharon_keep_InstanceScript(Map* map) : InstanceScript(map)
{
case GO_NOVOS_CRYSTAL_1:
novosCrystalGUID1 = go->GetGUID();
go->SetGoState(GO_STATE_READY);
break;
case GO_NOVOS_CRYSTAL_2:
novosCrystalGUID2 = go->GetGUID();
go->SetGoState(GO_STATE_READY);
break;
case GO_NOVOS_CRYSTAL_3:
novosCrystalGUID3 = go->GetGUID();
go->SetGoState(GO_STATE_READY);
break;
case GO_NOVOS_CRYSTAL_4:
novosCrystalGUID4 = go->GetGUID();
go->SetGoState(GO_STATE_READY);
break;
}
}
SetBossNumber(EncounterCount);
void OnCreatureCreate(Creature* creature)
{
switch (creature->GetEntry())
{
case NPC_TROLLGORE:
trollgoreGUID = creature->GetGUID();
break;
case NPC_NOVOS:
novosGUID = creature->GetGUID();
break;
case NPC_KING_DRED:
dredGUID = creature->GetGUID();
break;
case NPC_THARON_JA:
tharonJaGUID = creature->GetGUID();
break;
case NPC_CRYSTAL_CHANNEL_TARGET:
InitializeNovosSummoner(creature);
break;
}
}
TrollgoreGUID = 0;
NovosGUID = 0;
KingDredGUID = 0;
TharonJaGUID = 0;
void InitializeNovosSummoner(Creature* creature)
{
float x = creature->GetPositionX();
float y = creature->GetPositionY();
float z = creature->GetPositionZ();
if (x < -374.0f && x > -379.0f && y > -820.0f && y < -815.0f && z < 60.0f && z > 58.0f)
novosSummonerGUID1 = creature->GetGUID();
else if (x < -379.0f && x > -385.0f && y > -820.0f && y < -815.0f && z < 60.0f && z > 58.0f)
novosSummonerGUID2 = creature->GetGUID();
else if (x < -374.0f && x > -385.0f && y > -827.0f && y < -820.0f && z < 60.0f && z > 58.0f)
novosSummonerGUID3 = creature->GetGUID();
else if (x < -338.0f && x > -344.0f && y > -727.0f && y < 721.0f && z < 30.0f && z > 26.0f)
novosSummonerGUID4 = creature->GetGUID();
}
uint64 GetData64(uint32 identifier) const OVERRIDE
{
switch (identifier)
{
case DATA_TROLLGORE: return trollgoreGUID;
case DATA_NOVOS: return novosGUID;
case DATA_DRED: return dredGUID;
case DATA_THARON_JA: return tharonJaGUID;
case DATA_NOVOS_CRYSTAL_1: return novosCrystalGUID1;
case DATA_NOVOS_CRYSTAL_2: return novosCrystalGUID2;
case DATA_NOVOS_CRYSTAL_3: return novosCrystalGUID3;
case DATA_NOVOS_CRYSTAL_4: return novosCrystalGUID4;
case DATA_NOVOS_SUMMONER_1: return novosSummonerGUID1;
case DATA_NOVOS_SUMMONER_2: return novosSummonerGUID2;
case DATA_NOVOS_SUMMONER_3: return novosSummonerGUID3;
case DATA_NOVOS_SUMMONER_4: return novosSummonerGUID4;
memset(NovosCrystalGUIDs, 0, 4 * sizeof(uint64));
memset(NovosSummonerGUIDs, 0, 4 * sizeof(uint64));
}
return 0;
}
void SetData(uint32 type, uint32 data) OVERRIDE
{
switch (type)
void OnCreatureCreate(Creature* creature)
{
case DATA_TROLLGORE_EVENT:
m_auiEncounter[0] = data;
break;
case DATA_NOVOS_EVENT:
m_auiEncounter[1] = data;
break;
case DATA_DRED_EVENT:
m_auiEncounter[2] = data;
break;
case DATA_THARON_JA_EVENT:
m_auiEncounter[3] = data;
break;
case DATA_KING_DRED_ACHIEV:
dredAchievCounter = data;
break;
switch (creature->GetEntry())
{
case NPC_TROLLGORE:
TrollgoreGUID = creature->GetGUID();
break;
case NPC_NOVOS:
NovosGUID = creature->GetGUID();
break;
case NPC_KING_DRED:
KingDredGUID = creature->GetGUID();
break;
case NPC_THARON_JA:
TharonJaGUID = creature->GetGUID();
break;
case NPC_CRYSTAL_CHANNEL_TARGET:
InitializeNovosSummoner(creature);
break;
default:
break;
}
}
if (data == DONE)
void OnGameObjectCreate(GameObject* go)
{
SaveToDB();
switch (go->GetEntry())
{
case GO_NOVOS_CRYSTAL_1:
NovosCrystalGUIDs[0] = go->GetGUID();
go->SetGoState(GO_STATE_READY);
break;
case GO_NOVOS_CRYSTAL_2:
NovosCrystalGUIDs[1] = go->GetGUID();
go->SetGoState(GO_STATE_READY);
break;
case GO_NOVOS_CRYSTAL_3:
NovosCrystalGUIDs[2] = go->GetGUID();
go->SetGoState(GO_STATE_READY);
break;
case GO_NOVOS_CRYSTAL_4:
NovosCrystalGUIDs[3] = go->GetGUID();
go->SetGoState(GO_STATE_READY);
break;
default:
break;
}
}
}
uint32 GetData(uint32 type) const OVERRIDE
{
switch (type)
void InitializeNovosSummoner(Creature* creature)
{
case DATA_TROLLGORE_EVENT: return m_auiEncounter[0];
case DATA_NOVOS_EVENT: return m_auiEncounter[1];
case DATA_DRED_EVENT: return m_auiEncounter[2];
case DATA_THARON_JA_EVENT: return m_auiEncounter[3];
case DATA_KING_DRED_ACHIEV: return dredAchievCounter;
float x = creature->GetPositionX();
float y = creature->GetPositionY();
float z = creature->GetPositionZ();
if (x < -374.0f && x > -379.0f && y > -820.0f && y < -815.0f && z < 60.0f && z > 58.0f)
NovosCrystalGUIDs[0] = creature->GetGUID();
else if (x < -379.0f && x > -385.0f && y > -820.0f && y < -815.0f && z < 60.0f && z > 58.0f)
NovosCrystalGUIDs[1] = creature->GetGUID();
else if (x < -374.0f && x > -385.0f && y > -827.0f && y < -820.0f && z < 60.0f && z > 58.0f)
NovosCrystalGUIDs[2] = creature->GetGUID();
else if (x < -338.0f && x > -344.0f && y > -727.0f && y < 721.0f && z < 30.0f && z > 26.0f)
NovosCrystalGUIDs[3] = creature->GetGUID();
}
return 0;
}
std::string GetSaveData()
{
OUT_SAVE_INST_DATA;
uint64 GetData64(uint32 type) const OVERRIDE
{
switch (type)
{
case DATA_TROLLGORE:
return TrollgoreGUID;
case DATA_NOVOS:
return NovosGUID;
case DATA_KING_DRED:
return KingDredGUID;
case DATA_THARON_JA:
return TharonJaGUID;
case DATA_NOVOS_CRYSTAL_1:
case DATA_NOVOS_CRYSTAL_2:
case DATA_NOVOS_CRYSTAL_3:
case DATA_NOVOS_CRYSTAL_4:
return NovosCrystalGUIDs[type - DATA_NOVOS_CRYSTAL_1];
case DATA_NOVOS_SUMMONER_1:
case DATA_NOVOS_SUMMONER_2:
case DATA_NOVOS_SUMMONER_3:
case DATA_NOVOS_SUMMONER_4:
return NovosSummonerGUIDs[type - DATA_NOVOS_SUMMONER_1];
}
std::ostringstream saveStream;
saveStream << "D K " << m_auiEncounter[0] << ' ' << m_auiEncounter[1] << ' '
<< m_auiEncounter[2] << ' ' << m_auiEncounter[3];
return 0;
}
OUT_SAVE_INST_DATA_COMPLETE;
return saveStream.str();
}
void OnUnitDeath(Unit* unit)
{
if (unit->GetEntry() == NPC_CRYSTAL_HANDLER)
if (novosGUID)
if (Creature* novos = instance->GetCreature(novosGUID))
void OnUnitDeath(Unit* unit)
{
if (unit->GetEntry() == NPC_CRYSTAL_HANDLER)
if (Creature* novos = instance->GetCreature(NovosGUID))
novos->AI()->DoAction(ACTION_CRYSTAL_HANDLER_DIED);
}
void Load(const char* in)
{
if (!in)
{
OUT_LOAD_INST_DATA_FAIL;
return;
}
OUT_LOAD_INST_DATA(in);
char dataHead1, dataHead2;
uint16 data0, data1, data2, data3;
std::istringstream loadStream(in);
loadStream >> dataHead1 >> dataHead2 >> data0 >> data1 >> data2 >> data3;
if (dataHead1 == 'D' && dataHead2 == 'K')
std::string GetSaveData()
{
m_auiEncounter[0] = data0;
m_auiEncounter[1] = data1;
m_auiEncounter[2] = data2;
m_auiEncounter[3] = data3;
OUT_SAVE_INST_DATA;
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
if (m_auiEncounter[i] == IN_PROGRESS)
m_auiEncounter[i] = NOT_STARTED;
} else OUT_LOAD_INST_DATA_FAIL;
std::ostringstream saveStream;
saveStream << "D K " << GetBossSaveData();
OUT_LOAD_INST_DATA_COMPLETE;
OUT_SAVE_INST_DATA_COMPLETE;
return saveStream.str();
}
void Load(char const* str)
{
if (!str)
{
OUT_LOAD_INST_DATA_FAIL;
return;
}
OUT_LOAD_INST_DATA(str);
char dataHead1, dataHead2;
std::istringstream loadStream(str);
loadStream >> dataHead1 >> dataHead2;
if (dataHead1 == 'D' && dataHead2 == 'K')
{
for (uint32 i = 0; i < EncounterCount; ++i)
{
uint32 tmpState;
loadStream >> tmpState;
if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
tmpState = NOT_STARTED;
SetBossState(i, EncounterState(tmpState));
}
}
else
OUT_LOAD_INST_DATA_FAIL;
OUT_LOAD_INST_DATA_COMPLETE;
}
protected:
uint64 TrollgoreGUID;
uint64 NovosGUID;
uint64 KingDredGUID;
uint64 TharonJaGUID;
uint64 NovosCrystalGUIDs[4];
uint64 NovosSummonerGUIDs[4];
};
InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
{
return new instance_drak_tharon_keep_InstanceScript(map);
}
};
InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
{
return new instance_drak_tharon_InstanceScript(map);
}
};
void AddSC_instance_drak_tharon()
void AddSC_instance_drak_tharon_keep()
{
new instance_drak_tharon;
new instance_drak_tharon_keep();
}