diff --git a/mods/afkkick/init.lua b/mods/afkkick/init.lua index 04fa94d..ae2d0d9 100644 --- a/mods/afkkick/init.lua +++ b/mods/afkkick/init.lua @@ -14,6 +14,8 @@ local WARN_TIME = 20 local players = {} local checkTimer = 0 +minetest.register_privilege("canafk") + minetest.register_on_joinplayer(function(player) local playerName = player:get_player_name() players[playerName] = { @@ -32,28 +34,28 @@ end) minetest.register_globalstep(function(dtime) local currGameTime = minetest.get_gametime() - + --Loop through each player in players for playerName,_ in pairs(players) do local player = minetest.get_player_by_name(playerName) if player then - + --Check for inactivity once every CHECK_INTERVAL seconds checkTimer = checkTimer + dtime - if checkTimer > CHECK_INTERVAL then + if checkTimer > CHECK_INTERVAL and not minetest.check_player_privs({ canafk = true }) then checkTimer = 0 - + --Kick player if he/she has been inactive for longer than MAX_INACTIVE_TIME seconds - if players[playerName]["lastAction"] + MAX_INACTIVE_TIME < currGameTime then + if players[playerName]["lastAction"] + MAX_INACTIVE_TIME < currGameTime then minetest.kick_player(playerName, "Kicked for inactivity") end - + --Warn player if he/she has less than WARN_TIME seconds to move or be kicked if players[playerName]["lastAction"] + MAX_INACTIVE_TIME - WARN_TIME < currGameTime then minetest.chat_send_player(playerName, "Warning, you have " .. tostring(players[playerName]["lastAction"] + MAX_INACTIVE_TIME - currGameTime) .. " seconds to move or be kicked") end end - + --Check if this player is doing an action for _,keyPressed in pairs(player:get_player_control()) do if keyPressed then