kickafk/init.lua

73 lines
1.9 KiB
Lua

kickafk = {}
players = {}
local CPU_saver = 0
kickafk.version = "1.0"
kickafk.first_flag = 0
local modpath = minetest.get_modpath("kickafk")
kickafk.players = tonumber(minetest.setting_get("kickafk_number_of_players")) or 10
if kickafk.players < 0 or kickafk.players > 30 then
kickafk.players = 15
end
kickafk.timer = tonumber(minetest.setting_get('kickafk_length_of_time')) or 2000
if kickafk.timer < 0 or kickafk.timer > 1500 then
kickafk.timer = 1500
end
minetest.register_on_joinplayer(function(player)
players[player:get_player_name()] = {last_pos = 0,0,}
end)
minetest.register_on_leaveplayer(function(player)
players[player:get_player_name()] = nil
end)
minetest.register_privilege("canafk",
"Player can remain afk without being kicked")
minetest.register_globalstep(function(dtime)
CPU_saver = CPU_saver + dtime
if CPU_saver < kickafk.timer then
return
end
CPU_saver = 0
local players_online = 0
-- Loop through all connected players
for _,player in ipairs(minetest.get_connected_players()) do
local player_name = player:get_player_name()
-- Only continue if the player has an entry in the players table
if players[player_name] then
print(players[player_name].last_pos)
players_online = players_online + 1
if players_online >= kickafk.players then
print("number of players is "..players_online)
-- Kick the player if their location hasn't changed.
local pos = player:getpos()
local pos_hash = math.floor(pos.x) .. ',' .. math.floor(pos.z)
if players[player_name].last_pos == pos_hash then
if not minetest.check_player_privs(player_name,"canafk") == true then
minetest.kick_player(player_name, "Disconnected due to inactivity!")
end
end
-- Record the players location
if players[player_name].last_pos ~= pos_hash then
players[player_name].last_pos = pos_hash
end
end
end
end
end)