From c66cbfbde48fe200d90df8b81de24e6ef6696626 Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Tue, 19 Nov 2019 16:50:06 +0100 Subject: [PATCH] Core/Spells: * fixed Searing Flames talent * fixed Improved Lava Lash talent --- .../custom/custom_2019_11_19_01_world.sql | 7 ++ src/server/scripts/Spells/spell_shaman.cpp | 116 +++++++++++++++++- 2 files changed, 121 insertions(+), 2 deletions(-) create mode 100644 sql/updates/world/custom/custom_2019_11_19_01_world.sql diff --git a/sql/updates/world/custom/custom_2019_11_19_01_world.sql b/sql/updates/world/custom/custom_2019_11_19_01_world.sql new file mode 100644 index 00000000000..e59aba38583 --- /dev/null +++ b/sql/updates/world/custom/custom_2019_11_19_01_world.sql @@ -0,0 +1,7 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName` IN +('spell_sha_searing_bolt', +'spell_sha_lava_lash_script'); + +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(3606, 'spell_sha_searing_bolt'), +(105792 , 'spell_sha_lava_lash_script'); diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp index d9a8126bb08..2176cff999a 100644 --- a/src/server/scripts/Spells/spell_shaman.cpp +++ b/src/server/scripts/Spells/spell_shaman.cpp @@ -66,6 +66,7 @@ enum ShamanSpells SPELL_SHAMAN_LAVA_BURST_TRIGGERED = 77451, SPELL_SHAMAN_LAVA_FLOWS_R1 = 51480, SPELL_SHAMAN_LAVA_FLOWS_TRIGGERED_R1 = 65264, + SPELL_SHAMAN_LAVA_LASH_SPREAD_FLAME_SHOCK = 105792, SPELL_SHAMAN_LAVA_SURGE = 77762, SPELL_SHAMAN_LIGHTNING_BOLT = 403, SPELL_SHAMAN_LIGHTNING_BOLT_TRIGGERED = 45284, @@ -78,6 +79,7 @@ enum ShamanSpells SPELL_SHAMAN_RESURGENCE_ENERGIZE = 101033, SPELL_SHAMAN_RIPTIDE = 61295, SPELL_SHAMAN_SATED = 57724, + SPELL_SHAMAN_SEARING_FLAMES_DAMAGE = 77661, SPELL_SHAMAN_STORM_EARTH_AND_FIRE = 51483, SPELL_SHAMAN_TELLURIC_CURRENTS = 82987, SPELL_SHAMAN_TOTEM_EARTHBIND_EARTHGRAB = 64695, @@ -105,7 +107,9 @@ enum ShamanSpellIcons SHAMAN_ICON_ID_BLESSING_OF_THE_ETERNALS = 3157, SHAMAN_ICON_ID_FULMINATION = 2010, SHAMAN_ICON_ID_GLYPH_OF_LIGHTNING_SHIELD = 19, - SHAMAN_ICON_ID_GLYPH_OF_EARTH_SHIELD = 2015 + SHAMAN_ICON_ID_GLYPH_OF_EARTH_SHIELD = 2015, + SHAMAN_ICON_ID_SEARING_FLAMES = 680, + SHAMAN_ICON_ID_IMPROVED_LAVA_LASH = 4780 }; enum MiscSpells @@ -895,14 +899,43 @@ class spell_sha_lava_lash : public SpellScript return GetCaster()->GetTypeId() == TYPEID_PLAYER; } + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo( + { + SPELL_SHAMAN_SEARING_FLAMES_DAMAGE, + SPELL_SHAMAN_LAVA_LASH_SPREAD_FLAME_SHOCK, + SPELL_SHAMAN_FLAME_SHOCK + }); + } + void HandleDamageBonus(SpellEffIndex /*effIndex*/) { Player* caster = GetCaster()->ToPlayer(); + Unit* target = GetHitUnit(); + if (!target || !caster) + return; + + int32 bonusDamage = 0; // Increase damage of lava lash by 40% if the offhand weapon is enchanted with Flametongue if (Item* offhand = caster->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND)) if (offhand->GetEnchantmentId(TEMP_ENCHANTMENT_SLOT) == SHAMAN_ENCHANTMENT_ID_FLAMETONGUE) - SetEffectValue(GetEffectValue() + GetSpellInfo()->Effects[EFFECT_1].CalcValue(caster)); + bonusDamage += GetSpellInfo()->Effects[EFFECT_1].CalcValue(caster); + + // Improved Lava Lash + if (AuraEffect const* bonusAura = caster->GetDummyAuraEffect(SPELLFAMILY_SHAMAN, SHAMAN_ICON_ID_IMPROVED_LAVA_LASH, EFFECT_1)) + { + if (Aura* aura = target->GetAura(SPELL_SHAMAN_SEARING_FLAMES_DAMAGE, caster->GetGUID())) + { + bonusDamage += bonusAura->GetAmount() * aura->GetStackAmount(); + aura->Remove(); + + if (target->HasAura(SPELL_SHAMAN_FLAME_SHOCK, caster->GetGUID())) + caster->CastCustomSpell(SPELL_SHAMAN_LAVA_LASH_SPREAD_FLAME_SHOCK, SPELLVALUE_MAX_TARGETS, 4, target, true, nullptr, bonusAura); + } + } + SetEffectValue(GetEffectValue() + bonusDamage); } void Register() override @@ -911,6 +944,56 @@ class spell_sha_lava_lash : public SpellScript } }; +class spell_sha_lava_lash_script : public SpellScript +{ + PrepareSpellScript(spell_sha_lava_lash_script); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_SHAMAN_FLAME_SHOCK }); + } + + void FilterTargets(std::list& targets) + { + if (targets.empty()) + return; + + targets.remove_if([this](WorldObject const* obj)->bool + { + Unit const* target = obj->ToUnit(); + + if (!target || obj == GetExplTargetUnit()) + return true; + + if (target->HasAura(SPELL_SHAMAN_FLAME_SHOCK, GetCaster()->GetGUID())) + return true; + + return target->HasBreakableByDamageCrowdControlAura(); + }); + + if (targets.size() > 4) + targets.resize(4); + } + + void HandleScriptEffect(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); + Unit* spellTarget = GetExplTargetUnit(); + if (!caster || !spellTarget) + return; + + if (Aura* flameshock = spellTarget->GetAura(SPELL_SHAMAN_FLAME_SHOCK, caster->GetGUID())) + if (Aura* spread = caster->AddAura(SPELL_SHAMAN_FLAME_SHOCK, GetHitUnit())) + spread->SetDuration(flameshock->GetDuration()); + } + + void Register() override + { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_lava_lash_script::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY); + OnEffectHitTarget += SpellEffectFn(spell_sha_lava_lash_script::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + class spell_sha_lava_surge : public SpellScriptLoader { public: @@ -2014,6 +2097,33 @@ class spell_sha_lightning_shield : public AuraScript } }; +class spell_sha_searing_bolt : public SpellScript +{ + PrepareSpellScript(spell_sha_searing_bolt); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_SHAMAN_SEARING_FLAMES_DAMAGE }); + } + + void HandleSearingFlames(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); + if (!caster) + return; + + if (Unit* owner = caster->GetOwner()) + if (AuraEffect const* effect = owner->GetDummyAuraEffect(SPELLFAMILY_SHAMAN, SHAMAN_ICON_ID_SEARING_FLAMES, EFFECT_0)) + if (roll_chance_i(effect->GetAmount())) + owner->CastSpell(GetHitUnit(), SPELL_SHAMAN_SEARING_FLAMES_DAMAGE, true, nullptr, effect); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_sha_searing_bolt::HandleSearingFlames, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); + } +}; + void AddSC_shaman_spell_scripts() { new spell_sha_ancestral_awakening(); @@ -2047,6 +2157,7 @@ void AddSC_shaman_spell_scripts() new spell_sha_item_mana_surge(); new spell_sha_item_t10_elemental_2p_bonus(); RegisterSpellScript(spell_sha_lava_lash); + RegisterSpellScript(spell_sha_lava_lash_script); new spell_sha_lava_surge(); new spell_sha_lava_surge_proc(); RegisterAuraScript(spell_sha_lightning_shield); @@ -2054,6 +2165,7 @@ void AddSC_shaman_spell_scripts() new spell_sha_nature_guardian(); new spell_sha_resurgence(); RegisterAuraScript(spell_sha_rolling_thunder); + RegisterSpellScript(spell_sha_searing_bolt); RegisterAuraScript(spell_sha_static_shock); new spell_sha_telluric_currents(); new spell_sha_thunderstorm();