コード例 #1
0
        private bool ParseSelfPreEffects(PgAbilityPvX item, object value)
        {
            if (!(value is List <object> StringArray))
            {
                return(Program.ReportFailure($"Value {value} was expected to be a list"));
            }

            foreach (object StringItem in StringArray)
            {
                if (!(StringItem is string SelfPreEffectString))
                {
                    return(Program.ReportFailure($"Value {StringItem} was expected to be a string"));
                }

                if (!ParseSelfPreEffect(item, SelfPreEffectString, out PgSelfPreEffect selfPreEffect))
                {
                    return(false);
                }

                ParsingContext.AddSuplementaryObject(selfPreEffect);
                item.SelfPreEffectList.Add(selfPreEffect);
            }

            return(true);
        }
コード例 #2
0
        private bool FinishItem(PgAbilityPvX item, Dictionary <string, object> contentTable, Dictionary <string, Json.Token> contentTypeTable, List <object> itemCollection, Json.Token lastItemType, string parsedFile, string parsedKey)
        {
            bool Result = true;

            foreach (KeyValuePair <string, object> Entry in contentTable)
            {
                string Key   = Entry.Key;
                object Value = Entry.Value;

                switch (Key)
                {
                case "Damage":
                    Result = SetIntProperty((int valueInt) => item.RawDamage = valueInt, Value);
                    break;

                case "HealthSpecificDamage":
                    Result = SetIntProperty((int valueInt) => item.RawHealthSpecificDamage = valueInt, Value);
                    break;

                case "ExtraDamageIfTargetVulnerable":
                    Result = SetIntProperty((int valueInt) => item.RawExtraDamageIfTargetVulnerable = valueInt, Value);
                    break;

                case "ArmorSpecificDamage":
                    Result = SetIntProperty((int valueInt) => item.RawArmorSpecificDamage = valueInt, Value);
                    break;

                case "Range":
                    Result = SetIntProperty((int valueInt) => item.RawRange = valueInt, Value);
                    break;

                case "PowerCost":
                    Result = SetIntProperty((int valueInt) => item.RawPowerCost = valueInt, Value);
                    break;

                case "MetabolismCost":
                    Result = SetIntProperty((int valueInt) => item.RawMetabolismCost = valueInt, Value);
                    break;

                case "ArmorMitigationRatio":
                    Result = SetIntProperty((int valueInt) => item.RawArmorMitigationRatio = valueInt, Value);
                    break;

                case "AoE":
                    Result = SetIntProperty((int valueInt) => item.RawAoE = valueInt, Value);
                    break;

                case "SelfPreEffects":
                    Result = ParseSelfPreEffects(item, Value);
                    break;

                case "RageBoost":
                    Result = SetIntProperty((int valueInt) => item.RawRageBoost = valueInt, Value);
                    break;

                case "RageMultiplier":
                    Result = SetFloatProperty((float valueFloat) => item.RawRageMultiplier = valueFloat, Value);
                    break;

                case "Accuracy":
                    Result = SetFloatProperty((float valueFloat) => item.RawAccuracy = valueFloat, Value);
                    break;

                case "AttributesThatDeltaDamage":
                    Result = Inserter <PgAttribute> .AddPgObjectArrayByKey <PgAttribute>(item.AttributesThatDeltaDamageList, Value);

                    break;

                case "AttributesThatModDamage":
                    Result = Inserter <PgAttribute> .AddPgObjectArrayByKey <PgAttribute>(item.AttributesThatModDamageList, Value);

                    break;

                case "AttributesThatModBaseDamage":
                    Result = Inserter <PgAttribute> .AddPgObjectArrayByKey <PgAttribute>(item.AttributesThatModBaseDamageList, Value);

                    break;

                case "AttributesThatDeltaTaunt":
                    Result = Inserter <PgAttribute> .AddPgObjectArrayByKey <PgAttribute>(item.AttributesThatDeltaTauntList, Value);

                    break;

                case "AttributesThatModTaunt":
                    Result = Inserter <PgAttribute> .AddPgObjectArrayByKey <PgAttribute>(item.AttributesThatModTauntList, Value);

                    break;

                case "AttributesThatDeltaRage":
                    Result = Inserter <PgAttribute> .AddPgObjectArrayByKey <PgAttribute>(item.AttributesThatDeltaRageList, Value);

                    break;

                case "AttributesThatModRage":
                    Result = Inserter <PgAttribute> .AddPgObjectArrayByKey <PgAttribute>(item.AttributesThatModRageList, Value);

                    break;

                case "AttributesThatDeltaRange":
                    Result = Inserter <PgAttribute> .AddPgObjectArrayByKey <PgAttribute>(item.AttributesThatDeltaRangeList, Value);

                    break;

                case "AttributesThatDeltaAccuracy":
                    Result = Inserter <PgAttribute> .AddPgObjectArrayByKey <PgAttribute>(item.AttributesThatDeltaAccuracyList, Value);

                    break;

                case "AttributesThatModCritDamage":
                    Result = Inserter <PgAttribute> .AddPgObjectArrayByKey <PgAttribute>(item.AttributesThatModCritDamageList, Value);

                    break;

                case "AttributesThatDeltaTempTaunt":
                    Result = Inserter <PgAttribute> .AddPgObjectArrayByKey <PgAttribute>(item.AttributesThatDeltaTempTauntList, Value);

                    break;

                case "SpecialValues":
                    Result = Inserter <PgSpecialValue> .AddKeylessArray(item.SpecialValueList, Value);

                    break;

                case "TauntDelta":
                    Result = SetIntProperty((int valueInt) => item.RawTauntDelta = valueInt, Value);
                    break;

                case "TempTauntDelta":
                    Result = SetIntProperty((int valueInt) => item.RawTempTauntDelta = valueInt, Value);
                    break;

                case "RageCost":
                    Result = SetIntProperty((int valueInt) => item.RawRageCost = valueInt, Value);
                    break;

                case "RageCostMod":
                    Result = SetFloatProperty((float valueFloat) => item.RawRageCostMod = valueFloat, Value);
                    break;

                case "DoTs":
                    Result = Inserter <PgDoT> .AddKeylessArray(item.DoTList, Value);

                    break;

                case "CritDamageMod":
                    Result = SetFloatProperty((float valueFloat) => item.RawCritDamageMod = valueFloat, Value);
                    break;

                case "SelfEffectsOnCrit":
                    Result = StringToEnumConversion <SelfEffect> .TryParseList(Value, item.SelfEffectOnCritList);

                    break;

                default:
                    Result = Program.ReportFailure(parsedFile, parsedKey, $"Key '{Key}' not handled");
                    break;
                }

                if (!Result)
                {
                    break;
                }
            }

            return(Result);
        }
