Mod Config Menu
Вступление;
Mod Config Menu - библиотека, менеджер конфигураций мода созданный с нуля. Идейный наследник Mod Options (Build 41) , который несмотря на невероятную популярность, увы, заброшен разработчиком, но комрадэ mezz не растерялся и решил запилить свой с блекджеком и расширенными настройками песочницы, получиться ли у него? узнаете в следующей серии время покажет. Библиотеки могут существовать в одной сборке не конфликтуя, однако Config Menu требует от авторов модов другой настройки.
Моды используют:
Внедрение MCM в ваш мод:
Очень простая структура реализации MCM могла бы выглядеть следующим образом:
local MyModVariable = 12.5
if Mod.IsMCMInstalled_v1 then
-- initialize the main mod option table
local MyModOptions = ModOptionTable:New("MyMod", "My cool mod [-|-]/", false)
-- Add options
MyModOptions:AddModOption("MyModVariable", "number_slider", MyModVariable, { min = 1, max = 20, step = 0.5}, "My Setting", "This setting does this and that", function(value)
MyModVariable = value
end)
end
Разберем подробнее:
if Mod.IsMCMInstalled_v1 then
-- ...
end
Если это не так, остальная часть кода MCM просто не будет запущена, но ваш мод все равно сможет функционировать должным образом, он просто не будет настраиваться, и все переменные сохранят значение, которое вы им изначально присвоили. Однако, если MCM присутствует, то следующим шагом будет создание таблицы опций для вашего мода:
-- function ModOptionTable:New(Mod_id, DisplayStr, bExtraTab)
local MyModOptions = ModOptionTable:New("MyMod", "My cool mod [-|-]/", false)
Рассмотрим отдельные аргументы:
"Mod_id" - это уникальный идентификатор, который MCM использует для отслеживания вашего мода и данных, которые он сохраняет для вас. Вам нужно только убедиться, что вы выбрали уникальный идентификатор, который не будет конфликтовать с каким-либо другим модом. Изменение идентификатора заставит MCM "забыть" о любых данных, которые он мог сохранить о вашем моде.
"DisplayStr" - это строка, которая будет отображаться в самом верху вашего раздела опций.
"bExtraTab" - Если установлено значение "true" , то ваш мод получит свою собственную вкладку на экране опций, вместо того, чтобы делиться одной страницей с другими модами. Это имеет смысл для больших модов с подавляющим количеством опций, но в остальном вы должны оставить значение "false".
-- function ModOptionTable:AddModOption(Option_id, Option_type, DefaultValue, OptionData, DisplayStr, TooltipStr, CommitValueFunc)
MyModOptions:AddModOption("MyModVariable", "number_slider", MyModVariable, { min = 1, max = 20, step = 0.5}, "My Setting", "This setting does this and that", function(value)
MyModVariable = value
end)
"AddModOption" - это функция, которая описывает элемент пользовательского интерфейса, который может использоваться для управления значением переменной.
"Option_id" - это еще один идентификатор, который должен быть уникальным, однако он должен быть уникальным только в вашем собственном моде.
"Option_type" - определяет, каким типом элемента пользовательского интерфейса будет этот параметр, есть несколько вариантов на выбор для разных целей, мы рассмотрим их позже.
"defaultValue" - устанавливает начальное значение вашего параметра, удобнее всего просто поместить здесь переменную, которой вы хотите, чтобы MCM манипулировал, и вместо этого поместить туда ваше значение по умолчанию.
"OptionData" - предоставляет дополнительные данные для управления поведением вашего элемента пользовательского интерфейса. Это сильно зависит от того, какой тип пользовательского интерфейса вы выбрали, некоторым вообще не требуются какие-либо OptionData, и в этом случае вы можете оставить этот аргумент равным "nil". Об остальном мы поговорим позже.
"DisplayStr" - это название опции, которую пользователи будут видеть на своем экране.
"TooltipStr" - содержимое будет отображаться, когда пользователь наведет курсор мыши на ваш параметр.
"CommitValueFunc" - это функция, которая будет вызвана, когда пользователь обработает ваш параметр. Вы можете использовать его, чтобы напрямую присвоить вашей переменной значение, которое возвращает MCM.
И это в значительной степени все. Основной процесс создания каждого варианта включает в себя одну и ту же функцию, пока у вас не будет всего, что вам нужно.
"text" - текстовое поле, в которое вы можете вводить любые строки.
Тип значения: Строка
Параметры: ноль
"number" - Текст который принимает только числовое значение.
Value Type: Число
Optiondаta: Таблица со следующей структурой
{
(необязательно) min = [Нижняя граница допустимых значений]
(необязательно) max = [Верхняя граница допустимых значений]
(необязательно) step = [Число, на которое должны быть кратны все введенные числа, при необходимости они будут округлены. Установите значение 1, чтобы разрешать только целые числа]
}
"number_slider" - Ползунок, который можно перетаскивать с помощью мыши для получения числовых значений
Value Type: Число
Optiondаta: то же, что и "номер", но все поля обязательны! для определения
"checkbox" - Единственный флажок, который может быть как отмечен, так и не отмечен
Value Type: Boolean
Optiondаta: nil
"checkbox_multi"- массив флажков, каждый со своим собственным значением
Тип значения: Таблица логических значений, соответствующих одному флажку для каждого
Данные опции: Таблица со строками, содержащая метки для каждого отдельного флажка
"color" - A color picker
Value Type: Table with following structure
{
(mandatory) r = [Number from 0 to 1]
(mandatory) g = [Number from 0 to 1]
(mandatory) b = [Number from 0 to 1]
}
Optiondаta: nil
"combobox" - A dropdown menu offering a finite amount of choices
Value Type: Number (to use as an index in your own code)
Optiondаta: Table with Strings, containing the labels for each individual dropbox entry
"keybind" - A special option, that doesn't return a value when set in the options menu, but invokes the function in "CommitValueFunc" when the user presses the associated key.
DefaultValue: Key code to bind action to initially.
Optiondаta: nil
CommitValueFunc: Function to run when key is pressed.
Add Mode Option Table - это синтаксическая альтернатива Add Mod Option, которая принимает таблицу вместо свободных аргументов:
local Option = {}
Option.Option_id = "MyModVariable"
Option.Option_type = "number_slider"
Option.DefaultValue = MyModVariable
Option.OptionData = { min = 1, max = 20, step = 0.5}
Option.DisplayStr = "My Setting"
Option.TooltipStr = "This setting does this and that"
Option.CommitValueFunc = function(value) MyModVariable = value end
MyModOptions:AddModOptionTable(Option)
Использование этого параметра по сути идентично опции Add Mode, это просто другой способ передачи той же информации в MCM, что в некоторых случаях может быть более удобным.
Установка & добавление мода в сохранённую игру: подробнее здесь.