aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Spells
diff options
context:
space:
mode:
authorsirikfoll <sirikfoll@hotmail.com>2017-11-17 23:41:11 -0200
committerfunjoker <funjoker109@gmail.com>2021-02-15 19:13:25 +0100
commitda76a0db5b5791040a883d969e18b5905af96244 (patch)
tree33300ebd3c85c00a69f72f5e2327e60b2e516200 /src/server/scripts/Spells
parenta87098fe856bb55e257aef02d6be6c0e55a55922 (diff)
Core/Scripts Fix issues with Midsummer's Ribbon Pole
Closes #6876 Fixed achievement Burning Hot Pole Dance Update scripts for quest Torch Tossing, using all correct spells and timers Updated script register model (cherry picked from commit 6e7e43172ecd73fcc43872b75917f16a876f47c7)
Diffstat (limited to 'src/server/scripts/Spells')
-rw-r--r--src/server/scripts/Spells/spell_holiday.cpp229
1 files changed, 145 insertions, 84 deletions
diff --git a/src/server/scripts/Spells/spell_holiday.cpp b/src/server/scripts/Spells/spell_holiday.cpp
index f6c58fdb7fa..dd90fb3d616 100644
--- a/src/server/scripts/Spells/spell_holiday.cpp
+++ b/src/server/scripts/Spells/spell_holiday.cpp
@@ -1491,117 +1491,175 @@ enum TorchSpells
SPELL_TORCH_TOSSING_PRACTICE = 46630,
SPELL_TORCH_TOSSING_TRAINING_SUCCESS_ALLIANCE = 45719,
SPELL_TORCH_TOSSING_TRAINING_SUCCESS_HORDE = 46651,
+ SPELL_TARGET_INDICATOR_COSMETIC = 46901,
+ SPELL_TARGET_INDICATOR = 45723,
SPELL_BRAZIERS_HIT = 45724
};
// 45724 - Braziers Hit!
-class spell_midsummer_braziers_hit : public SpellScriptLoader
+class spell_midsummer_braziers_hit : public AuraScript
{
- public:
- spell_midsummer_braziers_hit() : SpellScriptLoader("spell_midsummer_braziers_hit") { }
+ PrepareAuraScript(spell_midsummer_braziers_hit);
- class spell_midsummer_braziers_hit_AuraScript : public AuraScript
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo(
{
- PrepareAuraScript(spell_midsummer_braziers_hit_AuraScript);
+ SPELL_TORCH_TOSSING_TRAINING,
+ SPELL_TORCH_TOSSING_PRACTICE,
+ SPELL_TORCH_TOSSING_TRAINING_SUCCESS_ALLIANCE,
+ SPELL_TORCH_TOSSING_TRAINING_SUCCESS_HORDE
+ });
+ }
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_TORCH_TOSSING_TRAINING, SPELL_TORCH_TOSSING_PRACTICE });
- }
+ void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ Player* player = GetTarget()->ToPlayer();
+ if (!player)
+ return;
- void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- Player* player = GetTarget()->ToPlayer();
- if (!player)
- return;
+ if ((player->HasAura(SPELL_TORCH_TOSSING_TRAINING) && GetStackAmount() == 8) || (player->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();
+ }
+ }
- if ((player->HasAura(SPELL_TORCH_TOSSING_TRAINING) && GetStackAmount() == 8) || (player->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();
- }
- }
+ void Register() override
+ {
+ AfterEffectApply += AuraEffectApplyFn(spell_midsummer_braziers_hit::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAPPLY);
+ }
+};
- void Register() override
- {
- AfterEffectApply += AuraEffectApplyFn(spell_midsummer_braziers_hit_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AuraEffectHandleModes(AURA_EFFECT_HANDLE_REAPPLY));
- }
- };
+// 45907 - Torch Target Picker
+class spell_midsummer_torch_target_picker : public SpellScript
+{
+ PrepareSpellScript(spell_midsummer_torch_target_picker);
- AuraScript* GetAuraScript() const override
- {
- return new spell_midsummer_braziers_hit_AuraScript();
- }
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_TARGET_INDICATOR_COSMETIC, SPELL_TARGET_INDICATOR });
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ Unit* target = GetHitUnit();
+ target->CastSpell(target, SPELL_TARGET_INDICATOR_COSMETIC, true);
+ target->CastSpell(target, SPELL_TARGET_INDICATOR, true);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_midsummer_torch_target_picker::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+};
+
+// 46054 - Torch Toss (land)
+class spell_midsummer_torch_toss_land : public SpellScript
+{
+ PrepareSpellScript(spell_midsummer_torch_toss_land);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_BRAZIERS_HIT });
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ GetHitUnit()->CastSpell(GetCaster(), SPELL_BRAZIERS_HIT, true);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_midsummer_torch_toss_land::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
};
enum RibbonPoleData
{
- SPELL_HAS_FULL_MIDSUMMER_SET = 58933,
- SPELL_BURNING_HOT_POLE_DANCE = 58934,
- SPELL_RIBBON_DANCE_COSMETIC = 29726,
- SPELL_RIBBON_DANCE = 29175,
- GO_RIBBON_POLE = 181605,
+ SPELL_HAS_FULL_MIDSUMMER_SET = 58933,
+ SPELL_BURNING_HOT_POLE_DANCE = 58934,
+ SPELL_RIBBON_POLE_PERIODIC_VISUAL = 45406,
+ SPELL_RIBBON_DANCE = 29175,
+ SPELL_TEST_RIBBON_POLE_1 = 29705,
+ SPELL_TEST_RIBBON_POLE_2 = 29726,
+ SPELL_TEST_RIBBON_POLE_3 = 29727
};
-class spell_gen_ribbon_pole_dancer_check : public SpellScriptLoader
+// 29705, 29726, 29727 - Test Ribbon Pole Channel
+class spell_midsummer_test_ribbon_pole_channel : public AuraScript
{
- public:
- spell_gen_ribbon_pole_dancer_check() : SpellScriptLoader("spell_gen_ribbon_pole_dancer_check") { }
+ PrepareAuraScript(spell_midsummer_test_ribbon_pole_channel);
- class spell_gen_ribbon_pole_dancer_check_AuraScript : public AuraScript
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo(
{
- PrepareAuraScript(spell_gen_ribbon_pole_dancer_check_AuraScript);
+ SPELL_RIBBON_POLE_PERIODIC_VISUAL,
+ SPELL_BURNING_HOT_POLE_DANCE,
+ SPELL_HAS_FULL_MIDSUMMER_SET,
+ SPELL_RIBBON_DANCE
+ });
+ }
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo(
- {
- SPELL_HAS_FULL_MIDSUMMER_SET,
- SPELL_RIBBON_DANCE,
- SPELL_BURNING_HOT_POLE_DANCE
- });
- }
+ void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ GetTarget()->RemoveAurasDueToSpell(SPELL_RIBBON_POLE_PERIODIC_VISUAL);
+ }
- void PeriodicTick(AuraEffect const* /*aurEff*/)
- {
- Unit* target = GetTarget();
+ void PeriodicTick(AuraEffect const* /*aurEff*/)
+ {
+ Unit* target = GetTarget();
+ target->CastSpell(target, SPELL_RIBBON_POLE_PERIODIC_VISUAL, true);
- // check if aura needs to be removed
- if (!target->FindNearestGameObject(GO_RIBBON_POLE, 8.0f) || !target->HasUnitState(UNIT_STATE_CASTING))
- {
- target->InterruptNonMeleeSpells(false);
- target->RemoveAurasDueToSpell(GetId());
- target->RemoveAura(SPELL_RIBBON_DANCE_COSMETIC);
- return;
- }
+ if (Aura* aur = target->GetAura(SPELL_RIBBON_DANCE))
+ {
+ aur->SetMaxDuration(std::min(3600000, aur->GetMaxDuration() + 180000));
+ aur->RefreshDuration();
- // set xp buff duration
- if (Aura* aur = target->GetAura(SPELL_RIBBON_DANCE))
- {
- aur->SetMaxDuration(std::min(3600000, aur->GetMaxDuration() + 180000));
- aur->RefreshDuration();
+ if (aur->GetMaxDuration() == 3600000 && target->HasAura(SPELL_HAS_FULL_MIDSUMMER_SET))
+ target->CastSpell(target, SPELL_BURNING_HOT_POLE_DANCE, true);
+ }
+ else
+ target->CastSpell(target, SPELL_RIBBON_DANCE, true);
+ }
- // reward achievement criteria
- if (aur->GetMaxDuration() == 3600000 && target->HasAura(SPELL_HAS_FULL_MIDSUMMER_SET))
- target->CastSpell(target, SPELL_BURNING_HOT_POLE_DANCE, true);
- }
- else
- target->AddAura(SPELL_RIBBON_DANCE, target);
- }
+ void Register() override
+ {
+ AfterEffectRemove += AuraEffectRemoveFn(spell_midsummer_test_ribbon_pole_channel::HandleRemove, EFFECT_1, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL);
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_midsummer_test_ribbon_pole_channel::PeriodicTick, EFFECT_1, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
+ }
+};
- void Register() override
- {
- OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_ribbon_pole_dancer_check_AuraScript::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
- }
- };
+// 45406 - Holiday - Midsummer, Ribbon Pole Periodic Visual
+class spell_midsummer_ribbon_pole_periodic_visual : public AuraScript
+{
+ PrepareAuraScript(spell_midsummer_ribbon_pole_periodic_visual);
- AuraScript* GetAuraScript() const override
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo(
{
- return new spell_gen_ribbon_pole_dancer_check_AuraScript();
- }
+ SPELL_TEST_RIBBON_POLE_1,
+ SPELL_TEST_RIBBON_POLE_2,
+ SPELL_TEST_RIBBON_POLE_3
+ });
+ }
+
+ void PeriodicTick(AuraEffect const* /*aurEff*/)
+ {
+ Unit* target = GetTarget();
+ if (!target->HasAura(SPELL_TEST_RIBBON_POLE_1) && !target->HasAura(SPELL_TEST_RIBBON_POLE_2) && !target->HasAura(SPELL_TEST_RIBBON_POLE_3))
+ Remove();
+ }
+
+ void Register() override
+ {
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_midsummer_ribbon_pole_periodic_visual::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
+ }
};
void AddSC_holiday_spell_scripts()
@@ -1652,6 +1710,9 @@ void AddSC_holiday_spell_scripts()
new spell_brewfest_dismount_ram();
new spell_brewfest_barker_bunny();
// Midsummer Fire Festival
- new spell_midsummer_braziers_hit();
- new spell_gen_ribbon_pole_dancer_check();
+ RegisterAuraScript(spell_midsummer_braziers_hit);
+ RegisterSpellScript(spell_midsummer_torch_target_picker);
+ RegisterSpellScript(spell_midsummer_torch_toss_land);
+ RegisterAuraScript(spell_midsummer_test_ribbon_pole_channel);
+ RegisterAuraScript(spell_midsummer_ribbon_pole_periodic_visual);
}