123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- if not minetest.global_exists("ap") then ap = {} end
- ap.modpath = ap.modpath or minetest.get_modpath("ap")
- ap.players = ap.players or {}
- ap.record_time = 60*10
- local vector_distance = vector.distance
- function ap.get_record_time()
- return ap.record_time
- end
- function ap.update_players()
- local players = minetest.get_connected_players()
- for i=1, #players, 1 do
- local pref = players[i]
- local pname = pref:get_player_name()
- local p = pref:get_pos()
- local t = ap.players[pname].positions
-
-
- local add = true
- if #t > 0 then
- local op = t[#t].pos
- if vector_distance(op, p) < 0.5 then
- add = false
- end
- end
-
-
- if add then
- table.insert(t, {
- pos = p,
- time = os.time(),
-
- snode = sky.get_last_walked_node(pname),
- wnode = sky.get_last_walked_nodeabove(pname),
- })
- if #t > ap.record_time then
- table.remove(t, 1)
- end
- end
- end
- end
- function ap.get_position_list(pname)
- local data = ap.players[pname]
- if not data then return {} end
- return data.positions or {}
- end
- function ap.on_joinplayer(pref)
- ap.players[pref:get_player_name()] = {
- positions = {},
- }
- end
- function ap.on_leaveplayer(pref)
- ap.players[pref:get_player_name()] = nil
- end
- local time = 0
- function ap.global_step(dtime)
- time = time + dtime
- if time < 1 then return end
- time = 0
- ap.update_players()
- end
- if not ap.registered then
- local c = "ap:core"
- local f = ap.modpath .. "/init.lua"
- reload.register_file(c, f, false)
- minetest.register_on_joinplayer(function(...)
- ap.on_joinplayer(...) end)
- minetest.register_on_leaveplayer(function(...)
- ap.on_leaveplayer(...) end)
- minetest.register_globalstep(function(...)
- ap.global_step(...) end)
- ap.registered = true
- end
|