public virtual int Attack(IActor defender, int value) { if (defender == null || value <= 0) { return(0); } float v = value - defender.Attrbute.GetValue(AttributeType.Defense) * 0.2f; v = v * Constant.Define.DamageRatio; if (v <= 0) { v = UnityEngine.Random.Range(3, 7); } float cRate = this.Attrbute.GetValue(AttributeType.Crit) * 0.01f; float bRate = this.Attrbute.GetValue(AttributeType.CritDamage) * 0.01f; bool critical = GlobalTools.IsTrigger(cRate); if (critical) { v = (v * (1 + bRate)); } int dmg = Mathf.FloorToInt(UnityEngine.Random.Range(0.85f, 1.08f) * v); defender.TakeDamage(this, dmg, critical); return(dmg); }