Jump to content
Korean Random
sirmax

Формат подстановок конфига

Recommended Posts

Устаревшее начало обсуждения:
Так как сейчас конфиг уже становится неуправляемым, нужно расширять его формат.
Самыми важными, на мой взгляд, являются два требования:
1. Разделение конфига на несколько файлов.
2. Подстановка повторяющихся значений.
При этом желательно сохранить обратную совместимость с текущим конфигом.
Реализовано с версии 4.0.0-alpha1

 

Информация
Формат подстановок:

1. Сокращенный:
"param": ${"file/name":"obj.path"}

2. Полный:
"param": {
  "$ref": { "file": "file/name", "path": "obj.path" },
  "subparam": "overrided value"

}
file и subparam - не обязательны. Если file не указан, то используется текущий файл


К сожалению, JSON не поддерживает ссылки, поэтому есть несколько возможных вариантов:
1. Использовать XML.
      + есть ссылки
      + есть схема
      - не удобен в редактировании
      - не удобен в использовании
      - нет обратной совместимости
2. Использовать YAML.
     + есть ссылки
     + удобен в редактировании
     - не удобен в использовании (нужно искать/писать парсер на AS2)
     - пользователям необходимо переучиваться
     - нет обратной совместимости
3. Сделать собственное расширение JSON.
     + легко переучиться
     + можно оставить обратную совместимость
     - необходимо придумывать и реализовывать самим 
 
Думаю, стоит рассмотреть внимательно 3 вариант, если он подойдет, то на нем и остановимся.
 
Во всех случаях будут проблемы с онлайн-редактором, и у меня нет представления как это решать. Проблемы начинаются уже с того, что загрузить можно только один файл за раз.
 
Так же предлагаю ввести новое расширение файла конфига XVM: .xc
Основной файл конфига будет называться xvm.xc
 
Вот что у меня получается на данный момент:
 
Вводим только одно расширение формата JSON:
    value => ref
    ref :== ${ref_expr}
    ref_expr :== ["module-name":]"obj-path"
    module-name - название подключаемого файла (опционально)
    obj-path - путь к подставляемому объекту. Если module-name не указан, то берем из текущего файла. Если obj-path равен ".", то подставляется корневой объект.
 
Пример:
battle.xc
 
/**
* Общие параметры боевого интерфейса
*/
{
  "battle": {
    "mirroredVehicleIcons": true,           // false - отключить зеркалирования иконок танков (полезно для альтернативных иконок). По умолчанию включено.
    "showPostmortemTips": true,             // false - отключить всплывающую внизу панель после смерти. По умолчанию включено.
    "removePanelsModeSwitcher": false,      // true - убрать переключатель режимов ушей мышкой
    "highlightVehicleIcon": true,           // false - отключить подсветку иконки своего танка и взвода
    "clockFormat": "H:N",                   // Формат часов на экране панели отладки (возле FPS). Формат: Y:год, M:месяц, D:день, H:часы, N:минуты, S:секунды. "" - убрать часы.
    "useStandardMarkers": false,            // true - использовать стандартные маркеры клиента
    "clanIconsFolder": "../../../clanicons" // путь к папке иконок кланов относительно res_mods/[ВЕРСИЯ ИГРЫ]/gui/flash
  }
}

 
hotkeys.xc
 

/**
* Специальные горячие клавиши XVM
*/
{
  // onHold: произвести действие по разовому нажатию клавиши или по удержанию
  // Значения кодов можно посмотреть здесь:
  // http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes
  // Ctrl - 17, X - 88, C - 67
  "minimapZoom": { "enabled": true, "onHold": true, "keyCode": 17 }
}

 
battleLoading.xc
 

