Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
- index b050f42..3844b1e 100755
- --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
- +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
- @@ -15,6 +15,7 @@
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- +#include "spell.h"
- #include "ObjectMgr.h"
- #include "ScriptMgr.h"
- #include "ScriptedCreature.h"
- @@ -116,6 +117,7 @@ enum EventTypes
- EVENT_BERSERK = 7,
- EVENT_DEATH_AND_DECAY = 8,
- EVENT_DOMINATE_MIND_H = 9,
- + EVENT_DOMINATE_MIND_ACTION = 91, // Для скиллов игроков, которые под контролем
- // Phase 1 only
- EVENT_P1_SUMMON_WAVE = 10,
- @@ -224,6 +226,9 @@ class boss_lady_deathwhisper : public CreatureScript
- void Reset()
- {
- _Reset();
- + _charmTargets[0] = NULL;
- + _charmTargets[1] = NULL;
- + _charmTargets[2] = NULL;
- me->SetPower(POWER_MANA, me->GetMaxPower(POWER_MANA));
- events.SetPhase(PHASE_ONE);
- _waveCounter = 0;
- @@ -283,7 +288,9 @@ class boss_lady_deathwhisper : public CreatureScript
- events.ScheduleEvent(EVENT_P1_SHADOW_BOLT, urand(5500, 6000), 0, PHASE_ONE);
- events.ScheduleEvent(EVENT_P1_EMPOWER_CULTIST, urand(20000, 30000), 0, PHASE_ONE);
- if (GetDifficulty() != RAID_DIFFICULTY_10MAN_NORMAL)
- + {
- events.ScheduleEvent(EVENT_DOMINATE_MIND_H, 27000);
- + }
- Talk(SAY_AGGRO);
- DoStartNoMovement(who);
- @@ -443,9 +450,167 @@ class boss_lady_deathwhisper : public CreatureScript
- Talk(SAY_DOMINATE_MIND);
- for (uint8 i = 0; i < _dominateMindCount; i++)
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, -SPELL_DOMINATE_MIND_H))
- + {
- DoCast(target, SPELL_DOMINATE_MIND_H);
- + _charmTargets[i] = target;
- + }
- events.ScheduleEvent(EVENT_DOMINATE_MIND_H, urand(40000, 45000));
- - break;
- + events.ScheduleEvent(EVENT_DOMINATE_MIND_ACTION, 2000);
- + break;
- + case EVENT_DOMINATE_MIND_ACTION:
- + if (!_charmTargets[0]) break;
- + if (_charmTargets[0]->HasAura(SPELL_DOMINATE_MIND_H))
- + {
- + for (uint8 j = 0; j < _dominateMindCount; j++)
- + {
- + if (_charmTargets[j]->HasUnitState(UNIT_STAT_CASTING)) continue;
- + Unit* pVictim = SelectTarget(SELECT_TARGET_RANDOM, 0, 30.0f, true, -SPELL_DOMINATE_MIND_H);
- + switch (_charmTargets[j]->getClass())
- + {
- + case CLASS_PRIEST:
- + // Проверка шп спека по таланту "слияние с тьмой"
- + // Шп прист бьет пыткой и взрывом разума
- + if (_charmTargets[j]->ToPlayer()->HasTalent(47585, _charmTargets[j]->ToPlayer()->GetActiveSpec()))
- + {
- + if (!_charmTargets[j]->ToPlayer()->HasSpellCooldown(48127))
- + _charmTargets[j]->CastSpell(pVictim, 48127, false);
- + else
- + _charmTargets[j]->CastSpell(pVictim, 48156, false);
- + break;
- + }
- + // Дц и холи присты хилят мобов и босса быстрым исцелением
- + Creature* cTarget;
- + GetRandomSummonOrBoss(cTarget);
- + _charmTargets[j]->CastSpell(cTarget, 48071, false);
- + break;
- + case CLASS_DRUID:
- + // Проверка ферал друида по таланту "берсерк"
- + if (_charmTargets[j]->ToPlayer()->HasTalent(50334, _charmTargets[j]->ToPlayer()->GetActiveSpec()))
- + {
- + // Если в форме лютого медведя, то бьет свою цель увечьем(медведь)
- + if (_charmTargets[j]->HasAura(9634))
- + if (!_charmTargets[j]->ToPlayer()->HasSpellCooldown(48564))
- + _charmTargets[j]->CastSpell(_charmTargets[j]->getVictim(), 48564, false);
- + break;
- + // Если в форме кошки, то бьет свою цель увечьем(кошка)
- + if (_charmTargets[j]->HasAura(768))
- + if (!_charmTargets[j]->ToPlayer()->HasSpellCooldown(48566))
- + _charmTargets[j]->CastSpell(_charmTargets[j]->getVictim(), 48566, false);
- + break;
- + }
- + // Проверка рестор друида по форме дерева
- + // Рестор друид хилит мобов и босса покровительством природы
- + if (_charmTargets[j]->HasAura(33891))
- + {
- + Creature* cTarget;
- + GetRandomSummonOrBoss(cTarget);
- + _charmTargets[j]->CastSpell(cTarget, 50464, false);
- + break;
- + }
- + // Проверка совы по форме совы
- + // Сова бьет рандомную цель гневом
- + if (_charmTargets[j]->HasAura(24858))
- + {
- + _charmTargets[j]->CastSpell(pVictim, 48461, false);
- + break;
- + }
- + // Если каким-то образом будет неферал в форме медведя или кота
- + // То форма убирается, друид бьет рандомную цель гневом
- + _charmTargets[j]->RemoveAurasDueToSpell(5487); // Снимаем облик медведя
- + _charmTargets[j]->RemoveAurasDueToSpell(9634); // облик лютого медведя
- + _charmTargets[j]->RemoveAurasDueToSpell(768); // Облик кошки
- + _charmTargets[j]->CastSpell(pVictim, 48461, false);
- + break;
- + case CLASS_HUNTER:
- + // Хант бьет свою цель укусом змеи и автоматической стрельбой
- + if (!_charmTargets[j]->getVictim()->HasAura(49001))
- + _charmTargets[j]->CastSpell(_charmTargets[j]->getVictim(), 49001, false);
- + _charmTargets[j]->CastSpell(_charmTargets[j]->getVictim(), 75, false);
- + break;
- + case CLASS_PALADIN:
- + // Проверка холи паладина по таланту "частица света"
- + // Холи паладин хилит мобов и босса вспышкой света
- + if (_charmTargets[j]->ToPlayer()->HasTalent(53563, _charmTargets[j]->ToPlayer()->GetActiveSpec()))
- + {
- + Creature* cTarget;
- + GetRandomSummonOrBoss(cTarget);
- + _charmTargets[j]->CastSpell(cTarget, 48785, false);
- + break;
- + }
- + // Прото и ретро паладины бьют свою цель правосудием света и автоатакой
- + if (!_charmTargets[j]->ToPlayer()->HasSpellCooldown(20271))
- + _charmTargets[j]->CastSpell(_charmTargets[j]->getVictim(), 20271, false);
- + break;
- + case CLASS_WARRIOR:
- + // Проверка армс вара по таланту "вихрь клинков"
- + // Армс вар бьет свою цель смертельным ударом и автоатакой
- + if (_charmTargets[j]->ToPlayer()->HasTalent(46924, _charmTargets[j]->ToPlayer()->GetActiveSpec()))
- + {
- + if (!_charmTargets[j]->ToPlayer()->HasSpellCooldown(20271))
- + _charmTargets[j]->CastSpell(_charmTargets[j]->getVictim(), 47486, false);
- + break;
- + }
- + // Проверка фури вара по таланту "хватка титана"
- + // Фури вар бьет свою цель вихрем и автоатакой
- + if (_charmTargets[j]->ToPlayer()->HasTalent(46968, _charmTargets[j]->ToPlayer()->GetActiveSpec()))
- + {
- + if (!_charmTargets[j]->ToPlayer()->HasSpellCooldown(1680))
- + _charmTargets[j]->CastSpell(_charmTargets[j]->getVictim(), 1680, false);
- + break;
- + }
- + // Проверка прото вара по таланту "ударная волна"
- + // Прото вар бьет свою цель ударной волной и автоатакой
- + if (_charmTargets[j]->ToPlayer()->HasTalent(46917, _charmTargets[j]->ToPlayer()->GetActiveSpec()))
- + {
- + if (!_charmTargets[j]->ToPlayer()->HasSpellCooldown(46968))
- + _charmTargets[j]->CastSpell(_charmTargets[j]->getVictim(), 46968, false);
- + break;
- + }
- + case CLASS_WARLOCK:
- + // Лок бьет рандомную цель теневой стрелой
- + _charmTargets[j]->CastSpell(pVictim, 47809, false);
- + break;
- + case CLASS_MAGE:
- + // Маг бьет рандомную цель ледяной стрелой
- + _charmTargets[j]->CastSpell(pVictim, 42842, false);
- + break;
- + case CLASS_ROGUE:
- + // Рога бьет свою цель веером клинков
- + _charmTargets[j]->CastSpell(_charmTargets[j]->getVictim(), 51723, false);
- + break;
- + case CLASS_DEATH_KNIGHT:
- + // ДК бьет свою цель ликом смерти
- + _charmTargets[j]->CastSpell(_charmTargets[j]->getVictim(), 49895, false);
- + break;
- + case CLASS_SHAMAN:
- + // Проверка элем шамана по таланту "гром и молния"
- + // Элем шаман бьет рандомную цель молнией
- + if (_charmTargets[j]->ToPlayer()->HasTalent(51498, _charmTargets[j]->ToPlayer()->GetActiveSpec()))
- + {
- + _charmTargets[j]->CastSpell(pVictim, 49279, false);
- + break;
- + }
- + // Проверка энх шамана по таланту "дух дикого волка"
- + // Энх шаман бьет свою цель ударом бури и автоатакой
- + if (_charmTargets[j]->ToPlayer()->HasTalent(51533, _charmTargets[j]->ToPlayer()->GetActiveSpec()))
- + {
- + _charmTargets[j]->CastSpell(_charmTargets[j]->getVictim(), 17364, false);
- + break;
- + }
- + // Проверка рестор шамана по таланту "быстрина"
- + // Рестор шаман хилит мобов и босса цепным исцелением
- + if (_charmTargets[j]->ToPlayer()->HasTalent(61295, _charmTargets[j]->ToPlayer()->GetActiveSpec()))
- + {
- + Creature* cTarget;
- + GetRandomSummonOrBoss(cTarget);
- + _charmTargets[j]->CastSpell(cTarget, 55459, false);
- + break;
- + }
- + }
- + }
- + events.ScheduleEvent(EVENT_DOMINATE_MIND_ACTION, urand(100, 1500));
- + }
- + break;
- case EVENT_P1_SUMMON_WAVE:
- SummonWaveP1();
- events.ScheduleEvent(EVENT_P1_SUMMON_WAVE, 60000, 0, PHASE_ONE);
- @@ -572,8 +737,23 @@ class boss_lady_deathwhisper : public CreatureScript
- DoCast(cultist, SPELL_DARK_MARTYRDOM_T);
- }
- + void SpellHit(Unit* caster, SpellEntry const* spell)
- + {
- + if (me->GetCurrentSpell(CURRENT_GENERIC_SPELL))
- + if ((me->GetCurrentSpell(CURRENT_GENERIC_SPELL)->m_spellInfo->Id == 71420) || // Ледяная стрела 10н
- + (me->GetCurrentSpell(CURRENT_GENERIC_SPELL)->m_spellInfo->Id == 72007) || // 25н
- + (me->GetCurrentSpell(CURRENT_GENERIC_SPELL)->m_spellInfo->Id == 72501) || // 10г
- + (me->GetCurrentSpell(CURRENT_GENERIC_SPELL)->m_spellInfo->Id == 72502)) // 25г
- + Talk(SAY_DEATH);
- + for (uint8 i = 0; i < 3; ++i)
- + if (spell->Effect[i] == SPELL_EFFECT_INTERRUPT_CAST)
- + me->InterruptSpell(CURRENT_GENERIC_SPELL, false);
- +
- + }
- +
- void SpellHitTarget(Unit* target, SpellEntry const* spell)
- {
- +
- if (spell->Id == SPELL_DARK_MARTYRDOM_T)
- {
- Position pos;
- @@ -612,7 +792,34 @@ class boss_lady_deathwhisper : public CreatureScript
- Talk(uint8(cultist->GetEntry() == NPC_CULT_FANATIC ? SAY_DARK_TRANSFORMATION : SAY_DARK_EMPOWERMENT));
- }
- + void GetRandomSummonOrBoss(Creature* &retSummon)
- + {
- + if (summons.empty())
- + {
- + retSummon = me;
- + return;
- + }
- +
- + std::list<Creature*> temp;
- + for (SummonList::iterator itr = summons.begin(); itr != summons.end(); ++itr)
- + if (Creature* cre = ObjectAccessor::GetCreature(*me, *itr))
- + if (cre->isAlive())
- + temp.push_back(cre);
- +
- + if (temp.empty())
- + {
- + retSummon = me;
- + return;
- + }
- +
- + std::list<Creature*>::iterator cultistItr = temp.begin();
- + std::advance(cultistItr, urand(0, temp.size()-1));
- +
- + retSummon = *cultistItr;
- + }
- +
- private:
- + Unit* _charmTargets[3];
- uint64 _nextVengefulShadeTargetGUID;
- uint64 _darnavanGUID;
- std::deque<uint64> _reanimationQueue;
- @@ -687,7 +894,8 @@ class npc_cult_fanatic : public CreatureScript
- Events.ScheduleEvent(EVENT_FANATIC_VAMPIRIC_MIGHT, urand(20000, 27000));
- break;
- case EVENT_CULTIST_DARK_MARTYRDOM:
- - DoCast(me, SPELL_DARK_MARTYRDOM_FANATIC);
- + if (me->GetEntry() == NPC_CULT_FANATIC)
- + DoCast(me, SPELL_DARK_MARTYRDOM_FANATIC);
- Events.ScheduleEvent(EVENT_CULTIST_DARK_MARTYRDOM, urand(16000, 21000));
- break;
- }
- @@ -718,7 +926,7 @@ class npc_cult_adherent : public CreatureScript
- void Reset()
- {
- Events.Reset();
- - Events.ScheduleEvent(EVENT_ADHERENT_FROST_FEVER, urand(10000, 12000));
- + //Events.ScheduleEvent(EVENT_ADHERENT_FROST_FEVER, urand(10000, 12000));
- Events.ScheduleEvent(EVENT_ADHERENT_DEATHCHILL, urand(14000, 16000));
- Events.ScheduleEvent(EVENT_ADHERENT_CURSE_OF_TORPOR, urand(14000, 16000));
- Events.ScheduleEvent(EVENT_ADHERENT_SHORUD_OF_THE_OCCULT, urand(32000, 39000));
- @@ -753,8 +961,8 @@ class npc_cult_adherent : public CreatureScript
- switch (eventId)
- {
- case EVENT_ADHERENT_FROST_FEVER:
- - DoCastVictim(SPELL_FROST_FEVER);
- - Events.ScheduleEvent(EVENT_ADHERENT_FROST_FEVER, urand(9000, 13000));
- + //DoCastVictim(SPELL_FROST_FEVER);
- + //Events.ScheduleEvent(EVENT_ADHERENT_FROST_FEVER, urand(9000, 13000));
- break;
- case EVENT_ADHERENT_DEATHCHILL:
- if (me->GetEntry() == NPC_EMPOWERED_ADHERENT)
- @@ -773,7 +981,8 @@ class npc_cult_adherent : public CreatureScript
- Events.ScheduleEvent(EVENT_ADHERENT_SHORUD_OF_THE_OCCULT, urand(27000, 32000));
- break;
- case EVENT_CULTIST_DARK_MARTYRDOM:
- - DoCast(me, SPELL_DARK_MARTYRDOM_ADHERENT);
- + if (me->GetEntry() == NPC_CULT_ADHERENT)
- + DoCast(me, SPELL_DARK_MARTYRDOM_ADHERENT);
- Events.ScheduleEvent(EVENT_CULTIST_DARK_MARTYRDOM, urand(16000, 21000));
- break;
- }
Advertisement
Add Comment
Please, Sign In to add comment