12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #ifndef LOTRO_DAT_LIBRARY_DATLOCALEMANAGER_H
- #define LOTRO_DAT_LIBRARY_DATLOCALEMANAGER_H
- #include <memory>
- #include <map>
- #include <set>
- #include "../DatOperationResult.h"
- extern "C++" {
- namespace LOTRO_DAT {
- class DatFile;
- class SubFile;
- /*!
- * \brief Модуль работы с локалями
- * \author Gi1dor
- * \date 06.07.2018
- *
- * Класс для работы с искуственно внедряемымыми в dat контейнер копиями файлов. Позволяет независимо хранить
- * информацию о двух версиях каждого файла, которую можно подставлять в файловую систему.
- * В рамках русификации хранит информацию об оригинальной и русифицированной версии тех файлов, для которых
- * существует русификация.
- *
- * \warning Данные локалей чувствительны к обновлениям игры и могут быть стёрты после них!
- * \warning Объекты этого класса не должны создаваться отдельно! Созданием и управлением ими занимается класс DatFile
- */
- class DatLocaleManager {
- friend class DatStatus;
- public:
- enum LOCALE : int {
- ORIGINAL = 0,
- PATCHED = 1
- };
- DatLocaleManager() = delete;
- DatLocaleManager(const DatLocaleManager &other) = delete;
- DatLocaleManager &operator=(const DatLocaleManager &other) = delete;
- ~DatLocaleManager() = default;
- explicit DatLocaleManager(DatFile *datFilePtr);
- DatOperationResult<> Init();
- DatOperationResult<> SetLocale(LOCALE locale);
- DatOperationResult<> DeInit();
- DatOperationResult<> CommitLocales();
- LOCALE GetCurrentLocale();
- bool CheckLocaleCorrect();
- void UpdateLocaleFile(LOCALE locale, const SubFile &file);
- DatOperationResult<SubFile> GetLocaleFile(long long file_id, LOCALE locale);
- void PrintInformaion(FILE *file);
- bool CategoryIsInactive(long long category);
- void UpdateCategory(long long file_id, long long category);
- DatOperationResult<> EnableCategory(long long category);
- DatOperationResult<> DisableCategory(long long category);
- const std::set<long long>& GetInactiveCategories();
- private:
- std::map<long long, SubFile> &GetLocaleDictReference(LOCALE locale);
- void ClearData();
- private:
- DatFile *dat;
- std::map<long long, SubFile> orig_dict_;
- std::map<long long, SubFile> patch_dict_;
- std::set<long long> inactive_categories;
- LOCALE current_locale_;
- uint64_t dict_offset_ = 0;
- uint64_t dict_size_ = 0;
- };
- }
- };
- #endif //LOTRO_DAT_LIBRARY_DATLOCALEMANAGER_H
|