Pelf

boss_lady_deathwhisper_1

Jul 5th, 2011
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 16.21 KB | None | 0 0
  1. diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
  2. index b050f42..3844b1e 100755
  3. --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
  4. +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
  5. @@ -15,6 +15,7 @@
  6.   * with this program. If not, see <http://www.gnu.org/licenses/>.
  7.   */
  8.  
  9. +#include "spell.h"
  10.  #include "ObjectMgr.h"
  11.  #include "ScriptMgr.h"
  12.  #include "ScriptedCreature.h"
  13. @@ -116,6 +117,7 @@ enum EventTypes
  14.      EVENT_BERSERK                       = 7,
  15.      EVENT_DEATH_AND_DECAY               = 8,
  16.      EVENT_DOMINATE_MIND_H               = 9,
  17. +   EVENT_DOMINATE_MIND_ACTION          = 91,   // Для скиллов игроков, которые под контролем
  18.  
  19.      // Phase 1 only
  20.      EVENT_P1_SUMMON_WAVE                = 10,
  21. @@ -224,6 +226,9 @@ class boss_lady_deathwhisper : public CreatureScript
  22.              void Reset()
  23.              {
  24.                  _Reset();
  25. +               _charmTargets[0] = NULL;
  26. +               _charmTargets[1] = NULL;
  27. +               _charmTargets[2] = NULL;
  28.                  me->SetPower(POWER_MANA, me->GetMaxPower(POWER_MANA));
  29.                  events.SetPhase(PHASE_ONE);
  30.                  _waveCounter = 0;
  31. @@ -283,7 +288,9 @@ class boss_lady_deathwhisper : public CreatureScript
  32.                  events.ScheduleEvent(EVENT_P1_SHADOW_BOLT, urand(5500, 6000), 0, PHASE_ONE);
  33.                  events.ScheduleEvent(EVENT_P1_EMPOWER_CULTIST, urand(20000, 30000), 0, PHASE_ONE);
  34.                  if (GetDifficulty() != RAID_DIFFICULTY_10MAN_NORMAL)
  35. +               {
  36.                      events.ScheduleEvent(EVENT_DOMINATE_MIND_H, 27000);
  37. +               }
  38.  
  39.                  Talk(SAY_AGGRO);
  40.                  DoStartNoMovement(who);
  41. @@ -443,9 +450,167 @@ class boss_lady_deathwhisper : public CreatureScript
  42.                              Talk(SAY_DOMINATE_MIND);
  43.                              for (uint8 i = 0; i < _dominateMindCount; i++)
  44.                                  if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, -SPELL_DOMINATE_MIND_H))
  45. +                               {
  46.                                      DoCast(target, SPELL_DOMINATE_MIND_H);
  47. +                                   _charmTargets[i] = target;
  48. +                               }
  49.                              events.ScheduleEvent(EVENT_DOMINATE_MIND_H, urand(40000, 45000));
  50. -                            break;
  51. +                            events.ScheduleEvent(EVENT_DOMINATE_MIND_ACTION, 2000);
  52. +                           break;
  53. +                       case EVENT_DOMINATE_MIND_ACTION:
  54. +                           if (!_charmTargets[0]) break;
  55. +                           if (_charmTargets[0]->HasAura(SPELL_DOMINATE_MIND_H))
  56. +                           {
  57. +                               for (uint8 j = 0; j < _dominateMindCount; j++)
  58. +                               {
  59. +                                   if (_charmTargets[j]->HasUnitState(UNIT_STAT_CASTING)) continue;
  60. +                                   Unit* pVictim = SelectTarget(SELECT_TARGET_RANDOM, 0, 30.0f, true, -SPELL_DOMINATE_MIND_H);
  61. +                                   switch (_charmTargets[j]->getClass())
  62. +                                   {
  63. +                                       case CLASS_PRIEST:
  64. +                                           // Проверка шп спека по таланту "слияние с тьмой"
  65. +                                           // Шп прист бьет пыткой и взрывом разума
  66. +                                           if (_charmTargets[j]->ToPlayer()->HasTalent(47585, _charmTargets[j]->ToPlayer()->GetActiveSpec()))
  67. +                                           {
  68. +                                               if (!_charmTargets[j]->ToPlayer()->HasSpellCooldown(48127))
  69. +                                                   _charmTargets[j]->CastSpell(pVictim, 48127, false);
  70. +                                               else
  71. +                                                   _charmTargets[j]->CastSpell(pVictim, 48156, false);
  72. +                                               break;
  73. +                                           }
  74. +                                           // Дц и холи присты хилят мобов и босса быстрым исцелением
  75. +                                           Creature* cTarget;
  76. +                                           GetRandomSummonOrBoss(cTarget);
  77. +                                           _charmTargets[j]->CastSpell(cTarget, 48071, false);
  78. +                                           break;
  79. +                                       case CLASS_DRUID:
  80. +                                           // Проверка ферал друида по таланту "берсерк"
  81. +                                           if (_charmTargets[j]->ToPlayer()->HasTalent(50334, _charmTargets[j]->ToPlayer()->GetActiveSpec()))
  82. +                                           {
  83. +                                               // Если в форме лютого медведя, то бьет свою цель увечьем(медведь)
  84. +                                               if  (_charmTargets[j]->HasAura(9634))
  85. +                                                   if (!_charmTargets[j]->ToPlayer()->HasSpellCooldown(48564))
  86. +                                                       _charmTargets[j]->CastSpell(_charmTargets[j]->getVictim(), 48564, false);
  87. +                                               break;
  88. +                                               // Если в форме кошки, то бьет свою цель увечьем(кошка)
  89. +                                               if  (_charmTargets[j]->HasAura(768))
  90. +                                                   if (!_charmTargets[j]->ToPlayer()->HasSpellCooldown(48566))
  91. +                                                       _charmTargets[j]->CastSpell(_charmTargets[j]->getVictim(), 48566, false);
  92. +                                               break;
  93. +                                           }
  94. +                                           // Проверка рестор друида по форме дерева
  95. +                                           // Рестор друид хилит мобов и босса покровительством природы
  96. +                                           if  (_charmTargets[j]->HasAura(33891))
  97. +                                           {
  98. +                                               Creature* cTarget;
  99. +                                               GetRandomSummonOrBoss(cTarget);
  100. +                                               _charmTargets[j]->CastSpell(cTarget, 50464, false);
  101. +                                               break;
  102. +                                           }
  103. +                                           // Проверка совы по форме совы
  104. +                                           // Сова бьет рандомную цель гневом
  105. +                                           if (_charmTargets[j]->HasAura(24858))
  106. +                                           {
  107. +                                               _charmTargets[j]->CastSpell(pVictim, 48461, false);
  108. +                                               break;
  109. +                                           }
  110. +                                           // Если каким-то образом будет неферал в форме медведя или кота
  111. +                                           // То форма убирается, друид бьет рандомную цель гневом
  112. +                                           _charmTargets[j]->RemoveAurasDueToSpell(5487); // Снимаем облик медведя
  113. +                                           _charmTargets[j]->RemoveAurasDueToSpell(9634); // облик лютого медведя
  114. +                                           _charmTargets[j]->RemoveAurasDueToSpell(768);  // Облик кошки
  115. +                                           _charmTargets[j]->CastSpell(pVictim, 48461, false);
  116. +                                           break;
  117. +                                       case CLASS_HUNTER:
  118. +                                           // Хант бьет свою цель укусом змеи и автоматической стрельбой
  119. +                                           if (!_charmTargets[j]->getVictim()->HasAura(49001))
  120. +                                               _charmTargets[j]->CastSpell(_charmTargets[j]->getVictim(), 49001, false);
  121. +                                           _charmTargets[j]->CastSpell(_charmTargets[j]->getVictim(), 75, false);
  122. +                                           break;
  123. +                                       case CLASS_PALADIN:
  124. +                                           // Проверка холи паладина по таланту "частица света"
  125. +                                           // Холи паладин хилит мобов и босса вспышкой света
  126. +                                           if (_charmTargets[j]->ToPlayer()->HasTalent(53563, _charmTargets[j]->ToPlayer()->GetActiveSpec()))
  127. +                                           {
  128. +                                               Creature* cTarget;
  129. +                                               GetRandomSummonOrBoss(cTarget);
  130. +                                               _charmTargets[j]->CastSpell(cTarget, 48785, false);
  131. +                                               break;
  132. +                                           }
  133. +                                           // Прото и ретро паладины бьют свою цель правосудием света и автоатакой
  134. +                                           if (!_charmTargets[j]->ToPlayer()->HasSpellCooldown(20271))
  135. +                                               _charmTargets[j]->CastSpell(_charmTargets[j]->getVictim(), 20271, false);
  136. +                                           break;
  137. +                                       case CLASS_WARRIOR:
  138. +                                           // Проверка армс вара по таланту "вихрь клинков"
  139. +                                           // Армс вар бьет свою цель смертельным ударом и автоатакой
  140. +                                           if (_charmTargets[j]->ToPlayer()->HasTalent(46924, _charmTargets[j]->ToPlayer()->GetActiveSpec()))
  141. +                                           {
  142. +                                               if (!_charmTargets[j]->ToPlayer()->HasSpellCooldown(20271))
  143. +                                                   _charmTargets[j]->CastSpell(_charmTargets[j]->getVictim(), 47486, false);
  144. +                                               break;
  145. +                                           }
  146. +                                           // Проверка фури вара по таланту "хватка титана"
  147. +                                           // Фури вар бьет свою цель вихрем и автоатакой
  148. +                                           if (_charmTargets[j]->ToPlayer()->HasTalent(46968, _charmTargets[j]->ToPlayer()->GetActiveSpec()))
  149. +                                           {
  150. +                                               if (!_charmTargets[j]->ToPlayer()->HasSpellCooldown(1680))
  151. +                                                   _charmTargets[j]->CastSpell(_charmTargets[j]->getVictim(), 1680, false);
  152. +                                               break;
  153. +                                           }
  154. +                                           // Проверка прото вара по таланту "ударная волна"
  155. +                                           // Прото вар бьет свою цель ударной волной и автоатакой
  156. +                                           if (_charmTargets[j]->ToPlayer()->HasTalent(46917, _charmTargets[j]->ToPlayer()->GetActiveSpec()))
  157. +                                           {
  158. +                                               if (!_charmTargets[j]->ToPlayer()->HasSpellCooldown(46968))
  159. +                                                   _charmTargets[j]->CastSpell(_charmTargets[j]->getVictim(), 46968, false);
  160. +                                               break;
  161. +                                           }
  162. +                                       case CLASS_WARLOCK:
  163. +                                           // Лок бьет рандомную цель теневой стрелой
  164. +                                           _charmTargets[j]->CastSpell(pVictim, 47809, false);
  165. +                                           break;
  166. +                                       case CLASS_MAGE:
  167. +                                           // Маг бьет рандомную цель ледяной стрелой
  168. +                                           _charmTargets[j]->CastSpell(pVictim, 42842, false);
  169. +                                           break;
  170. +                                       case CLASS_ROGUE:
  171. +                                           // Рога бьет свою цель веером клинков
  172. +                                           _charmTargets[j]->CastSpell(_charmTargets[j]->getVictim(), 51723, false);
  173. +                                           break;
  174. +                                       case CLASS_DEATH_KNIGHT:
  175. +                                           // ДК бьет свою цель ликом смерти
  176. +                                           _charmTargets[j]->CastSpell(_charmTargets[j]->getVictim(), 49895, false);
  177. +                                           break;
  178. +                                       case CLASS_SHAMAN:
  179. +                                           // Проверка элем шамана по таланту "гром и молния"
  180. +                                           // Элем шаман бьет рандомную цель молнией
  181. +                                           if (_charmTargets[j]->ToPlayer()->HasTalent(51498, _charmTargets[j]->ToPlayer()->GetActiveSpec()))
  182. +                                           {
  183. +                                               _charmTargets[j]->CastSpell(pVictim, 49279, false);
  184. +                                               break;
  185. +                                           }
  186. +                                           // Проверка энх шамана по таланту "дух дикого волка"
  187. +                                           // Энх шаман бьет свою цель ударом бури и автоатакой
  188. +                                           if (_charmTargets[j]->ToPlayer()->HasTalent(51533, _charmTargets[j]->ToPlayer()->GetActiveSpec()))
  189. +                                           {
  190. +                                               _charmTargets[j]->CastSpell(_charmTargets[j]->getVictim(), 17364, false);
  191. +                                               break;
  192. +                                           }
  193. +                                           // Проверка рестор шамана по таланту "быстрина"
  194. +                                           // Рестор шаман хилит мобов и босса цепным исцелением
  195. +                                           if (_charmTargets[j]->ToPlayer()->HasTalent(61295, _charmTargets[j]->ToPlayer()->GetActiveSpec()))
  196. +                                           {
  197. +                                               Creature* cTarget;
  198. +                                               GetRandomSummonOrBoss(cTarget);
  199. +                                               _charmTargets[j]->CastSpell(cTarget, 55459, false);
  200. +                                               break;
  201. +                                           }
  202. +                                   }
  203. +                               }
  204. +                               events.ScheduleEvent(EVENT_DOMINATE_MIND_ACTION, urand(100, 1500));
  205. +                           }
  206. +                           break;
  207.                          case EVENT_P1_SUMMON_WAVE:
  208.                              SummonWaveP1();
  209.                              events.ScheduleEvent(EVENT_P1_SUMMON_WAVE, 60000, 0, PHASE_ONE);
  210. @@ -572,8 +737,23 @@ class boss_lady_deathwhisper : public CreatureScript
  211.                  DoCast(cultist, SPELL_DARK_MARTYRDOM_T);
  212.              }
  213.  
  214. +           void SpellHit(Unit* caster, SpellEntry const* spell)
  215. +           {
  216. +               if (me->GetCurrentSpell(CURRENT_GENERIC_SPELL))
  217. +                   if ((me->GetCurrentSpell(CURRENT_GENERIC_SPELL)->m_spellInfo->Id == 71420) || // Ледяная стрела 10н
  218. +                       (me->GetCurrentSpell(CURRENT_GENERIC_SPELL)->m_spellInfo->Id == 72007) || // 25н
  219. +                       (me->GetCurrentSpell(CURRENT_GENERIC_SPELL)->m_spellInfo->Id == 72501) || // 10г
  220. +                       (me->GetCurrentSpell(CURRENT_GENERIC_SPELL)->m_spellInfo->Id == 72502))   // 25г
  221. +                       Talk(SAY_DEATH);
  222. +                       for (uint8 i = 0; i < 3; ++i)
  223. +                           if (spell->Effect[i] == SPELL_EFFECT_INTERRUPT_CAST)
  224. +                               me->InterruptSpell(CURRENT_GENERIC_SPELL, false);
  225. +
  226. +           }
  227. +
  228.              void SpellHitTarget(Unit* target, SpellEntry const* spell)
  229.              {
  230. +
  231.                  if (spell->Id == SPELL_DARK_MARTYRDOM_T)
  232.                  {
  233.                      Position pos;
  234. @@ -612,7 +792,34 @@ class boss_lady_deathwhisper : public CreatureScript
  235.                  Talk(uint8(cultist->GetEntry() == NPC_CULT_FANATIC ? SAY_DARK_TRANSFORMATION : SAY_DARK_EMPOWERMENT));
  236.              }
  237.  
  238. +           void GetRandomSummonOrBoss(Creature* &retSummon)
  239. +            {
  240. +                if (summons.empty())
  241. +               {
  242. +                   retSummon = me;
  243. +                    return;
  244. +               }
  245. +
  246. +                std::list<Creature*> temp;
  247. +                for (SummonList::iterator itr = summons.begin(); itr != summons.end(); ++itr)
  248. +                    if (Creature* cre = ObjectAccessor::GetCreature(*me, *itr))
  249. +                        if (cre->isAlive())
  250. +                            temp.push_back(cre);
  251. +
  252. +                if (temp.empty())
  253. +               {
  254. +                   retSummon = me;
  255. +                   return;
  256. +               }
  257. +
  258. +                std::list<Creature*>::iterator cultistItr = temp.begin();
  259. +                std::advance(cultistItr, urand(0, temp.size()-1));
  260. +
  261. +                retSummon = *cultistItr;
  262. +            }
  263. +
  264.          private:
  265. +           Unit* _charmTargets[3];
  266.              uint64 _nextVengefulShadeTargetGUID;
  267.              uint64 _darnavanGUID;
  268.              std::deque<uint64> _reanimationQueue;
  269. @@ -687,7 +894,8 @@ class npc_cult_fanatic : public CreatureScript
  270.                              Events.ScheduleEvent(EVENT_FANATIC_VAMPIRIC_MIGHT, urand(20000, 27000));
  271.                              break;
  272.                          case EVENT_CULTIST_DARK_MARTYRDOM:
  273. -                            DoCast(me, SPELL_DARK_MARTYRDOM_FANATIC);
  274. +                            if (me->GetEntry() == NPC_CULT_FANATIC)
  275. +                               DoCast(me, SPELL_DARK_MARTYRDOM_FANATIC);
  276.                              Events.ScheduleEvent(EVENT_CULTIST_DARK_MARTYRDOM, urand(16000, 21000));
  277.                              break;
  278.                      }
  279. @@ -718,7 +926,7 @@ class npc_cult_adherent : public CreatureScript
  280.              void Reset()
  281.              {
  282.                  Events.Reset();
  283. -                Events.ScheduleEvent(EVENT_ADHERENT_FROST_FEVER, urand(10000, 12000));
  284. +                //Events.ScheduleEvent(EVENT_ADHERENT_FROST_FEVER, urand(10000, 12000));
  285.                  Events.ScheduleEvent(EVENT_ADHERENT_DEATHCHILL, urand(14000, 16000));
  286.                  Events.ScheduleEvent(EVENT_ADHERENT_CURSE_OF_TORPOR, urand(14000, 16000));
  287.                  Events.ScheduleEvent(EVENT_ADHERENT_SHORUD_OF_THE_OCCULT, urand(32000, 39000));
  288. @@ -753,8 +961,8 @@ class npc_cult_adherent : public CreatureScript
  289.                      switch (eventId)
  290.                      {
  291.                          case EVENT_ADHERENT_FROST_FEVER:
  292. -                            DoCastVictim(SPELL_FROST_FEVER);
  293. -                            Events.ScheduleEvent(EVENT_ADHERENT_FROST_FEVER, urand(9000, 13000));
  294. +                            //DoCastVictim(SPELL_FROST_FEVER);
  295. +                            //Events.ScheduleEvent(EVENT_ADHERENT_FROST_FEVER, urand(9000, 13000));
  296.                              break;
  297.                          case EVENT_ADHERENT_DEATHCHILL:
  298.                              if (me->GetEntry() == NPC_EMPOWERED_ADHERENT)
  299. @@ -773,7 +981,8 @@ class npc_cult_adherent : public CreatureScript
  300.                              Events.ScheduleEvent(EVENT_ADHERENT_SHORUD_OF_THE_OCCULT, urand(27000, 32000));
  301.                              break;
  302.                          case EVENT_CULTIST_DARK_MARTYRDOM:
  303. -                            DoCast(me, SPELL_DARK_MARTYRDOM_ADHERENT);
  304. +                           if (me->GetEntry() == NPC_CULT_ADHERENT)
  305. +                               DoCast(me, SPELL_DARK_MARTYRDOM_ADHERENT);
  306.                              Events.ScheduleEvent(EVENT_CULTIST_DARK_MARTYRDOM, urand(16000, 21000));
  307.                              break;
  308.                      }
Advertisement
Add Comment
Please, Sign In to add comment