X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=builtin%2Fgame%2Fchatcommands.lua;h=60d5d4788bf19497752a5ee6aeab04a2fe260e82;hb=3ad9a8f3a978b41a88ebf8a88690ad658cd132c7;hp=3b701c1fd939cde4750e21e834639dac96be403f;hpb=6d6b894c7ad7fbd2dcfab25488738149dc0efb06;p=minetest.git diff --git a/builtin/game/chatcommands.lua b/builtin/game/chatcommands.lua index 3b701c1fd..60d5d4788 100644 --- a/builtin/game/chatcommands.lua +++ b/builtin/game/chatcommands.lua @@ -41,7 +41,7 @@ end) if core.settings:get_bool("profiler.load") then -- Run after register_chatcommand and its register_on_chat_message - -- Before any chattcommands that should be profiled + -- Before any chatcommands that should be profiled profiler.init_chatcommand() end @@ -84,7 +84,7 @@ core.register_chatcommand("admin", { func = function(name) local admin = core.settings:get("name") if admin then - return true, "The administrator of this server is "..admin.."." + return true, "The administrator of this server is " .. admin .. "." else return false, "There's no administrator named in the config file." end @@ -97,12 +97,40 @@ core.register_chatcommand("privs", { func = function(caller, param) param = param:trim() local name = (param ~= "" and param or caller) + if not core.player_exists(name) then + return false, "Player " .. name .. " does not exist." + end return true, "Privileges of " .. name .. ": " .. core.privs_to_string( core.get_player_privs(name), ' ') end, }) +core.register_chatcommand("haspriv", { + params = "", + description = "Return list of all online players with privilege.", + privs = {basic_privs = true}, + func = function(caller, param) + param = param:trim() + if param == "" then + return false, "Invalid parameters (see /help haspriv)" + end + if not core.registered_privileges[param] then + return false, "Unknown privilege!" + end + local privs = core.string_to_privs(param) + local players_with_priv = {} + for _, player in pairs(core.get_connected_players()) do + local player_name = player:get_player_name() + if core.check_player_privs(player_name, privs) then + table.insert(players_with_priv, player_name) + end + end + return true, "Players online with the \"" .. param .. "\" privilege: " .. + table.concat(players_with_priv, ", ") + end +}) + local function handle_grant_command(caller, grantname, grantprivstr) local caller_privs = core.get_player_privs(caller) if not (caller_privs.privs or caller_privs.basic_privs) then @@ -352,7 +380,7 @@ core.register_chatcommand("teleport", { end teleportee = core.get_player_by_name(name) if teleportee then - teleportee:setpos(p) + teleportee:set_pos(p) return true, "Teleporting to "..core.pos_to_string(p) end end @@ -365,12 +393,12 @@ core.register_chatcommand("teleport", { if target_name then local target = core.get_player_by_name(target_name) if target then - p = target:getpos() + p = target:get_pos() end end if teleportee and p then p = find_free_position_near(p) - teleportee:setpos(p) + teleportee:set_pos(p) return true, "Teleporting to " .. target_name .. " at "..core.pos_to_string(p) end @@ -389,7 +417,7 @@ core.register_chatcommand("teleport", { teleportee = core.get_player_by_name(teleportee_name) end if teleportee and p.x and p.y and p.z then - teleportee:setpos(p) + teleportee:set_pos(p) return true, "Teleporting " .. teleportee_name .. " to " .. core.pos_to_string(p) end @@ -405,12 +433,12 @@ core.register_chatcommand("teleport", { if target_name then local target = core.get_player_by_name(target_name) if target then - p = target:getpos() + p = target:get_pos() end end if teleportee and p then p = find_free_position_near(p) - teleportee:setpos(p) + teleportee:set_pos(p) return true, "Teleporting " .. teleportee_name .. " to " .. target_name .. " at " .. core.pos_to_string(p) @@ -636,7 +664,7 @@ core.register_chatcommand("spawnentity", { return false, "Cannot spawn an unknown entity" end if p == "" then - p = player:getpos() + p = player:get_pos() else p = core.string_to_pos(p) if p == nil then @@ -658,10 +686,13 @@ core.register_chatcommand("pulverize", { core.log("error", "Unable to pulverize, no player.") return false, "Unable to pulverize, no player." end - if player:get_wielded_item():is_empty() then + local wielded_item = player:get_wielded_item() + if wielded_item:is_empty() then return false, "Unable to pulverize, no item in hand." end - player:set_wielded_item(nil) + core.log("action", name .. " pulverized \"" .. + wielded_item:get_name() .. " " .. wielded_item:get_count() .. "\"") + player:set_wielded_item(nil) return true, "An item was pulverized." end, }) @@ -771,7 +802,11 @@ core.register_chatcommand("rollback", { core.register_chatcommand("status", { description = "Show server status", func = function(name, param) - return true, core.get_server_status() + local status = core.get_server_status(name, false) + if status and status ~= "" then + return true, status + end + return false, "This command was disabled by a mod or game" end, }) @@ -827,13 +862,15 @@ core.register_chatcommand("shutdown", { description = "Shutdown server (-1 cancels a delayed shutdown)", privs = {server=true}, func = function(name, param) - local delay, reconnect, message = param:match("([^ ][-]?[0-9]+)([^ ]+)(.*)") - message = message or "" + local delay, reconnect, message + delay, param = param:match("^%s*(%S+)(.*)") + if param then + reconnect, param = param:match("^%s*(%S+)(.*)") + end + message = param and param:match("^%s*(.+)") or "" + delay = tonumber(delay) or 0 - if delay ~= "" then - delay = tonumber(delay) or 0 - else - delay = 0 + if delay == 0 then core.log("action", name .. " shuts down server") core.chat_send_all("*** Server shutting down (operator request).") end