#ifndef LOTRO_DAT_LIBRARY_DATLOCALEMANAGER_H #define LOTRO_DAT_LIBRARY_DATLOCALEMANAGER_H #include #include #include #include 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(); LOCALE GetCurrentLocale(); bool CheckLocaleCorrect(); void UpdateLocaleFile(LOCALE locale, const SubFile &file); DatOperationResult 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); private: std::map &GetLocaleDictReference(LOCALE locale); private: DatFile *dat; std::map orig_dict_; std::map patch_dict_; std::set inactive_categories; LOCALE current_locale_; }; } }; #endif //LOTRO_DAT_LIBRARY_DATLOCALEMANAGER_H