diff options
-rw-r--r-- | sql/FULL/world_scripts_full.sql | 1 | ||||
-rw-r--r-- | sql/updates/7672_world_scriptname.sql | 1 | ||||
-rw-r--r-- | src/scripts/northrend/gundrak/boss_eck.cpp | 33 | ||||
-rw-r--r-- | src/scripts/northrend/gundrak/gundrak.h | 13 | ||||
-rw-r--r-- | src/scripts/northrend/gundrak/instance_gundrak.cpp | 19 |
5 files changed, 61 insertions, 6 deletions
diff --git a/sql/FULL/world_scripts_full.sql b/sql/FULL/world_scripts_full.sql index 8e586d3ffe8..315505a6a33 100644 --- a/sql/FULL/world_scripts_full.sql +++ b/sql/FULL/world_scripts_full.sql @@ -639,6 +639,7 @@ UPDATE `creature_template` SET `ScriptName`='boss_drakkari_elemental' WHERE `ent UPDATE `creature_template` SET `ScriptName`='npc_living_mojo' WHERE `entry`=29830; /* Eck the Ferocious */ UPDATE `creature_template` SET `ScriptName`='boss_eck' WHERE `entry`=29932; +UPDATE `creature_template` SET `ScriptName`='npc_ruins_dweller' WHERE `entry`=29920; UPDATE `gameobject_template` SET `ScriptName`='go_gundrak_altar' WHERE `entry`=192518; UPDATE `gameobject_template` SET `ScriptName`='go_gundrak_altar' WHERE `entry`=192519; diff --git a/sql/updates/7672_world_scriptname.sql b/sql/updates/7672_world_scriptname.sql new file mode 100644 index 00000000000..b9451e75629 --- /dev/null +++ b/sql/updates/7672_world_scriptname.sql @@ -0,0 +1 @@ +UPDATE `creature_template` SET `ScriptName`='npc_ruins_dweller' WHERE `entry`=29920; diff --git a/src/scripts/northrend/gundrak/boss_eck.cpp b/src/scripts/northrend/gundrak/boss_eck.cpp index a80ed238e20..ac860521abf 100644 --- a/src/scripts/northrend/gundrak/boss_eck.cpp +++ b/src/scripts/northrend/gundrak/boss_eck.cpp @@ -20,6 +20,9 @@ enum Spells SPELL_ECK_SPRING_1 = 55815, //Eck leaps at a distant target. --> Drops aggro and charges a random player. Tank can simply taunt him back. SPELL_ECK_SPRING_2 = 55837 //Eck leaps at a distant target. }; + +static Position EckSpawnPoint = { 1643.877930, 936.278015, 107.204948, 0.668432 }; + struct boss_eckAI : public ScriptedAI { boss_eckAI(Creature *c) : ScriptedAI(c) @@ -117,6 +120,31 @@ CreatureAI* GetAI_boss_eck(Creature* pCreature) return new boss_eckAI (pCreature); } +struct npc_ruins_dwellerAI : public ScriptedAI +{ + npc_ruins_dwellerAI(Creature *c) : ScriptedAI(c) + { + pInstance = c->GetInstanceData(); + } + + ScriptedInstance* pInstance; + + void JustDied(Unit *who) + { + if(pInstance) + { + pInstance->SetData(DATA_RUIN_DIED_DWELLER,m_creature->GetGUID()); + if (pInstance->GetData(DATA_RUIN_DIED_DWELLER) == 0) + m_creature->SummonCreature(CREATURE_ECK, EckSpawnPoint, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 300*IN_MILISECONDS); + } + } +}; + +CreatureAI* GetAI_npc_ruins_dweller(Creature* pCreature) +{ + return new npc_ruins_dwellerAI (pCreature); +} + void AddSC_boss_eck() { Script *newscript; @@ -125,4 +153,9 @@ void AddSC_boss_eck() newscript->Name = "boss_eck"; newscript->GetAI = &GetAI_boss_eck; newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name = "npc_ruins_dweller"; + newscript->GetAI = &GetAI_npc_ruins_dweller; + newscript->RegisterSelf(); } diff --git a/src/scripts/northrend/gundrak/gundrak.h b/src/scripts/northrend/gundrak/gundrak.h index d4c19f4ad35..66e597aaa8d 100644 --- a/src/scripts/northrend/gundrak/gundrak.h +++ b/src/scripts/northrend/gundrak/gundrak.h @@ -7,7 +7,8 @@ enum Data DATA_MOORABI_EVENT, DATA_DRAKKARI_COLOSSUS_EVENT, DATA_GAL_DARAH_EVENT, - DATA_ECK_THE_FEROCIOUS_EVENT + DATA_ECK_THE_FEROCIOUS_EVENT, + DATA_RUIN_DIED_DWELLER }; enum Data64 @@ -21,4 +22,14 @@ enum Data64 DATA_DRAKKARI_COLOSSUS }; +enum mainCreatures +{ + CREATURE_RUIN_DWELLER = 29920, + CREATURE_SLAD_RAN = 29304, + CREATURE_MOORABI = 29305, + CREATURE_GALDARAH = 29306, + CREATURE_DRAKKARICOLOSSUS = 29307, + CREATURE_ECK = 29932 +}; + #endif diff --git a/src/scripts/northrend/gundrak/instance_gundrak.cpp b/src/scripts/northrend/gundrak/instance_gundrak.cpp index 8fbed4ccd26..041588db83c 100644 --- a/src/scripts/northrend/gundrak/instance_gundrak.cpp +++ b/src/scripts/northrend/gundrak/instance_gundrak.cpp @@ -55,6 +55,8 @@ struct instance_gundrak : public ScriptedInstance GOState uiBridgeState; GOState uiCollisionState; + std::set<uint64> DwellerGUIDs; + std::string str_data; void Initialize() @@ -95,6 +97,8 @@ struct instance_gundrak : public ScriptedInstance uiBridgeState = GO_STATE_ACTIVE; uiCollisionState = GO_STATE_READY; + DwellerGUIDs.clear(); + memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); } @@ -110,11 +114,12 @@ struct instance_gundrak : public ScriptedInstance { 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 29932: uiEckTheFerocious = pCreature->GetGUID(); break; + case CREATURE_SLAD_RAN: uiSladRan = pCreature->GetGUID(); break; + case CREATURE_MOORABI: uiMoorabi = pCreature->GetGUID(); break; + case CREATURE_GALDARAH: uiGalDarah = pCreature->GetGUID(); break; + case CREATURE_DRAKKARICOLOSSUS: uiDrakkariColossus = pCreature->GetGUID(); break; + case CREATURE_ECK: uiEckTheFerocious = pCreature->GetGUID(); break; + case CREATURE_RUIN_DWELLER: DwellerGUIDs.insert(pCreature->GetGUID()); break; } } @@ -263,6 +268,9 @@ struct instance_gundrak : public ScriptedInstance if (bHeroicMode && data == DONE) HandleGameObject(uiEckTheFerociousDoorBehind,true); break; + case DATA_RUIN_DIED_DWELLER: + DwellerGUIDs.erase(data); + break; } if (data == DONE) @@ -278,6 +286,7 @@ struct instance_gundrak : public ScriptedInstance 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]; + case DATA_RUIN_DIED_DWELLER: return DwellerGUIDs.size(); } return 0; |