diff options
Diffstat (limited to 'src')
7 files changed, 510 insertions, 95 deletions
diff --git a/src/bindings/scripts/scripts/northrend/draktharon_keep/boss_dred.cpp b/src/bindings/scripts/scripts/northrend/draktharon_keep/boss_dred.cpp index 98425a29e1a..ae9e4900f3d 100644 --- a/src/bindings/scripts/scripts/northrend/draktharon_keep/boss_dred.cpp +++ b/src/bindings/scripts/scripts/northrend/draktharon_keep/boss_dred.cpp @@ -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) diff --git a/src/bindings/scripts/scripts/northrend/draktharon_keep/boss_novos.cpp b/src/bindings/scripts/scripts/northrend/draktharon_keep/boss_novos.cpp index 3fa867bdded..2035ff1f4f3 100644 --- a/src/bindings/scripts/scripts/northrend/draktharon_keep/boss_novos.cpp +++ b/src/bindings/scripts/scripts/northrend/draktharon_keep/boss_novos.cpp @@ -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. - +enum Spells +{ + 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 -//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 +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 +}; -struct TRINITY_DLL_DECL boss_novosAI : public ScriptedAI +struct Location { - boss_novosAI(Creature *c) : ScriptedAI(c) {} + float x,y,z; +}; + +static Location AddSpawnPoint = { -379.20, -816.76, 59.70}; - void Reset() {} +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) + { + if (pInstance) + pInstance->SetData(DATA_NOVOS_EVENT, DONE); } - void JustDied(Unit* killer) {} + 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(); } diff --git a/src/bindings/scripts/scripts/northrend/draktharon_keep/boss_tharon_ja.cpp b/src/bindings/scripts/scripts/northrend/draktharon_keep/boss_tharon_ja.cpp index 6ba178c48fc..e5b18a879b4 100644 --- a/src/bindings/scripts/scripts/northrend/draktharon_keep/boss_tharon_ja.cpp +++ b/src/bindings/scripts/scripts/northrend/draktharon_keep/boss_tharon_ja.cpp @@ -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); } }; diff --git a/src/bindings/scripts/scripts/northrend/draktharon_keep/boss_trollgore.cpp b/src/bindings/scripts/scripts/northrend/draktharon_keep/boss_trollgore.cpp index 194ef136f7e..c8397840ef7 100644 --- a/src/bindings/scripts/scripts/northrend/draktharon_keep/boss_trollgore.cpp +++ b/src/bindings/scripts/scripts/northrend/draktharon_keep/boss_trollgore.cpp @@ -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) { diff --git a/src/bindings/scripts/scripts/northrend/draktharon_keep/def_drak_tharon_keep.h b/src/bindings/scripts/scripts/northrend/draktharon_keep/def_drak_tharon_keep.h index 321d77a9c27..89f350c1a47 100644 --- a/src/bindings/scripts/scripts/northrend/draktharon_keep/def_drak_tharon_keep.h +++ b/src/bindings/scripts/scripts/northrend/draktharon_keep/def_drak_tharon_keep.h @@ -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 diff --git a/src/bindings/scripts/scripts/northrend/draktharon_keep/instance_drak_tharon_keep.cpp b/src/bindings/scripts/scripts/northrend/draktharon_keep/instance_drak_tharon_keep.cpp index 795f36eca18..6c88104b1e3 100644 --- a/src/bindings/scripts/scripts/northrend/draktharon_keep/instance_drak_tharon_keep.cpp +++ b/src/bindings/scripts/scripts/northrend/draktharon_keep/instance_drak_tharon_keep.cpp @@ -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) diff --git a/src/bindings/scripts/system/ScriptLoader.cpp b/src/bindings/scripts/system/ScriptLoader.cpp index 977cb40c45a..78087da9629 100644 --- a/src/bindings/scripts/system/ScriptLoader.cpp +++ b/src/bindings/scripts/system/ScriptLoader.cpp @@ -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(); |