From 824c25ce355e9d1eb8535bb07289e55ebd3e7084 Mon Sep 17 00:00:00 2001 From: sys4-fr Date: Sat, 8 Sep 2018 14:57:51 +0200 Subject: [PATCH] =?UTF-8?q?Remplissage=20du=20d=C3=A9p=C3=B4t.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- init.lua | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100755 init.lua diff --git a/init.lua b/init.lua new file mode 100755 index 0000000..4972067 --- /dev/null +++ b/init.lua @@ -0,0 +1,44 @@ +-- Interval between movement checks (in seconds). +local INTERVAL = 5 + +-- Minimum distance to move to register as not AFK (in blocks). +local MINDIST = 0.2 + +-- If player does not move within this time, kick player (in seconds). +local TIMEOUT = 3600 -- 60 minutes + +local time_afk = { } +local last_pos = { } + +local function check_moved() + for _, p in ipairs(minetest.get_connected_players()) do + local plname = p:get_player_name() + local pos = p:getpos() + local kicked + if last_pos[plname] then + local d = vector.distance(last_pos[plname], pos) + --print("Player: "..plname..", Dist: "..d) + if d < MINDIST then + time_afk[plname] = (time_afk[plname] or 0) + INTERVAL + if time_afk[plname] >= TIMEOUT then + minetest.kick_player(plname, + "Inactive for "..TIMEOUT.." seconds.") + kicked = true + end + else + time_afk[plname] = 0 + end + end + if not kicked then + last_pos[plname] = pos + end + end + minetest.after(INTERVAL, check_moved) +end +minetest.after(INTERVAL, check_moved) + +minetest.register_on_leaveplayer(function(player) + local plname = player:get_player_name() + time_afk[plname] = nil + last_pos[plname] = nil +end)