From ec84bf98f9aa0b54d495449000d8ed4e2be89b99 Mon Sep 17 00:00:00 2001 From: daobashun <49193927+fangshun2004@users.noreply.github.com> Date: Mon, 25 Nov 2024 05:03:34 +0800 Subject: [PATCH] fix(Scripts/Spell): Added random whispers of the Death Knight Newbie Village Lich King (#19006) * Use rand Spell Whispers * Added smart script for creature 28576|28577 * Added spell script name * Fixed the wrong name * The script name is lowercase Remove spaces * Remove spaces * Remove spaces * Players will only be able to whisper if they have mission 12678 Attacking civilians is the only way to whisper * Validate * Update src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp Co-authored-by: Kitzunu <24550914+Kitzunu@users.noreply.github.com> --------- Co-authored-by: Kitzunu <24550914+Kitzunu@users.noreply.github.com> --- .../rev_1717511658299508400.sql | 31 +++++++ .../ScarletEnclave/chapter1.cpp | 84 +++++++++++++++++++ 2 files changed, 115 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1717511658299508400.sql diff --git a/data/sql/updates/pending_db_world/rev_1717511658299508400.sql b/data/sql/updates/pending_db_world/rev_1717511658299508400.sql new file mode 100644 index 000000000..5abe029c7 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1717511658299508400.sql @@ -0,0 +1,31 @@ +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 28576; + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 28576) AND (`source_type` = 0) AND (`id` IN (8)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(28576, 0, 8, 0, 4, 0, 100, 0, 0, 0, 0, 0, 0, 0, 86, 58207, 0, 10, 128581, 28765, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Aggro - Cross Cast \'Lich King VO Blocker\''); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 22 AND `SourceEntry` = 28576 AND `SourceId` = 0; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `Comment`) VALUES +(22, 9, 28576, 0, 0, 14, 0, 12678, 0, 0, 1, 'Action invoker has finished or active quest If Chaos Drives, Let Suffering Hold The Reins (12678)'); + +DELETE +FROM `spell_script_names` +WHERE `spell_id` BETWEEN 58207 AND 58223; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(58207, 'spell_lich_king_vo_blocker'), +(58208, 'spell_lich_king_whisper'), +(58209, 'spell_lich_king_whisper'), +(58210, 'spell_lich_king_whisper'), +(58211, 'spell_lich_king_whisper'), +(58212, 'spell_lich_king_whisper'), +(58213, 'spell_lich_king_whisper'), +(58214, 'spell_lich_king_whisper'), +(58215, 'spell_lich_king_whisper'), +(58216, 'spell_lich_king_whisper'), +(58217, 'spell_lich_king_whisper'), +(58218, 'spell_lich_king_whisper'), +(58219, 'spell_lich_king_whisper'), +(58220, 'spell_lich_king_whisper'), +(58221, 'spell_lich_king_whisper'), +(58222, 'spell_lich_king_whisper'), +(58223, 'spell_lich_king_whisper'); diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp index def69437c..941bc2f9f 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp @@ -1215,6 +1215,88 @@ class spell_death_knight_initiate_visual : public SpellScript } }; +enum spells_lich_king_whisper +{ + SPELL_LICH_KING_VO_BLOCKER = 58207, + SPELL_LICHKINGDK001 = 58208, + SPELL_LICHKINGDK002 = 58209, + SPELL_LICHKINGDK003 = 58210, + SPELL_LICHKINGDK004 = 58211, + SPELL_LICHKINGDK005 = 58212, + SPELL_LICHKINGDK006 = 58213, + SPELL_LICHKINGDK007 = 58214, + SPELL_LICHKINGDK008 = 58215, + SPELL_LICHKINGDK009 = 58216, + SPELL_LICHKINGDK010 = 58217, + SPELL_LICHKINGDK011 = 58218, + SPELL_LICHKINGDK012 = 58219, + SPELL_LICHKINGDK013 = 58220, + SPELL_LICHKINGDK014 = 58221, + SPELL_LICHKINGDK015 = 58222, + SPELL_LICHKINGDK016 = 58223 +}; + +//spell 58207 rand Whisper +class spell_lich_king_vo_blocker : public AuraScript +{ + PrepareAuraScript(spell_lich_king_vo_blocker); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo + ({ + SPELL_LICHKINGDK001, SPELL_LICHKINGDK002, SPELL_LICHKINGDK003, SPELL_LICHKINGDK004, + SPELL_LICHKINGDK005, SPELL_LICHKINGDK006, SPELL_LICHKINGDK007, SPELL_LICHKINGDK008, + SPELL_LICHKINGDK009, SPELL_LICHKINGDK010, SPELL_LICHKINGDK011, SPELL_LICHKINGDK012, + SPELL_LICHKINGDK013, SPELL_LICHKINGDK014, SPELL_LICHKINGDK015, SPELL_LICHKINGDK016 + }); + } + + void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (Player* target = GetTarget()->ToPlayer()) + { + //spell 58208-58223 + GetCaster()->CastSpell(target, urand(SPELL_LICHKINGDK001, SPELL_LICHKINGDK016), true); + } + } + + void Register() override + { + OnEffectApply += AuraEffectApplyFn(spell_lich_king_vo_blocker::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + +// 58208 - 58224 - Creature - The Lich King (28765) Whisper +class spell_lich_king_whisper : public SpellScript +{ + PrepareSpellScript(spell_lich_king_whisper); + + bool Validate(SpellInfo const* spellInfo) override + { + return sObjectMgr->GetBroadcastText(uint32(spellInfo->GetEffect(EFFECT_0).CalcValue())) && + sSoundEntriesStore.LookupEntry(uint32(spellInfo->GetEffect(EFFECT_1).CalcValue())); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + if (Player* player = GetHitPlayer()) + GetCaster()->Whisper(uint32(GetEffectValue()), player, false); + } + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + if (Player* player = GetHitPlayer()) + player->PlayDistanceSound(uint32(GetEffectValue()), player); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_lich_king_whisper::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + OnEffectHitTarget += SpellEffectFn(spell_lich_king_whisper::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY); + } +}; + void AddSC_the_scarlet_enclave_c1() { // Ours @@ -1237,4 +1319,6 @@ void AddSC_the_scarlet_enclave_c1() new go_inconspicuous_mine_car(); RegisterSpellScript(spell_death_knight_initiate_visual); + RegisterSpellScript(spell_lich_king_whisper); + RegisterSpellScript(spell_lich_king_vo_blocker); }