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; } }
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; }
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); }
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; } }
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]); }
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(); }
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; } }
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; } }
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]; }
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]; }