_misc/commands.lua

191 lines
5.9 KiB
Lua
Executable File

minetest.register_privilege("physics", {
description = "Allows player to set their gravity, jump height and movement speed"})
-- Infotool code by PilzAdam:
minetest.register_craftitem(":default:infotool", {
description = "Infotool",
inventory_image = "default_infotool.png",
wield_image = "default_infotool.png^[transformR90",
groups = {not_in_creative_inventory = 1},
on_use = function(_, user, pt)
if pt.type ~= "node" then return end
local nn = minetest.get_node(pt.under).name
if minetest.registered_items[nn] == nil or minetest.registered_items[nn].tiles == nil or type(minetest.registered_items[nn].tiles[1]) ~= "string" then return end
local def = minetest.registered_nodes[nn]
if not def then return end
local textures = def.tiles
local description = def.description
if not textures then
textures = {"(no texture)"}
end
if not description then
description = {"(no description)"}
end
for i = 1,6 do
if not textures[i] then
textures[i] = textures[i-1]
end
end
local dir = vector.subtract(pt.above, pt.under)
local index
-- This doesn't work for facedir or other drawtypes yet.
if dir.y == 1 then
index = 1
elseif dir.y == -1 then
index = 2
else
if dir.x == 1 then
index = 3
elseif dir.x == -1 then
index = 4
else
if dir.z == 1 then
index = 5
else
index = 6
end
end
end
minetest.chat_send_player(user:get_player_name(), description .. ": " .. nn .. " (" .. textures[index] .. ")")
end,
})
minetest.register_chatcommand("info", {
description = "Gives an Infotool, click to receive information on the pointed node",
func = function(name)
local receiverref = minetest.get_player_by_name(name)
receiverref:get_inventory():add_item("main", "default:infotool")
minetest.chat_send_player(name, "\"default:infotool\" added to inventory.")
end,
})
minetest.register_chatcommand("clearinventory", {
params = "<inventory>",
description = "Clears an entire inventory, \"main\" if unspecified, \"craft\" is another possible choice",
func = function(name, param)
local player = minetest.get_player_by_name(name)
local player_inv = player:get_inventory()
if not player then
minetest.log("error", "Unable to clear inventory, no player.")
return false, "Unable to clear inventory, no player."
end
if param == "" then
player_inv:set_list("main", {})
return true, "Inventory \"main\" cleared."
else
player_inv:set_list(param, {})
return true, "Inventory \"" .. param .. "\" cleared."
end
end,
})
-- The following commands /whoami, /suicide, /speed, /gravity and /jump by Wuzzy:
minetest.register_chatcommand("whoami", {
params = "",
description = "Tells your name",
privs = {},
func = function(name)
minetest.chat_send_player(name, "Your name is: " .. name)
end,
})
minetest.register_chatcommand("ip", {
params = "",
description = "Shows your IP address",
privs = {},
func = function(name)
minetest.chat_send_player(name, "Your IP address is: "..minetest.get_player_ip(name))
end
})
minetest.register_chatcommand("suicide", {
params = "",
description = "Kills yourself",
func = function(name, param)
local player = minetest.get_player_by_name(name)
if not player then return end
player:set_hp(0)
if minetest.setting_getbool("enable_damage") == false then
minetest.chat_send_player(name, "[X] Damage is disabled on this server.")
else
minetest.chat_send_player(name, "[X] You suicided.")
end
end,
})
minetest.register_chatcommand("speed", {
params = "[speed]",
description = "Sets your movement speed (defaults to 1).",
privs = {physics = true},
func = function(name, speed)
local player = minetest.get_player_by_name(name)
if not player then return end
if speed == "" then speed = 1 end
if type(tonumber(speed)) ~= "number"
or tonumber(speed) < 0
or tonumber(speed) > 10 then
minetest.chat_send_player(name, "[~] Speed must be between 0.0 and 10.0.")
return
end
player:set_physics_override(tonumber(speed), nil, nil)
minetest.chat_send_player(name, "[~] Speed set to " .. tonumber(speed) * 100 .. " %.")
end,
})
minetest.register_chatcommand("gravity", {
params = "[gravity]",
description = "Sets your gravity (defaults to 1).",
privs = {physics = true},
func = function(name, gravity)
local player = minetest.get_player_by_name(name)
if not player then return end
if gravity == "" then gravity = 1 end
if type(tonumber(gravity)) ~= "number"
or tonumber(gravity) < -10
or tonumber(gravity) > 10 then
minetest.chat_send_player(name, "[~] Gravity must be between -10.0 and 10.0.")
return
end
player:set_physics_override(nil, nil, tonumber(gravity))
minetest.chat_send_player(name, "[~] Gravity set to " .. tonumber(gravity) * 100 .. " %.")
end,
})
minetest.register_chatcommand("jump", {
params = "[height]",
description = "Sets your jump height (defaults to 1)",
privs = {physics = true},
func = function(name, jump)
local player = minetest.get_player_by_name(name)
if not player then return end
if jump == "" then jump = 1 end
if type(tonumber(jump)) ~= "number"
or tonumber(jump) < 0
or tonumber(jump) > 10 then
minetest.chat_send_player(name, "[~] Jump height must be between 0.0 and 10.0.")
return
end
player:set_physics_override(nil, tonumber(jump), nil)
minetest.chat_send_player(name, "[~] Jump height set to " .. tonumber(jump) * 100 .. " %.")
end,
})
minetest.register_chatcommand("hotbar", {
params = "[size]",
description = "Sets the size of your hotbar",
func = function(name, slots)
if slots == "" then slots = 16 end
if type(tonumber(slots)) ~= "number" or tonumber(slots) < 1 or tonumber(slots) > 23 then
minetest.chat_send_player(name, "[_] Hotbar size must be between 1 and 23.")
return
end
local player = minetest.get_player_by_name(name)
player:hud_set_hotbar_itemcount(tonumber(slots))
minetest.chat_send_player(name, "[_] Hotbar size set to " .. tonumber(slots) .. ".")
end,
})