Добро пожаловать на Lesta Games Wiki!
/
ModsettingsAPI

ModsettingsAPI — различия между версиями

Перейти к: навигация, поиск
Версия 13:32, 16 мая 2018Версия 13:54, 16 мая 2018
Строка 195:Строка 195:
 :: # Имя переменной, соответствующей значению данного элемента :: # Имя переменной, соответствующей значению данного элемента
 :: 'varName': 'Dropdown1'  :: 'varName': 'Dropdown1'
 +:}
 +</div>
 +===Группа радио-кнопок===
 +*Возможность добавления подсказки
 +*Возможность добавления кнопки с действием
 +<div class="pre_code monospace">
 +:{
 +:: # Тип элемента
 +:: 'type': 'RadioButtonGroup',
 +:: # Заголовок, отображаемый над группой элементов
 +:: 'text': 'My RadioButtonGroup',
 +:: # Список кнопок
 +:: 'options': [
 +::: # Пункт группы с индексом 0
 +::: { 'label': 'RadioButton 1' },
 +::: # Пункт группы с индексом 1
 +::: { 'label': 'RadioButton 2' }
 +:: ],
 +:: # Стандартное значение. 0 - выбран первый элемент списка кнопок
 +:: 'value': 0,
 +:: # Имя переменной, соответствующей значению данного элемента
 +:: 'varName': 'RadioButtonGroup1'
 :} :}
 </div> </div>

Версия 13:54, 16 мая 2018

Внимание! Данная статья находится в процессе написания и не является финальной версией.

Общая информация

modsSettingsApi - модификация клиента игры World of Tanks, которая предоставляет сторонним модификациям программные функции для генерации удобного меню настроек.

Основной принцип работы мода заключается в следующем:

  1. При загрузке клиента игры modsSettingsApi загружает файл сохраненных настроек сторонних модов, при отсутствии такого файла - создает новый.
  2. Затем modsSettingsApi ожидает подключения к нему сторонних модов посредством вызова общедоступных функций.
  3. Для генерации меню настроек, сторонняя модификация должна отправить в modsSettingsApi некий шаблон, содержащий в себе описание необходимых для отображения графических элементов.
  4. Кроме шаблона сторонняя модификация должна отправить настройщику ссылку на функцию, которая будет вызываться при любом изменении настроек стороннего мода. При необходимости обработки нажатия доп кнопок модификация должна отправить настройщику ссылку на функцию, которая будет вызывается при нажатии на кнопку с передачей текущего значения.
  5. При изменении настроек modsSettingsApi будет вызывать переданный модификацией метод с новыми параметрами. При использовании кнопок, ModSettingsAPI будет вызывать переданный модификацией метод с текущим параметром и его значением.


Процесс подключения модификации к настройщику выглядит примерно следующим образом:

# Текстовый идентификатор мода.
# ! ДОЛЖЕН быть уникальным для каждого мода
modLinkage = 'myOwnMod'


# Словарь для хранения настроек мода
settings = { ... }


# Словарь с шаблоном стандартных настроек
template = { ... }


# Функция, которая будет вызываться настройщиком при изменении настроек мода.
# linkage - текстовый идентификатор мода,
# settings - словарь с новыми настройками
def onSettingsChanged(linkage, settings):
if linkage == modLinkage:
# ваш обработчик настроек


# Функция, которая будет вызываться настройщиком при клике по доп кнопкам.
# linkage - текстовый идентификатор мода
# varName - имя параметра
# value текущее значение параметра выбранное в интерфейсе
def onButtonClicked(linkage, varName, value):
if linkage == modLinkage:
# ваш обработчик настроек


try:
# Попытка импорта общей точки входа настройщика
from gui.modsSettingsApi import g_modsSettingsApi
# сначала необходимо запросить у настройщика сохраненные настройки
savedSettings = g_modsSettingsApi.getModSettings((modLinkage, ), template)
# если настройки имеются
if savedSettings:
# Применим их
settings = savedSettings
# Зарегистрируем функцию-обработчик новых настроек, и функцию-обработчик нажатий (если таковая имеется)
g_modsSettingsApi.registerCallback((modLinkage, ), onSettingsChanged, onButtonClicked)
# если настроек нет
else:
# Отправим в настройщик шаблон стандартных настроек, функцию-обработчик новых настроек, и функцию-обработчик нажатий (если таковая имеется)
settings = g_modsSettingsApi.setModTemplate((modLinkage, ), template, onSettingsChanged, onButtonClicked)
except:
# Если попытка импорта не удалась
# Используем стандартные настройки мода или загружаем их из самописного конфига
pass

