From 786ad2d34fa94d9f330669d13bc6432a6e004e42 Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Thu, 22 Mar 2018 22:41:48 +0100 Subject: [PATCH] Core/Spells: updated and fixed Deep Wounds --- .../4.3.4/custom_2018_03_22_00_world.sql | 4 ++ src/server/game/Spells/SpellMgr.cpp | 7 --- src/server/scripts/Spells/spell_warrior.cpp | 62 ++++++++++--------- 3 files changed, 38 insertions(+), 35 deletions(-) create mode 100644 sql/updates/world/4.3.4/custom_2018_03_22_00_world.sql diff --git a/sql/updates/world/4.3.4/custom_2018_03_22_00_world.sql b/sql/updates/world/4.3.4/custom_2018_03_22_00_world.sql new file mode 100644 index 00000000000..6ebd136dd0f --- /dev/null +++ b/sql/updates/world/4.3.4/custom_2018_03_22_00_world.sql @@ -0,0 +1,4 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName`= 'spell_warr_deep_wounds'; + +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(-12834, 'spell_warr_deep_wounds'); diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 621716491a2..b83269f130e 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -3267,13 +3267,6 @@ void SpellMgr::LoadSpellInfoCorrections() spellInfo->AttributesEx3 |= SPELL_ATTR3_NO_DONE_BONUS; }); - // Deep Wounds - ApplySpellFix({ 12721 }, [](SpellInfo* spellInfo) - { - // shouldnt ignore resillience or damage taken auras because its damage is not based off a spell. - spellInfo->AttributesEx4 &= ~SPELL_ATTR4_FIXED_DAMAGE; - }); - // Tremor Totem (instant pulse) ApplySpellFix({ 8145 }, [](SpellInfo* spellInfo) { diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp index 85da0ca008f..01aee57a536 100644 --- a/src/server/scripts/Spells/spell_warrior.cpp +++ b/src/server/scripts/Spells/spell_warrior.cpp @@ -37,9 +37,9 @@ enum WarriorSpells SPELL_WARRIOR_CHARGE = 34846, SPELL_WARRIOR_CHARGE_STUN = 7922, SPELL_WARRIOR_COLOSSUS_SMASH = 86346, - SPELL_WARRIOR_DEEP_WOUNDS_RANK_1 = 12162, - SPELL_WARRIOR_DEEP_WOUNDS_RANK_2 = 12850, - SPELL_WARRIOR_DEEP_WOUNDS_RANK_3 = 12868, + SPELL_WARRIOR_DEEP_WOUNDS_RANK_1 = 12834, + SPELL_WARRIOR_DEEP_WOUNDS_RANK_2 = 12849, + SPELL_WARRIOR_DEEP_WOUNDS_RANK_3 = 12867, SPELL_WARRIOR_DEEP_WOUNDS_PERIODIC = 12721, SPELL_WARRIOR_EXECUTE = 20647, SPELL_WARRIOR_GLYPH_OF_EXECUTION = 58367, @@ -252,56 +252,62 @@ class spell_warr_concussion_blow : public SpellScriptLoader } }; -// -12162 - Deep Wounds +// Updated 4.3.4 +// -12834 - Deep Wounds class spell_warr_deep_wounds : public SpellScriptLoader { public: spell_warr_deep_wounds() : SpellScriptLoader("spell_warr_deep_wounds") { } - class spell_warr_deep_wounds_SpellScript : public SpellScript + class spell_warr_deep_wounds_AuraScript : public AuraScript { - PrepareSpellScript(spell_warr_deep_wounds_SpellScript); + PrepareAuraScript(spell_warr_deep_wounds_AuraScript); bool Validate(SpellInfo const* /*spellInfo*/) override { - if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_DEEP_WOUNDS_RANK_1) || - !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_DEEP_WOUNDS_RANK_2) || - !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_DEEP_WOUNDS_RANK_3) || - !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_DEEP_WOUNDS_PERIODIC)) - return false; - return true; + return ValidateSpellInfo( + { + SPELL_WARRIOR_DEEP_WOUNDS_RANK_1, + SPELL_WARRIOR_DEEP_WOUNDS_RANK_2, + SPELL_WARRIOR_DEEP_WOUNDS_RANK_3, + SPELL_WARRIOR_DEEP_WOUNDS_PERIODIC + }); } - void HandleDummy(SpellEffIndex /*effIndex*/) + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { - int32 damage = GetEffectValue(); - Unit* caster = GetCaster(); - if (Unit* target = GetHitUnit()) + if (Player* player = GetUnitOwner()->ToPlayer()) { - ApplyPct(damage, 16 * GetSpellInfo()->GetRank()); + int32 damage = 0; + Item* mainhandWeapon = player->GetWeaponForAttack(BASE_ATTACK); + Item* offhandWeapon = player->GetWeaponForAttack(OFF_ATTACK); + if (mainhandWeapon) + damage += (mainhandWeapon->GetTemplate()->DamageMin + mainhandWeapon->GetTemplate()->DamageMax) * 0.5f; + if (offhandWeapon) + damage += (mainhandWeapon->GetTemplate()->DamageMin + mainhandWeapon->GetTemplate()->DamageMax) * 0.5f; - SpellInfo const* spellInfo = sSpellMgr->AssertSpellInfo(SPELL_WARRIOR_DEEP_WOUNDS_PERIODIC); - uint32 ticks = uint32(spellInfo->GetDuration()) / spellInfo->Effects[EFFECT_0].Amplitude; + damage = CalculatePct(damage, 16 * GetSpellInfo()->GetRank()); - // Add remaining ticks to damage done - if (AuraEffect const* aurEff = target->GetAuraEffect(SPELL_WARRIOR_DEEP_WOUNDS_PERIODIC, EFFECT_0, caster->GetGUID())) - damage += (aurEff->GetAmount() + aurEff->GetBonusAmount()) * aurEff->GetDonePct() * int32(ticks - aurEff->GetTickNumber()); + if (damage) + if (SpellInfo const* periodicSpell = sSpellMgr->GetSpellInfo(SPELL_WARRIOR_DEEP_WOUNDS_PERIODIC)) + if (uint32 ticks = periodicSpell->GetMaxTicks()) + damage = damage / ticks; - damage /= int32(ticks); - - caster->CastCustomSpell(target, SPELL_WARRIOR_DEEP_WOUNDS_PERIODIC, &damage, NULL, NULL, true); + if (Unit* target = eventInfo.GetProcTarget()) + player->CastCustomSpell(target, SPELL_WARRIOR_DEEP_WOUNDS_PERIODIC, &damage, 0, 0, true, nullptr, aurEff); } } void Register() override { - OnEffectHitTarget += SpellEffectFn(spell_warr_deep_wounds_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + OnEffectProc += AuraEffectProcFn(spell_warr_deep_wounds_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); } + }; - SpellScript* GetSpellScript() const override + AuraScript* GetAuraScript() const override { - return new spell_warr_deep_wounds_SpellScript(); + return new spell_warr_deep_wounds_AuraScript(); } };