コード例 #3
0
        private bool ParseSelfPreEffect(PgAbilityPvX item, string value, out PgSelfPreEffect selfPreEffect)
        {
            selfPreEffect = null !;

            int StartIndex = value.IndexOf('(');
            int EndIndex   = value.IndexOf(')');

            if (StartIndex > 0 && EndIndex > StartIndex + 1 && EndIndex + 1 == value.Length)
            {
                string Prefix = value.Substring(0, StartIndex);
                if (Prefix == "EnhanceZombie")
                {
                    string Enhancement = value.Substring(StartIndex + 1, EndIndex - StartIndex - 1);
                    if (!StringToEnumConversion <PreEffect> .TryParse(Enhancement, out PreEffect enumValue))
                    {
                        return(false);
                    }

                    selfPreEffect = new PgSelfPreEffectEnhanceZombie()
                    {
                        Value = enumValue
                    };
                }
                else if (Prefix == "ConfigGalvanize")
                {
                    if (value[StartIndex + 1] != ',')
                    {
                        return(Program.ReportFailure($"Symbol ',' was expected"));
                    }

                    string Enhancement = value.Substring(StartIndex + 2, EndIndex - StartIndex - 2);
                    if (!int.TryParse(Enhancement, out int Value))
                    {
                        return(Program.ReportFailure($"Value {Enhancement} was expected to be an int"));
                    }

                    selfPreEffect = new PgSelfPreEffectConfigGalvanize()
                    {
                        RawValue = Value
                    };
                }
                else
                {
                    return(Program.ReportFailure($"Invalid SelfPreEffect format {Prefix}"));
                }
            }
            else
            {
                if (!StringToEnumConversion <PreEffect> .TryParse(value, out PreEffect enumValue))
                {
                    return(false);
                }

                selfPreEffect = new PgSelfPreEffectSimple()
                {
                    Value = enumValue
                };
            }

            return(true);
        }