158 lines
4.1 KiB
Lua

local modpath = core.get_modpath("pyutest_cmds")
dofile(modpath .. "/api.lua")
core.register_chatcommand("say", {
params = "<text>",
description = [[Say <text>
There are some text replacement macros you can use.
Here is a list of them:
- %n: Replaced with your username
- %r: Replaced with some random player's name]],
func = function(name, param)
local str = param
str = str:gsub("%%n", name)
str = str:gsub("%%r", function ()
return PyuTest.chatcommand_entity_selector(name, "@r")[1]
end)
str = PyuTest.parse_command_functions(name, str)
core.chat_send_all(str)
end
})
core.register_chatcommand("getpos", {
params = "<player>",
description = "Return the position of <player>",
func = function(name, param)
local target = PyuTest.chatcommand_entity_selector(name, param)
local player = core.get_player_by_name(target[1])
if not player then
return ""
end
local pos = player:get_pos()
return string.format("%f %f %f", pos.x, pos.y, pos.z)
end
})
core.register_chatcommand("kill", {
params = "<player>",
description = "Kill <player>",
privs = {
server = true
},
func = function (name, param)
local targets = PyuTest.chatcommand_entity_selector(name, param)
for _, v in pairs(targets) do
if not core.get_player_by_name(v) then
core.chat_send_player(name, "Invalid player: " .. v)
return
end
end
for _, v in pairs(targets) do
local plr = core.get_player_by_name(v)
PyuTest.deal_damage(plr, plr:get_hp(), PyuTest.DAMAGE_TYPES.magic())
end
end
})
core.register_chatcommand("teleport", {
params = "<player> <x> <y> <z>",
description = "Teleport <player> to <x> <y> <z>",
privs = {teleport = true},
func = function(name, param)
local found, _, player, x, y, z = PyuTest.parse_command_functions(name, param)
:find("^([^%s]+)%s+([^%s]+)%s+([^%s]+)%s+([^%s]+)$")
if found == nil then
core.chat_send_player(name, "Invalid usage: " .. param)
return
end
local targets = PyuTest.chatcommand_entity_selector(name, player)
for _, v in pairs(targets) do
if not core.get_player_by_name(v) then
core.chat_send_player(name, "Invalid player: " .. v)
return
end
end
local caller = core.get_player_by_name(name)
for _, v in pairs(targets) do
local plr = core.get_player_by_name(v)
local pos = caller:get_pos()
local nx = core.parse_relative_number(x, pos.x)
local ny = core.parse_relative_number(y, pos.y)
local nz = core.parse_relative_number(z, pos.z)
plr:set_pos(vector.new(nx, ny, nz))
end
end
})
core.register_chatcommand("repeat", {
params = "<times> <delay> <command>",
description = "Execute <command> <times> times waiting <delay> seconds per iteration",
func = function(name, param)
local found, _, times, delay, command = param:find("^([^%s]+)%s+([^%s]+)%s+(.*)$")
if found == nil then
core.chat_send_player(name, "Invalid usage: " .. param)
return
end
local c = 1
local t = tonumber(times)
local d = tonumber(delay)
local function action()
PyuTest.execute_as(name, command)
if c == t then return end
c = c + 1
core.after(d, action)
end
action()
end
})
core.register_chatcommand("execute", {
params = "at|as <player> <command>",
description = "Execute <command> as or at <player>",
func = function (name, param)
local found, _, method, player, command = param:find("^([^%s]+)%s+([^%s]+)%s+(.*)$")
if found == nil then
core.chat_send_player(name, "Invalid usage: " .. param)
return
end
local targets = PyuTest.chatcommand_entity_selector(name, player)
for _, v in pairs(targets) do
if not core.get_player_by_name(v) then
core.chat_send_player(name, "Invalid player: " .. v)
return
end
end
for _, v in pairs(targets) do
if method == "as" then
PyuTest.execute_as(v, command)
elseif method == "at" then
-- TODO
end
end
end
})
dofile(modpath .. "/worldedit.lua")
dofile(modpath .. "/gameplay.lua")
dofile(modpath .. "/fun.lua")