Guest User

Untitled

a guest
Dec 18th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.90 KB | None | 0 0
  1. UPDATE `creature_template` SET `ScriptName` = 'npc_vladof_the_butcher' WHERE `entry` = '30022';
  2.  
  3. ------------------- src/server/scripts/Northrend/zuldrak.cpp -------------------
  4. index 6af96f3..013670a 100644
  5. @@ -249,6 +249,7 @@ enum eGurgthock
  6.      QUEST_AMPHITHEATER_ANGUISH_YGGDRAS_1          = 12932,
  7.      QUEST_AMPHITHEATER_ANGUISH_MAGNATAUR          = 12933,
  8.      QUEST_AMPHITHEATER_ANGUISH_FROM_BEYOND        = 12934,
  9. +    QUEST_THE_CHAMPION_OF_ANGUISH                 = 12948,
  10.  
  11.      NPC_ORINOKO_TUSKBREAKER                       = 30020,
  12.      NPC_KORRAK_BLOODRAGER                         = 30023,
  13. @@ -262,6 +263,8 @@ enum eGurgthock
  14.      NPC_FIEND_AIR                                 = 30045,
  15.      NPC_FIEND_FIRE                                = 30042,
  16.      NPC_FIEND_EARTH                               = 30043,
  17. +    NPC_VLADOF_THE_BUTCHER                        = 30022,
  18. +
  19.  
  20.      SAY_QUEST_ACCEPT_TUSKARRMAGEDON               = -1571031,
  21.      SAY_QUEST_ACCEPT_KORRAK_1                     = -1571033,
  22. @@ -400,7 +403,11 @@ public:
  23.                              uiTimer = 2000;
  24.                              uiPhase = 12;
  25.                              break;
  26. -                   }
  27. +                        case QUEST_THE_CHAMPION_OF_ANGUISH:
  28. +                            uiTimer = 2000;
  29. +                            uiPhase = 15;
  30. +                            break;
  31. +                    }
  32.                          break;
  33.                  }
  34.          }
  35. @@ -522,6 +529,12 @@ public:
  36.                                  creature->AI()->SetData(1, uiBossRandom);
  37.                              uiPhase = 0;
  38.                              break;
  39. +                        case 15:
  40. +                            std::string sText = ("Prepare to make you stand, " + std::string(player->GetName()));
  41. +                            me->MonsterSay(sText.c_str(), LANG_UNIVERSAL, 0);
  42. +                            me->SummonCreature(NPC_VLADOF_THE_BUTCHER, SpawnPosition[1], TEMPSUMMON_CORPSE_DESPAWN, 1000);
  43. +                            uiPhase = 0;
  44. +                            break;
  45.                      }
  46.                  }else uiTimer -= uiDiff;
  47.              }
  48. @@ -548,6 +561,9 @@ public:
  49.              case QUEST_AMPHITHEATER_ANGUISH_FROM_BEYOND:
  50.                  creature->AI()->SetData(1, quest->GetQuestId());
  51.                  break;
  52. +            case QUEST_THE_CHAMPION_OF_ANGUISH:
  53. +                creature->AI()->SetData(1, quest->GetQuestId());
  54. +                break;
  55.          }
  56.  
  57.          creature->AI()->SetGUID(player->GetGUID());
  58. @@ -561,6 +577,124 @@ public:
  59.      }
  60.  };
  61.  
  62. +enum vladof_spells{
  63. +
  64. +    EVENT_BLOOD_BOIL,
  65. +    EVENT_BLOOD_PLAGUE,
  66. +    EVENT_BLOOD_PRESENCE,
  67. +    EVENT_FROST_FEVER,
  68. +    EVENT_HYSRERIA,
  69. +    EVENT_SLOW,
  70. +    EVENT_DEFLECTION,
  71. +    EVENT_WHIRLWIND,
  72. +
  73. +    //NPC_VLADOF_THE_BUTCHER spells
  74. +
  75. +    SPELL_BLOOD_BOIL                              = 55974,
  76. +    SPELL_BLOOD_PLAGUE                            = 55973,
  77. +    SPELL_BLOOD_PRESENCE                          = 50689,
  78. +    SPELL_FROST_FEVER                             = 55095,
  79. +    SPELL_HYSRERIA                                = 55975,
  80. +    SPELL_SLOW                                    = 31589,
  81. +    SPELL_DEFLECTION                              = 55976,
  82. +    SPELL_WHIRLWIND                               = 55977,
  83. +};
  84. +
  85. +class npc_vladof_the_butcher : public CreatureScript
  86. +{
  87. +public:
  88. +    npc_vladof_the_butcher() : CreatureScript("npc_vladof_the_butcher") { }
  89. +
  90. +    CreatureAI* GetAI(Creature* creature) const
  91. +    {
  92. +        return new npc_vladof_the_butcherAI(creature);
  93. +    }
  94. +
  95. +    struct npc_vladof_the_butcherAI  : public ScriptedAI
  96. +    {
  97. +        npc_vladof_the_butcherAI(Creature* creature) : ScriptedAI(creature)
  98. +        {
  99. +        }
  100. +
  101. +        EventMap events;
  102. +
  103. +        void Reset()
  104. +        {
  105. +            events.Reset();
  106. +            me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
  107. +            me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
  108. +            me->SetReactState(REACT_AGGRESSIVE);
  109. +        }
  110. +
  111. +        void EnterCombat(Unit* /*who*/)
  112. +        {
  113. +            events.ScheduleEvent(EVENT_BLOOD_BOIL, 2000); // TODO: adjust timers
  114. +            events.ScheduleEvent(EVENT_BLOOD_PLAGUE, 7000);
  115. +            events.ScheduleEvent(EVENT_BLOOD_PRESENCE, 1000);
  116. +            events.ScheduleEvent(EVENT_HYSRERIA, 21000);
  117. +            events.ScheduleEvent(SPELL_SLOW, 6000);
  118. +            events.ScheduleEvent(EVENT_FROST_FEVER, 6000);
  119. +            events.ScheduleEvent(EVENT_DEFLECTION, 15000);
  120. +            events.ScheduleEvent(EVENT_WHIRLWIND, 15000);
  121. +        }
  122. +
  123. +        void UpdateAI(const uint32 diff)
  124. +        {
  125. +            if (!UpdateVictim())
  126. +                return;
  127. +
  128. +            events.Update(diff);
  129. +
  130. +            if (me->HasUnitState(UNIT_STATE_CASTING))
  131. +                return;
  132. +
  133. +            while (uint32 eventId = events.ExecuteEvent())
  134. +            {
  135. +                switch (eventId)
  136. +                {
  137. +                    case EVENT_BLOOD_BOIL:
  138. +                            DoCastVictim(SPELL_BLOOD_BOIL);
  139. +                        events.ScheduleEvent(EVENT_BLOOD_BOIL, 8000);
  140. +                        return;
  141. +                    case EVENT_BLOOD_PLAGUE:
  142. +                            DoCastVictim(SPELL_BLOOD_PLAGUE);
  143. +                        events.ScheduleEvent(EVENT_BLOOD_PLAGUE, 8000);
  144. +                        return;
  145. +                    case EVENT_BLOOD_PRESENCE:
  146. +                            DoCast(SPELL_BLOOD_PRESENCE);
  147. +                        return;
  148. +                    case EVENT_FROST_FEVER:
  149. +                            DoCastVictim(SPELL_FROST_FEVER);
  150. +                        events.ScheduleEvent(EVENT_FROST_FEVER, 15000);
  151. +                        return;
  152. +                    case EVENT_WHIRLWIND:
  153. +                            DoCast(SPELL_WHIRLWIND);
  154. +                        return;
  155. +                    case EVENT_DEFLECTION:
  156. +                            DoCastVictim(SPELL_DEFLECTION);
  157. +                        return;
  158. +                    case EVENT_SLOW:
  159. +                            DoCastVictim(SPELL_SLOW);
  160. +                        events.ScheduleEvent(EVENT_SLOW, 9000);
  161. +                        return;
  162. +                    case EVENT_HYSRERIA:
  163. +                            DoCast(SPELL_HYSRERIA);
  164. +                        return;
  165. +                }
  166. +            }
  167. +
  168. +            DoMeleeAttackIfReady();
  169. +        }
  170. +        
  171. +        void JustDied(Unit* killer)
  172. +        {
  173. +
  174. +            if (Player* player = killer->GetCharmerOrOwnerPlayerOrPlayerItself()){
  175. +                player->GroupEventHappens(QUEST_THE_CHAMPION_OF_ANGUISH, player);
  176. +            }
  177. +        }
  178. +    };
  179. +};
  180.  /*####
  181.  ## npc_orinoko_tuskbreaker
  182.  ####*/
  183. @@ -1430,4 +1564,5 @@ void AddSC_zuldrak()
  184.      new npc_elemental_lord;
  185.      new npc_fiend_elemental;
  186.      new go_scourge_enclosure;
  187. +    new npc_vladof_the_butcher;
  188.  }
Add Comment
Please, Sign In to add comment