🔥 [IGS] Активация предмета с нужным параметром

Можно ли силами автодоната передавать при активации предмета каки-либо параметры от клиента?
Например:

Есть привилегия “Запустить ивент на сервере”
Игрок приобретает себе в инвентарь эту привилегию.
Когда ему необходимо - активирует предмет и выбирает “параметр” названия ивента из базы.
Запускается нужный ивент.

Вместо ивента может быть что угодно (телепортация в выбранную точку из списка, смена профессии по выбору и т.п.). Чтобы не создавать кучу привилегий под каждый “выбор игрока”, а использовать одну, где игрок может сам выбрать.

Кто-то пытался реализовать что-то подобное? Или писать с нуля, прикручивая вручную этот интерфейс?

Привет. Это делается посредством сторонних интерфейсов. Идея с ивентами реализуется примерно так (но не только так)

Игрок покупает предмет “event_request” с :SetTerm(1). В SetOnActivate ему отправляет предложение ввести команду, которая открывает менюшку с выбором ивента (можно даже примитивную модалку подобную до Derma_StringRequest). Когда игрок выбирает ивент, то выполняется pl:ConCommand("event_cmd"). event_cmd это серверная команда, внутри которой происходит проверка pl:HasPurchase("event_request") и проверка на недавнее использование. Ниже псевдокод команды event_cmd

local recent_event_runs = {} -- sid > os.time()

concommand.Add("event_cmd", function(pl, _, args)
	local event_name = args[1]
	if not event_name or not EventExists(event_name) then
		pl:ChatPrint("Такого ивента не существует")
		return
	end

	if SomeEventActive() then
		pl:ChatPrint("Какой-то ивент сейчас активен. Подождите, пока закончится")
		return
	end

	-- Если у игрока есть разрешение начинать ивент
	if pl:HasPurchase("event_request") and
		-- Если игрок не запускал никакой ивент с момента рестарта сервера
		not recent_event_runs[pl:SteamID()] then

		StartEvent(event_name)

		-- записываем, чтобы игрок не мог запустить ивент снова до рестарта сервера
		-- (Такая возможность это цена простой реализации в пару строк)
		recent_event_runs[pl:SteamID()] = true
	end
end)

Горжусь своей иллюстрацией

2 лайка

Вообще, круто было бы сделать мод, который универсифицирует твою задачу под разные потребности. Ту же телепортацию

Универсальный какой-то интерфейс выбора допилить и в итемах что-то типа такого

ITEM:SetChoices({
	["Зомби ивент"] = function()
		RunEvent("zombie")
	end,
	["Золотой дождь :)"] = function()
		RunEvent("golden_rain")
	end
})

Попробовал сделать модуль для этого