Advertisement
namofure

DQ9 Legacy Boss Prm

Jan 20th, 2025 (edited)
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.61 KB | Gaming | 0 0
  1. using System;
  2. using System.IO;
  3. using System.Collections.Generic;
  4.  
  5. class BinaryRead
  6. {
  7.     static void Main(string[] args)
  8.     {
  9.         // 出力テキストファイルのパス
  10.         string outputTextFilePath = @"Nokturnus.txt";
  11.  
  12.         // 処理開始オフセット
  13.         long startOffset = 0x7290;
  14.  
  15.         // 1回あたりの読み取りサイズ(24バイト)
  16.         int recordSize = 24;
  17.  
  18.         // 処理回数(255回)
  19.         int iterations = 255;
  20.  
  21.         // Boss を取得するための辞書
  22.         Dictionary<long, string> bossDictionary = new Dictionary<long, string>
  23.         {
  24.             { 0x120, "Dragonlord" },
  25.             { 0xA94, "Malroth" },
  26.             { 0x1408, "Baramos" },
  27.             { 0x1D7C, "Zoma" },
  28.             { 0x26F0, "Psaro" },
  29.             { 0x3064, "Estark" },
  30.             { 0x39D8, "Nimzo" },
  31.             { 0x434C, "Murdaw" },
  32.             { 0x4CC0, "Mortamor" },
  33.             { 0x5634, "Orgodemir" },
  34.             { 0x5FA8, "Dhoulmagus" },
  35.             { 0x691C, "Rhapthorn" },
  36.             { 0x7290, "Nokturnus" }
  37.         };
  38.  
  39.         string Boss = bossDictionary.ContainsKey(startOffset) ? bossDictionary[startOffset] : "Unknown";
  40.  
  41.         try
  42.         {
  43.             using (FileStream fs = new FileStream(@"param.pac", FileMode.Open, FileAccess.Read))
  44.             using (StreamWriter writer = new StreamWriter(outputTextFilePath))
  45.             {
  46.                 // オフセットに移動
  47.                 fs.Seek(startOffset, SeekOrigin.Begin);
  48.  
  49.                 for (int i = 0; i < iterations; i++)
  50.                 {
  51.                     // バッファを用意して23バイト読み込む
  52.                     byte[] buffer = new byte[recordSize];
  53.                     int bytesRead = fs.Read(buffer, 0, recordSize);
  54.  
  55.                     if (bytesRead < recordSize)
  56.                     {
  57.                         break;
  58.                     }
  59.  
  60.                     // 読み取ったデータを解析
  61.                     var record = ParseRecord(buffer);
  62.  
  63.                     // 結果を出力
  64.                     writer.WriteLine($"{Boss} Lv{i + 1}");
  65.                     writer.WriteLine($"");
  66.                     writer.WriteLine($"    ID: {record.ID}    Flag: {record.Flag}");
  67.                     writer.WriteLine($"    HP: {record.HP}    MP: {record.MP}");
  68.                     writer.WriteLine($"    Atk: {record.Atk}    Def: {record.Def}   Agl: {record.Agl}");
  69.                     writer.WriteLine($"    Exp: {record.Exp}    Gold: {record.Gold}");
  70.                     writer.WriteLine($"");
  71.                 }
  72.             }
  73.  
  74.             Console.WriteLine($"処理が完了しました。結果は {outputTextFilePath} に出力されました。");
  75.         }
  76.         catch (Exception ex)
  77.         {
  78.             Console.WriteLine($"エラーが発生しました: {ex.Message}");
  79.         }
  80.     }
  81.  
  82.     // レコード解析メソッド
  83.     static Record ParseRecord(byte[] buffer)
  84.     {
  85.         return new Record(
  86.             HP: BitConverter.ToUInt16(buffer, 0),
  87.             MP: BitConverter.ToUInt16(buffer, 4),
  88.             Agl: BitConverter.ToUInt16(buffer, 8),
  89.             Atk: BitConverter.ToUInt16(buffer, 10),
  90.             Def: BitConverter.ToUInt16(buffer, 12),
  91.             ID: buffer[14],
  92.             Exp: BitConverter.ToUInt32(buffer, 15),
  93.             Gold: BitConverter.ToUInt32(buffer, 19),
  94.             Flag: buffer[24-1]
  95.         );
  96.     }
  97.  
  98.     record Record(
  99.         ushort HP,
  100.         ushort MP,
  101.         ushort Agl,
  102.         ushort Atk,
  103.         ushort Def,
  104.         byte ID,
  105.         uint Exp,
  106.         uint Gold,
  107.         byte Flag
  108.     );
  109. }
  110.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement