Ejemplo n.º 1
0
        public static void ApplyEffect(Actor target, WeaponSkills weaponSkill, bool verbose, EffectSnapshot effectSnapshot = null)
        {
            switch (weaponSkill)
            {
            case WeaponSkills.ArmorCrush:
                if (target.StatusEffects.ContainsKey(StatusEffects.Huton))
                {
                    var newHutonDuration = Math.Min(target.StatusEffects[StatusEffects.Huton] + (long)TimeSpan.FromSeconds(30).TotalMilliseconds, 70000);
                    ApplyEffect(target, StatusEffects.Huton, newHutonDuration, verbose);
                }
                break;

            case WeaponSkills.DancingEdge:
                ApplyEffect(target, StatusEffects.DancingEdge, 20000, verbose);
                break;

            case WeaponSkills.Mutilate:
                Debug.Assert(effectSnapshot != null, "effectSnapshot != null");
                effectSnapshot.Duration = (long)TimeSpan.FromSeconds(30).TotalMilliseconds;
                ApplyDamageOverTime(target, StatusEffects.Mutilate, effectSnapshot, verbose);
                break;

            case WeaponSkills.ShadowFang:
                Debug.Assert(effectSnapshot != null, "effectSnapshot != null");
                effectSnapshot.Duration = (long)TimeSpan.FromSeconds(18).TotalMilliseconds;
                ApplyDamageOverTime(target, StatusEffects.ShadowFang, effectSnapshot, verbose);
                break;
            }
        }
Ejemplo n.º 2
0
 public SecondaryAttributes(
     Health health,
     CriticalStrike criticalStrike,
     Hit hit,
     Dodge dodge,
     Parry parry,
     Defense defense,
     BlockDamage blockDamage,
     MeleeAttackPower meleeAttackPower,
     RangedAttackPower rangedAttackPower,
     ArmorAmount armor,
     WeaponSkills weaponSkills)
 {
     Health            = health;
     CriticalStrike    = criticalStrike;
     Hit               = hit;
     Dodge             = dodge;
     Parry             = parry;
     Defense           = defense;
     BlockDamage       = blockDamage;
     MeleeAttackPower  = meleeAttackPower;
     RangedAttackPower = rangedAttackPower;
     Armor             = armor;
     WeaponSkills      = weaponSkills;
 }
Ejemplo n.º 3
0
 public static void ApplyEffect(Actor target, WeaponSkills weaponSkill, bool verbose, EffectSnapshot effectSnapshot = null)
 {
     switch (weaponSkill)
     {
         case WeaponSkills.ArmorCrush:
             if (target.StatusEffects.ContainsKey(StatusEffects.Huton))
             {
                 var newHutonDuration = Math.Min(target.StatusEffects[StatusEffects.Huton] + (long)TimeSpan.FromSeconds(30).TotalMilliseconds, 70000);
                 ApplyEffect(target, StatusEffects.Huton, newHutonDuration, verbose);
             }
             break;
         case WeaponSkills.DancingEdge:
             ApplyEffect(target, StatusEffects.DancingEdge, 20000, verbose);
             break;
         case WeaponSkills.Mutilate:
             Debug.Assert(effectSnapshot != null, "effectSnapshot != null");
             effectSnapshot.Duration = (long)TimeSpan.FromSeconds(30).TotalMilliseconds;
             ApplyDamageOverTime(target, StatusEffects.Mutilate, effectSnapshot, verbose);
             break;
         case WeaponSkills.ShadowFang:
             Debug.Assert(effectSnapshot != null, "effectSnapshot != null");
             effectSnapshot.Duration = (long)TimeSpan.FromSeconds(18).TotalMilliseconds;
             ApplyDamageOverTime(target, StatusEffects.ShadowFang, effectSnapshot, verbose);
             break;
     }
 }
