Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
                }
            }
        }