merge dungeon and fix warnings

This commit is contained in:
luis
2026-02-27 21:45:52 -03:00
parent 7b6a678e61
commit d14efc7023
8 changed files with 648 additions and 2 deletions
@@ -138,7 +138,7 @@ struct npc_garrison_invasion_enemy : public ScriptedAI
_ownerGuid = ownerGuid;
}
void JustDied(Unit* killer) override
void JustDied(Unit* /*killer*/) override
{
auto itr = s_activeInvasions.find(_ownerGuid);
if (itr == s_activeInvasions.end())
@@ -165,7 +165,7 @@ struct npc_garrison_invasion_enemy : public ScriptedAI
}
}
void UpdateAI(uint32 diff) override
void UpdateAI(uint32 /*diff*/) override
{
if (!UpdateVictim())
{
@@ -0,0 +1,150 @@
/*
* Copyright (C) WowCommunity Project
*
* This SourceCode is NOT free a software. Please hold everything Private
* and read our Terms
*/
#include "AreaTriggerAI.h"
#include "AreaTrigger.h"
#include "SpellAuraEffects.h"
#include "SpellAuras.h"
#include "SpellHistory.h"
#include "Spell.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "algethar_academy.h"
enum DoragosaSpells
{
SPELL_ARCANE_MISSILES = 373326, //perfect cast each 6 secs
SPELL_ASTRAL_BREATH = 374361, // need script spell
SPELL_ENERGY_BOMB = 374343, //cast visual
SPELL_ENERGY_BOMB_2 = 374350, //real dmg
SPELL_POWER_VACUUM = 388820, //visual it trigger 388821, 388822
SPELL_ARCANE_RIFT = 388902, //create areatrigger 30804 apply 389007 then remove 28secs
SPELL_ARCANTE_RIFT_PROC = 389007, //proc from at
};
enum DoragosaEvents
{
EVENT_ARCANE_MISSILES = 0,
EVENT_ASTRAL_BREATH,
EVENT_ENERGY_BOMB,
EVENT_POWER_VACUUM,
EVENT_ARCANE_RIFT,
};
//190609
struct Boss_Echo_of_Doragosa : public BossAI
{
Boss_Echo_of_Doragosa(Creature* creature) : BossAI(creature, DATA_DORAGOSA) { }
void JustEngagedWith(Unit* who) override
{
Talk(1);
BossAI::JustEngagedWith(who);
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me);
events.ScheduleEvent(EVENT_ARCANE_MISSILES, 4s);
events.ScheduleEvent(EVENT_ASTRAL_BREATH, 10s);
events.ScheduleEvent(EVENT_ENERGY_BOMB, 15s);
events.ScheduleEvent(EVENT_POWER_VACUUM, 17s);
events.ScheduleEvent(EVENT_ARCANE_RIFT, 28s);
}
void EnterEvadeMode(EvadeReason /*why*/) override
{
summons.DespawnAll();
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
_EnterEvadeMode();
_DespawnAtEvade();
}
void JustDied(Unit* killer) override
{
BossAI::JustDied(killer);
Talk(8);
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_ARCANTE_RIFT_PROC);
summons.DespawnAll();
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
}
void UpdateAI(uint32 diff) override
{
scheduler.Update(diff);
if (!UpdateVictim())
return;
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
events.Update(diff);
while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_ARCANE_MISSILES:
DoCastVictim(SPELL_ARCANE_MISSILES);
events.Repeat(7s);
break;
case EVENT_ASTRAL_BREATH:
DoCastVictim(SPELL_ASTRAL_BREATH);
events.Repeat(12s);
break;
case EVENT_ENERGY_BOMB:
{
Unit* target = SelectTarget(SelectTargetMethod::MaxThreat, 0, 100.0f, true);
me->CastSpell(target, SPELL_ENERGY_BOMB, false);
me->CastSpell(target, SPELL_ENERGY_BOMB_2, false);
events.Repeat(20s);
break;
}
case EVENT_POWER_VACUUM:
DoCastVictim(SPELL_POWER_VACUUM);
events.Repeat(17s);
break;
case EVENT_ARCANE_RIFT:
DoCastVictim(SPELL_ARCANE_RIFT);
events.Repeat(25s);
break;
default:
break;
}
}
}
};
//30804
struct at_arcanerift30804 : AreaTriggerAI
{
at_arcanerift30804(AreaTrigger* areatrigger) : AreaTriggerAI(areatrigger)
{
}
void OnUnitEnter(Unit* unit) override
{
if (!unit->IsPlayer())
return;
unit->CastSpell(unit, SPELL_ARCANTE_RIFT_PROC, true);
}
void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override
{
if (!unit->IsPlayer())
return;
unit->RemoveAura(SPELL_ARCANTE_RIFT_PROC);
}
};
void AddSC_Boss_Echo_of_Doragosa()
{
RegisterAlgetharAcademyCreatureAI(Boss_Echo_of_Doragosa);
RegisterAreaTriggerAI(at_arcanerift30804);
};
@@ -0,0 +1,110 @@
/*
* Copyright (C) WowCommunity Project
*
* This SourceCode is NOT free a software. Please hold everything Private
* and read our Terms
*/
#include "SpellAuraEffects.h"
#include "SpellAuras.h"
#include "SpellHistory.h"
#include "Spell.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "algethar_academy.h"
enum OvergrownSpells
{
SPELL_SPLINTERBARKS = 396716,
SPELL_HEALING_TOUCH = 396640,
SPELL_BARK_BREAKER = 388544,
SPELL_GERMINATE = 388796, //cast visual
SPELL_GERMINATE_DMG = 388799,
};
enum OvergrownEvents
{
EVENT_SPLINTERBARKS = 0,
EVENT_HEALING_TOUCH,
EVENT_BARK_BREAKER,
EVENT_GERMINATE,
};
//196482
struct Boss_Overgrown_ancient : public BossAI
{
Boss_Overgrown_ancient(Creature* creature) : BossAI(creature, DATA_OVERGROWN_ANCIENT) { }
void JustEngagedWith(Unit* who) override
{
Talk(0);
BossAI::JustEngagedWith(who);
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me);
events.ScheduleEvent(EVENT_SPLINTERBARKS, 4s);
events.ScheduleEvent(SPELL_HEALING_TOUCH, 25s);
events.ScheduleEvent(EVENT_BARK_BREAKER, 9s);
events.ScheduleEvent(EVENT_GERMINATE, 11s);
}
void EnterEvadeMode(EvadeReason /*why*/) override
{
summons.DespawnAll();
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
_EnterEvadeMode();
_DespawnAtEvade();
}
void JustDied(Unit* /*killer*/) override
{
_JustDied();
if (GameObject* door = me->FindNearestGameObject(GO_WALL_THREE, 500.0f))
door->DespawnOrUnsummon(3s, 3000s);
}
void UpdateAI(uint32 diff) override
{
scheduler.Update(diff);
if (!UpdateVictim())
return;
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
events.Update(diff);
while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_SPLINTERBARKS:
DoCast(SPELL_SPLINTERBARKS);
events.ScheduleEvent(EVENT_SPLINTERBARKS, 7s);
break;
case EVENT_HEALING_TOUCH:
DoCastSelf(SPELL_HEALING_TOUCH);
events.ScheduleEvent(EVENT_HEALING_TOUCH, 22s);
break;
case EVENT_BARK_BREAKER:
DoCastVictim(SPELL_BARK_BREAKER);
events.ScheduleEvent(EVENT_BARK_BREAKER, 12s);
break;
case EVENT_GERMINATE:
DoCastVictim(SPELL_GERMINATE);
DoCastVictim(SPELL_GERMINATE_DMG);
events.ScheduleEvent(EVENT_GERMINATE, 16s);
break;
}
}
}
};
//todo script npc 196642/hungry-lasher
void AddSC_Boss_Overgrown()
{
RegisterAlgetharAcademyCreatureAI(Boss_Overgrown_ancient);
};
@@ -0,0 +1,108 @@
/*
* Copyright (C) WowCommunity Project
*
* This SourceCode is NOT free a software. Please hold everything Private
* and read our Terms
*/
#include "SpellAuraEffects.h"
#include "SpellAuras.h"
#include "SpellHistory.h"
#include "Spell.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "algethar_academy.h"
enum vexamusSpells
{
SPELL_ARCANE_ORBS = 386088,
SPELL_OVERSURGE_MYTHIC = 391977,
SPELL_ARCANE_FISURE = 388651,
SPELL_ARCANE_EXPULSION = 385958,
SPELL_MANA_BOMBS = 386181,
};
enum vexamusEvents
{
EVENT_ARCANE_ORBS,
EVENT_OVERSURGE_MYTHIC,
EVENT_ARCANE_FISURE,
EVENT_ARCANE_EXPULSION,
EVENT_MANA_BOMBS,
};
//194181
struct Boss_Vexamus : public BossAI
{
Boss_Vexamus(Creature* creature) : BossAI(creature, DATA_VEXAMUS) { }
void JustEngagedWith(Unit* who) override
{
BossAI::JustEngagedWith(who);
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me);
events.ScheduleEvent(EVENT_ARCANE_ORBS, 4s);
events.ScheduleEvent(EVENT_ARCANE_EXPULSION, 12s);
events.ScheduleEvent(EVENT_MANA_BOMBS, 22s);
events.ScheduleEvent(EVENT_ARCANE_FISURE, 35s);
}
void EnterEvadeMode(EvadeReason /*why*/) override
{
summons.DespawnAll();
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
_EnterEvadeMode();
_DespawnAtEvade();
}
void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
void UpdateAI(uint32 diff) override
{
scheduler.Update(diff);
if (!UpdateVictim())
return;
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
events.Update(diff);
while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_ARCANE_ORBS:
DoCastVictim(SPELL_ARCANE_ORBS);
events.ScheduleEvent(EVENT_ARCANE_ORBS, 7s);
break;
case EVENT_ARCANE_EXPULSION:
DoCastVictim(SPELL_ARCANE_EXPULSION);
events.ScheduleEvent(EVENT_ARCANE_EXPULSION, 10s);
break;
case EVENT_MANA_BOMBS:
DoCastVictim(SPELL_MANA_BOMBS);
events.ScheduleEvent(EVENT_MANA_BOMBS, 20s);
break;
case EVENT_ARCANE_FISURE:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f))
me->CastSpell(target, SPELL_ARCANE_FISURE);
events.ScheduleEvent(EVENT_ARCANE_FISURE, 30s);
break;
default:
break;
}
}
}
};
void AddSC_Boss_Vexamus()
{
RegisterAlgetharAcademyCreatureAI(Boss_Vexamus);
};
@@ -0,0 +1,101 @@
/*
* Copyright (C) WowCommunity Project
*
* This SourceCode is NOT free a software. Please hold everything Private
* and read our Terms
*/
#include "SpellAuraEffects.h"
#include "SpellAuras.h"
#include "SpellHistory.h"
#include "Spell.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "algethar_academy.h"
enum CrawthSpells
{
SPELL_SAVAGE_PEACK = 376997, //casted on tanks
SPELL_OVERPOWERING_GUST = 377034,
SPELL_DEAFENING_SCREECH = 377004,
SPELL_DEAFENING_SCREECH_DAMAGE = 288917,
};
enum CrawthEvents
{
EVENT_SAVAGE_PEACK = 0,
EVENT_OVERPOWERING_GUST,
EVENT_DEAFENING_SCREECH,
};
//191736
struct Boss_crawth : public BossAI
{
Boss_crawth(Creature* creature) : BossAI(creature, DATA_CRAWTH) { }
void JustEngagedWith(Unit* who) override
{
BossAI::JustEngagedWith(who);
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me);
events.ScheduleEvent(EVENT_SAVAGE_PEACK, 4s);
events.ScheduleEvent(EVENT_OVERPOWERING_GUST, 10s);
events.ScheduleEvent(EVENT_DEAFENING_SCREECH, 17s);
}
void EnterEvadeMode(EvadeReason /*why*/) override
{
summons.DespawnAll();
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
_EnterEvadeMode();
_DespawnAtEvade();
}
void JustDied(Unit* killer) override
{
BossAI::JustDied(killer);
summons.DespawnAll();
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
}
void UpdateAI(uint32 diff) override
{
scheduler.Update(diff);
if (!UpdateVictim())
return;
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
events.Update(diff);
while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_SAVAGE_PEACK:
DoCastVictim(SPELL_SAVAGE_PEACK);
events.ScheduleEvent(EVENT_SAVAGE_PEACK, 7s);
break;
case EVENT_OVERPOWERING_GUST:
DoCastVictim(SPELL_OVERPOWERING_GUST);
events.ScheduleEvent(EVENT_OVERPOWERING_GUST, 10s);
break;
case EVENT_DEAFENING_SCREECH:
DoCastVictim(SPELL_DEAFENING_SCREECH);
DoCastVictim(SPELL_DEAFENING_SCREECH_DAMAGE);
events.ScheduleEvent(EVENT_DEAFENING_SCREECH, 18s);
break;
default:
break;
}
}
}
};
void AddSC_Boss_crawth()
{
RegisterAlgetharAcademyCreatureAI(Boss_crawth);
};
@@ -0,0 +1,48 @@
/*
* Copyright (C) WowCommunity Project
*
* This SourceCode is NOT free a software. Please hold everything Private
* and read our Terms
*/
#ifndef DEF_ALGETHAR_ACADEMY_H_
#define DEF_ALGETHAR_ACADEMY_H_
#include "CreatureAIImpl.h"
#define DataHeader "Algethar"
#define ALGScriptName "instance_algethar_academy"
uint32 const EncounterCount = 4;
enum ALGDataTypes
{
// Encounters
DATA_VEXAMUS = 0,
DATA_OVERGROWN_ANCIENT,
DATA_CRAWTH,
DATA_DORAGOSA,
};
enum AlgetharCreatureIds
{
// Bosses
BOSS_VEXAMUS = 194181,
BOSS_OVERGROWN_ANCIENT = 196482,
BOSS_CRAWTH = 191736,
BOSS_ECHO_OF_DORAGOSA = 190609,
//Misc
NPC_MAGIC_BOOK = 195416,
GO_WALL_THREE = 382475,
};
template <class AI, class T>
inline AI* GetAlgetharAcademyAI(T* obj)
{
return GetInstanceAI<AI>(obj, ALGScriptName);
}
#define RegisterAlgetharAcademyCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetAlgetharAcademyAI)
#endif
@@ -0,0 +1,115 @@
/*
* Copyright (C) WowCommunity Project
*
* This SourceCode is NOT free a software. Please hold everything Private
* and read our Terms
*/
#include "AreaBoundary.h"
#include "InstanceScript.h"
#include "ScriptMgr.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "MotionMaster.h"
#include "GenericMovementGenerator.h"
#include "AreaTrigger.h"
#include "AreaTriggerAI.h"
#include "algethar_academy.h"
ObjectData const creatureData[] =
{
{ BOSS_VEXAMUS, DATA_VEXAMUS },
{ BOSS_OVERGROWN_ANCIENT, DATA_OVERGROWN_ANCIENT },
{ BOSS_CRAWTH, DATA_CRAWTH },
{ BOSS_ECHO_OF_DORAGOSA, DATA_DORAGOSA },
{ 0, 0 } // END
};
DungeonEncounterData const encounters[] =
{
{ DATA_VEXAMUS, {{ 2562 }} },
{ DATA_OVERGROWN_ANCIENT, {{ 2563 }} },
{ DATA_CRAWTH, {{ 2564 }} },
{ DATA_DORAGOSA, {{ 2565 }} },
};
DoorData const doorData[] =
{
{ GO_WALL_THREE, DATA_OVERGROWN_ANCIENT, EncounterDoorBehavior::OpenWhenDone },
{ 0, 0, EncounterDoorBehavior::OpenWhenNotInProgress } // END
};
class instance_algethar_academy : public InstanceMapScript
{
public:
instance_algethar_academy() : InstanceMapScript(ALGScriptName, 2526) { }
struct instance_algethar_academy_InstanceMapScript: public InstanceScript
{
instance_algethar_academy_InstanceMapScript(InstanceMap* map) : InstanceScript(map)
{
SetHeaders(DataHeader);
SetBossNumber(EncounterCount);
LoadDoorData(doorData);
LoadDungeonEncounterData(encounters);
}
void OnPlayerEnter(Player* player) override
{
if (!player->GetGroup() || !player->GetGroup()->GetLeaderGUID())
return;
}
void OnPlayerExit(Player* player)
{
if (!player->GetGroup())
return;
}
};
InstanceScript* GetInstanceScript(InstanceMap* map) const override
{
return new instance_algethar_academy_InstanceMapScript(map);
}
};
//189668 profesor maxdormu
// NPC - Professor Maxdormu
// NPC - Professor Maxdormu
struct npc_profesor_maxdormu : public ScriptedAI
{
npc_profesor_maxdormu(Creature* creature) : ScriptedAI(creature) {}
void JustAppeared() override
{
_scheduler.Schedule(10s, [this](TaskContext /*ctx*/)
{
me->SummonCreature(BOSS_VEXAMUS, 1810.90f, -2791.16f, 903.43f, 4.455f);
Talk(1);
});
}
void MoveInLineOfSight(Unit* who) override
{
if (who->IsPlayer() && me->IsWithinDistInMap(who, 5.0f))
{
Talk(0);
me->DespawnOrUnsummon();
}
}
void UpdateAI(uint32 diff) override
{
_scheduler.Update(diff);
}
private:
TaskScheduler _scheduler;
};
void AddSC_instance_algethar_academy()
{
new instance_algethar_academy();
RegisterCreatureAI(npc_profesor_maxdormu);
}
@@ -45,6 +45,13 @@ void AddSC_boss_the_forgotten_experiment();
void AddSC_boss_warlord_kagni();
void AddSC_boss_zskarn_the_vigilant_steward();
// Algethar academy
void AddSC_instance_algethar_academy();
void AddSC_Boss_Vexamus();
void AddSC_Boss_Overgrown();
void AddSC_Boss_Echo_of_Doragosa();
void AddSC_Boss_crawth();
// The name of this function should match:
// void Add${NameOfDirectory}Scripts()
void AddDragonIslesScripts()
@@ -77,4 +84,11 @@ void AddDragonIslesScripts()
AddSC_boss_the_forgotten_experiment();
AddSC_boss_warlord_kagni();
AddSC_boss_zskarn_the_vigilant_steward();
// Algethar academy
AddSC_instance_algethar_academy();
AddSC_Boss_Vexamus();
AddSC_Boss_Overgrown();
AddSC_Boss_Echo_of_Doragosa();
AddSC_Boss_crawth();
}