|
@@ -70,8 +70,8 @@ void Lotro::getLocaleFileContents(long long file_id, int locale) {
|
|
|
|
|
|
auto getfile_op = file.GetLocaleManager().GetLocaleFile(file_id, locale);
|
|
|
if (!getfile_op.result) {
|
|
|
- emit caughtError("getOriginalFileContents", {"Файл не найден!", QString("Не удаётся найти файл с id ") + QString::number(file_id)});
|
|
|
- emit processFinished("getOriginalFileContents", {"Error"});
|
|
|
+ emit caughtError("getFileContents", {"Файл не найден!", QString("Не удаётся найти файл с id ") + QString::number(file_id)});
|
|
|
+ emit processFinished("getFileContents", {"Error"});
|
|
|
busy = false;
|
|
|
return;
|
|
|
}
|
|
@@ -81,8 +81,8 @@ void Lotro::getLocaleFileContents(long long file_id, int locale) {
|
|
|
auto getfiledata_op = file.GetFileSystem().GetFileData(subfile, 8);
|
|
|
|
|
|
if (getfile_op.result == LOTRO_DAT::ERROR) {
|
|
|
- emit caughtError("getOriginalFileContents", {"Ошибка извлечения!", QString("Обнаружены некорректные данные файла в словаре! Файл ресурсов мог быть повреждён!\nid = ") + QString::number(file_id) + ", locale_id = " + QString::number(locale)});
|
|
|
- emit processFinished("getOriginalFileContents", {"Error"});
|
|
|
+ emit caughtError("getFileContents", {"Ошибка извлечения!", QString("Обнаружены некорректные данные файла в словаре! Файл ресурсов мог быть повреждён!\nid = ") + QString::number(file_id) + ", locale_id = " + QString::number(locale)});
|
|
|
+ emit processFinished("getFileContents", {"Error"});
|
|
|
busy = false;
|
|
|
return;
|
|
|
}
|
|
@@ -334,10 +334,10 @@ void Lotro::createCoreStatusFile(QString output_filename) {
|
|
|
busy = false;
|
|
|
|
|
|
if (gatherinfo_op.result == LOTRO_DAT::SUCCESS) {
|
|
|
- emit processFinished("createCoreStatusFile", {"Success", {output_filename}});
|
|
|
+ emit processFinished("createCoreStatusFile", {"Success", output_filename});
|
|
|
} else {
|
|
|
emit caughtError("createCoreStatusFile", {"Ошибка сбора информации!", QString("Не удаётся создать файл информации ядра")});
|
|
|
- emit processFinished("createCoreStatusFile", {"Error", {output_filename}});
|
|
|
+ emit processFinished("createCoreStatusFile", {"Error", output_filename});
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -374,10 +374,10 @@ void Lotro::extractSingleFileToDatabase(QString database_path, long long file_id
|
|
|
busy = false;
|
|
|
|
|
|
if (extractfile_op.result == LOTRO_DAT::SUCCESS) {
|
|
|
- emit processFinished("extractSingleFileToDatabase", {"Success", {database_path, file_id}});
|
|
|
+ emit processFinished("extractSingleFileToDatabase", {"Success", database_path, file_id});
|
|
|
} else {
|
|
|
emit caughtError("extractSingleFileToDatabase", {"Ошибка экспорта!", QString("Не удаётся экспортировать файл " + QString::number(file_id) + " в базу данных " + database_path)});
|
|
|
- emit processFinished("extractSingleFileToDatabase", {"Error", {database_path}});
|
|
|
+ emit processFinished("extractSingleFileToDatabase", {"Error", database_path});
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -414,33 +414,148 @@ void Lotro::extractGrouppedFilesToDatabase(QString database_path, LOTRO_DAT::FIL
|
|
|
busy = false;
|
|
|
|
|
|
if (extractfile_op.result == LOTRO_DAT::SUCCESS) {
|
|
|
- emit processFinished("extractGrouppedFilesToDatabase", {"Success", {database_path, type}});
|
|
|
+ emit processFinished("extractGrouppedFilesToDatabase", {"Success", database_path, type});
|
|
|
} else {
|
|
|
emit caughtError("extractGrouppedFilesToDatabase", {"Ошибка экспорта!", QString("Не удаётся экспортировать файлы с типом " + QString::number(type) + " в базу данных " + database_path)});
|
|
|
- emit processFinished("extractGrouppedFilesToDatabase", {"Error", {output_foldername}});
|
|
|
+ emit processFinished("extractGrouppedFilesToDatabase", {"Error", output_foldername});
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void Lotro::getUnactiveCategories() {
|
|
|
+ if (!tryToBlockFile())
|
|
|
+ return;
|
|
|
+
|
|
|
+ emit processStarted("getUnactiveCategories", {});
|
|
|
+
|
|
|
+ const std::set<long long>& categories = file.GetLocaleManager().GetInactiveCategories();
|
|
|
+
|
|
|
+ QStringList result;
|
|
|
+ for (long long category : categories) {
|
|
|
+ result << QString::number(category);
|
|
|
+ }
|
|
|
|
|
|
+ busy = false;
|
|
|
+ emit unactiveCategoriesReceived(result);
|
|
|
+ emit processFinished("getUnactiveCategories", {"Success"});
|
|
|
}
|
|
|
|
|
|
void Lotro::startGame() {
|
|
|
+ if (!tryToBlockFile())
|
|
|
+ return;
|
|
|
+ emit processStarted("startGame", {});
|
|
|
+
|
|
|
+ QStringList args;
|
|
|
+ args << "-skiprawdownload" << "-nosplash";
|
|
|
+ if (file.GetLocaleManager().GetCurrentLocale() == LOTRO_DAT::DatLocaleManager::PATCHED)
|
|
|
+ args << "-disablePatch";
|
|
|
+
|
|
|
+ file.Deinitialize();
|
|
|
+
|
|
|
+ if(FileSystem::fileExists(QApplication::applicationDirPath() + "/user.ini")){
|
|
|
+ QSettings login(QApplication::applicationDirPath() + "/user.ini", QSettings::IniFormat );
|
|
|
+ login.beginGroup("Account");
|
|
|
+ QString username = login.value("username", "").toString();
|
|
|
+ QString password = login.value("password", "").toString();
|
|
|
+ login.endGroup();
|
|
|
+ args << "-username" << username << "-password" << password;
|
|
|
+ }
|
|
|
+
|
|
|
+ qDebug() << "Запускаем игру со следующими аргументами: " << args;
|
|
|
+
|
|
|
+ QFile f(app_settings("Local", "folder") + "/LotroLauncher.exe");
|
|
|
+ QProcess process;
|
|
|
|
|
|
+ if (FileSystem::fileExists(f.fileName())) {
|
|
|
+ if(f.fileName().contains(" ")) f.setFileName("\"" + f.fileName() + "\"");
|
|
|
+ process.startDetached(f.fileName(), args);
|
|
|
+ process.waitForFinished(-1);
|
|
|
+ emit processFinished("startGame", {});
|
|
|
+ } else {
|
|
|
+ emit caughtError("startGame", {"Ошибка запуска игры!", QString("Не удалось найти файл LotroLauncher в папке: ") + app_settings("Local", "folder")});
|
|
|
+ emit processFinished("startGame", {"Error"});
|
|
|
+ }
|
|
|
+ busy = false;
|
|
|
}
|
|
|
|
|
|
-bool Lotro::initialised() {
|
|
|
|
|
|
+void Lotro::getLocaleFileInfo(long long file_id, int locale) {
|
|
|
+ if (!tryToBlockFile())
|
|
|
+ return;
|
|
|
+
|
|
|
+ emit processStarted("getLocaleFileInfo", {file_id, locale});
|
|
|
+
|
|
|
+ auto getfile_op = file.GetLocaleManager().GetLocaleFile(file_id, locale);
|
|
|
+ if (!getfile_op.result) {
|
|
|
+ emit caughtError("getLocaleFileInfo", {"Файл не найден!", QString("Не удаётся найти в ресурсах файл с id ") + QString::number(file_id)});
|
|
|
+ emit processFinished("getLocaleFileInfo", {"Error"});
|
|
|
+ busy = false;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ LOTRO_DAT::SubFile subfile = getfile_op.value;
|
|
|
+
|
|
|
+ QString result = "Locale file info:\n "
|
|
|
+ "dictionary_offset: " + QString::number(subfile.dictionary_offset()) + "\n"
|
|
|
+ "unknown1: " + QString::number(subfile.unknown1()) + "\n"
|
|
|
+ "file_id: " + QString::number(subfile.file_id()) + "\n"
|
|
|
+ "file_offset: " + QString::number(subfile.file_offset()) + "\n"
|
|
|
+ "file_size: " + QString::number(subfile.file_size()) + "\n"
|
|
|
+ "timestamp: " + QString::number(subfile.timestamp()) + "\n"
|
|
|
+ "version: " + QString::number(subfile.version()) + "\n"
|
|
|
+ "block_size: " + QString::number(subfile.block_size()) + "\n"
|
|
|
+ "unknown2: " + QString::number(subfile.file_id()) + "\n";
|
|
|
+
|
|
|
+ busy = false;
|
|
|
+ emit localeFileInfoReceived(result);
|
|
|
+ emit processFinished("getLocaleFileInfo", {"Success"});
|
|
|
}
|
|
|
|
|
|
-int Lotro::currentLocale() {
|
|
|
+void Lotro::getFileInfo(long long file_id) {
|
|
|
+ if (!tryToBlockFile())
|
|
|
+ return;
|
|
|
+
|
|
|
+ emit processStarted("getFileInfo", {file_id, locale});
|
|
|
|
|
|
+ auto getfile_op = file.GetFileSystem().GetFile(file_id);
|
|
|
+ if (!getfile_op.result) {
|
|
|
+ emit caughtError("getFileInfo", {"Файл не найден!", QString("Не удаётся найти файл с id ") + QString::number(file_id)});
|
|
|
+ emit processFinished("getFileInfo", {"Error"});
|
|
|
+ busy = false;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ LOTRO_DAT::SubFile subfile = *getfile_op.value;
|
|
|
+
|
|
|
+ QString result = "Locale file info:\n "
|
|
|
+ "dictionary_offset: " + QString::number(subfile.dictionary_offset()) + "\n"
|
|
|
+ "unknown1: " + QString::number(subfile.unknown1()) + "\n"
|
|
|
+ "file_id: " + QString::number(subfile.file_id()) + "\n"
|
|
|
+ "file_offset: " + QString::number(subfile.file_offset()) + "\n"
|
|
|
+ "file_size: " + QString::number(subfile.file_size()) + "\n"
|
|
|
+ "timestamp: " + QString::number(subfile.timestamp()) + "\n"
|
|
|
+ "version: " + QString::number(subfile.version()) + "\n"
|
|
|
+ "block_size: " + QString::number(subfile.block_size()) + "\n"
|
|
|
+ "unknown2: " + QString::number(subfile.file_id()) + "\n";
|
|
|
+
|
|
|
+ busy = false;
|
|
|
+ emit localeFileInfoReceived(result);
|
|
|
+ emit processFinished("getFileInfo", {"Success"});
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+bool Lotro::initialised() {
|
|
|
+ return file.Initialized();
|
|
|
}
|
|
|
|
|
|
-bool Lotro::patched() {
|
|
|
+int Lotro::currentLocale() {
|
|
|
+ return file.GetLocaleManager().GetCurrentLocale();
|
|
|
+}
|
|
|
|
|
|
+bool Lotro::notPatched() {
|
|
|
+ return file.GetStatusModule().CheckIfNotPatched();
|
|
|
}
|
|
|
|
|
|
+
|
|
|
bool Lotro::tryToBlockFile()
|
|
|
{
|
|
|
if (busy) {
|