Хочу чтоб за минут 20-30 чела с профы кидали например - ПСУ 03 —] Приезжий.
Сначала давай определим стандартную профу. Пусть это будет TEAM_CITIZEN
(гражданин, как обычно).
-- Словарь для хранения времени последнего движения каждого игрока
local lastPlayerMove = {}
-- Стандартная профа, на которую перекинет, если AFK
local defaultTeam = TEAM_CITIZEN
-- Время AFK в секундах (20 минут = 1200 секунд, 30 минут = 1800 секунд)
local afkTime = 1800
-- Проверяем движение игрока
hook.Add("PlayerTick", "CheckPlayerAFK", function(ply)
if not lastPlayerMove[ply] then
lastPlayerMove[ply] = CurTime()
end
-- Если игрок двигался
if ply:GetVelocity():Length() > 0 then
lastPlayerMove[ply] = CurTime()
end
-- Если прошло больше afkTime секунд с последнего движения
if CurTime() - lastPlayerMove[ply] >= afkTime then
-- Сбрасываем таймер
lastPlayerMove[ply] = CurTime()
-- Меняем профу на стандартную
if ply:Team() ~= defaultTeam then
ply:changeTeam(defaultTeam, true)
DarkRP.notify(ply, 1, 5, "Ты был переведён на стандартную профу из-за AFK.")
end
end
end)
-- Если игрок выходит, удаляем его из словаря
hook.Add("PlayerDisconnected", "RemovePlayerAFK", function(ply)
lastPlayerMove[ply] = nil
end)
Оптимизация через корутины:
local lastPlayerMove = {}
local defaultTeam = TEAM_CITIZEN
local afkTime = 1800
local function checkAFK()
while true do
for _, ply in pairs(player.GetAll()) do
if not lastPlayerMove[ply] then
lastPlayerMove[ply] = CurTime()
end
if CurTime() - lastPlayerMove[ply] >= afkTime then
lastPlayerMove[ply] = CurTime()
if ply:Team() ~= defaultTeam then
ply:changeTeam(defaultTeam, true)
DarkRP.notify(ply, 1, 5, "Ты был переведён на стандартную профу из-за AFK.")
end
end
coroutine.yield()
end
coroutine.yield()
end
end
local co = coroutine.create(checkAFK)
hook.Add("Think", "AFKCoroutineThink", function()
coroutine.resume(co)
end)
hook.Add("PlayerTick", "UpdatePlayerMoveTime", function(ply)
if ply:GetVelocity():Length() > 0 then
lastPlayerMove[ply] = CurTime()
end
end)
hook.Add("PlayerDisconnected", "RemovePlayerAFK", function(ply)
lastPlayerMove[ply] = nil
end)
А куда это кидать?
lua/autorun/server/afk.lua
Спасибо
Я думаю вот так надо было сделать,верно? А то мало ли
sv_afk.lua (2,7 КБ)
Зачем ты вставил основной код и его же, но оптимизированного? Это вариации одного и того же скрипта
А,не обратил внимания
Спасибо
Спасибо зайка!