From d1a2f20b56aebc220b48560dfcd0e6bb72e90f7e Mon Sep 17 00:00:00 2001 From: offl <11556157+offl@users.noreply.github.com> Date: Tue, 4 Nov 2025 23:37:06 +0200 Subject: Scripts/Spells: Migrate some spell linked spells to spell scripts (#31279) --- src/server/scripts/Events/midsummer.cpp | 86 +++++++++++++++++++++++++++------ 1 file changed, 72 insertions(+), 14 deletions(-) (limited to 'src/server/scripts/Events') diff --git a/src/server/scripts/Events/midsummer.cpp b/src/server/scripts/Events/midsummer.cpp index b36fd1a04b6..d0bc05365ae 100644 --- a/src/server/scripts/Events/midsummer.cpp +++ b/src/server/scripts/Events/midsummer.cpp @@ -25,11 +25,13 @@ enum TorchSpells { SPELL_TORCH_TOSSING_TRAINING = 45716, SPELL_TORCH_TOSSING_PRACTICE = 46630, - SPELL_TORCH_TOSSING_TRAINING_SUCCESS_ALLIANCE = 45719, - SPELL_TORCH_TOSSING_TRAINING_SUCCESS_HORDE = 46651, + SPELL_TORCH_TOSSING_TRAINING_SUCCESS_1 = 45719, + SPELL_TORCH_TOSSING_TRAINING_SUCCESS_2 = 46651, + SPELL_REMOVE_TORCHES = 46074, SPELL_TARGET_INDICATOR_COSMETIC = 46901, SPELL_TARGET_INDICATOR = 45723, - SPELL_BRAZIERS_HIT = 45724 + SPELL_BRAZIERS_HIT = 45724, + SPELL_TARGET_DETECT_INVISIBILITY = 45725 }; // 45724 - Braziers Hit! @@ -43,24 +45,21 @@ class spell_midsummer_braziers_hit : public AuraScript { SPELL_TORCH_TOSSING_TRAINING, SPELL_TORCH_TOSSING_PRACTICE, - SPELL_TORCH_TOSSING_TRAINING_SUCCESS_ALLIANCE, - SPELL_TORCH_TOSSING_TRAINING_SUCCESS_HORDE + SPELL_TORCH_TOSSING_TRAINING_SUCCESS_1, + SPELL_TORCH_TOSSING_TRAINING_SUCCESS_2, + SPELL_REMOVE_TORCHES }); } void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { - Player* player = GetTarget()->ToPlayer(); - if (!player) - return; + Unit* target = GetTarget(); - if ((player->HasAura(SPELL_TORCH_TOSSING_TRAINING) && GetStackAmount() == 8) || (player->HasAura(SPELL_TORCH_TOSSING_PRACTICE) && GetStackAmount() == 20)) + if ((target->HasAura(SPELL_TORCH_TOSSING_TRAINING) && GetStackAmount() == 8) || (target->HasAura(SPELL_TORCH_TOSSING_PRACTICE) && GetStackAmount() == 20)) { - if (player->GetTeam() == ALLIANCE) - player->CastSpell(player, SPELL_TORCH_TOSSING_TRAINING_SUCCESS_ALLIANCE, true); - else if (player->GetTeam() == HORDE) - player->CastSpell(player, SPELL_TORCH_TOSSING_TRAINING_SUCCESS_HORDE, true); - Remove(); + target->CastSpell(target, SPELL_TORCH_TOSSING_TRAINING_SUCCESS_1, true); + target->CastSpell(target, SPELL_TORCH_TOSSING_TRAINING_SUCCESS_2, true); + target->CastSpell(target, SPELL_REMOVE_TORCHES, true); } } @@ -70,6 +69,63 @@ class spell_midsummer_braziers_hit : public AuraScript } }; +// 46074 - Remove Torches +class spell_midsummer_remove_torches : public SpellScript +{ + PrepareSpellScript(spell_midsummer_remove_torches); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_TORCH_TOSSING_TRAINING, SPELL_TORCH_TOSSING_PRACTICE, SPELL_BRAZIERS_HIT }); + } + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + Unit* target = GetHitUnit(); + target->RemoveAurasDueToSpell(SPELL_TORCH_TOSSING_TRAINING); + target->RemoveAurasDueToSpell(SPELL_TORCH_TOSSING_PRACTICE); + target->RemoveAurasDueToSpell(SPELL_BRAZIERS_HIT); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_midsummer_remove_torches::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +// 45716 - Torch Tossing Training +// 46630 - Torch Tossing Practice +class spell_midsummer_torch_tossing_training_practice : public AuraScript +{ + PrepareAuraScript(spell_midsummer_torch_tossing_training_practice); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_BRAZIERS_HIT, SPELL_TARGET_DETECT_INVISIBILITY }); + } + + void AfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Unit* target = GetTarget(); + // Is this spell really used? Not shown in sniffs + target->CastSpell(target, SPELL_TARGET_DETECT_INVISIBILITY, true); + target->RemoveAurasDueToSpell(SPELL_BRAZIERS_HIT); + } + + void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Unit* target = GetTarget(); + target->RemoveAurasDueToSpell(SPELL_TARGET_DETECT_INVISIBILITY); + target->RemoveAurasDueToSpell(SPELL_BRAZIERS_HIT); + } + + void Register() override + { + AfterEffectApply += AuraEffectApplyFn(spell_midsummer_torch_tossing_training_practice::AfterApply, EFFECT_0, SPELL_AURA_DETECT_AMORE, AURA_EFFECT_HANDLE_REAL); + AfterEffectRemove += AuraEffectRemoveFn(spell_midsummer_torch_tossing_training_practice::AfterRemove, EFFECT_0, SPELL_AURA_DETECT_AMORE, AURA_EFFECT_HANDLE_REAL); + } +}; + // 45907 - Torch Target Picker class spell_midsummer_torch_target_picker : public SpellScript { @@ -544,6 +600,8 @@ class spell_midsummer_stamp_out_bonfire_event : public SpellScript void AddSC_event_midsummer() { RegisterSpellScript(spell_midsummer_braziers_hit); + RegisterSpellScript(spell_midsummer_remove_torches); + RegisterSpellScript(spell_midsummer_torch_tossing_training_practice); RegisterSpellScript(spell_midsummer_torch_target_picker); RegisterSpellScript(spell_midsummer_torch_toss_land); RegisterSpellScript(spell_midsummer_test_ribbon_pole_channel); -- cgit v1.2.3