Skip to content

Commit

Permalink
Improve upon error handling, fix small issues
Browse files Browse the repository at this point in the history
  • Loading branch information
Pireax committed Apr 8, 2019
1 parent 642dcef commit 9e8cc84
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 80 deletions.
3 changes: 1 addition & 2 deletions BigHat/FmgImporter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@ public class FmgImporter : IImporter

public FmgImporter(string path)
{
_data = Utils.GetBinaryDataFromFile(path);

_data = Utils.ReadBinaryDataFromFile(path);
Count = BitConverter.ToInt32(_data, 0x0C);
}

Expand Down
9 changes: 5 additions & 4 deletions BigHat/ParamImporter.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Text;
using BigHat.ParamEntries;
Expand Down Expand Up @@ -29,8 +30,7 @@ public class ParamImporter : IImporter

public ParamImporter(string path)
{
_data = Utils.GetBinaryDataFromFile(path);

_data = Utils.ReadBinaryDataFromFile(path);
ReadHeaderData();
}

Expand All @@ -47,7 +47,6 @@ private static string GetTableName(byte[] binaryData)
tableName.Append((char) nextChar);
tableNameOffset++;
}

return tableName.ToString();
}

Expand Down Expand Up @@ -116,6 +115,8 @@ public void ReadHeaderData()
_baseOffset = BitConverter.ToUInt32(_data, 0x30);
}

[SuppressMessage("ReSharper", "StringLiteralTypo")]
[SuppressMessage("ReSharper", "RedundantCaseLabel")]
private ParamType GetParamType()
{
var structName = GetTableName(_data);
Expand Down Expand Up @@ -224,7 +225,7 @@ private ParamType GetParamType()
case "WET_ASPECT_PARAM_ST":
case "WIND_PARAM_ST":
default:
throw new Exception("This structure type is not yet supported");
throw new Exception("This structure type is not supported");
}
}
}
Expand Down
155 changes: 82 additions & 73 deletions BigHat/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using BigHat.ParamEntries;

Expand All @@ -27,11 +28,27 @@ public enum ExportFormat
Proto
}

public static void TryExport(string filename)
{
try
{
Console.WriteLine($"Exporting {filename}...");
TryExport(filename, CreateImporterForFile(filename));
}
catch (Exception e)
{
Console.WriteLine(e);
}
}

