示例#1
0
        private bool ParseCostDeltaAttribute(PgAbility item, object value, string parsedFile, string parsedKey)
        {
            if (!(value is List <object> ArrayKey))
            {
                return(Program.ReportFailure($"Value '{value}' was expected to be a list"));
            }

            List <object> ValueCopy = new List <object>();

            foreach (object Item in ArrayKey)
            {
                if (!(Item is string ValueKey))
                {
                    return(Program.ReportFailure($"Value '{Item}' was expected to be a string"));
                }

                if (ValueKey != "COCKATRICEDEBUFF_COST_DELTA" && ValueKey != "LAMIADEBUFF_COST_DELTA")
                {
                    ValueCopy.Add(ValueKey);
                }
                else
                {
                    ValueCopy.Add(ValueKey);
                }
            }

            bool Result = Inserter <PgAttribute> .AddPgObjectArrayByKey <PgAttribute>(item.AttributesThatDeltaPowerCostList, ValueCopy);

            return(Result);
        }
        private bool FinishItem(PgSpecialValue 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 "Label":
                    Result = SetStringProperty((string valueString) => item.Label = valueString, Value);
                    break;

                case "Suffix":
                    Result = SetStringProperty((string valueString) => item.Suffix = valueString, Value);
                    break;

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

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

                    break;

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

                    break;

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

                    break;

                case "DisplayType":
                    Result = StringToEnumConversion <DisplayType> .SetEnum((DisplayType valueEnum) => item.DisplayType = valueEnum, Value);

                    break;

                case "SkipIfZero":
                    Result = SetBoolProperty((bool valueBool) => item.RawSkipIfZero = valueBool, Value);
                    break;

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

                if (!Result)
                {
                    break;
                }
            }

            return(Result);
        }
示例#3
0
        private bool ParseCompatibleCombatSkills(PgSkill item, object value, string parsedFile, string parsedKey)
        {
            if (!Inserter <PgSkill> .AddPgObjectArrayByKey <PgSkill>(item.CompatibleCombatSkillList, value))
            {
                return(false);
            }

            item.CompatibleCombatSkillList.Sort();
            return(true);
        }
示例#4
0
        private bool FinishItem(PgDoT 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 "DamagePerTick":
                    Result = SetIntProperty((int valueInt) => item.RawDamagePerTick = valueInt, Value);
                    break;

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

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

                case "DamageType":
                    Result = StringToEnumConversion <DamageType> .SetEnum((DamageType valueEnum) => item.DamageType = valueEnum, Value);

                    break;

                case "SpecialRules":
                    Result = StringToEnumConversion <DoTSpecialRule> .TryParseList(Value, item.SpecialRuleList);

                    break;

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

                    break;

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

                    break;

                case "Preface":
                    Result = SetStringProperty((string valueString) => item.Preface = valueString, Value);
                    break;

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

                if (!Result)
                {
                    break;
                }
            }

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

            if (item.RawDamagePerTick == null)
            {
                return(Program.ReportFailure(parsedFile, parsedKey, $"Unexpected empty damage per tick"));
            }

            if (item.DamageType == DamageType.Internal_None || item.DamageType == DamageType.Internal_Empty)
            {
                return(Program.ReportFailure(parsedFile, parsedKey, $"Unexpected empty damage type"));
            }

            if (item.RawNumTicks == null)
            {
                return(Program.ReportFailure(parsedFile, parsedKey, $"Unexpected empty num tick"));
            }

            if (item.RawDuration == null)
            {
                return(Program.ReportFailure(parsedFile, parsedKey, $"Unexpected empty duration"));
            }

            return(true);
        }
示例#5
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);
        }
