Можно ли силами автодоната передавать при активации предмета каки-либо параметры от клиента?
Например:
Есть привилегия “Запустить ивент на сервере”
Игрок приобретает себе в инвентарь эту привилегию.
Когда ему необходимо - активирует предмет и выбирает “параметр” названия ивента из базы.
Запускается нужный ивент.
Вместо ивента может быть что угодно (телепортация в выбранную точку из списка, смена профессии по выбору и т.п.). Чтобы не создавать кучу привилегий под каждый “выбор игрока”, а использовать одну, где игрок может сам выбрать.
Кто-то пытался реализовать что-то подобное? Или писать с нуля, прикручивая вручную этот интерфейс?
Игрок покупает предмет “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)