Пример #1
0
    protected override HitType CheckHit(BattleCharacterInfo executor, BattleCharacterInfo target, BattleCharacter.LiveStateEnum targetLiveState)
    {
        HitType hitType = base.CheckHit(executor, target, targetLiveState);

        if (hitType == HitType.Hit)
        {
            if (target.AbnormalRecorder.Contains(BattleCharacterInfo.AbnormalEnum.Sleep))
            {
                return(HitType.Miss);
            }
            else
            {
                return(HitType.Hit);
            }
        }
        else
        {
            return(hitType);
        }
    }
Пример #2
0
    protected override HitType CheckHit(BattleCharacterInfo executor, BattleCharacterInfo target, BattleCharacter.LiveStateEnum targetLiveState)
    {
        HitType hitType = base.CheckHit(executor, target, targetLiveState);

        if (target.IsNoDamage() || BattleFieldManager.Instance.IsNoDamageField(target.Position))
        {
            return(HitType.NoDamage);
        }

        if (hitType == HitType.Hit)
        {
            if (target.EnemyData != null && target.EnemyData.ID == 7) //新手教學的那隻怪不會被爆擊
            {
                return(HitType.Hit);
            }
            else
            {
                float originalSEN = 0; //與等級無關的原始數值A
                if (_user.JobData != null)
                {
                    originalSEN = _user.JobData.SEN;
                }
                else if (_user.EnemyData != null)
                {
                    originalSEN = _user.EnemyData.SEN;
                }
                float criticalRate = (originalSEN - 10) * (Data.HitRate / 100f) * 0.02f;
                if (criticalRate > UnityEngine.Random.Range(0f, 1f))
                {
                    return(HitType.Critical);
                }
                else
                {
                    return(HitType.Hit);
                }
            }
        }
        else
        {
            return(hitType);
        }
    }
Пример #3
0
    protected virtual HitType CheckHit(BattleCharacterInfo executor, BattleCharacterInfo target, BattleCharacter.LiveStateEnum targetLiveState)
    {
        float hitRate = _user.SEN * (Data.HitRate / 100f) / target.AGI;

        if (hitRate > UnityEngine.Random.Range(0f, 1f))
        {
            return(HitType.Hit);
        }
        else
        {
            if (targetLiveState == BattleCharacter.LiveStateEnum.Dying)
            {
                return(HitType.Hit);
            }
            else
            {
                return(HitType.Miss);
            }
        }
    }