-local jobs = {}
-local time = 0.0
-local last = 0.0
-
-core.register_globalstep(function(dtime)
- local new = core.get_us_time() / 1000000
- if new > last then
- time = time + (new - last)
- else
- -- Overflow, we may lose a little bit of time here but
- -- only 1 tick max, potentially running timers slightly
- -- too early.
- time = time + new
- end
- last = new
-
- if #jobs < 1 then
- return
- end
-
- -- Iterate backwards so that we miss any new timers added by
- -- a timer callback, and so that we don't skip the next timer
- -- in the list if we remove one.
- for i = #jobs, 1, -1 do
- local job = jobs[i]
- if time >= job.expire then
- core.set_last_run_mod(job.mod_origin)
- job.func(unpack(job.arg))
- table.remove(jobs, i)
- end
- end
-end)
-
-function core.after(after, func, ...)
- assert(tonumber(time) and type(func) == "function",
- "Invalid core.after invocation")
- table.insert(jobs, {
- func = func,
- expire = time + after,
- arg = {...},
- mod_origin = core.get_last_run_mod()
- })
-end
-
-function core.check_player_privs(player_or_name, ...)
- local name = player_or_name
- -- Check if we have been provided with a Player object.
- if type(name) ~= "string" then
+function core.check_player_privs(name, ...)
+ local arg_type = type(name)
+ if (arg_type == "userdata" or arg_type == "table") and
+ name.get_player_name then -- If it quacks like a Player...