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