From 36be801c73acd683f6cfe2fd52077e4a14d4c13a Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Sun, 8 Jul 2018 20:26:18 +0200 Subject: [PATCH] Core/Spells: improved aurascript for Main Gauche attack checks --- .../custom/custom_2018_07_08_05_world.sql | 1 + src/server/scripts/Spells/spell_rogue.cpp | 23 ++++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) create mode 100644 sql/updates/world/custom/custom_2018_07_08_05_world.sql diff --git a/sql/updates/world/custom/custom_2018_07_08_05_world.sql b/sql/updates/world/custom/custom_2018_07_08_05_world.sql new file mode 100644 index 00000000000..14dc9c656c3 --- /dev/null +++ b/sql/updates/world/custom/custom_2018_07_08_05_world.sql @@ -0,0 +1 @@ +UPDATE `spell_proc` SET `ProcFlags`= `ProcFlags` | 0x00400000 WHERE `SpellId`= 76806; diff --git a/src/server/scripts/Spells/spell_rogue.cpp b/src/server/scripts/Spells/spell_rogue.cpp index 17dc9ade30b..302ece7f68a 100644 --- a/src/server/scripts/Spells/spell_rogue.cpp +++ b/src/server/scripts/Spells/spell_rogue.cpp @@ -1087,8 +1087,19 @@ class spell_rog_main_gauche : public AuraScript return ValidateSpellInfo({ SPELL_ROGUE_MAIN_GAUCHE }); } - bool CheckProc(ProcEventInfo& /*eventInfo*/) + bool CheckProc(ProcEventInfo& eventInfo) { + Player* player = eventInfo.GetActor()->ToPlayer(); + if (!player) + return false; + + Item* item = player->GetWeaponForAttack(BASE_ATTACK); + if (!item || !item->IsEquipped()) + return false; + + if (!(eventInfo.GetTypeMask() & PROC_FLAG_DONE_MAINHAND_ATTACK)) + return false; + return roll_chance_i(GetEffect(EFFECT_0)->GetAmount()); } @@ -1096,11 +1107,11 @@ class spell_rog_main_gauche : public AuraScript { PreventDefaultAction(); - if (DamageInfo* damage = eventInfo.GetDamageInfo()) - if (Unit* target = GetTarget()) - if (target->getAttackTimer(BASE_ATTACK) > target->getAttackTimer(OFF_ATTACK)) - if (Unit* victim = damage->GetVictim()) - GetTarget()->CastSpell(victim, SPELL_ROGUE_MAIN_GAUCHE, true, nullptr, aurEff); + Player* caster = eventInfo.GetActor()->ToPlayer(); + Unit* target = eventInfo.GetProcTarget(); + Item* item = ASSERT_NOTNULL(caster->GetWeaponForAttack(BASE_ATTACK)); + + caster->CastSpell(target, SPELL_ROGUE_MAIN_GAUCHE, true, item, aurEff); } void Register() override