示例#1
0
        public static int GetIndex(RecipeMod mod)
        {
            if (mod.RecipeModsBool != null && mod.RecipeModsBool.Count > 0)
            {
                return(mod.RecipeModsBool.First().Index);
            }
            if (mod.RecipeModsDID != null && mod.RecipeModsDID.Count > 0)
            {
                return(mod.RecipeModsDID.First().Index);
            }
            if (mod.RecipeModsFloat != null && mod.RecipeModsFloat.Count > 0)
            {
                return(mod.RecipeModsFloat.First().Index);
            }
            if (mod.RecipeModsIID != null && mod.RecipeModsIID.Count > 0)
            {
                return(mod.RecipeModsIID.First().Index);
            }
            if (mod.RecipeModsInt != null && mod.RecipeModsInt.Count > 0)
            {
                return(mod.RecipeModsInt.First().Index);
            }
            if (mod.RecipeModsString != null && mod.RecipeModsString.Count > 0)
            {
                return(mod.RecipeModsString.First().Index);
            }

            return(-1);
        }
        public static Recipe ConvertToACE(this Seg4_CraftTable.Recipe input)
        {
            var result = new Recipe();

            result.Id = input.ID;

            result.Unknown1 = input.unknown_1;
            result.Skill = input.Skill;
            result.Difficulty = input.Difficulty;
            result.SalvageType = input.SalvageType;

            result.SuccessWCID = input.SuccessWCID;
            result.SuccessAmount = input.SuccessAmount;
            result.SuccessMessage = input.SuccessMessage;

            result.FailWCID = input.FailWCID;
            result.FailAmount = input.FailAmount;
            result.FailMessage = input.FailMessage;

            result.SuccessDestroyTargetChance = input.Components[0].DestroyChance;
            result.SuccessDestroyTargetAmount = input.Components[0].DestroyAmount;
            result.SuccessDestroyTargetMessage = input.Components[0].DestroyMessage;

            result.SuccessDestroySourceChance = input.Components[1].DestroyChance;
            result.SuccessDestroySourceAmount = input.Components[1].DestroyAmount;
            result.SuccessDestroySourceMessage = input.Components[1].DestroyMessage;

            result.FailDestroyTargetChance = input.Components[2].DestroyChance;
            result.FailDestroyTargetAmount = input.Components[2].DestroyAmount;
            result.FailDestroyTargetMessage = input.Components[2].DestroyMessage;

            result.FailDestroySourceChance = input.Components[3].DestroyChance;
            result.FailDestroySourceAmount = input.Components[3].DestroyAmount;
            result.FailDestroySourceMessage = input.Components[3].DestroyMessage;

            foreach (var value in input.Requirements)
            {
                if (value.IntRequirements != null)
                {
                    foreach (var requirement in value.IntRequirements)
                    {
                        result.RecipeRequirementsInt.Add(new RecipeRequirementsInt
                        {
                            Stat = requirement.Stat,
                            Value = requirement.Value,
                            Enum = requirement.Enum,
                            Message = requirement.Message
                        });
                    }
                }

                if (value.DIDRequirements != null)
                {
                    foreach (var requirement in value.DIDRequirements)
                    {
                        result.RecipeRequirementsDID.Add(new RecipeRequirementsDID
                        {
                            Stat = requirement.Stat,
                            Value = requirement.Value,
                            Enum = requirement.Enum,
                            Message = requirement.Message
                        });
                    }
                }

                if (value.IIDRequirements != null)
                {
                    foreach (var requirement in value.IIDRequirements)
                    {
                        result.RecipeRequirementsIID.Add(new RecipeRequirementsIID
                        {
                            Stat = requirement.Stat,
                            Value = requirement.Value,
                            Enum = requirement.Enum,
                            Message = requirement.Message
                        });
                    }
                }

                if (value.FloatRequirements != null)
                {
                    foreach (var requirement in value.FloatRequirements)
                    {
                        result.RecipeRequirementsFloat.Add(new RecipeRequirementsFloat
                        {
                            Stat = requirement.Stat,
                            Value = requirement.Value,
                            Enum = requirement.Enum,
                            Message = requirement.Message
                        });
                    }
                }

                if (value.StringRequirements != null)
                {
                    foreach (var requirement in value.StringRequirements)
                    {
                        result.RecipeRequirementsString.Add(new RecipeRequirementsString
                        {
                            Stat = requirement.Stat,
                            Value = requirement.Value, 
                            Enum = requirement.Enum,
                            Message = requirement.Message
                        });
                    }
                }

                if (value.BoolRequirements != null)
                {
                    foreach (var requirement in value.BoolRequirements)
                    {
                        result.RecipeRequirementsBool.Add(new RecipeRequirementsBool
                        {
                            Stat = requirement.Stat,
                            Value = requirement.Value,
                            Enum = requirement.Enum,
                            Message = requirement.Message
                        });
                    }
                }
            }

            for (int i = 0 ; i < 8 ; i++) // Must be 8
            {
                var recipeMod = new RecipeMod();

                var value = input.Mods[i];

                if (value.IntMods != null)
                {
                    foreach (var mod in value.IntMods)
                    {
                        recipeMod.RecipeModsInt.Add(new RecipeModsInt
                        {
                            Stat = mod.Stat,
                            Value = mod.Value,
                            Enum = mod.Enum,
                            Unknown1 = mod.Unknown1
                        });
                    }
                }

                if (value.DIDMods != null)
                {
                    foreach (var mod in value.DIDMods)
                    {
                        recipeMod.RecipeModsDID.Add(new RecipeModsDID
                        {
                            Stat = mod.Stat,
                            Value = mod.Value,
                            Enum = mod.Enum,
                            Unknown1 = mod.Unknown1
                        });
                    }
                }

                if (value.IIDMods != null)
                {
                    foreach (var mod in value.IIDMods)
                    {
                        recipeMod.RecipeModsIID.Add(new RecipeModsIID
                        {
                            Stat = mod.Stat,
                            Value = mod.Value,
                            Enum = mod.Enum,
                            Unknown1 = mod.Unknown1
                        });
                    }
                }

                if (value.FloatMods != null)
                {
                    foreach (var mod in value.FloatMods)
                    {
                        recipeMod.RecipeModsFloat.Add(new RecipeModsFloat
                        {
                            Stat = mod.Stat,
                            Value = mod.Value,
                            Enum = mod.Enum,
                            Unknown1 = mod.Unknown1
                        });
                    }
                }

                if (value.StringMods != null)
                {
                    foreach (var mod in value.StringMods)
                    {
                        recipeMod.RecipeModsString.Add(new RecipeModsString
                        {
                            Stat = mod.Stat,
                            Value = mod.Value,
                            Enum = mod.Enum,
                            Unknown1 = mod.Unknown1
                        });
                    }
                }

                if (value.BoolMods != null)
                {
                    foreach (var mod in value.BoolMods)
                    {
                        recipeMod.RecipeModsBool.Add(new RecipeModsBool
                        {
                            Stat = mod.Stat,
                            Value = mod.Value,
                            Enum = mod.Enum,
                            Unknown1 = mod.Unknown1
                        });
                    }
                }

                recipeMod.RecipeId = result.Id;

                recipeMod.ExecutesOnSuccess = (i <= 3); // The first 4 are "act on success", the second 4 are "act on failure"

                recipeMod.Health = value.Health;
                recipeMod.Stamina = value.Stamina;
                recipeMod.Mana = value.Mana;
                // In the cache.bin, the below flags are always set if their associated vital is != 0
                //recipeMod.Unknown4 = value.DoHealthMod;
                //recipeMod.Unknown5 = value.DoStaminaMod;
                //recipeMod.Unknown6 = value.DoManaMod;

                recipeMod.Unknown7 = value.Unknown7;
                recipeMod.DataId = value.DataID;

                recipeMod.Unknown9 = value.Unknown9;
                recipeMod.InstanceId = value.InstanceID;

                bool add = (recipeMod.Health > 0 || recipeMod.Stamina > 0 || recipeMod.Mana > 0);
                add = (add || recipeMod.Unknown7 || recipeMod.DataId > 0 || recipeMod.Unknown9 > 0 || recipeMod.InstanceId > 0);
                add = (add || recipeMod.RecipeModsBool.Count > 0 || recipeMod.RecipeModsDID.Count > 0 || recipeMod.RecipeModsFloat.Count > 0 || recipeMod.RecipeModsIID.Count > 0 || recipeMod.RecipeModsInt.Count > 0 || recipeMod.RecipeModsString.Count > 0);

                if (add)
                    result.RecipeMod.Add(recipeMod);
            }

            result.DataId = input.DataID;

            return result;
        }
