Пример #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));
                    }
                }
            }
        }
Пример #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);
        }
Пример #3
0
        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());
        }
Пример #4
0
        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);
            }
        }