示例#6
0
        private bool FinishItem(PgAbility 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 "AbilityGroup":
                    Result = Inserter <PgAbility> .SetItemByInternalName((PgAbility valueAbility) => item.AbilityGroup_Key = valueAbility.Key, Value);

                    break;

                case "Animation":
                    Result = StringToEnumConversion <AbilityAnimation> .SetEnum((AbilityAnimation valueEnum) => item.Animation = valueEnum, Value);

                    break;

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

                    break;

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

                    break;

                case "AttributesThatDeltaPowerCost":
                    Result = ParseCostDeltaAttribute(item, Value, parsedFile, parsedKey);
                    break;

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

                    break;

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

                    break;

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

                    break;

                case "CanBeOnSidebar":
                    Result = SetBoolProperty((bool valueBool) => item.SetCanBeOnSidebar(valueBool), Value);
                    break;

                case "CanSuppressMonsterShout":
                    Result = SetBoolProperty((bool valueBool) => item.SetCanSuppressMonsterShout(valueBool), Value);
                    break;

                case "CanTargetUntargetableEnemies":
                    Result = SetBoolProperty((bool valueBool) => item.SetCanTargetUntargetableEnemies(valueBool), Value);
                    break;

                case "CausesOfDeath":
                    Result = StringToEnumConversion <Deaths> .TryParseList(Value, item.CausesOfDeathList);

                    break;

                case "Costs":
                    Result = ParseCosts(item, Value, parsedFile, parsedKey);
                    break;

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

                case "DamageType":
                    Result = StringToEnumConversion <DamageType> .SetEnum((DamageType valueEnum) => item.DamageType = valueEnum, DamageType.Internal_None, DamageType.Internal_Empty, Value);

                    break;

                case "DelayLoopIsAbortedIfAttacked":
                    Result = SetBoolProperty((bool valueBool) => item.SetDelayLoopIsAbortedIfAttacked(valueBool), Value);
                    break;

                case "DelayLoopMessage":
                    Result = SetStringProperty((string valueString) => item.DelayLoopMessage = valueString, Value);
                    break;

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

                case "Description":
                    Result = SetStringProperty((string valueString) => item.Description = valueString, Value);
                    break;

                case "EffectKeywordsIndicatingEnabled":
                    Result = StringToEnumConversion <AbilityIndicatingEnabled> .SetEnum((AbilityIndicatingEnabled valueEnum) => item.EffectKeywordsIndicatingEnabled = valueEnum, Value);

                    break;

                case "ExtraKeywordsForTooltips":
                    Result = StringToEnumConversion <TooltipsExtraKeywords> .SetEnum((TooltipsExtraKeywords valueEnum) => item.ExtraKeywordsForTooltips = valueEnum, Value);

                    break;

                case "IconID":
                    Result = SetIconIdProperty((int valueInt) => item.RawIconId = valueInt, Value);
                    break;

                case "IgnoreEffectErrors":
                    Result = SetBoolProperty((bool valueBool) => item.SetIgnoreEffectErrors(valueBool), Value);
                    break;

                case "InternalAbility":
                    Result = SetBoolProperty((bool valueBool) => item.SetInternalAbility(valueBool), Value);
                    break;

                case "InternalName":
                    Result = SetStringProperty((string valueString) => item.InternalName = valueString, Value);
                    break;

                case "IsHarmless":
                    Result = SetBoolProperty((bool valueBool) => item.SetIsHarmless(valueBool), Value);
                    break;

                case "ItemKeywordReqErrorMessage":
                    Result = SetStringProperty((string valueString) => item.ItemKeywordReqErrorMessage = valueString, Value);
                    break;

                case "ItemKeywordReqs":
                    Result = StringToEnumConversion <AbilityItemKeyword> .TryParseList(Value, item.ItemKeywordReqList);

                    break;

                case "Keywords":
                    Result = StringToEnumConversion <AbilityKeyword> .TryParseList(Value, item.KeywordList);

                    break;

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

                case "Name":
                    Result = SetStringProperty((string valueString) => item.Name = valueString, Value);
                    break;

                case "PetTypeTagReq":
                    Result = StringToEnumConversion <AbilityPetType> .SetEnum((AbilityPetType valueEnum) => item.PetTypeTagReq = valueEnum, Value);

                    break;

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

                case "Prerequisite":
                    Result = Inserter <PgAbility> .SetItemByInternalName((PgAbility valueAbility) => item.Prerequisite_Key = valueAbility.Key, Value);

                    break;

                case "Projectile":
                    Result = StringToEnumConversion <AbilityProjectile> .SetEnum((AbilityProjectile valueEnum) => item.Projectile = valueEnum, Value);

                    break;

                case "PvE":
                    Result = Inserter <PgAbilityPvX> .SetItemProperty((PgAbilityPvX valueAbilityPvX) => item.PvE = valueAbilityPvX, Value);

                    break;

                case "PvP":
                    Result = Inserter <PgAbilityPvX> .SetItemProperty((PgAbilityPvX valueAbilityPvX) => item.PvP = valueAbilityPvX, Value);

                    break;

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

                case "SelfParticle":
                    Result = StringToEnumConversion <SelfParticle> .SetEnum((SelfParticle valueEnum) => item.SelfParticle = valueEnum, Value);

                    break;

                case "AmmoDescription":
                    Result = SetStringProperty((string valueString) => item.AmmoDescription = valueString, Value);
                    break;

                case "SharesResetTimerWith":
                    Result = Inserter <PgAbility> .SetItemByInternalName((PgAbility valueAbility) => item.SharesResetTimerWith_Key = valueAbility.Key, Value);

                    break;

                case "Skill":
                    Result = ParserSkill.Parse((PgSkill valueSkill) => item.Skill_Key = valueSkill.Key, Value, parsedFile, parsedKey);
                    break;

                case "SpecialCasterRequirements":
                    Result = Inserter <PgAbilityRequirement> .AddKeylessArray(item.SpecialCasterRequirementList, Value);

                    break;

                case "SpecialCasterRequirementsErrorMessage":
                    Result = SetStringProperty((string valueString) => item.SpecialCasterRequirementsErrorMessage = valueString, Value);
                    break;

                case "SpecialInfo":
                    Result = SetStringProperty((string valueString) => item.SpecialInfo = valueString, Value);
                    break;

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

                case "Target":
                    Result = StringToEnumConversion <AbilityTarget> .SetEnum((AbilityTarget valueEnum) => item.Target = valueEnum, Value);

                    break;

                case "TargetEffectKeywordReq":
                    Result = StringToEnumConversion <TargetEffectKeyword> .SetEnum((TargetEffectKeyword valueEnum) => item.TargetEffectKeywordReq = valueEnum, Value);

                    break;

                case "TargetParticle":
                    Result = StringToEnumConversion <AbilityTargetParticle> .SetEnum((AbilityTargetParticle valueEnum) => item.TargetParticle = valueEnum, Value);

                    break;

                case "UpgradeOf":
                    Result = Inserter <PgAbility> .SetItemByInternalName((PgAbility valueAbility) => item.UpgradeOf_Key = valueAbility.Key, Value);

                    break;

                case "WorksInCombat":
                    Result = SetBoolProperty((bool valueBool) => item.SetWorksInCombat(valueBool), Value);
                    break;

                case "WorksUnderwater":
                    Result = SetBoolProperty((bool valueBool) => item.SetWorksUnderwater(valueBool), Value);
                    break;

                case "WorksWhileFalling":
                    Result = SetBoolProperty((bool valueBool) => item.SetWorksWhileFalling(valueBool), Value);
                    break;

                case "DelayLoopIsOnlyUsedInCombat":
                    Result = SetBoolProperty((bool valueBool) => item.SetDelayLoopIsOnlyUsedInCombat(valueBool), Value);
                    break;

                case "AmmoKeywords":
                    Result = Inserter <PgAbilityAmmo> .AddKeylessArray(item.AmmoKeywordList, Value);

                    break;

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

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

                case "TargetTypeTagReq":
                    Result = ParseTargetTypeTagReq(item, Value, parsedFile, parsedKey);
                    break;

                case "WorksWhileMounted":
                    Result = SetBoolProperty((bool valueBool) => item.SetWorksWhileMounted(valueBool), Value);
                    break;

                case "SelfPreParticle":
                    Result = StringToEnumConversion <SelfPreParticle> .SetEnum((SelfPreParticle valueEnum) => item.SelfPreParticle = valueEnum, Value);

                    break;

                case "IsCosmeticPet":
                    Result = SetBoolProperty((bool valueBool) => item.SetIsCosmeticPet(valueBool), Value);
                    break;

                case "WorksWhileStunned":
                    Result = SetBoolProperty((bool valueBool) => item.SetWorksWhileStunned(valueBool), Value);
                    break;

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

                if (!Result)
                {
                    break;
                }
            }

            if (Result)
            {
                if (item.PvE == null)
                {
                    return(Program.ReportFailure(parsedFile, parsedKey, $"PvE info missing"));
                }

                item.DigitStrippedName = CuteDigitStrippedName(item);
            }

            return(Result);
        }
