diff options
-rw-r--r-- | sql/updates/world/6.x/2016_04_29_00_world.sql | 4 | ||||
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 51 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_rogue.cpp | 67 |
3 files changed, 70 insertions, 52 deletions
diff --git a/sql/updates/world/6.x/2016_04_29_00_world.sql b/sql/updates/world/6.x/2016_04_29_00_world.sql new file mode 100644 index 00000000000..d7d20370dc1 --- /dev/null +++ b/sql/updates/world/6.x/2016_04_29_00_world.sql @@ -0,0 +1,4 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_rog_eviscerate','spell_rog_envenom'); +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(2098,'spell_rog_eviscerate'), +(32645,'spell_rog_envenom'); diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 4d1c5ab06a9..667249d897e 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -503,57 +503,6 @@ void Spell::EffectSchoolDMG(SpellEffIndex effIndex) } break; } - case SPELLFAMILY_ROGUE: - { - // Envenom - if (m_spellInfo->SpellFamilyFlags[1] & 0x00000008) - { - if (Player* player = m_caster->ToPlayer()) - { - // consume from stack dozes not more that have combo-points - if (uint32 combo = player->GetComboPoints()) - { - // Lookup for Deadly poison (only attacker applied) - if (AuraEffect const* aurEff = unitTarget->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_ROGUE, flag128(0x00010000, 0, 0), m_caster->GetGUID())) - { - // count consumed deadly poison doses at target - uint32 spellId = aurEff->GetId(); - - uint32 doses = aurEff->GetBase()->GetStackAmount(); - if (doses > combo) - doses = combo; - - for (uint32 i = 0; i < doses; ++i) - unitTarget->RemoveAuraFromStack(spellId, m_caster->GetGUID()); - - damage *= doses; - damage += int32(player->GetTotalAttackPowerValue(BASE_ATTACK) * 0.09f * combo); - } - - // Eviscerate and Envenom Bonus Damage (item set effect) - if (m_caster->HasAura(37169)) - damage += combo * 40; - } - } - } - // Eviscerate - else if (m_spellInfo->SpellFamilyFlags[0] & 0x00020000) - { - if (Player* player = m_caster->ToPlayer()) - { - if (uint32 combo = player->GetComboPoints()) - { - float ap = m_caster->GetTotalAttackPowerValue(BASE_ATTACK); - damage += irand(int32(ap * combo * 0.03f), int32(ap * combo * 0.07f)); - - // Eviscerate and Envenom Bonus Damage (item set effect) - if (m_caster->HasAura(37169)) - damage += combo*40; - } - } - } - break; - } case SPELLFAMILY_DEATHKNIGHT: { // Blood Boil - bonus for diseased targets diff --git a/src/server/scripts/Spells/spell_rogue.cpp b/src/server/scripts/Spells/spell_rogue.cpp index 6e315e32e5a..a4f876b289e 100644 --- a/src/server/scripts/Spells/spell_rogue.cpp +++ b/src/server/scripts/Spells/spell_rogue.cpp @@ -53,7 +53,8 @@ enum RogueSpells SPELL_ROGUE_SERRATED_BLADES_R1 = 14171, SPELL_ROGUE_RUPTURE = 1943, SPELL_ROGUE_HONOR_AMONG_THIEVES = 51698, - SPELL_ROGUE_HONOR_AMONG_THIEVES_PROC = 51699 + SPELL_ROGUE_HONOR_AMONG_THIEVES_PROC = 51699, + SPELL_ROGUE_T5_2P_SET_BONUS = 37169 }; enum RogueSpellIcons @@ -944,6 +945,68 @@ public: } }; +// 2098 - Eviscerate +class spell_rog_eviscerate : public SpellScriptLoader +{ +public: + spell_rog_eviscerate() : SpellScriptLoader("spell_rog_eviscerate") { } + + class spell_rog_eviscerate_SpellScript : public SpellScript + { + PrepareSpellScript(spell_rog_eviscerate_SpellScript); + + void CalculateDamage(SpellEffIndex /*effIndex*/) + { + int32 damagePerCombo = int32(GetCaster()->GetTotalAttackPowerValue(BASE_ATTACK) * 0.559f); + if (AuraEffect const* t5 = GetCaster()->GetAuraEffect(SPELL_ROGUE_T5_2P_SET_BONUS, EFFECT_0)) + damagePerCombo += t5->GetAmount(); + + SetEffectValue(GetEffectValue() + damagePerCombo * GetCaster()->GetPower(POWER_COMBO_POINTS)); + } + + void Register() override + { + OnEffectLaunchTarget += SpellEffectFn(spell_rog_eviscerate_SpellScript::CalculateDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_rog_eviscerate_SpellScript(); + } +}; + +// 32645 - Envenom +class spell_rog_envenom : public SpellScriptLoader +{ +public: + spell_rog_envenom() : SpellScriptLoader("spell_rog_envenom") { } + + class spell_rog_envenom_SpellScript : public SpellScript + { + PrepareSpellScript(spell_rog_envenom_SpellScript); + + void CalculateDamage(SpellEffIndex /*effIndex*/) + { + int32 damagePerCombo = int32(GetCaster()->GetTotalAttackPowerValue(BASE_ATTACK) * 0.417f); + if (AuraEffect const* t5 = GetCaster()->GetAuraEffect(SPELL_ROGUE_T5_2P_SET_BONUS, EFFECT_0)) + damagePerCombo += t5->GetAmount(); + + SetEffectValue(GetEffectValue() + damagePerCombo * GetCaster()->GetPower(POWER_COMBO_POINTS)); + } + + void Register() override + { + OnEffectLaunchTarget += SpellEffectFn(spell_rog_envenom_SpellScript::CalculateDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_rog_envenom_SpellScript(); + } +}; + void AddSC_rogue_spell_scripts() { new spell_rog_blade_flurry(); @@ -963,4 +1026,6 @@ void AddSC_rogue_spell_scripts() new spell_rog_tricks_of_the_trade_proc(); new spell_rog_serrated_blades(); new spell_rog_honor_among_thieves(); + new spell_rog_eviscerate(); + new spell_rog_envenom(); } |