public bool OnHit(CharacterStateControl attacker, CharacterStateControl target) { if (SkillStatus.onHitRate100Percent) { return(true); } float num = this.hitRate; if (Tolerance.OnInfluenceToleranceAffectEffect(this.type)) { Tolerance tolerance = target.tolerance; Strength affectEffectStrength = tolerance.GetAffectEffectStrength(this.type); if (affectEffectStrength == Strength.Strong) { num *= 0.5f; } else if (affectEffectStrength == Strength.Weak) { num *= 1.5f; } else if (affectEffectStrength == Strength.Invalid) { num *= 0f; } } else if (attacker != null) { num += this.GetSkillHitRateCorrectionValue(attacker); } return(RandomExtension.Switch(Mathf.Clamp01(num))); }
public Strength GetSkillStrength(Tolerance tolerance) { int num = 0; foreach (AffectEffectProperty affectEffectProperty in this.affectEffect) { if (affectEffectProperty != null) { Strength strength = Strength.None; if (affectEffectProperty.ThisSkillIsAttack && affectEffectProperty.powerType == PowerType.Percentage) { strength = tolerance.GetAttributeStrength(affectEffectProperty.attribute); } else if (Tolerance.OnInfluenceToleranceAffectEffect(affectEffectProperty.type)) { strength = tolerance.GetAffectEffectStrength(affectEffectProperty.type); } switch (strength) { case Strength.Strong: num--; break; case Strength.Weak: num++; break; case Strength.Drain: return(Strength.Drain); case Strength.Invalid: return(Strength.Weak); } } } if (num < 0) { return(Strength.Weak); } if (num > 0) { return(Strength.Strong); } return(Strength.None); }