Ejemplo n.º 4
0
        public double Attack(StrikingDummy target, WeaponSkills weaponSkill)
        {
            var animationLocked = QueuedEffects.ContainsKey(Skills.StatusEffects.AnimationLocked);

            if (GcdDuration > 0 || animationLocked)
            {
                return(0);
            }

            var potency = WeaponLibrary.WeaponPotencies(weaponSkill, LastSkills);
            var damage  = FormulaLibrary.WeaponSkills(potency, Weapon.WeaponDamage, GetDexterity(), Det, CalculateMultiplier(target, DamageType.Slashing));

            if (StatusEffects.ContainsKey(Skills.StatusEffects.Duality))
            {
                damage *= 2;
                StatusEffects.Remove(Skills.StatusEffects.Duality);
            }
            else
            {
                damage = (damage * CalculateCritChance() * FormulaLibrary.CritDmg(Crt)) +
                         (damage * (1 - CalculateCritChance()));
            }

            WeaponLibrary.QueueEffect(this, target, weaponSkill);
            var gcdMultiplier = StatusEffects.ContainsKey(Skills.StatusEffects.Huton) ? 0.85 : 1.00;

            GcdDuration = (int)TimeSpan.FromSeconds(FormulaLibrary.Gcd(Sks, gcdMultiplier)).TotalMilliseconds;
            LastSkills.Push(weaponSkill);

            return(damage);
        }
Ejemplo n.º 5
0
        public static void QueueEffect(Player player, StrikingDummy strikingDummy, WeaponSkills weaponSkill)
        {
            WeaponSkills lastSkill;
            player.QueuedEffects.Add(StatusEffects.AnimationLocked, new EffectSnapshot { Duration = GameEngine.GetGlobalAnimationLockDurationMs(), Target = player });

            switch (weaponSkill)
            {
                case WeaponSkills.ShadowFang:
                    if (player.LastSkills.Peek() == WeaponSkills.SpinningEdge)
                    {
                        strikingDummy.QueuedEffects.Add(StatusEffects.ShadowFang, new EffectSnapshot
                        {
                            Duration = 585,
                            CritChance = player.CalculateCritChance(),
                            Crt = player.Crt,
                            Det = player.Det,
                            Multiplier = player.CalculateDamageOverTimeMultiplier(DamageType.Physical, strikingDummy),
                            Dex = player.GetDexterity(),
                            Potency = 40,
                            Target = strikingDummy,
                            WeaponDamage = player.Weapon.WeaponDamage
                        });
                    }
                    break;
                case WeaponSkills.Mutilate:
                    strikingDummy.QueuedEffects.Add(StatusEffects.Mutilate, new EffectSnapshot
                    {
                        Duration = 400,
                        CritChance = player.CalculateCritChance(),
                        Crt = player.Crt,
                        Det = player.Det,
                        Multiplier = player.CalculateDamageOverTimeMultiplier(DamageType.Physical, strikingDummy),
                        Dex = player.GetDexterity(),
                        Potency = 30,
                        Target = strikingDummy,
                        WeaponDamage = player.Weapon.WeaponDamage
                    });
                    break;
                case WeaponSkills.DancingEdge:
                    lastSkill = player.LastSkills.Pop();
                    if (lastSkill == WeaponSkills.GustSlash && player.LastSkills.Peek() == WeaponSkills.SpinningEdge)
                    {
                        strikingDummy.QueuedEffects.Add(StatusEffects.DancingEdge, new EffectSnapshot { Duration = 395, Target = strikingDummy });
                    }
                    player.LastSkills.Push(lastSkill);
                    break;
                case WeaponSkills.ArmorCrush:
                    lastSkill = player.LastSkills.Pop();
                    if (lastSkill == WeaponSkills.GustSlash && player.LastSkills.Peek() == WeaponSkills.SpinningEdge)
                    {
                        player.QueuedEffects.Add(StatusEffects.ArmorCrush, new EffectSnapshot { Duration = GameEngine.GetGlobalAnimationLockDurationMs(), Target = player });
                    }
                    player.LastSkills.Push(lastSkill);
                    break;
            }
        }
