86 lines
1.8 KiB
Lua
86 lines
1.8 KiB
Lua
-- 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, 'sit' player (in seconds).
|
|
local TIMEOUT = 600 -- 10 minutes
|
|
|
|
local time_afk = {}
|
|
local last_pos = {}
|
|
local chat_afk = {}
|
|
local chat_noafk = {}
|
|
|
|
local function check_moved()
|
|
|
|
for _, p in ipairs(minetest.get_connected_players()) do
|
|
local plname = p:get_player_name()
|
|
local pos = p:getpos()
|
|
local sit = false
|
|
|
|
if chat_noafk[plname] == nil then
|
|
chat_afk[plname] = false
|
|
chat_noafk[plname] = true
|
|
end
|
|
|
|
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
|
|
|
|
default.player_attached[plname] = true
|
|
default.player_set_animation(p, "sit")
|
|
sit = true
|
|
|
|
chat_noafk[plname] = false
|
|
|
|
if chat_afk[plname] == false then
|
|
minetest.chat_send_all("* "..plname.." is AFK.")
|
|
chat_afk[plname] = true
|
|
end
|
|
|
|
end
|
|
|
|
else
|
|
time_afk[plname] = 0
|
|
end
|
|
end
|
|
|
|
if not sit then
|
|
|
|
last_pos[plname] = pos
|
|
default.player_attached[plname] = false
|
|
default.player_set_animation(p, "stand")
|
|
|
|
chat_afk[plname] = false
|
|
|
|
if chat_noafk[plname] == false then
|
|
minetest.chat_send_all("* "..plname.." came back from AFK.")
|
|
chat_noafk[plname] = true
|
|
end
|
|
end
|
|
|
|
if p:get_hp() == 0 and sit then
|
|
default.player_set_animation(p, "lay")
|
|
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
|
|
chat_afk[plname] = nil
|
|
chat_noafk[plname] = nil
|
|
end)
|