fix(Core/Dungeon): Elder Nadox hardcore texts + Ahn'kahar Spell Flinger spells. (#2244)

This commit is contained in:
GMKyle
2019-11-07 02:25:03 -05:00
committed by Stoabrogga
parent c294dd3142
commit f374f07590
4 changed files with 77 additions and 51 deletions

View File

@@ -3,6 +3,7 @@
#define DEF_AHNKAHET_H
#define MAX_ENCOUNTER 5
enum Data64
{
DATA_ELDER_NADOX,
@@ -33,6 +34,10 @@ enum Npc
NPC_JEDOGA_SHADOWSEEKER = 29310,
NPC_HERALD_JOLAZJ = 29311,
NPC_AMANITAR = 30258,
//spells
SPELL_SHADOW_SICKLE = 56701, // Shadow Sickle Normal
SPELL_SHADOW_SICKLE_H = 59104 // Shadow Sickle Heroic
};
#endif

View File

@@ -8,13 +8,13 @@
#include "SpellAuras.h"
#include "SpellScript.h"
enum misc
enum Misc
{
// ACTIONS
ACTION_GUARDIAN_DIED = 1,
};
enum spells
enum Spells
{
// NADOX
SPELL_BROOD_PLAGUE = 56130,
@@ -30,13 +30,13 @@ enum spells
SPELL_SWARMER_AURA = 56158,
};
enum creatures
enum Creatures
{
NPC_AHNKAHAR_SWARMER = 30178,
NPC_AHNKAHAR_GUARDIAN_ENTRY = 30176,
};
enum events
enum Events
{
EVENT_CHECK_HEALTH = 1,
EVENT_CHECK_HOME = 2,
@@ -46,19 +46,15 @@ enum events
EVENT_SUMMON_GUARD = 6,
};
enum sounds
enum Yells
{
SOUND_AGGRO = 14033,
SOUND_SUMMON1 = 14034,
SOUND_SUMMON2 = 14035,
SOUND_SLAY1 = 14036,
SOUND_SLAY2 = 14037,
SOUND_SLAY3 = 14038,
SOUND_DEATH = 14039,
SAY_AGGRO = 0,
SAY_SLAY = 1,
SAY_DEATH = 2,
SAY_EGG_SAC = 3,
EMOTE_HATCHES = 4
};
#define EMOTE_HATCHES "An Ahn'kahar Guardian hatches!"
class boss_elder_nadox : public CreatureScript
{
public:
@@ -106,8 +102,7 @@ public:
void EnterCombat(Unit * /*who*/)
{
me->MonsterYell("The secrets of the deep shall remain hidden.", LANG_UNIVERSAL, 0);
me->PlayDirectSound(SOUND_AGGRO);
Talk(SAY_AGGRO);
events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000);
events.ScheduleEvent(EVENT_SWARMER, 10000);
@@ -128,26 +123,10 @@ public:
}
}
void KilledUnit(Unit * /*victim*/)
void KilledUnit(Unit* victim)
{
if (urand(0,1))
return;
switch (rand()%3)
{
case 0:
me->MonsterYell("Sleep now, in the cold dark.", LANG_UNIVERSAL,0);
me->PlayDirectSound(SOUND_SLAY1);
break;
case 1:
me->MonsterYell("For the Lich King!", LANG_UNIVERSAL,0);
me->PlayDirectSound(SOUND_SLAY2);
break;
case 2:
me->MonsterYell("Perhaps we will be allies soon.", LANG_UNIVERSAL,0);
me->PlayDirectSound(SOUND_SLAY3);
break;
}
if (victim->GetTypeId() == TYPEID_PLAYER)
Talk(SAY_SLAY);
}
void JustDied(Unit* /*killer*/)
@@ -155,8 +134,8 @@ public:
events.Reset();
summons.DespawnAll();
me->MonsterYell("Master, is my service complete?", LANG_UNIVERSAL, 0);
me->PlayDirectSound(SOUND_DEATH);
Talk(SAY_DEATH);
if (pInstance)
pInstance->SetData(DATA_ELDER_NADOX_EVENT, DONE);
}
@@ -166,23 +145,12 @@ public:
if (cr)
{
if (cr->GetEntry() == NPC_AHNKAHAR_GUARDIAN_ENTRY )
{
switch (rand()%2)
{
case 0:
me->MonsterYell("The young must not grow hungry...", LANG_UNIVERSAL, 0);
me->PlayDirectSound(SOUND_SUMMON1);
break;
case 1:
me->MonsterYell("Shhhad ak kereeesshh chak-k-k!", LANG_UNIVERSAL, 0);
me->PlayDirectSound(SOUND_SUMMON2);
break;
}
}
Talk(SAY_EGG_SAC);
summons.Summon(cr);
}
}
void UpdateAI(uint32 diff)
{
if (!UpdateVictim())
@@ -207,7 +175,7 @@ public:
}
case EVENT_SUMMON_GUARD:
{
me->MonsterTextEmote(EMOTE_HATCHES, me, true);
Talk(EMOTE_HATCHES, me);
SummonHelpers(false);
events.PopEvent();
break;

View File

@@ -4,6 +4,8 @@
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "SpellScript.h"
#include "Player.h"
#include "ahnkahet.h"
class instance_ahnkahet : public InstanceMapScript
@@ -248,7 +250,50 @@ public:
}
};
class spell_shadow_sickle_periodic_damage : public SpellScriptLoader
{
public:
spell_shadow_sickle_periodic_damage() : SpellScriptLoader("spell_shadow_sickle_periodic_damage") { }
class spell_shadow_sickle_periodic_damage_AuraScript : public AuraScript
{
PrepareAuraScript(spell_shadow_sickle_periodic_damage_AuraScript);
void HandlePeriodic(AuraEffect const* /*aurEff*/)
{
PreventDefaultAction();
if (Unit* caster = GetCaster())
{
std::list<Player*> PlayerList;
PlayerList.clear();
Map::PlayerList const &players = caster->GetMap()->GetPlayers();
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
if (Player* player = itr->GetSource()->ToPlayer())
if (player->IsWithinDist(caster, 40.0f) && player->IsAlive()) // SPELL_SHADOW_SICKLE_H & SPELL_SHADOW_SICKLE range is 40 yards
PlayerList.push_back(player);
if (!PlayerList.empty())
caster->CastSpell(Trinity::Containers::SelectRandomContainerElement(PlayerList), caster->GetMap()->IsHeroic() ? SPELL_SHADOW_SICKLE_H : SPELL_SHADOW_SICKLE, true);
}
}
void Register()
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_shadow_sickle_periodic_damage_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
AuraScript* GetAuraScript() const
{
return new spell_shadow_sickle_periodic_damage_AuraScript();
}
};
void AddSC_instance_ahnkahet()
{
new instance_ahnkahet;
new spell_shadow_sickle_periodic_damage();
}