From f374f07590f433e57f744045fa88f00450c4c05c Mon Sep 17 00:00:00 2001 From: GMKyle Date: Thu, 7 Nov 2019 02:25:03 -0500 Subject: [PATCH] fix(Core/Dungeon): Elder Nadox hardcore texts + Ahn'kahar Spell Flinger spells. (#2244) --- .../rev_1567002995154862031.sql | 8 +++ .../Northrend/AzjolNerub/ahnkahet/ahnkahet.h | 5 ++ .../AzjolNerub/ahnkahet/boss_elder_nadox.cpp | 70 +++++-------------- .../AzjolNerub/ahnkahet/instance_ahnkahet.cpp | 45 ++++++++++++ 4 files changed, 77 insertions(+), 51 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1567002995154862031.sql diff --git a/data/sql/updates/pending_db_world/rev_1567002995154862031.sql b/data/sql/updates/pending_db_world/rev_1567002995154862031.sql new file mode 100644 index 000000000..d0146539e --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1567002995154862031.sql @@ -0,0 +1,8 @@ +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1567002995154862031'); + +DELETE FROM `spell_script_names` WHERE `spell_id` IN (56698, 59102, 56702, 59103); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(56698, 'spell_gen_default_count_pct_from_max_hp'), +(59102, 'spell_gen_default_count_pct_from_max_hp'), +(56702, 'spell_shadow_sickle_periodic_damage'), +(59103, 'spell_shadow_sickle_periodic_damage'); diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/ahnkahet.h b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/ahnkahet.h index 4b473c42d..036767fc4 100644 --- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/ahnkahet.h +++ b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/ahnkahet.h @@ -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 diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_elder_nadox.cpp b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_elder_nadox.cpp index e0684091d..5d9e06e19 100644 --- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_elder_nadox.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_elder_nadox.cpp @@ -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; diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/instance_ahnkahet.cpp b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/instance_ahnkahet.cpp index 2fb885c76..8fb2a6b56 100644 --- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/instance_ahnkahet.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/instance_ahnkahet.cpp @@ -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 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(); }