示例#3
0
 public void AddRecord(List <string> fields)
 {
     if (CurrentTable == Table.Recipe)
     {
         Recipe = new Recipe();
         PopulateFields(Recipe, fields);
     }
     else if (CurrentTable == Table.RecipeRequirementsBool)
     {
         var record = new RecipeRequirementsBool();
         PopulateFields(record, fields);
         Recipe.RecipeRequirementsBool.Add(record);
     }
     else if (CurrentTable == Table.RecipeRequirementsDID)
     {
         var record = new RecipeRequirementsDID();
         PopulateFields(record, fields);
         Recipe.RecipeRequirementsDID.Add(record);
     }
     else if (CurrentTable == Table.RecipeRequirementsFloat)
     {
         var record = new RecipeRequirementsFloat();
         PopulateFields(record, fields);
         Recipe.RecipeRequirementsFloat.Add(record);
     }
     else if (CurrentTable == Table.RecipeRequirementsIID)
     {
         var record = new RecipeRequirementsIID();
         PopulateFields(record, fields);
         Recipe.RecipeRequirementsIID.Add(record);
     }
     else if (CurrentTable == Table.RecipeRequirementsInt)
     {
         var record = new RecipeRequirementsInt();
         PopulateFields(record, fields);
         Recipe.RecipeRequirementsInt.Add(record);
     }
     else if (CurrentTable == Table.RecipeRequirementsString)
     {
         var record = new RecipeRequirementsString();
         PopulateFields(record, fields);
         Recipe.RecipeRequirementsString.Add(record);
     }
     else if (CurrentTable == Table.RecipeMod)
     {
         CurrentRecipeMod = new RecipeMod();
         PopulateFields(CurrentRecipeMod, fields);
         Recipe.RecipeMod.Add(CurrentRecipeMod);
     }
     else if (CurrentTable == Table.RecipeModsBool)
     {
         var record = new RecipeModsBool();
         PopulateFields(record, fields);
         CurrentRecipeMod.RecipeModsBool.Add(record);
     }
     else if (CurrentTable == Table.RecipeModsDID)
     {
         var record = new RecipeModsDID();
         PopulateFields(record, fields);
         CurrentRecipeMod.RecipeModsDID.Add(record);
     }
     else if (CurrentTable == Table.RecipeModsFloat)
     {
         var record = new RecipeModsFloat();
         PopulateFields(record, fields);
         CurrentRecipeMod.RecipeModsFloat.Add(record);
     }
     else if (CurrentTable == Table.RecipeModsIID)
     {
         var record = new RecipeModsIID();
         PopulateFields(record, fields);
         CurrentRecipeMod.RecipeModsIID.Add(record);
     }
     else if (CurrentTable == Table.RecipeModsInt)
     {
         var record = new RecipeModsInt();
         PopulateFields(record, fields);
         CurrentRecipeMod.RecipeModsInt.Add(record);
     }
     else if (CurrentTable == Table.RecipeModsString)
     {
         var record = new RecipeModsString();
         PopulateFields(record, fields);
         CurrentRecipeMod.RecipeModsString.Add(record);
     }
     else if (CurrentTable == Table.Cookbook)
     {
         var record = new CookBook();
         PopulateFields(record, fields);
         Cookbooks.Add(record);
         record.Recipe = Recipe;
     }
 }
示例#4
0
        /// <summary>
        /// Converts a GDLE recipe to an ACE recipe
        /// </summary>
        public static bool TryConvert(Models.Recipe input, out Recipe result)
        {
            try
            {
                result = new Recipe();

                result.Id = input.RecipeId;

                result.Unknown1    = (uint)input.Unknown;
                result.Skill       = input.Skill;
                result.Difficulty  = input.Difficulty;
                result.SalvageType = (uint)input.SkillCheckFormulaType;

                result.SuccessWCID    = input.SuccessWcid;
                result.SuccessAmount  = input.SuccessAmount;
                result.SuccessMessage = input.SuccessMessage;

                result.FailWCID    = input.FailWcid;
                result.FailAmount  = input.FailAmount;
                result.FailMessage = input.FailMessage;

                result.SuccessDestroyTargetChance  = input.SuccessConsumeTargetChance;
                result.SuccessDestroyTargetAmount  = input.SuccessConsumeTargetAmount;
                result.SuccessDestroyTargetMessage = input.SuccessConsumeTargetMessage;

                result.SuccessDestroySourceChance  = input.SuccessConsumeToolChance;
                result.SuccessDestroySourceAmount  = input.SuccessConsumeToolAmount;
                result.SuccessDestroySourceMessage = input.SuccessConsumeToolMessage;

                result.FailDestroyTargetChance  = input.FailureConsumeTargetChance;
                result.FailDestroyTargetAmount  = input.FailureConsumeTargetAmount;
                result.FailDestroyTargetMessage = input.FailureConsumeTargetMessage;

                result.FailDestroySourceChance  = input.FailureConsumeToolChance;
                result.FailDestroySourceAmount  = input.FailureConsumeToolAmount;
                result.FailDestroySourceMessage = input.FailureConsumeToolMessage;

                result.DataId = input.DataId;

                sbyte index = -1;
                foreach (var value in input.Requirements)
                {
                    index++;
                    if (value == null)
                    {
                        continue;
                    }

                    if (value.IntRequirements != null)
                    {
                        foreach (var requirement in value.IntRequirements)
                        {
                            result.RecipeRequirementsInt.Add(new RecipeRequirementsInt
                            {
                                Index   = index,
                                Stat    = requirement.Stat,
                                Value   = requirement.Value,
                                Enum    = requirement.OperationType,
                                Message = requirement.Message
                            });
                        }
                    }

                    if (value.DIDRequirements != null)
                    {
                        foreach (var requirement in value.DIDRequirements)
                        {
                            result.RecipeRequirementsDID.Add(new RecipeRequirementsDID
                            {
                                Index   = index,
                                Stat    = requirement.Stat,
                                Value   = requirement.Value,
                                Enum    = requirement.OperationType,
                                Message = requirement.Message
                            });
                        }
                    }

                    if (value.IIDRequirements != null)
                    {
                        foreach (var requirement in value.IIDRequirements)
                        {
                            result.RecipeRequirementsIID.Add(new RecipeRequirementsIID
                            {
                                Index   = index,
                                Stat    = requirement.Stat,
                                Value   = requirement.Value,
                                Enum    = requirement.OperationType,
                                Message = requirement.Message
                            });
                        }
                    }

                    if (value.FloatRequirements != null)
                    {
                        foreach (var requirement in value.FloatRequirements)
                        {
                            result.RecipeRequirementsFloat.Add(new RecipeRequirementsFloat
                            {
                                Index   = index,
                                Stat    = requirement.Stat,
                                Value   = requirement.Value,
                                Enum    = requirement.OperationType,
                                Message = requirement.Message
                            });
                        }
                    }

                    if (value.StringRequirements != null)
                    {
                        foreach (var requirement in value.StringRequirements)
                        {
                            result.RecipeRequirementsString.Add(new RecipeRequirementsString
                            {
                                Index = index,
                                Stat  = requirement.Stat,
                                Value = requirement.Value,
                                Enum  = requirement.OperationType,
                            });
                        }
                    }

                    if (value.BoolRequirements != null)
                    {
                        foreach (var requirement in value.BoolRequirements)
                        {
                            result.RecipeRequirementsBool.Add(new RecipeRequirementsBool
                            {
                                Index   = index,
                                Stat    = requirement.Stat,
                                Value   = requirement.Value,
                                Enum    = requirement.OperationType,
                                Message = requirement.Message
                            });
                        }
                    }
                }

                for (int i = 0; i < 8; i++) // Must be 8
                {
                    var recipeMod = new RecipeMod();

                    var value = input.Mods[i];

                    if (value == null)
                    {
                        continue;
                    }

                    if (value.IntRequirements != null)
                    {
                        foreach (var mod in value.IntRequirements)
                        {
                            recipeMod.RecipeModsInt.Add(new RecipeModsInt
                            {
                                Index  = (sbyte)i,
                                Stat   = mod.Stat,
                                Value  = mod.Value,
                                Enum   = mod.OperationType,
                                Source = mod.Unknown ?? 0
                            });
                        }
                    }

                    if (value.DIDRequirements != null)
                    {
                        foreach (var mod in value.DIDRequirements)
                        {
                            recipeMod.RecipeModsDID.Add(new RecipeModsDID
                            {
                                Index  = (sbyte)i,
                                Stat   = mod.Stat,
                                Value  = mod.Value,
                                Enum   = mod.OperationType,
                                Source = mod.Unknown ?? 0
                            });
                        }
                    }

                    if (value.IIDRequirements != null)
                    {
                        foreach (var mod in value.IIDRequirements)
                        {
                            recipeMod.RecipeModsIID.Add(new RecipeModsIID
                            {
                                Index  = (sbyte)i,
                                Stat   = mod.Stat,
                                Value  = mod.Value,
                                Enum   = mod.OperationType,
                                Source = mod.Unknown ?? 0
                            });;
                        }
                    }

                    if (value.FloatRequirements != null)
                    {
                        foreach (var mod in value.FloatRequirements)
                        {
                            recipeMod.RecipeModsFloat.Add(new RecipeModsFloat
                            {
                                Index  = (sbyte)i,
                                Stat   = mod.Stat,
                                Value  = mod.Value,
                                Enum   = mod.OperationType,
                                Source = mod.Unknown ?? 0
                            });
                        }
                    }

                    if (value.StringRequirements != null)
                    {
                        foreach (var mod in value.StringRequirements)
                        {
                            recipeMod.RecipeModsString.Add(new RecipeModsString
                            {
                                Index  = (sbyte)i,
                                Stat   = mod.Stat,
                                Value  = mod.Value,
                                Enum   = mod.OperationType,
                                Source = mod.Unknown
                            });
                        }
                    }

                    if (value.BoolRequirements != null)
                    {
                        foreach (var mod in value.BoolRequirements)
                        {
                            recipeMod.RecipeModsBool.Add(new RecipeModsBool
                            {
                                Index  = (sbyte)i,
                                Stat   = mod.Stat,
                                Value  = mod.Value,
                                Enum   = mod.OperationType,
                                Source = mod.Unknown ?? 0
                            });
                        }
                    }

                    recipeMod.RecipeId = result.Id;

                    recipeMod.ExecutesOnSuccess = (i <= 3); // The first 4 are "act on success", the second 4 are "act on failure"

                    recipeMod.Health  = value.ModifyHealth;
                    recipeMod.Stamina = value.ModifyStamina;
                    recipeMod.Mana    = value.ModifyMana;

                    // TODO: ACE is missing RequiresHealth, RequiresStamina, RequiresMana

                    recipeMod.Unknown7 = value.Unknown7;
                    recipeMod.DataId   = value.ModificationScriptId;

                    recipeMod.Unknown9   = value.Unknown9;
                    recipeMod.InstanceId = value.Unknown10;

                    bool add = (recipeMod.Health > 0 || recipeMod.Stamina > 0 || recipeMod.Mana > 0);
                    add = (add || recipeMod.Unknown7 || recipeMod.DataId > 0 || recipeMod.Unknown9 > 0 || recipeMod.InstanceId > 0);
                    add = (add || recipeMod.RecipeModsBool.Count > 0 || recipeMod.RecipeModsDID.Count > 0 || recipeMod.RecipeModsFloat.Count > 0 || recipeMod.RecipeModsIID.Count > 0 || recipeMod.RecipeModsInt.Count > 0 || recipeMod.RecipeModsString.Count > 0);

                    if (add)
                    {
                        result.RecipeMod.Add(recipeMod);
                    }
                }

                return(true);
            }
            catch
            {
                result = null;
                return(false);
            }
        }
示例#5
0
        public static bool TryConvert(Models.Recipe input, out Database.Models.World.Recipe result)
        {
            try
            {
                result = new Recipe();

                result.Id = input.RecipeId;

                result.Unknown1    = (uint)input.Unknown;
                result.Skill       = input.Skill;
                result.Difficulty  = input.Difficulty;
                result.SalvageType = (uint)input.SkillCheckFormulaType;

                result.SuccessWCID    = input.SuccessWcid;
                result.SuccessAmount  = input.SuccessAmount;
                result.SuccessMessage = input.SuccessMessage;

                result.FailWCID    = input.FailWcid;
                result.FailAmount  = input.FailAmount;
                result.FailMessage = input.FailMessage;

                result.SuccessDestroyTargetChance  = input.SuccessConsumeTargetChance;
                result.SuccessDestroyTargetAmount  = input.SuccessConsumeTargetAmount;
                result.SuccessDestroyTargetMessage = input.SuccessConsumeTargetMessage;

                result.SuccessDestroySourceChance  = input.SuccessConsumeToolChance;
                result.SuccessDestroySourceAmount  = input.SuccessConsumeToolAmount;
                result.SuccessDestroySourceMessage = input.SuccessConsumeToolMessage;

                result.FailDestroyTargetChance  = input.FailureConsumeTargetChance;
                result.FailDestroyTargetAmount  = input.FailureConsumeTargetAmount;
                result.FailDestroyTargetMessage = input.FailureConsumeTargetMessage;

                result.FailDestroySourceChance  = input.FailureConsumeToolChance;
                result.FailDestroySourceAmount  = input.FailureConsumeToolAmount;
                result.FailDestroySourceMessage = input.FailureConsumeToolMessage;

                result.DataId = input.DataId;

                sbyte index = -1;
                foreach (var value in input.Requirements)
                {
                    index++;
                    if (value == null)
                    {
                        continue;
                    }

                    // TODO!!! GDLE only has 2 requirements, int and bool. Why do we have all of them defined?
                    // TODO!!! GDLE requirements also define properties OperationType and Unknown

                    if (value.IntRequirements != null)
                    {
                        foreach (var requirement in value.IntRequirements)
                        {
                            result.RecipeRequirementsInt.Add(new RecipeRequirementsInt
                            {
                                Index   = index,
                                Stat    = requirement.Stat,
                                Value   = (int)requirement.Value,
                                Enum    = requirement.OperationType,
                                Message = requirement.Message
                            });
                        }
                    }

                    /*if (value.DIDRequirements != null)
                     * {
                     *  foreach (var requirement in value.DIDRequirements)
                     *  {
                     *      result.RecipeRequirementsDID.Add(new RecipeRequirementsDID
                     *      {
                     *          Stat = requirement.Stat,
                     *          Value = requirement.Value,
                     *          Enum = requirement.Enum,
                     *          Message = requirement.Message
                     *      });
                     *  }
                     * }
                     *
                     * if (value.IIDRequirements != null)
                     * {
                     *  foreach (var requirement in value.IIDRequirements)
                     *  {
                     *      result.RecipeRequirementsIID.Add(new RecipeRequirementsIID
                     *      {
                     *          Stat = requirement.Stat,
                     *          Value = requirement.Value,
                     *          Enum = requirement.Enum,
                     *          Message = requirement.Message
                     *      });
                     *  }
                     * }
                     *
                     * if (value.FloatRequirements != null)
                     * {
                     *  foreach (var requirement in value.FloatRequirements)
                     *  {
                     *      result.RecipeRequirementsFloat.Add(new RecipeRequirementsFloat
                     *      {
                     *          Stat = requirement.Stat,
                     *          Value = requirement.Value,
                     *          Enum = requirement.Enum,
                     *          Message = requirement.Message
                     *      });
                     *  }
                     * }
                     *
                     * if (value.StringRequirements != null)
                     * {
                     *  foreach (var requirement in value.StringRequirements)
                     *  {
                     *      result.RecipeRequirementsString.Add(new RecipeRequirementsString
                     *      {
                     *          Stat = requirement.Stat,
                     *          Value = requirement.Value,
                     *          Enum = requirement.Enum,
                     *          Message = requirement.Message
                     *      });
                     *  }
                     * }*/

                    if (value.BoolRequirements != null)
                    {
                        foreach (var requirement in value.BoolRequirements)
                        {
                            result.RecipeRequirementsBool.Add(new RecipeRequirementsBool
                            {
                                Index   = index,
                                Stat    = requirement.Stat,
                                Value   = (requirement.Value != 0),
                                Enum    = requirement.OperationType,
                                Message = requirement.Message
                            });
                        }
                    }
                }

                for (int i = 0; i < 8; i++) // Must be 8
                {
                    var recipeMod = new RecipeMod();

                    var value = input.Mods[i];

                    if (value == null)
                    {
                        continue;
                    }

                    if (value.IntRequirements != null)
                    {
                        foreach (var mod in value.IntRequirements)
                        {
                            recipeMod.RecipeModsInt.Add(new RecipeModsInt
                            {
                                Index  = (sbyte)i,
                                Stat   = mod.Stat,
                                Value  = (int)mod.Value,
                                Enum   = mod.OperationType,
                                Source = mod.Unknown ?? 0
                            });
                        }
                    }

                    if (value.DidRequirements != null)
                    {
                        foreach (var mod in value.DidRequirements)
                        {
                            recipeMod.RecipeModsDID.Add(new RecipeModsDID
                            {
                                Index  = (sbyte)i,
                                Stat   = mod.Stat,
                                Value  = (uint)mod.Value,
                                Enum   = mod.OperationType,
                                Source = mod.Unknown ?? 0
                            });
                        }
                    }

                    // TODO!!!! GDLE doesn't have this

                    /*if (value.IIDMods != null)
                     * {
                     *  foreach (var mod in value.IIDMods)
                     *  {
                     *      recipeMod.RecipeModsIID.Add(new RecipeModsIID
                     *      {
                     *          Stat = mod.Stat,
                     *          Value = mod.Value,
                     *          Enum = mod.Enum,
                     *          Unknown1 = mod.Unknown1
                     *      });
                     *  }
                     * }*/

                    if (value.FloatRequirements != null)
                    {
                        foreach (var mod in value.FloatRequirements)
                        {
                            recipeMod.RecipeModsFloat.Add(new RecipeModsFloat
                            {
                                Index  = (sbyte)i,
                                Stat   = mod.Stat,
                                Value  = mod.Value,
                                Enum   = mod.OperationType,
                                Source = mod.Unknown ?? 0
                            });
                        }
                    }

                    if (value.StringRequirements != null)
                    {
                        foreach (var mod in value.StringRequirements)
                        {
                            recipeMod.RecipeModsString.Add(new RecipeModsString
                            {
                                Index  = (sbyte)i,
                                Stat   = mod.Stat,
                                Value  = mod.Value,
                                Enum   = mod.OperationType,
                                Source = mod.Unknown
                            });
                        }
                    }

                    if (value.BoolRequirements != null)
                    {
                        foreach (var mod in value.BoolRequirements)
                        {
                            recipeMod.RecipeModsBool.Add(new RecipeModsBool
                            {
                                Index  = (sbyte)i,
                                Stat   = mod.Stat,
                                Value  = (mod.Value != 0),
                                Enum   = mod.OperationType,
                                Source = mod.Unknown ?? 0
                            });
                        }
                    }

                    recipeMod.RecipeId = result.Id;

                    recipeMod.ExecutesOnSuccess = (i <= 3); // The first 4 are "act on success", the second 4 are "act on failure"

                    // TODO!!!
                    recipeMod.Health  = value.ModifyHealth;
                    recipeMod.Stamina = value.ModifyStamina;
                    recipeMod.Mana    = value.ModifyMana;
                    // TODO!!! we're missing the following RequiresHealth, RequiresStamina, RequiresMana

                    recipeMod.Unknown7 = value.Unknown7;
                    recipeMod.DataId   = value.ModificationScriptId;

                    recipeMod.Unknown9   = value.Unknown9;
                    recipeMod.InstanceId = value.Unknown10;

                    bool add = (recipeMod.Health > 0 || recipeMod.Stamina > 0 || recipeMod.Mana > 0);
                    add = (add || recipeMod.Unknown7 || recipeMod.DataId > 0 || recipeMod.Unknown9 > 0 || recipeMod.InstanceId > 0);
                    add = (add || recipeMod.RecipeModsBool.Count > 0 || recipeMod.RecipeModsDID.Count > 0 || recipeMod.RecipeModsFloat.Count > 0 || recipeMod.RecipeModsIID.Count > 0 || recipeMod.RecipeModsInt.Count > 0 || recipeMod.RecipeModsString.Count > 0);

                    if (add)
                    {
                        result.RecipeMod.Add(recipeMod);
                    }
                }

                return(true);
            }
            catch
            {
                result = null;
                return(false);
            }
        }