/**
*
*/
{
  "def": {
    "format": "<font color='{{c:kb}}'>{{kb:3}}</font> <font color='{{c:xwn}}'>{{xwn}}</font> <font color='{{c:rating}}'>{{rating}}</font>",
  },
  // Параметры экрана загрузки боя
  "battleLoading": {
    "clockFormat": "H:N:S",                     // Формат часов на экране загрузки боя. Формат: Y:год, M:месяц, D:день, H:часы, N:минуты, S:секунды. "" - убрать часы.
    "showChances": false,                       // true - включить отображение шансов на победу (только с xvm-stat) Прочитать подробней: http://www.koreanrandom.com/forum/topic/1663-
    "showChancesExp": false,                    // Показывать экспериментальную формулу расчета шансов
    "removeSquadIcon": false,                   // true - убрать отображение иконки взвода. На пустое поле можно вывести, например, иконку клана.
    // параметры отображения иконки игрока/клана
    "clanIcon": ${"defines.xc":"clanIcon"},
    // Формат отображения для левой панели (допускаются макроподстановки, см. readme-ru.txt)
    "formatLeft": ${"def.format"},
    // Формат отображения для правой панели (допускаются макроподстановки, см. readme-ru.txt)
    "formatRight": ${"def.format"}
  }
}

 
xvm.xc:
 

