Exemple #1
0
        public bool StealthCheck()
        {
            if (GameManager.Instance.PlayerEnterExit.IsPlayerInsideDungeonCastle && !motor.IsHostile)
            {
                return(false);
            }

            if (!wouldBeSpawnedInClassic)
            {
                return(false);
            }

            if (distanceToTarget > 1024 * MeshReader.GlobalScale)
            {
                return(false);
            }

            uint gameMinutes = DaggerfallUnity.Instance.WorldTime.DaggerfallDateTime.ToClassicDaggerfallTime();

            if (gameMinutes == timeOfLastStealthCheck)
            {
                return(detectedTarget);
            }

            if (target == player)
            {
                PlayerMotor playerMotor = GameManager.Instance.PlayerMotor;
                if (playerMotor.IsMovingLessThanHalfSpeed)
                {
                    if ((gameMinutes & 1) == 1)
                    {
                        return(detectedTarget);
                    }
                }
                else if (hasEncounteredPlayer)
                {
                    return(true);
                }

                PlayerEntity player = GameManager.Instance.PlayerEntity;
                if (player.TimeOfLastStealthCheck != gameMinutes)
                {
                    player.TallySkill(DFCareer.Skills.Stealth, 1);
                    player.TimeOfLastStealthCheck = gameMinutes;
                }
            }

            timeOfLastStealthCheck = gameMinutes;

            int stealthChance = FormulaHelper.CalculateStealthChance(distanceToTarget, target);

            return(Dice100.FailedRoll(stealthChance));
        }