Ejemplo n.º 6
0
        public static double WeaponPotencies(WeaponSkills weaponSkill, Stack <WeaponSkills> lastSkills)
        {
            if (weaponSkill == WeaponSkills.ShadowFang)
            {
                if (lastSkills.Peek() == WeaponSkills.SpinningEdge)
                {
                    return(200);
                }
            }

            if (weaponSkill == WeaponSkills.GustSlash)
            {
                if (lastSkills.Peek() == WeaponSkills.SpinningEdge)
                {
                    return(200);
                }
            }

            if (weaponSkill == WeaponSkills.AeolianEdge)
            {
                var lastSkill = lastSkills.Pop();
                if (lastSkill == WeaponSkills.GustSlash && lastSkills.Peek() == WeaponSkills.SpinningEdge)
                {
                    lastSkills.Push(lastSkill);
                    return(320);
                }
                lastSkills.Push(lastSkill);
            }

            if (weaponSkill == WeaponSkills.DancingEdge)
            {
                var lastSkill = lastSkills.Pop();
                if (lastSkill == WeaponSkills.GustSlash && lastSkills.Peek() == WeaponSkills.SpinningEdge)
                {
                    lastSkills.Push(lastSkill);
                    return(260);
                }
                lastSkills.Push(lastSkill);
            }

            if (weaponSkill == WeaponSkills.ArmorCrush)
            {
                var lastSkill = lastSkills.Pop();
                if (lastSkill == WeaponSkills.GustSlash && lastSkills.Peek() == WeaponSkills.SpinningEdge)
                {
                    lastSkills.Push(lastSkill);
                    return(280);
                }
                lastSkills.Push(lastSkill);
            }

            return(Potencies[weaponSkill]);
        }
Ejemplo n.º 7
0
 public SecondaryAttributes()
 {
     Health            = Health.Zero;
     CriticalStrike    = CriticalStrike.Zero;
     Hit               = Hit.Zero;
     Dodge             = Dodge.Zero;
     Parry             = Parry.Zero;
     Defense           = Defense.Zero;
     BlockDamage       = BlockDamage.Zero;
     MeleeAttackPower  = MeleeAttackPower.Zero;
     RangedAttackPower = RangedAttackPower.Zero;
     Armor             = ArmorAmount.Zero;
     WeaponSkills      = new WeaponSkills();
 }
Ejemplo n.º 8
0
        public static void QueueEffect(Player player, StrikingDummy strikingDummy, WeaponSkills weaponSkill)
        {
            player.QueuedEffects.Add(StatusEffects.AnimationLocked, new EffectSnapshot { Duration = Game.GetGlobalAnimationLockDurationMs(), Target = player });

            switch (weaponSkill)
            {
                case WeaponSkills.HeavyThrust:
                    player.QueuedEffects.Add(StatusEffects.HeavyThrust, new EffectSnapshot { Duration = 1289, Target = player });
                    break;
                case WeaponSkills.Disembowel:
                    if (player.LastSkills.Peek() == WeaponSkills.ImpulseDrive)
                    {
                        strikingDummy.QueuedEffects.Add(StatusEffects.Disembowel, new EffectSnapshot { Duration = 1651, Target = strikingDummy });
                    }
                    break;
                case WeaponSkills.ChaosThrust:
                    var lastSkill = player.LastSkills.Pop();
                    if (lastSkill == WeaponSkills.Disembowel && player.LastSkills.Peek() == WeaponSkills.ImpulseDrive)
                    {
                        strikingDummy.QueuedEffects.Add(StatusEffects.ChaosThrust, new EffectSnapshot
                        {
                            Duration = 1651,
                            CritChance = player.CalculateCritChance(),
                            Crt = player.Crt,
                            Det = player.Det,
                            Multiplier = player.CalculateDamageOverTimeMultiplier(),
                            Str = player.GetStrength(),
                            Potency = 35,
                            Target = strikingDummy,
                            WeaponDamage = player.Weapon.WeaponDamage
                        });
                    }
                    player.LastSkills.Push(lastSkill);
                    break;
                case WeaponSkills.Phlebotomize:
                    strikingDummy.QueuedEffects.Add(StatusEffects.Phlebotomize, new EffectSnapshot
                    {
                        Duration = 1111,
                        CritChance = player.CalculateCritChance(),
                        Crt = player.Crt,
                        Det = player.Det,
                        Multiplier = player.CalculateDamageOverTimeMultiplier(),
                        Str = player.GetStrength(),
                        Potency = 30,
                        Target = strikingDummy,
                        WeaponDamage = player.Weapon.WeaponDamage
                    });
                    break;
            }
        }
