78 lines
1.9 KiB
Lua
78 lines
1.9 KiB
Lua
PyuTest.chatcommand_entity_selector = function(caller, param)
|
|
local p_caller = core.get_player_by_name(caller)
|
|
|
|
if core.get_player_by_name(param) ~= nil then
|
|
return {param}
|
|
end
|
|
|
|
if param == "@self" or param == "@s" then
|
|
return {caller}
|
|
elseif param == "@random" or param == "@r" then
|
|
local players = core.get_connected_players()
|
|
return {players[math.random(#players)]:get_player_name()}
|
|
elseif param == "@nearest" or param == "@n" then
|
|
local players = core.get_connected_players()
|
|
local pos = p_caller:get_pos()
|
|
local cd = math.huge
|
|
local nearest
|
|
|
|
for _, v in pairs(players) do
|
|
local dist = vector.distance(pos, v:get_pos())
|
|
|
|
if dist < cd and v ~= p_caller then
|
|
cd = dist
|
|
nearest = v
|
|
end
|
|
end
|
|
|
|
if nearest then
|
|
return {nearest:get_player_name()}
|
|
end
|
|
elseif param == "@all" or param == "@a" then
|
|
local list = {}
|
|
|
|
for _, v in pairs(core.get_connected_players()) do
|
|
list[#list+1] = v:get_player_name()
|
|
end
|
|
|
|
return list
|
|
end
|
|
|
|
return {caller}
|
|
end
|
|
|
|
PyuTest.execute_as = function(runner, command)
|
|
local pos = command:find(" ")
|
|
local cmd, param = command, ""
|
|
if pos then
|
|
cmd = command:sub(1, pos - 1)
|
|
param = command:sub(pos + 1)
|
|
end
|
|
local cmddef = core.chatcommands[cmd]
|
|
if not cmddef then
|
|
core.chat_send_player(runner, "The command "..cmd.." does not exist")
|
|
return
|
|
end
|
|
local has_privs, missing_privs = core.check_player_privs(runner, cmddef.privs)
|
|
if not has_privs then
|
|
core.chat_send_player(runner, "You don't have permission "
|
|
.."to run "..cmd
|
|
.." (missing privileges: "
|
|
..table.concat(missing_privs, ", ")..")")
|
|
return
|
|
end
|
|
|
|
return cmddef.func(runner, param)
|
|
end
|
|
|
|
PyuTest.parse_command_functions = function(runner, param)
|
|
local str = param
|
|
|
|
-- embed the output of command
|
|
str = str:gsub("embed{([%w%p]+)}", function(input)
|
|
return PyuTest.execute_as(runner, input) or ""
|
|
end)
|
|
|
|
return str
|
|
end
|