diff options
| author | maximius <none@none> | 2009-09-26 16:01:30 -0700 |
|---|---|---|
| committer | maximius <none@none> | 2009-09-26 16:01:30 -0700 |
| commit | 7396b641ae82adcf5afd2591957ff944b7964203 (patch) | |
| tree | b6d54ca311e779ae4e77b569b9a367dc26a4938a /src/bindings/scripts | |
| parent | ff3f556423bc90f8476c8b09bacb60cd621b2664 (diff) | |
*Gundrak: GO Handling & Slad Ran script by Tartalo
*Cleanup, and don't consider creatures to be in combat if they have no victim, or if their victim is a GM.
--HG--
branch : trunk
Diffstat (limited to 'src/bindings/scripts')
8 files changed, 622 insertions, 87 deletions
diff --git a/src/bindings/scripts/scripts/northrend/gundrak/boss_drakkari_colossus.cpp b/src/bindings/scripts/scripts/northrend/gundrak/boss_drakkari_colossus.cpp index 4d18ad6ba7c..dcfaf33b66a 100644 --- a/src/bindings/scripts/scripts/northrend/gundrak/boss_drakkari_colossus.cpp +++ b/src/bindings/scripts/scripts/northrend/gundrak/boss_drakkari_colossus.cpp @@ -10,6 +10,7 @@ Script Data End */ update creature_template set scriptname = '' where entry = ''; *** SQL END ***/ #include "precompiled.h" +#include "def_gundrak.h" //Spells #define SPELL_EMERGE 54850 //to phase2, Colossus unatackable, Elemental emerges @@ -18,25 +19,39 @@ update creature_template set scriptname = '' where entry = ''; struct TRINITY_DLL_DECL boss_drakkari_colossusAI : public ScriptedAI { - boss_drakkari_colossusAI(Creature *c) : ScriptedAI(c) {} - - uint32 phase; + boss_drakkari_colossusAI(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_DRAKKARI_COLOSSUS_EVENT, NOT_STARTED); + } + + void EnterCombat(Unit* who) + { + if (pInstance) + pInstance->SetData(DATA_DRAKKARI_COLOSSUS_EVENT, IN_PROGRESS); + } + void UpdateAI(const uint32 diff) { //Return since we have no target if (!UpdateVictim()) return; - - phase =1; - + DoMeleeAttackIfReady(); } - void JustDied(Unit* killer) {} + + void JustDied(Unit* killer) + { + if (pInstance) + pInstance->SetData(DATA_DRAKKARI_COLOSSUS_EVENT, DONE); + } }; CreatureAI* GetAI_boss_drakkari_colossus(Creature* pCreature) diff --git a/src/bindings/scripts/scripts/northrend/gundrak/boss_eck.cpp b/src/bindings/scripts/scripts/northrend/gundrak/boss_eck.cpp index 8c72de6c9ad..241570fa0ed 100644 --- a/src/bindings/scripts/scripts/northrend/gundrak/boss_eck.cpp +++ b/src/bindings/scripts/scripts/northrend/gundrak/boss_eck.cpp @@ -10,6 +10,7 @@ Script Data End */ update creature_template set scriptname = '' where entry = ''; *** SQL END ***/ #include "precompiled.h" +#include "def_gundrak.h" #define SPELL_ECK_BERSERK 55816 //Eck goes berserk, increasing his attack speed by 150% and all damage he deals by 500%. #define SPELL_ECK_BITE 55813 //Eck bites down hard, inflicting 150% of his normal damage to an enemy. @@ -19,34 +20,50 @@ update creature_template set scriptname = '' where entry = ''; struct TRINITY_DLL_DECL boss_eckAI : public ScriptedAI { - boss_eckAI(Creature *c) : ScriptedAI(c) {} + boss_eckAI(Creature *c) : ScriptedAI(c) + { + pInstance = c->GetInstanceData(); + } - uint32 berserk; + uint32 uiBerserkTimer; + + ScriptedInstance* pInstance; void Reset() { //Source Deadly Boss Mod - berserk = 120000; //2min + uiBerserkTimer = 120000; //2min + + if (pInstance) + pInstance->SetData(DATA_ECK_THE_FEROCIOUS_EVENT, NOT_STARTED); } - void EnterCombat(Unit* who) {} - void AttackStart(Unit* who) {} - void MoveInLineOfSight(Unit* who) {} + void EnterCombat(Unit* who) + { + if (pInstance) + pInstance->SetData(DATA_ECK_THE_FEROCIOUS_EVENT, IN_PROGRESS); + } + void UpdateAI(const uint32 diff) { //Return since we have no target if (!UpdateVictim()) return; - if (berserk < diff) + if (uiBerserkTimer < diff) { DoCast(m_creature,SPELL_ECK_BERSERK); - berserk = 120000; - }else berserk -= diff; + uiBerserkTimer = 120000; + }else uiBerserkTimer -= diff; DoMeleeAttackIfReady(); } - void JustDied(Unit* killer) {} + + void JustDied(Unit* killer) + { + if (pInstance) + pInstance->SetData(DATA_ECK_THE_FEROCIOUS_EVENT, DONE); + } }; CreatureAI* GetAI_boss_eck(Creature* pCreature) diff --git a/src/bindings/scripts/scripts/northrend/gundrak/boss_gal_darah.cpp b/src/bindings/scripts/scripts/northrend/gundrak/boss_gal_darah.cpp index b2462a32931..123a2b1ccc6 100644 --- a/src/bindings/scripts/scripts/northrend/gundrak/boss_gal_darah.cpp +++ b/src/bindings/scripts/scripts/northrend/gundrak/boss_gal_darah.cpp @@ -10,40 +10,58 @@ Script Data End */ update creature_template set scriptname = '' where entry = ''; *** SQL END ***/ #include "precompiled.h" +#include "def_gundrak.h" //Spells -#define SPELL_ENRAGE 55285 -#define SPELL_IMPALING_CHARGE 54956 -#define SPELL_STOMP 55292 - -#define SPELL_PUNCTURE 55276 -#define SPELL_STAMPEDE 55218 -#define SPELL_WHIRLING_SLASH 55285 +enum Spells +{ + SPELL_ENRAGE = 55285, + SPELL_IMPALING_CHARGE = 54956, + SPELL_STOMP = 55292, + SPELL_PUNCTURE = 55276, + SPELL_STAMPEDE = 55218, + SPELL_WHIRLING_SLASH = 55249, + H_SPELL_WHIRLING_SLASH = 55825 +}; -//not in db //Yells -#define SAY_AGGRO -1604000 -#define SAY_SLAY_1 -1604001 -#define SAY_SLAY_2 -1604002 -#define SAY_SLAY_3 -1604003 -#define SAY_DEATH -1604004 -#define SAY_SUMMON_RHINO_1 -1604005 -#define SAY_SUMMON_RHINO_2 -1604006 -#define SAY_SUMMON_RHINO_3 -1604007 -#define SAY_TRANSFORM_1 -1604008 //Phase change -#define SAY_TRANSFORM_2 -1604009 +enum Yells +{ + SAY_AGGRO = -1604000, + SAY_SLAY_1 = -1604001, + SAY_SLAY_2 = -1604002, + SAY_SLAY_3 = -1604003, + SAY_DEATH = -1604004, + SAY_SUMMON_RHINO_1 = -1604005, + SAY_SUMMON_RHINO_2 = -1604006, + SAY_SUMMON_RHINO_3 = -1604007, + SAY_TRANSFORM_1 = -1604008, //Phase change + SAY_TRANSFORM_2 = -1604009 +}; struct TRINITY_DLL_DECL boss_gal_darahAI : public ScriptedAI { - boss_gal_darahAI(Creature *c) : ScriptedAI(c) {} + boss_gal_darahAI(Creature *c) : ScriptedAI(c) + { + pInstance = c->GetInstanceData(); + } + + ScriptedInstance* pInstance; - void Reset() {} + void Reset() + { + if (pInstance) + pInstance->SetData(DATA_GAL_DARAH_EVENT, NOT_STARTED); + } + void EnterCombat(Unit* who) { DoScriptText(SAY_AGGRO, m_creature); + + if (pInstance) + pInstance->SetData(DATA_GAL_DARAH_EVENT, IN_PROGRESS); } - void AttackStart(Unit* who) {} - void MoveInLineOfSight(Unit* who) {} + void UpdateAI(const uint32 diff) { //Return since we have no target @@ -52,21 +70,21 @@ struct TRINITY_DLL_DECL boss_gal_darahAI : public ScriptedAI DoMeleeAttackIfReady(); } + void JustDied(Unit* killer) { DoScriptText(SAY_DEATH, m_creature); + + if (pInstance) + pInstance->SetData(DATA_GAL_DARAH_EVENT, DONE); } + void KilledUnit(Unit *victim) { if (victim == m_creature) return; - switch(rand()%3) - { - case 0: DoScriptText(SAY_SLAY_1, m_creature);break; - case 1: DoScriptText(SAY_SLAY_2, m_creature);break; - case 2: DoScriptText(SAY_SLAY_3, m_creature);break; - } + DoScriptText(RAND(SAY_SLAY_1,SAY_SLAY_2,SAY_SLAY_3), m_creature); } }; diff --git a/src/bindings/scripts/scripts/northrend/gundrak/boss_moorabi.cpp b/src/bindings/scripts/scripts/northrend/gundrak/boss_moorabi.cpp index 3e0408fca90..dcf7bde6e41 100644 --- a/src/bindings/scripts/scripts/northrend/gundrak/boss_moorabi.cpp +++ b/src/bindings/scripts/scripts/northrend/gundrak/boss_moorabi.cpp @@ -7,6 +7,7 @@ SDCategory: Gundrak Script Data End */ #include "precompiled.h" +#include "def_gundrak.h" //Spells @@ -38,10 +39,10 @@ struct TRINITY_DLL_DECL boss_moorabiAI : public ScriptedAI { boss_moorabiAI(Creature *c) : ScriptedAI(c) { - HeroicMode = c->GetMap()->IsHeroic(); + pInstance = c->GetInstanceData(); } - bool HeroicMode; + ScriptedInstance* pInstance; bool Phase; uint32 SPELL_QUAKE_TIMER; uint32 SPELL_NUMBING_SHOUT_TIMER; @@ -56,12 +57,18 @@ struct TRINITY_DLL_DECL boss_moorabiAI : public ScriptedAI SPELL_DETERMINED_STAB_TIMER = 20000; SPELL_TRANSFORMATION_TIMER = 12000; Phase = false; + + if (pInstance) + pInstance->SetData(DATA_DRAKKARI_COLOSSUS_EVENT, NOT_STARTED); } void EnterCombat(Unit *who) { DoScriptText(SAY_AGGRO, m_creature); m_creature->CastSpell(m_creature,SPELL_MOJO_FRENZY,true); + + if (pInstance) + pInstance->SetData(DATA_DRAKKARI_COLOSSUS_EVENT, IN_PROGRESS); } void UpdateAI(const uint32 diff) @@ -149,6 +156,9 @@ struct TRINITY_DLL_DECL boss_moorabiAI : public ScriptedAI } } } + + if (pInstance) + pInstance->SetData(DATA_DRAKKARI_COLOSSUS_EVENT, DONE); } void KilledUnit(Unit *victim) { diff --git a/src/bindings/scripts/scripts/northrend/gundrak/boss_slad_ran.cpp b/src/bindings/scripts/scripts/northrend/gundrak/boss_slad_ran.cpp index e2ef3ab6713..3dd0b651de1 100644 --- a/src/bindings/scripts/scripts/northrend/gundrak/boss_slad_ran.cpp +++ b/src/bindings/scripts/scripts/northrend/gundrak/boss_slad_ran.cpp @@ -10,73 +10,196 @@ Script Data End */ update creature_template set scriptname = 'boss_slad_ran' where entry = ''; *** SQL END ***/ #include "precompiled.h" +#include "def_gundrak.h" //Spells -#define SPELL_POISON_NOVA 55081 -#define SPELL_POISON_NOVA_2 59842 -//-- -#define SPELL_POWERFUL_BITE 48287 -#define SPELL_POWERFUL_BITE_2 59840 -//-- -#define SPELL_VENOM_BOLT 54970 -#define SPELL_VENOM_BOLT_2 59839 -//At 30% HPStart summoning small serpents - -//not in db +enum Spells +{ + SPELL_POISON_NOVA = 55081, + H_SPELL_POISON_NOVA = 59842, + SPELL_POWERFULL_BITE = 48287, + H_SPELL_POWERFULL_BITE = 59840, + SPELL_VENOM_BOLT = 54970, + H_SPELL_VENOM_BOLT = 59839 +}; + //Yell -#define SAY_AGGRO -1604017 -#define SAY_SLAY_1 -1604018 -#define SAY_SLAY_2 -1604019 -#define SAY_SLAY_3 -1604020 -#define SAY_DEATH -1604021 -#define SAY_SUMMON_SNAKES -1604022 //npc 29680 -#define SAY_SUMMON_CONSTRICTORS -1604023 //npc 29713, can cast Grip of Slad'ran (spell 55093) +enum Yells +{ + SAY_AGGRO = -1604017, + SAY_SLAY_1 = -1604018, + SAY_SLAY_2 = -1604019, + SAY_SLAY_3 = -1604020, + SAY_DEATH = -1604021, + SAY_SUMMON_SNAKES = -1604022, + SAY_SUMMON_CONSTRICTORS = -1604023 +}; + +//Creatures +enum Creatures +{ + CREATURE_SNAKE = 29680, + CREATURE_CONSTRICTORS = 29713 +}; + +//Creatures' spells +enum ConstrictorSpells +{ + SPELL_GRIP_OF_SLAD_RAN = 55093, + SPELL_VENOMOUS_BITE = 54987, + H_SPELL_VENOMOUS_BITE = 58996 +}; struct TRINITY_DLL_DECL boss_slad_ranAI : public ScriptedAI { - boss_slad_ranAI(Creature *c) : ScriptedAI(c) {} + boss_slad_ranAI(Creature *c) : ScriptedAI(c) + { + pInstance = c->GetInstanceData(); + } + + uint32 uiPoisonNovaTimer; + uint32 uiPowerfullBiteTimer; + uint32 uiVenomBoltTimer; + uint32 uiSpawnTimer; + + uint8 uiPhase; - void Reset() {} + ScriptedInstance* pInstance; + + void Reset() + { + uiPoisonNovaTimer = 10000; + uiPowerfullBiteTimer = 3000; + uiVenomBoltTimer = 15000; + uiSpawnTimer = 5000; + uiPhase = 0; + + if (pInstance) + pInstance->SetData(DATA_SLAD_RAN_EVENT, NOT_STARTED); + } + void EnterCombat(Unit* who) { DoScriptText(SAY_AGGRO, m_creature); + + if (pInstance) + pInstance->SetData(DATA_SLAD_RAN_EVENT, IN_PROGRESS); } - void AttackStart(Unit* who) {} - void MoveInLineOfSight(Unit* who) {} + void UpdateAI(const uint32 diff) { //Return since we have no target if (!UpdateVictim()) return; + + if (uiPoisonNovaTimer < diff) + { + DoCast(m_creature->getVictim(), HeroicMode ? H_SPELL_POISON_NOVA : SPELL_POISON_NOVA); + uiPoisonNovaTimer = 15000; + } else uiPoisonNovaTimer -= diff; + + if (uiPowerfullBiteTimer < diff) + { + DoCast(m_creature->getVictim(), HeroicMode ? H_SPELL_POWERFULL_BITE : SPELL_POWERFULL_BITE); + uiPowerfullBiteTimer = 10000; + } else uiPowerfullBiteTimer -= diff; + + if (uiVenomBoltTimer < diff) + { + DoCast(m_creature->getVictim(), HeroicMode ? H_SPELL_VENOM_BOLT : SPELL_VENOM_BOLT); + uiVenomBoltTimer = 10000; + } else uiVenomBoltTimer -= diff; + + if (uiPhase) + { + if(uiSpawnTimer < diff) + { + if (uiPhase == 1) + for (uint8 i = 0;i< HeroicMode ? 5 : 3;++i) + m_creature->SummonCreature(CREATURE_SNAKE, rand()%5, rand()%5, 0, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN,20000); + if (uiPhase == 2) + for (uint8 i = 0;i< HeroicMode ? 5 : 3;++i) + m_creature->SummonCreature(CREATURE_CONSTRICTORS, rand()%5, rand()%5, 0, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN,20000); + uiSpawnTimer = 5000; + } else uiSpawnTimer -= diff; + } - if ((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 30) + if ((uiPhase == 0) && (m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 30) { - //Summon 3 snakes --> npc 29680 DoScriptText(SAY_SUMMON_SNAKES,m_creature); + uiPhase = 1; } - if ((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 25) + if ((uiPhase == 1) && (m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 25) { - //Summon 3 constrictors --> npc 29713 DoScriptText(SAY_SUMMON_CONSTRICTORS,m_creature); + uiPhase = 2; } DoMeleeAttackIfReady(); } + void JustDied(Unit* killer) { DoScriptText(SAY_DEATH, m_creature); + + if (pInstance) + pInstance->SetData(DATA_SLAD_RAN_EVENT, DONE); } + void KilledUnit(Unit *victim) { - if (victim == m_creature) + DoScriptText(RAND(SAY_SLAY_1,SAY_SLAY_2,SAY_SLAY_3), m_creature); + } +}; + +struct TRINITY_DLL_DECL mob_slad_ran_constrictorAI : public ScriptedAI +{ + mob_slad_ran_constrictorAI(Creature *c) : ScriptedAI(c) {} + + uint32 uiGripOfSladRanTimer; + + void Reset() + { + uiGripOfSladRanTimer = 1000; + } + + void UpdateAI(const uint32 diff) + { + if (!UpdateVictim()) return; + if (uiGripOfSladRanTimer < diff) + { + DoCast(m_creature->getVictim(), SPELL_GRIP_OF_SLAD_RAN); + uiGripOfSladRanTimer = 5000; + } else uiGripOfSladRanTimer -= diff;; + } + + ScriptedInstance* pInstance; +}; - switch(rand()%3) +struct TRINITY_DLL_DECL mob_slad_ran_viperAI : public ScriptedAI +{ + mob_slad_ran_viperAI(Creature *c) : ScriptedAI(c) {} + + uint32 uiVenomousBiteTimer; + + ScriptedInstance* pInstance; + + void Reset() + { + uiVenomousBiteTimer = 2000; + } + + void UpdateAI(const uint32 diff) + { + if (!UpdateVictim()) + return; + + if (uiVenomousBiteTimer < diff) { - case 0:DoScriptText(SAY_SLAY_1, m_creature);break; - case 1:DoScriptText(SAY_SLAY_2, m_creature);break; - case 2:DoScriptText(SAY_SLAY_3, m_creature);break; - } + DoCast(m_creature->getVictim(), HeroicMode ? H_SPELL_VENOMOUS_BITE : SPELL_VENOMOUS_BITE); + uiVenomousBiteTimer = 10000; + } else uiVenomousBiteTimer -= diff; } }; @@ -85,6 +208,16 @@ CreatureAI* GetAI_boss_slad_ran(Creature* pCreature) return new boss_slad_ranAI (pCreature); } +CreatureAI* GetAI_mob_slad_ran_constrictor(Creature* pCreature) +{ + return new mob_slad_ran_constrictorAI (pCreature); +} + +CreatureAI* GetAI_mob_slad_ran_viper(Creature* pCreature) +{ + return new mob_slad_ran_viperAI (pCreature); +} + void AddSC_boss_slad_ran() { Script *newscript; @@ -93,4 +226,14 @@ void AddSC_boss_slad_ran() newscript->Name="boss_slad_ran"; newscript->GetAI = &GetAI_boss_slad_ran; newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="mob_slad_ran_constrictor"; + newscript->GetAI = &GetAI_mob_slad_ran_constrictor; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="mob_slad_ran_viper"; + newscript->GetAI = &GetAI_mob_slad_ran_viper; + newscript->RegisterSelf(); } diff --git a/src/bindings/scripts/scripts/northrend/gundrak/def_gundrak.h b/src/bindings/scripts/scripts/northrend/gundrak/def_gundrak.h index 5f015610312..957023b3583 100644 --- a/src/bindings/scripts/scripts/northrend/gundrak/def_gundrak.h +++ b/src/bindings/scripts/scripts/northrend/gundrak/def_gundrak.h @@ -1,4 +1,20 @@ #ifndef DEF_GUNDRAK_H #define DEF_GUNDRAK_H +enum Data +{ + DATA_SLAD_RAN_EVENT, + DATA_MOORABI_EVENT, + DATA_DRAKKARI_COLOSSUS_EVENT, + DATA_GAL_DARAH_EVENT, + DATA_ECK_THE_FEROCIOUS_EVENT +}; + +enum Data64 +{ + DATA_SLAD_RAN_ALTAR, + DATA_MOORABI_ALTAR, + DATA_DRAKKARI_COLOSSUS_ALTAR +}; + #endif diff --git a/src/bindings/scripts/scripts/northrend/gundrak/instance_gundrak.cpp b/src/bindings/scripts/scripts/northrend/gundrak/instance_gundrak.cpp index 0ed874d905f..157b4c87991 100644 --- a/src/bindings/scripts/scripts/northrend/gundrak/instance_gundrak.cpp +++ b/src/bindings/scripts/scripts/northrend/gundrak/instance_gundrak.cpp @@ -1,11 +1,307 @@ #include "precompiled.h" #include "def_gundrak.h" +#define MAX_ENCOUNTER 5 + +/* GunDrak encounters: +0 - Slad'Ran +1 - Moorabi +2 - Drakkari Colossus +3 - Gal'Darah +4 - Eck the Ferocious +*/ + struct TRINITY_DLL_DECL instance_gundrak : public ScriptedInstance { - instance_gundrak(Map* pMap) : ScriptedInstance(pMap) {Initialize();}; + instance_gundrak(Map* pMap) : ScriptedInstance(pMap) + { + bHeroicMode = pMap->IsHeroic(); + Initialize(); + }; + + bool bHeroicMode; + + uint64 uiSladRan; + uint64 uiMoorabi; + uint64 uiDrakkariColossus; + uint64 uiGalDarah; + uint64 uiEckTheFerocious; + + uint32 uiSladRanAltar; + uint32 uiMoorabiAltar; + uint32 uiDrakkariColossusAltar; + uint32 uiSladRanStatue; + uint32 uiMoorabiStatue; + uint32 uiDrakkariColossusStatue; + uint32 uiEckTheFerociousDoor; + uint32 uiGalDarahDoor1; + uint32 uiGalDarahDoor2; + uint32 uiBridge; + uint32 uiCollision; + + uint32 m_auiEncounter[MAX_ENCOUNTER]; + + std::string str_data; + + void Initialize() + { + uiSladRan = 0; + uiMoorabi = 0; + uiDrakkariColossus = 0; + uiGalDarah = 0; + uiEckTheFerocious = 0; + + uiSladRanAltar = 0; + uiMoorabiAltar = 0; + uiDrakkariColossusAltar = 0; + + uiSladRanStatue = 0; + uiMoorabiStatue = 0; + uiDrakkariColossusStatue = 0; + + uiEckTheFerociousDoor = 0; + uiGalDarahDoor1 = 0; + uiGalDarahDoor2 = 0; + + uiBridge = 0; + uiCollision = 0; + + memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); + } + + bool IsEncounterInProgress() const + { + for(uint8 i = 0; i < MAX_ENCOUNTER; ++i) + if (m_auiEncounter[i] == IN_PROGRESS) return true; + + return false; + } + + void OnCreatureCreate(Creature* pCreature, bool add) + { + switch(pCreature->GetEntry()) + { + case 29304: uiSladRan = pCreature->GetGUID(); break; + case 29305: uiMoorabi = pCreature->GetGUID(); break; + case 29306: uiGalDarah = pCreature->GetGUID(); break; + case 29307: uiDrakkariColossus = pCreature->GetGUID(); break; + case 29332: uiEckTheFerocious = pCreature->GetGUID(); break; + } + } + + void OnGameObjectCreate(GameObject* pGo, bool add) + { + switch(pGo->GetEntry()) + { + case 192518: + uiSladRanAltar = pGo->GetGUID(); + if (m_auiEncounter[0] == DONE) + pGo->RemoveFlag(GAMEOBJECT_FLAGS,GO_FLAG_UNK1); + break; + case 192519: + uiMoorabiAltar = pGo->GetGUID(); + if (m_auiEncounter[1] == DONE) + pGo->RemoveFlag(GAMEOBJECT_FLAGS,GO_FLAG_UNK1); + break; + case 192520: + uiDrakkariColossus = pGo->GetGUID(); + if (m_auiEncounter[2] == DONE) + pGo->RemoveFlag(GAMEOBJECT_FLAGS,GO_FLAG_UNK1); + break; + case 192564: + uiSladRanStatue = pGo->GetGUID(); + break; + case 192565: + uiMoorabiStatue = pGo->GetGUID(); + break; + case 192567: + uiDrakkariColossus = pGo->GetGUID(); + break; + case 192632: + uiEckTheFerociousDoor = pGo->GetGUID(); + if (bHeroicMode && m_auiEncounter[1] == DONE) + HandleGameObject(NULL,true,pGo); + break; + case 193208: + uiGalDarahDoor1 = pGo->GetGUID(); + if (m_auiEncounter[3] == DONE) + HandleGameObject(NULL,true,pGo); + break; + case 193209: + uiGalDarahDoor2 = pGo->GetGUID(); + if (m_auiEncounter[3] == DONE) + HandleGameObject(NULL,true,pGo); + break; + case 193188: + uiBridge = pGo->GetGUID(); + break; + case 192633: + uiBridge = pGo->GetGUID(); + break; + } + } + + void SetData(uint32 type, uint32 data) + { + switch(type) + { + case DATA_SLAD_RAN_EVENT: + m_auiEncounter[0] = data; + if (data == DONE) + { + GameObject* pGo = instance->GetGameObject(uiSladRanAltar); + if (pGo) + pGo->RemoveFlag(GAMEOBJECT_FLAGS,GO_FLAG_UNK1); + } + break; + case DATA_MOORABI_EVENT: + m_auiEncounter[1] = data; + if (data == DONE) + { + GameObject* pGo = instance->GetGameObject(uiMoorabiAltar); + if (pGo) + pGo->RemoveFlag(GAMEOBJECT_FLAGS,GO_FLAG_UNK1); + if (bHeroicMode) + HandleGameObject(uiEckTheFerociousDoor,true); + } + break; + case DATA_DRAKKARI_COLOSSUS_EVENT: + m_auiEncounter[2] = data; + if (data == DONE) + { + GameObject* pGo = instance->GetGameObject(uiDrakkariColossusAltar); + if (pGo) + pGo->RemoveFlag(GAMEOBJECT_FLAGS,GO_FLAG_UNK1); + } + break; + case DATA_GAL_DARAH_EVENT: + m_auiEncounter[3] = data; + if (data == DONE) + { + HandleGameObject(uiGalDarahDoor1,true); + HandleGameObject(uiGalDarahDoor2,true); + } + break; + case DATA_ECK_THE_FEROCIOUS_EVENT: + m_auiEncounter[4] = data; + break; + } + + if (data == DONE) + SaveToDB(); + } + + uint32 GetData(uint32 type) + { + switch(type) + { + case DATA_SLAD_RAN_EVENT: return m_auiEncounter[0]; + case DATA_MOORABI_EVENT: return m_auiEncounter[1]; + case DATA_GAL_DARAH_EVENT: return m_auiEncounter[2]; + case DATA_DRAKKARI_COLOSSUS_EVENT: return m_auiEncounter[3]; + case DATA_ECK_THE_FEROCIOUS_EVENT: return m_auiEncounter[4]; + } + + return 0; + } + + uint64 GetData64(uint32 type) + { + switch(type) + { + case DATA_SLAD_RAN_ALTAR: return uiSladRanAltar; + case DATA_MOORABI_ALTAR: return uiMoorabiAltar; + case DATA_DRAKKARI_COLOSSUS_ALTAR: return uiDrakkariColossusAltar; + } + + return 0; + } + + std::string GetSaveData() + { + OUT_SAVE_INST_DATA; + + std::ostringstream saveStream; + saveStream << "G D " << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " + << m_auiEncounter[2] << " " << m_auiEncounter[3] << " " << m_auiEncounter[4]; + + 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; + + std::istringstream loadStream(in); + loadStream >> dataHead1 >> dataHead2 >> data0 >> data1 >> data2 >> data3 >> data4; + + if (dataHead1 == 'G' && dataHead2 == 'D') + { + 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; + } + + void CheckAltars() + { + GameObject* pSladRanAltar = instance->GetGameObject(uiSladRanAltar); + GameObject* pMoorabiAltar = instance->GetGameObject(uiMoorabiAltar); + GameObject* pDrakkariColossusAltar = instance->GetGameObject(uiDrakkariColossusAltar); + + if (pSladRanAltar && pSladRanAltar->GetGoState() == GO_STATE_ACTIVE && + pMoorabiAltar && pMoorabiAltar->GetGoState() == GO_STATE_ACTIVE && + pDrakkariColossusAltar && pDrakkariColossusAltar->GetGoState()) + { + HandleGameObject(uiBridge,true); + HandleGameObject(uiCollision,true); + } + } }; +bool GOHello_altar(Player *pPlayer, GameObject *pGO) +{ + ScriptedInstance *pInstance = pGO->GetInstanceData(); + uint32 uiStatue; + + pGO->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1); + pGO->SetGoState(GO_STATE_ACTIVE); + + if (pInstance) + { + switch(pGO->GetEntry()) + { + case 192518: uiStatue = pInstance->GetData64(DATA_SLAD_RAN_ALTAR); break; + case 192519: uiStatue = pInstance->GetData64(DATA_MOORABI_ALTAR); break; + case 192520: uiStatue = pInstance->GetData64(DATA_DRAKKARI_COLOSSUS_ALTAR); break; + } + pInstance->HandleGameObject(uiStatue,true); + ((instance_gundrak*)pInstance)->CheckAltars(); + return true; + } + return false; +} + InstanceData* GetInstanceData_instance_gundrak(Map* pMap) { return new instance_gundrak(pMap); @@ -18,4 +314,9 @@ void AddSC_instance_gundrak() newscript->Name = "instance_gundrak"; newscript->GetInstanceData = &GetInstanceData_instance_gundrak; newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name = "go_gundrak_altar"; + newscript->pGOHello = &GOHello_altar; + newscript->RegisterSelf(); } diff --git a/src/bindings/scripts/system/ScriptLoader.cpp b/src/bindings/scripts/system/ScriptLoader.cpp index e334070e520..8c06c9206b7 100644 --- a/src/bindings/scripts/system/ScriptLoader.cpp +++ b/src/bindings/scripts/system/ScriptLoader.cpp @@ -261,7 +261,12 @@ extern void AddSC_ungoro_crater(); extern void AddSC_winterspring(); //northrend +extern void AddSC_boss_slad_ran(); extern void AddSC_boss_moorabi(); +extern void AddSC_boss_drakkari_colossus(); +extern void AddSC_boss_gal_darah(); +extern void AddSC_boss_eck(); +extern void AddSC_instance_gundrak(); extern void AddSC_instance_ahnkahet(); //Azjol-Nerub Ahn'kahet extern void AddSC_boss_krik_thir(); extern void AddSC_boss_taldaram(); @@ -670,12 +675,17 @@ void AddScripts() AddSC_winterspring(); //northrend + AddSC_boss_slad_ran(); //Gundrak AddSC_boss_moorabi(); - AddSC_instance_ahnkahet(); //Azjol-Nerub Ahn'kahet - AddSC_boss_krik_thir(); - AddSC_boss_taldaram(); + AddSC_boss_drakkari_colossus(); + AddSC_boss_gal_darah(); + AddSC_boss_eck(); + AddSC_instance_gundrak(); + AddSC_boss_taldaram(); //Azjol-Nerub Ahn'kahet AddSC_boss_elder_nadox(); AddSC_boss_volazj(); + AddSC_instance_ahnkahet(); + AddSC_boss_krik_thir(); //Azjol-Nerub Azjol-Nerub AddSC_boss_anubrekhan(); //Naxxramas AddSC_boss_maexxna(); AddSC_boss_patchwerk(); @@ -717,6 +727,11 @@ void AddScripts() AddSC_boss_skarvald_dalronn(); AddSC_boss_ingvar_the_plunderer(); AddSC_instance_utgarde_keep(); + AddSC_boss_svala(); //Utgarde pinnacle + AddSC_boss_palehoof(); + AddSC_boss_skadi(); + AddSC_boss_ymiron(); + AddSC_instance_utgarde_pinnacle(); AddSC_utgarde_keep(); AddSC_boss_archavon(); //Vault of Archavon AddSC_boss_emalon(); |