public static void TryExport(string filename, IImporter importer)
{
Console.WriteLine($"Exporting {filename}...");
if (filename == null) throw new ArgumentNullException(nameof(filename));
if (filename == string.Empty) throw new ArgumentException("filename is an empty string", nameof(filename));
if (importer == null) throw new ArgumentNullException(nameof(importer));

var outputPath =
$"{Path.Combine(Path.GetDirectoryName(filename), Path.GetFileNameWithoutExtension(filename))}Out.csv";
$"{Path.Combine(Path.GetDirectoryName(filename) ?? string.Empty, Path.GetFileNameWithoutExtension(filename))}Out.csv";

if (_exportFormat == ExportFormat.Csv)
CsvExporter.Export(outputPath, importer.Import(), (_arguments & Arguments.Headers) == Arguments.Headers,
Expand All @@ -41,69 +58,80 @@ public static void TryExport(string filename, IImporter importer)
ProtoBufDataExporter.Export(outputPath, importer.Import());
}

public static void TryExportFmg(string filename)
private static void Main(string[] args)
{
FmgImporter importer;
try
{
importer = new FmgImporter(filename);
}
catch (Exception)
Console.OutputEncoding = Encoding.Unicode;
SetupNumberFormat();
var path = ParseArgs(args);

if (path == null)
{
ExportDefault();
return;
}
TryExport(filename, importer);

var extension = Path.GetExtension(path);
if (string.IsNullOrEmpty(extension))
ExportDefault(path);
else
TryExport(path);
}

public static void TryExportParam(string filename)
private static IImporter CreateImporterForFile(string filename)
{
ParamImporter importer;
try
switch (Path.GetExtension(filename))
{
importer = new ParamImporter(filename);
}
catch (Exception)
{
return;
case ".param":
return new ParamImporter(filename);
case ".fmg":
return new FmgImporter(filename);
default:
throw new ArgumentOutOfRangeException(nameof(filename), filename,
"Expected .param or .fmg file extension.");
}
TryExport(filename, importer);
}

private static void ExportDefault(string folderPath = "")
{
TryExportFmg(Path.Combine(folderPath, "NPC名.fmg")); // Npc Names
TryExportFmg(Path.Combine(folderPath, "アイテムうんちく.fmg"));
TryExportFmg(Path.Combine(folderPath, "アイテム名.fmg"));
TryExportFmg(Path.Combine(folderPath, "アイテム説明.fmg"));
TryExportFmg(Path.Combine(folderPath, "アクセサリうんちく.fmg"));
TryExportFmg(Path.Combine(folderPath, "アクセサリ名.fmg"));
TryExportFmg(Path.Combine(folderPath, "アクセサリ説明.fmg"));
TryExportFmg(Path.Combine(folderPath, "地名.fmg"));
TryExportFmg(Path.Combine(folderPath, "武器うんちく.fmg"));
TryExportFmg(Path.Combine(folderPath, "武器名.fmg")); // Weapon Names
// TryExportFmg(Path.Combine(folderPath, "武器説明.fmg")); // Doesn't contain anything as far as I can see.
TryExportFmg(Path.Combine(folderPath, "防具うんちく.fmg"));
TryExportFmg(Path.Combine(folderPath, "防具名.fmg"));
TryExportFmg(Path.Combine(folderPath, "防具説明.fmg"));
TryExportFmg(Path.Combine(folderPath, "魔法うんちく.fmg"));
TryExportFmg(Path.Combine(folderPath, "魔法名.fmg"));
TryExportFmg(Path.Combine(folderPath, "魔法説明.fmg"));


TryExportParam(Path.Combine(folderPath, "EquipParamWeapon.param"));
TryExportParam(Path.Combine(folderPath, "EquipParamAccessory.param"));
TryExportParam(Path.Combine(folderPath, "EquipParamProtector.param"));
TryExportParam(Path.Combine(folderPath, "ReinforceParamWeapon.param"));
TryExportParam(Path.Combine(folderPath, "ReinforceParamProtector.param"));
TryExportParam(Path.Combine(folderPath, "AttackElementCorrectParam.param"));
TryExportParam(Path.Combine(folderPath, "CalcCorrectGraph.param"));
TryExportParam(Path.Combine(folderPath, "Magic.param"));
TryExportParam(Path.Combine(folderPath, "SpEffectParam.param"));
TryExportParam(Path.Combine(folderPath, "NpcParam.param"));
TryExportParam(Path.Combine(folderPath, "BehaviorParam.param"));
TryExportParam(Path.Combine(folderPath, "BehaviorParam_PC.param"));
TryExportParam(Path.Combine(folderPath, "AtkParam_Pc.param"));
TryExportParam(Path.Combine(folderPath, "AtkParam_Npc.param"));
string[] defaultFiles = {
"NPC名.fmg", // Npc names
"アイテムうんちく.fmg",
"アイテム名.fmg",
"アイテム説明.fmg",
"アクセサリうんちく.fmg",
"アクセサリ名.fmg",
"アクセサリ説明.fmg",
"地名.fmg",
"武器うんちく.fmg",
"武器名.fmg", // Weapon names
// "武器説明.fmg", // Doesn't contain anything as far as I can see.
"防具うんちく.fmg",
"防具名.fmg",
"防具説明.fmg",
"魔法うんちく.fmg",
"魔法名.fmg",
"魔法説明.fmg",
"EquipParamWeapon.param",
"EquipParamAccessory.param",
"EquipParamProtector.param",
"ReinforceParamWeapon.param",
"ReinforceParamProtector.param",
"AttackElementCorrectParam.param",
"CalcCorrectGraph.param",
"Magic.param",
"SpEffectParam.param",
"NpcParam.param",
"BehaviorParam.param",
"BehaviorParam_PC.param",
"AtkParam_Pc.param",
"AtkParam_Npc.param"
};

foreach (var file in defaultFiles)
{
var filepath = Path.Combine(folderPath, file);
if (File.Exists(filepath)) TryExport(filepath);
}
}

private static void GenerateProto()
Expand All @@ -126,18 +154,18 @@ private static void GenerateProto()
}
}

private static void Initialize()
private static void SetupNumberFormat()
{
var cultureInfo = (CultureInfo) Thread.CurrentThread.CurrentCulture.Clone();
cultureInfo.NumberFormat.NumberDecimalSeparator = ".";

Thread.CurrentThread.CurrentCulture = cultureInfo;
}

private static bool IsFilePath(string str)
{
try
{
// ReSharper disable once ReturnValueOfPureMethodIsNotUsed
Path.GetFullPath(str);
return true;
}
Expand All @@ -147,25 +175,6 @@ private static bool IsFilePath(string str)
}
}

private static void Main(string[] args)
{
Initialize();
var path = ParseArgs(args);

if (path != null)
{
var extension = Path.GetExtension(path);
if (extension == ".fmg")
TryExportFmg(path);
else if (extension == ".param")
TryExportParam(path);
else if (string.IsNullOrEmpty(extension))
ExportDefault(path);
else return;
}
else ExportDefault();
}

private static void OutputHelpAndExit()
{
Console.WriteLine(
Expand Down
2 changes: 1 addition & 1 deletion BigHat/Utils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ namespace BigHat
{
internal static class Utils
{
public static byte[] GetBinaryDataFromFile(string filename)
public static byte[] ReadBinaryDataFromFile(string filename)
{
if (!File.Exists(filename))
throw new ArgumentException();
Expand Down

0 comments on commit 9e8cc84

Please sign in to comment.