Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
                    }
                }
            }
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
 public static void CheckProc(Player p, ResultType type, double weaponSpeed)
 {
     if (type == ResultType.Hit || type == ResultType.Crit || type == ResultType.Block || type == ResultType.Glancing)
     {
         if (p.Sim.random.NextDouble() < weaponSpeed * 1.82 / 100)
         {
             if (p.Effects.Any(e => e is Crusader))
             {
                 Effect current = p.Effects.Where(e => e is Crusader).First();
                 current.Refresh();
             }
             else
             {
                 Crusader flu = new Crusader(p);
                 flu.StartBuff();
             }
         }
     }
 }
Пример #5
0
        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);
            }
        }