I will upload sql later will take time most of creature templates not exist

This commit is contained in:
luis
2026-08-31 20:05:48 -03:00
parent 12c682be5b
commit 73bbc69f3e
6 changed files with 989 additions and 0 deletions
@@ -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);
}