public bool GenerateGameTitlePrcFile(List <GameTitleDbNewEntry> gameTitleEntries, string outputFilePath) { var coreGameSeries = _coreGameTitleDb.Select(p => p.UiSeriesId).Distinct().ToList(); var releaseIndex = _coreGameTitleDb.OrderByDescending(p => p.Release).First().Release + 1; var t = new ParamFile(); t.Open(_resourceService.GetGameTitleDbResource()); var dbRoot = t.Root.Nodes[HEX_CAT_DBROOT] as ParamList; foreach (var gameTitleEntry in gameTitleEntries) { var uiSeriesId = gameTitleEntry.UiSeriesId; if (!coreGameSeries.Contains(gameTitleEntry.UiSeriesId)) { uiSeriesId = Constants.InternalIds.GameSeriesIdDefault; } var newEntry = dbRoot.Nodes[0].Clone() as ParamStruct; SetNodeParamValue(newEntry, HEX_UI_GAMETITLE_ID, gameTitleEntry.UiGameTitleId); SetNodeParamValue(newEntry, HEX_UI_SERIES_ID, uiSeriesId); SetNodeParamValue(newEntry, HEX_NAME_ID, gameTitleEntry.NameId); SetNodeParamValue(newEntry, HEX_RELEASE, releaseIndex); dbRoot.Nodes.Add(newEntry); releaseIndex++; } t.Save(outputFilePath); return(true); }
public void WritePrcFile <T>(string outputFile, T inputObj) { //Open file var t = new ParamFile(); //Write recursively WritePrc(t.Root, inputObj, inputObj.GetType().GetProperties()); //Save t.Save(outputFile); }
public void AssmebleEncrypted(XmlDocument doc, string fileLocation, string labelsFileLocation) { stringToHashLabels = new OrderedDictionary <string, ulong>(); if (!string.IsNullOrEmpty(labelsFileLocation)) { try { stringToHashLabels = LabelIO.GetStringHashDict(labelsFileLocation); } catch (Exception ex) { UiHelper.PopUpMessage(ex.Message); return; } } file = new ParamFile(Node2ParamStruct(doc.DocumentElement)); file.Save(fileLocation); }
public bool GenerateBgmPrcFile(List <BgmDbNewEntry> bgmEntries, string outputFilePath) { var saveNoIndex = (short)(_coreBgmDb.OrderByDescending(p => p.SaveNo).First().SaveNo + 1); var testDispOrderIndex = (short)(_coreBgmDb.OrderByDescending(p => p.TestDispOrder).First().TestDispOrder + 1); var menuValueIndex = _coreBgmDb.OrderByDescending(p => p.MenuValue).First().MenuValue + 1; var t = new ParamFile(); t.Open(_resourceService.GetBgmDbResource()); //DBROOT var dbRoot = t.Root.Nodes[HEX_CAT_DBROOT] as ParamList; foreach (var bgmEntry in bgmEntries) { var newEntry = dbRoot.Nodes[1].Clone() as ParamStruct; SetNodeParamValue(newEntry, HEX_UI_BGM_ID, bgmEntry.UiBgmId); SetNodeParamValue(newEntry, HEX_STREAM_SET_ID, bgmEntry.StreamSetId); SetNodeParamValue(newEntry, HEX_RARITY, bgmEntry.Rarity); SetNodeParamValue(newEntry, HEX_RECORD_TYPE, bgmEntry.RecordType); SetNodeParamValue(newEntry, HEX_UI_GAMETITLE_ID, bgmEntry.UiGameTitleId); SetNodeParamValue(newEntry, HEX_NAME_ID, bgmEntry.NameId); //SetNodeParamValue(newEntry, HEX_SAVE_NO, saveNoIndex); SetNodeParamValue(newEntry, HEX_TEST_DISP_ORDER, testDispOrderIndex); SetNodeParamValue(newEntry, HEX_MENU_VALUE, menuValueIndex); SetNodeParamValue(newEntry, HEX_SHOP_PRICE, (uint)0); dbRoot.Nodes.Add(newEntry); saveNoIndex++; testDispOrderIndex++; menuValueIndex++; } //STREAM_SET var streamSet = t.Root.Nodes[HEX_CAT_STREAM_SET] as ParamList; foreach (var bgmEntry in bgmEntries) { var newEntry = streamSet.Nodes[0].Clone() as ParamStruct; SetNodeParamValue(newEntry, HEX_STREAM_SET_ID, bgmEntry.StreamSetId); SetNodeParamValue(newEntry, HEX_INFO0, bgmEntry.Info0); streamSet.Nodes.Add(newEntry); } //ASSIGNED_INFO var assignedInfo = t.Root.Nodes[HEX_CAT_ASSIGNED_INFO] as ParamList; foreach (var bgmEntry in bgmEntries) { var newEntry = assignedInfo.Nodes[0].Clone() as ParamStruct; SetNodeParamValue(newEntry, HEX_INFO_ID, bgmEntry.InfoId); SetNodeParamValue(newEntry, HEX_STREAM_ID, bgmEntry.StreamId); assignedInfo.Nodes.Add(newEntry); } //STREAM_PROPERTY var streamProperty = t.Root.Nodes[HEX_CAT_STREAM_PROPERTY] as ParamList; foreach (var bgmEntry in bgmEntries) { var newEntry = streamProperty.Nodes[0].Clone() as ParamStruct; SetNodeParamValue(newEntry, HEX_STREAM_ID, bgmEntry.StreamId); SetNodeParamValue(newEntry, HEX_DATA_NAME0, bgmEntry.DataName0); streamProperty.Nodes.Add(newEntry); } //BGM PLAYLIST (QUICK & DIRTY) foreach (var bgmEntry in bgmEntries) { if (bgmEntry.Playlists == null) { continue; } foreach (var playlist in bgmEntry.Playlists) { var playlistId = playlist.Id; if (!playlistId.StartsWith("bgm")) { _logger.LogWarning("The playlist_id for song '{Song}' must start with 'bgm', skipping...", bgmEntry.ToneName); continue; } var hexValue = Hash40Util.StringToHash40(playlistId); ParamList bgmPlaylist = null; ParamStruct newEntry = null; //If the playlist doesn't exist... if (!t.Root.Nodes.ContainsKey(hexValue)) { var playlistToClone = t.Root.Nodes[HEX_PLAYLIST_EXAMPLE] as ParamList; bgmPlaylist = playlistToClone.Clone() as ParamList; t.Root.Nodes.Add(hexValue, bgmPlaylist); if (bgmPlaylist.Nodes.Count > 1) { bgmPlaylist.Nodes.RemoveRange(1, bgmPlaylist.Nodes.Count - 1); newEntry = bgmPlaylist.Nodes[0] as ParamStruct; } } else { bgmPlaylist = t.Root.Nodes[hexValue] as ParamList; newEntry = bgmPlaylist.Nodes[0].Clone() as ParamStruct; bgmPlaylist.Nodes.Add(newEntry); } //Add song SetNodeParamValue(newEntry, HEX_UI_BGM_ID, bgmEntry.UiBgmId); for (int i = 0; i <= 15; i++) { SetNodeParamValue(newEntry, string.Format(HEX_ORDERNBR, i), (short)(bgmPlaylist.Nodes.Count)); SetNodeParamValue(newEntry, string.Format(HEX_INCIDENCENBR, i), (ushort)500); } } } t.Save(outputFilePath); return(true); }
static void Main(string[] args) { stopwatch = new Stopwatch(); bool helpPrinted = false; string input = null; string output = null; try { for (int i = 0; i < args.Length; i++) { switch (args[i]) { case "-d": mode = BuildMode.Disassemble; break; case "-a": mode = BuildMode.Assemble; break; case "-h": case "-help": Console.WriteLine(HelpText); helpPrinted = true; break; case "-o": output = args[++i]; break; case "-l": labelName = args[++i]; break; default: input = args[i]; break; } } if (input == null || mode == BuildMode.Invalid) { if (!helpPrinted) { Console.WriteLine(HelpText); } return; } if (mode == BuildMode.Disassemble) { if (string.IsNullOrEmpty(output)) { output = Path.GetFileNameWithoutExtension(input) + ".xml"; } hashToStringLabels = new OrderedDictionary <ulong, string>(); if (!string.IsNullOrEmpty(labelName)) { hashToStringLabels = LabelIO.GetHashStringDict(labelName); } Console.WriteLine("Initializing..."); stopwatch.Start(); file = new ParamFile(); file.Open(input); Console.WriteLine("Disassembling..."); xml = new XmlDocument(); xml.AppendChild(xml.CreateXmlDeclaration("1.0", "UTF-8", null)); xml.AppendChild(ParamStruct2Node(file.Root)); XmlWriterSettings settings = new XmlWriterSettings() { Indent = true }; XmlWriter writer = XmlWriter.Create(output, settings); var dirname = Path.GetDirectoryName(output); if (!string.IsNullOrEmpty(dirname)) { Directory.CreateDirectory(dirname); } xml.Save(writer); stopwatch.Stop(); Console.WriteLine("Finished in {0} seconds", stopwatch.Elapsed.TotalSeconds); } else { if (string.IsNullOrEmpty(output)) { output = Path.GetFileNameWithoutExtension(input) + ".prc"; } stringToHashLabels = new OrderedDictionary <string, ulong>(); if (!string.IsNullOrEmpty(labelName)) { stringToHashLabels = LabelIO.GetStringHashDict(labelName); } Console.WriteLine("Initializing..."); stopwatch.Start(); xml = new XmlDocument(); xml.Load(input); file = new ParamFile(Node2ParamStruct(xml.DocumentElement)); Console.WriteLine("Assembling..."); var dirname = Path.GetDirectoryName(output); if (!string.IsNullOrEmpty(dirname)) { Directory.CreateDirectory(dirname); } file.Save(output); stopwatch.Stop(); Console.WriteLine("Finished in {0} seconds", stopwatch.Elapsed.TotalSeconds); } } catch (Exception e) { Console.WriteLine(e.Message); if (e.InnerException == null) { Console.WriteLine(e.StackTrace); } else { Console.WriteLine(e.InnerException.StackTrace); } } }