ULX - Jail после перезахода на сервер

Хотелось бы узнать, как в ULX сделать так, чтобы игрок получал бан за выход с сервера во время пребывания в Jail?

Либо же, чтобы после перезахода на сервер не спадал Jail и игроку приходилось бы досиживать в нем оставшееся время.

*Что-то из разряда “как потерять игрока”*

Окей, тогда как сделать так, чтобы Jail не спадал даже после перезахода?

1 лайк

Вот это уже интереснее подход. Решение несколькими сообщениями ниже

Кстати, я когда-то у себя делал бан за лив с сервера во время jail. Но я жалею об этом

Код со скриншота можно не переписывать, он не заработает без некоторых правок

Может также быть интересно:

А ну ка, еще попытка. Если это не сработает, то второй вариант ниже. Он более уродлив, но сработает наверняка

addons/anyname/lua/autorun/server/ulx_keepjail.lua
или
addons/anyname/lua/ulx/modules/sh/ulx_keepjail.lua

if CLIENT then return end -- усли установлено по первому пути, то можно удалить

local jailedPlayers = {}

hook.Add("PlayerDisconnected", "JailDisconnected", function(pl)
	jailedPlayers[pl:SteamID()] = pl.jail and pl:GetPos() or nil
end, HOOK_MONITOR_HIGH)

hook.Add("PlayerInitialSpawn", "JailInitialSpawn", function(pl)
	if jailedPlayers[pl:SteamID()] then
		pl:SetPos( jailedPlayers[pl:SteamID()] )
		RunConsoleCommand("ulx", "jail", "$" .. pl:SteamID())
		pl:ChatPrint("За попытку избежать наказания, вы не выйдете с тюрьмы до рестарта сервера")
	end
end)

Второй вариант

if CLIENT then return end -- усли установлено по первому пути, то можно удалить

local jailedPlayers = {}

local doDetour = function()
	ulx_original_unjail_hook = ulx_original_unjail_hook or hook.GetTable()["PlayerDisconnected"]["ULXJailDisconnectedCheck"]
	if ulx_original_unjail_hook then
		hook.Add("PlayerDisconnected", "ULXJailDisconnectedCheck", ulx_original_unjail_hook, HOOK_HIGH) -- смена приоритета хука
	end
end

hook.Add(ulx and ulx.HOOK_ULXDONELOADING or "", "unjail_on_disconnect_detour", doDetour)
doDetour()

hook.Add("PlayerDisconnected", "JailDisconnected", function(pl)
	jailedPlayers[pl:SteamID()] = pl.jail and pl:GetPos() or nil
end, HOOK_MONITOR_HIGH)

hook.Add("PlayerInitialSpawn", "JailInitialSpawn", function(pl)
	if jailedPlayers[pl:SteamID()] then
		pl:SetPos( jailedPlayers[pl:SteamID()] )
		RunConsoleCommand("ulx", "jail", "$" .. pl:SteamID())
		pl:ChatPrint("За попытку избежать наказания, вы не выйдете с тюрьмы до рестарта сервера")
	end
end)
1 лайк

@Murda помогло?

Не тестил, т.к я раздобыл аддон-модификатор под ULX, который при обычном !ban выдает профу забанненого и лишает всех возможностей спавнить, менять профессию и т.д + выдает профу забаненного после перезахода.
p.s. это не JailRoom

Не подскажешь, что за аддон?

самописный

за сколько отдашь?

Уже не отдам, хард на ссд менял и переустанавливал винду, сейвил только необходимые мне файлы. Так что модификатора больше нет, но если что, то можно просто переписать бан в ULX