# Конфигурация :muscle: --- Конфиги - * хранят данные игры * создаются разработчиками * меняются геймдизайнерами * используются и сервером, и клиентом --- ### Это база данных <br> игровых механик # :card_file_box: --- ## а еще это текстовые файлы, и поэтому --- ![git](https://techrocks.ru/wp-content/uploads/2019/04/59efwakoatqloh2tfq5j.png) --- * легко иметь несколько версий * легко скопировать и сделать новую запись * легко искать текст * легко смотреть историю * легко видеть авторство * легко отменить ошибочные изменения * не нужны бекапы --- а еще они в формате XML, для которого есть большое количество инструментов --- ![](https://i.imgur.com/ONY8lQi.jpg) --- но есть и темная сторона ![](https://cdn.shopify.com/s/files/1/0675/9839/products/swatch_evil_unicorn_bk_4b38f60d-e653-47a5-a678-8fea3fbcf29a.jpg?v=1417835874) --- * неоднородность форматов (xml, json) * неоднородность содержимого * нет информации о полях в файлах * не посчитать баланс * можно сделать неправильные записи и узнать об этом уже на проде * некоторые конфиги очень большие --- а еще git - это непросто --- Но все-таки git - это удобно, не нужно от него отказываться --- ![](https://i.imgur.com/t4kVdA3.png) --- ## Создание, заполнение ### и ## проверка --- # Создание --- ### Файлы Лучше придерживаться одного формата :handshake: XML --- ### Файлы Большие файлы можно разделить на маленькие, а потом собрать как было. Это удобнее при работе с git ``` battle_pass.xml ``` ``` battle_pass/ battle_pass_1.xml battle_pass_2.xml battle_pass_3.xml ``` --- # Заполнение :writing_hand: --- ## Гугл-документы :heart: но скрипты импорта и экспорта лучше хранить у нас --- Смелый эксперимент - приложение для десктопа (Electron) --- # Проверка :sleuth_or_spy: --- Конфиги - это база данных, и для нее можно использовать инструменты, которые есть в базах данных --- # XML Schema формат `xsd` --- #### XML Schema * Стандарт * Не зависит от языка и платформы * Есть готовые инструменты --- #### Типы данных ```xml <xs:complexType name="ResourceType"> <xs:choice maxOccurs="unbounded"> <xs:element name="type" type="xs:string"/> <xs:element name="count" type="xs:integer"/> <xs:element name="itemId" type="xs:integer"/> </xs:choice> </xs:complexType> ``` --- #### Типы данных * Числа * Строки * Даты * Сложные типы * Ограничения на типы --- #### Проверка уникальности ```xml <xs:unique name="UniqueBankOfferId"> <xs:selector xpath="offer"/> <xs:field xpath="@id"/> </xs:unique> <xs:unique name="UniquePackageId"> <xs:selector xpath="offer"/> <xs:field xpath="packageId"/> </xs:unique> ``` --- #### Описание и документация <!-- Объекты, типы, отдельные поля --> ```xml <xs:annotation> <xs:documentation> Что-то, что можно положить в инвентарь. </xs:documentation> </xs:annotation> ``` --- #### Внешние ссылки ```sql ALTER TABLE crafts.xml ADD FOREIGN KEY (itemId) REFERENCES items.xml (id) ``` --- #### Внешние ссылки Увы, проверки внешних ссылок нет в стандарте XML Schema --- Проверки можно запускать через Gitlab Pipeline ![](https://i.imgur.com/t78HQYg.png) --- Смелый эксперимент - генерация кода из схемы --- ## Конфигурация - ### отдельный компонент --- * Свой релизный цикл * Свои ответственные * Свои правила --- :house: ## Свой репозиторий * Нет конфликтов с серверным кодом * Проще делать merge --- ## В итоге * Отдельный репозиторий, git для хранения * XML Schema для описания и проверки * 2 смелых эксперимента Спасибо!
{"metaMigratedAt":"2023-06-15T12:38:17.225Z","metaMigratedFrom":"YAML","title":"Конфигурация","breaks":true,"contributors":"[{\"id\":\"4e26b559-162b-4f85-ad1a-424e3bb43fb6\",\"add\":5704,\"del\":2132}]"}
    190 views