mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-21 09:44:45 +01:00
Scripts/DrakTharonKeep: reworked InstanceScript
This commit is contained in:
@@ -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;
|
||||
@@ -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();
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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();
|
||||
@@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -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_
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user