*Updated, working script for Drak'Tharon Keep (Novos the Summoner), by Tartalo
--HG-- branch : trunk
This commit is contained in:
@@ -10,25 +10,40 @@ Script Data End */
|
||||
update creature_template set scriptname = '' where entry = '';
|
||||
*** SQL END ***/
|
||||
#include "precompiled.h"
|
||||
#include "def_drak_tharon_keep.h"
|
||||
|
||||
//Spells
|
||||
#define SPELL_BELLOWING_ROAR 44863 // fears the group, can be resisted/dispelled
|
||||
#define SPELL_GRIEVOUS_BITE 48920
|
||||
#define SPELL_MANGLING_SLASH 48873 //casted on the current tank, adds debuf
|
||||
#define SPELL_FEARSOME_ROAR_N 48849
|
||||
#define SPELL_FEARSOME_ROAR_H 48849 //Not stacking, debuff
|
||||
#define SPELL_PIERCING_SLASH 48878 //debuff -->Armor reduced by 75%
|
||||
#define SPELL_RAPTOR_CALL 59416 //dummy
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_BELLOWING_ROAR = 44863, // fears the group, can be resisted/dispelled
|
||||
SPELL_GRIEVOUS_BITE = 48920,
|
||||
SPELL_MANGLING_SLASH = 48873, //casted on the current tank, adds debuf
|
||||
SPELL_FEARSOME_ROAR = 48849,
|
||||
H_SPELL_FEARSOME_ROAR = 48849, //Not stacking, debuff
|
||||
SPELL_PIERCING_SLASH = 48878, //debuff -->Armor reduced by 75%
|
||||
SPELL_RAPTOR_CALL = 59416 //dummy
|
||||
};
|
||||
|
||||
struct TRINITY_DLL_DECL boss_dredAI : public ScriptedAI
|
||||
{
|
||||
boss_dredAI(Creature *c) : ScriptedAI(c) {}
|
||||
boss_dredAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
void Reset() {}
|
||||
void EnterCombat(Unit* who) {}
|
||||
void AttackStart(Unit* who) {}
|
||||
void MoveInLineOfSight(Unit* who) {}
|
||||
void Reset()
|
||||
{
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_DRED_EVENT,NOT_STARTED);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* who)
|
||||
{
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_DRED_EVENT,IN_PROGRESS);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
//Return since we have no target
|
||||
@@ -37,7 +52,12 @@ struct TRINITY_DLL_DECL boss_dredAI : public ScriptedAI
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
void JustDied(Unit* killer) {}
|
||||
|
||||
void JustDied(Unit* killer)
|
||||
{
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_DRED_EVENT,DONE);
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI_boss_dred(Creature* pCreature)
|
||||
|
||||
@@ -10,54 +10,192 @@ Script Data End */
|
||||
update creature_template set scriptname = 'boss_novos' where entry = '';
|
||||
*** SQL END ***/
|
||||
#include "precompiled.h"
|
||||
#include "def_drak_tharon_keep.h"
|
||||
|
||||
//Spells
|
||||
#define SPELL_ARCANE_BLAST_N 49198
|
||||
#define SPELL_ARCANE_BLAST_H 59909
|
||||
#define SPELL_ARCANE_FIELD 47346
|
||||
#define SPELL_BLIZZARD_N 49034
|
||||
#define SPELL_BLIZZARD_H 59854
|
||||
#define SPELL_FROSTBOLT_N 49037
|
||||
#define SPELL_FROSTBOLT_H 59855
|
||||
#define SPELL_WRATH_OF_MISERY_N 50089
|
||||
#define SPELL_WRATH_OF_MISERY_H 59856
|
||||
#define SPELL_SUMMON_MINIONS 59910 //Summons an army of Fetid Troll Corpses to assist the caster.
|
||||
|
||||
//not in db
|
||||
//Yell
|
||||
#define SAY_AGGRO -1600000
|
||||
#define SAY_KILL -1600001
|
||||
#define SAY_DEATH -1600002
|
||||
#define SAY_NECRO_ADD -1600003
|
||||
#define SAY_REUBBLE_1 -1600004
|
||||
#define SAY_REUBBLE_2 -1600005
|
||||
|
||||
struct TRINITY_DLL_DECL boss_novosAI : public ScriptedAI
|
||||
enum Spells
|
||||
{
|
||||
boss_novosAI(Creature *c) : ScriptedAI(c) {}
|
||||
SPELL_ARCANE_BLAST = 49198,
|
||||
H_SPELL_ARCANE_BLAST = 59909,
|
||||
SPELL_ARCANE_FIELD = 47346,
|
||||
SPELL_BLIZZARD = 49034,
|
||||
H_SPELL_BLIZZARD = 59854,
|
||||
SPELL_FROSTBOLT = 49037,
|
||||
H_SPELL_FROSTBOLT = 59855,
|
||||
SPELL_WRATH_OF_MISERY = 50089,
|
||||
H_SPELL_WRATH_OF_MISERY = 59856,
|
||||
SPELL_SUMMON_MINIONS = 59910 //Summons an army of Fetid Troll Corpses to assist the caster.
|
||||
};
|
||||
//not in db
|
||||
enum Yells
|
||||
{
|
||||
SAY_AGGRO = -1600000,
|
||||
SAY_KILL = -1600001,
|
||||
SAY_DEATH = -1600002,
|
||||
SAY_NECRO_ADD = -1600003,
|
||||
SAY_REUBBLE_1 = -1600004,
|
||||
SAY_REUBBLE_2 = -1600005
|
||||
};
|
||||
enum Creatures
|
||||
{
|
||||
CREATURE_RISEN_SHADOWCASTER = 27600,
|
||||
CREATURE_FETID_TROLL_CORPSE = 27598,
|
||||
CREATURE_HULKING_CORPSE = 27597,
|
||||
CREATURE_CRYSTAL_HANDLER = 26627
|
||||
};
|
||||
enum CombatPhase
|
||||
{
|
||||
IDLE,
|
||||
PHASE_1,
|
||||
PHASE_2
|
||||
};
|
||||
|
||||
void Reset() {}
|
||||
struct Location
|
||||
{
|
||||
float x,y,z;
|
||||
};
|
||||
|
||||
static Location AddSpawnPoint = { -379.20, -816.76, 59.70};
|
||||
|
||||
struct TRINITY_DLL_DECL boss_novosAI : public Scripted_NoMovementAI
|
||||
{
|
||||
boss_novosAI(Creature *c) : Scripted_NoMovementAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceData();
|
||||
Reset();
|
||||
}
|
||||
|
||||
uint32 uiTimer;
|
||||
uint32 uiCrystalHandlerTimer;
|
||||
|
||||
std::list<uint64> luiCrystals;
|
||||
|
||||
CombatPhase Phase;
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
Phase = IDLE;
|
||||
luiCrystals.clear();
|
||||
if (pInstance)
|
||||
{
|
||||
pInstance->SetData(DATA_NOVOS_EVENT, NOT_STARTED);
|
||||
luiCrystals.push_back(pInstance->GetData64(DATA_NOVOS_CRYSTAL_1));
|
||||
luiCrystals.push_back(pInstance->GetData64(DATA_NOVOS_CRYSTAL_2));
|
||||
luiCrystals.push_back(pInstance->GetData64(DATA_NOVOS_CRYSTAL_3));
|
||||
luiCrystals.push_back(pInstance->GetData64(DATA_NOVOS_CRYSTAL_4));
|
||||
for (std::list<uint64>::iterator itr = luiCrystals.begin(); itr != luiCrystals.end(); ++itr)
|
||||
{
|
||||
if (GameObject* pTemp = pInstance->instance->GetGameObject(*itr))
|
||||
pTemp->SetGoState(GO_STATE_READY);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* who)
|
||||
{
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
Phase = PHASE_1;
|
||||
uiCrystalHandlerTimer = 30000;
|
||||
uiTimer = 1000;
|
||||
DoCast(m_creature,SPELL_ARCANE_FIELD);
|
||||
if (pInstance)
|
||||
{
|
||||
for (std::list<uint64>::iterator itr = luiCrystals.begin(); itr != luiCrystals.end(); ++itr)
|
||||
{
|
||||
if (GameObject *pTemp = pInstance->instance->GetGameObject(*itr))
|
||||
pTemp->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
pInstance->SetData(DATA_NOVOS_EVENT, IN_PROGRESS);
|
||||
}
|
||||
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
|
||||
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
}
|
||||
void AttackStart(Unit* who) {}
|
||||
void MoveInLineOfSight(Unit* who) {}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
//Return since we have no target
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
switch (Phase)
|
||||
{
|
||||
case PHASE_1:
|
||||
if (uiTimer < diff)
|
||||
{
|
||||
Creature *pSummon = m_creature->SummonCreature(RAND(CREATURE_FETID_TROLL_CORPSE,CREATURE_HULKING_CORPSE,CREATURE_RISEN_SHADOWCASTER), AddSpawnPoint.x, AddSpawnPoint.y , AddSpawnPoint.z, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN,20000);
|
||||
pSummon->GetMotionMaster()->MovePoint(0, m_creature->GetPositionX(), m_creature->GetPositionY() , m_creature->GetPositionZ());
|
||||
//If spell is casted stops casting arcane field so no spell casting
|
||||
//DoCast(m_creature,SPELL_SUMMON_MINIONS);
|
||||
uiTimer = 3000;
|
||||
} else uiTimer -= diff;
|
||||
if (uiCrystalHandlerTimer < diff)
|
||||
{
|
||||
//TODO: say
|
||||
Creature *pCrystalHandler = m_creature->SummonCreature(CREATURE_CRYSTAL_HANDLER, AddSpawnPoint.x, AddSpawnPoint.y , AddSpawnPoint.z, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN,20000);
|
||||
pCrystalHandler->GetMotionMaster()->MovePoint(0, m_creature->GetPositionX(), m_creature->GetPositionY() , m_creature->GetPositionZ());
|
||||
uiCrystalHandlerTimer = 20000+rand()%10000;
|
||||
} else uiCrystalHandlerTimer -= diff;
|
||||
break;
|
||||
case PHASE_2:
|
||||
if (uiTimer < diff)
|
||||
{
|
||||
Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0);
|
||||
while (pTarget && pTarget->GetTypeId() != TYPEID_PLAYER)
|
||||
pTarget = SelectUnit(SELECT_TARGET_RANDOM,0);
|
||||
if (pTarget)
|
||||
DoCast(pTarget, HeroicMode ? RAND(H_SPELL_ARCANE_BLAST,H_SPELL_BLIZZARD,H_SPELL_FROSTBOLT,H_SPELL_WRATH_OF_MISERY) :
|
||||
RAND(SPELL_ARCANE_BLAST,SPELL_BLIZZARD,SPELL_FROSTBOLT,SPELL_WRATH_OF_MISERY));
|
||||
uiTimer = 1000 + rand()%2000;
|
||||
} else uiTimer -= diff;
|
||||
break;
|
||||
}
|
||||
}
|
||||
void JustDied(Unit* killer) {}
|
||||
void JustDied(Unit* killer)
|
||||
{
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_NOVOS_EVENT, DONE);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit *victim)
|
||||
{
|
||||
if (victim == m_creature)
|
||||
return;
|
||||
DoScriptText(SAY_KILL, m_creature);
|
||||
}
|
||||
|
||||
void RemoveCrystal()
|
||||
{
|
||||
if (!luiCrystals.empty())
|
||||
{
|
||||
if (pInstance)
|
||||
if (GameObject *pTemp = pInstance->instance->GetGameObject(luiCrystals.back()))
|
||||
pTemp->SetGoState(GO_STATE_READY);
|
||||
luiCrystals.pop_back();
|
||||
}
|
||||
if (luiCrystals.empty())
|
||||
{
|
||||
m_creature->CastStop();
|
||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
|
||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
Phase = PHASE_2;
|
||||
uiTimer = 1000;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
struct TRINITY_DLL_DECL mob_crystal_handlerAI : public ScriptedAI
|
||||
{
|
||||
mob_crystal_handlerAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance *pInstance;
|
||||
|
||||
void JustDied(Unit* killer)
|
||||
{
|
||||
if (Creature* pNovos = Unit::GetCreature(*m_creature, pInstance ? pInstance->GetData64(DATA_NOVOS) : 0))
|
||||
CAST_AI(boss_novosAI,pNovos->AI())->RemoveCrystal();
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI_boss_novos(Creature* pCreature)
|
||||
@@ -65,6 +203,11 @@ CreatureAI* GetAI_boss_novos(Creature* pCreature)
|
||||
return new boss_novosAI (pCreature);
|
||||
}
|
||||
|
||||
CreatureAI* GetAI_mob_crystal_handler(Creature* pCreature)
|
||||
{
|
||||
return new mob_crystal_handlerAI (pCreature);
|
||||
}
|
||||
|
||||
void AddSC_boss_novos()
|
||||
{
|
||||
Script *newscript;
|
||||
@@ -73,4 +216,9 @@ void AddSC_boss_novos()
|
||||
newscript->Name="boss_novos";
|
||||
newscript->GetAI = &GetAI_boss_novos;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name="mob_crystal_handler";
|
||||
newscript->GetAI = &GetAI_mob_crystal_handler;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
|
||||
@@ -10,52 +10,70 @@ Script Data End */
|
||||
update creature_template set scriptname = 'boss_tharon_ja' where entry = '';
|
||||
*** SQL END ***/
|
||||
#include "precompiled.h"
|
||||
#include "def_drak_tharon_keep.h"
|
||||
|
||||
//Spells
|
||||
#define SPELL_COURSE_OF_LIFE 49527
|
||||
#define SPELL_DECAY_FLESH 49356 //casted at end of pahase 1, starts phase 2
|
||||
#define SPELL_EYE_BEAM_N 49544
|
||||
#define SPELL_LIGHTNING_BREATH_N 49537
|
||||
#define SPELL_POISON_CLOUD_N 49548
|
||||
#define SPELL_RAIN_OF_FIRE_N 49518
|
||||
#define SPELL_RETURN_FLESH 53463 //Channeled spell ending phase two and returning to phase 1. This ability will stun the party for 6 seconds.
|
||||
#define SPELL_SHADOW_VOLLEY_N 49528
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_COURSE_OF_LIFE = 49527,
|
||||
SPELL_DECAY_FLESH = 49356, //casted at end of pahase 1, starts phase 2
|
||||
SPELL_EYE_BEAM = 49544,
|
||||
SPELL_LIGHTNING_BREATH = 49537,
|
||||
SPELL_POISON_CLOUD = 49548,
|
||||
SPELL_RAIN_OF_FIRE = 49518,
|
||||
SPELL_RETURN_FLESH = 53463, //Channeled spell ending phase two and returning to phase 1. This ability will stun the party for 6 seconds.
|
||||
SPELL_SHADOW_VOLLEY = 49528,
|
||||
//Spells Heroic
|
||||
#define SPELL_COURSE_OF_LIFE_H 59972
|
||||
#define SPELL_EYE_BEAM_H 59965
|
||||
#define SPELL_LIGHTNING_BREATH_H 59963
|
||||
#define SPELL_POISON_CLOUD_H 59969
|
||||
#define SPELL_RAIN_OF_FIRE_H 59971
|
||||
#define SPELL_SHADOW_VOLLEY_H 59973
|
||||
|
||||
H_SPELL_COURSE_OF_LIFE = 59972,
|
||||
H_SPELL_EYE_BEAM = 59965,
|
||||
H_SPELL_LIGHTNING_BREATH = 59963,
|
||||
H_SPELL_POISON_CLOUD = 59969,
|
||||
H_SPELL_RAIN_OF_FIRE = 59971,
|
||||
H_SPELL_SHADOW_VOLLEY = 59973
|
||||
};
|
||||
enum PlayerSkills
|
||||
{
|
||||
//Players skills durring Phase2
|
||||
#define PLAYER_PHASE2_SLAYING_STRIKE 50799
|
||||
#define PLAYER_PHASE2_TAUNT 49613
|
||||
#define PLAYER_PHASE2_BONE_ARMOR 49609
|
||||
#define PLAYER_PHASE2_TOUCH_OF_LIFE 49617
|
||||
PLAYER_PHASE2_SLAYING_STRIKE = 50799,
|
||||
PLAYER_PHASE2_TAUNT = 49613,
|
||||
PLAYER_PHASE2_BONE_ARMOR = 49609,
|
||||
PLAYER_PHASE2_TOUCH_OF_LIFE = 49617
|
||||
};
|
||||
//Phase 1 all abilities except Eye beam
|
||||
//Phase 2 turns players to skeletons with new abilities, boss grows skin
|
||||
|
||||
//not in db
|
||||
//Yell
|
||||
#define SAY_AGGRO -1600011
|
||||
#define SAY_KILL_1 -1600012
|
||||
#define SAY_KILL_2 -1600013
|
||||
#define SAY_FLESH_1 -1600014
|
||||
#define SAY_FLESH_2 -1600015
|
||||
#define SAY_SKELETON_1 -1600016
|
||||
#define SAY_SKELETON_2 -1600017
|
||||
#define SAY_DEATH -1600018
|
||||
enum Yells
|
||||
{
|
||||
SAY_AGGRO = -1600011,
|
||||
SAY_KILL_1 = -1600012,
|
||||
SAY_KILL_2 = -1600013,
|
||||
SAY_FLESH_1 = -1600014,
|
||||
SAY_FLESH_2 = -1600015,
|
||||
SAY_SKELETON_1 = -1600016,
|
||||
SAY_SKELETON_2 = -1600017,
|
||||
SAY_DEATH = -1600018
|
||||
};
|
||||
|
||||
struct TRINITY_DLL_DECL boss_tharon_jaAI : public ScriptedAI
|
||||
{
|
||||
boss_tharon_jaAI(Creature *c) : ScriptedAI(c) {}
|
||||
boss_tharon_jaAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
void Reset() {}
|
||||
void Reset()
|
||||
{
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_THARON_JA_EVENT, NOT_STARTED);
|
||||
}
|
||||
void EnterCombat(Unit* who)
|
||||
{
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_THARON_JA_EVENT, IN_PROGRESS);
|
||||
}
|
||||
void AttackStart(Unit* who) {}
|
||||
void MoveInLineOfSight(Unit* who) {}
|
||||
@@ -67,9 +85,18 @@ struct TRINITY_DLL_DECL boss_tharon_jaAI : public ScriptedAI
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
void KilledUnit(Unit *victim)
|
||||
{
|
||||
DoScriptText(RAND(SAY_KILL_1,SAY_KILL_2),m_creature);
|
||||
}
|
||||
|
||||
void JustDied(Unit* killer)
|
||||
{
|
||||
DoScriptText(SAY_DEATH,m_creature);
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_THARON_JA_EVENT, DONE);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -10,33 +10,49 @@ Script Data End */
|
||||
update creature_template set scriptname = 'boss_trollgore' where entry = '';
|
||||
*** SQL END ***/
|
||||
#include "precompiled.h"
|
||||
#include "def_drak_tharon_keep.h"
|
||||
|
||||
//Spell
|
||||
#define SPELL_INFECTED_WOUND 49637
|
||||
#define SPELL_CRUSH 49639
|
||||
#define SPELL_CORPSE_EXPLODE_N 49555
|
||||
#define SPELL_CONSUME_N 49380
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_INFECTED_WOUND = 49637,
|
||||
SPELL_CRUSH = 49639,
|
||||
SPELL_CORPSE_EXPLODE = 49555,
|
||||
SPELL_CONSUME = 49380,
|
||||
//Spell Heroic
|
||||
#define SPELL_CORPSE_EXPLODE_H 59807
|
||||
#define SPELL_CONSUME_H 59803
|
||||
|
||||
H_SPELL_CORPSE_EXPLODE = 59807,
|
||||
H_SPELL_CONSUME = 59803
|
||||
};
|
||||
//not in db
|
||||
//Yell
|
||||
#define SAY_AGGRO -1600006
|
||||
#define SAY_KILL -1600007
|
||||
#define SAY_CONSUME -1600008
|
||||
#define SAY_EXPLODE -1600009
|
||||
#define SAY_DEATH -1600010
|
||||
enum Yells
|
||||
{
|
||||
SAY_AGGRO = -1600006,
|
||||
SAY_KILL = -1600007,
|
||||
SAY_CONSUME = -1600008,
|
||||
SAY_EXPLODE = -1600009,
|
||||
SAY_DEATH = -1600010
|
||||
};
|
||||
|
||||
struct TRINITY_DLL_DECL boss_trollgoreAI : public ScriptedAI
|
||||
{
|
||||
boss_trollgoreAI(Creature *c) : ScriptedAI(c) {}
|
||||
boss_trollgoreAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
void Reset() {}
|
||||
void Reset()
|
||||
{
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_TROLLGORE_EVENT, NOT_STARTED);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* who)
|
||||
{
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_TROLLGORE_EVENT, IN_PROGRESS);
|
||||
}
|
||||
void AttackStart(Unit* who) {}
|
||||
void MoveInLineOfSight(Unit* who) {}
|
||||
@@ -51,6 +67,9 @@ struct TRINITY_DLL_DECL boss_trollgoreAI : public ScriptedAI
|
||||
void JustDied(Unit* killer)
|
||||
{
|
||||
DoScriptText(SAY_DEATH, m_creature);
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_TROLLGORE_EVENT, DONE);
|
||||
}
|
||||
void KilledUnit(Unit *victim)
|
||||
{
|
||||
|
||||
@@ -1,4 +1,21 @@
|
||||
#ifndef DEF_DRAK_THARON_H
|
||||
#define DEF_DRAK_THARON_H
|
||||
|
||||
enum Data
|
||||
{
|
||||
DATA_TROLLGORE_EVENT,
|
||||
DATA_NOVOS_EVENT,
|
||||
DATA_DRED_EVENT,
|
||||
DATA_THARON_JA_EVENT
|
||||
};
|
||||
enum Data64
|
||||
{
|
||||
DATA_TROLLGORE,
|
||||
DATA_NOVOS,
|
||||
DATA_DRED,
|
||||
DATA_THARON_JA,
|
||||
DATA_NOVOS_CRYSTAL_1,
|
||||
DATA_NOVOS_CRYSTAL_2,
|
||||
DATA_NOVOS_CRYSTAL_3,
|
||||
DATA_NOVOS_CRYSTAL_4
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -1,9 +1,189 @@
|
||||
#include "precompiled.h"
|
||||
#include "def_drak_tharon_keep.h"
|
||||
|
||||
#define MAX_ENCOUNTER 4
|
||||
/* Drak'Tharon Keep encounters:
|
||||
0 - Trollgore
|
||||
1 - Novos
|
||||
2 - King Dred
|
||||
3 - Tharon Ja
|
||||
*/
|
||||
|
||||
struct TRINITY_DLL_DECL instance_drak_tharon : public ScriptedInstance
|
||||
{
|
||||
instance_drak_tharon(Map* pMap) : ScriptedInstance(pMap) {Initialize();};
|
||||
|
||||
uint64 uiTrollgore;
|
||||
uint64 uiNovos;
|
||||
uint64 uiDred;
|
||||
uint64 uiTharonJa;
|
||||
|
||||
uint64 uiNovosCrystal1;
|
||||
uint64 uiNovosCrystal2;
|
||||
uint64 uiNovosCrystal3;
|
||||
uint64 uiNovosCrystal4;
|
||||
|
||||
uint8 m_auiEncounter[MAX_ENCOUNTER];
|
||||
|
||||
std::string str_data;
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
uiTrollgore = 0;
|
||||
uiNovos = 0;
|
||||
uiDred = 0;
|
||||
uiTharonJa = 0;
|
||||
uiNovosCrystal1 = 0;
|
||||
uiNovosCrystal2 = 0;
|
||||
uiNovosCrystal3 = 0;
|
||||
uiNovosCrystal4 = 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* pGo, bool add)
|
||||
{
|
||||
switch(pGo->GetEntry())
|
||||
{
|
||||
case 189299:
|
||||
uiNovosCrystal1 = pGo->GetGUID();
|
||||
break;
|
||||
case 189300:
|
||||
uiNovosCrystal2 = pGo->GetGUID();
|
||||
break;
|
||||
case 189301:
|
||||
uiNovosCrystal3 = pGo->GetGUID();
|
||||
break;
|
||||
case 189302:
|
||||
uiNovosCrystal4 = pGo->GetGUID();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void OnCreatureCreate(Creature* pCreature, bool add)
|
||||
{
|
||||
switch(pCreature->GetEntry())
|
||||
{
|
||||
case 26630:
|
||||
uiTrollgore = pCreature->GetGUID();
|
||||
break;
|
||||
case 26631:
|
||||
uiNovos = pCreature->GetGUID();
|
||||
break;
|
||||
case 27483:
|
||||
uiTrollgore = pCreature->GetGUID();
|
||||
break;
|
||||
case 26632:
|
||||
uiTharonJa = pCreature->GetGUID();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
uint64 GetData64(uint32 identifier)
|
||||
{
|
||||
switch(identifier)
|
||||
{
|
||||
case DATA_TROLLGORE: return uiTrollgore;
|
||||
case DATA_NOVOS: return uiNovos;
|
||||
case DATA_DRED: return uiDred;
|
||||
case DATA_THARON_JA: return uiTharonJa;
|
||||
case DATA_NOVOS_CRYSTAL_1: return uiNovosCrystal1;
|
||||
case DATA_NOVOS_CRYSTAL_2: return uiNovosCrystal2;
|
||||
case DATA_NOVOS_CRYSTAL_3: return uiNovosCrystal3;
|
||||
case DATA_NOVOS_CRYSTAL_4: return uiNovosCrystal4;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void SetData(uint32 type, uint32 data)
|
||||
{
|
||||
switch(type)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
if (data == DONE)
|
||||
{
|
||||
SaveToDB();
|
||||
}
|
||||
}
|
||||
|
||||
uint32 GetData(uint32 type)
|
||||
{
|
||||
switch(type)
|
||||
{
|
||||
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];
|
||||
}
|
||||
}
|
||||
|
||||
std::string GetSaveData()
|
||||
{
|
||||
OUT_SAVE_INST_DATA;
|
||||
|
||||
std::string str_data;
|
||||
|
||||
std::ostringstream saveStream;
|
||||
saveStream << "D K " << m_auiEncounter[0] << " " << m_auiEncounter[1] << " "
|
||||
<< m_auiEncounter[2] << " " << m_auiEncounter[3];
|
||||
|
||||
str_data = saveStream.str();
|
||||
|
||||
OUT_SAVE_INST_DATA_COMPLETE;
|
||||
return str_data;
|
||||
}
|
||||
|
||||
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,data4, data5, data6;
|
||||
|
||||
std::istringstream loadStream(in);
|
||||
loadStream >> dataHead1 >> dataHead2 >> data0 >> data1 >> data2 >> data3;
|
||||
|
||||
if (dataHead1 == 'D' && dataHead2 == 'K')
|
||||
{
|
||||
m_auiEncounter[0] = data0;
|
||||
m_auiEncounter[1] = data1;
|
||||
m_auiEncounter[2] = data2;
|
||||
m_auiEncounter[3] = data3;
|
||||
m_auiEncounter[4] = data4;
|
||||
|
||||
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;
|
||||
|
||||
OUT_LOAD_INST_DATA_COMPLETE;
|
||||
}
|
||||
};
|
||||
|
||||
InstanceData* GetInstanceData_instance_drak_tharon(Map* pMap)
|
||||
|
||||
@@ -327,6 +327,8 @@ extern void AddSC_utgarde_keep();
|
||||
extern void AddSC_boss_archavon(); //Vault of Archavon
|
||||
extern void AddSC_boss_emalon();
|
||||
extern void AddSC_instance_archavon();
|
||||
extern void AddSC_boss_novos(); //Drak'Tharon Keep
|
||||
extern void AddSC_instance_drak_tharon();
|
||||
|
||||
extern void AddSC_borean_tundra();
|
||||
extern void AddSC_dragonblight();
|
||||
@@ -746,6 +748,8 @@ void AddScripts()
|
||||
AddSC_boss_archavon(); //Vault of Archavon
|
||||
AddSC_boss_emalon();
|
||||
AddSC_instance_archavon();
|
||||
AddSC_boss_novos(); //Drak'Tharon Keep
|
||||
AddSC_instance_drak_tharon();
|
||||
|
||||
AddSC_borean_tundra();
|
||||
AddSC_dragonblight();
|
||||
|
||||
Reference in New Issue
Block a user