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)); } } } }
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); }