Ejemplo n.º 9
0
 public static void ApplyEffect(Actor target, WeaponSkills weaponSkill, bool verbose, EffectSnapshot effectSnapshot = null)
 {
     switch (weaponSkill)
     {
         case WeaponSkills.HeavyThrust:
             ApplyEffect(target, StatusEffects.HeavyThrust, 24, verbose);
             break;
         case WeaponSkills.Disembowel:
             ApplyEffect(target, StatusEffects.Disembowel, 30, verbose);
             break;
         case WeaponSkills.ChaosThrust:
             Debug.Assert(effectSnapshot != null, "effectSnapshot != null");
             effectSnapshot.Duration = (long) TimeSpan.FromSeconds(30).TotalMilliseconds;
             ApplyDamageOverTime(target, StatusEffects.ChaosThrust, effectSnapshot, verbose);
             break;
         case WeaponSkills.Phlebotomize:
             Debug.Assert(effectSnapshot != null, "effectSnapshot != null");
             effectSnapshot.Duration = (long)TimeSpan.FromSeconds(24).TotalMilliseconds;
             ApplyDamageOverTime(target, StatusEffects.Phlebotomize, effectSnapshot, verbose);
             break;
     }
 }
Ejemplo n.º 10
0
        public static void QueueEffect(Player player, StrikingDummy strikingDummy, WeaponSkills weaponSkill)
        {
            WeaponSkills lastSkill;

            player.QueuedEffects.Add(StatusEffects.AnimationLocked, new EffectSnapshot {
                Duration = GameEngine.GetGlobalAnimationLockDurationMs(), Target = player
            });

            switch (weaponSkill)
            {
            case WeaponSkills.ShadowFang:
                if (player.LastSkills.Peek() == WeaponSkills.SpinningEdge)
                {
                    strikingDummy.QueuedEffects.Add(StatusEffects.ShadowFang, new EffectSnapshot
                    {
                        Duration     = 585,
                        CritChance   = player.CalculateCritChance(),
                        Crt          = player.Crt,
                        Det          = player.Det,
                        Multiplier   = player.CalculateDamageOverTimeMultiplier(DamageType.Physical, strikingDummy),
                        Dex          = player.GetDexterity(),
                        Potency      = 40,
                        Target       = strikingDummy,
                        WeaponDamage = player.Weapon.WeaponDamage
                    });
                }
                break;

            case WeaponSkills.Mutilate:
                strikingDummy.QueuedEffects.Add(StatusEffects.Mutilate, new EffectSnapshot
                {
                    Duration     = 400,
                    CritChance   = player.CalculateCritChance(),
                    Crt          = player.Crt,
                    Det          = player.Det,
                    Multiplier   = player.CalculateDamageOverTimeMultiplier(DamageType.Physical, strikingDummy),
                    Dex          = player.GetDexterity(),
                    Potency      = 30,
                    Target       = strikingDummy,
                    WeaponDamage = player.Weapon.WeaponDamage
                });
                break;

            case WeaponSkills.DancingEdge:
                lastSkill = player.LastSkills.Pop();
                if (lastSkill == WeaponSkills.GustSlash && player.LastSkills.Peek() == WeaponSkills.SpinningEdge)
                {
                    strikingDummy.QueuedEffects.Add(StatusEffects.DancingEdge, new EffectSnapshot {
                        Duration = 395, Target = strikingDummy
                    });
                }
                player.LastSkills.Push(lastSkill);
                break;

            case WeaponSkills.ArmorCrush:
                lastSkill = player.LastSkills.Pop();
                if (lastSkill == WeaponSkills.GustSlash && player.LastSkills.Peek() == WeaponSkills.SpinningEdge)
                {
                    player.QueuedEffects.Add(StatusEffects.ArmorCrush, new EffectSnapshot {
                        Duration = GameEngine.GetGlobalAnimationLockDurationMs(), Target = player
                    });
                }
                player.LastSkills.Push(lastSkill);
                break;
            }
        }
