Command maker clean

This commit is contained in:
Cooldude2606
2017-10-15 00:00:20 +01:00
parent 6513e25c3f
commit 73e442bc4b
5 changed files with 39 additions and 85 deletions

View File

@@ -5,22 +5,11 @@ This file can be used with permission but this and the credit below must remain
Contact a member of management on our discord to seek permission to use our code.
Any changes that you may make to the code are yours but that does not make the script yours.
Discord: https://discord.gg/XSsBV6b
The credit below may be used by another script do not remove.
]]
local credits = {{
name='Explosive Gaming Custom Commands',
owner='Explosive Gaming',
dev='Cooldude2606',
description='Allows ease to making custom commands in game',
factorio_version='0.15.23',
show=true
}}
local function credit_loop(reg) for _,cred in pairs(reg) do table.insert(credits,cred) end end
--Please Only Edit Below This Line-----------------------------------------------------------
local Exp_commands = {}
--Used mainly by the code to convert the inputs into a string
function command_inputs_to_string(command)
local function command_inputs_to_string(command)
local str_inputs = ''
for _,input in pairs(command.inputs) do
if input == true then break end
@@ -29,7 +18,7 @@ function command_inputs_to_string(command)
return str_inputs
end
--Can be used to ensure the right number of inputs are given
function get_command_args(event,command,allow_invaild)
local function get_command_args(event,command,allow_invaild)
local args = {}
if not event.parameter then
if #command.inputs > 0 then
@@ -52,44 +41,53 @@ end
--event(player,event,args) if the function that will be ran on the command use
function define_command(name,help,inputs,event)
if not name then error('Command requires a name') end
local help = help or 'No Help Given'
local help = help or {'commands.no-help'}
local inputs = inputs or {true}
if not event or type(event) ~= 'function' then error('Command requires a function') end
table.insert(Exp_commands,{name=name,help=help,inputs=inputs,event=event})
Exp_commands[name]={name=name,help=help,inputs=inputs,event=event}
end
--The magic for the commands. It is a hard bit of code so GL; but it will call the command event have some sanitisaion of the input
function load_command(command)
local function load_command(command)
--is the command all ready loaded
if commands.commands[command.name] then return end
--start loading command
global.exp_core.commands[command.name] = command
debug_write({'COMMAND','LOAD'},command.name)
game.write_file('commands.log','\n'..game.tick..' Loaded Command: '..command.name, true, 0)
commands.add_command(command.name,command_inputs_to_string(command)..command.help,function(event)
local command_data = nil
for _,command_d in pairs(Exp_commands) do if event.name == command_d[1] then command_data = command_d break end end
--add command to game
commands.add_command(command.name,{command.help,command_inputs_to_string(command)},function(event)
--gets the command data
local command_data = global.exp_core.commands[event.name]
debug_write({'COMMAND','RUN','START'},command.name)
debug_write({'COMMAND','RUN','PLAYER-INDEX'},event.player_index)
if event.player_index then
--player ran command so authoriz it
local player = game.players[event.player_index]
if not ranking.rank_allowed(ranking.get_player_rank(player),command.name) then
debug_write({'COMMAND','RUN','ALLOWED'},false)
player.print('401 - Unauthorized: Access is denied due to invalid credentials')
player.print({'commands.unauthorized'})
game.write_file('commands.log','\n'..game.tick..' Player: '..player.name..' Failed to use command (Unauthorized): '..command.name..' With args of: '..table.tostring(get_command_args(event,command,true)), true, 0)
return
end
--start prossessing command inputs, check if valid
debug_write({'COMMAND','RUN','ALLOWED'},true)
local args = get_command_args(event,command)
debug_write({'COMMAND','RUN','ARGS'},args)
if args == 'Invalid' then
player.print('Invalid Input, /'..command.name..' '..command_inputs_to_string(command)) return
player.print({'commands.invalid-inputs',command.name,command_inputs_to_string(command)})
game.write_file('commands.log','\n'..game.tick..' Player: '..player.name..' Failed to use command (Invalid Args): '..command.name..' With args of: '..table.tostring(get_command_args(event,command,true)), true, 0)
return
end
--run the callback function of the command
debug_write({'COMMAND','RUN','FUNCTION'},command.name)
command.event(player,event,args)
player.print('Command Complete')
player.print({'commands.command-ran'})
game.write_file('commands.log','\n'..game.tick..' Player: '..player.name..' Used command: '..command.name..' With args of: '..table.tostring(args), true, 0)
else
--server ran command so skip authorizion
local args = get_command_args(event,command)
if args == 'Invalid' then print('Invalid Input, /'..command.name..' '..command_inputs_to_string(command)) return end
debug_write({'COMMAND','RUN','ARGS'},args)
--run the callback function of the command
debug_write({'COMMAND','RUN','FUNCTION'},command.name)
command.event('<server>',event,args)
print('Command Complete')
@@ -102,12 +100,11 @@ end
function get_commands(rank)
local rank = rank or 'Owner'
local to_return = {}
for _,command in pairs(global.exp_core.commands) do
if ranking.rank_allowed(ranking.string_to_rank(rank),command.name) then table.insert(to_return,command) end
for command_name,command in pairs(global.exp_core.commands) do
if ranking.rank_allowed(ranking.string_to_rank(rank),command_name) then table.insert(to_return,command) end
end
return to_return
end
Event.register(Event.soft_init,function() global.exp_core.commands = Exp_commands for _,command in pairs(Exp_commands) do load_command(command) end end)
Event.register(defines.events.on_player_joined_game,function() for _,command in pairs(Exp_commands) do load_command(command) end end)
--Please Only Edit Above This Line-----------------------------------------------------------
return credits
Event.register(Event.soft_init,function() for command_name,command in pairs(Exp_commands) do load_command(command) end end)
--######TEST#####TEST#####TEST###### un comment below
--Event.register(defines.events.on_player_joined_game,function() for command_name,command in pairs(Exp_commands) do load_command(command) end end)