Modify init.lua to allow normal player usage.

Changes made:
* Put in new chatcommand /whereami to allow normal players to turn on / off player location coords without needing special privs.
* Made Debug Coords level 2, Player Location level 1, and Off level 0. (Allows turning the location off.)
* Put in nil value check into get_text, to prevent errors caused by definitions accidentally not returning a value.
* Cached pairs, ipairs, and table because the code is called every 0.63 seconds, and it made sense to do so. (Hopefully, will help
  to mitigate the added load on framerate.)
Michieal 2022-11-26 06:46:26 +00:00 committed by cora
parent da64a10403
commit 8184d4938c

@ -7,6 +7,9 @@ local get_connected_players = minetest.get_connected_players
local get_biome_name = minetest.get_biome_name
local get_biome_data = minetest.get_biome_data
local format = string.format
local pairs = pairs
local ipairs = ipairs
local table = table
local min1, min2, min3 = mcl_vars.mg_overworld_min, mcl_vars.mg_end_min, mcl_vars.mg_nether_min
local max1, max2, max3 = mcl_vars.mg_overworld_max, mcl_vars.mg_end_max, mcl_vars.mg_nether_max + 128
@ -63,11 +66,14 @@ local function get_text(player, bits)
local r = ""
for _,key in ipairs(fields_keyset) do
local def = mcl_info.registered_debug_fields[key]
if def then
if def.level == nil or def.level <= bits then
r = r ..key..": "..tostring(def.func(player,pos)).."\n"
end
else
r = r ..key..": <Unknown Field>\n"
end
end
return r
end
@ -115,7 +121,7 @@ minetest.register_on_leaveplayer(function(p)
end)
minetest.register_chatcommand("debug",{
description = S("Set debug bit mask: -1 = disable, 0 = player coords, 1 = biome name, 2 = coordinates, 3 = all"),
description = S("Set debug bit mask: 0 = disable, 1 = player coords, 2 = coordinates, 3 = biome name, 4 = all"),
params = S("<bitmask>"),
privs = { debug = true },
func = function(name, params)
@ -130,6 +136,25 @@ minetest.register_chatcommand("debug",{
end
})
-- register normal user access to debug levels 1 and 0.
minetest.register_chatcommand("whereami", {
description = S("Set location bit mask: 0 = disable, 1 = coordinates"),
params = S("<bitmask>"),
-- privs = { },
func = function(name, params)
local player = minetest.get_player_by_name(name)
if params == "" then
return true, "Location bitmask is " .. player_setting(player)
end
local loc_lev = math.floor(tonumber(params) or default_debug)
if loc_lev < 0 or loc_lev > 4 then
minetest.chat_send_player(name, S("Error! Possible values are integer numbers from @1 to @2", 0, 1))
return false, "Current bitmask: " .. player_setting(player)
end
return true, "Location bit mask set to " .. player_setting(player, loc_lev)
end
})
mcl_info.register_debug_field("Node feet",{
level = 4,
func = function(pl,pos)
@ -155,6 +180,14 @@ mcl_info.register_debug_field("Biome",{
})
mcl_info.register_debug_field("Coords", {
level = 2,
func = function(pl, pos)
return format("x:%.1f y:%.1f z:%.1f", pos.x, pos.y, pos.z)
end
})
mcl_info.register_debug_field("Location", {
level = 1,
func = function(pl, pos)
local report_y = 0
-- overworld
@ -174,6 +207,7 @@ mcl_info.register_debug_field("Coords", {
return format("End: x:%.1f y:%.1f z:%.1f", pos.x, report_y, pos.z)
end
-- outside of scoped bounds.
return format("Void: x:%.1f y:%.1f z:%.1f", pos.x, pos.y, pos.z)
end