Index: 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 file Index: 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