Scripts/The Slave Pens: Fix up Mennu the Betrayer and add Rokmar the Cracker & Quagmirran.

This commit is contained in:
Malcrom committed 2013-11-10 18:00:15 -03:30
1 parent e0138abaac
commit 113735690a
6 files changed
+316 -37

No files matched your search

@@ -0,0 +1,13 @@
UPDATE `creature_template` SET `AIName` = '', `ScriptName`= 'boss_rokmar_the_crackler' WHERE entry=17991;
DELETE FROM creature_ai_scripts WHERE creature_id=17991;
UPDATE `creature_template` SET `AIName` = '', `ScriptName`= 'boss_mennu_the_betrayer' WHERE entry=17941;
DELETE FROM creature_ai_scripts WHERE creature_id=17941;
DELETE FROM creature_ai_texts WHERE entry BETWEEN -98 AND -93;
UPDATE `creature_template` SET `AIName` = '', `ScriptName`= 'boss_quagmirran' WHERE entry=17942;
DELETE FROM creature_ai_scripts WHERE creature_id=17942;
-- Add missing spelldifficulty_dbc values
DELETE FROM `spelldifficulty_dbc` WHERE `id` IN (31956,34780);
INSERT INTO `spelldifficulty_dbc` (`id`,`spellid0`,`spellid1`) VALUES
(31956,31956,39005), -- Rokmar the Crackler
(34780,34780,39340); -- Quagmirran
+29 -14
View File
@@ -575,7 +575,7 @@ void AddSC_boss_grandmaster_vorpil();
void AddSC_boss_murmur();
void AddSC_instance_shadow_labyrinth();
//Black Temple
// Black Temple
void AddSC_black_temple();
void AddSC_boss_illidan();
void AddSC_boss_shade_of_akama();
@@ -588,7 +588,7 @@ void AddSC_boss_najentus();
void AddSC_boss_illidari_council();
void AddSC_instance_black_temple();
//Coilfang Reservoir - Serpent Shrine Cavern
// Coilfang Reservoir - Serpent Shrine Cavern
void AddSC_boss_fathomlord_karathress();
void AddSC_boss_hydross_the_unstable();
void AddSC_boss_lady_vashj();
@@ -597,22 +597,24 @@ void AddSC_boss_morogrim_tidewalker();
void AddSC_instance_serpentshrine_cavern();
void AddSC_boss_the_lurker_below();
//Coilfang Reservoir - The Steam Vault
// Coilfang Reservoir - The Steam Vault
void AddSC_boss_hydromancer_thespia();
void AddSC_boss_mekgineer_steamrigger();
void AddSC_boss_warlord_kalithresh();
void AddSC_instance_steam_vault();
//Coilfang Reservoir - The Slave Pens
// Coilfang Reservoir - The Slave Pens
void AddSC_instance_the_slave_pens();
void AddSC_boss_mennu_the_betrayer();
void AddSC_boss_rokmar_the_crackler();
void AddSC_boss_quagmirran();
//Coilfang Reservoir - The Underbog
// Coilfang Reservoir - The Underbog
void AddSC_instance_the_underbog();
void AddSC_boss_hungarfen();
void AddSC_boss_the_black_stalker();
//Gruul's Lair
// Gruul's Lair
void AddSC_boss_gruul();
void AddSC_boss_high_king_maulgar();
void AddSC_instance_gruuls_lair();
@@ -1111,7 +1113,8 @@ void AddOutlandScripts()
AddSC_boss_murmur();
AddSC_instance_shadow_labyrinth();
AddSC_black_temple(); //Black Temple
// Black Temple
AddSC_black_temple();
AddSC_boss_illidan();
AddSC_boss_shade_of_akama();
AddSC_boss_supremus();
@@ -1122,23 +1125,35 @@ void AddOutlandScripts()
AddSC_boss_najentus();
AddSC_boss_illidari_council();
AddSC_instance_black_temple();
AddSC_boss_fathomlord_karathress(); //CR Serpent Shrine Cavern
// Coilfang Reservoir - Serpent Shrine Cavern
AddSC_boss_fathomlord_karathress();
AddSC_boss_hydross_the_unstable();
AddSC_boss_lady_vashj();
AddSC_boss_leotheras_the_blind();
AddSC_boss_morogrim_tidewalker();
AddSC_instance_serpentshrine_cavern();
AddSC_boss_the_lurker_below();
AddSC_boss_hydromancer_thespia(); //CR Steam Vault
// Coilfang Reservoir - The Steam Vault
AddSC_instance_steam_vault();
AddSC_boss_hydromancer_thespia();
AddSC_boss_mekgineer_steamrigger();
AddSC_boss_warlord_kalithresh();
AddSC_instance_steam_vault();
AddSC_instance_the_slave_pens(); //The Slave Pens
// Coilfang Reservoir - The Slave Pens
AddSC_instance_the_slave_pens();
AddSC_boss_mennu_the_betrayer();
AddSC_boss_hungarfen(); //CR Underbog
AddSC_boss_the_black_stalker();
AddSC_boss_rokmar_the_crackler();
AddSC_boss_quagmirran();
// Coilfang Reservoir - The Underbog
AddSC_instance_the_underbog();
AddSC_boss_gruul(); //Gruul's Lair
AddSC_boss_hungarfen();
AddSC_boss_the_black_stalker();
// Gruul's Lair
AddSC_boss_gruul();
AddSC_boss_high_king_maulgar();
AddSC_instance_gruuls_lair();
AddSC_boss_broggok(); //HC Blood Furnace
@@ -45,6 +45,8 @@ set(scripts_STAT_SRCS
Outland/CoilfangReservoir/TheSlavePens/instance_the_slave_pens.cpp
Outland/CoilfangReservoir/TheSlavePens/the_slave_pens.h
Outland/CoilfangReservoir/TheSlavePens/boss_mennu_the_betrayer.cpp
Outland/CoilfangReservoir/TheSlavePens/boss_rokmar_the_crackler.cpp
Outland/CoilfangReservoir/TheSlavePens/boss_quagmirran.cpp
Outland/CoilfangReservoir/TheUnderbog/instance_the_underbog.cpp
Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp
Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp
@@ -17,7 +17,7 @@
/* ScriptData
SDName: boss_mennu_the_betrayer
SD%Complete: 100%
SD%Complete: 95%
SDComment:
SDCategory: Coilfang Reservoir, The Slave Pens
EndScriptData */
@@ -35,11 +35,11 @@ enum Say
enum Spells
{
SPELL_TAINTED_STONESKIN_TOTEM = 31985,
SPELL_TAINTED_EARTHGRAB_TOTEM = 31981,
SPELL_CORRUPTED_NOVA_TOTEM = 31991,
SPELL_MENNUS_HEALING_WARD = 34980,
SPELL_LIGHTNING_BOLT = 35010
SPELL_TAINTED_STONESKIN_TOTEM = 31985, // every 30 sec if health below 100%
SPELL_TAINTED_EARTHGRAB_TOTEM = 31981, // ?
SPELL_CORRUPTED_NOVA_TOTEM = 31991, // ?
SPELL_MENNUS_HEALING_WARD = 34980, // every 14 - 25 sec
SPELL_LIGHTNING_BOLT = 35010 // every 14 - 19 sec
};
enum Events
@@ -47,7 +47,8 @@ enum Events
EVENT_TAINTED_STONESKIN_TOTEM = 1,
EVENT_TAINTED_EARTHGRAB_TOTEM = 2,
EVENT_CORRUPTED_NOVA_TOTEM = 3,
EVENT_LIGHTNING_BOLT = 4
EVENT_MENNUS_HEALING_WARD = 4,
EVENT_LIGHTNING_BOLT = 5
};
class boss_mennu_the_betrayer : public CreatureScript
@@ -62,7 +63,6 @@ class boss_mennu_the_betrayer : public CreatureScript
void Reset() OVERRIDE
{
_Reset();
healingWardDropped = false;
}
void JustDied(Unit* /*killer*/) OVERRIDE
@@ -74,10 +74,11 @@ class boss_mennu_the_betrayer : public CreatureScript
void EnterCombat(Unit* /*who*/) OVERRIDE
{
_EnterCombat();
events.ScheduleEvent(EVENT_TAINTED_STONESKIN_TOTEM, 18000);
events.ScheduleEvent(EVENT_TAINTED_EARTHGRAB_TOTEM, 19000);
events.ScheduleEvent(EVENT_CORRUPTED_NOVA_TOTEM, 20000);
events.ScheduleEvent(EVENT_LIGHTNING_BOLT, urand(5000, 8000));
events.ScheduleEvent(EVENT_TAINTED_STONESKIN_TOTEM, 30000);
events.ScheduleEvent(EVENT_TAINTED_EARTHGRAB_TOTEM, 20000);
events.ScheduleEvent(EVENT_CORRUPTED_NOVA_TOTEM, 60000);
events.ScheduleEvent(EVENT_MENNUS_HEALING_WARD, urand(14000, 25000));
events.ScheduleEvent(EVENT_LIGHTNING_BOLT, urand(14000, 19000));
Talk(SAY_AGGRO);
}
@@ -101,7 +102,9 @@ class boss_mennu_the_betrayer : public CreatureScript
switch (eventId)
{
case EVENT_TAINTED_STONESKIN_TOTEM:
DoCast(me, SPELL_TAINTED_STONESKIN_TOTEM);
if (HealthBelowPct(100))
DoCast(me, SPELL_TAINTED_STONESKIN_TOTEM);
events.ScheduleEvent(EVENT_TAINTED_STONESKIN_TOTEM, 30000);
break;
case EVENT_TAINTED_EARTHGRAB_TOTEM:
DoCast(me, SPELL_TAINTED_EARTHGRAB_TOTEM);
@@ -109,26 +112,21 @@ class boss_mennu_the_betrayer : public CreatureScript
case EVENT_CORRUPTED_NOVA_TOTEM:
DoCast(me, SPELL_CORRUPTED_NOVA_TOTEM);
break;
case EVENT_MENNUS_HEALING_WARD:
DoCast(me, SPELL_MENNUS_HEALING_WARD);
events.ScheduleEvent(EVENT_MENNUS_HEALING_WARD, urand(14000, 25000));
break;
case EVENT_LIGHTNING_BOLT:
DoCastVictim(SPELL_LIGHTNING_BOLT, true);
events.ScheduleEvent(EVENT_LIGHTNING_BOLT, urand(7000, 11000));
events.ScheduleEvent(EVENT_LIGHTNING_BOLT, urand(14000, 25000));
break;
default:
break;
}
}
if (HealthBelowPct(60) && !healingWardDropped)
{
DoCast(me, SPELL_MENNUS_HEALING_WARD);
healingWardDropped = true;
}
DoMeleeAttackIfReady();
}
private:
bool healingWardDropped;
};
CreatureAI* GetAI(Creature* creature) const OVERRIDE
@@ -0,0 +1,124 @@
/*
* Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
*
* 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/>.
*/
/* ScriptData
SDName: boss_quagmirran
SD%Complete: 100%
SDComment:
SDCategory: Coilfang Reservoir, The Slave Pens
EndScriptData */
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "the_slave_pens.h"
enum Spells
{
SPELL_ACID_SPRAY = 38153,
SPELL_CLEAVE = 40504,
SPELL_UPPERCUT = 32055,
SPELL_POISON_BOLT_VOLLEY = 34780 // 39340
};
enum Events
{
EVENT_ACID_SPRAY = 1,
EVENT_CLEAVE = 2,
EVENT_UPPERCUT = 3,
EVENT_POISON_BOLT_VOLLEY = 4
};
class boss_quagmirran : public CreatureScript
{
public:
boss_quagmirran() : CreatureScript("boss_quagmirran") { }
struct boss_quagmirranAI : public BossAI
{
boss_quagmirranAI(Creature* creature) : BossAI(creature, DATA_QUAGMIRRAN) { }
void Reset() OVERRIDE
{
_Reset();
}
void JustDied(Unit* /*killer*/) OVERRIDE
{
_JustDied();
}
void EnterCombat(Unit* /*who*/) OVERRIDE
{
_EnterCombat();
events.ScheduleEvent(EVENT_ACID_SPRAY, 25000);
events.ScheduleEvent(EVENT_CLEAVE, 9000);
events.ScheduleEvent(EVENT_UPPERCUT, 20000);
events.ScheduleEvent(EVENT_POISON_BOLT_VOLLEY, 31000);
}
void KilledUnit(Unit* /*victim*/) OVERRIDE { }
void UpdateAI(uint32 diff) OVERRIDE
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_ACID_SPRAY:
DoCastAOE(SPELL_ACID_SPRAY);
events.ScheduleEvent(EVENT_ACID_SPRAY, urand(20000, 25000));
break;
case EVENT_CLEAVE:
DoCastVictim(SPELL_CLEAVE, true);
events.ScheduleEvent(EVENT_CLEAVE, urand(18000, 34000));
break;
case EVENT_UPPERCUT:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 10.0f, true))
DoCast(target, SPELL_UPPERCUT);
events.ScheduleEvent(EVENT_UPPERCUT, 22000);
break;
case EVENT_POISON_BOLT_VOLLEY:
DoCast(me, SPELL_POISON_BOLT_VOLLEY);
events.ScheduleEvent(EVENT_POISON_BOLT_VOLLEY, 24000);
break;
default:
break;
}
}
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
return new boss_quagmirranAI(creature);
}
};
void AddSC_boss_quagmirran()
{
new boss_quagmirran();
}
@@ -0,0 +1,127 @@
/*
* Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
*
* 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/>.
*/
/* ScriptData
SDName: boss_rokmar_the_crackler
SD%Complete: 100%
SDComment:
SDCategory: Coilfang Reservoir, The Slave Pens
EndScriptData */
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "the_slave_pens.h"
enum Spells
{
SPELL_GRIEVOUS_WOUND = 31956,
SPELL_ENSNARING_MOSS = 31948,
SPELL_WATER_SPIT = 35008,
SPELL_FRENZY = 34970
};
enum Events
{
EVENT_GRIEVOUS_WOUND = 1,
EVENT_ENSNARING_MOSS = 2,
EVENT_WATER_SPIT = 3
};
class boss_rokmar_the_crackler : public CreatureScript
{
public:
boss_rokmar_the_crackler() : CreatureScript("boss_rokmar_the_crackler") { }
struct boss_rokmar_the_cracklerAI : public BossAI
{
boss_rokmar_the_cracklerAI(Creature* creature) : BossAI(creature, DATA_MENNU_THE_BETRAYER) { }
void Reset() OVERRIDE
{
_Reset();
rokmarFrenzy = false;
}
void JustDied(Unit* /*killer*/) OVERRIDE
{
_JustDied();
}
void EnterCombat(Unit* /*who*/) OVERRIDE
{
_EnterCombat();
events.ScheduleEvent(EVENT_GRIEVOUS_WOUND, 10000);
events.ScheduleEvent(EVENT_ENSNARING_MOSS, 20000);
events.ScheduleEvent(EVENT_WATER_SPIT, 14000);
}
void KilledUnit(Unit* /*victim*/) OVERRIDE { }
void UpdateAI(uint32 diff) OVERRIDE
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_GRIEVOUS_WOUND:
DoCastVictim(SPELL_GRIEVOUS_WOUND, true);
events.ScheduleEvent(EVENT_GRIEVOUS_WOUND, urand(20000, 30000));
break;
case EVENT_ENSNARING_MOSS:
DoCastAOE(SPELL_ENSNARING_MOSS);
events.ScheduleEvent(EVENT_ENSNARING_MOSS, urand(20000, 30000));
break;
case EVENT_WATER_SPIT:
DoCastAOE(SPELL_WATER_SPIT);
events.ScheduleEvent(EVENT_WATER_SPIT, urand(14000, 18000));
break;
default:
break;
}
}
if (HealthBelowPct(10) && !rokmarFrenzy)
{
DoCast(me, SPELL_FRENZY);
rokmarFrenzy = true;
}
DoMeleeAttackIfReady();
}
private:
bool rokmarFrenzy;
};
CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
return new boss_rokmar_the_cracklerAI(creature);
}
};
void AddSC_boss_rokmar_the_crackler()
{
new boss_rokmar_the_crackler();
}