DatLocaleManager.h 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #ifndef LOTRO_DAT_LIBRARY_DATLOCALEMANAGER_H
  2. #define LOTRO_DAT_LIBRARY_DATLOCALEMANAGER_H
  3. #include <memory>
  4. #include <map>
  5. #include <DatOperationResult.h>
  6. #include <set>
  7. extern "C++" {
  8. namespace LOTRO_DAT {
  9. class DatFile;
  10. class SubFile;
  11. /*!
  12. * \brief Модуль работы с локалями
  13. * \author Gi1dor
  14. * \date 06.07.2018
  15. *
  16. * Класс для работы с искуственно внедряемымыми в dat контейнер копиями файлов. Позволяет независимо хранить
  17. * информацию о двух версиях каждого файла, которую можно подставлять в файловую систему.
  18. * В рамках русификации хранит информацию об оригинальной и русифицированной версии тех файлов, для которых
  19. * существует русификация.
  20. *
  21. * \warning Данные локалей чувствительны к обновлениям игры и могут быть стёрты после них!
  22. * \warning Объекты этого класса не должны создаваться отдельно! Созданием и управлением ими занимается класс DatFile
  23. */
  24. class DatLocaleManager {
  25. public:
  26. enum LOCALE : int {
  27. ORIGINAL = 0,
  28. PATCHED = 1
  29. };
  30. DatLocaleManager() = delete;
  31. DatLocaleManager(const DatLocaleManager &other) = delete;
  32. DatLocaleManager &operator=(const DatLocaleManager &other) = delete;
  33. ~DatLocaleManager() = default;
  34. explicit DatLocaleManager(DatFile *datFilePtr);
  35. DatOperationResult<> Init();
  36. DatOperationResult<> SetLocale(LOCALE locale);
  37. DatOperationResult<> DeInit();
  38. LOCALE GetCurrentLocale();
  39. bool CheckLocaleCorrect();
  40. void UpdateLocaleFile(LOCALE locale, const SubFile &file);
  41. DatOperationResult<SubFile> GetLocaleFile(long long file_id, LOCALE locale);
  42. void PrintInformaion(FILE *file);
  43. private:
  44. std::map<long long, SubFile> &GetLocaleDictReference(LOCALE locale);
  45. private:
  46. DatFile *dat;
  47. std::map<long long, SubFile> orig_dict_;
  48. std::map<long long, SubFile> patch_dict_;
  49. std::set<long long> inactive_categories;
  50. LOCALE current_locale_;
  51. };
  52. }
  53. };
  54. #endif //LOTRO_DAT_LIBRARY_DATLOCALEMANAGER_H