При изменении настроек в функцию-обработчик новых настроек отправляются текстовый идентификатор мода и его новые настройки в виде словаря. Названия переменных (varName) указываются в шаблоне.

onSettingsChanged(linkage, settings)
linkage # 'myOwnMod'
settings # { 'varName': 'varValue', 'varName1': 'varValue1' }

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

onButtonClicked(linkage, varName, value)
linkage # 'myOwnMod'
varName # 'varName'
value # 'varValue'

Общие положения при создании шаблона.

Каждый шаблон - это словарь с обязательными полями. В чистом виде он выглядит так:

template = {


# Отображаемое имя модификации
'modDisplayName': 'Название модификации',


# Версия шаблона. При любых изменениях нуждается в изменении
'settingsVersion': 0,


# Статус модификации. Активирована она в настройщике или нет
'enabled': True,


# Первая колонка отображаемых элементов.
# Отрисовка графических элементов начинается с X = 0
'column1': [ ],


# Вторая колонка отображаемых элементов.
# Отрисовка графических элементов начинается с X = ШИРИНА_ОКНА / 2
'column2': [ ]
}

Для добавления полей для отображения в списки 'column1' и 'column2' добавляются словари, содержащие в себе описания элементов для отображения.
Для добавления динамических кнопок к элементам используются настройки внутри параметра "button". Динамические кнопки можно добавлять только к элементам с пометкой "Возможность добавления кнопки с действием". Более детальный разбор смотрите после списка элементов.
Для добавления всплывающих подсказок к элементам используется параметр "tooltip". Всплывающие подсказки можно добавлять только к элементам с пометкой "Возможность добавления подсказки". Более детальный разбор смотрите после списка элементов.

Список элементов для отображения

Надпись

  • Возможность добавления подсказки.
{
# Тип элемента
'type': 'Label',
# Отображаемый текст
'text': 'My Label'
}

Чекбокс

  • Возможность добавления подсказки
  • Возможность добавления кнопки с действием
{
# Тип элемента
'type': 'CheckBox',
# Текст, отображаемый рядом с чекбоксом
'text': 'My CheckBox',
# Стандартное значение. True - галочка стоит, False - отсутствует
'value': True,
# Имя переменной, соответствующей значению данного элемента
'varName': 'CheckBox1'
}

Хоткей

  • Возможность добавления подсказки
{
# Тип элемента
'type': 'HotKey',
# Текст, отображаемый слева от элемента ввода
'text': 'My HotKey',
# Стандартное значение. Число обозначающее кнопку (смотрите дополнение с кнопками)
'value': [Keys.KEY_Q],
# Имя переменной, соответствующей значению данного элемента
'varName': 'HotKey1'
}

Слайдер

  • Возможность добавления подсказки
  • Возможность добавления кнопки с действием
{
# Тип элемента
'type': 'Slider',
# Заголовок, отображаемый над слайдером
'text': 'My Slider',
# Минимальное значение слайдера
'minimum': 1,
# Максимальное значение слайдера
'maximum': 15,
# Шаг слайдера
'snapInterval': 1,
# Стандартное значение. Minimum - ползунок слайдера вначале, Maximum - ползунок слайдера в конце
'value': 5,
# Формат строки, отображаемой рядом со слайдером и показывающей его значение. {{{1}}} - заменяется на значение слайдера
'format': '{{{1}}}',
# Имя переменной, соответствующей значению данного элемента
'varName': 'Slider1'
}

Выпадающий список

  • Возможность добавления подсказки
  • Возможность добавления кнопки с действием
{
# Тип элемента
'type': 'Dropdown',
# Заголовок, отображаемый над выпадающим списком
'text': 'My Dropdown',
# Пункты меню
'options': [
# Пункт меню с индексом 0
{ 'label': 'Dropdown 1' },
# Пункт меню с индексом 1
{ 'label': 'Dropdown 2' }
],
# Ширина выпадающего списка
'width': 200,
# Индекс выбранного элемента. 0 - выбран первый элемент списка
'value': 0,
# Имя переменной, соответствующей значению данного элемента
'varName': 'Dropdown1'
}

Группа радио-кнопок

  • Возможность добавления подсказки
  • Возможность добавления кнопки с действием
{
# Тип элемента
'type': 'RadioButtonGroup',
# Заголовок, отображаемый над группой элементов
'text': 'My RadioButtonGroup',
# Список кнопок
'options': [
# Пункт группы с индексом 0
{ 'label': 'RadioButton 1' },
# Пункт группы с индексом 1
{ 'label': 'RadioButton 2' }
],
# Стандартное значение. 0 - выбран первый элемент списка кнопок
'value': 0,
# Имя переменной, соответствующей значению данного элемента
'varName': 'RadioButtonGroup1'
}