Пример #1
0
        public static bool Check(DMEnv env, Investigator inv)
        {
            HashSet <string> missingValueNames = new HashSet <string>();
            ValueSet         values            = inv.Values;

            foreach (string name in BasicNine)
            {
                if (!values.Has(name))
                {
                    missingValueNames.Add(name);
                }
            }
            int           maxHealth, maxMagic, calcDodge;
            List <string> warnings = new List <string>();

            // 通过体质与体型检查体力数值
            if (!values.TryGet("体力", out Value health))
            {
                missingValueNames.Add("体力");
            }
            else if (health.Max <= 0)
            {
                warnings.Add("【体力】未设上限");
            }
            else if (
                !values.TryGet("体型", out Value siz) &&
                !values.TryGet("体质", out Value con) &&
                health.Max != (maxHealth = (int)((siz.Val + con.Val) / 10.0)))
            {
                warnings.Add($"【体力】上限不等于[体型]与[体质]之和的十分之一({maxHealth})");
            }
            // 通过意志检查魔法数值
            if (!values.TryGet("魔法", out Value magic))
            {
                missingValueNames.Add("魔法");
            }
            else if (magic.Max <= 0)
            {
                warnings.Add("【魔法】未设上限");
            }
            else if (
                !values.TryGet("意志", out Value pow) &&
                magic.Max != (maxMagic = (int)(pow.Val / 5.0)))
            {
                warnings.Add($"【魔法】上限不等于[意志]的五分之一({maxMagic})");
            }
            // 通过意志检查理智数值
            if (!values.TryGet("理智", out Value sannity))
            {
                missingValueNames.Add("理智");
            }
            else if (
                !values.TryGet("意志", out Value pow) &&
                magic.Max != pow.Val)
            {
                warnings.Add($"【理智】不等于[意志]的值({pow.Val})");
            }
            // 通过敏捷检查闪避数值
            if (!values.TryGet("闪避", out Value dodge))
            {
                missingValueNames.Add("闪避");
            }
            else if (
                !values.TryGet("敏捷", out Value dex) &&
                dodge.Max != (calcDodge = (int)(dex.Val / 2.0)))
            {
                warnings.Add($"【闪避】不等于[敏捷]的一半({calcDodge})");
            }

            if (missingValueNames.Count == 0 && warnings.Count == 0)
            {
                env.Next = "未发现数据错误(不包括体格、伤害加值)";
                return(true);
            }

            if (missingValueNames.Count > 0)
            {
                env.Append("缺失数据:" + string.Join("、", missingValueNames));
                if (warnings.Count > 0)
                {
                    env.Line();
                }
            }
            if (warnings.Count > 0)
            {
                env.Append(string.Join("\n", warnings));
            }

            return(false);
        }