mirror of
https://github.com/ElunaLuaEngine/Scripts
synced 2026-08-22 00:32:05 -04:00
53 lines
2 KiB
Lua
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)
|