public override void DoAction() { ResultType res = Player.YellowAttackEnemy(Player.Sim.Boss); int damage = (int)Math.Round(45 * Player.Sim.DamageMod(res) * Entity.ArmorMitigation(Player.Sim.Boss.Armor) * (res == ResultType.Crit ? 1 + (0.1 * Player.GetTalentPoints("Impale")) : 1) * (Player.DualWielding() ? 1 : (1 + 0.01 * Player.GetTalentPoints("2HS")))); CommonAction(); if (res != ResultType.Parry && res != ResultType.Dodge) { Player.Ressource -= RessourceCost; } RegisterDamage(new ActionResult(res, damage)); if (Player.GetTalentPoints("DW") > 0) { DeepWounds.CheckProc(Player, res, Player.GetTalentPoints("DW")); } if (Player.GetTalentPoints("Flurry") > 0) { Flurry.CheckProc(Player, res, Player.GetTalentPoints("Flurry")); } if (Player.MH.Enchantment.Name == "Crusader") { Crusader.CheckProc(Player, res, Player.MH.Speed); } }
public void DoAA(int bonusAP = 0, bool didWf = false) { ResultType res = Player.WhiteAttackEnemy(Player.Sim.Boss, MH); int minDmg = (int)Math.Round(Weapon.DamageMin + Weapon.Speed * (Player.AP + bonusAP) / 14); int maxDmg = (int)Math.Round(Weapon.DamageMax + Weapon.Speed * (Player.AP + bonusAP) / 14); double baseDamage = Player.Sim.random.Next(minDmg, maxDmg + 1) * Entity.ArmorMitigation(Player.Sim.Boss.Armor) * (Player.DualWielding() ? (MH ? 1 : 0.5 * (1 + (0.05 * Player.GetTalentPoints("DWS")))) : (1 + 0.01 * Player.GetTalentPoints("2HS"))); int rageDamage = (int)Math.Round(baseDamage * Player.Sim.RageDamageMod(res)); int damage = (int)Math.Round(baseDamage * Player.Sim.DamageMod(res)); //Player.Ressource += (int)Math.Round(Simulation.RageGained(damage, Weapon.Speed, res, MH, Player.Level)); Player.Ressource += (int)Math.Round(Simulation.RageGained(damage, Player.Level)); RegisterDamage(new ActionResult(res, damage)); if (Player.GetTalentPoints("DW") > 0) { DeepWounds.CheckProc(Player, res, Player.GetTalentPoints("DW")); } if (Player.GetTalentPoints("Flurry") > 0) { Flurry.CheckProc(Player, res, Player.GetTalentPoints("Flurry"), didWf); } if (Player.GetTalentPoints("UW") > 0) { UnbridledWrath.CheckProc(Player, res, Player.GetTalentPoints("UW")); } if ((MH && Player.MH.Enchantment.Name == "Crusader") || (!MH && Player.OH.Enchantment.Name == "Crusader")) { Crusader.CheckProc(Player, res, Weapon.Speed); } if (MH && !didWf && Player.WindfuryTotem) { if (res == ResultType.Hit || res == ResultType.Crit || res == ResultType.Block || res == ResultType.Glancing) { if (Player.Sim.random.NextDouble() < 0.2) { if (Program.logFight) { Program.Log(string.Format("{0:N2} : Windfury procs", Player.Sim.CurrentTime)); } DoAA(315, true); } } } }
public override void DoAction() { Player.applyAtNextAA = null; Random random = new Random(); Weapon weapon = Player.MH; LockedUntil = Player.Sim.CurrentTime + weapon.Speed / Player.HasteMod; ResultType res = Player.YellowAttackEnemy(Player.Sim.Boss); int minDmg = (int)Math.Round(weapon.DamageMin + weapon.Speed * Player.AP / 14); int maxDmg = (int)Math.Round(weapon.DamageMax + weapon.Speed * Player.AP / 14); int damage = (int)Math.Round((random.Next(minDmg, maxDmg + 1) + 157) * Player.Sim.DamageMod(res) * Entity.ArmorMitigation(Player.Sim.Boss.Armor) * (res == ResultType.Crit ? 1 + (0.1 * Player.GetTalentPoints("Impale")) : 1) * (Player.DualWielding() ? 1 : (1 + 0.01 * Player.GetTalentPoints("2HS")))); if (res != ResultType.Parry && res != ResultType.Dodge) { Player.Ressource -= RessourceCost; } RegisterDamage(new ActionResult(res, damage)); if (Player.GetTalentPoints("DW") > 0) { DeepWounds.CheckProc(Player, res, Player.GetTalentPoints("DW")); } if (Player.GetTalentPoints("Flurry") > 0) { Flurry.CheckProc(Player, res, Player.GetTalentPoints("Flurry")); } if (Player.GetTalentPoints("UW") > 0) { UnbridledWrath.CheckProc(Player, res, Player.GetTalentPoints("UW")); } if (Player.MH.Enchantment.Name == "Crusader") { Crusader.CheckProc(Player, res, Player.MH.Speed); } }
public override void DoAction() { ResultType res = Player.YellowAttackEnemy(Player.Sim.Boss); CommonAction(); if (res != ResultType.Parry && res != ResultType.Dodge) { Player.Ressource -= RessourceCost; } int minDmg = (int)Math.Round(Player.MH.DamageMin + Simulation.Normalization(Player.MH) * Player.AP / 14); int maxDmg = (int)Math.Round(Player.MH.DamageMax + Simulation.Normalization(Player.MH) * Player.AP / 14); /* * if (Player.OH != null) * { * minDmg += (int)Math.Round(Player.OH.DamageMin + Simulation.Normalization(Player.OH) * Player.AP / 14); * maxDmg += (int)Math.Round(Player.OH.DamageMax + Simulation.Normalization(Player.OH) * Player.AP / 14); * } */ int damage = (int)Math.Round(Player.Sim.random.Next(minDmg, maxDmg + 1) * Player.Sim.DamageMod(res) * Entity.ArmorMitigation(Player.Sim.Boss.Armor) * (res == ResultType.Crit ? 1 + (0.1 * Player.GetTalentPoints("Impale")) : 1) * (Player.DualWielding() ? 1 : (1 + 0.01 * Player.GetTalentPoints("2HS")))); RegisterDamage(new ActionResult(res, damage)); if (Player.GetTalentPoints("DW") > 0) { DeepWounds.CheckProc(Player, res, Player.GetTalentPoints("DW")); } if (Player.GetTalentPoints("Flurry") > 0) { Flurry.CheckProc(Player, res, Player.GetTalentPoints("Flurry")); } if (Player.MH.Enchantment.Name == "Crusader") { Crusader.CheckProc(Player, res, Player.MH.Speed); } }
public static void CheckProc(Player p, ResultType type, int points, bool extraAA = false) { if (p.Effects.ContainsKey(Flurry.NAME)) { Effect current = p.Effects[Flurry.NAME]; if (type == ResultType.Crit) { current.Refresh(); } else if (!extraAA) { current.StackRemove(); } } else if (type == ResultType.Crit) { Flurry flu = new Flurry(p, points, p); flu.StartEffect(); } }
public static void CheckProc(Player p, ResultType type, int points, bool windfuryaa = false) { if (p.Effects.Any(e => e is Flurry && e.CurrentStacks > 0)) { Effect current = p.Effects.Where(e => e is Flurry).First(); if (type == ResultType.Crit) { current.Refresh(); } else if (!windfuryaa) { current.StackRemove(); } } else if (type == ResultType.Crit) { Flurry flu = new Flurry(p, points, p); flu.StartBuff(); } }