Added A custom Command Prosesser and a bit more

This commit is contained in:
Cooldude2606
2017-07-10 18:47:48 +01:00
parent 770fcf28b7
commit 97d3fd0596
7 changed files with 120 additions and 55 deletions

View File

@@ -0,0 +1,81 @@
--[[
Explosive Gaming
This file can be used with permission but this and the credit below must remain in the file.
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 str_inputs = ''
for _,input in pairs(command[3]) do
if input == true then break end
str_inputs = str_inputs..'<'..input..'> '
end
return str_inputs
end
--can be used to ensure the right number of inputs are given
function get_command_args(event,command)
local player = game.players[event.player_index]
if not event.parameter then player.print('Invaild Input, /'..command[1]..' '..command_inputs_to_string(command)) if #command[3] > 0 then return 'Invaild' else return end end
local args = {}
for word in event.parameter:gmatch('%S+') do table.insert(args,word) end
if command[3][#command[3]] == true then
if #args < #command[3]-1 then player.print('Invaild Input, /'..command[1]..' '..command_inputs_to_string(command)) return 'Invaild' end
else
if #args ~= #command[3] then player.print('Invaild Input, /'..command[1]..' '..command_inputs_to_string(command)) return 'Invaild' end
end return args
end
--name is what is used in /command
--help is the help infor given
--inputs is a list ie {'name','message',true} the last value being true apossed to a string allows a varible number of words for the last input ie message can be mutilple words long
--restriction is the minium rank that can use the caommand
--event(player,event,args) if the function that will be ran on the command use
function define_command(name,help,inputs,restriction,event)
if not name then error('Command requires a name') end
local help = help or 'No Help Given'
local inputs = inputs or {true}
local restriction = restriction or 0
if not event or type(event) ~= 'function' then error('Command requires a function') end
table.insert(Exp_commands,{name,help,inputs,restriction,event})
end
--the magic for the commnads it is a hard bit of code so GL; but it will call the command event have some satatisaion of the input
function load_command(command)
if commands.commands[command[1]] then return end
commands.add_command(command[1],command_inputs_to_string(command)..command[2],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
if event.player_index then
local player = game.players[event.player_index]
local temp_restriction = nil
if type(command[4]) == 'number' then temp_restriction = command[4] end
local restriction = temp_restriction or string_to_rank(command[4]).power or 0
if get_rank(player).power > restriction then player.print('401 - Unauthorized: Access is denied due to invalid credentials') return end
local args = get_command_args(event,command)
if args == 'Invaild' then return end
command[5](player,event,args)
else
local args = get_command_args(event,command)
if args == 'Invaild' then return end
command[5]('<server>',event)
end
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

View File

@@ -50,7 +50,7 @@ function rank_print(msg, rank, inv)
end end
else else
if rankPower <= rank.power then if rankPower <= rank.power then
if rank.shortHand ~= '' then player.print(('['..(rank.shortHand)..']: '..msg)) else player.print(('[Everyone]: '..msg)) end if rank.short_hand ~= '' then player.print(('['..(rank.short_hand)..']: '..msg)) else player.print(('[Everyone]: '..msg)) end
end end
end end
end end
@@ -68,9 +68,8 @@ function give_rank(player,rank,by_player)
else else
rank_print(player.name..' was '..message..' to '..rank.name..' by <system>','Guest') rank_print(player.name..' was '..message..' to '..rank.name..' by <system>','Guest')
end end
player.print('You Have Been Given The '..rank.name..' Rank!') if rank.name ~= 'Guest' then player.print('You Have Been Given The '..rank.name..' Rank!') end
--if for some reason the tag is diffrent to the deafult if player.tag ~= old_rank.tag and player.tag ~= '' then player.print('Your Tag Was Reset Due To A Rank Change') end
if player.tag ~= old_rank.tag then player.print('Your Tag Was Reset Due To A Rank Change') end
--rank change --rank change
player.permission_group = game.permissions.get_group(rank.name) player.permission_group = game.permissions.get_group(rank.name)
player.tag = get_rank(player).tag player.tag = get_rank(player).tag
@@ -117,7 +116,7 @@ function find_new_rank(player)
end end
end end
--lose ends --lose ends
if get_rank(player).power <= 3 and not player.admin then rank_print(player.name..' needs to be promoted.') end if get_rank(player).power <= string_to_rank('mod').power and not player.admin then rank_print(player.name..' needs to be promoted.') end
if old_rank.name ~= get_rank(player).name then global.old_ranks[player.index]=old_rank.name end if old_rank.name ~= get_rank(player).name then global.old_ranks[player.index]=old_rank.name end
end end
--event handlers --event handlers

View File

@@ -19,15 +19,13 @@ local credits = {{
local function credit_loop(reg) for _,cred in pairs(reg) do table.insert(credits,cred) end end local function credit_loop(reg) for _,cred in pairs(reg) do table.insert(credits,cred) end end
--Please Only Edit Below This Line----------------------------------------------------------- --Please Only Edit Below This Line-----------------------------------------------------------
--[[ --[[
Rank Powers: Name is what will be used in the scripts and is offten the best chose for display in text.
0: root short_hand is what can be used when short on space but the rank still need to be displayed.
1: no restrictions - management ranks tag is the tag the player will gain when moved to the rank, it can be nil.
2: unable to use scripting commands - must be with sudo() time is used for auto rank feature where you are moved to the rank after a certain play time in minutes.
3: able to jail people - must use /promote to be able to ban colour is the rgb value that can be used to emphaise gui elelemts based on rank.
4: highest user power power is not in the list below as it is auto defined but allows compairison between ranks.
5: people who are trusted disallow is a list containing input acttion that the user can not preform.
6: default power level
7: full restrictions
For disallow add to the list the end part of the input action For disallow add to the list the end part of the input action
Example: defines.input_action.drop_item -> 'drop_item' Example: defines.input_action.drop_item -> 'drop_item'
@@ -35,33 +33,29 @@ http://lua-api.factorio.com/latest/defines.html#defines.input_action
--]] --]]
local ranks = { local ranks = {
{name='Owner', {name='Owner',
shortHand='Owner', short_hand='Owner',
tag='[Owner]', tag='[Owner]',
power=0,
time=nil, time=nil,
colour={r=170,g=0,b=0}, colour={r=170,g=0,b=0},
disallow={}}, disallow={}},
{name='Community Manager', {name='Community Manager',
shortHand='Com Mngr', short_hand='Com Mngr',
tag='[Com Mngr]', tag='[Com Mngr]',
power=1,
time=nil, time=nil,
colour={r=150,g=68,b=161}, colour={r=150,g=68,b=161},
disallow={}}, disallow={}},
{name='Developer', {name='Developer',
shortHand='Dev', short_hand='Dev',
tag='[Dev]', tag='[Dev]',
power=1,
time=nil, time=nil,
colour={r=179,g=125,b=46}, colour={r=179,g=125,b=46},
disallow={}}, disallow={}},
{name='Admin', {name='Admin',
shortHand='Admin', short_hand='Admin',
tag='[Admin]', tag='[Admin]',
power=2,
time=nil, time=nil,
colour={r=233,g=63,b=233}, colour={r=233,g=63,b=233},
disallow={ disallow={
@@ -72,9 +66,8 @@ local ranks = {
}, },
{name='Mod', {name='Mod',
shortHand='Mod', short_hand='Mod',
tag='[Mod]', tag='[Mod]',
power=3,
time=nil, time=nil,
colour={r=0,g=170,b=0}, colour={r=0,g=170,b=0},
disallow={ disallow={
@@ -82,33 +75,29 @@ local ranks = {
}, },
{name='Donator', {name='Donator',
shortHand='P2W', short_hand='P2W',
tag='[P2W]', tag='[P2W]',
power=4,
time=nil, time=nil,
colour={r=233,g=63,b=233}, colour={r=233,g=63,b=233},
disallow={}}, disallow={}},
{name='Veteran', {name='Veteran',
shortHand='Vet', short_hand='Vet',
tag='[Veteran]', tag='[Veteran]',
power=4,
time=600, time=600,
colour={r=140,g=120,b=200}, colour={r=140,g=120,b=200},
disallow={}}, disallow={}},
{name='Member', {name='Member',
shortHand='Mem', short_hand='Mem',
tag='[Member]', tag='[Member]',
power=5,
time=nil, time=nil,
colour={r=24,g=172,b=188}, colour={r=24,g=172,b=188},
disallow={}}, disallow={}},
{name='Regular', {name='Regular',
shortHand='Reg', short_hand='Reg',
tag='[Regular]', tag='[Regular]',
power=5,
time=180, time=180,
colour={r=24,g=172,b=188}, colour={r=24,g=172,b=188},
disallow={ disallow={
@@ -119,9 +108,8 @@ local ranks = {
}, },
{name='Guest', {name='Guest',
shortHand='', short_hand='',
tag='[Guest]', tag='[Guest]',
power=6,
time=nil, time=nil,
colour={r=255,g=159,b=27}, colour={r=255,g=159,b=27},
disallow={ disallow={
@@ -132,9 +120,8 @@ local ranks = {
}, },
{name='Jail', {name='Jail',
shortHand='Jail', short_hand='Jail',
tag='[Jail]', tag='[Jail]',
power=7,
time=nil, time=nil,
colour={r=50,g=50,b=50}, colour={r=50,g=50,b=50},
disallow={ disallow={
@@ -146,6 +133,7 @@ local ranks = {
} }
-- This For Loop cauess the disallows of each rank to be feed into the one below its self -- This For Loop cauess the disallows of each rank to be feed into the one below its self
for n,rank in pairs(ranks) do for n,rank in pairs(ranks) do
rank.power = n
if ranks[n-1] then if ranks[n-1] then
for _,disallow in pairs(ranks[n-1].disallow) do for _,disallow in pairs(ranks[n-1].disallow) do
table.insert(rank.disallow,disallow) table.insert(rank.disallow,disallow)

View File

@@ -19,23 +19,16 @@ local credits = {{
local function credit_loop(reg) for _,cred in pairs(reg) do table.insert(credits,cred) end end local function credit_loop(reg) for _,cred in pairs(reg) do table.insert(credits,cred) end end
--Please Only Edit Below This Line----------------------------------------------------------- --Please Only Edit Below This Line-----------------------------------------------------------
--this command is just a way or using loadstring from in game while keeping achevements --this command is just a way or using loadstring from in game while keeping achevements
Event.register(defines.events.on_player_joined_game,function() define_command('server-interface','For use of the highest staff only',{'command',true},'admin',function(player,event,args)
if commands.commands['server-interface'] then return end if player == '<server>' then
commands.add_command('server-interface','<command> #2#',function(event) local returned,value = pcall(loadstring(event.parameter))
if event.player_index then if type(value) == 'table' then game.write_file('log.txt', '\n Ran by: <server> \n Code: '..event.parameter..'\n $£$ '..table.to_string(value), true, 0) print(table.to_string(value))
local by_player = game.players[event.player_index] else game.write_file('log.txt', '\n Ran by: <server> \n Code: '..event.parameter..'\n $£$ '..tostring(value), true, 0) print(value) end
if get_rank(by_player).power > 2 then by_player.print('401 - Unauthorized: Access is denied due to invalid credentials') return end else
if event.parameter then else by_player.print('Invaid Input, /server-interface <command>') return end local returned,value = pcall(loadstring(event.parameter))
local returned,value = pcall(loadstring(event.parameter)) if type(value) == 'table' then game.write_file('log.txt', '\n Ran by: '..player.name..'\n Code: '..event.parameter..'\n $£$ '..table.to_string(value), true, 0) player.print(table.to_string(value))
if type(value) == 'table' then game.write_file('log.txt', '\n Ran by: '..by_player.name..'\n Code: '..event.parameter..'\n $£$ '..table.to_string(value), true, 0) by_player.print(table.to_string(value)) else game.write_file('log.txt', '\n Ran by: '..player.name..'\n Code: '..event.parameter..'\n $£$ '..tostring(value), true, 0) player.print(value) end
else game.write_file('log.txt', '\n Ran by: '..by_player.name..'\n Code: '..event.parameter..'\n $£$ '..tostring(value), true, 0) by_player.print(value) end end
else
if event.parameter then else print('Invaid Input, /server-interface <command>') return end
local returned,value = pcall(loadstring(event.parameter))
if type(value) == 'table' then game.write_file('log.txt', '\n Ran by: <server> \n Code: '..event.parameter..'\n $£$ '..table.to_string(value), true, 0) print(table.to_string(value))
else game.write_file('log.txt', '\n Ran by: <server> \n Code: '..event.parameter..'\n $£$ '..tostring(value), true, 0) print(value) end
end
end)
end) end)
--this is used when changing permsion groups when the person does not have permsion to --this is used when changing permsion groups when the person does not have permsion to
function sudo(command,args) table.insert(global.sudo,{fun=command,var=args}) end function sudo(command,args) table.insert(global.sudo,{fun=command,var=args}) end

View File

@@ -111,7 +111,7 @@ function player_table_functions.draw(player,frame,filters,input_location)
then player_table.add{name=p.name.."status", type="label", caption="Online"} then player_table.add{name=p.name.."status", type="label", caption="Online"}
else player_table.add{name=p.name.."s", type="label", caption="Offline"} end else player_table.add{name=p.name.."s", type="label", caption="Offline"} end
player_table.add{name=p.name.."online_time", type="label", caption=(tick_to_hour(p.online_time)..'H '..(tick_to_min(p.online_time)-60*tick_to_hour(p.online_time))..'M')} player_table.add{name=p.name.."online_time", type="label", caption=(tick_to_hour(p.online_time)..'H '..(tick_to_min(p.online_time)-60*tick_to_hour(p.online_time))..'M')}
player_table.add{name=p.name.."rank", type="label", caption=get_rank(p).shortHand} player_table.add{name=p.name.."rank", type="label", caption=get_rank(p).short_hand}
end end
end end
end end

View File

@@ -33,7 +33,10 @@ function toolbar.draw(player)
toolbar_frame.clear() toolbar_frame.clear()
for _,btn in pairs(toolbar.buttons) do for _,btn in pairs(toolbar.buttons) do
local rank = get_rank(player) local rank = get_rank(player)
if btn[2] >= rank.power then local temp_restriction = nil
if type(btn[2]) == 'number' then temp_restriction = btn[2] end
local restriction = temp_restriction or string_to_rank(btn[2]).power or 0
if restriction >= rank.power then
ExpGui.add_input.draw_button(toolbar_frame,btn[1]) ExpGui.add_input.draw_button(toolbar_frame,btn[1])
end end
end end

View File

@@ -24,6 +24,7 @@ credit_loop(require("ExpGaming - Rank Table"))
credit_loop(require("ExpGaming - Rank Presets")) credit_loop(require("ExpGaming - Rank Presets"))
credit_loop(require("ExpGaming - Rank Control")) credit_loop(require("ExpGaming - Rank Control"))
credit_loop(require("GUI/file-header")) credit_loop(require("GUI/file-header"))
credit_loop(require("ExpGaming - Command Maker"))
credit_loop(require("ExpGaming - Server Interface")) credit_loop(require("ExpGaming - Server Interface"))
--Please Only Edit Above This Line----------------------------------------------------------- --Please Only Edit Above This Line-----------------------------------------------------------
return credits return credits