Mod Config Menu

Project Zomboid v.3 от 04.08.2023 PZмоды, PZбиблиотека


Вступление;

Mod Config Menu - библиотека, менеджер конфигураций мода созданный с нуля. Идейный наследник Mod Options (Build 41) , который несмотря на невероятную популярность, увы, заброшен разработчиком, но комрадэ mezz не растерялся и решил запилить свой с блекджеком и расширенными настройками песочницы, получиться ли у него? узнаете в следующей серии время покажет. Библиотеки могут существовать в одной сборке не конфликтуя, однако Config Menu требует от авторов модов другой настройки.

В архиве предоставлен тестовый мод , как пример, смело используйте реализованные в ней решения для своих нужд.

Моды используют:

  1. Generator Time Remaining - Время работы генератора
  2. ...

Внедрение 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.

AddModOptionTable

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, что в некоторых случаях может быть более удобным.

Установка & добавление мода в сохранённую игру: подробнее здесь.

Mod Config Menu


Назад  Вперед


Яндекс Браузер
Похожие материалы
мод Improved Hair Menu
25-04-2023, 10:08, Project Zomboid
Mod Config Enforcer
8-04-2021, 21:33, Valheim

Соблюдай правила, не стесняйся спрашивать и комментировать. Вступай в дисскусию нашего королевства Модляндия.

Стоит ли нам выкладывать моды для Satisfactory?