atal dazar full
This commit is contained in:
@@ -37,10 +37,10 @@ enum AtalDazarDataTypes
|
|||||||
enum AtalDazarCreatureIds
|
enum AtalDazarCreatureIds
|
||||||
{
|
{
|
||||||
// Bosses
|
// Bosses
|
||||||
BOSS_PRIESTESS_ALUNZA = 129614,
|
BOSS_PRIESTESS_ALUNZA = 122967,
|
||||||
BOSS_VOLKAAL = 122965,
|
BOSS_VOLKAAL = 122965,
|
||||||
BOSS_REZAN = 122963,
|
BOSS_REZAN = 122963,
|
||||||
BOSS_YAZMA = 129412
|
BOSS_YAZMA = 122968
|
||||||
};
|
};
|
||||||
|
|
||||||
enum AtalDazarGameObjectIds
|
enum AtalDazarGameObjectIds
|
||||||
|
|||||||
@@ -0,0 +1,289 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) WowCommunity Project
|
||||||
|
*
|
||||||
|
* This SourceCode is NOT free a software. Please hold everything Private
|
||||||
|
* and read our Terms
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "ScriptMgr.h"
|
||||||
|
#include "SpellScript.h"
|
||||||
|
#include "SpellAuras.h"
|
||||||
|
#include "SpellAuraEffects.h"
|
||||||
|
#include "GameObject.h"
|
||||||
|
#include "InstanceScript.h"
|
||||||
|
#include "Map.h"
|
||||||
|
#include "MotionMaster.h"
|
||||||
|
#include "ObjectAccessor.h"
|
||||||
|
#include "Player.h"
|
||||||
|
#include "ScriptedCreature.h"
|
||||||
|
#include "TemporarySummon.h"
|
||||||
|
#include "atal_dazar.h"
|
||||||
|
|
||||||
|
enum Spells {
|
||||||
|
//Soulrend
|
||||||
|
SPELL_SOULREND_TARGET_SELECTOR = 249921,
|
||||||
|
SPELL_SOULREND = 249923,
|
||||||
|
SPELL_SOULREND_EXPLODE = 256577,
|
||||||
|
SPELL_SOULREND_DAMAGE_HEROIC = 259191,
|
||||||
|
SPELL_SOULREND_DAMAGE = 259145, //The heroic vertion have this damage too, so i don't know why this spell but just in case
|
||||||
|
SPELL_SOULREND_PYROSHADOW_ON = 259186,
|
||||||
|
//Basic Spells
|
||||||
|
SPELL_WRACKING_PAIN = 250096,
|
||||||
|
SPELL_SKEWER = 249919,
|
||||||
|
//Echoes of Shadra
|
||||||
|
SPELL_TARGET_SELECTOR = 257066, //HITS ALL UNITS IN RANGE
|
||||||
|
SPELL_ECHOES_OF_SHADOW = 250050,
|
||||||
|
SPELL_ECHOES_OF_SHADOW_EMPOWERED = 258612,
|
||||||
|
SPELL_ECHOES_OF_SHADOW_EMPOWERED2 = 256036,
|
||||||
|
SPELL_ECHOES_OF_SHADOW_SPAWN = 257291,
|
||||||
|
SPELL_ECHOES_OF_SHADOW_SPAWN_SMALL = 263092, // ?
|
||||||
|
SPELL_ECHOES_OF_SHAODW_AREATRIGGER = 263096, // the spiders on the stairs
|
||||||
|
SPELL_ECHOES_OF_SHADOW_AREATRIGGER = 250022, //Bigger
|
||||||
|
};
|
||||||
|
|
||||||
|
enum Npcs {
|
||||||
|
NPC_YAZMA = BOSS_YAZMA,
|
||||||
|
NPC_SOULREND = 125828,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
enum Events {
|
||||||
|
EVENT_SKEWER = 1,
|
||||||
|
EVENT_WRACKING_PAIN,
|
||||||
|
EVENT_ECHOES_OF_SHADOW,
|
||||||
|
EVENT_SHADOWY_REMAINS,
|
||||||
|
EVENT_SOULREND,
|
||||||
|
TALK_AGGRO,
|
||||||
|
TALK_DEATH,
|
||||||
|
EVENT_ECHOES_OF_SHADOW_SPAWN,
|
||||||
|
EVENT_SHADOW_EMPOWERED = 1,
|
||||||
|
EVENT_SHADOW_EMPOWERED_STOP = 2,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct boss_ataldazar_yazma : public BossAI
|
||||||
|
{
|
||||||
|
boss_ataldazar_yazma(Creature* creature) : BossAI(creature, DATA_YAZMA) { }
|
||||||
|
|
||||||
|
void InitializeAI() override
|
||||||
|
{
|
||||||
|
BossAI::InitializeAI();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SpellHitTarget(WorldObject* target, SpellInfo const* spell) override
|
||||||
|
{
|
||||||
|
if (spell->Id == SPELL_ECHOES_OF_SHADOW)
|
||||||
|
me->CastSpell(target, SPELL_ECHOES_OF_SHADOW_SPAWN);
|
||||||
|
if (spell->Id == SPELL_SOULREND)
|
||||||
|
me->SummonCreature(NPC_SOULREND, target->GetPosition(), TEMPSUMMON_MANUAL_DESPAWN, 0s);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Reset() override
|
||||||
|
{
|
||||||
|
summons.DespawnAll();
|
||||||
|
events.Reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
void JustEngagedWith(Unit* who) override
|
||||||
|
{
|
||||||
|
|
||||||
|
Talk(TALK_AGGRO);
|
||||||
|
// Events
|
||||||
|
events.ScheduleEvent(EVENT_WRACKING_PAIN, 3s);
|
||||||
|
events.ScheduleEvent(EVENT_SKEWER, 5s);
|
||||||
|
events.ScheduleEvent(EVENT_SOULREND, 10s);
|
||||||
|
events.ScheduleEvent(EVENT_ECHOES_OF_SHADOW, 16s);
|
||||||
|
|
||||||
|
BossAI::JustEngagedWith(who);
|
||||||
|
}
|
||||||
|
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
//TODO: This event is when yazma has 100 of mana, is made it in correct time but not blizzlike
|
||||||
|
case EVENT_SOULREND:
|
||||||
|
{
|
||||||
|
if (IsHeroic() || IsMythic())
|
||||||
|
{
|
||||||
|
std::list<Player*> playerList;
|
||||||
|
me->GetPlayerListInGrid(playerList, 100.0f);
|
||||||
|
for (auto player : playerList)
|
||||||
|
{
|
||||||
|
if (player != me->GetVictim())
|
||||||
|
me->CastSpell(player, SPELL_SOULREND);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, NonTankTargetSelector(me)))
|
||||||
|
me->CastSpell(target, SPELL_SOULREND);
|
||||||
|
events.ScheduleEvent(EVENT_SOULREND, 41s);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case EVENT_WRACKING_PAIN:
|
||||||
|
{
|
||||||
|
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
|
||||||
|
me->CastSpell(target, SPELL_WRACKING_PAIN);
|
||||||
|
events.ScheduleEvent(EVENT_WRACKING_PAIN, 23s);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case EVENT_SKEWER:
|
||||||
|
{
|
||||||
|
me->CastSpell(me->GetVictim(), SPELL_SKEWER);
|
||||||
|
events.ScheduleEvent(EVENT_SKEWER, 32s);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case EVENT_ECHOES_OF_SHADOW:
|
||||||
|
{
|
||||||
|
std::list<Player*> playerList;
|
||||||
|
me->GetPlayerListInGrid(playerList, 100.0f);
|
||||||
|
int count = 0;
|
||||||
|
for (auto player : playerList)
|
||||||
|
{
|
||||||
|
if (count == 4)
|
||||||
|
break;
|
||||||
|
me->CastSpell(player, SPELL_ECHOES_OF_SHADOW);
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
events.ScheduleEvent(EVENT_ECHOES_OF_SHADOW, 12s);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void JustDied(Unit* killer) override
|
||||||
|
{
|
||||||
|
Talk(TALK_DEATH);
|
||||||
|
summons.DespawnAll();
|
||||||
|
BossAI::JustDied(killer);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
};
|
||||||
|
|
||||||
|
//125828
|
||||||
|
struct npc_ataldazar_soulspawn : public ScriptedAI
|
||||||
|
{
|
||||||
|
npc_ataldazar_soulspawn(Creature* pCreature) : ScriptedAI(pCreature) {
|
||||||
|
if (Creature* yazma = me->FindNearestCreature(NPC_YAZMA, 100))
|
||||||
|
me->GetMotionMaster()->MoveFollow(yazma, 0, 0);
|
||||||
|
if (Player* nearestPlayer = me->SelectNearestPlayer(10))
|
||||||
|
me->SetDisplayId(nearestPlayer->GetDisplayId());
|
||||||
|
}
|
||||||
|
|
||||||
|
void Reset() override
|
||||||
|
{
|
||||||
|
events.Reset();
|
||||||
|
me->setActive(false);
|
||||||
|
if (Creature* yazma = me->FindNearestCreature(NPC_YAZMA, 100))
|
||||||
|
me->GetMotionMaster()->MoveFollow(yazma, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void InitializeAI() override
|
||||||
|
{
|
||||||
|
me->SetReactState(REACT_PASSIVE);
|
||||||
|
SetCombatMovement(false);
|
||||||
|
|
||||||
|
ScriptedAI::InitializeAI();
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateAI(uint32 /*diff*/) override
|
||||||
|
{
|
||||||
|
if (Creature* yazma = me->FindNearestCreature(NPC_YAZMA, 100))
|
||||||
|
if (me->GetDistance(yazma) < 1)
|
||||||
|
{
|
||||||
|
me->CastSpell(me, SPELL_SOULREND_EXPLODE);
|
||||||
|
me->DespawnOrUnsummon();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct npc_ataldazar_echo_of_shadra : public ScriptedAI
|
||||||
|
{
|
||||||
|
npc_ataldazar_echo_of_shadra(Creature* creature) : ScriptedAI(creature) {
|
||||||
|
me->GetMotionMaster()->MoveRandom(urand(0, 15));
|
||||||
|
}
|
||||||
|
|
||||||
|
void Reset() override
|
||||||
|
{
|
||||||
|
events.Reset();
|
||||||
|
me->setActive(false);
|
||||||
|
me->SetWalk(false);
|
||||||
|
me->GetMotionMaster()->MoveRandom(urand(0, 15));
|
||||||
|
}
|
||||||
|
|
||||||
|
void InitializeAI() override
|
||||||
|
{
|
||||||
|
me->SetReactState(REACT_PASSIVE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IsSummonedBy(WorldObject* /*summoner*/) override
|
||||||
|
{
|
||||||
|
events.ScheduleEvent(EVENT_SHADOW_EMPOWERED, 5s);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MovementInform(uint32 /*type*/, uint32 /*id*/) override
|
||||||
|
{
|
||||||
|
me->GetMotionMaster()->MoveRandom(urand(5, 15));
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateAI(uint32 diff) override
|
||||||
|
{
|
||||||
|
events.Update(diff);
|
||||||
|
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||||
|
return;
|
||||||
|
if (closestplayer && closestplayer != NULL)
|
||||||
|
if (me->GetDistance(closestplayer) < 1)
|
||||||
|
{
|
||||||
|
me->CastSpell(me, SPELL_ECHOES_OF_SHADOW_AREATRIGGER);
|
||||||
|
me->KillSelf();
|
||||||
|
}
|
||||||
|
while (uint32 eventId = events.ExecuteEvent())
|
||||||
|
{
|
||||||
|
switch (eventId)
|
||||||
|
{
|
||||||
|
case EVENT_SHADOW_EMPOWERED:
|
||||||
|
{
|
||||||
|
me->AddAura(SPELL_ECHOES_OF_SHADOW_EMPOWERED, me);
|
||||||
|
me->GetMotionMaster()->Clear();
|
||||||
|
closestplayer = me->SelectNearestPlayer(100.0f);
|
||||||
|
me->GetMotionMaster()->MoveFollow(closestplayer, 0, 0);
|
||||||
|
events.ScheduleEvent(EVENT_SHADOW_EMPOWERED_STOP, 3s);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case EVENT_SHADOW_EMPOWERED_STOP:
|
||||||
|
{
|
||||||
|
me->RemoveAura(SPELL_ECHOES_OF_SHADOW_EMPOWERED);
|
||||||
|
events.ScheduleEvent(EVENT_SHADOW_EMPOWERED, 6s);
|
||||||
|
me->GetMotionMaster()->Clear();
|
||||||
|
me->GetMotionMaster()->MoveRandom(urand(5, 15));
|
||||||
|
closestplayer = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
Player* closestplayer = NULL;
|
||||||
|
EventMap events;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void AddSC_boss_yazma()
|
||||||
|
{
|
||||||
|
RegisterAtalDazarCreatureAI(boss_ataldazar_yazma);
|
||||||
|
RegisterAtalDazarCreatureAI(npc_ataldazar_soulspawn);
|
||||||
|
RegisterAtalDazarCreatureAI(npc_ataldazar_echo_of_shadra);
|
||||||
|
}
|
||||||
@@ -22,6 +22,7 @@ void AddSC_instance_atal_dazar();
|
|||||||
void AddSC_boss_rezan();
|
void AddSC_boss_rezan();
|
||||||
void AddSC_boss_volkaal();
|
void AddSC_boss_volkaal();
|
||||||
void AddSC_boss_priestess_alun_za();
|
void AddSC_boss_priestess_alun_za();
|
||||||
|
void AddSC_boss_yazma();
|
||||||
|
|
||||||
// Underrot
|
// Underrot
|
||||||
void AddSC_instance_underrot();
|
void AddSC_instance_underrot();
|
||||||
@@ -46,6 +47,7 @@ void AddZandalarScripts()
|
|||||||
AddSC_boss_rezan();
|
AddSC_boss_rezan();
|
||||||
AddSC_boss_volkaal();
|
AddSC_boss_volkaal();
|
||||||
AddSC_boss_priestess_alun_za();
|
AddSC_boss_priestess_alun_za();
|
||||||
|
AddSC_boss_yazma();
|
||||||
|
|
||||||
// Underrot
|
// Underrot
|
||||||
AddSC_instance_underrot();
|
AddSC_instance_underrot();
|
||||||
|
|||||||
Reference in New Issue
Block a user