Ejemplo n.º 11
0
        public static double WeaponPotencies(WeaponSkills weaponSkill, Stack<WeaponSkills> lastSkills)
        {
            if (weaponSkill == WeaponSkills.ShadowFang)
            {
                if (lastSkills.Peek() == WeaponSkills.SpinningEdge)
                {
                    return 200;
                }
            }

            if (weaponSkill == WeaponSkills.GustSlash)
            {
                if (lastSkills.Peek() == WeaponSkills.SpinningEdge)
                {
                    return 200;
                }
            }

            if (weaponSkill == WeaponSkills.AeolianEdge)
            {
                var lastSkill = lastSkills.Pop();
                if (lastSkill == WeaponSkills.GustSlash && lastSkills.Peek() == WeaponSkills.SpinningEdge)
                {
                    lastSkills.Push(lastSkill);
                    return 320;
                }
                lastSkills.Push(lastSkill);
            }

            if (weaponSkill == WeaponSkills.DancingEdge)
            {
                var lastSkill = lastSkills.Pop();
                if (lastSkill == WeaponSkills.GustSlash && lastSkills.Peek() == WeaponSkills.SpinningEdge)
                {
                    lastSkills.Push(lastSkill);
                    return 260;
                }
                lastSkills.Push(lastSkill);
            }

            if (weaponSkill == WeaponSkills.ArmorCrush)
            {
                var lastSkill = lastSkills.Pop();
                if (lastSkill == WeaponSkills.GustSlash && lastSkills.Peek() == WeaponSkills.SpinningEdge)
                {
                    lastSkills.Push(lastSkill);
                    return 280;
                }
                lastSkills.Push(lastSkill);
            }

            return Potencies[weaponSkill];
        }
Ejemplo n.º 12
0
        public static double WeaponPotencies(WeaponSkills weaponSkill, Stack<WeaponSkills> lastSkills)
        {
            if (weaponSkill == WeaponSkills.VorpalThrust)
            {
                if (lastSkills.Peek() == WeaponSkills.TrueThrust)
                {
                    return 200;
                }
            }

            if (weaponSkill == WeaponSkills.FullThrust)
            {
                var lastSkill = lastSkills.Pop();
                if (lastSkill == WeaponSkills.VorpalThrust && lastSkills.Peek() == WeaponSkills.TrueThrust)
                {
                    lastSkills.Push(lastSkill);
                    return 360;
                }
                lastSkills.Push(lastSkill);
            }

            if (weaponSkill == WeaponSkills.Disembowel)
            {
                if (lastSkills.Peek() == WeaponSkills.ImpulseDrive)
                {
                    return 220;
                }
            }

            if (weaponSkill == WeaponSkills.ChaosThrust)
            {
                var lastSkill = lastSkills.Pop();
                if (lastSkill == WeaponSkills.Disembowel && lastSkills.Peek() == WeaponSkills.ImpulseDrive)
                {
                    lastSkills.Push(lastSkill);
                    return 250;
                }
                lastSkills.Push(lastSkill);
            }

            return Potencies[weaponSkill];
        }