From 8501e2ae5c1454307e80dbf6ce7613e57c21a85e Mon Sep 17 00:00:00 2001 From: Mahmut Elmas Date: Wed, 20 Jan 2016 12:30:19 +0200 Subject: [PATCH] Initial release --- commands.lua | 69 ++++++++++++++++++++++++++++++++++++++++++ init.lua | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 154 insertions(+) create mode 100644 commands.lua create mode 100644 init.lua diff --git a/commands.lua b/commands.lua new file mode 100644 index 0000000..d9e394c --- /dev/null +++ b/commands.lua @@ -0,0 +1,69 @@ +-- Kill Function + +local function handle_kill_command(suspect, victim) + local victimref = minetest.get_player_by_name(victim) + if victimref == nil then + return false, ("Player "..victim.." does not exist.") + elseif victimref:get_hp() <= 0 then + if suspect == victim then + return false, "You are already dead" + else + return false, (victim.." is already dead") + end + end + if not suspect == victim then + minetest.log("action", suspect.." killed "..victim) + end + victimref:set_hp(0) +end + +-- Kill a player + +minetest.register_chatcommand("kill", { + params = "", + description = "Kill player", + privs = {kill=true}, + func = function(name, param) + return handle_kill_command(name, param) + end, +}) + + +-- Kill yourself + +minetest.register_chatcommand("killme", { + description = "Kill yourself", + func = function(name) + return handle_kill_command(name, name) + end, +}) + +-- List banned players + + minetest.register_chatcommand("banlist", { + description = "List bans", + privs = minetest.chatcommands["ban"].privs, + func = function(name) + return true, "Ban list: " .. core.get_ban_list() + end, + }) + + + + -- Aliases function + +local function register_chatcommand_alias(alias, cmd) + local def = minetest.chatcommands[cmd] + minetest.register_chatcommand(alias, def) +end + +-- Minecraft commands for minetest + +register_chatcommand_alias("?", "help") +register_chatcommand_alias("list", "status") +register_chatcommand_alias("pardon", "unban") +register_chatcommand_alias("stop", "shutdown") +register_chatcommand_alias("tell", "msg") +register_chatcommand_alias("w", "msg") +register_chatcommand_alias("tp", "teleport") + diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..a9e4df4 --- /dev/null +++ b/init.lua @@ -0,0 +1,85 @@ + local commander = "" + minetest.after(0, function() + for cmd in pairs(minetest.chatcommands) do + if cmd ~= "command_gui" then + commander = commander..cmd.."," + end + end + commander = commander:sub(1, -2) + end) + + local function formspec(cmd_name) + local number = 1 + if cmd_name then + for i, cmd in ipairs(commander:split(",")) do + if cmd == cmd_name then + number = i + break + end + end + else + cmd_name = commander:split(",")[1] + end + + local def = minetest.chatcommands[cmd_name] + + local privileges = "" + for priv, bool in pairs(def.privs or {}) do + if bool then + privileges = privileges..priv.."," + end + end + privileges = minetest.formspec_escape(#privileges ~= 0 and privileges:sub(1, -2) or "") + local description = minetest.formspec_escape(def.description or "") + local parameters = minetest.formspec_escape(def.params or "") + + return "size[9,4;]".. + "dropdown[,;9.5,1;command;"..commander..";"..number.."]".. + "label[,1;Description: "..description.."]".. + "label[,1.5;Privileges: "..privileges.."]".. + "field[.3,2.7;9,1;param;Parameter:;"..parameters.."]".. + "button[,3.3;9,1;run;Run]" + end + + +-- Open command gui by chat + + minetest.register_chatcommand("command_gui", { + func = function(name) + minetest.after(0.5, minetest.show_formspec, name, "command_gui:menu", formspec()) + end + }) + + minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname ~= "command_gui:menu" then + return + end + + local name = player:get_player_name() + + if fields.run then + local def = minetest.chatcommands[fields.command] + if not def then + return + end + + local has_privs, missing_privs = minetest.check_player_privs(name, def.privs) + if has_privs then + minetest.set_last_run_mod(def.mod_origin) + local success, message = def.func(name, fields.param) + if message then + minetest.chat_send_player(name, message) + end + else + minetest.chat_send_player(name, "You don't have permission".. + " to run this command (missing privileges: ".. + table.concat(missing_privs, ", ") .. ")") + end + elseif fields.command and not fields.quit then + minetest.show_formspec(name, "command_gui:menu", formspec(fields.command)) + end + end) + + + +dofile(minetest.get_modpath("commander").."/commands.lua") \ No newline at end of file