/**
* Полный конфигурационный файл (далее - конфиг) со всеми возможными опциями,
* настроенными по умолчанию.
*/
{
  "configVersion": "1.5.0", // Версия конфига. Не удаляйте и не изменяйте её без необходимости.
  "editorVersion": "0.41",  // Версия редактора.
  // Блок общих параметров конфига. Все параметры информационные, в моде не используются.
  "definition": {
    "author": "sirmax2",                        // автор конфига
    "description": "Default settings for XVM",  // описание конфига
    "url": "http://code.google.com/p/wot-xvm/", // адрес, где выкладываются обновления конфига
    "date": "15.04.2013",                       // дата последней модификации конфига
    "gameVersion": "0.8.5",                     // поддерживаемая версия игры
    "modMinVersion": "3.5.0"                    // минимально необходимая версия мода XVM
  },
  // Блок общих параметров боевого интерфейса
  "battle": ${"battle.xc":"battle"},
  // Специальные горячие клавиши XVM
  "hotkeys": ${"hotkeys.xc":"."},
  // Окно взвода
  "squad": ${"squad.xc":"squad"},
  // Параметры экрана загрузки боя
  "battleLoading": ${"battleLoading.xc":"battleLoading"},
  // Параметры окна статистики по клавише Tab
  "statisticForm": ${"statisticForm.xc":"statisticForm"},
  // Параметры панелей игроков ("ушей")
  "playersPanel": ${"playersPanel.xc":"playersPanel"},
...

 
Так же, новые конфиги переносим в папку res_mods/xvm/, там же будут лежать и все остальные файлы, необходимые для XVM - картинки, например.

 

Upd:

Добавил давнюю хотелку по подстановке значений из конфига в строке. Реализовано через макрос {{.}}.
Например, есть конфиг:

{
  "my": {
    "value": "X"
  },
  ...
}

Чтобы подставить значение, необходимо написать макрос:

"My value is: {{.my.value}}

Единственное ограничение - пути должны указываться от корня конфига, а не от текущей секции конфига. То есть если "my" определена в файле "texts.xc", то макрос будет {{.texts.my.value}}.
Макрос статический, так что на производительность сильно влиять не должен, но нужно проверять.
Вложенные макросы должны работать (не проверял).
Возможности открываются безграничные - как минимум, можно делать свои собственные секции texts, и указывать, например:

"<font face='xvm'>{{.def.texts.xvmuser.{{xvm-user}}}}</font>
  • Upvote 9

Share this post


Link to post

Short link
Share on other sites

@sirmax, хочу строку для тестового конфига.

Суть: если файл есть, он загружается, нет - загружается следующая строчка. Навеяно постоянными тестами конфигов пользователей с необходимостью переименования своего.

Edited by Mr A

Share this post


Link to post

Short link
Share on other sites

После обновления из XVM-4.0.0-alpha2 на XVM-4.0.0-alpha3 делаю правки в конфигах но в игре нет изменений

http://www.koreanrandom.com/forum/topic/3173-%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-test-400-alpha3/page-8?do=findComment&comment=60994

Share this post


Link to post

Short link
Share on other sites

Как использовать старый конфиг?

Свой XVM.xvmconf переносим в \res_mods\xvm\configs\
В xvm.xc добавляем: ${"configs/XVM.xvmconf":"."}
Должно получится так

/**
* load config:
* configs/default/@xvm.xc - path and file name of config
* . - root object
*/
//${"configs/sirmax.xc":"."}
${"configs/XVM.xvmconf":"."}
//${"configs/default/@xvm.xc":"."}
Edited by Mr A
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Свой XVM.xvmconf переносим в \res_mods\xvm\configs\

В xvm.xc добавляем: ${"configs/XVM.xvmconf":"."}

Должно получится так

еще проще - переименовать свой конфиг и заменить xvm.xc.

Edited by Mr A

Share this post


Link to post

Short link
Share on other sites

 

Как использовать старый конфиг?

Свой XVM.xvmconf переносим в \res_mods\xvm\configs\

В xvm.xc добавляем: ${"configs/XVM.xvmconf":"."}

Должно получится так





/**
* load config:
* configs/default/@xvm.xc - path and file name of config
* . - root object
*/
//${"configs/sirmax.xc":"."}
${"configs/XVM.xvmconf":"."}
//${"configs/default/@xvm.xc":"."}

Всё сделал как описано выше не работает маркеры не мои 

Мой конфиг XVM.xvmconf

Share this post


Link to post

Short link
Share on other sites

Всё сделал как описано выше не работает маркеры не мои 

Мой конфиг attachicon.gifXVM.xvmconf

Скорее всего не верный путь к файлу XVM.xvmconf

 

Что мешает переименовать старый конфиг в res_mods\xvm\XVM.xc

Share this post


Link to post

Short link
Share on other sites

Решил переходить на новый конфиг и решил разобратся какой файл за что отвечает и подписать и разобратся

'readme.txt'

\markers                                                     // Блок маркеров над танками.
\markers\markersAliveExtended.xc              // союзник-противник/живой/расширенный режим (c Alt)
\markers\markersAliveNormal.xc                  // союзник-противник/живой/нормальный режим (без Alt)
\markers\markersDeadExtended.xc             // союзник-противник/мертвый/расширенный режим (c Alt)
\markers\markersDeadNormal.xc                // союзник-противник/мертвый/нормальный режим (без Alt)
\minimap                                                   // Миникарта
\minimap\minimap.xc                                   // Миникарта
\minimap\minimapCircles.xc                        // Круги дальности. Дистанция только в реальных метрах карты. Только для своей техники.
\minimap\minimapLabels.xc                        // Текстовые поля. Поддерживают HTML.
\minimap\minimapLines.xc                          // Линии. Только для своей техники.
\@xvm.xc                                                 // Полный конфигурационный файл (далее - конфиг) со всеми возможными опциями, настроенными по умолчанию.
\alpha.xc                                                  // Настройки динамической прозрачности
\battle.xc                                                  // Общие параметры боевого интерфейса
\battleLoading.xc                                     // Параметры экрана загрузки боя(? зачем вынесли в defines.xc formatLeft/formatRight гдето еще используются?)
\captureBar.xc                                         // Полоса захвата
\colors.xc                                                 // Настройки цветов
\colorsDamage.xc                                   // Цвет для отлетающего урона
\defines.xc                                              //? formatLeft/formatRight из battleLoading.xc // Параметры отображения иконки игрока/клана // всплывающий урон
\finalStatistic.xc                                       // Параметры окна послебоевой статистики
\hangar.xc                                               // Ангар (пинг на сервера/Окно достижений)
\hitLog.xc                                                // Лог попаданий (счетчик своих попаданий)
\hotkeys.xc                                             // Специальные горячие клавиши XVM
\iconset.xc                                              // Наборы иконок
\playersPanel.xc                                    // Параметры панелей игроков ("ушей")(? def.nick, def.vehicle)
\rating.xc                                                // Управление статистикой
\squad.xc                                               // Окно взвода
\statisticForm.xc                                    // Параметры окна статистики по клавише Tab
\texts.xc                                                 // Текстовые подстановки для макроса {{vtype}}
\turretMarkers.xc                                   // Отображаемые строки {{turret}} маркера(Сток/башня-орудие)
\vehicleNames.xc                                  // Замена названий танков.

 

и так чуть разобрался но возникли вопросы:

\battleLoading.xc                                     // Параметры экрана загрузки боя(? зачем вынесли в defines.xc formatLeft/formatRight гдето еще используются?)

зачем вынесли в defines.xc formatLeft/formatRight гдето еще используются?

 

\defines.xc                                              //? formatLeft/formatRight из battleLoading.xc // Параметры отображения иконки игрока/клана // всплывающий урон

вообще не понял зачем файл все в разнабой собрано

например // Параметры отображения иконки игрока/клана можно было в  \iconset.xc

потом formatLeft/formatRight вернуть в battleLoading.xc

и какраз останется // всплывающий урон

 

 

\playersPanel.xc                                    // Параметры панелей игроков ("ушей")(? def.nick, def.vehicle)

тут вообще я запутался где эта хрень def.nick, def.vehicle

p/s на момент написания нашол "def": { но так и не понял зачем вообще внутрений макрос если уши разные и подстановка одинакового не уместна

сама мысль написания внутрених макросов интересна

readme.txt

Edited by Alastanka
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

@Alastanka, рановато доки писать. В активной разработке структура сейчас.

Share this post


Link to post

Short link
Share on other sites

\battleLoading.xc                                     // Параметры экрана загрузки боя(? зачем вынесли в defines.xc formatLeft/formatRight где то еще используются?) зачем вынесли в defines.xc formatLeft/formatRight где то еще используются?

 

 

В  statisticForm.xc.

но так и не понял зачем вообще внутрений макрос если уши разные и подстановка одинакового не уместна

Да с твоим конфом так не получится (сам юзаю его). Я просто поделил твой конфиг с правками и все. Так что ждемс релиза.

Edited by Tiger.t600

Share this post


Link to post

Short link
Share on other sites

 

Как использовать старый конфиг?

Свой XVM.xvmconf переносим в \res_mods\xvm\configs\

В xvm.xc добавляем: ${"configs/XVM.xvmconf":"."}

Должно получится так

/**
* load config:
* configs/default/@xvm.xc - path and file name of config
* . - root object
*/
//${"configs/sirmax.xc":"."}
${"configs/XVM.xvmconf":"."}
//${"configs/default/@xvm.xc":"."}

Этот метод не работает, если свой конфиг сокращенный.

Share this post


Link to post

Short link
Share on other sites

 

Этот метод не работает, если свой конфиг сокращенный.

должно работать.

Share this post


Link to post

Short link
Share on other sites

Не работает на третье альфе. Что ещё кроме лога надо?

XVM.log

Share this post


Link to post

Short link
Share on other sites

Не работает на третье альфе. Что ещё кроме лога надо?

2013.05.04 09:21:06 [H:003] Error loading config file 'xvm.xc': file is missing: XVM.xvmconf

Что-то не так с конфигом сделали походу. 

Share this post


Link to post

Short link
Share on other sites

/**
* load config:
* configs/default/@xvm.xc - path and file name of config
* . - root object
*/
//${"configs/sirmax.xc":"."}
//${"configs/default/@xvm.xc":"."}
${"configs/XVM.xvmconf":"."}

XVM.xvmconf

Share this post


Link to post

Short link
Share on other sites

newoW, я если честно еще с этим новым форматом не разбирался:) так что помочь не смогу:( 

Share this post


Link to post

Short link
Share on other sites
Этот метод не работает, если свой конфиг сокращенный.
 

Что именно не работает. Испытал ваш конф все работает.

Share this post


Link to post

Short link
Share on other sites

1. xvm.xс лежит в c:\Games\World_of_Tanks\res_mods\xvm\

2. XVM.xvmconf лежит в c:\Games\World_of_Tanks\res_mods\xvm\configs\

3. post-8476-0-92389600-1367664467_thumb.jpg

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...