All pastes #948392 Raw Edit

Berthold Patch by Seline

public cpp v1 · immutable
·published 2008-03-19 02:25 UTC
rendered paste body
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 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