|
@@ -16,17 +16,19 @@
|
|
|
extern "C++"
|
|
|
{
|
|
|
namespace LOTRO_DAT {
|
|
|
- DatFile::DatFile() : dat_state_(CLOSED) {}
|
|
|
+ DatFile::DatFile() : dat_state_(CLOSED), root_directory_(nullptr), file_handler_(nullptr) {}
|
|
|
|
|
|
- void DatFile::InitDatFile(const char *filename, int dat_id) {
|
|
|
+ void DatFile::InitDatFile(const std::string &filename, int dat_id) {
|
|
|
if (dat_state_ != CLOSED)
|
|
|
CloseDatFile();
|
|
|
|
|
|
dat_id_ = dat_id;
|
|
|
dat_state_ = CLOSED;
|
|
|
+ root_directory_ = nullptr;
|
|
|
|
|
|
- filename_ = std::string(filename);
|
|
|
- OpenDatFile(filename);
|
|
|
+ filename_ = filename;
|
|
|
+
|
|
|
+ OpenDatFile(filename.c_str());
|
|
|
ReadSuperBlock();
|
|
|
MakeDirectories();
|
|
|
|
|
@@ -38,10 +40,10 @@ namespace LOTRO_DAT {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- InitLocale(PATCHED, (std::string(filename) + std::string("patched.dbgm")).c_str());
|
|
|
- InitLocale(ORIGINAL,(std::string(filename) + std::string("original.dbgm")).c_str());
|
|
|
+ InitLocale(PATCHED, (filename + "patched.dbgm").c_str());
|
|
|
+ InitLocale(ORIGINAL,(filename + "original.dbgm").c_str());
|
|
|
|
|
|
- FILE *locale = fopen((std::string(filename) + ".dbgm").c_str(), "r");
|
|
|
+ FILE *locale = fopen((filename + ".dbgm").c_str(), "r");
|
|
|
if (locale == nullptr)
|
|
|
current_locale_ = ORIGINAL;
|
|
|
else {
|
|
@@ -528,7 +530,7 @@ namespace LOTRO_DAT {
|
|
|
void DatFile::UpdateHeader() {
|
|
|
WriteData(BinaryData::FromNumber<4>(constant1_), 4, 0x100);
|
|
|
WriteData(BinaryData::FromNumber<4>(constant2_), 4, 0x140);
|
|
|
- WriteData(BinaryData::FromNumber<4>(constant2_), 4, 0x148);
|
|
|
+ WriteData(BinaryData::FromNumber<4>(file_size_), 4, 0x148);
|
|
|
WriteData(BinaryData::FromNumber<4>(version1_), 4, 0x14C);
|
|
|
WriteData(BinaryData::FromNumber<4>(version2_), 4, 0x150);
|
|
|
WriteData(BinaryData::FromNumber<4>(fragmentation_journal_offset_), 4, 0x154);
|
|
@@ -565,9 +567,10 @@ namespace LOTRO_DAT {
|
|
|
UpdateSubdirectories();
|
|
|
std::cout << "Updated subdirectories..." << std::endl << std::flush;
|
|
|
std::cout << "Changed " << patched_list.size() << " files..." << std::endl << std::flush;
|
|
|
- patched_list.clear();
|
|
|
std::cout << "Updating locales..." << std::endl;
|
|
|
CommitLocales();
|
|
|
+ std::cout << "Done!" << std::endl;
|
|
|
+ patched_list.clear();
|
|
|
dat_state_ = READY;
|
|
|
}
|
|
|
|
|
@@ -582,9 +585,11 @@ namespace LOTRO_DAT {
|
|
|
if (file_handler_ != nullptr)
|
|
|
fclose(file_handler_);
|
|
|
delete file_handler_;
|
|
|
+
|
|
|
delete root_directory_;
|
|
|
dat_state_ = CLOSED;
|
|
|
}
|
|
|
+
|
|
|
// LOCALE MANAGING SECTION
|
|
|
|
|
|
void DatFile::InitLocale(LOCALE locale, const char* filename) {
|
|
@@ -599,6 +604,7 @@ namespace LOTRO_DAT {
|
|
|
(*dict)[file.first] = new Subfile(this, file.second->MakeHeaderData());
|
|
|
}
|
|
|
}
|
|
|
+ fprintf(stderr, "WARNING!!! DatFile::InitLocale() - cannot open .dat locale file %s\n", filename);
|
|
|
return;
|
|
|
}
|
|
|
|