public static OrderedDictionary <String, TransifexEntry> PrepareTexts(String filePath) { OrderedDictionary <String, TransifexEntry> dic = StructuredJson.Read(filePath); return(PrepareTexts(dic)); }
public static void Main(string[] args) { Dictionary <String, String> ids = new Dictionary <String, String>(); var lines = new OrderedDictionary <String, TransifexEntry>(); void Add(String id, String text, String comment) { String key = text + comment; if (ids.TryGetValue(key, out String knownId)) { lines.Add(id.ToString(), new TransifexEntry() { Text = "${" + knownId + "}", Comment = comment }); } else { lines.Add(id.ToString(), new TransifexEntry() { Text = text, Comment = comment }); ids.Add(key, id); } } Dictionary <String, String> names = new Dictionary <String, String>(); foreach (var item in ReadCharacterData()) { names[item.Name] = item.DisplayNameEnglish; names[item.DisplayNameJapanese] = item.DisplayNameEnglish; } var regexes = Tags.OrderByDescending(t => t.Length).Select(t => new KeyValuePair <String, String>(t.Replace("�", ""), t)).ToArray(); names.Add("一般兵", "Soldier"); names.Add("一般兵A", "Soldier A"); names.Add("侍女", "Maid"); names.Add("リアナ&ラーナ", "Liana & Lana"); names.Add("指揮官(ナイトマスター)", "Commander (Knight Master)"); names.Add("モンスター", "Monster"); names.Add("システムメッセージ", "System Message"); names.Add("0", "System"); // Langrisser I var path = @"C:\Steam\steamapps\common\Langrisser I & II\csv\csv\Resources\csv\eventMessage.txt"; foreach (var group in DB.EnumerateAll <EventMessage>(path).GroupBy(m => m.ScenarioNumber)) { lines.Clear(); ids.Clear(); foreach (var message in group) { Add(message.GetKey(), PrepareMessage(message, regexes), $"{names[message.CharacterName]} ({message.VoiceFile})"); } path = $@"C:\Steam\steamapps\common\Langrisser I & II\csv\csv\Resources\csv\L1\L1_Stage_{group.Key:D3}.json"; StructuredJson.Write(path, lines); } // Langrisser II path = @"C:\Steam\steamapps\common\Langrisser I & II\csv\csv\Resources\csv\eventMessage2.txt"; foreach (var group in DB.EnumerateAll <EventMessage>(path).GroupBy(m => m.ScenarioNumber)) { lines.Clear(); ids.Clear(); foreach (var message in group) { Add(message.GetKey(), PrepareMessage(message, regexes), $"{names[message.CharacterName]} ({message.VoiceFile})"); } path = $@"C:\Steam\steamapps\common\Langrisser I & II\csv\csv\Resources\csv\L2\L2_Stage_{group.Key:D3}.json"; StructuredJson.Write(path, lines); } }
public static void Main_InformationList(string[] args) { InfomationData[] information = DB.ReadAll <InfomationData>(@"C:\Steam\steamapps\common\Langrisser I & II\csv\csv\Resources\csv\InfomationList.txt"); Dictionary <String, SystemDataId> ids = new Dictionary <String, SystemDataId>(); OrderedDictionary <String, TransifexEntry> lines = new OrderedDictionary <String, TransifexEntry>(); foreach (var item in information) { SystemDataId id = new SystemDataId(item.Id, null); var messageId = id.ToString(); if (ids.TryGetValue(item.MessageEnglish, out var knownId)) { lines.Add(messageId, new TransifexEntry() { Text = "${" + knownId + "}", Context = SceneTranlsations[item.Scene] }); } else { lines.Add(messageId, new TransifexEntry() { Text = item.MessageEnglish.Replace(',', ',').Replace("⏎", Environment.NewLine), Context = SceneTranlsations[item.Scene] }); ids.Add(item.MessageEnglish, id); } for (Int32 i = 0; i < 4; i++) { SystemDataId buttonId = new SystemDataId(item.Id, i + 1); String english = item[i].English; var buttonKey = buttonId.ToString(); if (ids.TryGetValue(english, out knownId)) { lines.Add(buttonKey, new TransifexEntry() { Text = "${" + knownId + "}", Context = SceneTranlsations[item.Scene] }); } else { lines.Add(buttonKey, new TransifexEntry() { Text = english.Replace(',', ',').Replace("⏎", Environment.NewLine), Context = SceneTranlsations[item.Scene] }); ids.Add(english, buttonId); } } } var gp = $@"C:\Steam\steamapps\common\Langrisser I & II\csv\System.json"; StructuredJson.Write(gp, lines); }
public static void Main_GoddessDialog_00(string[] args) { var questions = DB.ReadAll <QuestionData>(@"C:\Steam\steamapps\common\Langrisser I & II\csv\question.txt"); var rewards = DB.ReadAll <QuestionReward>(@"C:\Steam\steamapps\common\Langrisser I & II\csv\questionReward.txt"); var skills = DB.ReadAll <SkillData>(@"C:\Steam\steamapps\common\Langrisser I & II\csv\skillData.txt"); var items = DB.ReadAll <ItemData>(@"C:\Steam\steamapps\common\Langrisser I & II\csv\itemData.txt"); var questionsDic = questions.ToDictionary(d => d.Id); var skillsDic = skills.ToDictionary(s => s.ClassName); var itemsDic = items.ToLastKeyDictionary(s => s.NameJapanese); String[,] skillRewardA = new String[4, 4]; String[,] skillRewardB = new String[4, 4]; String[,] itemRewardA = new String[4, 4]; String[,] itemRewardB = new String[4, 4]; String[,] itemRewardC = new String[4, 4]; Int32 index = 0; foreach (var item in rewards) { if (item.Type.StartsWith("スキル")) { String[,] list = (item.Type.EndsWith("A")) ? skillRewardA : skillRewardB; for (Int32 i = 0; i < 4; i++) { var skillData = skillsDic[item[i]]; list[index % 4, i] = $"{skillData.NameEnglish}: {skillData.ShortDescriptionEnglish.Replace("<#ffdd00>", "").Replace("<#ffffff>", "")}"; } index++; } else if (item.Type.StartsWith("アイテム")) { // Not an error: A => A, C => B, E => C String[,] list = (item.Type.EndsWith("A")) ? itemRewardA : item.Type.EndsWith("C") ? itemRewardB : itemRewardC; for (Int32 i = 0; i < 4; i++) { var itemData = itemsDic[item[i]]; list[index % 4, i] = $"{itemData.NameEnglish}: {itemData.ShortDescriptionEnglish.Replace("<#ffdd00>", "").Replace("<#ffffff>", "")}"; } index++; } } var l1 = questionsDic[questionsDic[4].NextQuestion1]; var l2 = questionsDic[questions[5].NextQuestion1]; OrderedDictionary <String, TransifexEntry> lines = new OrderedDictionary <String, TransifexEntry>(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < questions.Length; i++) { var q = questions[i]; sb.AppendLine("|-"); sb.Append($"| colspan=\"3\" | [{q.Id:D2}] '''"); sb.Append(q.QuestionEnglish).AppendLine("'''"); sb.AppendLine("|-"); TransifexEntry goddessEntry = new TransifexEntry() { Text = q.QuestionEnglish.Replace(',', ',').Replace("⏎", Environment.NewLine), Comment = "Lucilis (Goddess)" }; var goddessKey = $"GoddessDialog_{q.Id:D2}"; lines.Add(goddessKey, goddessEntry); Int32 aIndex = 0; foreach (var a in q.Answers) { aIndex++; sb.Append("|| "); sb.Append(aIndex).Append(". ").Append(a.Answer.English).Append(' '); } sb.AppendLine(); sb.AppendLine("|-"); aIndex = 0; foreach (var a in q.Answers) { aIndex++; if (a.Answer.English == "-") { continue; } StringBuilder sb1 = new StringBuilder(); TransifexEntry answerEntry = new TransifexEntry() { Text = a.Answer.English.Replace(',', ',').Replace("⏎", Environment.NewLine) }; var answerKey = $"GoddessDialog_{q.Id:D2}_A{aIndex}"; lines.Add(answerKey, answerEntry); sb.Append("|| "); if (a.SkillA != 0) { (sb1.Length == 0 ? sb1 : sb1.Append("; ")).Append($"Skill 1 ↓"); } if (a.SkillB != 0) { (sb1.Length == 0 ? sb1 : sb1.Append("; ")).Append($"Skill 1 →"); } if (a.SkillC != 0) { (sb1.Length == 0 ? sb1 : sb1.Append("; ")).Append($"Skill 2 ↓"); } if (a.SkillD != 0) { (sb1.Length == 0 ? sb1 : sb1.Append("; ")).Append($"Skill 2 →"); } if (a.ItemA != 0) { (sb1.Length == 0 ? sb1 : sb1.Append("; ")).Append($"Weapon: Rank Up"); } if (a.ItemB != 0) { (sb1.Length == 0 ? sb1 : sb1.Append("; ")).Append($"Weapon: Magic Wand"); } if (a.ItemC != 0) { (sb1.Length == 0 ? sb1 : sb1.Append("; ")).Append($"Armor: Rank Up"); } if (a.ItemE == 1) { (sb1.Length == 0 ? sb1 : sb1.Append("; ")).Append($"Accessory: Rank Up"); } if (a.ItemE > 1) { (sb1.Length == 0 ? sb1 : sb1.Append("; ")).Append($"Accessory: Boots of Wind"); } if (a.ItemF != 0) { (sb1.Length == 0 ? sb1 : sb1.Append("; ")).Append($"Accessory: Chunk of Gold"); } if (sb1.Length == 0) { sb1.Append("None"); } answerEntry.Comment = $"Reward: {sb1}"; sb.Append(sb1.ToString()); sb.Append(' '); } sb.AppendLine(); } var gp = $@"C:\Steam\steamapps\common\Langrisser I & II\csv\GoddessDialog.json"; StructuredJson.Write(gp, lines); Int32 SkillA = 0; Int32 SkillB = 0; Int32 SkillC = 0; Int32 SkillD = 0; Int32 ItemA = 0; Int32 ItemB = 0; Int32 ItemC = 0; Int32 ItemD = 0; Int32 ItemE = 0; Int32 ItemF = 0; Int32 Get(Int32 value) { if (value < 0) { return(0); } if (value > 3) { return(3); } return(value); } StringBuilder line = new StringBuilder(); StringBuilder result = new StringBuilder(); HashSet <String> uniqueSkills = new HashSet <String>(); HashSet <String> uniqueItems = new HashSet <String>(); HashSet <String> unique = new HashSet <String>(); Traverse(questionsDic[10]); void Traverse(QuestionData q) { line.AppendLine(q.QuestionEnglish); Int32 aIndex = 0; foreach (var a in q.Answers) { aIndex++; if (a.Next == 0) { continue; } line.Append('\t'); line.AppendLine(a.Answer.English); SkillA += a.SkillA; SkillB += a.SkillB; SkillC += a.SkillC; SkillD += a.SkillD; ItemA += a.ItemA; ItemB += a.ItemB; ItemC += a.ItemC; ItemD += a.ItemD; ItemE += a.ItemE; ItemF += a.ItemF; if (a.Next == -1) { var s1 = skillRewardA[Get(SkillA), Get(SkillB)]; var s2 = skillRewardB[Get(SkillC), Get(SkillD)]; var i1 = itemRewardA[Get(ItemA), Get(ItemB)]; var i2 = itemRewardB[Get(ItemC), Get(ItemD)]; var i3 = itemRewardC[Get(ItemE), Get(ItemF)]; uniqueSkills.Add(s1); uniqueSkills.Add(s2); uniqueItems.Add(i1); uniqueItems.Add(i2); uniqueItems.Add(i3); List <String> tmp = new List <String> { s1, s2, i1, i2, i3 }; tmp.Sort(); var reward = String.Join("", tmp); if (unique.Add(reward)) { result.AppendLine(Environment.NewLine); result.AppendLine("-----------------------------------------"); var value = line.ToString(); result.AppendLine(value); result.AppendLine(s1); result.AppendLine(s2); result.AppendLine(i1); result.AppendLine(i2); result.AppendLine(i3); } } else { Traverse(questionsDic[a.Next]); } line.Length -= a.Answer.English.Length + Environment.NewLine.Length + 1; SkillA -= a.SkillA; SkillB -= a.SkillB; SkillC -= a.SkillC; SkillD -= a.SkillD; ItemA -= a.ItemA; ItemB -= a.ItemB; ItemC -= a.ItemC; ItemD -= a.ItemD; ItemE -= a.ItemE; ItemF -= a.ItemF; } line.Length -= q.QuestionEnglish.Length + Environment.NewLine.Length; } String skills1 = String.Join(Environment.NewLine + "|-" + Environment.NewLine + "| ", uniqueSkills.OrderBy(s => s).Select(s => s.Replace(": ", " || "))); String items1 = String.Join(Environment.NewLine + "|-" + Environment.NewLine + "| ", uniqueItems.OrderBy(s => s).Select(s => s.Replace(": ", " || "))); }
public static void Main_Tags(string[] args) { // HashSet<Char> chars = new HashSet<Char>(); // foreach (var filePath in Directory.EnumerateFiles(@"C:\Steam\steamapps\common\Langrisser I & II\Langrisser I & II_Data\StreamingAssets\Text\RU", "*.json")) // { // var entries = StructuredJson.Read(filePath); // foreach (var entry in entries) // { // foreach (var ch in entry.Value.Text) // { // chars.Add(ch); // } // } // } // // foreach (var ch in "【】%23:ABCDEFGHIJKLM■!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~×‥…※ⅠⅡЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЬЭЯабвгдежзийклмнопрстуфхцчшщъыьэюяё") // { // chars.Add(ch); // } // // var str = new String(chars.OrderBy(c => c).ToArray()).Trim(); OrderedDictionary <String, TransifexEntry> lines = new OrderedDictionary <String, TransifexEntry>(); void Add(String tag, String replacement) { String id = $"Tag {tag}"; lines.Add(id, new TransifexEntry() { Context = tag, Text = replacement }); } Add("{Blue}", "<#88aaff>"); Add("{Yellow}", "<#ffdd00>"); Add("{Green}", "<#5eff00>"); Add("{White}", "<#ffffff>"); Add("{LightYellow}", "<#ffffdd>"); Add("{LightPurple}", "<#ddddff>"); Add("{AGL}", "AGL"); Add("{ATK}", "ATK"); Add("{DEF}", "DEF"); Add("{DEX}", "DEX"); Add("{DMG}", "DMG"); Add("{MAG}", "MAG"); Add("{MGR}", "MGR"); Add("{MOV}", "MOV"); foreach (var tag in Tags) { var replacement = tag.Replace("�", ""); var text = '{' + replacement + '}'; Add(text, replacement); } var gp = $@"C:\Steam\steamapps\common\Langrisser I & II\csv\Tags.json"; StructuredJson.Write(gp, lines); }