Advertisement
Guest User

Untitled

a guest
May 30th, 2016
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.14 KB | None | 0 0
  1. events.ScheduleEvent(EVENT_P1_SUMMON_WAVE, 5000, 0, PHASE_ONE);
  2. events.ScheduleEvent(EVENT_P1_SHADOW_BOLT, urand(5500, 6000), 0, PHASE_ONE);
  3. events.ScheduleEvent(EVENT_P1_EMPOWER_CULTIST, urand(20000, 30000), 0, PHASE_ONE);
  4. + events.ScheduleEvent(EVENT_P1_REANIMATE_CULTIST, urand(10000, 20000), 0, PHASE_ONE);
  5. if (GetDifficulty() != RAID_DIFFICULTY_10MAN_NORMAL)
  6. events.ScheduleEvent(EVENT_DOMINATE_MIND_H, 27000);
  7.  
  8. @@ -402,10 +403,6 @@ class boss_lady_deathwhisper : public CreatureScript
  9. target = SelectTarget(SELECT_TARGET_RANDOM); // Wave adds
  10.  
  11. summon->AI()->AttackStart(target); // CAN be NULL
  12. - if (summon->GetEntry() == NPC_REANIMATED_FANATIC)
  13. - summon->CastSpell(summon, SPELL_FANATIC_S_DETERMINATION, true);
  14. - else if (summon->GetEntry() == NPC_REANIMATED_ADHERENT)
  15. - summon->CastSpell(summon, SPELL_ADHERENT_S_DETERMINATION, true);
  16. }
  17.  
  18. void UpdateAI(uint32 diff) override
  19. @@ -463,10 +460,11 @@ class boss_lady_deathwhisper : public CreatureScript
  20. break;
  21. case EVENT_P1_REANIMATE_CULTIST:
  22. ReanimateCultist();
  23. + events.ScheduleEvent(EVENT_P1_REANIMATE_CULTIST, urand(6000, 25000), 0, PHASE_ONE);
  24. break;
  25. case EVENT_P1_EMPOWER_CULTIST:
  26. EmpowerCultist();
  27. - events.ScheduleEvent(EVENT_P1_EMPOWER_CULTIST, urand(18000, 25000));
  28. + events.ScheduleEvent(EVENT_P1_EMPOWER_CULTIST, urand(18000, 25000), 0, PHASE_ONE);
  29. break;
  30. case EVENT_P2_FROSTBOLT:
  31. DoCastVictim(SPELL_FROSTBOLT);
  32. @@ -554,43 +552,23 @@ class boss_lady_deathwhisper : public CreatureScript
  33. summon->CastSpell(summon, SPELL_TELEPORT_VISUAL);
  34. }
  35.  
  36. - void SetGUID(ObjectGuid guid, int32 id/* = 0*/) override
  37. - {
  38. - if (id != GUID_CULTIST)
  39. - return;
  40. -
  41. - _reanimationQueue.push_back(guid);
  42. - events.ScheduleEvent(EVENT_P1_REANIMATE_CULTIST, 3000, 0, PHASE_ONE);
  43. - }
  44. -
  45. void ReanimateCultist()
  46. {
  47. - if (_reanimationQueue.empty())
  48. - return;
  49. -
  50. - ObjectGuid cultistGUID = _reanimationQueue.front();
  51. - Creature* cultist = ObjectAccessor::GetCreature(*me, cultistGUID);
  52. - _reanimationQueue.pop_front();
  53. - if (!cultist)
  54. + if (summons.empty())
  55. return;
  56.  
  57. - Talk(SAY_ANIMATE_DEAD);
  58. - DoCast(cultist, SPELL_DARK_MARTYRDOM_T);
  59. - }
  60. + std::list<Creature*> temp;
  61. + for (SummonList::iterator itr = summons.begin(); itr != summons.end(); ++itr)
  62. + if (Creature* cre = ObjectAccessor::GetCreature(*me, *itr))
  63. + if (cre->IsAlive() && (cre->GetEntry() == NPC_CULT_FANATIC || cre->GetEntry() == NPC_CULT_ADHERENT))
  64. + temp.push_back(cre);
  65.  
  66. - void SpellHitTarget(Unit* target, SpellInfo const* spell) override
  67. - {
  68. - if (spell->Id == SPELL_DARK_MARTYRDOM_T)
  69. - {
  70. - Position pos = target->GetPosition();
  71. - if (target->GetEntry() == NPC_CULT_FANATIC)
  72. - me->SummonCreature(NPC_REANIMATED_FANATIC, pos, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 10000);
  73. - else
  74. - me->SummonCreature(NPC_REANIMATED_ADHERENT, pos, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 10000);
  75. + if (temp.empty())
  76. + return;
  77.  
  78. - if (TempSummon* summon = target->ToTempSummon())
  79. - summon->UnSummon();
  80. - }
  81. + // select random cultist
  82. + Creature* cultist = Trinity::Containers::SelectRandomContainerElement(temp);
  83. + DoCast(cultist, SPELL_DARK_MARTYRDOM_T, true);
  84. }
  85.  
  86. void EmpowerCultist()
  87. @@ -617,7 +595,6 @@ class boss_lady_deathwhisper : public CreatureScript
  88. private:
  89. ObjectGuid _nextVengefulShadeTargetGUID;
  90. ObjectGuid _darnavanGUID;
  91. - GuidDeque _reanimationQueue;
  92. uint32 _waveCounter;
  93. uint8 const _dominateMindCount;
  94. bool _introDone;
  95. @@ -646,19 +623,38 @@ class npc_cult_fanatic : public CreatureScript
  96. Events.ScheduleEvent(EVENT_FANATIC_NECROTIC_STRIKE, urand(10000, 12000));
  97. Events.ScheduleEvent(EVENT_FANATIC_SHADOW_CLEAVE, urand(14000, 16000));
  98. Events.ScheduleEvent(EVENT_FANATIC_VAMPIRIC_MIGHT, urand(20000, 27000));
  99. - if (me->GetEntry() == NPC_CULT_FANATIC)
  100. - Events.ScheduleEvent(EVENT_CULTIST_DARK_MARTYRDOM, urand(18000, 32000));
  101. }
  102.  
  103. void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
  104. {
  105. - if (spell->Id == SPELL_DARK_TRANSFORMATION)
  106. - me->UpdateEntry(NPC_DEFORMED_FANATIC);
  107. - else if (spell->Id == SPELL_DARK_TRANSFORMATION_T)
  108. + switch (spell->Id)
  109. {
  110. - Events.CancelEvent(EVENT_CULTIST_DARK_MARTYRDOM);
  111. - me->InterruptNonMeleeSpells(true);
  112. - DoCast(me, SPELL_DARK_TRANSFORMATION);
  113. + case SPELL_DARK_TRANSFORMATION:
  114. + me->UpdateEntry(NPC_DEFORMED_FANATIC);
  115. + break;
  116. + case SPELL_DARK_TRANSFORMATION_T:
  117. + if (me->HasFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD))
  118. + break;
  119. + me->InterruptNonMeleeSpells(true);
  120. + DoCast(me, SPELL_DARK_TRANSFORMATION);
  121. + break;
  122. + case SPELL_DARK_MARTYRDOM_T:
  123. + me->InterruptNonMeleeSpells(true);
  124. + DoCast(me, SPELL_DARK_MARTYRDOM_FANATIC);
  125. + break;
  126. + case SPELL_DARK_MARTYRDOM_FANATIC: // 10nm
  127. + case 72495: // 25nm
  128. + case 72496: // 10hc
  129. + case 72497: // 25hc
  130. + me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_PACIFIED | UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_UNK_29);
  131. + me->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
  132. + me->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
  133. + me->SetReactState(REACT_PASSIVE);
  134. + me->AttackStop();
  135. + Events.ScheduleEvent(EVENT_CULTIST_DARK_MARTYRDOM, 4000);
  136. + break;
  137. + default:
  138. + break;
  139. }
  140. }
  141.  
  142. @@ -689,8 +685,17 @@ class npc_cult_fanatic : public CreatureScript
  143. Events.ScheduleEvent(EVENT_FANATIC_VAMPIRIC_MIGHT, urand(20000, 27000));
  144. break;
  145. case EVENT_CULTIST_DARK_MARTYRDOM:
  146. - DoCast(me, SPELL_DARK_MARTYRDOM_FANATIC);
  147. - Events.ScheduleEvent(EVENT_CULTIST_DARK_MARTYRDOM, urand(16000, 21000));
  148. + if (me->IsSummon())
  149. + if (Unit* owner = me->ToTempSummon()->GetSummoner())
  150. + if (owner->ToCreature())
  151. + owner->ToCreature()->AI()->Talk(SAY_ANIMATE_DEAD);
  152. + me->UpdateEntry(NPC_REANIMATED_FANATIC);
  153. + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_PACIFIED | UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_UNK_29);
  154. + me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
  155. + me->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
  156. + DoCast(me, SPELL_FANATIC_S_DETERMINATION);
  157. + me->SetReactState(REACT_AGGRESSIVE);
  158. + AttackStart(SelectTarget(SELECT_TARGET_RANDOM));
  159. break;
  160. }
  161. }
  162. @@ -724,19 +729,38 @@ class npc_cult_adherent : public CreatureScript
  163. Events.ScheduleEvent(EVENT_ADHERENT_DEATHCHILL, urand(14000, 16000));
  164. Events.ScheduleEvent(EVENT_ADHERENT_CURSE_OF_TORPOR, urand(14000, 16000));
  165. Events.ScheduleEvent(EVENT_ADHERENT_SHORUD_OF_THE_OCCULT, urand(32000, 39000));
  166. - if (me->GetEntry() == NPC_CULT_ADHERENT)
  167. - Events.ScheduleEvent(EVENT_CULTIST_DARK_MARTYRDOM, urand(18000, 32000));
  168. }
  169.  
  170. void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
  171. {
  172. - if (spell->Id == SPELL_DARK_EMPOWERMENT)
  173. - me->UpdateEntry(NPC_EMPOWERED_ADHERENT);
  174. - else if (spell->Id == SPELL_DARK_EMPOWERMENT_T)
  175. + switch (spell->Id)
  176. {
  177. - Events.CancelEvent(EVENT_CULTIST_DARK_MARTYRDOM);
  178. - me->InterruptNonMeleeSpells(true);
  179. - DoCast(me, SPELL_DARK_EMPOWERMENT);
  180. + case SPELL_DARK_EMPOWERMENT:
  181. + me->UpdateEntry(NPC_EMPOWERED_ADHERENT);
  182. + break;
  183. + case SPELL_DARK_EMPOWERMENT_T:
  184. + if (me->HasFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD))
  185. + break;
  186. + me->InterruptNonMeleeSpells(true);
  187. + DoCast(me, SPELL_DARK_EMPOWERMENT);
  188. + break;
  189. + case SPELL_DARK_MARTYRDOM_T:
  190. + me->InterruptNonMeleeSpells(true);
  191. + DoCast(me, SPELL_DARK_MARTYRDOM_ADHERENT);
  192. + break;
  193. + case SPELL_DARK_MARTYRDOM_ADHERENT:
  194. + case 72498:
  195. + case 72499:
  196. + case 72500:
  197. + me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_PACIFIED | UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_UNK_29);
  198. + me->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
  199. + me->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
  200. + me->SetReactState(REACT_PASSIVE);
  201. + me->AttackStop();
  202. + Events.ScheduleEvent(EVENT_CULTIST_DARK_MARTYRDOM, 4000);
  203. + break;
  204. + default:
  205. + break;
  206. }
  207. }
  208.  
  209. @@ -775,8 +799,17 @@ class npc_cult_adherent : public CreatureScript
  210. Events.ScheduleEvent(EVENT_ADHERENT_SHORUD_OF_THE_OCCULT, urand(27000, 32000));
  211. break;
  212. case EVENT_CULTIST_DARK_MARTYRDOM:
  213. - DoCast(me, SPELL_DARK_MARTYRDOM_ADHERENT);
  214. - Events.ScheduleEvent(EVENT_CULTIST_DARK_MARTYRDOM, urand(16000, 21000));
  215. + if (me->IsSummon())
  216. + if (Unit* owner = me->ToTempSummon()->GetSummoner())
  217. + if (owner->ToCreature())
  218. + owner->ToCreature()->AI()->Talk(SAY_ANIMATE_DEAD);
  219. + me->UpdateEntry(NPC_REANIMATED_ADHERENT);
  220. + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_PACIFIED | UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_UNK_29);
  221. + me->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
  222. + me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
  223. + DoCast(me, SPELL_ADHERENT_S_DETERMINATION);
  224. + me->SetReactState(REACT_AGGRESSIVE);
  225. + AttackStart(SelectTarget(SELECT_TARGET_RANDOM));
  226. break;
  227. }
  228. }
  229. @@ -993,37 +1026,6 @@ class spell_deathwhisper_mana_barrier : public SpellScriptLoader
  230. }
  231. };
  232.  
  233. -class spell_cultist_dark_martyrdom : public SpellScriptLoader
  234. -{
  235. - public:
  236. - spell_cultist_dark_martyrdom() : SpellScriptLoader("spell_cultist_dark_martyrdom") { }
  237. -
  238. - class spell_cultist_dark_martyrdom_SpellScript : public SpellScript
  239. - {
  240. - PrepareSpellScript(spell_cultist_dark_martyrdom_SpellScript);
  241. -
  242. - void HandleEffect(SpellEffIndex /*effIndex*/)
  243. - {
  244. - if (GetCaster()->IsSummon())
  245. - if (Unit* owner = GetCaster()->ToTempSummon()->GetSummoner())
  246. - owner->GetAI()->SetGUID(GetCaster()->GetGUID(), GUID_CULTIST);
  247. -
  248. - GetCaster()->Kill(GetCaster());
  249. - GetCaster()->SetDisplayId(uint32(GetCaster()->GetEntry() == NPC_CULT_FANATIC ? 38009 : 38010));
  250. - }
  251. -
  252. - void Register() override
  253. - {
  254. - OnEffectHitTarget += SpellEffectFn(spell_cultist_dark_martyrdom_SpellScript::HandleEffect, EFFECT_2, SPELL_EFFECT_FORCE_DESELECT);
  255. - }
  256. - };
  257. -
  258. - SpellScript* GetSpellScript() const override
  259. - {
  260. - return new spell_cultist_dark_martyrdom_SpellScript();
  261. - }
  262. -};
  263. -
  264. void AddSC_boss_lady_deathwhisper()
  265. {
  266. new boss_lady_deathwhisper();
  267. @@ -1032,5 +1034,4 @@ void AddSC_boss_lady_deathwhisper()
  268. new npc_vengeful_shade();
  269. new npc_darnavan();
  270. new spell_deathwhisper_mana_barrier();
  271. - new spell_cultist_dark_martyrdom();
  272. -}
  273. +}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement