Exemple #1
0
        public static void ExportItemTexts(Mod mod, string path)
        {
            if (mod != null)
            {
                var items    = typeof(Mod).GetField("items", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(mod) as Dictionary <string, ModItem>;
                var itemFile = new TextFile.ItemFile();
                foreach (var itemPair in items)
                {
                    // Get basic info (name and tooltip)
                    var itemTranslation = new TextFile.ItemTranslation(itemPair.Value);
                    itemFile.Items.Add(itemPair.Key, itemTranslation);

                    // Get setbonus
                    var updateArmorSetMethod = itemPair.Value.GetType().GetMethod("UpdateArmorSet", BindingFlags.Instance | BindingFlags.Public);
                    var instructions         = ILHelper.GetInstructions(updateArmorSetMethod);
                    var target = instructions.Find(i => i.opcode == OpCodes.Stfld && i.operand.ToString().Contains("setBonus"));
                    if (target != null)
                    {
                        var setBonus = ILHelper.GetStrBeforeInstruction(instructions, target);
                        if (!string.IsNullOrWhiteSpace(setBonus))
                        {
                            itemFile.SetBonus.Add(itemPair.Key, new TextFile.SetBonusTranslation(setBonus));
                        }
                    }
                }

                using (var fs = new FileStream(Path.Combine(path, "Items.json"), FileMode.Create))
                {
                    using (var sw = new StreamWriter(fs))
                    {
                        sw.Write(JsonConvert.SerializeObject(itemFile, Formatting.Indented));
                    }
                }
            }
        }
Exemple #2
0
        public static TextFile.ItemFile GetItemTexts(Mod mod)
        {
            var items = typeof(Mod).GetField("items", BindingFlags.Instance | BindingFlags.NonPublic).
                        GetValue(mod) as Dictionary <string, ModItem>;
            var itemFile = new TextFile.ItemFile();

            foreach (var itemPair in items)
            {
                // Get basic info (name and tooltip)
                var itemTranslation = new TextFile.ItemTranslation(itemPair.Value);
                itemFile.Items.Add(itemPair.Key, itemTranslation);

                // Get setbonus
                var updateArmorSetMethod = itemPair.Value.GetType()
                                           .GetMethod("UpdateArmorSet", BindingFlags.Instance | BindingFlags.Public);
                var instructions = ILTool.GetInstructions(updateArmorSetMethod);
                var target       = instructions.Find(i => i.opcode == OpCodes.Stfld && i.operand.ToString().Contains("setBonus"));
                if (target != null)
                {
                    var setBonus = ILTool.GetStrBeforeInstruction(instructions, target);
                    if (!string.IsNullOrWhiteSpace(setBonus))
                    {
                        itemFile.SetBonus.Add(itemPair.Key, new TextFile.SetBonusTranslation(setBonus));
                    }
                }
            }

            return(itemFile);
        }