diff --git a/EXDCommon/FileAccess/Directory/DirectoryFileAccess.cs b/EXDCommon/FileAccess/Directory/DirectoryFileAccess.cs index c4f0f05..c493276 100644 --- a/EXDCommon/FileAccess/Directory/DirectoryFileAccess.cs +++ b/EXDCommon/FileAccess/Directory/DirectoryFileAccess.cs @@ -22,7 +22,7 @@ public DirectoryFileAccess(PatchDataDirectory directory, string storagePath) public T? GetFile(string path, string? origPath = null) where T : FileResource { - var sqpackFile = _directory.SqPackFiles[path]; + if (!_directory.SqPackFiles.TryGetValue(path, out var sqpackFile)) return null; var realPath = Path.Combine(_storagePath, sqpackFile.Hash[..2], sqpackFile.Hash); if(!File.Exists(realPath)) @@ -88,4 +88,9 @@ public bool FileExists(string path) return _indexFiles[category].GetFileOffsetAndDat(path) != (0, 0); } + + public GameVersion GetVersion() + { + return _directory.Version; + } } \ No newline at end of file diff --git a/EXDCommon/FileAccess/IGameFileAccess.cs b/EXDCommon/FileAccess/IGameFileAccess.cs index b62ebed..4c204bd 100644 --- a/EXDCommon/FileAccess/IGameFileAccess.cs +++ b/EXDCommon/FileAccess/IGameFileAccess.cs @@ -1,4 +1,5 @@ -using EXDCommon.Sheets; +using EXDCommon.FileAccess.Directory; +using EXDCommon.Sheets; using Lumina.Data; namespace EXDCommon.FileAccess; @@ -8,4 +9,5 @@ public interface IGameFileAccess T? GetFile(string path, string? origPath = null) where T : FileResource; RawExcelSheet? GetRawExcelSheet(string sheetName, Language sheetLanguage = Language.English); bool FileExists(string path); + GameVersion GetVersion(); } \ No newline at end of file diff --git a/EXDCommon/FileAccess/Lumina/LuminaFileAccess.cs b/EXDCommon/FileAccess/Lumina/LuminaFileAccess.cs index a0b0349..1935b90 100644 --- a/EXDCommon/FileAccess/Lumina/LuminaFileAccess.cs +++ b/EXDCommon/FileAccess/Lumina/LuminaFileAccess.cs @@ -1,4 +1,5 @@ -using EXDCommon.Sheets; +using EXDCommon.FileAccess.Directory; +using EXDCommon.Sheets; using Lumina; using Lumina.Data; using Lumina.Data.Files.Excel; @@ -16,7 +17,7 @@ public LuminaFileAccess(GameData gameData) public T? GetFile(string path, string? origPath = null) where T : FileResource => _gameData.GetFile(path); public bool FileExists(string path) => _gameData.FileExists(path); - + public RawExcelSheet? GetRawExcelSheet(string sheetName, Language sheetLanguage = Language.English) { var path = $"exd/{sheetName}.exh"; @@ -32,4 +33,13 @@ public LuminaFileAccess(GameData gameData) return newSheet; } + + public GameVersion GetVersion() + { + var gamePath = _gameData.DataPath.Parent; + var file = gamePath!.FullName + "\\ffxivgame.ver"; + var text = File.ReadAllText(file); + var version = GameVersion.Parse(text); + return version; + } } \ No newline at end of file