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); }
public static void UpdateItemsText(TextFile.ItemFile oldFile, TextFile.ItemFile newFile) { var sb = new StringBuilder(); // Update items var itemResult = UpdateDict(oldFile.Items, newFile.Items); // New items foreach (var item in itemResult.New) { sb.AppendFormat(NewItemLogFormat, item.Key, item.Value.Name, item.Value.Tooltip); } // Changed items foreach (var item in itemResult.Change) { TextFile.ItemTranslation oldItem; oldFile.Items.TryGetValue(item.Key, out oldItem); if (oldItem != null) { if (oldItem.Name != item.Value.Name || oldItem.Tooltip != item.Value.Tooltip) { sb.AppendFormat(ItemChangeLogFormat, item.Key); } if (oldItem.Name != item.Value.Name) { sb.AppendFormat(ItemNameChangeLogFormat, oldItem.Name, item.Value.Name); oldItem.Name = item.Value.Name; } if (oldItem.Tooltip != item.Value.Tooltip) { sb.AppendFormat(ItemTooltipChangeLogFormat, oldItem.Tooltip, item.Value.Tooltip); oldItem.Tooltip = item.Value.Tooltip; } } } // Update set bonus var setBonusResult = UpdateDict(oldFile.SetBonus, newFile.SetBonus); foreach (var setbonus in setBonusResult.New) { sb.AppendFormat(NewSetBonusLogFormat, setbonus.Key, setbonus.Value.SetBonus); } foreach (var setbonus in setBonusResult.Change) { TextFile.SetBonusTranslation old; oldFile.SetBonus.TryGetValue(setbonus.Key, out old); if (old != null && old.SetBonus != setbonus.Value.SetBonus) { sb.AppendFormat(SetBonusChangeLogFormat, setbonus.Key, old.SetBonus, setbonus.Value.SetBonus); old.SetBonus = setbonus.Value.SetBonus; } } Logger.TextUpdateLog(sb.ToString()); }
public void TranslateItems(TextFile.ItemFile items) { foreach (var item in items.Items.Values) { Logger.DebugLog(string.Format("Translating item: {0}", item.Name)); item.NameTranslation = Query(item.Name); item.TooltipTranslation = Query(item.Tooltip); } foreach (var setbonus in items.SetBonus.Values) { Logger.DebugLog(string.Format("Translating setbonus: {0}", setbonus.SetBonus)); setbonus.Translation = Query(setbonus.SetBonus); } }