I will upload sql later will take time most of creature templates not exist
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
* This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
|
||||
*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
#ifndef DEF_ALTAROFFANGS_H_
|
||||
#define DEF_ALTAROFFANGS_H_
|
||||
|
||||
#include "CreatureAIImpl.h"
|
||||
|
||||
#define AltarofFangsScriptName "instance_altaroffangs"
|
||||
#define DataHeader "AltarofFangs"
|
||||
|
||||
uint32 const EncounterCount = 3;
|
||||
|
||||
enum AltarofFangsDataTypes
|
||||
{
|
||||
DATA_RAVI = 0,
|
||||
DATA_THE_WRITHING_COIL = 1,
|
||||
DATA_ZULJAN = 2,
|
||||
};
|
||||
|
||||
enum AltarofFangsCreatureIds
|
||||
{
|
||||
BOSS_RAVI = 259445,
|
||||
BOSS_THE_WRITHING_COIL = 259446,
|
||||
BOSS_ZULJAN = 259447,
|
||||
|
||||
NPC_UNCOILED_WRITHE = 262398,
|
||||
|
||||
// Trash
|
||||
NPC_VENOM_LEECH = 261550,
|
||||
NPC_BLOODLETTER = 261552,
|
||||
NPC_RAVENOUS_DESCENDANT = 261553,
|
||||
NPC_TWINFANG_HARROWER = 261554,
|
||||
NPC_HIGH_EVOLUTIONIST = 261557,
|
||||
NPC_PRIMAL_SERPENT = 261560,
|
||||
NPC_ASCENDANT_SERPENT = 261573,
|
||||
NPC_RATTLING_WRITHE = 262011,
|
||||
NPC_RITUAL_CHIEFTAIN = 270306,
|
||||
NPC_ULATEKS_CHOSEN = 263109,
|
||||
NPC_LIVING_VENOM = 264498,
|
||||
NPC_BLADE_OF_THE_ALTAR = 271453,
|
||||
NPC_INFUSION_TOTEM = 264902,
|
||||
NPC_HATCHLING = 272672,
|
||||
};
|
||||
|
||||
enum AltarofFangsGoIds
|
||||
{
|
||||
GO_DOOR_RAVI = 1,
|
||||
GO_DOOR_THE_WRITHING_COIL = 2,
|
||||
GO_DOOR_ZULJAN = 3,
|
||||
};
|
||||
|
||||
template <class AI, class T>
|
||||
inline AI* GetAltarofFangsAI(T* obj)
|
||||
{
|
||||
return GetInstanceAI<AI>(obj, AltarofFangsScriptName);
|
||||
}
|
||||
|
||||
#define RegisterAltarofFangsCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetAltarofFangsAI)
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,433 @@
|
||||
/*
|
||||
* This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
|
||||
*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
#include "ScriptedCreature.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "altaroffangs.h"
|
||||
|
||||
enum TrashSpells
|
||||
{
|
||||
SPELL_SEPTIC_SPATTER = 1306232,
|
||||
SPELL_PARALYZING_SHOTS = 1294569,
|
||||
SPELL_TOXIC_BREATH = 1306668,
|
||||
SPELL_RAVENOUS_CLAWS = 1306333,
|
||||
SPELL_PIERCING_HISS = 1294557,
|
||||
SPELL_FETID_SPIT = 1306381,
|
||||
SPELL_BLOOD_SACRIFICE = 1306641,
|
||||
SPELL_DISMEMBER = 1306911,
|
||||
SPELL_ENVENOM = 1307571,
|
||||
SPELL_MASS_ENVENOM = 1307567,
|
||||
SPELL_EVOLVE = 1306385,
|
||||
SPELL_CORROSIVE_FANGS = 1294845,
|
||||
SPELL_RATTLE = 1294849,
|
||||
SPELL_BLOODLETTING = 1307526,
|
||||
SPELL_INFEST = 1308865,
|
||||
SPELL_VIRULENT_WHIRL = 1295055,
|
||||
SPELL_NOXIOUS_SPRAY = 1294934,
|
||||
SPELL_LACED_EDGE = 1308518,
|
||||
SPELL_TOXIC_SURGE = 1306853,
|
||||
SPELL_VENOM_BURST = 1303366,
|
||||
SPELL_NASCENT_HUNGER = 1306331,
|
||||
};
|
||||
|
||||
enum TrashEvents
|
||||
{
|
||||
EVENT_SEPTIC_SPATTER = 1,
|
||||
EVENT_PARALYZING_SHOTS,
|
||||
EVENT_TOXIC_BREATH,
|
||||
EVENT_RAVENOUS_CLAWS,
|
||||
EVENT_PIERCING_HISS,
|
||||
EVENT_FETID_SPIT,
|
||||
EVENT_BLOOD_SACRIFICE,
|
||||
EVENT_DISMEMBER,
|
||||
EVENT_ENVENOM,
|
||||
EVENT_MASS_ENVENOM,
|
||||
EVENT_EVOLVE,
|
||||
EVENT_CORROSIVE_FANGS,
|
||||
EVENT_RATTLE,
|
||||
EVENT_INFEST,
|
||||
EVENT_VIRULENT_WHIRL,
|
||||
EVENT_NOXIOUS_SPRAY,
|
||||
EVENT_LACED_EDGE,
|
||||
EVENT_TOXIC_SURGE,
|
||||
EVENT_NASCENT_HUNGER,
|
||||
};
|
||||
|
||||
// 261550 - Venom Leech
|
||||
struct npc_venom_leech : public ScriptedAI
|
||||
{
|
||||
npc_venom_leech(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
void ScheduleTasks() override
|
||||
{
|
||||
DoZoneInCombat();
|
||||
events.ScheduleEvent(EVENT_SEPTIC_SPATTER, 6s);
|
||||
}
|
||||
|
||||
void ExecuteEvent(uint32 eventId) override
|
||||
{
|
||||
if (eventId == EVENT_SEPTIC_SPATTER)
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f, true))
|
||||
DoCast(target, SPELL_SEPTIC_SPATTER);
|
||||
events.Repeat(14s);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// 261554 - Twinfang Harrower
|
||||
struct npc_twinfang_harrower : public ScriptedAI
|
||||
{
|
||||
npc_twinfang_harrower(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
void ScheduleTasks() override
|
||||
{
|
||||
DoZoneInCombat();
|
||||
events.ScheduleEvent(EVENT_PARALYZING_SHOTS, 8s);
|
||||
events.ScheduleEvent(EVENT_TOXIC_BREATH, 15s);
|
||||
}
|
||||
|
||||
void ExecuteEvent(uint32 eventId) override
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_PARALYZING_SHOTS:
|
||||
DoCastAOE(SPELL_PARALYZING_SHOTS);
|
||||
events.Repeat(20s);
|
||||
break;
|
||||
case EVENT_TOXIC_BREATH:
|
||||
DoCastVictim(SPELL_TOXIC_BREATH);
|
||||
events.Repeat(22s);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// 261553 - Ravenous Descendant
|
||||
struct npc_ravenous_descendant : public ScriptedAI
|
||||
{
|
||||
npc_ravenous_descendant(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
void ScheduleTasks() override
|
||||
{
|
||||
DoZoneInCombat();
|
||||
events.ScheduleEvent(EVENT_RAVENOUS_CLAWS, 8s);
|
||||
}
|
||||
|
||||
void ExecuteEvent(uint32 eventId) override
|
||||
{
|
||||
if (eventId == EVENT_RAVENOUS_CLAWS)
|
||||
{
|
||||
DoCastVictim(SPELL_RAVENOUS_CLAWS);
|
||||
events.Repeat(16s);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// 261560 - Primal Serpent
|
||||
struct npc_primal_serpent : public ScriptedAI
|
||||
{
|
||||
npc_primal_serpent(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
void ScheduleTasks() override
|
||||
{
|
||||
DoZoneInCombat();
|
||||
events.ScheduleEvent(EVENT_PIERCING_HISS, 6s);
|
||||
events.ScheduleEvent(EVENT_FETID_SPIT, 12s);
|
||||
}
|
||||
|
||||
void ExecuteEvent(uint32 eventId) override
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_PIERCING_HISS:
|
||||
DoCastAOE(SPELL_PIERCING_HISS);
|
||||
events.Repeat(14s);
|
||||
break;
|
||||
case EVENT_FETID_SPIT:
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true))
|
||||
DoCast(target, SPELL_FETID_SPIT);
|
||||
events.Repeat(18s);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// 270306 - Ritual Chieftain
|
||||
struct npc_ritual_chieftain : public ScriptedAI
|
||||
{
|
||||
npc_ritual_chieftain(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
void ScheduleTasks() override
|
||||
{
|
||||
DoZoneInCombat();
|
||||
events.ScheduleEvent(EVENT_BLOOD_SACRIFICE, 8s);
|
||||
events.ScheduleEvent(EVENT_DISMEMBER, 16s);
|
||||
}
|
||||
|
||||
void ExecuteEvent(uint32 eventId) override
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_BLOOD_SACRIFICE:
|
||||
DoCastAOE(SPELL_BLOOD_SACRIFICE);
|
||||
events.Repeat(20s);
|
||||
break;
|
||||
case EVENT_DISMEMBER:
|
||||
DoCastVictim(SPELL_DISMEMBER);
|
||||
events.Repeat(18s);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// 261557 - High Evolutionist
|
||||
struct npc_high_evolutionist : public ScriptedAI
|
||||
{
|
||||
npc_high_evolutionist(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
void ScheduleTasks() override
|
||||
{
|
||||
DoZoneInCombat();
|
||||
events.ScheduleEvent(EVENT_ENVENOM, 7s);
|
||||
events.ScheduleEvent(EVENT_MASS_ENVENOM, 18s);
|
||||
events.ScheduleEvent(EVENT_EVOLVE, 28s);
|
||||
}
|
||||
|
||||
void ExecuteEvent(uint32 eventId) override
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_ENVENOM:
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true))
|
||||
DoCast(target, SPELL_ENVENOM);
|
||||
events.Repeat(15s);
|
||||
break;
|
||||
case EVENT_MASS_ENVENOM:
|
||||
DoCastAOE(SPELL_MASS_ENVENOM);
|
||||
events.Repeat(22s);
|
||||
break;
|
||||
case EVENT_EVOLVE:
|
||||
DoCastSelf(SPELL_EVOLVE, true);
|
||||
events.Repeat(32s);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// 262011 - Rattling Writhe
|
||||
struct npc_rattling_writhe : public ScriptedAI
|
||||
{
|
||||
npc_rattling_writhe(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
void ScheduleTasks() override
|
||||
{
|
||||
DoZoneInCombat();
|
||||
events.ScheduleEvent(EVENT_CORROSIVE_FANGS, 6s);
|
||||
events.ScheduleEvent(EVENT_RATTLE, 14s);
|
||||
}
|
||||
|
||||
void ExecuteEvent(uint32 eventId) override
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_CORROSIVE_FANGS:
|
||||
DoCastVictim(SPELL_CORROSIVE_FANGS);
|
||||
events.Repeat(16s);
|
||||
break;
|
||||
case EVENT_RATTLE:
|
||||
DoCastAOE(SPELL_RATTLE);
|
||||
events.Repeat(22s);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// 261552 - Bloodletter
|
||||
struct npc_bloodletter : public ScriptedAI
|
||||
{
|
||||
npc_bloodletter(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
void ScheduleTasks() override
|
||||
{
|
||||
DoZoneInCombat();
|
||||
events.ScheduleEvent(EVENT_ENVENOM, 6s);
|
||||
}
|
||||
|
||||
void ExecuteEvent(uint32 eventId) override
|
||||
{
|
||||
if (eventId == EVENT_ENVENOM)
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f, true))
|
||||
DoCast(target, SPELL_ENVENOM);
|
||||
events.Repeat(14s);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// 261573 - Ascendant Serpent
|
||||
struct npc_ascendant_serpent : public ScriptedAI
|
||||
{
|
||||
npc_ascendant_serpent(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
void ScheduleTasks() override
|
||||
{
|
||||
DoZoneInCombat();
|
||||
events.ScheduleEvent(EVENT_INFEST, 7s);
|
||||
events.ScheduleEvent(EVENT_VIRULENT_WHIRL, 13s);
|
||||
events.ScheduleEvent(EVENT_NOXIOUS_SPRAY, 20s);
|
||||
}
|
||||
|
||||
void ExecuteEvent(uint32 eventId) override
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_INFEST:
|
||||
DoCastAOE(SPELL_INFEST);
|
||||
events.Repeat(20s);
|
||||
break;
|
||||
case EVENT_VIRULENT_WHIRL:
|
||||
DoCastAOE(SPELL_VIRULENT_WHIRL);
|
||||
events.Repeat(18s);
|
||||
break;
|
||||
case EVENT_NOXIOUS_SPRAY:
|
||||
DoCastVictim(SPELL_NOXIOUS_SPRAY);
|
||||
events.Repeat(24s);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// 271453 - Blade of the Altar
|
||||
struct npc_blade_of_the_altar : public ScriptedAI
|
||||
{
|
||||
npc_blade_of_the_altar(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
void ScheduleTasks() override
|
||||
{
|
||||
DoZoneInCombat();
|
||||
events.ScheduleEvent(EVENT_LACED_EDGE, 8s);
|
||||
}
|
||||
|
||||
void ExecuteEvent(uint32 eventId) override
|
||||
{
|
||||
if (eventId == EVENT_LACED_EDGE)
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true))
|
||||
DoCast(target, SPELL_LACED_EDGE);
|
||||
events.Repeat(16s);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// 263109 - Ula'tek's Chosen
|
||||
struct npc_ulateks_chosen : public ScriptedAI
|
||||
{
|
||||
npc_ulateks_chosen(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
void ScheduleTasks() override
|
||||
{
|
||||
DoZoneInCombat();
|
||||
events.ScheduleEvent(EVENT_ENVENOM, 6s);
|
||||
events.ScheduleEvent(EVENT_MASS_ENVENOM, 16s);
|
||||
events.ScheduleEvent(EVENT_TOXIC_SURGE, 26s);
|
||||
}
|
||||
|
||||
void ExecuteEvent(uint32 eventId) override
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_ENVENOM:
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true))
|
||||
DoCast(target, SPELL_ENVENOM);
|
||||
events.Repeat(14s);
|
||||
break;
|
||||
case EVENT_MASS_ENVENOM:
|
||||
DoCastAOE(SPELL_MASS_ENVENOM);
|
||||
events.Repeat(22s);
|
||||
break;
|
||||
case EVENT_TOXIC_SURGE:
|
||||
DoCastAOE(SPELL_TOXIC_SURGE);
|
||||
events.Repeat(26s);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// 264498 - Living Venom
|
||||
struct npc_living_venom : public ScriptedAI
|
||||
{
|
||||
npc_living_venom(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
DoCastAOE(SPELL_VENOM_BURST);
|
||||
}
|
||||
};
|
||||
|
||||
// 272672 - Hatchling
|
||||
struct npc_hatchling : public ScriptedAI
|
||||
{
|
||||
npc_hatchling(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
void ScheduleTasks() override
|
||||
{
|
||||
DoZoneInCombat();
|
||||
events.ScheduleEvent(EVENT_NASCENT_HUNGER, 4s);
|
||||
}
|
||||
|
||||
void ExecuteEvent(uint32 eventId) override
|
||||
{
|
||||
if (eventId == EVENT_NASCENT_HUNGER)
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true))
|
||||
DoCast(target, SPELL_NASCENT_HUNGER);
|
||||
events.Repeat(12s);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_altaroffangs_trash()
|
||||
{
|
||||
RegisterAltarofFangsCreatureAI(npc_venom_leech);
|
||||
RegisterAltarofFangsCreatureAI(npc_twinfang_harrower);
|
||||
RegisterAltarofFangsCreatureAI(npc_ravenous_descendant);
|
||||
RegisterAltarofFangsCreatureAI(npc_primal_serpent);
|
||||
RegisterAltarofFangsCreatureAI(npc_ritual_chieftain);
|
||||
RegisterAltarofFangsCreatureAI(npc_high_evolutionist);
|
||||
RegisterAltarofFangsCreatureAI(npc_rattling_writhe);
|
||||
RegisterAltarofFangsCreatureAI(npc_bloodletter);
|
||||
RegisterAltarofFangsCreatureAI(npc_ascendant_serpent);
|
||||
RegisterAltarofFangsCreatureAI(npc_blade_of_the_altar);
|
||||
RegisterAltarofFangsCreatureAI(npc_ulateks_chosen);
|
||||
RegisterAltarofFangsCreatureAI(npc_living_venom);
|
||||
RegisterAltarofFangsCreatureAI(npc_hatchling);
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
/*
|
||||
* This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
|
||||
*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
#include "ScriptedCreature.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "altaroffangs.h"
|
||||
|
||||
enum RaviSpells
|
||||
{
|
||||
SPELL_TRIPLE_SHOT = 1296220,
|
||||
SPELL_FETID_ROAR = 1296219,
|
||||
SPELL_SSSCAVENGING = 1298221,
|
||||
SPELL_FEEDING_FRENZY = 1307765,
|
||||
SPELL_REGURGITATE = 1296050,
|
||||
SPELL_RAVENOUS_STOMP = 1307894,
|
||||
SPELL_FRESH_MEAT = 1307921,
|
||||
SPELL_HYDRASTRIKE = 1298683,
|
||||
SPELL_CARRION_BURST = 1307700,
|
||||
SPELL_MESSY_EATER = 1306345,
|
||||
};
|
||||
|
||||
enum RaviTexts
|
||||
{
|
||||
SAY_AGGRO = 0,
|
||||
SAY_DEATH = 1,
|
||||
};
|
||||
|
||||
enum events
|
||||
{
|
||||
EVENT_TRIPLE_SHOT = 1,
|
||||
EVENT_REGURGITATE,
|
||||
EVENT_RAVENOUS_STOMP,
|
||||
EVENT_SSSCAVENGING,
|
||||
EVENT_HYDRASTRIKE,
|
||||
};
|
||||
|
||||
// 259445 - Rav'i
|
||||
struct boss_ravi : public BossAI
|
||||
{
|
||||
boss_ravi(Creature* creature) : BossAI(creature, DATA_RAVI) { }
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
BossAI::Reset();
|
||||
me->RemoveAurasDueToSpell(SPELL_FEEDING_FRENZY);
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
BossAI::JustEngagedWith(who);
|
||||
Talk(SAY_AGGRO);
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me);
|
||||
}
|
||||
|
||||
void JustDied(Unit* killer) override
|
||||
{
|
||||
BossAI::JustDied(killer);
|
||||
Talk(SAY_DEATH);
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
|
||||
}
|
||||
|
||||
void EnterEvadeMode(EvadeReason /*why*/) override
|
||||
{
|
||||
me->RemoveAllAuras();
|
||||
_EnterEvadeMode();
|
||||
_DespawnAtEvade();
|
||||
}
|
||||
|
||||
void ScheduleTasks() override
|
||||
{
|
||||
events.ScheduleEvent(EVENT_HYDRASTRIKE, 6s);
|
||||
events.ScheduleEvent(EVENT_TRIPLE_SHOT, 9s);
|
||||
events.ScheduleEvent(EVENT_REGURGITATE, 14s);
|
||||
events.ScheduleEvent(EVENT_RAVENOUS_STOMP, 20s);
|
||||
events.ScheduleEvent(EVENT_SSSCAVENGING, 32s);
|
||||
}
|
||||
|
||||
void ExecuteEvent(uint32 eventId) override
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_TRIPLE_SHOT:
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true))
|
||||
DoCast(target, SPELL_TRIPLE_SHOT);
|
||||
events.Repeat(Milliseconds(20500));
|
||||
break;
|
||||
case EVENT_REGURGITATE:
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 60.0f, true))
|
||||
me->SetFacingToObject(target);
|
||||
DoCastVictim(SPELL_REGURGITATE);
|
||||
events.Repeat(Milliseconds(20500));
|
||||
break;
|
||||
case EVENT_RAVENOUS_STOMP:
|
||||
DoCastAOE(SPELL_RAVENOUS_STOMP);
|
||||
events.Repeat(Milliseconds(20500));
|
||||
break;
|
||||
case EVENT_SSSCAVENGING:
|
||||
DoCastSelf(SPELL_SSSCAVENGING, true);
|
||||
events.Repeat(50s);
|
||||
break;
|
||||
case EVENT_HYDRASTRIKE:
|
||||
DoCastVictim(SPELL_HYDRASTRIKE);
|
||||
events.Repeat(Milliseconds(20500));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_ravi()
|
||||
{
|
||||
RegisterAltarofFangsCreatureAI(boss_ravi);
|
||||
}
|
||||
@@ -0,0 +1,178 @@
|
||||
/*
|
||||
* This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
|
||||
*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
#include "ScriptedCreature.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "altaroffangs.h"
|
||||
|
||||
enum WrithingCoilSpells
|
||||
{
|
||||
SPELL_SYNCHRONIZED_VENOM = 1299154,
|
||||
SPELL_TAIL_SCYTHE = 1298949,
|
||||
SPELL_VINDICTIVE_ONSLAUGHT = 1299940,
|
||||
SPELL_DEATH_RATTLE = 1299053,
|
||||
SPELL_SPITEFUL_HUNT = 1300503,
|
||||
SPELL_ASSIMILATION = 1300686,
|
||||
SPELL_TOXIC_ATROPHY = 1310547,
|
||||
SPELL_BURROWING_CHARGE = 1299130,
|
||||
SPELL_VENOM_JET = 1300044,
|
||||
SPELL_UNDERMINING = 1305393,
|
||||
};
|
||||
|
||||
enum WrithingCoilTexts
|
||||
{
|
||||
SAY_AGGRO = 0,
|
||||
SAY_DEATH = 1,
|
||||
};
|
||||
|
||||
enum events
|
||||
{
|
||||
EVENT_TAIL_SCYTHE = 1,
|
||||
EVENT_VINDICTIVE_ONSLAUGHT,
|
||||
EVENT_DEATH_RATTLE,
|
||||
EVENT_SYNCHRONIZED_VENOM,
|
||||
EVENT_TOXIC_ATROPHY,
|
||||
EVENT_BURROWING_CHARGE,
|
||||
};
|
||||
|
||||
enum npc_events
|
||||
{
|
||||
EVENT_SPITEFUL_HUNT = 1,
|
||||
EVENT_TOXIC_ATROPHY_ADD,
|
||||
};
|
||||
|
||||
// 259446 - The Writhing Coil
|
||||
struct boss_the_writhing_coil : public BossAI
|
||||
{
|
||||
boss_the_writhing_coil(Creature* creature) : BossAI(creature, DATA_THE_WRITHING_COIL) { }
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
BossAI::Reset();
|
||||
me->RemoveAurasDueToSpell(SPELL_DEATH_RATTLE);
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
BossAI::JustEngagedWith(who);
|
||||
Talk(SAY_AGGRO);
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me);
|
||||
}
|
||||
|
||||
void JustDied(Unit* killer) override
|
||||
{
|
||||
BossAI::JustDied(killer);
|
||||
Talk(SAY_DEATH);
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
|
||||
}
|
||||
|
||||
void EnterEvadeMode(EvadeReason /*why*/) override
|
||||
{
|
||||
me->RemoveAllAuras();
|
||||
_EnterEvadeMode();
|
||||
_DespawnAtEvade();
|
||||
}
|
||||
|
||||
void ScheduleTasks() override
|
||||
{
|
||||
events.ScheduleEvent(EVENT_TAIL_SCYTHE, 8s);
|
||||
events.ScheduleEvent(EVENT_VINDICTIVE_ONSLAUGHT, 13s);
|
||||
events.ScheduleEvent(EVENT_SYNCHRONIZED_VENOM, 6s);
|
||||
events.ScheduleEvent(EVENT_TOXIC_ATROPHY, 18s);
|
||||
events.ScheduleEvent(EVENT_BURROWING_CHARGE, 24s);
|
||||
events.ScheduleEvent(EVENT_DEATH_RATTLE, 35s);
|
||||
}
|
||||
|
||||
void ExecuteEvent(uint32 eventId) override
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_TAIL_SCYTHE:
|
||||
DoCastVictim(SPELL_TAIL_SCYTHE);
|
||||
events.Repeat(Milliseconds(20500));
|
||||
break;
|
||||
case EVENT_VINDICTIVE_ONSLAUGHT:
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true))
|
||||
{
|
||||
me->SetFacingToObject(target);
|
||||
DoCast(target, SPELL_VINDICTIVE_ONSLAUGHT);
|
||||
}
|
||||
events.Repeat(Milliseconds(20500));
|
||||
break;
|
||||
case EVENT_DEATH_RATTLE:
|
||||
DoCastAOE(SPELL_DEATH_RATTLE);
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true))
|
||||
me->SummonCreature(NPC_UNCOILED_WRITHE, target->GetPosition(), TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30s);
|
||||
events.Repeat(60s);
|
||||
break;
|
||||
case EVENT_SYNCHRONIZED_VENOM:
|
||||
DoCastAOE(SPELL_SYNCHRONIZED_VENOM);
|
||||
events.Repeat(Milliseconds(20500));
|
||||
break;
|
||||
case EVENT_TOXIC_ATROPHY:
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true))
|
||||
DoCast(target, SPELL_TOXIC_ATROPHY);
|
||||
events.Repeat(Milliseconds(20500));
|
||||
break;
|
||||
case EVENT_BURROWING_CHARGE:
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true))
|
||||
DoCast(target, SPELL_BURROWING_CHARGE);
|
||||
events.Repeat(Milliseconds(20500));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// 262398 - Uncoiled Writhe
|
||||
struct npc_uncoiled_writhe : public ScriptedAI
|
||||
{
|
||||
npc_uncoiled_writhe(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
void ScheduleTasks() override
|
||||
{
|
||||
DoZoneInCombat();
|
||||
events.ScheduleEvent(EVENT_SPITEFUL_HUNT, 3s);
|
||||
events.ScheduleEvent(EVENT_TOXIC_ATROPHY_ADD, 8s);
|
||||
}
|
||||
|
||||
void ExecuteEvent(uint32 eventId) override
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_SPITEFUL_HUNT:
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 60.0f, true))
|
||||
DoCast(target, SPELL_SPITEFUL_HUNT);
|
||||
events.Repeat(15s);
|
||||
break;
|
||||
case EVENT_TOXIC_ATROPHY_ADD:
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true))
|
||||
DoCast(target, SPELL_TOXIC_ATROPHY);
|
||||
events.Repeat(25s);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_the_writhing_coil()
|
||||
{
|
||||
RegisterAltarofFangsCreatureAI(boss_the_writhing_coil);
|
||||
RegisterAltarofFangsCreatureAI(npc_uncoiled_writhe);
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
/*
|
||||
* This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
|
||||
*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
#include "ScriptedCreature.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "altaroffangs.h"
|
||||
|
||||
enum ZuljanSpells
|
||||
{
|
||||
SPELL_BONESLICER = 1301413,
|
||||
SPELL_RITUAL_OF_THE_FANG = 1300876,
|
||||
SPELL_RITUAL_VENOM = 1300894,
|
||||
SPELL_AXEGRINDER = 1301111,
|
||||
SPELL_CHOP_DOWN = 1301350,
|
||||
SPELL_BLOODLETTING = 1301231,
|
||||
SPELL_AXEGRINDER_AURA = 1301114,
|
||||
};
|
||||
|
||||
enum ZuljanTexts
|
||||
{
|
||||
SAY_AGGRO = 0,
|
||||
SAY_DEATH = 1,
|
||||
};
|
||||
|
||||
enum events
|
||||
{
|
||||
EVENT_BONESLICER = 1,
|
||||
EVENT_RITUAL_OF_THE_FANG,
|
||||
EVENT_AXEGRINDER,
|
||||
EVENT_CHOP_DOWN,
|
||||
EVENT_BLOODLETTING,
|
||||
};
|
||||
|
||||
// 259447 - Zul'jan
|
||||
struct boss_zuljan : public BossAI
|
||||
{
|
||||
boss_zuljan(Creature* creature) : BossAI(creature, DATA_ZULJAN) { }
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
BossAI::Reset();
|
||||
me->RemoveAurasDueToSpell(SPELL_RITUAL_VENOM);
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
BossAI::JustEngagedWith(who);
|
||||
Talk(SAY_AGGRO);
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me);
|
||||
}
|
||||
|
||||
void JustDied(Unit* killer) override
|
||||
{
|
||||
BossAI::JustDied(killer);
|
||||
Talk(SAY_DEATH);
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_RITUAL_VENOM);
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
|
||||
}
|
||||
|
||||
void EnterEvadeMode(EvadeReason /*why*/) override
|
||||
{
|
||||
me->RemoveAllAuras();
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_RITUAL_VENOM);
|
||||
_EnterEvadeMode();
|
||||
_DespawnAtEvade();
|
||||
}
|
||||
|
||||
void ScheduleTasks() override
|
||||
{
|
||||
events.ScheduleEvent(EVENT_CHOP_DOWN, 8s);
|
||||
events.ScheduleEvent(EVENT_BONESLICER, 13s);
|
||||
events.ScheduleEvent(EVENT_AXEGRINDER, 19s);
|
||||
events.ScheduleEvent(EVENT_BLOODLETTING, 26s);
|
||||
events.ScheduleEvent(EVENT_RITUAL_OF_THE_FANG, 40s);
|
||||
}
|
||||
|
||||
void ExecuteEvent(uint32 eventId) override
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_BONESLICER:
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 60.0f, true))
|
||||
DoCast(target, SPELL_BONESLICER);
|
||||
events.Repeat(Milliseconds(20500));
|
||||
break;
|
||||
case EVENT_RITUAL_OF_THE_FANG:
|
||||
DoCastAOE(SPELL_RITUAL_OF_THE_FANG);
|
||||
events.Repeat(60s);
|
||||
break;
|
||||
case EVENT_AXEGRINDER:
|
||||
DoCastAOE(SPELL_AXEGRINDER);
|
||||
events.Repeat(Milliseconds(20500));
|
||||
break;
|
||||
case EVENT_CHOP_DOWN:
|
||||
DoCastVictim(SPELL_CHOP_DOWN);
|
||||
events.Repeat(Milliseconds(20500));
|
||||
break;
|
||||
case EVENT_BLOODLETTING:
|
||||
DoCastVictim(SPELL_BLOODLETTING);
|
||||
events.Repeat(Milliseconds(20500));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_zuljan()
|
||||
{
|
||||
RegisterAltarofFangsCreatureAI(boss_zuljan);
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
|
||||
*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
#include "InstanceScript.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "altaroffangs.h"
|
||||
|
||||
static constexpr DungeonEncounterData const encounters[] =
|
||||
{
|
||||
{ DATA_RAVI, {{ 3456 }} },
|
||||
{ DATA_THE_WRITHING_COIL, {{ 3457 }} },
|
||||
{ DATA_ZULJAN, {{ 3458 }} }
|
||||
};
|
||||
|
||||
static constexpr DoorData doorData[] =
|
||||
{
|
||||
{ GO_DOOR_RAVI, DATA_RAVI, EncounterDoorBehavior::OpenWhenDone },
|
||||
{ GO_DOOR_THE_WRITHING_COIL, DATA_THE_WRITHING_COIL, EncounterDoorBehavior::OpenWhenDone },
|
||||
{ GO_DOOR_ZULJAN, DATA_ZULJAN, EncounterDoorBehavior::OpenWhenDone },
|
||||
};
|
||||
|
||||
struct instance_altaroffangs : public InstanceScript
|
||||
{
|
||||
instance_altaroffangs(InstanceMap* map) : InstanceScript(map)
|
||||
{
|
||||
SetHeaders(DataHeader);
|
||||
SetBossNumber(EncounterCount);
|
||||
LoadDoorData(doorData);
|
||||
LoadDungeonEncounterData(encounters);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_instance_altaroffangs()
|
||||
{
|
||||
RegisterInstanceMapScript(instance_altaroffangs, 2993);
|
||||
}
|
||||
Reference in New Issue
Block a user