Выбор параметра при активации предмета

Этот модуль позволяет игрокам выбирать один из нескольких параметров при активации айтема, в следствие чего будут выполняться разные функции поверх стандартного :OnActivate().

Пример айтема

IGS('Телепорт', 'tp')
	:SetPrice(10)
	:SetStackable(true)
	:SetChoices({
		{
			name = 'Спавн',
			select = true,
			callback = function(self,ply)
				ply:SetPos(Vector(-1446, -1177, 128))
			end,
		},
		{
			name = 'Админ-зона',
			icon = 'icon16/shield.png',
			callback = function(self, ply)
				ply:SetPos(Vector(-1521, 911, 128))
			end,
		},
	})

Установка

Поместить файл по пути addons/igsmod-choices/lua/igs/extensions/choices.lua

choices.lua (5.0 КБ)

Побочные эффекты

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

Это мой первый опыт написания модулей для автодоната, так что если вы нашли у меня какой-то недочет или возможность пофиксить одну из проблем выше, то напишите об этом в теме

2 лайка

а зачем этот оверрайд?

hook.Add('IGS.Initialized', 'rewritenotify', function()
	local ShowNotify = IGS.ShowNotify
	function IGS.ShowNotify(sText, sTitle, fOnClose)
		if sText == '' then return end
		return ShowNotify(sText, sTitle, fOnClose)
	end
end)

Когда я возвращаю false, '' в функции :CanActivate(), игроку выводится пустое диалоговое окно, в котором должна быть ошибка при активации. Не нашел другого способа избежать его

Но я спросил за другое

Чтобы не появлялось уведомление с пустым текстом

Сорри, это я перепутал с другой функцией.

Скоро постараюсь протестить твой скрипт и подправить его

1 лайк