eluna-scripts/Extensions/RunElunaCommand.lua
Rochet2 f32a1c14d3 Update RunElunaCommand.lua
Add GM rank check
2015-07-31 13:48:01 +03:00

53 lines
2 KiB
Lua

-- Allows running Eluna lua from ingame chat and from server console
-- This command is intended for development purposes
-- Example usage:
-- .eluna pp(GetLuaEngine(), "Code ran by:", plr and plr:GetName() or "console")
-- pp is defined to be a function to send a message to everyone on server and to console for easy printing
-- plr is the player using the command or nil if command from console
-- sel is the selection of plr or nil if nothing selected
-- errors in the lua code executed are printed to command invoker only (console or player), they are not logged
-- errors in timed events made with the code and such delayed actions are reported by normal means to the error logs and console if so defined in Eluna settings.
local runcmd = "eluna"
local mingmrank = 3
local function RunCommand(event, player, cmd)
if ((not player or player:GetGMRank() >= mingmrank) and cmd:lower():find("^"..runcmd.." .+")) then
-- Here you can define some environment variables for the code
-- I defined plr to be the player or nil
-- sel to be the current selection of the player or nil
-- pp to print the passed arguments to everyone and to console
local env = [[
local plr = ...
local sel = sel
local pp = function(...)
local t = {...}
for i = 1, select("#", ...) do t[i] = tostring(t[i]) end
local msg = table.concat(t, " ")
SendWorldMessage(msg)
print(msg)
end
if (plr) then
sel = plr:GetSelection()
end
]]
local code = env..cmd:sub(#runcmd+2)
local func, err = load(code, "."..runcmd)
if (func) then
local res
res, err = pcall(func, player)
if (res) then
return false
end
end
if (not player) then
print(err)
else
player:SendBroadcastMessage(err)
end
return false
end
end
RegisterPlayerEvent(42, RunCommand)