示例#7
0
        private bool FinishItem(PgSkill 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 "Id":
                    Result = SetIntProperty((int valueInt) => item.RawId = valueInt, Value);
                    break;

                case "Description":
                    Result = SetStringProperty((string valueString) => item.Description = Tools.CleanedUpString(valueString), Value);
                    break;

                case "HideWhenZero":
                    Result = SetBoolProperty((bool valueBool) => item.SetHideWhenZero(valueBool), Value);
                    break;

                case "XpTable":
                    Result = Inserter <PgXpTable> .SetItemByInternalName((PgXpTable valueXpTable) => item.XpTable = valueXpTable, Value);

                    break;

                case "AdvancementTable":
                    Result = ParseAdvancementTable(item, Value, parsedFile, parsedKey);
                    break;

                case "Combat":
                    Result = SetBoolProperty((bool valueBool) => item.SetIsCombatSkill(valueBool), Value);
                    break;

                case "TSysCompatibleCombatSkills":
                    Result = ParseCompatibleCombatSkills(item, Value, parsedFile, parsedKey);
                    break;

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

                case "InteractionFlagLevelCaps":
                    Result = ParseInteractionFlagLevelCaps(item, Value, parsedFile, parsedKey);
                    break;

                case "AdvancementHints":
                    Result = ParseAdvancementHints(item, Value, parsedFile, parsedKey);
                    break;

                case "Rewards":
                    Result = ParseRewards(item, Value, parsedFile, parsedKey);
                    break;

                case "Reports":
                    Result = ParseReports(item, Value, parsedFile, parsedKey);
                    break;

                case "Name":
                    Result = SetStringProperty((string valueString) => item.Name = valueString, Value);
                    break;

                case "Parents":
                    Result = Inserter <PgSkill> .AddPgObjectArrayByKey <PgSkill>(item.ParentSkillList, Value);

                    break;

                case "SkipBonusLevelsIfSkillUnlearned":
                    Result = SetBoolProperty((bool valueBool) => item.SetSkipBonusLevelsIfSkillUnlearned(valueBool), Value);
                    break;

                case "AuxCombat":
                    Result = SetBoolProperty((bool valueBool) => item.SetAuxCombat(valueBool), Value);
                    break;

                case "RecipeIngredientKeywords":
                    Result = StringToEnumConversion <ItemKeyword> .TryParseList(Value, item.RecipeIngredientKeywordList);

                    break;

                case "_RecipeIngredientKeywords":
                    Result = StringToEnumConversion <ItemKeyword> .TryParseList(Value, item.RecipeIngredientKeywordList);

                    break;

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

                case "IsFakeCombatSkill":
                    Result = SetBoolProperty((bool valueBool) => item.SetIsFakeCombatSkill(valueBool), Value);
                    break;

                case "IsUmbrellaSkill":
                    Result = SetBoolProperty((bool valueBool) => item.SetIsUmbrellaSkill(valueBool), Value);
                    break;

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

                if (!Result)
                {
                    break;
                }
            }

            if (Result)
            {
                item.SkillAdvancementList.Sort(SortSkillAdvancementByLevel);
            }

            return(Result);
        }