diff options
author | Shauren <shauren.trinity@gmail.com> | 2019-06-08 13:19:48 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2019-06-08 17:10:00 +0200 |
commit | bcaaa3d6f69cd60b25a25fc69904f9a8ece24250 (patch) | |
tree | 585dac52b621b55b5f380a8cdc6725b4b2df6129 /src/tools/extractor_common | |
parent | fc330fd8ff0115804d9c4b53a1f810c00dd63de9 (diff) |
Core/DataStores: Updated db2 structures to 8.1.5
Diffstat (limited to 'src/tools/extractor_common')
-rw-r--r-- | src/tools/extractor_common/CascHandles.cpp | 25 | ||||
-rw-r--r-- | src/tools/extractor_common/CascHandles.h | 2 | ||||
-rw-r--r-- | src/tools/extractor_common/DB2CascFileSource.cpp | 19 | ||||
-rw-r--r-- | src/tools/extractor_common/DB2CascFileSource.h | 4 | ||||
-rw-r--r-- | src/tools/extractor_common/ExtractorDB2LoadInfo.h | 16 |
5 files changed, 55 insertions, 11 deletions
diff --git a/src/tools/extractor_common/CascHandles.cpp b/src/tools/extractor_common/CascHandles.cpp index 9487b3de093..eb84a084a11 100644 --- a/src/tools/extractor_common/CascHandles.cpp +++ b/src/tools/extractor_common/CascHandles.cpp @@ -38,6 +38,7 @@ char const* CASC::HumanReadableCASCError(DWORD error) case ERROR_INVALID_HANDLE: return "INVALID_HANDLE"; case ERROR_ACCESS_DENIED: return "ACCESS_DENIED"; case ERROR_FILE_NOT_FOUND: return "FILE_NOT_FOUND"; + case ERROR_FILE_ENCRYPTED: return "FILE_ENCRYPTED"; default: return "UNKNOWN"; } } @@ -98,10 +99,15 @@ DWORD CASC::GetInstalledLocalesMask(StorageHandle const& storage) return 0; } +bool CASC::HasTactKey(StorageHandle const& storage, ULONGLONG keyLookup) +{ + return CascFindEncryptionKey(storage.get(), keyLookup) != nullptr; +} + CASC::FileHandle CASC::OpenFile(StorageHandle const& storage, char const* fileName, DWORD localeMask, bool printErrors /*= false*/) { HANDLE handle = nullptr; - if (!::CascOpenFile(storage.get(), fileName, localeMask, 0, &handle)) + if (!::CascOpenFile(storage.get(), fileName, localeMask, CASC_OPEN_BY_NAME, &handle)) { DWORD lastError = GetLastError(); // support checking error set by *Open* call, not the next *Close* if (printErrors) @@ -115,6 +121,23 @@ CASC::FileHandle CASC::OpenFile(StorageHandle const& storage, char const* fileNa return FileHandle(handle); } +CASC::FileHandle CASC::OpenFile(StorageHandle const& storage, DWORD fileDataId, DWORD localeMask, bool printErrors /*= false*/) +{ + HANDLE handle = nullptr; + if (!::CascOpenFile(storage.get(), CASC_FILE_DATA_ID(fileDataId), localeMask, CASC_OPEN_BY_FILEID, &handle)) + { + DWORD lastError = GetLastError(); // support checking error set by *Open* call, not the next *Close* + if (printErrors) + fprintf(stderr, "Failed to open 'FileDataId %u' in CASC storage: %s\n", fileDataId, HumanReadableCASCError(lastError)); + + CascCloseFile(handle); + SetLastError(lastError); + return FileHandle(); + } + + return FileHandle(handle); +} + DWORD CASC::GetFileSize(FileHandle const& file, PDWORD fileSizeHigh) { return ::CascGetFileSize(file.get(), fileSizeHigh); diff --git a/src/tools/extractor_common/CascHandles.h b/src/tools/extractor_common/CascHandles.h index c191cc25045..9feafdbf4af 100644 --- a/src/tools/extractor_common/CascHandles.h +++ b/src/tools/extractor_common/CascHandles.h @@ -51,8 +51,10 @@ namespace CASC StorageHandle OpenStorage(boost::filesystem::path const& path, DWORD localeMask); DWORD GetBuildNumber(StorageHandle const& storage); DWORD GetInstalledLocalesMask(StorageHandle const& storage); + bool HasTactKey(StorageHandle const& storage, ULONGLONG keyLookup); FileHandle OpenFile(StorageHandle const& storage, char const* fileName, DWORD localeMask, bool printErrors = false); + FileHandle OpenFile(StorageHandle const& storage, DWORD fileDataId, DWORD localeMask, bool printErrors = false); DWORD GetFileSize(FileHandle const& file, PDWORD fileSizeHigh); DWORD GetFilePointer(FileHandle const& file); bool SetFilePointer(FileHandle const& file, LONGLONG position); diff --git a/src/tools/extractor_common/DB2CascFileSource.cpp b/src/tools/extractor_common/DB2CascFileSource.cpp index c2478b21def..58f8567dda3 100644 --- a/src/tools/extractor_common/DB2CascFileSource.cpp +++ b/src/tools/extractor_common/DB2CascFileSource.cpp @@ -16,14 +16,21 @@ */ #include "DB2CascFileSource.h" +#include "StringFormat.h" #include <CascLib.h> -DB2CascFileSource::DB2CascFileSource(CASC::StorageHandle const& storage, std::string fileName) +DB2CascFileSource::DB2CascFileSource(CASC::StorageHandle const& storage, std::string fileName, bool printErrors /*= true*/) { - _fileHandle = CASC::OpenFile(storage, fileName.c_str(), CASC_LOCALE_NONE, true); + _fileHandle = CASC::OpenFile(storage, fileName.c_str(), CASC_LOCALE_NONE, printErrors); _fileName = std::move(fileName); } +DB2CascFileSource::DB2CascFileSource(CASC::StorageHandle const& storage, uint32 fileDataId, bool printErrors /*= true*/) +{ + _fileHandle = CASC::OpenFile(storage, fileDataId, CASC_LOCALE_NONE, printErrors); + _fileName = Trinity::StringFormat("FileDataId: %u", fileDataId); +} + bool DB2CascFileSource::IsOpen() const { return _fileHandle != nullptr; @@ -50,9 +57,17 @@ std::size_t DB2CascFileSource::GetFileSize() const DWORD sizeLow = 0; DWORD sizeHigh = 0; sizeLow = CASC::GetFileSize(_fileHandle, &sizeHigh); + if (sizeLow == CASC_INVALID_SIZE) + return std::size_t(-1); + return std::size_t(uint64(sizeLow) | (uint64(sizeHigh) << 32)); } +CASC::FileHandle const& DB2CascFileSource::GetHandle() const +{ + return _fileHandle; +} + char const* DB2CascFileSource::GetFileName() const { return _fileName.c_str(); diff --git a/src/tools/extractor_common/DB2CascFileSource.h b/src/tools/extractor_common/DB2CascFileSource.h index bfe580714be..80559ff8d41 100644 --- a/src/tools/extractor_common/DB2CascFileSource.h +++ b/src/tools/extractor_common/DB2CascFileSource.h @@ -24,12 +24,14 @@ struct DB2CascFileSource : public DB2FileSource { - DB2CascFileSource(CASC::StorageHandle const& storage, std::string fileName); + DB2CascFileSource(CASC::StorageHandle const& storage, std::string fileName, bool printErrors = true); + DB2CascFileSource(CASC::StorageHandle const& storage, uint32 fileDataId, bool printErrors = true); bool IsOpen() const override; bool Read(void* buffer, std::size_t numBytes) override; std::size_t GetPosition() const override; bool SetPosition(std::size_t position) override; std::size_t GetFileSize() const override; + CASC::FileHandle const& GetHandle() const; char const* GetFileName() const override; private: diff --git a/src/tools/extractor_common/ExtractorDB2LoadInfo.h b/src/tools/extractor_common/ExtractorDB2LoadInfo.h index 6ee6a9c6355..0f4833af253 100644 --- a/src/tools/extractor_common/ExtractorDB2LoadInfo.h +++ b/src/tools/extractor_common/ExtractorDB2LoadInfo.h @@ -43,7 +43,7 @@ struct CinematicCameraLoadInfo { FT_FLOAT, 1, true }, { FT_INT, 1, false }, }; - static DB2Meta meta(-1, 4, 0x20C5E540, fields, -1); + static DB2Meta meta(1294214, -1, 4, 0x20C5E540, fields, -1); static DB2FileLoadInfo const loadInfo(&loadedFields[0], std::extent<decltype(loadedFields)>::value, &meta); return &loadInfo; } @@ -75,7 +75,7 @@ struct GameobjectDisplayInfoLoadInfo { FT_FLOAT, 1, true }, { FT_FLOAT, 1, true }, }; - static DB2Meta meta(-1, 5, 0x7A816799, fields, -1); + static DB2Meta meta(1266277, -1, 5, 0x7A816799, fields, -1); static DB2FileLoadInfo const loadInfo(&loadedFields[0], std::extent<decltype(loadedFields)>::value, &meta); return &loadInfo; } @@ -96,7 +96,7 @@ struct LiquidMaterialLoadInfo { FT_BYTE, 1, true }, { FT_BYTE, 1, true }, }; - static DB2Meta meta(-1, 2, 0x6A7287A2, fields, -1); + static DB2Meta meta(1132538, -1, 2, 0x6A7287A2, fields, -1); static DB2FileLoadInfo const loadInfo(&loadedFields[0], std::extent<decltype(loadedFields)>::value, &meta); return &loadInfo; } @@ -123,7 +123,7 @@ struct LiquidObjectLoadInfo { FT_BYTE, 1, false }, { FT_BYTE, 1, false }, }; - static DB2Meta meta(-1, 5, 0x7AF380AA, fields, -1); + static DB2Meta meta(1308058, -1, 5, 0x7AF380AA, fields, -1); static DB2FileLoadInfo const loadInfo(&loadedFields[0], std::extent<decltype(loadedFields)>::value, &meta); return &loadInfo; } @@ -216,7 +216,7 @@ struct LiquidTypeLoadInfo { FT_INT, 4, false }, { FT_FLOAT, 4, true }, }; - static DB2Meta meta(-1, 21, 0x29F8C65E, fields, -1); + static DB2Meta meta(1371380, -1, 21, 0x29F8C65E, fields, -1); static DB2FileLoadInfo const loadInfo(&loadedFields[0], std::extent<decltype(loadedFields)>::value, &meta); return &loadInfo; } @@ -251,10 +251,11 @@ struct MapLoadInfo { false, FT_BYTE, "MaxPlayers" }, { true, FT_SHORT, "WindSettingsID" }, { true, FT_INT, "ZmpFileDataID" }, + { true, FT_INT, "WdtFileDataID" }, { true, FT_INT, "Flags1" }, { true, FT_INT, "Flags2" }, }; - static DB2MetaField const fields[22] = + static DB2MetaField const fields[23] = { { FT_STRING_NOT_LOCALIZED, 1, true }, { FT_STRING, 1, true }, @@ -277,9 +278,10 @@ struct MapLoadInfo { FT_BYTE, 1, false }, { FT_SHORT, 1, true }, { FT_INT, 1, true }, + { FT_INT, 1, true }, { FT_INT, 2, true }, }; - static DB2Meta meta(-1, 22, 0x503A3E58, fields, -1); + static DB2Meta meta(1349477, -1, 23, 0xB290D217, fields, -1); static DB2FileLoadInfo const loadInfo(&loadedFields[0], std::extent<decltype(loadedFields)>::value, &meta); return &loadInfo; } |