mirror of
https://github.com/SantaSpeen/CommandEngine-BeamMP.git
synced 2026-04-04 14:56:13 +00:00
Move mod to /
This commit is contained in:
119
CommandEngine/CommandEngine.lua
Normal file
119
CommandEngine/CommandEngine.lua
Normal file
@@ -0,0 +1,119 @@
|
||||
---
|
||||
--- Created by SantaSpeen.
|
||||
--- DateTime: 25.09.2022 13:38
|
||||
---
|
||||
json = require("json")
|
||||
|
||||
-- -- -- -- -- Init functions -- -- -- -- --
|
||||
|
||||
function log(...)
|
||||
print("[".. pluginName .."] " .. tostring(...))
|
||||
end
|
||||
|
||||
function SplitString (str, char)
|
||||
local res = {};
|
||||
for i in string.gmatch(str, "[^" .. char .. "]+") do
|
||||
table.insert(res, i)
|
||||
end
|
||||
return res
|
||||
end
|
||||
|
||||
-- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
||||
|
||||
-- -- -- -- -- Init Variables -- -- -- -- --
|
||||
|
||||
pluginName = "CommandEngine"
|
||||
prefix = "/"
|
||||
-- Table settings: cmd_name = { "event", "mode", { "command syntax", "Help note." } }
|
||||
-- Mods settings: a - all mode; c - only console; u - only from user;
|
||||
commandsStorage = {
|
||||
help = { "CE_help", "c", "displays this help."},
|
||||
stop = { "shutdownServer", "c", "Also as exit."}
|
||||
}
|
||||
pluginPath = FS.GetParentFolder(string.gsub(debug.getinfo(1).source,"\\", "/"))
|
||||
|
||||
-- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
||||
-- -- -- -- -- Register Events -- -- -- -- -
|
||||
|
||||
log("Register global events.")
|
||||
MP.RegisterEvent("CE_addCommand", "addCommandToStorage")
|
||||
|
||||
-- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
||||
|
||||
|
||||
|
||||
function getCommand(commandName, handlerMode)
|
||||
for k, v in pairs(commandsStorage) do
|
||||
if commandName == k then
|
||||
local mode = v[2]
|
||||
if mode == "s" then
|
||||
return nil
|
||||
elseif mode == "a" then
|
||||
return v
|
||||
elseif mode == handlerMode then
|
||||
return v
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function chatHandler(sender_id, sender_name, message)
|
||||
if message:sub(1,1) ~= prefix then return 0 end
|
||||
local cmd = SplitString(message:sub(2), prefix)[1]
|
||||
cmdSettings = getCommand(cmd, "u")
|
||||
if cmdSettings then
|
||||
local Future = MP.TriggerGlobalEvent(cmdSettings[1], sender_id, sender_name)
|
||||
while not Future:IsDone() do MP.Sleep(100) end
|
||||
local Results = Future:GetResults()
|
||||
MP.SendChatMessage(sender_id, Results[1])
|
||||
end
|
||||
end
|
||||
|
||||
function consoleHandler(cmd)
|
||||
cmdSettings = getCommand(cmd, "c")
|
||||
if cmdSettings then
|
||||
local Future = MP.TriggerGlobalEvent(cmdSettings[1], -1, "console")
|
||||
while not Future:IsDone() do MP.Sleep(100) end
|
||||
local Results = Future:GetResults()
|
||||
return Results[1]
|
||||
end
|
||||
end
|
||||
|
||||
function addCommandToStorage(commands)
|
||||
log(commands)
|
||||
for k,v in pairs(commands) do commandsStorage[k] = v end
|
||||
end
|
||||
|
||||
function printHelpCommandEngine(...)
|
||||
local wrap = function (text)
|
||||
local ltext = string.len(text)
|
||||
if ltext > 24 then
|
||||
return string.sub(text, 1, 20) .. "... "
|
||||
end
|
||||
return text .. string.sub(" ", 1, 24 - ltext)
|
||||
end
|
||||
local helpMessage = "CommandEngine Console:\nM Syntax What it does\n Commands:\n" --> I hate this
|
||||
for k, v in pairs(commandsStorage) do
|
||||
helpNote = v[3]
|
||||
if type(helpNote) == "table" then
|
||||
helpMessage = helpMessage .. v[2] .. " " .. wrap(v[3][1]) .. v[3][2] .. "\n"
|
||||
else
|
||||
helpMessage = helpMessage .. v[2] .. " " .. wrap(k) .. v[3] .. "\n"
|
||||
end
|
||||
end
|
||||
return helpMessage
|
||||
end
|
||||
|
||||
function isCommandEngineReady() return true end
|
||||
function shutdown() exit() return "Goodbye!" end
|
||||
|
||||
|
||||
function onInit()
|
||||
log("Register default events.")
|
||||
MP.RegisterEvent("onConsoleInput", "consoleHandler")
|
||||
MP.RegisterEvent("onChatMessage", "chatHandler")
|
||||
MP.RegisterEvent("CE_help", "printHelpCommandEngine")
|
||||
MP.RegisterEvent("shutdownServer", "shutdown")
|
||||
log("Ready.")
|
||||
MP.RegisterEvent("CE_isReady", "isCommandEngineReady")
|
||||
end
|
||||
Reference in New Issue
Block a user