rendered paste bodyIndex: scripts/zone/karazhan/boss_shade_of_aran.cpp===================================================================--- scripts/zone/karazhan/boss_shade_of_aran.cpp (revision 293)+++ scripts/zone/karazhan/boss_shade_of_aran.cpp (working copy)@@ -22,6 +22,7 @@ #include "../../sc_defines.h" #include "../../creature/simple_ai.h"+#include "def_karazhan.h" //Aggro #define SAY_AGGRO1 "Please, no more. My son... he's gone mad!"@@ -116,8 +117,14 @@ struct MANGOS_DLL_DECL boss_aranAI : public ScriptedAI {- boss_aranAI(Creature *c) : ScriptedAI(c) {Reset();}+ boss_aranAI(Creature *c) : ScriptedAI(c)+ {+ pInstance = ((ScriptedInstance*)c->GetInstanceData());+ Reset();+ } + ScriptedInstance* pInstance;+ uint32 SecondarySpellTimer; uint32 NormalCastTimer; uint32 SuperCastTimer;@@ -169,6 +176,8 @@ InCombat = false; + if(pInstance)+ pInstance->SetData(DATA_SHADEOFARAN_EVENT, 0); // Not in progress //m_creature->RemoveAllAuras(); //m_creature->DeleteThreatList(); //m_creature->CombatStop();@@ -179,14 +188,14 @@ { switch(rand()%2) {- case 0:- DoYell(SAY_KILL1, LANG_UNIVERSAL, NULL);- DoPlaySoundToSet(victim, SOUND_KILL1);- break;- case 1:- DoYell(SAY_KILL2, LANG_UNIVERSAL, NULL);- DoPlaySoundToSet(victim, SOUND_KILL2);- break;+ case 0:+ DoYell(SAY_KILL1, LANG_UNIVERSAL, NULL);+ DoPlaySoundToSet(victim, SOUND_KILL1);+ break;+ case 1:+ DoYell(SAY_KILL2, LANG_UNIVERSAL, NULL);+ DoPlaySoundToSet(victim, SOUND_KILL2);+ break; } } @@ -194,6 +203,9 @@ { DoYell(SAY_DEATH, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(NULL, SOUND_DEATH);++ if(pInstance)+ pInstance->SetData(DATA_SHADEOFARAN_EVENT, 3); // Completed } void AttackStart(Unit *who)@@ -211,23 +223,22 @@ { switch(rand()%3) {-- case 0:- DoYell(SAY_AGGRO1, LANG_UNIVERSAL, NULL);- DoPlaySoundToSet(m_creature, SOUND_AGGRO1);- break;-- case 1:- DoYell(SAY_AGGRO2, LANG_UNIVERSAL, NULL);- DoPlaySoundToSet(m_creature, SOUND_AGGRO2);- break;-- case 2:- DoYell(SAY_AGGRO3, LANG_UNIVERSAL, NULL);- DoPlaySoundToSet(m_creature, SOUND_AGGRO3);- break;+ case 0:+ DoYell(SAY_AGGRO1, LANG_UNIVERSAL, NULL);+ DoPlaySoundToSet(m_creature, SOUND_AGGRO1);+ break;+ case 1:+ DoYell(SAY_AGGRO2, LANG_UNIVERSAL, NULL);+ DoPlaySoundToSet(m_creature, SOUND_AGGRO2);+ break;+ case 2:+ DoYell(SAY_AGGRO3, LANG_UNIVERSAL, NULL);+ DoPlaySoundToSet(m_creature, SOUND_AGGRO3);+ break; } + if(pInstance)+ pInstance->SetData(DATA_SHADEOFARAN_EVENT, 1); // In Progress InCombat = true; } }@@ -251,23 +262,22 @@ { switch(rand()%3) {-- case 0:- DoYell(SAY_AGGRO1, LANG_UNIVERSAL, NULL);- DoPlaySoundToSet(m_creature, SOUND_AGGRO1);- break;-- case 1:- DoYell(SAY_AGGRO2, LANG_UNIVERSAL, NULL);- DoPlaySoundToSet(m_creature, SOUND_AGGRO2);- break;-- case 2:- DoYell(SAY_AGGRO3, LANG_UNIVERSAL, NULL);- DoPlaySoundToSet(m_creature, SOUND_AGGRO3);- break;+ case 0:+ DoYell(SAY_AGGRO1, LANG_UNIVERSAL, NULL);+ DoPlaySoundToSet(m_creature, SOUND_AGGRO1);+ break;+ case 1:+ DoYell(SAY_AGGRO2, LANG_UNIVERSAL, NULL);+ DoPlaySoundToSet(m_creature, SOUND_AGGRO2);+ break;+ case 2:+ DoYell(SAY_AGGRO3, LANG_UNIVERSAL, NULL);+ DoPlaySoundToSet(m_creature, SOUND_AGGRO3);+ break; } + if(pInstance)+ pInstance->SetData(DATA_SHADEOFARAN_EVENT, 1); // In Progress InCombat = true; } Index: scripts/zone/karazhan/def_karazhan.h===================================================================--- scripts/zone/karazhan/def_karazhan.h (revision 294)+++ scripts/zone/karazhan/def_karazhan.h (working copy)@@ -1,5 +1,17 @@ #ifndef DEF_KARAZHAN_H #define DEF_KARAZHAN_H-#define DATA_OPERA_EVENT 1-#define DATA_BARNES_INTRO 2+#define DATA_ATTUMEN_EVENT 1+#define DATA_MOROES_EVENT 2+#define DATA_MAIDENOFVIRTUE_EVENT 3+#define DATA_OPTIONAL_BOSS_EVENT 4+#define DATA_OPERA_EVENT 5+#define DATA_CURATOR_EVENT 6+#define DATA_SHADEOFARAN_EVENT 7+#define DATA_TERESTIAN_EVENT 8+#define DATA_NETHERSPITE_EVENT 9+#define DATA_CHESS_EVENT 10+#define DATA_MALCHEZZAR_EVENT 11+#define DATA_NETHERBANE_EVENT 12+#define DATA_OPERA_PERFORMANCE 13+#define DATA_BARNES_INTRO 14 #endif\ No newline at end of fileIndex: scripts/zone/karazhan/instance_karazhan.cpp===================================================================--- scripts/zone/karazhan/instance_karazhan.cpp (revision 294)+++ scripts/zone/karazhan/instance_karazhan.cpp (working copy)@@ -24,7 +24,7 @@ #include "def_karazhan.h" #include "../../../../../game/GameObject.h" -#define ENCOUNTERS 12+#define ENCOUNTERS 11 enum EncounterState {@@ -86,8 +86,42 @@ { switch(identifier) {+ case DATA_ATTUMEN_EVENT:+ return Encounters[0];++ case DATA_MOROES_EVENT:+ return Encounters[1];++ case DATA_MAIDENOFVIRTUE_EVENT:+ return Encounters[2];++ case DATA_OPTIONAL_BOSS_EVENT:+ return Encounters[3];+ case DATA_OPERA_EVENT:+ return Encounters[4];+ + case DATA_CURATOR_EVENT:+ return Encounters[5];++ case DATA_SHADEOFARAN_EVENT:+ return Encounters[6];++ case DATA_TERESTIAN_EVENT:+ return Encounters[7];++ case DATA_CHESS_EVENT:+ return Encounters[8];++ case DATA_MALCHEZZAR_EVENT:+ return Encounters[9];++ case DATA_NETHERBANE_EVENT:+ return Encounters[10];++ case DATA_OPERA_PERFORMANCE: return OperaEvent;+ case DATA_BARNES_INTRO: return BarnesIntro; }@@ -98,11 +132,45 @@ void SetData(uint32 identifier, uint32 data) { switch(identifier)- {+ { + case DATA_ATTUMEN_EVENT:+ Encounters[0] = data;++ case DATA_MOROES_EVENT:+ Encounters[1] = data;++ case DATA_MAIDENOFVIRTUE_EVENT:+ Encounters[2] = data;++ case DATA_OPTIONAL_BOSS_EVENT:+ Encounters[3] = data;++ case DATA_OPERA_EVENT:+ Encounters[4] = data;+ + case DATA_CURATOR_EVENT:+ Encounters[5] = data;++ case DATA_SHADEOFARAN_EVENT:+ Encounters[6] = data;++ case DATA_TERESTIAN_EVENT:+ Encounters[7] = data;++ case DATA_CHESS_EVENT:+ Encounters[8] = data;++ case DATA_MALCHEZZAR_EVENT:+ Encounters[9] = data;++ case DATA_NETHERBANE_EVENT:+ Encounters[10] = data;+ case DATA_BARNES_INTRO: BarnesIntro = data; CheckStatus(); break;+ } } Index: scripts/zone/karazhan/npcs_karazhan.cpp===================================================================--- scripts/zone/karazhan/npcs_karazhan.cpp (revision 294)+++ scripts/zone/karazhan/npcs_karazhan.cpp (working copy)@@ -13,6 +13,13 @@ * 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: npcs_karazhan+SD%Complete: 35+SDComment: Barnes: Not fully complete. Berthold: needs testing+EndScriptData */+ #include "../../sc_defines.h" #include "../../../../../game/Player.h" #include "../../../../../game/GossipDef.h"@@ -177,7 +184,7 @@ if(!pInstance) return; - Event = pInstance->GetData(DATA_OPERA_EVENT);+ Event = pInstance->GetData(DATA_OPERA_PERFORMANCE); pInstance->SetData(DATA_BARNES_INTRO, 1); // IN Progress IsTalking = false;@@ -328,6 +335,33 @@ return true; } +/*###+# npc_berthold+####*/++#define SPELL_TELEPORT 39567++#define GOSSIP_ITEM_TELEPORT "Teleport me to the Guardian's Library"++bool GossipHello_npc_berthold(Player* player, Creature* _Creature)+{+ ScriptedInstance* pInstance = ((ScriptedInstance*)_Creature->GetInstanceData());+ if(pInstance && (pInstance->GetData(DATA_SHADEOFARAN_EVENT) >= 3)) // Check if Shade of Aran is dead or not+ {+ player->ADD_GOSSIP_ITEM(0, GOSSIP_ITEM_TELEPORT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);+ player->PlayerTalkClass->SendGossipMenu(_Creature->GetNpcTextId(), _Creature->GetGUID());+ }+ return true;+}++bool GossipSelect_npc_berthold(Player* player, Creature* _Creature, uint32 sender, uint32 action)+{+ if(action == GOSSIP_ACTION_INFO_DEF + 1)+ player->CastSpell(player, SPELL_TELEPORT, true);++ return true;+}+ void AddSC_npcs_karazhan() { Script* newscript;@@ -337,4 +371,10 @@ newscript->pGossipHello = GossipHello_npc_barnes; newscript->pGossipSelect = GossipSelect_npc_barnes; m_scripts[nrscripts++] = newscript;++ newscript = new Script;+ newscript->Name = "npc_berthold";+ newscript->pGossipHello = GossipHello_npc_berthold;+ newscript->pGossipSelect = GossipSelect_npc_berthold;+ m_scripts[nrscripts++] = newscript; }\ No newline at end of file