void HandleProc(AuraEffect aurEff, ProcEventInfo eventInfo) { PreventDefaultAction(); DamageInfo damageInfo = eventInfo.GetDamageInfo(); if (damageInfo == null || damageInfo.GetDamage() == 0) { return; } int amount = (int)(aurEff.GetAmount() - damageInfo.GetDamage()); if (amount > 0) { aurEff.SetAmount(amount); if (!GetTarget().HealthBelowPctDamaged(1, damageInfo.GetDamage())) { return; } } Remove(); Unit caster = GetCaster(); if (!caster) { return; } caster.CastSpell(eventInfo.GetActionTarget(), SpellIds.SeedOfCorruptionDamage, true); }
void HandleProc(AuraEffect aurEff, ProcEventInfo eventInfo) { PreventDefaultAction(); DamageInfo damageInfo = eventInfo.GetDamageInfo(); if (damageInfo == null || damageInfo.GetDamage() == 0) { return; } SpellInfo spellInfo = Global.SpellMgr.GetSpellInfo(SpellIds.LavaBurstBonusDamage, GetCastDifficulty()); int amount = (int)MathFunctions.CalculatePct(damageInfo.GetDamage(), aurEff.GetAmount()); amount /= (int)spellInfo.GetMaxTicks(); // Add remaining ticks to damage done Unit caster = eventInfo.GetActor(); Unit target = eventInfo.GetProcTarget(); amount += (int)target.GetRemainingPeriodicAmount(caster.GetGUID(), SpellIds.LavaBurstBonusDamage, AuraType.PeriodicDamage); CastSpellExtraArgs args = new(aurEff); args.AddSpellMod(SpellValueMod.BasePoint0, amount); caster.CastSpell(target, SpellIds.LavaBurstBonusDamage, args); }
void HandleProc(AuraEffect aurEff, ProcEventInfo eventInfo) { PreventDefaultAction(); DamageInfo damageInfo = eventInfo.GetDamageInfo(); if (damageInfo == null || damageInfo.GetDamage() == 0) { return; } int amount = aurEff.GetAmount() - (int)damageInfo.GetDamage(); if (amount > 0) { aurEff.SetAmount(amount); return; } Remove(); Unit caster = GetCaster(); if (!caster) { return; } caster.CastSpell(eventInfo.GetActionTarget(), SpellIds.SeedOfCorruptionGeneric, true, null, aurEff); }
void HandleProc(AuraEffect aurEff, ProcEventInfo eventInfo) { PreventDefaultAction(); DamageInfo damageInfo = eventInfo.GetDamageInfo(); if (damageInfo == null || damageInfo.GetDamage() == 0) { return; } int damage = (int)MathFunctions.CalculatePct(damageInfo.GetDamage(), 45); GetTarget().CastCustomSpell(SpellIds.MirroredSoulDamage, SpellValueMod.BasePoint0, damage, GetCaster(), true); }
void HandleEffectProc(AuraEffect aurEff, ProcEventInfo eventInfo) { PreventDefaultAction(); DamageInfo damageInfo = eventInfo.GetDamageInfo(); if (damageInfo == null || damageInfo.GetDamage() == 0) { return; } int damage = (int)MathFunctions.CalculatePct(damageInfo.GetDamage(), aurEff.GetAmount()); GetTarget().CastCustomSpell(SpellIds.EyeForAnEyeDamage, SpellValueMod.BasePoint0, damage, eventInfo.GetProcTarget(), true, null, aurEff); }
void HandleEffectProc(AuraEffect aurEff, ProcEventInfo eventInfo) { PreventDefaultAction(); DamageInfo damageInfo = eventInfo.GetDamageInfo(); if (damageInfo == null || damageInfo.GetDamage() == 0) { return; } int selfHeal = (int)MathFunctions.CalculatePct(damageInfo.GetDamage(), aurEff.GetAmount()); int teamHeal = selfHeal / 2; GetTarget().CastCustomSpell(null, SpellIds.VampiricEmbraceHeal, teamHeal, selfHeal, 0, true, null, aurEff); }
void Absorb(AuraEffect aurEff, DamageInfo dmgInfo, ref uint absorbAmount) { Unit target = GetTarget(); if (dmgInfo.GetDamage() < target.GetHealth()) { return; } int healAmount = (int)target.CountPctFromMaxHealth((int)healPct); // remove the aura now, we don't want 40% healing bonus Remove(AuraRemoveMode.EnemySpell); target.CastCustomSpell(target, SpellIds.GuardianSpiritHeal, healAmount, 0, 0, true); absorbAmount = dmgInfo.GetDamage(); }
// This is a port of the old switch hack in Unit.cpp, it's not correct void HandleProc(AuraEffect aurEff, ProcEventInfo eventInfo) { PreventDefaultAction(); Unit caster = GetCaster(); if (!caster) { return; } Unit drw = null; foreach (Unit controlled in caster.m_Controlled) { if (controlled.GetEntry() == CreatureIds.DancingRuneWeapon) { drw = controlled; break; } } if (!drw || !drw.GetVictim()) { return; } SpellInfo spellInfo = eventInfo.GetSpellInfo(); if (spellInfo == null) { return; } DamageInfo damageInfo = eventInfo.GetDamageInfo(); if (damageInfo == null || damageInfo.GetDamage() == 0) { return; } int amount = (int)(damageInfo.GetDamage() / 2); SpellNonMeleeDamage log = new SpellNonMeleeDamage(drw, drw.GetVictim(), spellInfo.Id, spellInfo.GetSpellXSpellVisualId(drw), spellInfo.GetSchoolMask()); log.damage = (uint)amount; drw.DealDamage(drw.GetVictim(), (uint)amount, null, DamageEffectType.Direct, spellInfo.GetSchoolMask(), spellInfo, true); drw.SendSpellNonMeleeDamageLog(log); }
void HandleAbsorb(AuraEffect aurEff, DamageInfo dmgInfo, ref uint absorbAmount) { Unit target = GetTarget(); target.CastSpell(target, SpellIds.SpiritOfRedemption, new CastSpellExtraArgs(aurEff)); target.SetFullHealth(); absorbAmount = dmgInfo.GetDamage(); }
void HandleAbsorb(AuraEffect aurEff, DamageInfo dmgInfo, ref uint absorbAmount) { AuraEffect effectInfo = GetEffect(1); if (effectInfo == null || !GetTargetApplication().HasEffect(1) || dmgInfo.GetDamage() < GetTarget().GetHealth() || dmgInfo.GetDamage() > GetTarget().GetMaxHealth() * 2 || GetTarget().HasAura(SpellIds.Cauterized)) { PreventDefaultAction(); return; } GetTarget().SetHealth(GetTarget().CountPctFromMaxHealth(effectInfo.GetAmount())); GetTarget().CastSpell(GetTarget(), GetEffectInfo(2).TriggerSpell, new CastSpellExtraArgs(TriggerCastFlags.FullMask)); GetTarget().CastSpell(GetTarget(), SpellIds.CauterizeDot, new CastSpellExtraArgs(TriggerCastFlags.FullMask)); GetTarget().CastSpell(GetTarget(), SpellIds.Cauterized, new CastSpellExtraArgs(TriggerCastFlags.FullMask)); }
void Absorb(AuraEffect aurEff, DamageInfo dmgInfo, ref uint absorbAmount) { Unit target = GetTarget(); if (dmgInfo.GetDamage() < target.GetHealth()) { return; } int healAmount = (int)target.CountPctFromMaxHealth((int)healPct); // Remove the aura now, we don't want 40% healing bonus Remove(AuraRemoveMode.EnemySpell); CastSpellExtraArgs args = new(TriggerCastFlags.FullMask); args.AddSpellMod(SpellValueMod.BasePoint0, healAmount); target.CastSpell(target, SpellIds.GuardianSpiritHeal, args); absorbAmount = dmgInfo.GetDamage(); }
void HandleEffectProc(AuraEffect aurEff, ProcEventInfo eventInfo) { PreventDefaultAction(); DamageInfo damageInfo = eventInfo.GetDamageInfo(); if (damageInfo == null || damageInfo.GetDamage() == 0) { return; } int selfHeal = (int)MathFunctions.CalculatePct(damageInfo.GetDamage(), aurEff.GetAmount()); int teamHeal = selfHeal / 2; CastSpellExtraArgs args = new(aurEff); args.AddSpellMod(SpellValueMod.BasePoint0, teamHeal); args.AddSpellMod(SpellValueMod.BasePoint1, selfHeal); GetTarget().CastSpell((Unit)null, SpellIds.VampiricEmbraceHeal, args); }
bool CheckProc(ProcEventInfo eventInfo) { if (eventInfo.GetActionTarget().HealthBelowPct(20)) { return(true); } DamageInfo damageInfo = eventInfo.GetDamageInfo(); if (damageInfo != null && damageInfo.GetDamage() != 0) { if (GetTarget().HealthBelowPctDamaged(20, damageInfo.GetDamage())) { return(true); } } return(false); }
bool CheckProc(ProcEventInfo eventInfo) { DamageInfo damageInfo = eventInfo.GetDamageInfo(); if (damageInfo == null || damageInfo.GetDamage() == 0) { return(false); } return(GetTarget().GetGuardianPet()); }
void HandleAbsorb(AuraEffect aurEff, DamageInfo dmgInfo, ref uint absorbAmount) { Unit target = GetTarget(); if (dmgInfo.GetDamage() >= target.GetHealth()) { target.CastSpell(target, SpellIds.SpiritOfRedemption, TriggerCastFlags.FullMask, null, aurEff); target.SetFullHealth(); return; } PreventDefaultAction(); }
void HandleProc(AuraEffect aurEff, ProcEventInfo eventInfo) { PreventDefaultAction(); DamageInfo damageInfo = eventInfo.GetDamageInfo(); if (damageInfo != null) { CastSpellExtraArgs args = new(aurEff); args.AddSpellMod(SpellValueMod.BasePoint0, (int)damageInfo.GetDamage()); GetTarget().CastSpell(_procTarget, SpellIds.BladeFlurryExtraAttack, args); } }
void HandleProc(AuraEffect aurEff, ProcEventInfo eventInfo) { PreventDefaultAction(); DamageInfo damageInfo = eventInfo.GetDamageInfo(); if (damageInfo == null || damageInfo.GetDamage() == 0) { return; } Unit caster = eventInfo.GetActor(); Unit target = eventInfo.GetProcTarget(); SpellInfo spellInfo = Global.SpellMgr.GetSpellInfo(SpellIds.Languish); int amount = (int)MathFunctions.CalculatePct(damageInfo.GetDamage(), aurEff.GetAmount()); amount /= (int)spellInfo.GetMaxTicks(Difficulty.None); // Add remaining ticks to damage done amount += (int)target.GetRemainingPeriodicAmount(caster.GetGUID(), SpellIds.Languish, AuraType.PeriodicDamage); caster.CastCustomSpell(SpellIds.Languish, SpellValueMod.BasePoint0, amount, target, true, null, aurEff); }
void HandleProc(AuraEffect aurEff, ProcEventInfo eventInfo) { PreventDefaultAction(); DamageInfo damageInfo = eventInfo.GetDamageInfo(); if (damageInfo == null || damageInfo.GetDamage() == 0) { return; } SpellInfo spellInfo = Global.SpellMgr.GetSpellInfo(SpellIds.Electrified, GetCastDifficulty()); int amount = (int)MathFunctions.CalculatePct(damageInfo.GetDamage(), aurEff.GetAmount()); amount /= (int)spellInfo.GetMaxTicks(); Unit caster = eventInfo.GetActor(); Unit target = eventInfo.GetProcTarget(); CastSpellExtraArgs args = new(aurEff); args.AddSpellMod(SpellValueMod.BasePoint0, amount); caster.CastSpell(target, SpellIds.Electrified, args); }
void HandleProc(AuraEffect aurEff, ProcEventInfo eventInfo) { DamageInfo damageInfo = eventInfo.GetDamageInfo(); if (damageInfo != null) { if (damageInfo.GetAttacker() == GetCaster() && damageInfo.GetVictim() == GetTarget()) { uint extra = MathFunctions.CalculatePct(damageInfo.GetDamage(), 25); if (extra > 0) { aurEff.ChangeAmount(aurEff.GetAmount() + (int)extra); } } } }
void HandleAbsorb(AuraEffect aurEff, DamageInfo dmgInfo, ref uint absorbAmount) { AuraEffect auraEffect = GetEffect(1); if (auraEffect == null || !GetTargetApplication().HasEffect(1)) { PreventDefaultAction(); return; } // You take ${$s2/3}% reduced damage float damageReductionPct = (float)auraEffect.GetAmount() / 3; // plus a random amount of up to ${$s2/3}% additional reduced damage damageReductionPct += RandomHelper.FRand(0.0f, damageReductionPct); absorbAmount = MathFunctions.CalculatePct(dmgInfo.GetDamage(), damageReductionPct); }
void Absorb(DamageInfo dmgInfo, float multiplier) { // Prevent default action (which would remove the aura) PreventDefaultAction(); // make sure damage doesn't come from stagger damage spell SPELL_MONK_STAGGER_DAMAGE_AURA SpellInfo dmgSpellInfo = dmgInfo.GetSpellInfo(); if (dmgSpellInfo != null) { if (dmgSpellInfo.Id == SpellIds.StaggerDamageAura) { return; } } AuraEffect effect = GetEffect(0); if (effect == null) { return; } Unit target = GetTarget(); float agility = target.GetStat(Stats.Agility); float baseAmount = MathFunctions.CalculatePct(agility, effect.GetAmount()); float K = Global.DB2Mgr.EvaluateExpectedStat(ExpectedStatType.ArmorConstant, target.GetLevel(), -2, 0, target.GetClass()); float newAmount = (baseAmount / (baseAmount + K)); newAmount *= multiplier; // Absorb X percentage of the damage float absorbAmount = dmgInfo.GetDamage() * newAmount; if (absorbAmount > 0) { dmgInfo.AbsorbDamage((uint)absorbAmount); // Cast stagger and make it tick on each tick AddAndRefreshStagger(absorbAmount); } }
void HandleProc(AuraEffect aurEff, ProcEventInfo eventInfo) { DamageInfo damageInfo = eventInfo.GetDamageInfo(); int heal = (int)MathFunctions.CalculatePct(damageInfo.GetDamage(), aurEff.GetAmount()); _appliedAtonements.RemoveAll(targetGuid => { Unit target = Global.ObjAccessor.GetUnit(GetTarget(), targetGuid); if (target) { if (target.GetExactDist(GetTarget()) < GetSpellInfo().GetEffect(1).CalcValue()) { GetTarget().CastCustomSpell(SpellIds.AtonementHeal, SpellValueMod.BasePoint0, heal, target, true); } return(false); } return(true); }); }
void HandleProc(AuraEffect aurEff, ProcEventInfo eventInfo) { PreventDefaultAction(); DamageInfo damageInfo = eventInfo.GetDamageInfo(); if (damageInfo != null) { SpellInfo spellInfo = damageInfo.GetSpellInfo(); if (spellInfo != null && (spellInfo.Id == SpellIds.BladestormPeriodicWhirlwind || (spellInfo.Id == SpellIds.Execute && !_procTarget.HasAuraState(AuraStateType.HealthLess20Percent)))) { // If triggered by Execute (while target is not under 20% hp) or Bladestorm deals normalized weapon damage GetTarget().CastSpell(_procTarget, SpellIds.SweepingStrikesExtraAttack2, true, null, aurEff); } else { int damage = (int)damageInfo.GetDamage(); GetTarget().CastCustomSpell(SpellIds.SweepingStrikesExtraAttack1, SpellValueMod.BasePoint0, damage, _procTarget, true, null, aurEff); } } }
void HandleProc(AuraEffect aurEff, ProcEventInfo eventInfo) { PreventDefaultAction(); DamageInfo damageInfo = eventInfo.GetDamageInfo(); if (damageInfo != null) { SpellInfo spellInfo = damageInfo.GetSpellInfo(); if (spellInfo != null && (spellInfo.Id == SpellIds.BladestormPeriodicWhirlwind || (spellInfo.Id == SpellIds.Execute && !_procTarget.HasAuraState(AuraStateType.Wounded20Percent)))) { // If triggered by Execute (while target is not under 20% hp) or Bladestorm deals normalized weapon damage GetTarget().CastSpell(_procTarget, SpellIds.SweepingStrikesExtraAttack2, new CastSpellExtraArgs(aurEff)); } else { CastSpellExtraArgs args = new(aurEff); args.AddSpellMod(SpellValueMod.BasePoint0, (int)damageInfo.GetDamage()); GetTarget().CastSpell(_procTarget, SpellIds.SweepingStrikesExtraAttack1, args); } } }