diff options
author | offl <11556157+offl@users.noreply.github.com> | 2022-02-17 23:37:49 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-03-26 15:05:42 +0100 |
commit | 90e0c04ca8def044240db671274f085464f06ef8 (patch) | |
tree | 488f6c0e73a830d1f7f80d7ee1a495498dc6505b /src | |
parent | 00f002b68c4caeaf319dc57cc154341f6279cb6d (diff) |
Scripts/Quest: Update 'Torture the Torturer' (#27782)
(cherry picked from commit f2904dd5775fdca7894bc16da6e6c0e2ebba79c7)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Northrend/zone_dragonblight.cpp | 177 |
1 files changed, 73 insertions, 104 deletions
diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp index be29233e746..0e21c933d82 100644 --- a/src/server/scripts/Northrend/zone_dragonblight.cpp +++ b/src/server/scripts/Northrend/zone_dragonblight.cpp @@ -24,6 +24,7 @@ #include "Player.h" #include "ScriptedCreature.h" #include "ScriptedGossip.h" +#include "SpellAuras.h" #include "SpellInfo.h" #include "SpellScript.h" #include "TemporarySummon.h" @@ -577,109 +578,6 @@ class npc_wyrmrest_defender : public CreatureScript } }; -/*##### -# npc_torturer_lecraft -#####*/ - -enum TorturerLeCraft -{ - SPELL_HEMORRHAGE = 30478, - SPELL_KIDNEY_SHOT = 30621, - SPELL_HIGH_EXECUTORS_BRANDING_IRON = 48603, - NPC_TORTURER_LECRAFT = 27394, - EVENT_HEMORRHAGE = 1, - EVENT_KIDNEY_SHOT = 2, - SAY_AGGRO = 0 -}; - -class npc_torturer_lecraft : public CreatureScript -{ - public: npc_torturer_lecraft() : CreatureScript("npc_torturer_lecraft") {} - - struct npc_torturer_lecraftAI : public ScriptedAI - { - npc_torturer_lecraftAI(Creature* creature) : ScriptedAI(creature) - { - _textCounter = 1; - } - - void Reset() override - { - _textCounter = 1; - _playerGUID.Clear(); - } - - void JustEngagedWith(Unit* who) override - { - _events.ScheduleEvent(EVENT_HEMORRHAGE, 5s, 8s); - _events.ScheduleEvent(EVENT_KIDNEY_SHOT, 12s, 15s); - - if (Player* player = who->ToPlayer()) - Talk (SAY_AGGRO, player); - } - - void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override - { - if (spellInfo->Id != SPELL_HIGH_EXECUTORS_BRANDING_IRON) - return; - - if (Player* player = caster->ToPlayer()) - { - if (_textCounter == 1) - _playerGUID = player->GetGUID(); - - if (_playerGUID != player->GetGUID()) - return; - - Talk(_textCounter, player); - - if (_textCounter == 5) - player->KilledMonsterCredit(NPC_TORTURER_LECRAFT); - - ++_textCounter; - - if (_textCounter == 13) - _textCounter = 6; - } - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - _events.Update(diff); - - while (uint32 eventId = _events.ExecuteEvent()) - { - switch (eventId) - { - case EVENT_HEMORRHAGE: - DoCastVictim(SPELL_HEMORRHAGE); - _events.ScheduleEvent(EVENT_HEMORRHAGE, 12s, 168s); - break; - case EVENT_KIDNEY_SHOT: - DoCastVictim(SPELL_KIDNEY_SHOT); - _events.ScheduleEvent(EVENT_KIDNEY_SHOT, 20s, 26s); - break; - default: - break; - } - } - DoMeleeAttackIfReady(); - } - private: - EventMap _events; - uint8 _textCounter; - ObjectGuid _playerGUID; - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_torturer_lecraftAI(creature); - } -}; - /*###### ## Quest 12053: The Might of the Horde ######*/ @@ -811,15 +709,86 @@ class spell_call_out_injured_soldier : public SpellScript } }; +/*###### +## Quest 12252: Torture the Torturer +######*/ + +enum TortureTheTorturer +{ + WHISPER_TORTURE_1 = 1, + WHISPER_TORTURE_2 = 2, + WHISPER_TORTURE_3 = 3, + WHISPER_TORTURE_4 = 4, + WHISPER_TORTURE_5 = 5, + WHISPER_TORTURE_RANDOM = 6, + + SPELL_TORTURER_KILL_CREDIT = 48607, + SPELL_BRANDING_IRON_IMPACT = 48614 +}; + +// 48603 - High Executor's Branding Iron +class spell_high_executor_branding_iron : public SpellScript +{ + PrepareSpellScript(spell_high_executor_branding_iron); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_TORTURER_KILL_CREDIT, SPELL_BRANDING_IRON_IMPACT }); + } + + void HandleWhisper() + { + Player* caster = GetCaster()->ToPlayer(); + Creature* target = GetHitCreature(); + if (!caster || !target) + return; + + target->CastSpell(target, SPELL_BRANDING_IRON_IMPACT); + + if (Aura* aura = caster->GetAura(GetSpellInfo()->Id)) + { + switch (aura->GetStackAmount()) + { + case 1: + target->AI()->Talk(WHISPER_TORTURE_1, caster); + break; + case 2: + target->AI()->Talk(WHISPER_TORTURE_2, caster); + break; + case 3: + target->AI()->Talk(WHISPER_TORTURE_3, caster); + break; + case 4: + target->AI()->Talk(WHISPER_TORTURE_4, caster); + break; + case 5: + target->AI()->Talk(WHISPER_TORTURE_5, caster); + target->CastSpell(caster, SPELL_TORTURER_KILL_CREDIT); + break; + case 6: + target->AI()->Talk(WHISPER_TORTURE_RANDOM, caster); + break; + default: + return; + } + } + } + + void Register() override + { + AfterHit += SpellHitFn(spell_high_executor_branding_iron::HandleWhisper); + } +}; + void AddSC_dragonblight() { new npc_commander_eligor_dawnbringer(); new spell_q12096_q12092_dummy(); new spell_q12096_q12092_bark(); new npc_wyrmrest_defender(); - new npc_torturer_lecraft(); RegisterSpellScript(spell_warsong_battle_standard); RegisterSpellScript(spell_moti_mirror_image_script_effect); RegisterSpellScript(spell_moti_hourglass_cast_see_invis_on_master); RegisterSpellScript(spell_call_out_injured_soldier); + RegisterSpellScript(spell_high_executor_branding_iron); } |