diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Spells/spell_rogue.cpp | 600 |
1 files changed, 259 insertions, 341 deletions
diff --git a/src/server/scripts/Spells/spell_rogue.cpp b/src/server/scripts/Spells/spell_rogue.cpp index c3a9b8b995c..0b82abfc978 100644 --- a/src/server/scripts/Spells/spell_rogue.cpp +++ b/src/server/scripts/Spells/spell_rogue.cpp @@ -126,150 +126,128 @@ class spell_rog_backstab : public SpellScript }; // 13877, 33735, (check 51211, 65956) - Blade Flurry -class spell_rog_blade_flurry : public SpellScriptLoader +class spell_rog_blade_flurry : public AuraScript { - public: - spell_rog_blade_flurry() : SpellScriptLoader("spell_rog_blade_flurry") { } + PrepareAuraScript(spell_rog_blade_flurry); - class spell_rog_blade_flurry_AuraScript : public AuraScript - { - PrepareAuraScript(spell_rog_blade_flurry_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_ROGUE_BLADE_FLURRY_EXTRA_ATTACK }); - } - - bool CheckProc(ProcEventInfo& eventInfo) - { - _procTarget = GetTarget()->SelectNearbyTarget(eventInfo.GetProcTarget()); - return _procTarget && eventInfo.GetDamageInfo(); - } - - void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo) - { - PreventDefaultAction(); - - if (DamageInfo* damageInfo = eventInfo.GetDamageInfo()) - { - CastSpellExtraArgs args(aurEff); - args.AddSpellBP0(damageInfo->GetDamage()); - GetTarget()->CastSpell(_procTarget, SPELL_ROGUE_BLADE_FLURRY_EXTRA_ATTACK, args); - } - } + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_ROGUE_BLADE_FLURRY_EXTRA_ATTACK }); + } - void Register() override - { - DoCheckProc += AuraCheckProcFn(spell_rog_blade_flurry_AuraScript::CheckProc); - if (m_scriptSpellId == SPELL_ROGUE_BLADE_FLURRY) - OnEffectProc += AuraEffectProcFn(spell_rog_blade_flurry_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_MOD_POWER_REGEN_PERCENT); - else - OnEffectProc += AuraEffectProcFn(spell_rog_blade_flurry_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_MOD_MELEE_HASTE); - } + bool CheckProc(ProcEventInfo& eventInfo) + { + _procTarget = GetTarget()->SelectNearbyTarget(eventInfo.GetProcTarget()); + return _procTarget && eventInfo.GetDamageInfo(); + } - Unit* _procTarget = nullptr; - }; + void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); - AuraScript* GetAuraScript() const override + if (DamageInfo* damageInfo = eventInfo.GetDamageInfo()) { - return new spell_rog_blade_flurry_AuraScript(); + CastSpellExtraArgs args(aurEff); + args.AddSpellBP0(damageInfo->GetDamage()); + GetTarget()->CastSpell(_procTarget, SPELL_ROGUE_BLADE_FLURRY_EXTRA_ATTACK, args); } + } + + void Register() override + { + DoCheckProc += AuraCheckProcFn(spell_rog_blade_flurry::CheckProc); + if (m_scriptSpellId == SPELL_ROGUE_BLADE_FLURRY) + OnEffectProc += AuraEffectProcFn(spell_rog_blade_flurry::HandleProc, EFFECT_0, SPELL_AURA_MOD_POWER_REGEN_PERCENT); + else + OnEffectProc += AuraEffectProcFn(spell_rog_blade_flurry::HandleProc, EFFECT_0, SPELL_AURA_MOD_MELEE_HASTE); + } + + Unit* _procTarget = nullptr; }; // 2818 - Deadly Poison -class spell_rog_deadly_poison : public SpellScriptLoader +class spell_rog_deadly_poison : public SpellScript { - public: - spell_rog_deadly_poison() : SpellScriptLoader("spell_rog_deadly_poison") { } + PrepareSpellScript(spell_rog_deadly_poison); - class spell_rog_deadly_poison_SpellScript : public SpellScript - { - PrepareSpellScript(spell_rog_deadly_poison_SpellScript); + bool Load() override + { + // at this point CastItem must already be initialized + return GetCaster()->GetTypeId() == TYPEID_PLAYER && GetCastItem(); + } - bool Load() override - { - // at this point CastItem must already be initialized - return GetCaster()->GetTypeId() == TYPEID_PLAYER && GetCastItem(); - } + void HandleBeforeHit(SpellMissInfo missInfo) + { + if (missInfo != SPELL_MISS_NONE) + return; - void HandleBeforeHit(SpellMissInfo missInfo) - { - if (missInfo != SPELL_MISS_NONE) - return; + if (Unit* target = GetHitUnit()) + // Deadly Poison + if (AuraEffect const* aurEff = target->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_ROGUE, flag128(0x10000, 0x80000, 0), GetCaster()->GetGUID())) + _stackAmount = aurEff->GetBase()->GetStackAmount(); + } - if (Unit* target = GetHitUnit()) - // Deadly Poison - if (AuraEffect const* aurEff = target->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_ROGUE, flag128(0x10000, 0x80000, 0), GetCaster()->GetGUID())) - _stackAmount = aurEff->GetBase()->GetStackAmount(); - } + void HandleAfterHit() + { + if (_stackAmount < 5) + return; - void HandleAfterHit() - { - if (_stackAmount < 5) - return; + Player* player = GetCaster()->ToPlayer(); - Player* player = GetCaster()->ToPlayer(); + if (Unit* target = GetHitUnit()) + { - if (Unit* target = GetHitUnit()) - { + Item* item = player->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_MAINHAND); + + if (item == GetCastItem()) + item = player->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND); - Item* item = player->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_MAINHAND); + if (!item) + return; - if (item == GetCastItem()) - item = player->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND); + // item combat enchantments + for (uint8 slot = 0; slot < MAX_ENCHANTMENT_SLOT; ++slot) + { + SpellItemEnchantmentEntry const* enchant = sSpellItemEnchantmentStore.LookupEntry(item->GetEnchantmentId(EnchantmentSlot(slot))); + if (!enchant) + continue; - if (!item) - return; + for (uint8 s = 0; s < 3; ++s) + { + if (enchant->Effect[s] != ITEM_ENCHANTMENT_TYPE_COMBAT_SPELL) + continue; - // item combat enchantments - for (uint8 slot = 0; slot < MAX_ENCHANTMENT_SLOT; ++slot) + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(enchant->EffectArg[s], DIFFICULTY_NONE); + if (!spellInfo) { - SpellItemEnchantmentEntry const* enchant = sSpellItemEnchantmentStore.LookupEntry(item->GetEnchantmentId(EnchantmentSlot(slot))); - if (!enchant) - continue; - - for (uint8 s = 0; s < 3; ++s) - { - if (enchant->Effect[s] != ITEM_ENCHANTMENT_TYPE_COMBAT_SPELL) - continue; - - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(enchant->EffectArg[s], DIFFICULTY_NONE); - if (!spellInfo) - { - TC_LOG_ERROR("spells", "Player::CastItemCombatSpell Enchant %i, player (Name: %s, %s) cast unknown spell %i", enchant->ID, player->GetName().c_str(), player->GetGUID().ToString().c_str(), enchant->EffectArg[s]); - continue; - } - - // Proc only rogue poisons - if (spellInfo->SpellFamilyName != SPELLFAMILY_ROGUE || spellInfo->Dispel != DISPEL_POISON) - continue; - - // Do not reproc deadly - if (spellInfo->SpellFamilyFlags & flag128(0x10000)) - continue; - - if (spellInfo->IsPositive()) - player->CastSpell(player, enchant->EffectArg[s], item); - else - player->CastSpell(target, enchant->EffectArg[s], item); - } + TC_LOG_ERROR("spells", "Player::CastItemCombatSpell Enchant %i, player (Name: %s, %s) cast unknown spell %i", enchant->ID, player->GetName().c_str(), player->GetGUID().ToString().c_str(), enchant->EffectArg[s]); + continue; } - } - } - void Register() override - { - BeforeHit += BeforeSpellHitFn(spell_rog_deadly_poison_SpellScript::HandleBeforeHit); - AfterHit += SpellHitFn(spell_rog_deadly_poison_SpellScript::HandleAfterHit); - } + // Proc only rogue poisons + if (spellInfo->SpellFamilyName != SPELLFAMILY_ROGUE || spellInfo->Dispel != DISPEL_POISON) + continue; - uint8 _stackAmount = 0; - }; + // Do not reproc deadly + if (spellInfo->SpellFamilyFlags & flag128(0x10000)) + continue; - SpellScript* GetSpellScript() const override - { - return new spell_rog_deadly_poison_SpellScript(); + if (spellInfo->IsPositive()) + player->CastSpell(player, enchant->EffectArg[s], item); + else + player->CastSpell(target, enchant->EffectArg[s], item); + } + } } + } + + void Register() override + { + BeforeHit += BeforeSpellHitFn(spell_rog_deadly_poison::HandleBeforeHit); + AfterHit += SpellHitFn(spell_rog_deadly_poison::HandleAfterHit); + } + + uint8 _stackAmount = 0; }; // 193358 - Grand Melee @@ -315,101 +293,85 @@ class spell_rog_grand_melee : public AuraScript }; // 51690 - Killing Spree -class spell_rog_killing_spree : public SpellScriptLoader +class spell_rog_killing_spree_aura : public AuraScript { - public: - spell_rog_killing_spree() : SpellScriptLoader("spell_rog_killing_spree") { } + PrepareAuraScript(spell_rog_killing_spree_aura); - class spell_rog_killing_spree_SpellScript : public SpellScript + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo( { - PrepareSpellScript(spell_rog_killing_spree_SpellScript); - - void FilterTargets(std::list<WorldObject*>& targets) - { - if (targets.empty() || GetCaster()->GetVehicleBase()) - FinishCast(SPELL_FAILED_OUT_OF_RANGE); - } + SPELL_ROGUE_KILLING_SPREE_TELEPORT, + SPELL_ROGUE_KILLING_SPREE_WEAPON_DMG, + SPELL_ROGUE_KILLING_SPREE_DMG_BUFF + }); + } - void HandleDummy(SpellEffIndex /*effIndex*/) - { - if (Aura* aura = GetCaster()->GetAura(SPELL_ROGUE_KILLING_SPREE)) - if (spell_rog_killing_spree_AuraScript* script = aura->GetScript<spell_rog_killing_spree_AuraScript>()) - script->AddTarget(GetHitUnit()); - } + void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->CastSpell(GetTarget(), SPELL_ROGUE_KILLING_SPREE_DMG_BUFF, true); + } - void Register() override + void HandleEffectPeriodic(AuraEffect const* /*aurEff*/) + { + while (!_targets.empty()) + { + ObjectGuid guid = Trinity::Containers::SelectRandomContainerElement(_targets); + if (Unit* target = ObjectAccessor::GetUnit(*GetTarget(), guid)) { - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_rog_killing_spree_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_DEST_AREA_ENEMY); - OnEffectHitTarget += SpellEffectFn(spell_rog_killing_spree_SpellScript::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY); + GetTarget()->CastSpell(target, SPELL_ROGUE_KILLING_SPREE_TELEPORT, true); + GetTarget()->CastSpell(target, SPELL_ROGUE_KILLING_SPREE_WEAPON_DMG, true); + break; } - }; - - SpellScript* GetSpellScript() const override - { - return new spell_rog_killing_spree_SpellScript(); + else + _targets.remove(guid); } + } - class spell_rog_killing_spree_AuraScript : public AuraScript - { - PrepareAuraScript(spell_rog_killing_spree_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo( - { - SPELL_ROGUE_KILLING_SPREE_TELEPORT, - SPELL_ROGUE_KILLING_SPREE_WEAPON_DMG, - SPELL_ROGUE_KILLING_SPREE_DMG_BUFF - }); - } + void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->RemoveAurasDueToSpell(SPELL_ROGUE_KILLING_SPREE_DMG_BUFF); + } - void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - GetTarget()->CastSpell(GetTarget(), SPELL_ROGUE_KILLING_SPREE_DMG_BUFF, true); - } + void Register() override + { + AfterEffectApply += AuraEffectApplyFn(spell_rog_killing_spree_aura::HandleApply, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL); + OnEffectPeriodic += AuraEffectPeriodicFn(spell_rog_killing_spree_aura::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); + AfterEffectRemove += AuraEffectRemoveFn(spell_rog_killing_spree_aura::HandleRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL); + } - void HandleEffectPeriodic(AuraEffect const* /*aurEff*/) - { - while (!_targets.empty()) - { - ObjectGuid guid = Trinity::Containers::SelectRandomContainerElement(_targets); - if (Unit* target = ObjectAccessor::GetUnit(*GetTarget(), guid)) - { - GetTarget()->CastSpell(target, SPELL_ROGUE_KILLING_SPREE_TELEPORT, true); - GetTarget()->CastSpell(target, SPELL_ROGUE_KILLING_SPREE_WEAPON_DMG, true); - break; - } - else - _targets.remove(guid); - } - } +public: + void AddTarget(Unit* target) + { + _targets.push_back(target->GetGUID()); + } - void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - GetTarget()->RemoveAurasDueToSpell(SPELL_ROGUE_KILLING_SPREE_DMG_BUFF); - } +private: + GuidList _targets; +}; - void Register() override - { - AfterEffectApply += AuraEffectApplyFn(spell_rog_killing_spree_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL); - OnEffectPeriodic += AuraEffectPeriodicFn(spell_rog_killing_spree_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); - AfterEffectRemove += AuraEffectRemoveFn(spell_rog_killing_spree_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL); - } +class spell_rog_killing_spree : public SpellScript +{ + PrepareSpellScript(spell_rog_killing_spree); - public: - void AddTarget(Unit* target) - { - _targets.push_back(target->GetGUID()); - } + void FilterTargets(std::list<WorldObject*>& targets) + { + if (targets.empty() || GetCaster()->GetVehicleBase()) + FinishCast(SPELL_FAILED_OUT_OF_RANGE); + } - private: - GuidList _targets; - }; + void HandleDummy(SpellEffIndex /*effIndex*/) + { + if (Aura* aura = GetCaster()->GetAura(SPELL_ROGUE_KILLING_SPREE)) + if (spell_rog_killing_spree_aura* script = aura->GetScript<spell_rog_killing_spree_aura>()) + script->AddTarget(GetHitUnit()); + } - AuraScript* GetAuraScript() const override - { - return new spell_rog_killing_spree_AuraScript(); - } + void Register() override + { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_rog_killing_spree::FilterTargets, EFFECT_1, TARGET_UNIT_DEST_AREA_ENEMY); + OnEffectHitTarget += SpellEffectFn(spell_rog_killing_spree::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY); + } }; // 76806 - Mastery: Main Gauche @@ -527,79 +489,68 @@ class spell_rog_roll_the_bones : public SpellScript }; // 1943 - Rupture -class spell_rog_rupture : public SpellScriptLoader +class spell_rog_rupture : public AuraScript { - public: - spell_rog_rupture() : SpellScriptLoader("spell_rog_rupture") { } + PrepareAuraScript(spell_rog_rupture); - class spell_rog_rupture_AuraScript : public AuraScript + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_ROGUE_VENOMOUS_WOUNDS }); + } + + void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated) + { + if (Unit* caster = GetCaster()) { - PrepareAuraScript(spell_rog_rupture_AuraScript); + canBeRecalculated = false; - bool Validate(SpellInfo const* /*spellInfo*/) override + float const attackpowerPerCombo[6] = { - return ValidateSpellInfo({ SPELL_ROGUE_VENOMOUS_WOUNDS }); - } + 0.0f, + 0.015f, // 1 point: ${($m1 + $b1*1 + 0.015 * $AP) * 4} damage over 8 secs + 0.024f, // 2 points: ${($m1 + $b1*2 + 0.024 * $AP) * 5} damage over 10 secs + 0.03f, // 3 points: ${($m1 + $b1*3 + 0.03 * $AP) * 6} damage over 12 secs + 0.03428571f, // 4 points: ${($m1 + $b1*4 + 0.03428571 * $AP) * 7} damage over 14 secs + 0.0375f // 5 points: ${($m1 + $b1*5 + 0.0375 * $AP) * 8} damage over 16 secs + }; + + uint32 cp = caster->GetComboPoints(); + if (cp > 5) + cp = 5; + + amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * attackpowerPerCombo[cp]); + } + } - void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated) - { - if (Unit* caster = GetCaster()) - { - canBeRecalculated = false; + void OnEffectRemoved(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_DEATH) + return; - float const attackpowerPerCombo[6] = - { - 0.0f, - 0.015f, // 1 point: ${($m1 + $b1*1 + 0.015 * $AP) * 4} damage over 8 secs - 0.024f, // 2 points: ${($m1 + $b1*2 + 0.024 * $AP) * 5} damage over 10 secs - 0.03f, // 3 points: ${($m1 + $b1*3 + 0.03 * $AP) * 6} damage over 12 secs - 0.03428571f, // 4 points: ${($m1 + $b1*4 + 0.03428571 * $AP) * 7} damage over 14 secs - 0.0375f // 5 points: ${($m1 + $b1*5 + 0.0375 * $AP) * 8} damage over 16 secs - }; - - uint32 cp = caster->GetComboPoints(); - if (cp > 5) - cp = 5; - - amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * attackpowerPerCombo[cp]); - } - } + Aura* aura = GetAura(); + Unit* caster = aura->GetCaster(); + if (!caster) + return; - void OnEffectRemoved(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_DEATH) - return; - - Aura* aura = GetAura(); - Unit* caster = aura->GetCaster(); - if (!caster) - return; - - Aura* auraVenomousWounds = caster->GetAura(SPELL_ROGUE_VENOMOUS_WOUNDS); - if (!auraVenomousWounds) - return; - - // Venomous Wounds: if unit dies while being affected by rupture, regain energy based on remaining duration - Optional<SpellPowerCost> cost = GetSpellInfo()->CalcPowerCost(POWER_ENERGY, false, caster, GetSpellInfo()->GetSchoolMask(), nullptr); - if (!cost) - return; - - float pct = float(aura->GetDuration()) / float(aura->GetMaxDuration()); - int32 extraAmount = float(cost->Amount) * pct; - caster->ModifyPower(POWER_ENERGY, extraAmount); - } + Aura* auraVenomousWounds = caster->GetAura(SPELL_ROGUE_VENOMOUS_WOUNDS); + if (!auraVenomousWounds) + return; - void Register() override - { - DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_rog_rupture_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE); - OnEffectRemove += AuraEffectRemoveFn(spell_rog_rupture_AuraScript::OnEffectRemoved, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL); - } - }; + // Venomous Wounds: if unit dies while being affected by rupture, regain energy based on remaining duration + Optional<SpellPowerCost> cost = GetSpellInfo()->CalcPowerCost(POWER_ENERGY, false, caster, GetSpellInfo()->GetSchoolMask(), nullptr); + if (!cost) + return; - AuraScript* GetAuraScript() const override - { - return new spell_rog_rupture_AuraScript(); - } + float pct = float(aura->GetDuration()) / float(aura->GetMaxDuration()); + int32 extraAmount = float(cost->Amount) * pct; + caster->ModifyPower(POWER_ENERGY, extraAmount); + } + + void Register() override + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_rog_rupture::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE); + OnEffectRemove += AuraEffectRemoveFn(spell_rog_rupture::OnEffectRemoved, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL); + } }; // 14161 - Ruthlessness @@ -924,111 +875,78 @@ class spell_rog_tricks_of_the_trade_proc : public AuraScript // 198031 - Honor Among Thieves /// 7.1.5 -class spell_rog_honor_among_thieves : public SpellScriptLoader +class spell_rog_honor_among_thieves : public AuraScript { -public: - spell_rog_honor_among_thieves() : SpellScriptLoader("spell_rog_honor_among_thieves") { } + PrepareAuraScript(spell_rog_honor_among_thieves); - class spell_rog_honor_among_thieves_AuraScript : public AuraScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareAuraScript(spell_rog_honor_among_thieves_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_ROGUE_HONOR_AMONG_THIEVES_ENERGIZE }); - } - - void HandleProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/) - { - PreventDefaultAction(); + return ValidateSpellInfo({ SPELL_ROGUE_HONOR_AMONG_THIEVES_ENERGIZE }); + } - Unit* target = GetTarget(); - target->CastSpell(target, SPELL_ROGUE_HONOR_AMONG_THIEVES_ENERGIZE, aurEff); - } + void HandleProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/) + { + PreventDefaultAction(); - void Register() override - { - OnEffectProc += AuraEffectProcFn(spell_rog_honor_among_thieves_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); - } - }; + Unit* target = GetTarget(); + target->CastSpell(target, SPELL_ROGUE_HONOR_AMONG_THIEVES_ENERGIZE, aurEff); + } - AuraScript* GetAuraScript() const override + void Register() override { - return new spell_rog_honor_among_thieves_AuraScript(); + OnEffectProc += AuraEffectProcFn(spell_rog_honor_among_thieves::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); } }; // 196819 - Eviscerate -class spell_rog_eviscerate : public SpellScriptLoader +class spell_rog_eviscerate : public SpellScript { -public: - spell_rog_eviscerate() : SpellScriptLoader("spell_rog_eviscerate") { } + PrepareSpellScript(spell_rog_eviscerate); - class spell_rog_eviscerate_SpellScript : public SpellScript + void CalculateDamage(SpellEffIndex /*effIndex*/) { - PrepareSpellScript(spell_rog_eviscerate_SpellScript); - - void CalculateDamage(SpellEffIndex /*effIndex*/) - { - int32 damagePerCombo = GetHitDamage(); - if (AuraEffect const* t5 = GetCaster()->GetAuraEffect(SPELL_ROGUE_T5_2P_SET_BONUS, EFFECT_0)) - damagePerCombo += t5->GetAmount(); - - int32 finalDamage = damagePerCombo; - std::vector<SpellPowerCost> const& costs = GetSpell()->GetPowerCost(); - auto c = std::find_if(costs.begin(), costs.end(), [](SpellPowerCost const& cost) { return cost.Power == POWER_COMBO_POINTS; }); - if (c != costs.end()) - finalDamage *= c->Amount; + int32 damagePerCombo = GetHitDamage(); + if (AuraEffect const* t5 = GetCaster()->GetAuraEffect(SPELL_ROGUE_T5_2P_SET_BONUS, EFFECT_0)) + damagePerCombo += t5->GetAmount(); - SetHitDamage(finalDamage); - } + int32 finalDamage = damagePerCombo; + std::vector<SpellPowerCost> const& costs = GetSpell()->GetPowerCost(); + auto c = std::find_if(costs.begin(), costs.end(), [](SpellPowerCost const& cost) { return cost.Power == POWER_COMBO_POINTS; }); + if (c != costs.end()) + finalDamage *= c->Amount; - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_rog_eviscerate_SpellScript::CalculateDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); - } - }; + SetHitDamage(finalDamage); + } - SpellScript* GetSpellScript() const override + void Register() override { - return new spell_rog_eviscerate_SpellScript(); + OnEffectHitTarget += SpellEffectFn(spell_rog_eviscerate::CalculateDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); } }; // 32645 - Envenom -class spell_rog_envenom : public SpellScriptLoader +class spell_rog_envenom : public SpellScript { -public: - spell_rog_envenom() : SpellScriptLoader("spell_rog_envenom") { } + PrepareSpellScript(spell_rog_envenom); - class spell_rog_envenom_SpellScript : public SpellScript + void CalculateDamage(SpellEffIndex /*effIndex*/) { - PrepareSpellScript(spell_rog_envenom_SpellScript); - - void CalculateDamage(SpellEffIndex /*effIndex*/) - { - int32 damagePerCombo = GetHitDamage(); - if (AuraEffect const* t5 = GetCaster()->GetAuraEffect(SPELL_ROGUE_T5_2P_SET_BONUS, EFFECT_0)) - damagePerCombo += t5->GetAmount(); - - int32 finalDamage = damagePerCombo; - std::vector<SpellPowerCost> const& costs = GetSpell()->GetPowerCost(); - auto c = std::find_if(costs.begin(), costs.end(), [](SpellPowerCost const& cost) { return cost.Power == POWER_COMBO_POINTS; }); - if (c != costs.end()) - finalDamage *= c->Amount; + int32 damagePerCombo = GetHitDamage(); + if (AuraEffect const* t5 = GetCaster()->GetAuraEffect(SPELL_ROGUE_T5_2P_SET_BONUS, EFFECT_0)) + damagePerCombo += t5->GetAmount(); - SetHitDamage(finalDamage); - } + int32 finalDamage = damagePerCombo; + std::vector<SpellPowerCost> const& costs = GetSpell()->GetPowerCost(); + auto c = std::find_if(costs.begin(), costs.end(), [](SpellPowerCost const& cost) { return cost.Power == POWER_COMBO_POINTS; }); + if (c != costs.end()) + finalDamage *= c->Amount; - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_rog_envenom_SpellScript::CalculateDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); - } - }; + SetHitDamage(finalDamage); + } - SpellScript* GetSpellScript() const override + void Register() override { - return new spell_rog_envenom_SpellScript(); + OnEffectHitTarget += SpellEffectFn(spell_rog_envenom::CalculateDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); } }; @@ -1052,14 +970,14 @@ class spell_rog_venomous_wounds : public AuraScript void AddSC_rogue_spell_scripts() { RegisterSpellScript(spell_rog_backstab); - new spell_rog_blade_flurry(); - new spell_rog_deadly_poison(); + RegisterSpellScript(spell_rog_blade_flurry); + RegisterSpellScript(spell_rog_deadly_poison); RegisterSpellScript(spell_rog_grand_melee); - new spell_rog_killing_spree(); + RegisterSpellAndAuraScriptPair(spell_rog_killing_spree, spell_rog_killing_spree_aura); RegisterSpellScript(spell_rog_mastery_main_gauche); RegisterSpellScript(spell_rog_restless_blades); RegisterSpellScript(spell_rog_roll_the_bones); - new spell_rog_rupture(); + RegisterSpellScript(spell_rog_rupture); RegisterSpellScript(spell_rog_ruthlessness); RegisterSpellScript(spell_rog_shadowstrike); RegisterSpellScript(spell_rog_sinister_strike); @@ -1069,8 +987,8 @@ void AddSC_rogue_spell_scripts() RegisterSpellScript(spell_rog_vanish_aura); RegisterSpellAndAuraScriptPair(spell_rog_tricks_of_the_trade, spell_rog_tricks_of_the_trade_aura); RegisterSpellScript(spell_rog_tricks_of_the_trade_proc); - new spell_rog_honor_among_thieves(); - new spell_rog_eviscerate(); - new spell_rog_envenom(); + RegisterSpellScript(spell_rog_honor_among_thieves); + RegisterSpellScript(spell_rog_eviscerate); + RegisterSpellScript(spell_rog_envenom); RegisterSpellScript(spell_rog_venomous_wounds); } |