Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save juanqtx/3631182 to your computer and use it in GitHub Desktop.
Save juanqtx/3631182 to your computer and use it in GitHub Desktop.
icecrown_citadel_trashmobs.patch
From 84d87dd290d3a44152fa3964edb7302014da052e Mon Sep 17 00:00:00 2001
From: Eilo <[email protected]>
Date: Fri, 16 Dec 2011 17:56:14 -0500
Subject: [PATCH 33/65] 2.2.30 ICC: Trashmob implementacion completa
---
.../reanemu/2011_11_25_100_world_trashmobs_icc.sql | 150 ++
src/server/game/Scripting/ScriptLoader.cpp | 3 +-
src/server/scripts/Northrend/CMakeLists.txt | 1 +
.../IcecrownCitadel/icecrown_citadel_trashmobs.cpp | 2760 ++++++++++++++++++++
4 files changed, 2913 insertions(+), 1 deletions(-)
create mode 100644 sql/updates/world/reanemu/2011_11_25_100_world_trashmobs_icc.sql
create mode 100644 src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_trashmobs.cpp
diff --git a/sql/updates/world/reanemu/2011_11_25_100_world_trashmobs_icc.sql b/sql/updates/world/reanemu/2011_11_25_100_world_trashmobs_icc.sql
new file mode 100644
index 0000000..73a911b
--- /dev/null
+++ b/sql/updates/world/reanemu/2011_11_25_100_world_trashmobs_icc.sql
@@ -0,0 +1,150 @@
+-- Eilo (https://github.com/eilo)
+-- Trashmobs icc
+-- En desarrollo ReanEmu https://github.com/ComunidadRean/ReanEmu
+-- Datos base por overy, kayserzero y wowhead.com
+-- Final por Eilo http://twitter.com/eilo2518/
+
+-- Trash inicial Martillo de Luz http://www.youtube.com/watch?v=zcSKxoA8eC8
+-- Trash de Caminasueños http://www.youtube.com/watch?v=dYXY7QsAI98
+-- Trash de Consejo de Sangre http://www.youtube.com/watch?v=-y1jiiaUfC8
+
+-- Scriptnames y ajustes:
+
+/*-----Trash de Martillo de la Luz-----*/
+-- Aqui se les sube el daño tambien para que no puedan farmear en solo
+UPDATE `creature_template` SET `ScriptName` = 'npc_ancient_skeletal_soldier_icc' WHERE `entry` =37012;
+UPDATE `creature_template` SET `dmg_multiplier` = '10' WHERE `entry` =37012;
+UPDATE `creature_template` SET `ScriptName` = 'npc_ancient_skeletal_soldier_icc' WHERE `entry` =38059;
+UPDATE `creature_template` SET `dmg_multiplier` = '17.5' WHERE `entry` =38059;
+UPDATE `creature_template` SET `ScriptName` = 'npc_deathbound_ward_icc' WHERE `entry` =37007;
+UPDATE `creature_template` SET `mindmg` = '1100',`maxdmg` = '1300' WHERE `entry` =37007;
+UPDATE `creature_template` SET `ScriptName` = 'npc_deathbound_ward_icc' WHERE `entry` =38031;
+UPDATE `creature_template` SET `mindmg` = '1100',`maxdmg` = '1200' WHERE `entry` =38031;
+UPDATE `creature_template` SET `ScriptName` = 'npc_servant_of_the_throne_icc' WHERE `entry` =36724;
+UPDATE `creature_template` SET `dmg_multiplier` = '10.5' WHERE `entry` =36724;
+UPDATE `creature_template` SET `ScriptName` = 'npc_servant_of_the_throne_icc' WHERE `entry` =38057;
+UPDATE `creature_template` SET `dmg_multiplier` = '19' WHERE `entry` =38057;
+-- UPDATE `creature_template` SET `ScriptName` = 'npc_the_damned_icc' WHERE `entry` =37011;
+UPDATE `creature_template` SET `dmg_multiplier` = '10' WHERE `entry` =37011;
+-- UPDATE `creature_template` SET `ScriptName` = 'npc_the_damned_icc' WHERE `entry` =38061;
+UPDATE `creature_template` SET `dmg_multiplier` = '16' WHERE `entry` =38061;
+UPDATE `creature_template` SET `ScriptName` = 'npc_nerubar_broodkeeper_icc' WHERE `entry` =36725;
+UPDATE `creature_template` SET `dmg_multiplier` = '11.2' WHERE `entry` =36725;
+UPDATE `creature_template` SET `ScriptName` = 'npc_nerubar_broodkeeper_icc' WHERE `entry` =38058;
+UPDATE `creature_template` SET `dmg_multiplier` = '14.7' WHERE `entry` =38058;
+
+/*--Trash de Oratorio de los Malditos--*/
+UPDATE `creature_template` SET `ScriptName` = 'npc_deathspeaker_servant_10man_icc' WHERE `entry`=36805;
+UPDATE `creature_template` SET `ScriptName` = 'npc_deathspeaker_servant_25man_icc' WHERE `entry`=38075;
+UPDATE `creature_template` SET `ScriptName` = 'npc_deathspeaker_disciple_10man_icc' WHERE `entry`=36807;
+UPDATE `creature_template` SET `ScriptName` = 'npc_deathspeaker_disciple_25man_icc' WHERE `entry`=38073;
+UPDATE `creature_template` SET `ScriptName` = 'npc_deathspeaker_zealot_icc' WHERE `entry`=36808;
+UPDATE `creature_template` SET `ScriptName` = 'npc_deathspeaker_zealot_icc' WHERE `entry`=38076;
+UPDATE `creature_template` SET `ScriptName` = 'npc_deathspeaker_attendant_10man_icc' WHERE `entry`=36811;
+UPDATE `creature_template` SET `ScriptName` = 'npc_deathspeaker_attendant_25man_icc' WHERE `entry`=38072;
+UPDATE `creature_template` SET `ScriptName` = 'npc_deathspeaker_high_priest_icc' WHERE `entry`=36829;
+UPDATE `creature_template` SET `ScriptName` = 'npc_deathspeaker_high_priest_icc' WHERE `entry`=38074;
+
+/*---------Trash de La Espiral---------*/
+UPDATE `creature_template` SET `ScriptName` = 'npc_valkyr_herald_10man_icc' WHERE `entry`=37098;
+UPDATE `creature_template` SET `ScriptName` = 'npc_valkyr_herald_25man_icc' WHERE `entry`=38418;
+
+/*----Trash de Talleres de la Peste----*/
+UPDATE `creature_template` SET `ScriptName` = 'npc_blighted_abomination_icc' WHERE `entry`=37022;
+UPDATE `creature_template` SET `ScriptName` = 'npc_blighted_abomination_icc' WHERE `entry`=38108;
+UPDATE `creature_template` SET `ScriptName` = 'npc_vengeful_fleshreapert_icc' WHERE `entry`=37038;
+UPDATE `creature_template` SET `ScriptName` = 'npc_vengeful_fleshreapert_icc' WHERE `entry`=38063;
+UPDATE `creature_template` SET `ScriptName` = 'npc_plague_scientist_icc' WHERE `entry`=37023;
+UPDATE `creature_template` SET `ScriptName` = 'npc_plague_scientist_icc' WHERE `entry`=38062;
+UPDATE `creature_template` SET `ScriptName` = 'npc_pustulating_horror_10man_icc' WHERE `entry`=10404;
+UPDATE `creature_template` SET `ScriptName` = 'npc_pustulating_horror_25man_icc' WHERE `entry`=38110;
+UPDATE `creature_template` SET `ScriptName` = 'npc_decaying_colossus_10man_icc' WHERE `entry`=36880;
+UPDATE `creature_template` SET `ScriptName` = 'npc_decaying_colossus_25man_icc' WHERE `entry`=37655;
+
+/*--------Trash de Salas Carmesi--------*/
+UPDATE `creature_template` SET `ScriptName` = 'npc_darkfallen_archmage_10man_icc' WHERE `entry`=37664;
+UPDATE `creature_template` SET `ScriptName` = 'npc_darkfallen_archmage_25man_icc' WHERE `entry`=38099;
+UPDATE `creature_template` SET `ScriptName` = 'npc_darkfallen_blood_knight_icc' WHERE `entry`=37595;
+UPDATE `creature_template` SET `ScriptName` = 'npc_darkfallen_blood_knight_icc' WHERE `entry`=38100;
+UPDATE `creature_template` SET `ScriptName` = 'npc_darkfallen_noble_10man_icc' WHERE `entry`=37663;
+UPDATE `creature_template` SET `ScriptName` = 'npc_darkfallen_noble_25man_icc' WHERE `entry`=38480;
+UPDATE `creature_template` SET `ScriptName` = 'npc_vampiric_fiend_icc' WHERE `entry`=37901;
+UPDATE `creature_template` SET `ScriptName` = 'npc_darkfallen_advisor_10man_icc' WHERE `entry`=37571;
+UPDATE `creature_template` SET `ScriptName` = 'npc_darkfallen_advisor_25man_icc' WHERE `entry`=38098;
+UPDATE `creature_template` SET `ScriptName` = 'npc_darkfallen_commander_10man_icc' WHERE `entry`=37662;
+UPDATE `creature_template` SET `ScriptName` = 'npc_darkfallen_commander_25man_icc' WHERE `entry`=38102;
+UPDATE `creature_template` SET `ScriptName` = 'npc_darkfallen_lieutenant_10man_icc' WHERE `entry`=37665;
+UPDATE `creature_template` SET `ScriptName` = 'npc_darkfallen_lieutenant_25man_icc' WHERE `entry`=38101;
+UPDATE `creature_template` SET `ScriptName` = 'npc_darkfallen_tactician_icc' WHERE `entry`=37666;
+UPDATE `creature_template` SET `ScriptName` = 'npc_darkfallen_tactician_icc' WHERE `entry`=38479;
+
+/*---Trash de Camaras de Alaescarcha---*/
+UPDATE `creature_template` SET `ScriptName` = 'npc_ymirjar_deathbringer_10man_icc' WHERE `entry`=38125;
+UPDATE `creature_template` SET `ScriptName` = 'npc_ymirjar_deathbringer_25man_icc' WHERE `entry`=38130;
+UPDATE `creature_template` SET `ScriptName` = 'npc_ymirjar_frostbinder_icc' WHERE `entry`=37127;
+UPDATE `creature_template` SET `ScriptName` = 'npc_ymirjar_frostbinder_icc' WHERE `entry`=38126;
+UPDATE `creature_template` SET `ScriptName` = 'npc_ymirjar_battlemaiden_icc' WHERE `entry`=37132;
+UPDATE `creature_template` SET `ScriptName` = 'npc_ymirjar_battlemaiden_icc' WHERE `entry`=38132;
+UPDATE `creature_template` SET `ScriptName` = 'npc_ymirjar_huntress_icc' WHERE `entry`=37134;
+UPDATE `creature_template` SET `ScriptName` = 'npc_ymirjar_huntress_icc' WHERE `entry`=38134;
+UPDATE `creature_template` SET `ScriptName` = 'npc_ymirjar_warlord_icc' WHERE `entry`=37133;
+UPDATE `creature_template` SET `ScriptName` = 'npc_ymirjar_warlord_icc' WHERE `entry`=38133;
+
+-- Eilo (https://github.com/eilo)
+-- Inmunidades del trash de icc:
+-- ancient skeletal soldier
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|1|4|8|16|128|512|1024|65536|131072|524288|1048576|4194304|8388608|33554432|67108864|134217728 WHERE `entry` IN (37012,38059);
+-- deathbound ward
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|1|4|8|16|128|512|1024|65536|131072|524288|1048576|4194304|8388608|33554432|67108864|134217728 WHERE `entry` IN (37007,38031);
+-- servant of the throne
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|1|4|8|16|128|512|1024|65536|131072|524288|1048576|4194304|8388608|33554432|67108864|134217728 WHERE `entry` IN (36724,38057);
+-- the damned
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|1|4|8|16|128|512|1024|65536|131072|524288|1048576|4194304|8388608|33554432|67108864|134217728 WHERE `entry` IN (37011,38061);
+-- nerubar broodkeeper
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|1|4|8|16|128|512|1024|65536|131072|524288|1048576|4194304|8388608|33554432|67108864|134217728 WHERE `entry` IN (36725,38058);
+-- deathspeaker servant
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|1|4|8|16|128|512|1024|65536|131072|524288|1048576|4194304|8388608|33554432|67108864|134217728 WHERE `entry` IN (36805,38075);
+-- deathspeaker disciple
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|1|4|8|16|128|512|1024|65536|131072|524288|1048576|4194304|8388608|33554432|67108864|134217728 WHERE `entry` IN (36807,38073);
+-- deathspeaker zealot
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|1|4|8|16|128|512|1024|65536|131072|524288|1048576|4194304|8388608|33554432|67108864|134217728 WHERE `entry` IN (36808,38076);
+-- deathspeaker attendant
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|1|4|8|16|128|512|1024|65536|131072|524288|1048576|4194304|8388608|33554432|67108864|134217728 WHERE `entry` IN (36811,38072);
+-- deathspeaker high priest
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|1|4|8|16|128|512|1024|65536|131072|524288|1048576|4194304|8388608|33554432|67108864|134217728 WHERE `entry` IN (36829,38074);
+-- blighted abomination
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|1|4|8|16|128|512|1024|65536|131072|524288|1048576|4194304|8388608|33554432|67108864|134217728 WHERE `entry` IN (37022,38108);
+-- vengeful fleshreapert
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|1|4|8|16|128|512|1024|65536|131072|524288|1048576|4194304|8388608|33554432|67108864|134217728 WHERE `entry` IN (37038,38063);
+-- plague scientist
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|1|4|8|16|128|512|1024|65536|131072|524288|1048576|4194304|8388608|33554432|67108864|134217728 WHERE `entry` IN (37023,38062);
+-- pustulating horror
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|1|4|8|16|128|512|1024|65536|131072|524288|1048576|4194304|8388608|33554432|67108864|134217728 WHERE `entry` IN (10404,38110);
+-- decaying colossus
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|1|4|8|16|128|512|1024|65536|131072|524288|1048576|4194304|8388608|33554432|67108864|134217728 WHERE `entry` IN (36880,37655);
+-- darkfallen archmage
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|1|4|8|16|128|512|1024|65536|131072|524288|1048576|4194304|8388608|33554432|67108864|134217728 WHERE `entry` IN (37664,38099);
+-- darkfallen blood knight
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|1|4|8|16|128|512|1024|65536|131072|524288|1048576|4194304|8388608|33554432|67108864|134217728 WHERE `entry` IN (37595,38100);
+-- darkfallen noble
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|1|4|8|16|128|512|1024|65536|131072|524288|1048576|4194304|8388608|33554432|67108864|134217728 WHERE `entry` IN (37663,38480);
+-- vampiric fiend
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|1|4|8|16|128|512|1024|65536|131072|524288|1048576|4194304|8388608|33554432|67108864|134217728 WHERE `entry`=37901;
+-- darkfallen advisor
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|1|4|8|16|128|512|1024|65536|131072|524288|1048576|4194304|8388608|33554432|67108864|134217728 WHERE `entry` IN (37571,38098);
+-- darkfallen commander
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|1|4|8|16|128|512|1024|65536|131072|524288|1048576|4194304|8388608|33554432|67108864|134217728 WHERE `entry` IN (37662,38102);
+-- darkfallen lieutenant
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|1|4|8|16|128|512|1024|65536|131072|524288|1048576|4194304|8388608|33554432|67108864|134217728 WHERE `entry` IN (37665,38101);
+-- darkfallen tactician
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|1|4|8|16|128|512|1024|65536|131072|524288|1048576|4194304|8388608|33554432|67108864|134217728 WHERE `entry` IN (37666,38479);
+-- ymirjar deathbringer
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|1|4|8|16|128|512|1024|65536|131072|524288|1048576|4194304|8388608|33554432|67108864|134217728 WHERE `entry` IN (38125,38130);
+-- ymirjar frostbinder
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|1|4|8|16|128|512|1024|65536|131072|524288|1048576|4194304|8388608|33554432|67108864|134217728 WHERE `entry` IN (37127,38126);
+-- ymirjar battlemaiden
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|1|4|8|16|128|512|1024|65536|131072|524288|1048576|4194304|8388608|33554432|67108864|134217728 WHERE `entry`=38132;
+-- ymirjar huntress
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|1|4|8|16|128|512|1024|65536|131072|524288|1048576|4194304|8388608|33554432|67108864|134217728 WHERE `entry`=38134;
+-- ymirjar warlord
+UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|1|4|8|16|128|512|1024|65536|131072|524288|1048576|4194304|8388608|33554432|67108864|134217728 WHERE `entry`=38133;
diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp
index 7f805ca..2126bf4 100755
--- a/src/server/game/Scripting/ScriptLoader.cpp
+++ b/src/server/game/Scripting/ScriptLoader.cpp
@@ -480,6 +480,7 @@ void AddSC_boss_blood_queen_lana_thel();
void AddSC_boss_valithria_dreamwalker();
void AddSC_boss_sindragosa();
void AddSC_boss_the_lich_king();
+void AddSC_icecrown_citadel_trashmobs();
void AddSC_icecrown_citadel_teleport();
void AddSC_instance_icecrown_citadel();
void AddSC_icecrown_citadel();
@@ -1187,11 +1188,11 @@ void AddNorthrendScripts()
AddSC_boss_valithria_dreamwalker();
AddSC_boss_sindragosa();
AddSC_boss_the_lich_king();
+ AddSC_icecrown_citadel_trashmobs();
AddSC_icecrown_citadel_teleport();
AddSC_instance_icecrown_citadel();
AddSC_icecrown_citadel();
AddSC_instance_ruby_sanctum(); // Ruby Sanctum
- AddSC_ruby_sanctum();
AddSC_boss_baltharus_the_warborn();
AddSC_boss_saviana_ragefire();
AddSC_boss_general_zarithrian();
diff --git a/src/server/scripts/Northrend/CMakeLists.txt b/src/server/scripts/Northrend/CMakeLists.txt
index 26b1cfa..7db3133 100644
--- a/src/server/scripts/Northrend/CMakeLists.txt
+++ b/src/server/scripts/Northrend/CMakeLists.txt
@@ -163,6 +163,7 @@ set(scripts_STAT_SRCS
Northrend/IcecrownCitadel/icecrown_citadel.cpp
Northrend/IcecrownCitadel/icecrown_citadel.h
Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp
+ Northrend/IcecrownCitadel/icecrown_citadel_trashmobs.cpp
Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp
Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_trashmobs.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_trashmobs.cpp
new file mode 100644
index 0000000..5208c6b
--- /dev/null
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_trashmobs.cpp
@@ -0,0 +1,2760 @@
+/*
+ * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2009-2011 Eilo <https://github.com/eilo>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+// Recopilaciones de varias fuentes
+// Adiciones y modificaciones por Eilo
+// Script final por Eilo
+
+#include "ScriptPCH.h"
+
+enum Spells
+{
+/*-----Trash de Martillo de la Luz-----*/
+ //## Ancient Skeletal Soldier ##
+ SPELL_SHIELD_BASH = 70964,
+
+ //## Deathbound Ward ##
+ SPELL_SABER_LASH = 71021,
+ SPELL_DISRUPTING_SHOUT = 71022,
+
+ //## Nerubar Broodkeeper ##
+ SPELL_CRYPT_SCARABS = 70965,
+ SPELL_DARK_MENDING = 71020,
+ SPELL_WEB_WRAP = 70980,
+
+ //## Servant of the Throne ##
+ SPELL_GLACIAL_BLAST = 71029,
+/*
+ //## The Damned ##
+ SPELL_BONE_FLURRY = 70960,
+ SPELL_SHATTERED_BONES = 70961,
+ SPELL_SHATTERED_BONES_VISUAL = 70963,
+*/
+/*--Trash de Oratorio de los Malditos--*/
+ // ## Deathspeaker Servant ##
+ SPELL_CHAOS_BOLT_10M = 69576,
+ SPELL_CHAOS_BOLT_25M = 71108,
+ SPELL_CONSUMING_SHADOWS = 69405,
+ SPELL_CURSE_OF_AGONY_10M = 69404,
+ SPELL_CURSE_OF_AGONY_25M = 71112,
+
+ // ## Deathspeaker Disciple ##
+ SPELL_SHADOW_BOLT_DEATHSPEAKER= 69387, //tambien la usa deathspeaker attendant
+ SPELL_DARK_BLESSING = 69391,
+ SPELL_SHADOW_MEND_10M = 69389,
+ SPELL_SHADOW_MEND_25M = 71107,
+
+ //## Deathspeaker Attendant ##
+ SPELL_SHADOW_NOVA_10M = 69355,
+ SPELL_SHADOW_NOVA_25M = 71106,
+
+ //## Deathspeaker Zealot ##
+ SPELL_SHADOW_CLEAVE = 69492,
+
+ //## Deathspeaker High Priest ##
+ SPELL_DARK_RECKONING = 69483,
+ SPELL_AURA_OF_DARKNESS = 69491,
+
+/*---------Trash de La Espiral---------*/
+ //## Valkyr Herald ##
+ SPELL_SEVERED_ESSENCE_10M = 71906,
+ SPELL_SEVERED_ESSENCE_25M = 71942,
+
+/*----Trash de Talleres de la Peste----*/
+ //## Blighted Abomination ##
+ SPELL_CLEAVE = 40504,
+ SPELL_PLAGUE_CLOUD = 71150,
+ SPELL_SCOURGE_HOOK = 71140,
+
+ //## Vengeful Fleshreaper ##
+ SPELL_LEAPING_FACE_MAUL = 71164,
+ SPELL_DEVOUR_HUMANOID = 71164,
+
+ //## Plague Scientist ##
+ SPELL_PLAGUE_BLAST = 73079,
+ SPELL_PLAGUE_STREAM = 69871,
+ SPELL_COMBOBULATING_SPRAY = 71103,
+
+ //## Pustulating Horror ##
+ SPELL_BLIGHT_BOMB = 71088,
+ SPELL_BUBBLING_PUS_10M = 71089,
+ SPELL_BUBBLING_PUS_25M = 71090,
+
+ //## Decaying Colossus ##
+ SPELL_MASSIVE_STOMP_10M = 71114,
+ SPELL_MASSIVE_STOMP_25M = 71115,
+
+/*--------Trash de Salas Carmesi--------*/
+ //## Darkfallen Archmage ##
+ SPELL_AMPLIFY_MAGIC_10M = 70408,
+ SPELL_AMPLIFY_MAGIC_25M = 72336,
+ SPELL_BLAST_WAVE_10M = 70407,
+ SPELL_BLAST_WAVE_25M = 71151,
+ SPELL_FIREBALL_10M = 70409,
+ SPELL_FIREBALL_25M = 71153,
+ SPELL_POLYMORPH_SPIDER = 70410,
+ //esta spell hay que ver como se usa y su interaccion con el orbe
+ SPELL_SIPHON_ESSENCE = 70299, //tambien la usa Darkfallen Blood Knight y Darkfallen Noble
+
+ //## Darkfallen Blood Knight ##
+ SPELL_VAMPIRIC_AURA = 71736,
+ SPELL_UNHOLY_STRIKE = 70437, //tambien la usa el Darkfallen Tactician
+ SPELL_BLOOD_MIRROR_DAMAGE = 70445,
+ SPELL_BLOOD_MIRROR_BUFF = 70451,
+ SPELL_BLOOD_MIRROR_DUMMY = 70450,
+
+ //## Darkfallen Noble ##
+ SPELL_CHAINS_OF_SHADOW = 70645,
+ SPELL_SHADOW_BOLT_10M = 72960,
+ SPELL_SHADOW_BOLT_25M = 72961,
+
+ //## Npc Vampiric Fiend ##
+ SPELL_DISEASE_CLOUD = 41290,
+ SPELL_LEECHING_ROT = 70671,
+
+ //## Darkfallen Advisor ##
+ SPELL_LICH_SLAP_10M = 72057,
+ SPELL_LICH_SLAP_25M = 72421,
+ SPELL_SHROUD_OF_PROTECTION = 72065,
+ SPELL_SHROUD_OF_SPELL_WARDING = 72066,
+
+ //## Darkfallen Commander ##
+ SPELL_VAMPIRE_RUSH_10M = 70449,
+ SPELL_VAMPIRE_RUSH_25M = 71155,
+ SPELL_BATTLE_SHOUT = 70750,
+
+ //## Darkfallen Lieutenant ##
+ SPELL_VAMPIRIC_CURSE = 70423,
+ SPELL_REND_FLESH_10M = 70435,
+ SPELL_REND_FLESH_25M = 71154,
+
+ //## Darkfallen Tactician ##
+ SPELL_SHADOWSTEP = 70431,
+ SPELL_BLOOD_SAP = 70432,
+
+/*---Trash de Camaras de Alaescarcha---*/
+ //## Ymirjar Deathbringer ##
+ SPELL_BANISH = 71298,
+ SPELL_DEATHS_EMBRACE_10M = 71299,
+ SPELL_DEATHS_EMBRACE_25M = 71300,
+ SPELL_SHADOW_BOLT_YMIRJAR_10M = 71296,
+ SPELL_SHADOW_BOLT_YMIRJAR_25M = 71297,
+ SPELL_SUMMON_YMIRJAR = 71303,
+/*
+ //## Ymirjar Frostbinder ##
+ SPELL_ARCTIC_CHILL = 71270,
+ SPELL_FROZEN_ORB = 71274,
+ SPELL_TWISTED_WINDS = 71306,
+ SPELL_SPIRIT_STREAM = 69929, // tambien la usa Ymirjar Deathbringer
+*/
+ //## Ymirjar Battle-Maiden ##
+ SPELL_ADRENALINE_RUSH = 71258,
+ SPELL_BARBARIC_STRIKE = 71257,
+
+ //## Ymirjar Huntress ##
+ SPELL_ICE_TRAP = 71249,
+ SPELL_RAPID_SHOT = 71251,
+ SPELL_SHOOT = 71253,
+ SPELL_VOLLEY = 71252,
+ SPELL_SUMMON_WARHAWK = 71705,
+
+ //## Ymirjar Warlord ##
+ SPELL_WHIRLWIND = 41056,
+
+ // Npc Empowering Orb Visual Stalker
+ // aun sin datos adicionales de este npc
+
+/* esta spell tienen todos los npcs para credito de
+muerte con la cadena de quest de la shadowmourne */
+ SPELL_SOUL_FEAST_ALL = 71203
+};
+
+enum npcs
+{
+/*-----Trash de Martillo de la Luz-----*/
+ NPC_DEATHBOUND_WARD = 37007,
+ NPC_SERVANT_OF_THE_THRONE = 36724,
+ NPC_ANCIENT_SKELETAL_SOLDIER = 37012,
+ // NPC_THE_DAMNED = 37011,
+ NPC_NERUBAR_BROODKEEPER = 36725,
+/*--Trash de Oratorio de los Malditos--*/
+ NPC_DEATHSPEAKER_SERVANT = 36805,
+ NPC_DEATHSPEAKER_ZEALOT = 36808,
+ NPC_DEATHSPEAKER_DISCIPLE = 36807,
+ NPC_DEATHSPEAKER_ATTENDANT = 36811,
+ NPC_DEATHSPEAKER_HIGH_PRIEST = 36829,
+/*---------Trash de La Espiral---------*/
+ NPC_VALKYR_HERALD = 37098,
+/*----Trash de Talleres de la Peste----*/
+ NPC_BLIGHTED_ABOMINATION = 37022,
+ NPC_VENGEFUL_FLESHREAPER = 37038,
+ NPC_PUSTULATING_HORROR = 10404,
+ NPC_PLAGUE_SCIENTIST = 37023,
+ NPC_DECAYING_COLOSSUS = 36880,
+/*--------Trash de Salas Carmesi--------*/
+ NPC_DARKFALLEN_ARCHMAGE = 37664,
+ NPC_DARKFALLEN_BLOOD_KNIGHT = 37595,
+ NPC_DARKFALLEN_NOBLE = 37663,
+ NPC_VAMPIRIC_FIEND = 37901,
+ NPC_DARKFALLEN_ADVISOR = 37571,
+ NPC_DARKFALLEN_COMMANDER = 37662,
+ NPC_DARKFALLEN_TACTICIAN = 37666,
+ NPC_DARKFALLEN_LIEUTENANT = 37665,
+/*---Trash de Camaras de Alaescarcha---*/
+ NPC_YMIRJAR_DEATHBRINGER = 38125,
+ // NPC_YMIRJAR_FROSTBINDER = 37127,
+ NPC_YMIRJAR_BATTLE_MAIDEN = 37132,
+ NPC_YMIRJAR_HUNTRESS = 37134,
+ NPC_YMIRJAR_WARLORD = 37133
+
+ //Empowering Orb Visual Stalker 38463
+};
+
+//######### Ancient Skeletal Soldier ##############
+class npc_ancient_skeletal_soldier_icc : public CreatureScript
+{
+ public:
+ npc_ancient_skeletal_soldier_icc() : CreatureScript("npc_ancient_skeletal_soldier_icc") { }
+
+ struct npc_ancient_skeletal_soldier_iccAI : public ScriptedAI
+ {
+ npc_ancient_skeletal_soldier_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiBASH_Timer;
+
+ void Reset()
+ {
+ m_uiBASH_Timer = 5000; //inicia en 5 segundos
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiBASH_Timer <= uiDiff)
+ {
+ DoCast(me->getVictim(), SPELL_SHIELD_BASH);
+ //repite cada 10 segundos
+ m_uiBASH_Timer = 10000;
+ }
+ else
+ m_uiBASH_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_ancient_skeletal_soldier_iccAI(creature);
+ }
+};
+
+//######### Deathbound Ward ##############
+class npc_deathbound_ward_icc : public CreatureScript
+{
+ public:
+ npc_deathbound_ward_icc() : CreatureScript("npc_deathbound_ward_icc") { }
+
+ struct npc_deathbound_ward_iccAI : public ScriptedAI
+ {
+ npc_deathbound_ward_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiDisrupting_Shout_Timer;
+ uint32 m_uiSaber_Lash_Timer;
+
+ void Reset()
+ {
+ m_uiDisrupting_Shout_Timer = 10000; //resetea en 10
+ m_uiSaber_Lash_Timer = 7000;
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiDisrupting_Shout_Timer <= uiDiff)
+ {
+ DoCastAOE(SPELL_DISRUPTING_SHOUT);
+ //cada 15 segundos interrumpe a todo el mundo en rango
+ m_uiDisrupting_Shout_Timer = 15000;
+ }
+ else
+ m_uiDisrupting_Shout_Timer -= uiDiff;
+
+ if (m_uiSaber_Lash_Timer <= uiDiff)
+ {
+ DoCast(me->getVictim(), SPELL_SABER_LASH);
+ //cada 7 segundos al tanke
+ m_uiSaber_Lash_Timer = 7000;
+ }
+ else
+ m_uiSaber_Lash_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_deathbound_ward_iccAI(creature);
+ }
+};
+
+//######### Nerubar Broodkeeper ##############
+class npc_nerubar_broodkeeper_icc : public CreatureScript
+{
+ public:
+ npc_nerubar_broodkeeper_icc() : CreatureScript("npc_nerubar_broodkeeper_icc") { }
+
+ struct npc_nerubar_broodkeeper_iccAI : public ScriptedAI
+ {
+ npc_nerubar_broodkeeper_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiSCARABS_Timer;
+ uint32 m_uiMENDING_Timer;
+ uint32 m_uiWRAPS_Timer;
+
+ void Reset()
+ {
+ m_uiSCARABS_Timer = 1000; //inicia en 1 segundo
+ m_uiMENDING_Timer = urand(5000, 8000); //entre 5 a 8 segs
+ m_uiWRAPS_Timer = urand(5000, 8000); //entre 5 a 8 segs
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiWRAPS_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_WEB_WRAP);
+ //repite entre 5 u 8 segundos
+ m_uiWRAPS_Timer = urand(5000, 8000);
+ }
+ else
+ m_uiWRAPS_Timer -= uiDiff;
+
+ if (m_uiMENDING_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_DARK_MENDING);
+ //repite entre 5 u 8 segundos
+ m_uiMENDING_Timer = urand(5000, 8000);
+ }
+ else
+ m_uiMENDING_Timer -= uiDiff;
+
+ if (m_uiSCARABS_Timer <= uiDiff)
+ {
+ DoCast(me->getVictim(), SPELL_CRYPT_SCARABS);
+ //cada 2 segundos
+ m_uiSCARABS_Timer = 2000;
+ }
+ else
+ m_uiSCARABS_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_nerubar_broodkeeper_iccAI(creature);
+ }
+};
+
+//######### Servant of the Throne ##############
+class npc_servant_of_the_throne_icc : public CreatureScript
+{
+ public:
+ npc_servant_of_the_throne_icc() : CreatureScript("npc_servant_of_the_throne_icc") { }
+
+ struct npc_servant_of_the_throne_iccAI : public ScriptedAI
+ {
+ npc_servant_of_the_throne_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiGlacial_Blast_Timer;
+
+ void Reset()
+ {
+ m_uiGlacial_Blast_Timer = 1000; //inicia pegando practicamente
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiGlacial_Blast_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_GLACIAL_BLAST);
+ //cada 6 segundos
+ m_uiGlacial_Blast_Timer = 6000;
+ }
+ else
+ m_uiGlacial_Blast_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_servant_of_the_throne_iccAI(creature);
+ }
+};
+/*
+//######### The Damned ##############
+class npc_the_damned_icc : public CreatureScript
+{
+ public:
+ npc_the_damned_icc() : CreatureScript("npc_the_damned_icc") { }
+
+ struct npc_the_damned_iccAI : public ScriptedAI
+ {
+ npc_the_damned_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiBone_Flurry_Timer;
+
+ void Reset()
+ {
+ m_uiBone_Flurry_Timer = 20000;
+ }
+
+ void JustDied(Unit * killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ DoCastAOE(SPELL_SHATTERED_BONES);
+ DoCast(me, SPELL_SHATTERED_BONES_VISUAL);
+ DoCast(me, SPELL_SHATTERED_BONES_VISUAL);
+ DoCast(me, SPELL_SHATTERED_BONES_VISUAL);
+ DoCast(me, SPELL_SHATTERED_BONES_VISUAL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiBone_Flurry_Timer <= uiDiff)
+ {
+ DoCast(me, SPELL_BONE_FLURRY);
+ //repite entre 20 a 30 segundos
+ m_uiBone_Flurry_Timer = urand(20000, 30000);
+ }
+ else
+ m_uiBone_Flurry_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_the_damned_iccAI(creature);
+ }
+};
+*/
+//######### Deathspeaker Servant 10 man ##############
+class npc_deathspeaker_servant_10man_icc : public CreatureScript
+{
+ public:
+ npc_deathspeaker_servant_10man_icc() : CreatureScript("npc_deathspeaker_servant_10man_icc") { }
+
+ struct npc_deathspeaker_servant_10man_iccAI : public ScriptedAI
+ {
+ npc_deathspeaker_servant_10man_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiCHAOS_Timer;
+ uint32 m_uiCONSUMING_Timer;
+ uint32 m_uiCURSE_Timer;
+
+ void Reset()
+ {
+ m_uiCHAOS_Timer = 2000;
+ m_uiCONSUMING_Timer = urand(3000, 5000); //iniciando rapidamente
+ m_uiCURSE_Timer = urand(3000, 5000); //iniciando rapidamente
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiCHAOS_Timer <= uiDiff)
+ {
+ DoCast(me->getVictim(), SPELL_CHAOS_BOLT_10M);
+ //repite entre 3 a 4 segundos para darle holgura
+ m_uiCHAOS_Timer = urand(3000, 4000);
+ }
+ else
+ m_uiCHAOS_Timer -= uiDiff;
+
+ if (m_uiCONSUMING_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_CONSUMING_SHADOWS);
+ //repite entre 8 a 15 segs
+ m_uiCONSUMING_Timer = urand(8000, 15000);
+ }
+ else
+ m_uiCONSUMING_Timer -= uiDiff;
+
+ if (m_uiCURSE_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_CURSE_OF_AGONY_10M);
+
+ m_uiCURSE_Timer = urand(15000, 20000);
+ }
+ else
+ m_uiCURSE_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_deathspeaker_servant_10man_iccAI(creature);
+ }
+};
+
+//######### Deathspeaker Servant 25 man ##############
+class npc_deathspeaker_servant_25man_icc : public CreatureScript
+{
+ public:
+ npc_deathspeaker_servant_25man_icc() : CreatureScript("npc_deathspeaker_servant_25man_icc") { }
+
+ struct npc_deathspeaker_servant_25man_iccAI : public ScriptedAI
+ {
+ npc_deathspeaker_servant_25man_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiCHAOS_Timer;
+ uint32 m_uiCONSUMING_Timer;
+ uint32 m_uiCURSE_Timer;
+
+ void Reset()
+ {
+ m_uiCHAOS_Timer = 2000;
+ m_uiCONSUMING_Timer = urand(2000, 3000); //iniciando rapido
+ m_uiCURSE_Timer = urand(2000, 3000); //iniciando rapido
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiCHAOS_Timer <= uiDiff)
+ {
+ DoCast(me->getVictim(), SPELL_CHAOS_BOLT_25M);
+ //entre 4 a 6 segs
+ m_uiCHAOS_Timer = (4000, 6000);
+ }
+ else
+ m_uiCHAOS_Timer -= uiDiff;
+
+ if (m_uiCONSUMING_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_CONSUMING_SHADOWS);
+ //entre 6 a 10 segundos, es 25man eh
+ m_uiCONSUMING_Timer = urand(6000, 10000);
+ }
+ else
+ m_uiCONSUMING_Timer -= uiDiff;
+
+ if (m_uiCURSE_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_CURSE_OF_AGONY_25M);
+ //repite entre 10 a 15 segs
+ m_uiCURSE_Timer = urand(10000, 15500);
+ }
+ else
+ m_uiCURSE_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_deathspeaker_servant_25man_iccAI(creature);
+ }
+};
+
+//######### Deathspeaker Disciple 10 man ##############
+class npc_deathspeaker_disciple_10man_icc : public CreatureScript
+{
+ public:
+ npc_deathspeaker_disciple_10man_icc() : CreatureScript("npc_deathspeaker_disciple_10man_icc") { }
+
+ struct npc_deathspeaker_disciple_10man_iccAI : public ScriptedAI
+ {
+ npc_deathspeaker_disciple_10man_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiBOLT_Timer;
+ uint32 m_uiBLESSING_Timer;
+ uint32 m_uiMEND_Timer;
+
+ void Reset()
+ {
+ m_uiBOLT_Timer = 2000;
+ m_uiBLESSING_Timer = urand(3000, 5000);
+ m_uiMEND_Timer = urand(5000, 10000);
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiBOLT_Timer <= uiDiff)
+ {
+ DoCast(me->getVictim(), SPELL_SHADOW_BOLT_DEATHSPEAKER);
+ //repite entre 3 a 7 segs
+ m_uiBOLT_Timer = urand(3000, 7000);
+ }
+ else
+ m_uiBOLT_Timer -= uiDiff;
+
+ if (m_uiBLESSING_Timer <= uiDiff)
+ {
+ DoCast(me, SPELL_DARK_BLESSING);
+ //repite entre 8 a 15 segs
+ m_uiBLESSING_Timer = urand(8000, 15000);
+ }
+ else
+ m_uiBLESSING_Timer -= uiDiff;
+
+ if (m_uiMEND_Timer <= uiDiff)
+ {
+ DoCast(me, SPELL_SHADOW_MEND_10M);
+ //repite entre 8 a 15 segs
+ m_uiMEND_Timer = urand(8000, 10000);
+ }
+ else
+ m_uiMEND_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_deathspeaker_disciple_10man_iccAI(creature);
+ }
+};
+
+//######### Deathspeaker Disciple 25 man ##############
+class npc_deathspeaker_disciple_25man_icc : public CreatureScript
+{
+ public:
+ npc_deathspeaker_disciple_25man_icc() : CreatureScript("npc_deathspeaker_disciple_25man_icc") { }
+
+ struct npc_deathspeaker_disciple_25man_iccAI : public ScriptedAI
+ {
+ npc_deathspeaker_disciple_25man_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiBOLT_Timer;
+ uint32 m_uiBLESSING_Timer;
+ uint32 m_uiMEND_Timer;
+
+ void Reset()
+ {
+ m_uiBOLT_Timer = 2000;
+ m_uiBLESSING_Timer = urand(1000, 3000); // inicia rapido
+ m_uiMEND_Timer = urand(3000, 5000); //inicia rapido
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiBOLT_Timer <= uiDiff)
+ {
+ DoCast(me->getVictim(), SPELL_SHADOW_BOLT_DEATHSPEAKER);
+ //repite entre 2 a 3 segs
+ m_uiBOLT_Timer = urand(2000, 3000);
+ }
+ else
+ m_uiBOLT_Timer -= uiDiff;
+
+ if (m_uiBLESSING_Timer <= uiDiff)
+ {
+ DoCast(me, SPELL_DARK_BLESSING);
+ //repite entre 8 a 10 segs
+ m_uiBLESSING_Timer = urand(8000, 10000);
+ }
+ else
+ m_uiBLESSING_Timer -= uiDiff;
+
+ if (m_uiMEND_Timer <= uiDiff)
+ {
+ DoCast(me, SPELL_SHADOW_MEND_25M);
+ //repite entre 5 a 8 segs
+ m_uiMEND_Timer = urand(5000, 8000);
+ }
+ else
+ m_uiMEND_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_deathspeaker_disciple_25man_iccAI(creature);
+ }
+};
+
+//######### Deathspeaker Attendant 10 man ##############
+class npc_deathspeaker_attendant_10man_icc : public CreatureScript
+{
+ public:
+ npc_deathspeaker_attendant_10man_icc() : CreatureScript("npc_deathspeaker_attendant_10man_icc") { }
+
+ struct npc_deathspeaker_attendant_10man_iccAI : public ScriptedAI
+ {
+ npc_deathspeaker_attendant_10man_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiBOLT_Timer;
+ uint32 m_uiNOVA_Timer;
+
+ void Reset()
+ {
+ m_uiBOLT_Timer = 2000;
+ m_uiNOVA_Timer = urand(5000, 10000);
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiBOLT_Timer <= uiDiff)
+ {
+ DoCast(me->getVictim(), SPELL_SHADOW_BOLT_DEATHSPEAKER);
+ //repite cada 3 a 5 segs
+ m_uiBOLT_Timer = urand(3000, 5000);
+ }
+ else
+ m_uiBOLT_Timer -= uiDiff;
+
+ if (m_uiNOVA_Timer <= uiDiff)
+ {
+ DoCastAOE(SPELL_SHADOW_NOVA_10M);
+ //repite cada 5 a 10 segs
+ m_uiNOVA_Timer = urand(5000, 10000);
+ }
+ else
+ m_uiNOVA_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_deathspeaker_attendant_10man_iccAI(creature);
+ }
+};
+
+//######### Deathspeaker Attendant 25 man ##############
+class npc_deathspeaker_attendant_25man_icc : public CreatureScript
+{
+ public:
+ npc_deathspeaker_attendant_25man_icc() : CreatureScript("npc_deathspeaker_attendant_25man_icc") { }
+
+ struct npc_deathspeaker_attendant_25man_iccAI : public ScriptedAI
+ {
+ npc_deathspeaker_attendant_25man_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiBOLT_Timer;
+ uint32 m_uiNOVA_Timer;
+
+ void Reset()
+ {
+ m_uiBOLT_Timer = 2000;
+ m_uiNOVA_Timer = urand(5000, 8000);
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiBOLT_Timer <= uiDiff)
+ {
+ DoCast(me->getVictim(), SPELL_SHADOW_BOLT_DEATHSPEAKER);
+ //entre cada 2 a 3 segs
+ m_uiBOLT_Timer = urand(2000, 3000);
+ }
+ else
+ m_uiBOLT_Timer -= uiDiff;
+
+ if (m_uiNOVA_Timer <= uiDiff)
+ {
+ DoCastAOE(SPELL_SHADOW_NOVA_25M);
+ //entre cada 5 a 10 segs
+ m_uiNOVA_Timer = urand(5000, 10000);
+ }
+ else
+ m_uiNOVA_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_deathspeaker_attendant_25man_iccAI(creature);
+ }
+};
+
+//######### Deathspeaker Zealot ##############
+class npc_deathspeaker_zealot_icc : public CreatureScript
+{
+ public:
+ npc_deathspeaker_zealot_icc() : CreatureScript("npc_deathspeaker_zealot_icc") { }
+
+ struct npc_deathspeaker_zealot_iccAI : public ScriptedAI
+ {
+ npc_deathspeaker_zealot_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiCLEAVE_Timer;
+
+ void Reset()
+ {
+ m_uiCLEAVE_Timer = 6000;
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiCLEAVE_Timer <= uiDiff)
+ {
+ DoCast(me->getVictim(), SPELL_SHADOW_CLEAVE);
+ //cada 6 segs
+ m_uiCLEAVE_Timer = 6000;
+ }
+ else
+ m_uiCLEAVE_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_deathspeaker_zealot_iccAI(creature);
+ }
+};
+
+//######### Deathspeaker High Priest ##############
+class npc_deathspeaker_high_priest_icc : public CreatureScript
+{
+ public:
+ npc_deathspeaker_high_priest_icc() : CreatureScript("npc_deathspeaker_high_priest_icc") { }
+
+ struct npc_deathspeaker_high_priest_iccAI : public ScriptedAI
+ {
+ npc_deathspeaker_high_priest_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiRECKONING_Timer;
+ uint32 m_uiAURA_Timer;
+
+ void Reset()
+ {
+ m_uiRECKONING_Timer = 2000; //inicia rapidamente
+ m_uiAURA_Timer = 1000;
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiAURA_Timer <= uiDiff)
+ {
+ DoCast(me, SPELL_AURA_OF_DARKNESS);
+ //cada 12 a 18 segs el aura of darkness
+ m_uiAURA_Timer = urand(12000, 18000);
+ }
+ else
+ m_uiAURA_Timer -= uiDiff;
+
+ if (m_uiRECKONING_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_DARK_RECKONING);
+ //repite cada 10 a 12 segs
+ m_uiRECKONING_Timer = urand(10000, 12000);
+ }
+ else
+ m_uiRECKONING_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_deathspeaker_high_priest_iccAI(creature);
+ }
+};
+
+//######### Valkyr Herald 10 man ##############
+class npc_valkyr_herald_10man_icc : public CreatureScript
+{
+ public:
+ npc_valkyr_herald_10man_icc() : CreatureScript("npc_valkyr_herald_10man_icc") { }
+
+ struct npc_valkyr_herald_10man_iccAI : public ScriptedAI
+ {
+ npc_valkyr_herald_10man_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiESSENCE_Timer;
+
+ void Reset()
+ {
+ m_uiESSENCE_Timer = 1000; //inicia rapidamente
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiESSENCE_Timer <= uiDiff)
+ {
+ DoCast(me, SPELL_SEVERED_ESSENCE_10M);
+ //cada 2 a 8 segs
+ m_uiESSENCE_Timer = urand(2000, 8000);
+ }
+ else
+ m_uiESSENCE_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_valkyr_herald_10man_iccAI(creature);
+ }
+};
+
+//######### Valkyr Herald 25 man ##############
+class npc_valkyr_herald_25man_icc : public CreatureScript
+{
+ public:
+ npc_valkyr_herald_25man_icc() : CreatureScript("npc_valkyr_herald_25man_icc") { }
+
+ struct npc_valkyr_herald_25man_iccAI : public ScriptedAI
+ {
+ npc_valkyr_herald_25man_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiESSENCE_Timer;
+
+ void Reset()
+ {
+ m_uiESSENCE_Timer = 1000; //inicia rapidamente
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiESSENCE_Timer <= uiDiff)
+ {
+ DoCast(me, SPELL_SEVERED_ESSENCE_25M);
+ //cada 2 a 8 segs
+ m_uiESSENCE_Timer = urand(2000, 8000);
+ }
+ else
+ m_uiESSENCE_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_valkyr_herald_25man_iccAI(creature);
+ }
+};
+
+//######### Blighted Abomination ##############
+class npc_blighted_abomination_icc : public CreatureScript
+{
+ public:
+ npc_blighted_abomination_icc() : CreatureScript("npc_blighted_abomination_icc") { }
+
+ struct npc_blighted_abomination_iccAI : public ScriptedAI
+ {
+ npc_blighted_abomination_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiCLOUD_Timer;
+ uint32 m_uiCLEAVE_Timer;
+ uint32 m_uiHOOK_Timer;
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void Reset()
+ {
+ m_uiCLOUD_Timer = 10000;
+ m_uiCLEAVE_Timer = 4000;
+ m_uiHOOK_Timer = 5000;
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiCLOUD_Timer <= uiDiff)
+ {
+ DoCastAOE(SPELL_PLAGUE_CLOUD);
+ //cada 20 segs
+ m_uiCLOUD_Timer = 20000;
+ }
+ else
+ m_uiCLOUD_Timer -= uiDiff;
+
+ if (m_uiHOOK_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_SCOURGE_HOOK);
+ //se repite cada 12 a 20 segs
+ m_uiHOOK_Timer = urand(12000, 20000);
+ }
+ else
+ m_uiHOOK_Timer -= uiDiff;
+
+ if (m_uiCLEAVE_Timer <= uiDiff)
+ {
+ DoCast(me->getVictim(), SPELL_CLEAVE);
+ //cada 6 segs
+ m_uiCLEAVE_Timer = 6000;
+ }
+ else
+ m_uiCLEAVE_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_blighted_abomination_iccAI(creature);
+ }
+};
+
+//######### Vengeful Fleshreaper ##############
+class npc_vengeful_fleshreapert_icc : public CreatureScript
+{
+ public:
+ npc_vengeful_fleshreapert_icc() : CreatureScript("npc_vengeful_fleshreapert_icc") { }
+
+ struct npc_vengeful_fleshreapert_iccAI : public ScriptedAI
+ {
+ npc_vengeful_fleshreapert_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiJUMP_Timer;
+ uint32 m_uiDEVOUR_Timer;
+
+ void Reset()
+ {
+ m_uiJUMP_Timer = urand(3000, 20000);
+ m_uiDEVOUR_Timer = urand(3000, 5000);
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiJUMP_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_LEAPING_FACE_MAUL);
+ //entre 20 y 40 segs
+ m_uiJUMP_Timer = urand(20000,40000);
+ }
+ else
+ m_uiJUMP_Timer -= uiDiff;
+
+ if (m_uiDEVOUR_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_DEVOUR_HUMANOID);
+ //entre 5 y 8 segs
+ m_uiDEVOUR_Timer = urand(5000,8000);
+ }
+ else
+ m_uiDEVOUR_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_vengeful_fleshreapert_iccAI(creature);
+ }
+};
+
+//######### Plague Scientist ##############
+class npc_plague_scientist_icc : public CreatureScript
+{
+ public:
+ npc_plague_scientist_icc() : CreatureScript("npc_plague_scientist_icc") { }
+
+ struct npc_plague_scientist_iccAI : public ScriptedAI
+ {
+ npc_plague_scientist_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiBLAST_Timer;
+ uint32 m_uiSTREAM_Timer;
+ uint32 m_uiSTREAM_OUT_Timer;
+ uint32 m_uiSPRAY_Timer;
+
+ void Reset()
+ {
+ m_uiBLAST_Timer = 2000;
+ m_uiSTREAM_Timer = urand(8000, 12000);
+ m_uiSTREAM_OUT_Timer = 24000;
+ m_uiSPRAY_Timer = urand(5000, 8000);
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiSTREAM_Timer <= uiDiff)
+ {
+ if (m_uiSTREAM_OUT_Timer > uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_PLAGUE_STREAM);
+ // maximo 24 segs para que deje de castear
+ m_uiSTREAM_OUT_Timer -= uiDiff;
+ }
+ else
+ {
+ me->CastStop(SPELL_PLAGUE_STREAM);
+ // se repite de entre 15 a 20 segs
+ m_uiSTREAM_OUT_Timer = urand(15000, 20000);
+ }
+ }
+ else
+ m_uiSTREAM_Timer -= uiDiff;
+
+ if (m_uiSPRAY_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_COMBOBULATING_SPRAY);
+ // cada 8 a 12 segs se repite
+ m_uiSPRAY_Timer = urand(8000, 12000);
+ }
+ else
+ m_uiSPRAY_Timer -= uiDiff;
+
+ if (m_uiBLAST_Timer <= uiDiff)
+ {
+ DoCast(me->getVictim(), SPELL_PLAGUE_BLAST);
+ // cada 2 a 3 segs se repite
+ m_uiBLAST_Timer = urand(2000, 3000);
+ }
+ else
+ m_uiBLAST_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_plague_scientist_iccAI(creature);
+ }
+};
+
+//######### Pustulating Horror 10 man ##############
+class npc_pustulating_horror_10man_icc : public CreatureScript
+{
+ public:
+ npc_pustulating_horror_10man_icc() : CreatureScript("npc_pustulating_horror_10man_icc") { }
+
+ struct npc_pustulating_horror_10man_iccAI : public ScriptedAI
+ {
+ npc_pustulating_horror_10man_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiPUS_Timer;
+
+ void Reset()
+ {
+ m_uiPUS_Timer = 2000; //iniciando rapido
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (HealthBelowPct(15)) // depende de la vida
+ {
+ DoCastAOE(SPELL_BLIGHT_BOMB);
+ // hacemos mas rapido el pus
+ m_uiPUS_Timer = 5000;
+ }
+
+ if (m_uiPUS_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_NEAREST, 0))
+ DoCast(target, SPELL_BUBBLING_PUS_10M);
+ if (HealthAbovePct(15))
+ // cada 15 a 25 segs se repite
+ m_uiPUS_Timer = urand(15000, 25000);
+ }
+ else
+ m_uiPUS_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_pustulating_horror_10man_iccAI(creature);
+ }
+};
+
+//######### Pustulating Horror 25 man ##############
+class npc_pustulating_horror_25man_icc : public CreatureScript
+{
+ public:
+ npc_pustulating_horror_25man_icc() : CreatureScript("npc_pustulating_horror_25man_icc") { }
+
+ struct npc_pustulating_horror_25man_iccAI : public ScriptedAI
+ {
+ npc_pustulating_horror_25man_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiPUS_Timer;
+
+ void Reset()
+ {
+ m_uiPUS_Timer = 2000; //iniciando rapido
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (HealthBelowPct(15)) // depende de la vida
+ {
+ DoCastAOE(SPELL_BLIGHT_BOMB);
+ // hacemos mas rapido el pus
+ m_uiPUS_Timer = 5000;
+ }
+
+ if (m_uiPUS_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_NEAREST, 0))
+ DoCast(target, SPELL_BUBBLING_PUS_25M);
+ if (HealthAbovePct(15))
+ // cada 15 a 20 segs se repite
+ m_uiPUS_Timer = urand(15000, 20000);
+ }
+ else
+ m_uiPUS_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_pustulating_horror_25man_iccAI(creature);
+ }
+};
+
+//######### Decaying Colossus 10 man ##############
+class npc_decaying_colossus_10man_icc : public CreatureScript
+{
+ public:
+ npc_decaying_colossus_10man_icc() : CreatureScript("npc_decaying_colossus_10man_icc") { }
+
+ struct npc_decaying_colossus_10man_iccAI : public ScriptedAI
+ {
+ npc_decaying_colossus_10man_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiSTOMP_Timer;
+
+ void Reset()
+ {
+ m_uiSTOMP_Timer = 5000;
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiSTOMP_Timer <= uiDiff)
+ {
+ DoCast(me->getVictim(), SPELL_MASSIVE_STOMP_10M);
+ // cada 15 a 25 segs se repite
+ m_uiSTOMP_Timer = urand(15000, 25000);
+ }
+ else
+ m_uiSTOMP_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_decaying_colossus_10man_iccAI(creature);
+ }
+};
+
+//######### Decaying Colossus 25 man ##############
+class npc_decaying_colossus_25man_icc : public CreatureScript
+{
+ public:
+ npc_decaying_colossus_25man_icc() : CreatureScript("npc_decaying_colossus_25man_icc") { }
+
+ struct npc_decaying_colossus_25man_iccAI : public ScriptedAI
+ {
+ npc_decaying_colossus_25man_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiSTOMP_Timer;
+
+ void Reset()
+ {
+ m_uiSTOMP_Timer = 5000;
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiSTOMP_Timer <= uiDiff)
+ {
+ DoCast(me->getVictim(), SPELL_MASSIVE_STOMP_25M);
+ // cada 15 a 25 segs se repite
+ m_uiSTOMP_Timer = urand(15000, 25000);
+ }
+ else
+ m_uiSTOMP_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_decaying_colossus_25man_iccAI(creature);
+ }
+};
+
+//######### Darkfallen Archmage 10 man ##############
+class npc_darkfallen_archmage_10man_icc : public CreatureScript
+{
+ public:
+ npc_darkfallen_archmage_10man_icc() : CreatureScript("npc_darkfallen_archmage_10man_icc") { }
+
+ struct npc_darkfallen_archmage_10man_iccAI : public ScriptedAI
+ {
+ npc_darkfallen_archmage_10man_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiAMPLIFY_Timer;
+ uint32 m_uiBLAST_Timer;
+ uint32 m_uiFIREBALL_Timer;
+ uint32 m_uiPOLYMORPH_Timer;
+
+ void Reset()
+ {
+ m_uiAMPLIFY_Timer = urand(10000, 15000);
+ m_uiBLAST_Timer = urand(8000, 10000);
+ m_uiFIREBALL_Timer = 2000;
+ m_uiPOLYMORPH_Timer = urand(9000, 12000);
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiAMPLIFY_Timer <= uiDiff)
+ {
+ DoCast(me->getVictim(), SPELL_AMPLIFY_MAGIC_10M);
+ // amplificar cada 15 a 20 segs
+ m_uiAMPLIFY_Timer = urand(15000, 20000);
+ }
+ else
+ m_uiAMPLIFY_Timer -= uiDiff;
+
+ if (m_uiPOLYMORPH_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_POLYMORPH_SPIDER);
+ // se repite cada 15 a 18 segs
+ m_uiPOLYMORPH_Timer = urand(15000, 18000);
+ }
+ else
+ m_uiPOLYMORPH_Timer -= uiDiff;
+
+ if (m_uiFIREBALL_Timer <= uiDiff)
+ {
+ DoCast(me->getVictim(), SPELL_FIREBALL_10M);
+ // repite cada 3 a 4 segs
+ m_uiFIREBALL_Timer = urand(3000, 4000);
+ }
+ else
+ m_uiFIREBALL_Timer -= uiDiff;
+
+ if (m_uiBLAST_Timer <= uiDiff)
+ {
+ DoCastAOE(SPELL_BLAST_WAVE_10M);
+ // repite el blast de 10 a 20 segs
+ m_uiBLAST_Timer = urand(10000, 20000);
+ }
+ else
+ m_uiBLAST_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_darkfallen_archmage_10man_iccAI(creature);
+ }
+};
+
+//######### Darkfallen Archmage 25 man ##############
+class npc_darkfallen_archmage_25man_icc : public CreatureScript
+{
+ public:
+ npc_darkfallen_archmage_25man_icc() : CreatureScript("npc_darkfallen_archmage_25man_icc") { }
+
+ struct npc_darkfallen_archmage_25man_iccAI : public ScriptedAI
+ {
+ npc_darkfallen_archmage_25man_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiAMPLIFY_Timer;
+ uint32 m_uiBLAST_Timer;
+ uint32 m_uiFIREBALL_Timer;
+ uint32 m_uiPOLYMORPH_Timer;
+
+ void Reset()
+ {
+ m_uiAMPLIFY_Timer = urand(10000, 15000);
+ m_uiBLAST_Timer = urand(8000, 10000);
+ m_uiFIREBALL_Timer = 2000;
+ m_uiPOLYMORPH_Timer = urand(9000, 12000);
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiAMPLIFY_Timer <= uiDiff)
+ {
+ DoCast(me->getVictim(), SPELL_AMPLIFY_MAGIC_25M);
+ // amplificar de 10 a 15 segs
+ m_uiAMPLIFY_Timer = urand(10000, 15000);
+ }
+ else
+ m_uiAMPLIFY_Timer -= uiDiff;
+
+ if (m_uiPOLYMORPH_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_POLYMORPH_SPIDER);
+ // se repite cada 12 a 15 segs
+ m_uiPOLYMORPH_Timer = urand(12000, 15000);
+ }
+ else
+ m_uiPOLYMORPH_Timer -= uiDiff;
+
+ if (m_uiFIREBALL_Timer <= uiDiff)
+ {
+ DoCast(me->getVictim(), SPELL_FIREBALL_25M);
+ // repite cada 2 a 3 segs
+ m_uiFIREBALL_Timer = urand(2000, 3000);
+ }
+ else
+ m_uiFIREBALL_Timer -= uiDiff;
+
+ if (m_uiBLAST_Timer <= uiDiff)
+ {
+ DoCastAOE(SPELL_BLAST_WAVE_25M);
+ // repite el blast de 10 a 20 segs
+ m_uiBLAST_Timer = urand(10000, 20000);
+ }
+ else
+ m_uiBLAST_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_darkfallen_archmage_25man_iccAI(creature);
+ }
+};
+
+//######### Darkfallen Blood Knight ##############
+class npc_darkfallen_blood_knight_icc : public CreatureScript
+{
+ public:
+ npc_darkfallen_blood_knight_icc() : CreatureScript("npc_darkfallen_blood_knight_icc") { }
+
+ struct npc_darkfallen_blood_knight_iccAI : public ScriptedAI
+ {
+ npc_darkfallen_blood_knight_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiAURA_Timer;
+ uint32 m_uiSTRIKE_Timer;
+ uint32 m_uiMIRROR_Timer;
+
+ void Reset()
+ {
+ m_uiAURA_Timer = urand(12000, 15000);
+ m_uiSTRIKE_Timer = urand(2000, 3000); //iniciando rapido
+ m_uiMIRROR_Timer = urand(4000, 5000); //iniciando rapido
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiSTRIKE_Timer <= uiDiff)
+ {
+ DoCast(me->getVictim(), SPELL_UNHOLY_STRIKE);
+ // castea cada 3 a 4 segs
+ m_uiSTRIKE_Timer = urand(3000, 4000);
+ }
+ else
+ m_uiSTRIKE_Timer -= uiDiff;
+
+ if (m_uiAURA_Timer <= uiDiff)
+ {
+ DoCast(me, SPELL_VAMPIRIC_AURA);
+ // casteando cada 12 a 15 segs
+ m_uiAURA_Timer = urand(12000, 15000);
+ }
+ else
+ m_uiAURA_Timer -= uiDiff;
+
+ if (m_uiMIRROR_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ {
+ DoCast(me->getVictim(),SPELL_BLOOD_MIRROR_DUMMY);
+ me->getVictim()->CastSpell(target,SPELL_BLOOD_MIRROR_DAMAGE,true);
+ me->CastSpell(me->getVictim(),SPELL_BLOOD_MIRROR_BUFF,true);
+ // castea el mirror entre 32 a 37 segs para ayudar un poco
+ m_uiMIRROR_Timer = urand(32000, 37000);
+ }
+ }
+ else
+ m_uiMIRROR_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_darkfallen_blood_knight_iccAI(creature);
+ }
+};
+
+//######### Darkfallen Noble 10 man ##############
+class npc_darkfallen_noble_10man_icc : public CreatureScript
+{
+ public:
+ npc_darkfallen_noble_10man_icc() : CreatureScript("npc_darkfallen_noble_10man_icc") { }
+
+ struct npc_darkfallen_noble_10man_iccAI : public ScriptedAI
+ {
+ npc_darkfallen_noble_10man_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiCHAINS_Timer;
+ uint32 m_uiBOLT_Timer;
+ uint32 m_uiFIEND_Timer;
+
+ void Reset()
+ {
+ m_uiCHAINS_Timer = urand(2000, 4000); //inicia rapido
+ m_uiBOLT_Timer = urand(3000, 5000);
+ m_uiFIEND_Timer = 15000;
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiBOLT_Timer <= uiDiff)
+ {
+ DoCast(me->getVictim(), SPELL_SHADOW_BOLT_10M);
+ // castea cada 4 a 5 segs
+ m_uiBOLT_Timer = urand(4000, 5000);
+ }
+ else
+ m_uiBOLT_Timer -= uiDiff;
+
+ if (m_uiCHAINS_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_CHAINS_OF_SHADOW);
+ // las cadenas si cada 20 a 25 segs
+ m_uiCHAINS_Timer = urand(20000, 25000);
+ }
+ else
+ m_uiCHAINS_Timer -= uiDiff;
+
+ if (m_uiFIEND_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ if (me->SummonCreature(NPC_VAMPIRIC_FIEND,target->GetPositionX(),target->GetPositionY(),target->GetPositionZ()))
+ // lo summonea cada minuto al esbirro
+ m_uiFIEND_Timer = 60000;
+ }
+ else
+ m_uiFIEND_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_darkfallen_noble_10man_iccAI(creature);
+ }
+};
+
+//######### Darkfallen Noble 25 man ##############
+class npc_darkfallen_noble_25man_icc : public CreatureScript
+{
+ public:
+ npc_darkfallen_noble_25man_icc() : CreatureScript("npc_darkfallen_noble_25man_icc") { }
+
+ struct npc_darkfallen_noble_25man_iccAI : public ScriptedAI
+ {
+ npc_darkfallen_noble_25man_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiCHAINS_Timer;
+ uint32 m_uiBOLT_Timer;
+ uint32 m_uiFIEND_Timer;
+
+ void Reset()
+ {
+ m_uiCHAINS_Timer = urand(2000, 4000); //inicia rapido
+ m_uiBOLT_Timer = urand(3000, 5000);
+ m_uiFIEND_Timer = 15000;
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiBOLT_Timer <= uiDiff)
+ {
+ DoCast(me->getVictim(), SPELL_SHADOW_BOLT_25M);
+ // castea cada 3 a 4 segs
+ m_uiBOLT_Timer = urand(3000, 4000);
+ }
+ else
+ m_uiBOLT_Timer -= uiDiff;
+
+ if (m_uiCHAINS_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_CHAINS_OF_SHADOW);
+ // las cadenas cada 15 a 20 segs
+ m_uiCHAINS_Timer = urand(15000, 20000);
+ }
+ else
+ m_uiCHAINS_Timer -= uiDiff;
+
+ if (m_uiFIEND_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ if (me->SummonCreature(NPC_VAMPIRIC_FIEND,target->GetPositionX(),target->GetPositionY(),target->GetPositionZ()))
+ // lo summonea cada minuto al esbirro
+ m_uiFIEND_Timer = 60000;
+ }
+ else
+ m_uiFIEND_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_darkfallen_noble_25man_iccAI(creature);
+ }
+};
+
+ //######### Npc Vampiric Fiend ##############
+class npc_vampiric_fiend_icc : public CreatureScript
+{
+ public:
+ npc_vampiric_fiend_icc() : CreatureScript("npc_vampiric_fiend_icc") { }
+
+ struct npc_vampiric_fiend_iccAI : public ScriptedAI
+ {
+ npc_vampiric_fiend_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiLEECHING_Timer;
+
+ void Reset()
+ {
+ m_uiLEECHING_Timer = 10000;
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void EnterCombat(Unit* /*target*/)
+ {
+ DoCast(me, SPELL_DISEASE_CLOUD);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiLEECHING_Timer <= uiDiff)
+ {
+ DoCastAOE(SPELL_LEECHING_ROT);
+ // despawn en 3 segs despues de chupar
+ me->ForcedDespawn(3000);
+ // castea cada 10 segs
+ m_uiLEECHING_Timer = 10000;
+ }
+ else
+ m_uiLEECHING_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_vampiric_fiend_iccAI(creature);
+ }
+};
+
+//######### Darkfallen Advisor 10 man ##############
+class npc_darkfallen_advisor_10man_icc : public CreatureScript
+{
+ public:
+ npc_darkfallen_advisor_10man_icc() : CreatureScript("npc_darkfallen_advisor_10man_icc") { }
+
+ struct npc_darkfallen_advisor_10man_iccAI : public ScriptedAI
+ {
+ npc_darkfallen_advisor_10man_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiLICH_Timer;
+ uint32 m_uiPROTECTION_Timer;
+
+ void Reset()
+ {
+ m_uiLICH_Timer = urand(2000, 5000); //inicia rapido
+ m_uiPROTECTION_Timer = urand(10000, 15000);
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiLICH_Timer <= uiDiff)
+ {
+ DoCast(me->getVictim(), SPELL_LICH_SLAP_10M);
+ // castea cada 10 segs
+ m_uiLICH_Timer = 10000;
+ }
+ else
+ m_uiLICH_Timer -= uiDiff;
+
+ if (m_uiPROTECTION_Timer <= uiDiff)
+ {
+ if (Unit* target = urand(0, 1) ? SelectTarget(SELECT_TARGET_RANDOM, 0) : DoSelectLowestHpFriendly(40.0f))
+ {
+ DoCast(target,SPELL_SHROUD_OF_PROTECTION);
+ DoCast(target,SPELL_SHROUD_OF_SPELL_WARDING);
+ //casteando proteccion entr 15 a 20 segs
+ m_uiPROTECTION_Timer = urand(15000, 20000);
+ }
+ }
+ else
+ m_uiPROTECTION_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_darkfallen_advisor_10man_iccAI(creature);
+ }
+};
+
+//######### Darkfallen Advisor 25 man ##############
+class npc_darkfallen_advisor_25man_icc : public CreatureScript
+{
+ public:
+ npc_darkfallen_advisor_25man_icc() : CreatureScript("npc_darkfallen_advisor_25man_icc") { }
+
+ struct npc_darkfallen_advisor_25man_iccAI : public ScriptedAI
+ {
+ npc_darkfallen_advisor_25man_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiLICH_Timer;
+ uint32 m_uiPROTECTION_Timer;
+
+ void Reset()
+ {
+ m_uiLICH_Timer = urand(2000, 5000); //inicia rapido
+ m_uiPROTECTION_Timer = urand(10000, 15000);
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiLICH_Timer <= uiDiff)
+ {
+ DoCast(me->getVictim(), SPELL_LICH_SLAP_25M);
+ // castea entre 5 y 8 segs
+ m_uiLICH_Timer = urand(5000, 8000);
+ }
+ else
+ m_uiLICH_Timer -= uiDiff;
+
+ if (m_uiPROTECTION_Timer <= uiDiff)
+ {
+ if (Unit* target = urand(0, 1) ? SelectTarget(SELECT_TARGET_RANDOM, 0) : DoSelectLowestHpFriendly(40.0f))
+ {
+ DoCast(target,SPELL_SHROUD_OF_PROTECTION);
+ DoCast(target,SPELL_SHROUD_OF_SPELL_WARDING);
+ //casteando proteccion entr 12 a 15 segs
+ m_uiPROTECTION_Timer = urand(12000, 15000);
+ }
+ }
+ else
+ m_uiPROTECTION_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_darkfallen_advisor_25man_iccAI(creature);
+ }
+};
+
+//######### Darkfallen Commander 10 man ##############
+class npc_darkfallen_commander_10man_icc : public CreatureScript
+{
+ public:
+ npc_darkfallen_commander_10man_icc() : CreatureScript("npc_darkfallen_commander_10man_icc") { }
+
+ struct npc_darkfallen_commander_10man_iccAI : public ScriptedAI
+ {
+ npc_darkfallen_commander_10man_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiRUSH_Timer;
+ uint32 m_uiSHOUT_Timer;
+
+ void Reset()
+ {
+ m_uiRUSH_Timer = urand(4000, 8000); //inicia rapido
+ m_uiSHOUT_Timer = urand(8000, 10000); //incia rapido
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiSHOUT_Timer <= uiDiff)
+ {
+ DoCast(me, SPELL_BATTLE_SHOUT);
+ // cada 15 a 20 segs
+ m_uiSHOUT_Timer = urand(15000, 20000);
+ }
+ else
+ m_uiSHOUT_Timer -= uiDiff;
+
+ if (m_uiRUSH_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_VAMPIRE_RUSH_10M);
+ // castea cada 10 a 15 segs
+ m_uiRUSH_Timer = urand(10000, 15000);
+ }
+ else
+ m_uiRUSH_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_darkfallen_commander_10man_iccAI(creature);
+ }
+};
+
+//######### Darkfallen Commander 25 man ##############
+class npc_darkfallen_commander_25man_icc : public CreatureScript
+{
+ public:
+ npc_darkfallen_commander_25man_icc() : CreatureScript("npc_darkfallen_commander_25man_icc") { }
+
+ struct npc_darkfallen_commander_25man_iccAI : public ScriptedAI
+ {
+ npc_darkfallen_commander_25man_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiRUSH_Timer;
+ uint32 m_uiSHOUT_Timer;
+
+ void Reset()
+ {
+ m_uiRUSH_Timer = urand(4000, 8000); //inicia rapido
+ m_uiSHOUT_Timer = urand(8000, 10000); //incia rapido
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiSHOUT_Timer <= uiDiff)
+ {
+ DoCast(me, SPELL_BATTLE_SHOUT);
+ // cada 15 a 20 segs
+ m_uiSHOUT_Timer = urand(15000, 20000);
+ }
+ else
+ m_uiSHOUT_Timer -= uiDiff;
+
+ if (m_uiRUSH_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_VAMPIRE_RUSH_25M);
+ // castea cada 10 a 15 segs
+ m_uiRUSH_Timer = urand(10000, 15000);
+ }
+ else
+ m_uiRUSH_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_darkfallen_commander_25man_iccAI(creature);
+ }
+};
+
+//######### Darkfallen Lieutenant 10M ##############
+class npc_darkfallen_lieutenant_10man_icc : public CreatureScript
+{
+ public:
+ npc_darkfallen_lieutenant_10man_icc() : CreatureScript("npc_darkfallen_lieutenant_10man_icc") { }
+
+ struct npc_darkfallen_lieutenant_10man_iccAI : public ScriptedAI
+ {
+ npc_darkfallen_lieutenant_10man_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiREND_Timer;
+ uint32 m_uiCURSE_Timer;
+
+ void Reset()
+ {
+ m_uiREND_Timer = urand(1000, 2000); //inicia rapido
+ m_uiCURSE_Timer = urand(8000, 15000);
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiREND_Timer <= uiDiff)
+ {
+ DoCast(me->getVictim(), SPELL_REND_FLESH_10M);
+ // cada 25 segs
+ m_uiREND_Timer = 25000;
+ }
+ else
+ m_uiREND_Timer -= uiDiff;
+
+ if (m_uiCURSE_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_VAMPIRIC_CURSE);
+ // entre 10 a 20 segs
+ m_uiCURSE_Timer = urand(10000, 20000);
+ }
+ else
+ m_uiCURSE_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_darkfallen_lieutenant_10man_iccAI(creature);
+ }
+};
+
+//######### Darkfallen Lieutenant 25M ##############
+class npc_darkfallen_lieutenant_25man_icc : public CreatureScript
+{
+ public:
+ npc_darkfallen_lieutenant_25man_icc() : CreatureScript("npc_darkfallen_lieutenant_25man_icc") { }
+
+ struct npc_darkfallen_lieutenant_25man_iccAI : public ScriptedAI
+ {
+ npc_darkfallen_lieutenant_25man_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiREND_Timer;
+ uint32 m_uiCURSE_Timer;
+
+ void Reset()
+ {
+ m_uiREND_Timer = urand(1000, 2000); //inicia rapido
+ m_uiCURSE_Timer = urand(8000, 15000);
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiREND_Timer <= uiDiff)
+ {
+ DoCast(me->getVictim(), SPELL_REND_FLESH_25M);
+ // igual cada 25 segs
+ m_uiREND_Timer = 25000;
+ }
+ else
+ m_uiREND_Timer -= uiDiff;
+
+ if (m_uiCURSE_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_VAMPIRIC_CURSE);
+ // entre 10 y 20 segs
+ m_uiCURSE_Timer = urand(10000, 20000);
+ }
+ else
+ m_uiCURSE_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_darkfallen_lieutenant_25man_iccAI(creature);
+ }
+};
+
+//######### Darkfallen Tactician ##############
+class npc_darkfallen_tactician_icc : public CreatureScript
+{
+ public:
+ npc_darkfallen_tactician_icc() : CreatureScript("npc_darkfallen_tactician_icc") { }
+
+ struct npc_darkfallen_tactician_iccAI : public ScriptedAI
+ {
+ npc_darkfallen_tactician_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiSHADOWSTEP_Timer;
+ uint32 m_uiSAP_Timer;
+ uint32 m_uiSTRIKE_Timer;
+
+ void Reset()
+ {
+ m_uiSHADOWSTEP_Timer = urand(1000, 2000); //inicia rapido
+ m_uiSAP_Timer = urand(5000, 15000);
+ m_uiSTRIKE_Timer = urand(2000, 3000); //inicia rapido
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiSTRIKE_Timer <= uiDiff)
+ {
+ DoCast(me->getVictim(), SPELL_UNHOLY_STRIKE);
+ // cada 6 segs
+ m_uiSTRIKE_Timer = 6000;
+ }
+ else
+ m_uiSTRIKE_Timer -= uiDiff;
+
+ if (m_uiSAP_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_BLOOD_SAP);
+ // entre 15 y 25 segs
+ m_uiSAP_Timer = urand(15000, 25000);
+ }
+ else
+ m_uiSAP_Timer -= uiDiff;
+
+ if (m_uiSHADOWSTEP_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_SHADOWSTEP);
+ // entre 15 y 20 segs
+ m_uiSHADOWSTEP_Timer = urand(15000, 20000);
+ }
+ else
+ m_uiSHADOWSTEP_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_darkfallen_tactician_iccAI(creature);
+ }
+};
+
+//######### Ymirjar Deathbringer 10 man ##############
+class npc_ymirjar_deathbringer_10man_icc : public CreatureScript
+{
+ public:
+ npc_ymirjar_deathbringer_10man_icc() : CreatureScript("npc_ymirjar_deathbringer_10man_icc") { }
+
+ struct npc_ymirjar_deathbringer_10man_iccAI : public ScriptedAI
+ {
+ npc_ymirjar_deathbringer_10man_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiBANISH_Timer;
+ uint32 m_uiEMBRACE_Timer;
+ uint32 m_uiBOLT_Timer;
+
+ void Reset()
+ {
+ m_uiBANISH_Timer = urand(5000, 10000);
+ m_uiEMBRACE_Timer = urand(10000, 15000);
+ m_uiBOLT_Timer = urand(1000, 2000);
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiEMBRACE_Timer <= uiDiff)
+ {
+ DoCast(me, SPELL_DEATHS_EMBRACE_10M);
+ // cada 15 a 25 segs
+ m_uiEMBRACE_Timer = urand(15000, 25000);
+ }
+ else
+ m_uiEMBRACE_Timer -= uiDiff;
+
+ if (m_uiBANISH_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_BANISH);
+ //repite cada 15 a 25 segs
+ m_uiBANISH_Timer = urand(15000, 25000);
+ }
+ else
+ m_uiBANISH_Timer -= uiDiff;
+
+ if (m_uiBOLT_Timer <= uiDiff)
+ {
+ DoCast(me->getVictim(),SPELL_SHADOW_BOLT_YMIRJAR_10M);
+ //repite cada 2 segs
+ m_uiBOLT_Timer = 2000;
+ }
+ else
+ m_uiBOLT_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_ymirjar_deathbringer_10man_iccAI(creature);
+ }
+};
+
+//######### Ymirjar Deathbringer 25 man ##############
+class npc_ymirjar_deathbringer_25man_icc : public CreatureScript
+{
+ public:
+ npc_ymirjar_deathbringer_25man_icc() : CreatureScript("npc_ymirjar_deathbringer_25man_icc") { }
+
+ struct npc_ymirjar_deathbringer_25man_iccAI : public ScriptedAI
+ {
+ npc_ymirjar_deathbringer_25man_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiBANISH_Timer;
+ uint32 m_uiEMBRACE_Timer;
+ uint32 m_uiBOLT_Timer;
+
+ void Reset()
+ {
+ m_uiBANISH_Timer = urand(5000, 10000);
+ m_uiEMBRACE_Timer = urand(5000, 10000); //inicia rapido
+ m_uiBOLT_Timer = urand(1000, 2000);
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiEMBRACE_Timer <= uiDiff)
+ {
+ DoCast(me, SPELL_DEATHS_EMBRACE_25M);
+ // cada 15 a 20 segs
+ m_uiEMBRACE_Timer = urand(15000, 20000);
+ }
+ else
+ m_uiEMBRACE_Timer -= uiDiff;
+
+ if (m_uiBANISH_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_BANISH);
+ //repite cada 15 a 20 segs
+ m_uiBANISH_Timer = urand(15000, 20000);
+ }
+ else
+ m_uiBANISH_Timer -= uiDiff;
+
+ if (m_uiBOLT_Timer <= uiDiff)
+ {
+ DoCast(me->getVictim(),SPELL_SHADOW_BOLT_YMIRJAR_25M);
+ //repite cada 2 segs
+ m_uiBOLT_Timer = 2000;
+ }
+ else
+ m_uiBOLT_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_ymirjar_deathbringer_25man_iccAI(creature);
+ }
+};
+
+//######### Ymirjar Frostbinder ##############
+class npc_ymirjar_frostbinder_icc : public CreatureScript
+{
+ public:
+ npc_ymirjar_frostbinder_icc() : CreatureScript("npc_ymirjar_frostbinder_icc") { }
+
+ struct npc_ymirjar_frostbinder_iccAI : public ScriptedAI
+ {
+ npc_ymirjar_frostbinder_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiORB_Timer;
+
+ void Reset()
+ {
+ m_uiORB_Timer = 1000;
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiORB_Timer <= uiDiff)
+ {
+ DoCastAOE(SPELL_FROZEN_ORB);
+ //repite cada 3 a 5 segs
+ m_uiORB_Timer = urand(3000, 5000);
+ }
+ else
+ m_uiORB_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_ymirjar_frostbinder_iccAI(creature);
+ }
+};
+
+//######### Ymirjar Battle-Maiden ##############
+class npc_ymirjar_battlemaiden_icc : public CreatureScript
+{
+ public:
+ npc_ymirjar_battlemaiden_icc() : CreatureScript("npc_ymirjar_battlemaiden_icc") { }
+
+ struct npc_ymirjar_battlemaiden_iccAI : public ScriptedAI
+ {
+ npc_ymirjar_battlemaiden_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiRUSH_Timer;
+ uint32 m_uiSTRIKE_Timer;
+
+ void Reset()
+ {
+ m_uiRUSH_Timer = urand(10000, 15000);
+ m_uiSTRIKE_Timer = urand(1000, 5000);
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiSTRIKE_Timer <= uiDiff)
+ {
+ DoCast(me->getVictim(), SPELL_BARBARIC_STRIKE);
+ // cada 2 a 3 segs
+ m_uiSTRIKE_Timer = urand(2000, 3000);
+ }
+ else
+ m_uiSTRIKE_Timer -= uiDiff;
+
+ if (m_uiRUSH_Timer <= uiDiff)
+ {
+ DoCast(me, SPELL_ADRENALINE_RUSH);
+ //repite cada 15 a 25 segs
+ m_uiRUSH_Timer = urand(15000, 25000);
+ }
+ else
+ m_uiRUSH_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_ymirjar_battlemaiden_iccAI(creature);
+ }
+};
+
+//######### Ymirjar Huntress ##############
+class npc_ymirjar_huntress_icc : public CreatureScript
+{
+ public:
+ npc_ymirjar_huntress_icc() : CreatureScript("npc_ymirjar_huntress_icc") { }
+
+ struct npc_ymirjar_huntress_iccAI : public ScriptedAI
+ {
+ npc_ymirjar_huntress_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiTRAP_Timer;
+ uint32 m_uiRSHOT_Timer;
+ uint32 m_uiSHOT_Timer;
+ uint32 m_uiVOLLEY_Timer;
+
+ void Reset()
+ {
+ m_uiTRAP_Timer = urand(5000, 15000);
+ m_uiRSHOT_Timer = urand(10000, 15000);
+ m_uiSHOT_Timer = urand(1000, 2000);
+ m_uiVOLLEY_Timer = urand(5000, 15000);
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void EnterCombat(Unit* /*target*/)
+ {
+ if (Is25ManRaid())
+ DoCast(SPELL_SUMMON_WARHAWK);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiRSHOT_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_RAPID_SHOT);
+ // cada 15 a 25 segs
+ m_uiRSHOT_Timer = urand(15000, 25000);
+ }
+ else
+ m_uiRSHOT_Timer -= uiDiff;
+
+ if (m_uiVOLLEY_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target,SPELL_VOLLEY);
+ //repite cada 10 a 15 segs
+ m_uiVOLLEY_Timer = urand(10000, 15000);
+ }
+ else
+ m_uiVOLLEY_Timer -= uiDiff;
+
+ if (m_uiTRAP_Timer <= uiDiff)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ DoCast(target, SPELL_ICE_TRAP);
+ //repite cada 30 a 35 segs
+ m_uiTRAP_Timer = urand(30000, 35000);
+ }
+ else
+ m_uiTRAP_Timer -= uiDiff;
+
+ if (me->isAttackReady())
+ {
+ if (me->IsWithinMeleeRange(me->getVictim()))
+ DoMeleeAttackIfReady();
+ else if (m_uiSHOT_Timer <= uiDiff)
+ {
+ DoCast(me->getVictim(),SPELL_SHOOT);
+ m_uiSHOT_Timer = 1000;
+ }
+ else
+ m_uiSHOT_Timer -= uiDiff;
+ }
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_ymirjar_huntress_iccAI(creature);
+ }
+};
+
+//######### Ymirjar Warlord ##############
+class npc_ymirjar_warlord_icc : public CreatureScript
+{
+ public:
+ npc_ymirjar_warlord_icc() : CreatureScript("npc_ymirjar_warlord_icc") { }
+
+ struct npc_ymirjar_warlord_iccAI : public ScriptedAI
+ {
+ npc_ymirjar_warlord_iccAI(Creature* pCreature) : ScriptedAI(pCreature) {}
+
+ uint32 m_uiWHIRLWIND_Timer;
+
+ void Reset()
+ {
+ m_uiWHIRLWIND_Timer = urand(5000, 15000);
+ }
+
+ void JustDied(Unit* killer)
+ {
+ DoCast(me,SPELL_SOUL_FEAST_ALL);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (m_uiWHIRLWIND_Timer <= uiDiff)
+ {
+ DoCastAOE(SPELL_WHIRLWIND);
+ //repite cada 12 a 20 segs
+ m_uiWHIRLWIND_Timer = urand(12000, 20000);
+ }
+ else
+ m_uiWHIRLWIND_Timer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature *creature) const
+ {
+ return new npc_ymirjar_warlord_iccAI(creature);
+ }
+};
+
+void AddSC_icecrown_citadel_trashmobs()
+{
+ new npc_ancient_skeletal_soldier_icc();
+ new npc_deathbound_ward_icc();
+ new npc_servant_of_the_throne_icc();
+ // new npc_the_damned_icc();
+ new npc_deathspeaker_servant_10man_icc();
+ new npc_deathspeaker_servant_25man_icc();
+ new npc_deathspeaker_disciple_10man_icc();
+ new npc_deathspeaker_disciple_25man_icc();
+ new npc_deathspeaker_attendant_10man_icc();
+ new npc_deathspeaker_attendant_25man_icc();
+ new npc_deathspeaker_zealot_icc();
+ new npc_deathspeaker_high_priest_icc();
+ new npc_valkyr_herald_10man_icc();
+ new npc_valkyr_herald_25man_icc();
+ new npc_blighted_abomination_icc();
+ new npc_vengeful_fleshreapert_icc();
+ new npc_plague_scientist_icc();
+ new npc_pustulating_horror_10man_icc();
+ new npc_pustulating_horror_25man_icc();
+ new npc_decaying_colossus_10man_icc();
+ new npc_decaying_colossus_25man_icc();
+ new npc_darkfallen_archmage_10man_icc();
+ new npc_darkfallen_archmage_25man_icc();
+ new npc_darkfallen_blood_knight_icc();
+ new npc_darkfallen_noble_10man_icc();
+ new npc_darkfallen_noble_25man_icc();
+ new npc_vampiric_fiend_icc();
+ new npc_darkfallen_advisor_10man_icc();
+ new npc_darkfallen_advisor_25man_icc();
+ new npc_darkfallen_commander_10man_icc();
+ new npc_darkfallen_commander_25man_icc();
+ new npc_darkfallen_lieutenant_10man_icc();
+ new npc_darkfallen_lieutenant_25man_icc();
+ new npc_darkfallen_tactician_icc();
+ new npc_ymirjar_deathbringer_10man_icc();
+ new npc_ymirjar_deathbringer_25man_icc();
+ new npc_ymirjar_frostbinder_icc();
+ new npc_ymirjar_battlemaiden_icc();
+ new npc_ymirjar_huntress_icc();
+ new npc_ymirjar_warlord_icc();
+}
\ No newline at end of file
--
1.7.8.msysgit.0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment