예제 #1
0
        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);
        }