diff options
author | Rat <none@none> | 2009-08-10 15:37:16 +0200 |
---|---|---|
committer | Rat <none@none> | 2009-08-10 15:37:16 +0200 |
commit | 0795a9dbb29f5cae901ddcf4e12507e3459f4aff (patch) | |
tree | b4ec226c9f7da363c3b997fa637b5fa31ccdfe61 /src | |
parent | 66d7fa3431498f4ffba6f4775df2b70e69267e8a (diff) |
*add script for Wailing Caverns, Disciple of Naralex event, thanks to Oculus
--HG--
branch : trunk
Diffstat (limited to 'src')
7 files changed, 536 insertions, 2 deletions
diff --git a/src/bindings/scripts/CMakeLists.txt b/src/bindings/scripts/CMakeLists.txt index b67d7cfe4aa..ff2195eb91a 100644 --- a/src/bindings/scripts/CMakeLists.txt +++ b/src/bindings/scripts/CMakeLists.txt @@ -368,7 +368,9 @@ SET(trinityscript_LIB_SRCS scripts/zone/uldaman/uldaman.cpp scripts/zone/undercity/undercity.cpp scripts/zone/ungoro_crater/ungoro_crater.cpp + scripts/zone/wailing_caverns/def_wailing_caverns.h scripts/zone/wailing_caverns/instance_wailing_caverns.cpp + scripts/zone/wailing_caverns/wailing_caverns.cpp scripts/zone/western_plaguelands/western_plaguelands.cpp scripts/zone/westfall/westfall.cpp scripts/zone/winterspring/winterspring.cpp diff --git a/src/bindings/scripts/ScriptMgr.cpp b/src/bindings/scripts/ScriptMgr.cpp index d4198b329f2..d2857501705 100644 --- a/src/bindings/scripts/ScriptMgr.cpp +++ b/src/bindings/scripts/ScriptMgr.cpp @@ -600,6 +600,8 @@ extern void AddSC_instance_utgarde_keep(); extern void AddSC_utgarde_keep(); //Wailing caverns +extern void AddSC_wailing_caverns(); +extern void AddSC_instance_wailing_caverns(); //Western plaguelands extern void AddSC_western_plaguelands(); @@ -1517,6 +1519,8 @@ void ScriptsInit(char const* cfg_file = "trinitycore.conf") AddSC_utgarde_keep(); //Wailing caverns + AddSC_wailing_caverns(); + AddSC_instance_wailing_caverns(); //Western plaguelands AddSC_western_plaguelands(); diff --git a/src/bindings/scripts/VC80/80ScriptDev2.vcproj b/src/bindings/scripts/VC80/80ScriptDev2.vcproj index e5eeda086ff..9917fb31336 100644 --- a/src/bindings/scripts/VC80/80ScriptDev2.vcproj +++ b/src/bindings/scripts/VC80/80ScriptDev2.vcproj @@ -911,10 +911,19 @@ Name="Wailing Caverns" > <File + RelativePath="..\scripts\zone\wailing_caverns\def_wailing_caverns.h" + > + </File> + <File RelativePath="..\scripts\zone\wailing_caverns\instance_wailing_caverns.cpp" > </File> + <File + RelativePath="..\scripts\zone\wailing_caverns\wailing_caverns.cpp" + > + </File> </Filter> + <Filter Name="Un'Goro Crater" > diff --git a/src/bindings/scripts/VC90/90ScriptDev2.vcproj b/src/bindings/scripts/VC90/90ScriptDev2.vcproj index 7fe459734ed..24af6671570 100644 --- a/src/bindings/scripts/VC90/90ScriptDev2.vcproj +++ b/src/bindings/scripts/VC90/90ScriptDev2.vcproj @@ -912,9 +912,17 @@ Name="Wailing Caverns" > <File + RelativePath="..\scripts\zone\wailing_caverns\def_wailing_caverns.h" + > + </File> + <File RelativePath="..\scripts\zone\wailing_caverns\instance_wailing_caverns.cpp" > </File> + <File + RelativePath="..\scripts\zone\wailing_caverns\wailing_caverns.cpp" + > + </File> </Filter> <Filter Name="Un'Goro Crater" diff --git a/src/bindings/scripts/scripts/zone/wailing_caverns/def_wailing_caverns.h b/src/bindings/scripts/scripts/zone/wailing_caverns/def_wailing_caverns.h new file mode 100644 index 00000000000..2656db37d1b --- /dev/null +++ b/src/bindings/scripts/scripts/zone/wailing_caverns/def_wailing_caverns.h @@ -0,0 +1,23 @@ +/* Copyright (C) 2006 - 2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/> + * This program is free software licensed under GPL version 2 + * Please see the included DOCS/LICENSE.TXT for more information */ + +#ifndef DEF_WAILING_CAVERNS_H +#define DEF_WAILING_CAVERNS_H + +enum +{ + TYPE_LORD_COBRAHN = 1, + TYPE_LORD_PYTHAS = 2, + TYPE_LADY_ANACONDRA = 3, + TYPE_LORD_SERPENTIS = 4, + TYPE_NARALEX_EVENT = 5, + TYPE_NARALEX_PART1 = 6, + TYPE_NARALEX_PART2 = 7, + TYPE_NARALEX_PART3 = 8, + TYPE_MUTANUS_THE_DEVOURER = 9, + + DATA_NARALEX = 3679, +}; + +#endif
\ No newline at end of file diff --git a/src/bindings/scripts/scripts/zone/wailing_caverns/instance_wailing_caverns.cpp b/src/bindings/scripts/scripts/zone/wailing_caverns/instance_wailing_caverns.cpp index 5327bf7041d..2e30534ddc6 100644 --- a/src/bindings/scripts/scripts/zone/wailing_caverns/instance_wailing_caverns.cpp +++ b/src/bindings/scripts/scripts/zone/wailing_caverns/instance_wailing_caverns.cpp @@ -16,10 +16,124 @@ /* ScriptData SDName: Instance_Wailing_Caverns -SD%Complete: 0 -SDComment: Placeholder +SD%Complete: 90 +SDComment: Most of the event done, still need some polishing SDCategory: Wailing Caverns EndScriptData */ #include "precompiled.h" +#include "def_wailing_caverns.h" +#define ENCOUNTERS 9 + +struct TRINITY_DLL_DECL instance_wailing_caverns : public ScriptedInstance +{ + instance_wailing_caverns(Map *map) : ScriptedInstance(map) {Initialize();}; + + uint32 Encounter[ENCOUNTERS]; + + uint64 NaralexGUID; + + void Initialize() + { + NaralexGUID = 0; + + for (uint8 i = 0; i < ENCOUNTERS; i++) + Encounter[i] = NOT_STARTED; + } + + void OnCreatureCreate(Creature *creature, bool add) + { + if (creature->GetEntry() == DATA_NARALEX) + NaralexGUID = creature->GetGUID(); + } + + void SetData(uint32 type, uint32 data) + { + switch (type) + { + case TYPE_LORD_COBRAHN:Encounter[0] = data;break; + case TYPE_LORD_PYTHAS:Encounter[1] = data;break; + case TYPE_LADY_ANACONDRA:Encounter[2] = data;break; + case TYPE_LORD_SERPENTIS:Encounter[3] = data;break; + case TYPE_NARALEX_EVENT: Encounter[4] = data;break; + case TYPE_NARALEX_PART1:Encounter[5] = data;break; + case TYPE_NARALEX_PART2: Encounter[6] = data;break; + case TYPE_NARALEX_PART3:Encounter[7] = data;break; + case TYPE_MUTANUS_THE_DEVOURER:Encounter[8] = data;break; + } + if(data == DONE)SaveToDB(); + } + + uint32 GetData(uint32 type) + { + switch (type) + { + case TYPE_LORD_COBRAHN: return Encounter[0]; + case TYPE_LORD_PYTHAS: return Encounter[1]; + case TYPE_LADY_ANACONDRA: return Encounter[2]; + case TYPE_LORD_SERPENTIS: return Encounter[3]; + case TYPE_NARALEX_EVENT: return Encounter[4]; + case TYPE_NARALEX_PART1: return Encounter[5]; + case TYPE_NARALEX_PART2: return Encounter[6]; + case TYPE_NARALEX_PART3: return Encounter[7]; + case TYPE_MUTANUS_THE_DEVOURER: return Encounter[8]; + } + return 0; + } + + uint64 GetData64(uint32 data) + { + if (data == DATA_NARALEX)return NaralexGUID; + return 0; + } + + std::string GetSaveData() + { + OUT_SAVE_INST_DATA; + + std::ostringstream saveStream; + saveStream << Encounter[0] << " " << Encounter[1] << " " << Encounter[2] << " " + << Encounter[3] << " " << Encounter[4] << " " << Encounter[5] << " " + << Encounter[6] << " " << Encounter[7] << " " << Encounter[8]; + + OUT_SAVE_INST_DATA_COMPLETE; + return saveStream.str(); + } + + void Load(const char* in) + { + if (!in) + { + OUT_LOAD_INST_DATA_FAIL; + return; + } + + OUT_LOAD_INST_DATA(in); + + std::istringstream loadStream(in); + loadStream >> Encounter[0] >> Encounter[1] >> Encounter[2] >> Encounter[3] + >> Encounter[4] >> Encounter[5] >> Encounter[6] >> Encounter[7] >> Encounter[8]; + + for(uint8 i = 0; i < ENCOUNTERS; ++i) + if (Encounter[i] != DONE) + Encounter[i] = NOT_STARTED; + + OUT_LOAD_INST_DATA_COMPLETE; + } + +}; + +InstanceData* GetInstanceData_instance_wailing_caverns(Map* map) +{ + return new instance_wailing_caverns(map); +} + +void AddSC_instance_wailing_caverns() +{ + Script *newscript; + newscript = new Script; + newscript->Name = "instance_wailing_caverns"; + newscript->GetInstanceData = &GetInstanceData_instance_wailing_caverns; + newscript->RegisterSelf(); +}
\ No newline at end of file diff --git a/src/bindings/scripts/scripts/zone/wailing_caverns/wailing_caverns.cpp b/src/bindings/scripts/scripts/zone/wailing_caverns/wailing_caverns.cpp new file mode 100644 index 00000000000..53f9785e421 --- /dev/null +++ b/src/bindings/scripts/scripts/zone/wailing_caverns/wailing_caverns.cpp @@ -0,0 +1,374 @@ +/* Copyright (C) 2006 - 2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/> +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +/* ScriptData +SDName: Wailing Caverns +SD%Complete: 80 +SDComment: Need some more polishing and in the event the druids should fly away not just morph and dissapear +SDCategory: Wailing Caverns +EndScriptData */ + +/* ContentData +EndContentData */ + +#include "precompiled.h" +#include "../../npc/npc_escortAI.h" +#include "def_wailing_caverns.h" + +/*###### +## npc_disciple_of_naralex +######*/ + +enum +{ + //say + SAY_MAKE_PREPARATIONS = -1043001, + SAY_TEMPLE_OF_PROMISE = -1043002, + SAY_MUST_CONTINUE = -1043003, + SAY_BANISH_THE_SPIRITS = -1043004, + SAY_CAVERNS_PURIFIED = -1043005, + SAY_BEYOND_THIS_CORRIDOR = -1043006, + SAY_EMERALD_DREAM = -1043007, + SAY_MUTANUS_THE_DEVOURER = -1043012, + SAY_NARALEX_AWAKES = -1043014, + SAY_THANK_YOU = -1043015, + SAY_FAREWELL = -1043016, + SAY_ATTACKED = -1043017, + //yell + SAY_AT_LAST = -1043000, + SAY_I_AM_AWAKE = -1043013, + //emote + EMOTE_AWAKENING_RITUAL = -1043008, + EMOTE_TROUBLED_SLEEP = -1043009, + EMOTE_WRITHE_IN_AGONY = -1043010, + EMOTE_HORRENDOUS_VISION = -1043011, + //spell + SPELL_MARK_OF_THE_WILD_RANK_2 = 5232, + SPELL_SERPENTINE_CLEANSING = 6270, + SPELL_NATURE_CHANNELING = 13236, + SPELL_NARALEXS_AWAKENING = 6271, + SPELL_FLIGHT_FROM = 33943, + //npc entry + NPC_DEVIATE_RAVAGER = 3636, + NPC_DEVIATE_VIPER = 5755, + NPC_DEVIATE_MOCCASIN = 5762, + NPC_NIGHTMARE_ECTOPLASM = 5763, + NPC_MUTANUS_THE_DEVOURER = 3654, +}; + +#define GOSSIP_ID_START_1 698 //Naralex sleeps again! +#define GOSSIP_ID_START_2 699 //The fanglords are dead! +#define GOSSIP_ITEM_NARALEX "Let the event begin!" + +struct TRINITY_DLL_DECL npc_disciple_of_naralexAI : public npc_escortAI +{ + npc_disciple_of_naralexAI(Creature *c) : npc_escortAI(c) + { + pInstance = c->GetInstanceData(); + eventTimer = 0; + currentEvent = 0; + eventProgress = 0; + m_creature->setActive(true); + m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2); + } + + uint32 eventTimer; + uint32 currentEvent; + uint32 eventProgress; + ScriptedInstance *pInstance; + + void WaypointReached(uint32 i) + { + if (!pInstance) + return; + + switch ( i ) + { + case 4: + eventProgress = 1; + currentEvent = TYPE_NARALEX_PART1; + pInstance->SetData(TYPE_NARALEX_PART1, IN_PROGRESS); + break; + case 5: + DoScriptText(SAY_MUST_CONTINUE, m_creature); + pInstance->SetData(TYPE_NARALEX_PART1, DONE); + break; + case 11: + eventProgress = 1; + currentEvent = TYPE_NARALEX_PART2; + pInstance->SetData(TYPE_NARALEX_PART2, IN_PROGRESS); + break; + case 19: + DoScriptText(SAY_BEYOND_THIS_CORRIDOR, m_creature); + break; + case 24: + eventProgress = 1; + currentEvent = TYPE_NARALEX_PART3; + pInstance->SetData(TYPE_NARALEX_PART3, IN_PROGRESS); + break; + } + } + + void Reset() + { + + } + + void EnterCombat(Unit* who) + { + DoScriptText(SAY_ATTACKED, m_creature, who); + } + + void JustDied(Unit *slayer) + { + if (pInstance) + { + pInstance->SetData(TYPE_NARALEX_EVENT, FAIL); + pInstance->SetData(TYPE_NARALEX_PART1, FAIL); + pInstance->SetData(TYPE_NARALEX_PART2, FAIL); + pInstance->SetData(TYPE_NARALEX_PART3, FAIL); + } + } + + void JustSummoned(Creature* summoned) + { + summoned->AI()->AttackStart(m_creature); + } + + void EnterEvadeMode() + { + m_creature->RemoveAllAuras(); + m_creature->DeleteThreatList(); + m_creature->CombatStop(false);//do not interrupt channeling + m_creature->SetLootRecipient(NULL); + if (GetIsBeingEscorted()) + { + SetReturning(true); + ReturnToLastPoint(); + debug_log("TSCR: EscortAI (EnterEvadeMode() Override) has left combat and is now returning to last point"); + } + else + m_creature->GetMotionMaster()->MoveTargetedHome(); + } + + void UpdateAI(const uint32 diff) + { + if(currentEvent != TYPE_NARALEX_PART3) + npc_escortAI::UpdateAI(diff); + + if (!pInstance) + return; + if(eventTimer <= diff) + { + eventTimer = 0; + if (pInstance->GetData(currentEvent) == IN_PROGRESS) + { + switch (currentEvent) + { + case TYPE_NARALEX_PART1: + if (eventProgress == 1) + { + eventProgress++; + DoScriptText(SAY_TEMPLE_OF_PROMISE, m_creature); + m_creature->SummonCreature(NPC_DEVIATE_RAVAGER, -82.1763, 227.874, -93.3233, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 5000); + m_creature->SummonCreature(NPC_DEVIATE_RAVAGER, -72.9506, 216.645, -93.6756, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 5000); + } + break; + case TYPE_NARALEX_PART2: + if (eventProgress == 1) + { + eventProgress++; + DoScriptText(SAY_BANISH_THE_SPIRITS, m_creature); + DoCast(m_creature, SPELL_SERPENTINE_CLEANSING); + ((npc_escortAI*)m_creature->AI())->SetCanDefend(false); + eventTimer = 30000; + m_creature->SummonCreature(NPC_DEVIATE_VIPER, -61.5261, 273.676, -92.8442, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 5000); + m_creature->SummonCreature(NPC_DEVIATE_VIPER, -58.4658, 280.799, -92.8393, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 5000); + m_creature->SummonCreature(NPC_DEVIATE_VIPER, -50.002, 278.578, -92.8442, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 5000); + } + else + if (eventProgress == 2) + { + ((npc_escortAI*)m_creature->AI())->SetCanDefend(true); + DoScriptText(SAY_CAVERNS_PURIFIED, m_creature); + pInstance->SetData(TYPE_NARALEX_PART2, DONE); + if (m_creature->HasAura(SPELL_SERPENTINE_CLEANSING)) + m_creature->RemoveAura(SPELL_SERPENTINE_CLEANSING); + } + break; + case TYPE_NARALEX_PART3: + if (eventProgress == 1) + { + eventProgress++; + eventTimer = 15000; + m_creature->SetStandState(UNIT_STAND_STATE_KNEEL); + DoScriptText(SAY_EMERALD_DREAM, m_creature); + ((npc_escortAI*)m_creature->AI())->SetCanDefend(false); + if (Creature* naralex = pInstance->instance->GetCreature(pInstance->GetData64(DATA_NARALEX))) + m_creature->CastSpell(naralex, SPELL_NATURE_CHANNELING, true); + DoScriptText(EMOTE_AWAKENING_RITUAL, m_creature); + } + else + if (eventProgress == 2) + { + eventProgress++; + eventTimer = 15000; + if (Creature* naralex = pInstance->instance->GetCreature(pInstance->GetData64(DATA_NARALEX))) + DoScriptText(EMOTE_TROUBLED_SLEEP, naralex); + m_creature->SummonCreature(NPC_DEVIATE_MOCCASIN, 135.943, 199.701, -103.529, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 15000); + m_creature->SummonCreature(NPC_DEVIATE_MOCCASIN, 151.08, 221.13, -103.609, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 15000); + m_creature->SummonCreature(NPC_DEVIATE_MOCCASIN, 128.007, 227.428, -97.421, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 15000); + } + else + if (eventProgress == 3) + { + eventProgress++; + eventTimer = 30000; + if (Creature* naralex = pInstance->instance->GetCreature(pInstance->GetData64(DATA_NARALEX))) + DoScriptText(EMOTE_WRITHE_IN_AGONY, naralex); + m_creature->SummonCreature(NPC_NIGHTMARE_ECTOPLASM, 133.413, 207.188, -102.469, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 15000); + m_creature->SummonCreature(NPC_NIGHTMARE_ECTOPLASM, 142.857, 218.645, -102.905, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 15000); + m_creature->SummonCreature(NPC_NIGHTMARE_ECTOPLASM, 105.102, 227.211, -102.752, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 15000); + m_creature->SummonCreature(NPC_NIGHTMARE_ECTOPLASM, 153.372, 235.149, -102.826, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 15000); + m_creature->SummonCreature(NPC_NIGHTMARE_ECTOPLASM, 149.524, 251.113, -102.558, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 15000); + m_creature->SummonCreature(NPC_NIGHTMARE_ECTOPLASM, 136.208, 266.466, -102.977, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 15000); + m_creature->SummonCreature(NPC_NIGHTMARE_ECTOPLASM, 126.167, 274.759, -102.962, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 15000); + } + else + if (eventProgress == 4) + { + eventProgress++; + if (Creature* naralex = pInstance->instance->GetCreature(pInstance->GetData64(DATA_NARALEX))) + { + DoScriptText(EMOTE_HORRENDOUS_VISION, naralex); + m_creature->CastSpell(naralex, SPELL_NARALEXS_AWAKENING, false); + } + m_creature->SummonCreature(NPC_MUTANUS_THE_DEVOURER, 150.872, 262.905, -103.503, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 300000); + DoScriptText(SAY_MUTANUS_THE_DEVOURER, m_creature); + pInstance->SetData(TYPE_MUTANUS_THE_DEVOURER, IN_PROGRESS); + } + else + if (eventProgress == 5 && pInstance->GetData(TYPE_MUTANUS_THE_DEVOURER) == DONE) + { + eventProgress++; + eventTimer = 3000; + if (Creature* naralex = pInstance->instance->GetCreature(pInstance->GetData64(DATA_NARALEX))) + { + if (naralex->HasAura(SPELL_NATURE_CHANNELING)) + naralex->RemoveAura(SPELL_NATURE_CHANNELING); + if (m_creature->HasAura(SPELL_NARALEXS_AWAKENING)) + m_creature->RemoveAura(SPELL_NARALEXS_AWAKENING); + naralex->SetStandState(UNIT_STAND_STATE_STAND); + DoScriptText(SAY_I_AM_AWAKE, naralex); + } + DoScriptText(SAY_NARALEX_AWAKES, m_creature); + } + else + if (eventProgress == 6) + { + eventProgress++; + eventTimer = 6000; + if (Creature* naralex = pInstance->instance->GetCreature(pInstance->GetData64(DATA_NARALEX))) + DoScriptText(SAY_THANK_YOU, naralex); + } + else + if (eventProgress == 7) + { + eventProgress++; + eventTimer = 8000; + if (Creature* naralex = pInstance->instance->GetCreature(pInstance->GetData64(DATA_NARALEX))) + { + DoScriptText(SAY_FAREWELL, naralex); + naralex->AddAura(SPELL_FLIGHT_FROM,naralex); + } + m_creature->AddAura(SPELL_FLIGHT_FROM,m_creature); + m_creature->SetStandState(UNIT_STAND_STATE_STAND); + } + else + if (eventProgress == 8) + { + pInstance->SetData(TYPE_NARALEX_PART3, DONE); + if (Creature* naralex = pInstance->instance->GetCreature(pInstance->GetData64(DATA_NARALEX))) + naralex->SetVisibility(VISIBILITY_OFF); + m_creature->SetVisibility(VISIBILITY_OFF); + } + break; + } + } + }else eventTimer -= diff; + } +}; + +CreatureAI* GetAI_npc_disciple_of_naralex(Creature *_Creature) +{ + npc_disciple_of_naralexAI *disciple_of_naralexAI = new npc_disciple_of_naralexAI(_Creature); + + disciple_of_naralexAI->FillPointMovementListForCreature(); + + return disciple_of_naralexAI; +} + +bool GossipHello_npc_disciple_of_naralex(Player *player, Creature *_Creature) +{ + ScriptedInstance *pInstance = (_Creature->GetInstanceData()); + + if (pInstance) + { + _Creature->CastSpell(player, SPELL_MARK_OF_THE_WILD_RANK_2, true); + if ((pInstance->GetData(TYPE_LORD_COBRAHN) == DONE) && (pInstance->GetData(TYPE_LORD_PYTHAS) == DONE) && + (pInstance->GetData(TYPE_LADY_ANACONDRA) == DONE) && (pInstance->GetData(TYPE_LORD_SERPENTIS) == DONE)) + { + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_NARALEX, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + player->SEND_GOSSIP_MENU(GOSSIP_ID_START_2, _Creature->GetGUID()); + + DoScriptText(SAY_AT_LAST, _Creature); + } + else + { + player->SEND_GOSSIP_MENU(GOSSIP_ID_START_1, _Creature->GetGUID()); + } + } + return true; +} + +bool GossipSelect_npc_disciple_of_naralex(Player *player, Creature *_Creature, uint32 sender, uint32 action) +{ + ScriptedInstance *pInstance = (_Creature->GetInstanceData()); + if (action == GOSSIP_ACTION_INFO_DEF + 1) + { + player->CLOSE_GOSSIP_MENU(); + if (pInstance)pInstance->SetData(TYPE_NARALEX_EVENT, IN_PROGRESS); + + DoScriptText(SAY_MAKE_PREPARATIONS, _Creature); + + CAST_AI(npc_escortAI, (_Creature->AI()))->Start(false, true, false, player->GetGUID()); + CAST_AI(npc_escortAI, (_Creature->AI()))->SetDespawnAtFar(false); + CAST_AI(npc_escortAI, (_Creature->AI()))->SetDespawnAtEnd(false); + } + return true; +} + +void AddSC_wailing_caverns() +{ + Script *newscript; + + newscript = new Script; + newscript->Name = "npc_disciple_of_naralex"; + newscript->pGossipHello = &GossipHello_npc_disciple_of_naralex; + newscript->pGossipSelect = &GossipSelect_npc_disciple_of_naralex; + newscript->GetAI = &GetAI_npc_disciple_of_naralex; + newscript->RegisterSelf(); +}
\ No newline at end of file |