public override void DoAction() { // Don't call base.DoAction, since that resets the swing timer Player.casting = null; LogAction(); // Find out whether it hits/crits ResultType res = Player.WhiteAttackEnemy(Player.Sim.Boss, true); int damage = 0; // Can't glance, so treat glance as a hit if (res == ResultType.Glance) { res = ResultType.Hit; } if (res == ResultType.Hit || res == ResultType.Crit) { // Calculate weapon dmg double weapMin = Player.MH.DamageMin + Player.MH.Speed * (Player.AP + Player.nextAABonus) / 14; double weapMax = Player.MH.DamageMax + Player.MH.Speed * (Player.AP + Player.nextAABonus) / 14; // 70% weapon damage int minDmg = (int)(0.7 * weapMin); int maxDmg = (int)(0.7 * weapMax); // Include SotC bonus int holyBoost = 0; if (Player.Sim.Boss.Effects.ContainsKey(JudgementOfTheCrusaderDebuff.NAME)) { holyBoost = ((JudgementOfTheCrusaderDebuff)Player.Sim.Boss.Effects[JudgementOfTheCrusaderDebuff.NAME]).HolyDmgIncrease; } // Include spell resistance double spellResist = 1.0; /* I don't think this factors in, for some reason, or there is a different dmg *boost* missing to offset this * spellResist = 1 - Simulation.AverageResistChance(315); */ damage = (int)Math.Round((Randomer.Next(minDmg, maxDmg + 1) + ((holyBoost + Player.SP) * RATIO)) * Player.Sim.DamageMod(res, School.Physical) // Crit modifier using Melee multiplier * (Player.Sim.Boss.Effects.ContainsKey(SpellVulnerability.NAME) ? ((SpellVulnerability)Player.Sim.Boss.Effects[SpellVulnerability.NAME]).Modifier : 1) * spellResist * Player.DamageMod ); // Turn on Vengeance if (Player.GetTalentPoints("Veng") > 0) { Vengeance.CheckProc(Player, res); } } RegisterDamage(new ActionResult(res, damage)); }
public override void DoAction() { // Don't call base.DoAction, since that resets the swing timer Player.casting = null; LogAction(); // // SoR always hits when melee hits // int damage = 0; // Include SotC bonus int holyBoost = 0; if (Player.Sim.Boss.Effects.ContainsKey(JudgementOfTheCrusaderDebuff.NAME)) { holyBoost = ((JudgementOfTheCrusaderDebuff)Player.Sim.Boss.Effects[JudgementOfTheCrusaderDebuff.NAME]).HolyDmgIncrease; } // Set coefficient differently for 1H versus 2H double coefficient = 0.12; // 2H coeff. int dmgAmt = (int)(33 + 2.3 * Player.MH.Speed * 10 - 34.5); if (!Player.MH.TwoHanded) { coefficient = 0.1; dmgAmt = (int)(22 + 2.0 * Player.MH.Speed * 10 - 30); } // Include spell resistance double spellResist = 1.0; /* I don't think this factors in, for some reason, or there is a different dmg *boost* missing to offset this * spellResist = 1 - Simulation.AverageResistChance(315); */ // Include talented SoR double impSoRMultiplier = 1.0 + 0.03 * Player.GetTalentPoints("ImpSoR"); damage = (int)Math.Round((dmgAmt + ((holyBoost + Player.SP) * coefficient)) * Player.Sim.DamageMod(ResultType.Hit, School.Light) * (Player.Sim.Boss.Effects.ContainsKey(SpellVulnerability.NAME) ? ((SpellVulnerability)Player.Sim.Boss.Effects[SpellVulnerability.NAME]).Modifier : 1) * spellResist * Player.DamageMod * impSoRMultiplier ); // Turn on Vengeance if (Player.GetTalentPoints("Veng") > 0) { Vengeance.CheckProc(Player, ResultType.Hit); } RegisterDamage(new ActionResult(ResultType.Hit, damage)); }
public override void DoAction() { // Don't call base.DoAction, since that resets the swing timer Player.casting = null; LogAction(); ResultType res = Player.SpellAttackEnemy(Player.Sim.Boss); int damage = 0; // Can't glance if (res == ResultType.Hit || res == ResultType.Crit) { // Include SotC bonus int holyBoost = 0; if (Player.Sim.Boss.Effects.ContainsKey(JudgementOfTheCrusaderDebuff.NAME)) { holyBoost = ((JudgementOfTheCrusaderDebuff)Player.Sim.Boss.Effects[JudgementOfTheCrusaderDebuff.NAME]).HolyDmgIncrease; } // Include spell resistance double spellResist = 1.0; /* I don't think this factors in, for some reason, or there is a different dmg *boost* missing to offset this * spellResist = 1 - Simulation.AverageResistChance(315); */ // Include talented SoR double impSoRMultiplier = 1.0 + 0.03 * Player.GetTalentPoints("ImpSoR"); damage = (int)Math.Round((Randomer.Next(minDmg, maxDmg + 1) + ((holyBoost + Player.SP) * RATIO)) * Player.Sim.DamageMod(ResultType.Hit, School.Light) * (Player.Sim.Boss.Effects.ContainsKey(SpellVulnerability.NAME) ? ((SpellVulnerability)Player.Sim.Boss.Effects[SpellVulnerability.NAME]).Modifier : 1) * spellResist * Player.DamageMod * impSoRMultiplier ); // Turn on Vengeance if (Player.GetTalentPoints("Veng") > 0) { Vengeance.CheckProc(Player, res); } } RegisterDamage(new ActionResult(res, damage)); }
public override void DoAction() { // Don't call base.DoAction, since that resets the swing timer Player.casting = null; LogAction(); ResultType res = Player.MeleeSpellAttackEnemy(Player.Sim.Boss); int damage = 0; // Can't glance if (res == ResultType.Hit || res == ResultType.Crit) { int minDmg = minDmg_Normal; int maxDmg = maxDmg_Normal; // Double dmg if target is stunned if (Player.Sim.Boss.Effects.ContainsKey(HammerOfJusticeDebuff.NAME)) { minDmg = minDmg_Stunned; maxDmg = maxDmg_Stunned; } // Include SotC bonus int holyBoost = 0; if (Player.Sim.Boss.Effects.ContainsKey(JudgementOfTheCrusaderDebuff.NAME)) { holyBoost = ((JudgementOfTheCrusaderDebuff)Player.Sim.Boss.Effects[JudgementOfTheCrusaderDebuff.NAME]).HolyDmgIncrease; } damage = (int)Math.Round((Randomer.Next(minDmg, maxDmg + 1) + ((holyBoost + Player.SP) * RATIO)) * Player.Sim.DamageMod(res, School.Physical) // Crit modifier using Melee multiplier * (Player.Sim.Boss.Effects.ContainsKey(SpellVulnerability.NAME) ? ((SpellVulnerability)Player.Sim.Boss.Effects[SpellVulnerability.NAME]).Modifier : 1) * (1 - Simulation.AverageResistChance(315)) * Player.DamageMod ); // Turn on Vengeance if (Player.GetTalentPoints("Veng") > 0) { Vengeance.CheckProc(Player, res); } } RegisterDamage(new ActionResult(res, damage)); }