From 90450056bfea4edb19e3e5a61488c8da80d51fc4 Mon Sep 17 00:00:00 2001 From: Cooldude2606 Date: Fri, 22 Jun 2018 19:17:36 +0100 Subject: [PATCH] Updated Module to use require --- FactorioSoftmodManager.lua | 45 +- factorioSoftmodManager.db | Bin 73728 -> 0 bytes .../ExpGamingCore.Commands@4.0.0.json | 21 - jsonDownloads/ExpGamingCore.Gui@4.0.0.json | 24 -- .../ExpGamingCore.Ranking@4.0.0.json | 24 -- jsonDownloads/ExpGamingCore.Server@4.0.0.json | 26 -- jsonDownloads/ExpGamingCore.Sync@4.0.0.json | 25 -- jsonDownloads/ExpGamingCore@4.0.0.json | 139 ------ jsonDownloads/ExpGamingLib@4.0.0.json | 19 - jsonDownloads/ExpGamingScenario@0.16.51.json | 13 - jsonDownloads/FactorioModGui@1.0.0.json | 17 - jsonDownloads/FactorioStdLib.Time@0.8.0.json | 15 - jsonDownloads/FactorioStdLib@0.8.0.json | 93 ---- modules/ExpGamingCore/Commands/control.lua | 6 + modules/ExpGamingCore/Commands/softmod.json | 8 +- modules/ExpGamingCore/Gui/control.lua | 7 +- modules/ExpGamingCore/Gui/softmod.json | 8 +- modules/ExpGamingCore/Gui/src/center.lua | 3 + modules/ExpGamingCore/Gui/src/inputs.lua | 3 + modules/ExpGamingCore/Gui/src/left.lua | 5 + modules/ExpGamingCore/Gui/src/popup.lua | 2 + modules/ExpGamingCore/Gui/src/server.lua | 3 + modules/ExpGamingCore/Gui/src/test.lua | 1 + modules/ExpGamingCore/Gui/src/toolbar.lua | 4 + modules/ExpGamingCore/Ranking/control.lua | 12 +- modules/ExpGamingCore/Ranking/softmod.json | 8 +- modules/ExpGamingCore/Ranking/src/server.lua | 4 + modules/ExpGamingCore/Server/control.lua | 5 +- modules/ExpGamingCore/Server/softmod.json | 9 +- modules/ExpGamingCore/Server/src/commands.lua | 2 + modules/ExpGamingCore/Sync/control.lua | 7 +- modules/ExpGamingCore/Sync/softmod.json | 8 +- modules/ExpGamingCore/Sync/src/gui.lua | 3 + modules/ExpGamingCore/Sync/src/ranking.lua | 6 +- modules/ExpGamingCore/softmod.json | 39 +- modules/ExpGamingLib/control.lua | 3 + modules/ExpGamingLib/softmod.json | 13 +- modules/FactorioStdLib/Color/control.lua | 232 ++++++++++ .../FactorioStdLib/Color/softmod.json | 8 +- modules/FactorioStdLib/Game/control.lua | 110 +++++ .../FactorioStdLib/Game/softmod.json | 8 +- modules/FactorioStdLib/String/control.lua | 86 ++++ .../FactorioStdLib/String/softmod.json | 8 +- modules/FactorioStdLib/Table/control.lua | 397 ++++++++++++++++++ .../FactorioStdLib/Table/softmod.json | 8 +- modules/FactorioStdLib/softmod.json | 51 +-- softmod.json | 8 +- 47 files changed, 1042 insertions(+), 504 deletions(-) delete mode 100644 factorioSoftmodManager.db delete mode 100644 jsonDownloads/ExpGamingCore.Commands@4.0.0.json delete mode 100644 jsonDownloads/ExpGamingCore.Gui@4.0.0.json delete mode 100644 jsonDownloads/ExpGamingCore.Ranking@4.0.0.json delete mode 100644 jsonDownloads/ExpGamingCore.Server@4.0.0.json delete mode 100644 jsonDownloads/ExpGamingCore.Sync@4.0.0.json delete mode 100644 jsonDownloads/ExpGamingCore@4.0.0.json delete mode 100644 jsonDownloads/ExpGamingLib@4.0.0.json delete mode 100644 jsonDownloads/ExpGamingScenario@0.16.51.json delete mode 100644 jsonDownloads/FactorioModGui@1.0.0.json delete mode 100644 jsonDownloads/FactorioStdLib.Time@0.8.0.json delete mode 100644 jsonDownloads/FactorioStdLib@0.8.0.json create mode 100644 modules/FactorioStdLib/Color/control.lua rename jsonDownloads/FactorioStdLib.Color@0.8.0.json => modules/FactorioStdLib/Color/softmod.json (56%) create mode 100644 modules/FactorioStdLib/Game/control.lua rename jsonDownloads/FactorioStdLib.Game@0.8.0.json => modules/FactorioStdLib/Game/softmod.json (53%) create mode 100644 modules/FactorioStdLib/String/control.lua rename jsonDownloads/FactorioStdLib.String@0.8.0.json => modules/FactorioStdLib/String/softmod.json (54%) create mode 100644 modules/FactorioStdLib/Table/control.lua rename jsonDownloads/FactorioStdLib.Table@0.8.0.json => modules/FactorioStdLib/Table/softmod.json (54%) diff --git a/FactorioSoftmodManager.lua b/FactorioSoftmodManager.lua index c29bfb15..8a91111e 100644 --- a/FactorioSoftmodManager.lua +++ b/FactorioSoftmodManager.lua @@ -233,19 +233,60 @@ Manager.sandbox = setmetatable({ local sandbox = tbl() local env = type(env) == 'table' and env or type(env) ~= 'nil' and {env} or {} -- new indexs are saved into sandbox and if _G does not have the index then look in sandbox + local old_mt = getmetatable(_G) or {} setmetatable(env,{__index=sandbox}) setmetatable(_G,{__index=env,__newindex=sandbox}) -- runs the callback local rtn = {pcall(callback,...)} local success = table.remove(rtn,1) -- this is to allow modules to be access with out the need of using Mangaer[name] also keeps global clean - setmetatable(_G,{__index=ReadOnlyManager}) + setmetatable(_G,old_mt) if success then return sandbox, success, rtn else return sandbox, success, rtn[1] end else return setmetatable({},{__index=tbl}) end end }) +--- Allows access to modules via require and collections are returned as one object +-- @function Manager.require +-- @usage local Module = Manager.require(ModuleName) +-- @usage local Module = Manager.require[ModuleName] +-- @usage local SrcData = Manager.require(path) +-- @treturn table the module that was required, one object containg submodules for a +Manager.require = setmetatable({ + __require=require +},{ + __metatable=false, + __index=function(tbl,key) return tbl(key) end, + __call=function(tbl,path,env) + local raw_require = rawget(tbl,'__require') + local env = env or {} + -- runs in a sand box becuase sandbox everything + local sandbox, success, data = Manager.sandbox(raw_require,env,path) + -- if there was no error then it assumed the path existed and returns the data + if success then return data + else + -- else it assums the path was a module name and checks index for the module + if moduleIndex[path] then return rawget(Manager.loadModules,path) end + -- if its not listed then it tries to remove a version tag and tries again + local path_no_version = path.find('@') and path:sub(1,path:find('@')-1) or path + if moduleIndex[path_no_version] then return rawget(Manager.loadModules,path_no_version) end + -- still no then it will look for all modules that include this one in the name (like a collection) + local collection = {} + for module_name,path in pairs(moduleIndex) do + if module_name:find(path_no_version) then + local start, _end = module_name:find(path_no_version) + collection[module_name:sub(_end)] = rawget(Manager.loadModules,module_name) + end + end + -- if there is any keys in the collection the collection is returned else the errors with the require error + for _ in pairs(collection) do return collection end + error(data,2) + end + end +}) +require = Manager.require + --- Loads the modules that are present in the index list -- @function Manager.loadModules -- @usage Manager.loadModules() -- loads all moddules in the index list @@ -262,7 +303,7 @@ Manager.loadModules = setmetatable({}, for module_name,path in pairs(moduleIndex) do Manager.verbose('Loading module: "'..module_name..'"; path: '..path) -- runs the module in a sandbox env - local sandbox, success, module = Manager.sandbox(require,{module_name=setupModuleName(module_name),module_path=path},path..'/control') + local sandbox, success, module = Manager.sandbox(Manager.require.__require,{module_name=setupModuleName(module_name),module_path=path},path..'/control') -- extracts the module into a global index table for later use if success then -- verbose to notifie of any globals that were attempted to be created diff --git a/factorioSoftmodManager.db b/factorioSoftmodManager.db deleted file mode 100644 index 57c65d0f10046d9d3cddf8f349dea4163fc40797..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73728 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 i{{(k{a0du?fN%#0cYu6", + "contact": "", + "license": "", "dependencies": { "ExpGamingLib": "^4.0.0", "FactorioStdLib.Table": "^0.8.0", diff --git a/modules/ExpGamingCore/Gui/control.lua b/modules/ExpGamingCore/Gui/control.lua index d558ddde..09bb5463 100644 --- a/modules/ExpGamingCore/Gui/control.lua +++ b/modules/ExpGamingCore/Gui/control.lua @@ -4,6 +4,9 @@ -- @author Cooldude2606 -- @license https://github.com/explosivegaming/scenario/blob/master/LICENSE +local Game = require('FactorioStdLib.Game') +local Color = require('FactorioStdLib.Color') + local Gui = {} local Gui_data = {} local global = global() @@ -154,8 +157,8 @@ script.on_event('on_player_respawned',function(event) end) function Gui:on_init() - if loaded_modules.Server then verbose('ExpGamingCore.Server is installed; Loading server src') require(module_path..'/src/server') end - if loaded_modules.Ranking then + if loaded_modules['ExpGamingCore.Server'] then verbose('ExpGamingCore.Server is installed; Loading server src') require(module_path..'/src/server') end + if loaded_modules['ExpGamingCore.Ranking'] then verbose('ExpGamingCore.Ranking is installed; Loading ranking src') script.on_event('on_rank_change',function(event) Gui.toolbar.on_rank_change(event) diff --git a/modules/ExpGamingCore/Gui/softmod.json b/modules/ExpGamingCore/Gui/softmod.json index b271142a..a2468766 100644 --- a/modules/ExpGamingCore/Gui/softmod.json +++ b/modules/ExpGamingCore/Gui/softmod.json @@ -1,7 +1,10 @@ { "name": "Gui", + "version": "4.0.0", "module": "Gui", + "type": "Submodule", "description": "Adds a objective version to custom guis.", + "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/ExpGamingCore.Gui.zip", "keywords": [ "Library", "Lib", @@ -10,8 +13,9 @@ "Gui", "ExpGui" ], - "version": "4.0.0", - "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/ExpGamingCore.Gui.zip", + "author": "", + "contact": "", + "license": "", "dependencies": { "ExpGamingLib": "^4.0.0", "FactorioStdLib.Table": "^0.8.0", diff --git a/modules/ExpGamingCore/Gui/src/center.lua b/modules/ExpGamingCore/Gui/src/center.lua index fc4fd13f..1da41f19 100644 --- a/modules/ExpGamingCore/Gui/src/center.lua +++ b/modules/ExpGamingCore/Gui/src/center.lua @@ -7,7 +7,10 @@ --- This is a submodule of ExpGamingCore.Gui but for ldoc reasons it is under its own module -- @function _comment +local Game = require('FactorioStdLib.Game') +local Color = require('FactorioStdLib.Color') local mod_gui = require("mod-gui") + local center = {} center._center = {} diff --git a/modules/ExpGamingCore/Gui/src/inputs.lua b/modules/ExpGamingCore/Gui/src/inputs.lua index 0bab4e18..18cb869a 100644 --- a/modules/ExpGamingCore/Gui/src/inputs.lua +++ b/modules/ExpGamingCore/Gui/src/inputs.lua @@ -7,7 +7,10 @@ --- This is a submodule of ExpGamingCore.Gui but for ldoc reasons it is under its own module -- @function _comment +local Game = require('FactorioStdLib.Game') +local Color = require('FactorioStdLib.Color') local mod_gui = require("mod-gui") + local inputs = {} inputs._input = {} -- these are just so you can have short cuts to this diff --git a/modules/ExpGamingCore/Gui/src/left.lua b/modules/ExpGamingCore/Gui/src/left.lua index ceff5753..b6017a0b 100644 --- a/modules/ExpGamingCore/Gui/src/left.lua +++ b/modules/ExpGamingCore/Gui/src/left.lua @@ -7,7 +7,12 @@ --- This is a submodule of ExpGamingCore.Gui but for ldoc reasons it is under its own module -- @function _comment +local Game = require('FactorioStdLib.Game') +local Color = require('FactorioStdLib.Color') +local success, Ranking = pcall(require,'ExpGamingCore.Ranking') +if not success then Ranking = nil end success = nil local mod_gui = require("mod-gui") + local left = {} left._left = {} diff --git a/modules/ExpGamingCore/Gui/src/popup.lua b/modules/ExpGamingCore/Gui/src/popup.lua index 0fd5f7b1..2ddfe73e 100644 --- a/modules/ExpGamingCore/Gui/src/popup.lua +++ b/modules/ExpGamingCore/Gui/src/popup.lua @@ -7,7 +7,9 @@ --- This is a submodule of ExpGamingCore.Gui but for ldoc reasons it is under its own module -- @function _comment +local Game = require('FactorioStdLib.Game') local mod_gui = require("mod-gui") + local popup = {} popup._popup = {} diff --git a/modules/ExpGamingCore/Gui/src/server.lua b/modules/ExpGamingCore/Gui/src/server.lua index dec8d7ce..d344e839 100644 --- a/modules/ExpGamingCore/Gui/src/server.lua +++ b/modules/ExpGamingCore/Gui/src/server.lua @@ -7,6 +7,9 @@ --- This file will be loaded when ExpGamingCore.Commands is present -- @function _comment +local Game = require('FactorioStdLib.Game') +local Server = require('ExpGamingCore.Server') + --- Adds a server thread that allows the camera follows to be toggled off and on -- @function __comment script.on_event(-1,function(event) diff --git a/modules/ExpGamingCore/Gui/src/test.lua b/modules/ExpGamingCore/Gui/src/test.lua index c38c09bd..02614106 100644 --- a/modules/ExpGamingCore/Gui/src/test.lua +++ b/modules/ExpGamingCore/Gui/src/test.lua @@ -6,6 +6,7 @@ --- This is a submodule of ExpGamingCore.Gui but for ldoc reasons it is under its own module -- @function _comment +local Gui = require('ExpGamingCore.Gui') local mod_gui = require("mod-gui") local gui_tset_close = Gui.inputs.add{ diff --git a/modules/ExpGamingCore/Gui/src/toolbar.lua b/modules/ExpGamingCore/Gui/src/toolbar.lua index c9105010..d45848c4 100644 --- a/modules/ExpGamingCore/Gui/src/toolbar.lua +++ b/modules/ExpGamingCore/Gui/src/toolbar.lua @@ -7,7 +7,11 @@ --- This is a submodule of ExpGamingCore.Gui but for ldoc reasons it is under its own module -- @function _comment +local Game = require('FactorioStdLib.Game') +local success, Ranking = pcall(require,'ExpGamingCore.Ranking') +if not success then Ranking = nil end success = nil local mod_gui = require("mod-gui") + local toolbar = {} --- Add a button to the toolbar, ranks need to be allowed to use these buttons if ranks is preset diff --git a/modules/ExpGamingCore/Ranking/control.lua b/modules/ExpGamingCore/Ranking/control.lua index b14e0b47..e5255f95 100644 --- a/modules/ExpGamingCore/Ranking/control.lua +++ b/modules/ExpGamingCore/Ranking/control.lua @@ -3,6 +3,10 @@ -- @alias Ranking -- @author Cooldude2606 -- @license https://github.com/explosivegaming/scenario/blob/master/LICENSE + +local Game = require('FactorioStdLib.Game') +local Color = require('FactorioStdLib.Color') + local Ranking = {} local module_verbose = false --true|false @@ -427,15 +431,13 @@ script.on_event('on_tick',function(event) end end) -_G.Ranking = Ranking verbose('Loading rank core...') -require(module_path..'/src/core') +require(module_path..'/src/core',{Ranking=Ranking}) verbose('Loading rank configs...') -require(module_path..'/src/config') -_G.Ranking = nil +require(module_path..'/src/config',{Ranking=Ranking}) function Ranking:on_init() - if loaded_modules.Server then verbose('ExpGamingCore.Server is installed; Loading server src') require(module_path..'/src/server') end + if loaded_modules['ExpGamingCore.Server'] then verbose('ExpGamingCore.Server is installed; Loading server src') require(module_path..'/src/server',{Ranking=Ranking}) end end function Ranking:on_post() diff --git a/modules/ExpGamingCore/Ranking/softmod.json b/modules/ExpGamingCore/Ranking/softmod.json index 5f499ee5..08bcd50e 100644 --- a/modules/ExpGamingCore/Ranking/softmod.json +++ b/modules/ExpGamingCore/Ranking/softmod.json @@ -1,7 +1,10 @@ { "name": "Ranking", + "version": "4.0.0", "module": "Ranking", + "type": "Submodule", "description": "A full ranking system for factorio.", + "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/ExpGamingCore.Ranking.zip", "keywords": [ "Library", "Lib", @@ -12,8 +15,9 @@ "Permissions", "Roles" ], - "version": "4.0.0", - "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/ExpGamingCore.Ranking.zip", + "author": "", + "contact": "", + "license": "", "dependencies": { "ExpGamingLib": "^4.0.0", "FactorioStdLib.Color": "^0.8.0", diff --git a/modules/ExpGamingCore/Ranking/src/server.lua b/modules/ExpGamingCore/Ranking/src/server.lua index bef291b1..468b8330 100644 --- a/modules/ExpGamingCore/Ranking/src/server.lua +++ b/modules/ExpGamingCore/Ranking/src/server.lua @@ -7,6 +7,10 @@ --- This file will be loaded when ExpGamingCore.Server is present -- @function _comment +local Game = require('FactorioStdLib.Game') +local Color = require('FactorioStdLib.Color') +local Server = require('ExpGamingCore.Server') + --- Print a message to all players of this rank -- @usage rank:print('foo') -- prints to all members of this rank -- @param rtn any value you want to return diff --git a/modules/ExpGamingCore/Server/control.lua b/modules/ExpGamingCore/Server/control.lua index 7b3c47a0..5b6cae25 100644 --- a/modules/ExpGamingCore/Server/control.lua +++ b/modules/ExpGamingCore/Server/control.lua @@ -4,6 +4,9 @@ -- @author Cooldude2606 -- @license https://github.com/explosivegaming/scenario/blob/master/LICENSE +local Game = require('FactorioStdLib.Game') +local Color = require('FactorioStdLib.Color') + local Server = {} local module_verbose = false --true|false @@ -464,7 +467,7 @@ end) function Server:on_init() for name,id in pairs(defines.events) do if not script.get_event_handler(id) then script.on_event(id,Server._thread_handler) end end - if loaded_modules.commands then verbose('ExpGamingCore.Commands is installed; Loading commands src') require(module_path..'/src/commands') end + if loaded_modules['ExpGamingCore.Commands'] then verbose('ExpGamingCore.Commands is installed; Loading commands src') require(module_path..'/src/commands',{Server=Server}) end end return Server diff --git a/modules/ExpGamingCore/Server/softmod.json b/modules/ExpGamingCore/Server/softmod.json index 1fd40d43..671b8f67 100644 --- a/modules/ExpGamingCore/Server/softmod.json +++ b/modules/ExpGamingCore/Server/softmod.json @@ -1,7 +1,10 @@ { "name": "Server", + "version": "4.0.0", "module": "Server", + "type": "Submodule", "description": "Adds a thread system and event listening and a admin bypass (recommend to disable /c and use optional /interface)", + "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/ExpGamingCore.Server.zip", "keywords": [ "Library", "Lib", @@ -12,15 +15,15 @@ "Interface", "Events" ], - "version": "4.0.0", - "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/ExpGamingCore.Server.zip", + "author": "", + "contact": "", + "license": "", "dependencies": { "ExpGamingLib": "^4.0.0", "FactorioStdLib.Table": "^0.8.0", "FactorioStdLib.Color": "^0.8.0", "FactorioStdLib.String": "^0.8.0", "FactorioStdLib.Game": "^0.8.0", - "ExpGamingCore.Ranking": "?^4.0.0", "ExpGamingCore.Commands": "?^4.0.0" } } \ No newline at end of file diff --git a/modules/ExpGamingCore/Server/src/commands.lua b/modules/ExpGamingCore/Server/src/commands.lua index 1bf391b1..5f79e805 100644 --- a/modules/ExpGamingCore/Server/src/commands.lua +++ b/modules/ExpGamingCore/Server/src/commands.lua @@ -7,6 +7,8 @@ --- This file will be loaded when ExpGamingCore.Commands is present -- @function _comment +local Game = require('FactorioStdLib.Game') + --- Runs the given input from the script -- @command interface -- @param code The code that will be ran diff --git a/modules/ExpGamingCore/Sync/control.lua b/modules/ExpGamingCore/Sync/control.lua index 488fd01e..19d58536 100644 --- a/modules/ExpGamingCore/Sync/control.lua +++ b/modules/ExpGamingCore/Sync/control.lua @@ -4,6 +4,9 @@ -- @author Cooldude2606 -- @license https://github.com/explosivegaming/scenario/blob/master/LICENSE +local Game = require('FactorioStdLib.Game') +local Color = require('FactorioStdLib.Color') + local Sync = {} local Sync_updates = {} local module_verbose = false --true|false @@ -292,8 +295,8 @@ script.on_event('on_tick',function(event) end) function Sync:on_init() - if loaded_modules.Gui then verbose('ExpGamingCore.Gui is installed; Loading gui src') require(module_path..'/src/gui') end - if loaded_modules.Ranking then verbose('ExpGamingCore.Ranking is installed; Loading ranking src') require(module_path..'/src/ranking') end + if loaded_modules['ExpGamingCore.Gui'] then verbose('ExpGamingCore.Gui is installed; Loading gui src') require(module_path..'/src/gui',{Sync=Sync}) end + if loaded_modules['ExpGamingCore.Ranking'] then verbose('ExpGamingCore.Ranking is installed; Loading ranking src') require(module_path..'/src/ranking',{Sync=Sync}) end end function Sync:on_post() diff --git a/modules/ExpGamingCore/Sync/softmod.json b/modules/ExpGamingCore/Sync/softmod.json index 3220ea30..b935e940 100644 --- a/modules/ExpGamingCore/Sync/softmod.json +++ b/modules/ExpGamingCore/Sync/softmod.json @@ -1,7 +1,10 @@ { "name": "Sync", + "version": "4.0.0", "module": "Sync", + "type": "Submodule", "description": "Allows syncing with an outside server and info panle.", + "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/ExpGamingCore.Sync.zip", "keywords": [ "Library", "Lib", @@ -12,8 +15,9 @@ "External", "Discord" ], - "version": "4.0.0", - "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/ExpGamingCore.Sync.zip", + "author": "", + "contact": "", + "license": "", "dependencies": { "ExpGamingLib": "^4.0.0", "FactorioStdLib.Color": "^0.8.0", diff --git a/modules/ExpGamingCore/Sync/src/gui.lua b/modules/ExpGamingCore/Sync/src/gui.lua index 914cb883..09603487 100644 --- a/modules/ExpGamingCore/Sync/src/gui.lua +++ b/modules/ExpGamingCore/Sync/src/gui.lua @@ -7,6 +7,9 @@ --- This file will be loaded when ExpGamingCore.Gui is present -- @function _comment +local Game = require('FactorioStdLib.Game') +local Gui = require('ExpGamingCore.Gui') + local Sync_gui_functions = {} --- Adds a emeltent to the sever info gui diff --git a/modules/ExpGamingCore/Sync/src/ranking.lua b/modules/ExpGamingCore/Sync/src/ranking.lua index 74b49294..a125e04a 100644 --- a/modules/ExpGamingCore/Sync/src/ranking.lua +++ b/modules/ExpGamingCore/Sync/src/ranking.lua @@ -6,7 +6,11 @@ --- This file will be loaded when ExpGamingCore.Ranking is present -- @function _comment - + +local Game = require('FactorioStdLib.Game') +local Color = require('FactorioStdLib.Color') +local Ranking = require('ExpGamingCore.Ranking') + --- Used as a redirect to Ranking._base_preset that will set the rank given to a player apon joining -- @usage Sync.set_ranks{player_name=rank_name,...} function Sync.set_ranks(...) diff --git a/modules/ExpGamingCore/softmod.json b/modules/ExpGamingCore/softmod.json index f360a698..eea91389 100644 --- a/modules/ExpGamingCore/softmod.json +++ b/modules/ExpGamingCore/softmod.json @@ -1,7 +1,8 @@ { "name": "ExpGamingCore", "version": "4.0.0", - "module": "Collection", + "module": "expGamingCore", + "type": "Collection", "description": "Explosive Gaming Core Files", "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/ExpGamingCore.zip", "keywords": [ @@ -16,8 +17,11 @@ "submodules": { "Commands": { "name": "Commands", + "version": "4.0.0", "module": "commands", + "type": "Submodule", "description": "A better command handler than the base game.", + "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/ExpGamingCore.Commands.zip", "keywords": [ "Library", "Lib", @@ -25,8 +29,6 @@ "Core", "Commands" ], - "version": "4.0.0", - "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/ExpGamingCore.Commands.zip", "dependencies": { "ExpGamingLib": "^4.0.0", "FactorioStdLib.Table": "^0.8.0", @@ -37,8 +39,10 @@ }, "Gui": { "name": "Gui", + "version": "4.0.0", "module": "Gui", "description": "Adds a objective version to custom guis.", + "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/ExpGamingCore.Gui.zip", "keywords": [ "Library", "Lib", @@ -47,8 +51,6 @@ "Gui", "ExpGui" ], - "version": "4.0.0", - "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/ExpGamingCore.Gui.zip", "dependencies": { "ExpGamingLib": "^4.0.0", "FactorioStdLib.Table": "^0.8.0", @@ -56,12 +58,15 @@ "FactorioStdLib.Game": "^0.8.0", "ExpGamingCore.Ranking": "?^4.0.0", "ExpGamingCore.Server": "?^4.0.0" - } + }, + "type": "Submodule" }, "Ranking": { "name": "Ranking", + "version": "4.0.0", "module": "Ranking", "description": "A full ranking system for factorio.", + "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/ExpGamingCore.Ranking.zip", "keywords": [ "Library", "Lib", @@ -72,20 +77,21 @@ "Permissions", "Roles" ], - "version": "4.0.0", - "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/ExpGamingCore.Ranking.zip", "dependencies": { "ExpGamingLib": "^4.0.0", "FactorioStdLib.Color": "^0.8.0", "FactorioStdLib.Table": "^0.8.0", "FactorioStdLib.Game": "^0.8.0", "ExpGamingCore.Server": "?^4.0.0" - } + }, + "type": "Submodule" }, "Server": { "name": "Server", + "version": "4.0.0", "module": "Server", "description": "Adds a thread system and event listening and a admin bypass (recommend to disable /c and use optional /interface)", + "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/ExpGamingCore.Server.zip", "keywords": [ "Library", "Lib", @@ -96,8 +102,6 @@ "Interface", "Events" ], - "version": "4.0.0", - "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/ExpGamingCore.Server.zip", "dependencies": { "ExpGamingLib": "^4.0.0", "FactorioStdLib.Table": "^0.8.0", @@ -106,12 +110,15 @@ "FactorioStdLib.Game": "^0.8.0", "ExpGamingCore.Ranking": "?^4.0.0", "ExpGamingCore.Commands": "?^4.0.0" - } + }, + "type": "Submodule" }, "Sync": { "name": "Sync", + "version": "4.0.0", "module": "Sync", "description": "Allows syncing with an outside server and info panle.", + "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/ExpGamingCore.Sync.zip", "keywords": [ "Library", "Lib", @@ -122,8 +129,6 @@ "External", "Discord" ], - "version": "4.0.0", - "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/ExpGamingCore.Sync.zip", "dependencies": { "ExpGamingLib": "^4.0.0", "FactorioStdLib.Color": "^0.8.0", @@ -131,8 +136,8 @@ "FactorioStdLib.Table": "^0.8.0", "ExpGamingCore.Ranking": "?^4.0.0", "ExpGamingCore.Gui": "?^4.0.0" - } + }, + "type": "Submodule" } - }, - "dependencies": {} + } } \ No newline at end of file diff --git a/modules/ExpGamingLib/control.lua b/modules/ExpGamingLib/control.lua index 8d8666ac..403bb4d2 100644 --- a/modules/ExpGamingLib/control.lua +++ b/modules/ExpGamingLib/control.lua @@ -4,6 +4,9 @@ -- @author Cooldude2606 -- @license https://github.com/explosivegaming/scenario/blob/master/LICENSE +local Game = require('FactorioStdLib.Game') +local Color = require('FactorioStdLib.Color') + local module_verbose = false -- there is no verbose in this file so true will do nothing local ExpLib = {} diff --git a/modules/ExpGamingLib/softmod.json b/modules/ExpGamingLib/softmod.json index ccfaef9e..336f3a0e 100644 --- a/modules/ExpGamingLib/softmod.json +++ b/modules/ExpGamingLib/softmod.json @@ -1,19 +1,20 @@ { "name": "ExpGamingLib", + "version": "4.0.0", "module": "GlobalLib", + "type": "Module", "description": "Adds some common functions used though out all ExpGaming modules", + "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/ExpGamingLib.zip", "keywords": [ "ExpGaming", "Lib" ], - "version": "4.0.0", - "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/ExpGamingLib.zip", + "author": "Cooldude2606", + "contact": "Discord: Cooldude2606#5241", + "license": "https://github.com/explosivegaming/scenario/blob/master/LICENSE", "dependencies": { "FactorioStdLib.Game": "^0.8.0", "FactorioStdLib.Color": "^0.8.0", "FactorioStdLib.Table": "^0.8.0" - }, - "author": "Cooldude2606", - "contact": "Discord: Cooldude2606#5241", - "license": "https://github.com/explosivegaming/scenario/blob/master/LICENSE" + } } \ No newline at end of file diff --git a/modules/FactorioStdLib/Color/control.lua b/modules/FactorioStdLib/Color/control.lua new file mode 100644 index 00000000..9ccedbc5 --- /dev/null +++ b/modules/FactorioStdLib/Color/control.lua @@ -0,0 +1,232 @@ +--- A defines module for retrieving colors by name. +-- Extends the Factorio defines table. +-- @module StdLib.Color +-- @alias defines.color + +-- defines table is automatically required in all mod loading stages. +-- luacheck: ignore 122/defines +-- Ignore assigning to read only defines table. defines table is not ready only, however +-- marking it this way allows warnings to be generated when trying to assign values + +defines = defines or {} --luacheck: ignore defines (This is used for testing locally) + +--- A table of colors allowing retrieval by color name. +-- @table defines.color +-- @field white {r=1.00,g=1.00,b=1.00} +-- @field black {r=0.00,g=0.00,b=0.00} +-- @field darkgrey {r=0.25,g=0.25,b=0.25} +-- @field grey {r=0.50,g=0.50,b=0.50} +-- @field lightgrey {r=0.75,g=0.75,b=0.75} +-- @field red {r=1.00,g=0.00,b=0.00} +-- @field darkred {r=0.50,g=0.00,b=0.00} +-- @field lightred {r=1.00,g=0.50,b=0.50} +-- @field green {r=0.00,g=1.00,b=0.00} +-- @field darkgreen {r=0.00,g=0.50,b=0.00} +-- @field lightgreen {r=0.50,g=1.00,b=0.50} +-- @field blue {r=0.00,g=0.00,b=1.00} +-- @field darkblue {r=0.00,g=0.00,b=0.50} +-- @field lightblue {r=0.50,g=0.50,b=1.00} +-- @field orange {r=1.00,g=0.55,b=0.10} +-- @field yellow {r=1.00,g=1.00,b=0.00} +-- @field pink {r=1.00,g=0.00,b=1.00} +-- @field purple {r=0.60,g=0.10,b=0.60} +-- @field brown {r=0.60,g=0.40,b=0.10} +defines.color = { + white={r=1.00,g=1.00,b=1.00}, + black={r=0.00,g=0.00,b=0.00}, + darkgrey={r=0.25,g=0.25,b=0.25}, + grey={r=0.50,g=0.50,b=0.50}, + lightgrey={r=0.75,g=0.75,b=0.75}, + red={r=1.00,g=0.00,b=0.00}, + darkred={r=0.50,g=0.00,b=0.00}, + lightred={r=1.00,g=0.50,b=0.50}, + green={r=0.00,g=1.00,b=0.00}, + darkgreen={r=0.00,g=0.50,b=0.00}, + lightgreen={r=0.50,g=1.00,b=0.50}, + blue={r=0.00,g=0.00,b=1.00}, + darkblue={r=0.00,g=0.00,b=0.50}, + lightblue={r=0.50,g=0.50,b=1.00}, + orange={r=1.00,g=0.55,b=0.10}, + yellow={r=1.00,g=1.00,b=0.00}, + pink={r=1.00,g=0.00,b=1.00}, + purple={r=0.60,g=0.10,b=0.60}, + brown={r=0.60,g=0.40,b=0.10} +} +local colors = defines.color + +--- Returns white for dark colors or black for lighter colors. +-- @table defines.anticolor +defines.anticolor = { + green = colors.black, -- defines.color.black + grey = colors.black, -- defines.color.black + lightblue = colors.black, -- defines.color.black + lightgreen = colors.black, -- defines.color.black + lightgrey = colors.black, -- defines.color.black + lightred = colors.black, -- defines.color.black + orange = colors.black, -- defines.color.black + white = colors.black, -- defines.color.black + yellow = colors.black, -- defines.color.black + black = colors.white, -- defines.color.white + blue = colors.white, -- defines.color.white + brown = colors.white, -- defines.color.white + darkblue = colors.white, -- defines.color.white + darkgreen = colors.white, -- defines.color.white + darkgrey = colors.white, -- defines.color.white + darkred = colors.white, -- defines.color.white + pink = colors.white, -- defines.color.white + purple = colors.white, -- defines.color.white + red = colors.white -- defines.color.white +} + +--- Returns a lighter color of a named color +-- @table defines.lightcolor +defines.lightcolor = { + white = colors.lightgrey, -- defines.color.lightgrey + grey = colors.darkgrey, -- defines.color.darkgrey + lightgrey = colors.grey, -- defines.color.grey + red = colors.lightred, -- defines.color.lightred + green = colors.lightgreen, -- defines.color.lightgreen + blue = colors.lightblue, -- defines.color.lightblue + yellow = colors.orange, -- defines.color.orange + pink = colors.purple -- defines.color.purple +} + +-- added by cooldude260 + +--- Returns a lighter color of a named color. +-- @table defines.textcolor +-- @field info {r=0.21,g=0.95,b=1.00} +-- @field bg {r=0.00,g=0.00,b=0.00} +-- @field low {r=0.18,g=0.77,b=0.18} +-- @field med {r=1.00,g=0.89,b=0.26} +-- @field high {r=1.00,g=0.33,b=0.00} +-- @field crit {r=1.00,g=0.00,b=0.00} +defines.textcolor = { + info={r=0.21,g=0.95,b=1.00}, + bg={r=0.00,g=0.00,b=0.00}, + low={r=0.18,g=0.77,b=0.18}, + med={r=1.00,g=0.89,b=0.26}, + high={r=1.00,g=0.33,b=0.00}, + crit={r=1.00,g=0.00,b=0.00} +} + +-- metatable remade by cooldude +local _mt = { + __index=function(tbl,key) + return rawget(tbl,tostring(key):lower()) or rawget(defines.color,'white') + end, + __pairs=function(tbl) + return function() + local v + k, v = next(tbl, k) + return k, (v and {r = v['r'], g = v['g'], b = v['b'], a = v['a']}) or nil + end, tbl, nil + end, + __eq=function(tbl1,tbl2) + return tbl1.r == tbl2.r and tbl1.g == tbl2.g and tbl1.b == tbl2.b and tbl1.a == tbl2.a + end +} + +setmetatable(defines.color, _mt) +setmetatable(defines.anticolor, _mt) +setmetatable(defines.textcolor, _mt) +setmetatable(defines.lightcolor, _mt) + +local Color = {} --luacheck: allow defined top + +--- Set a value for the alpha channel in the given color table. +-- `color.a` represents the alpha channel in the given color table. +--
    +--
  • If ***alpha*** is given, set `color.a` to it. +--
  • If ***alpha*** is not given, and if the given color table does not have a value for `color.a`, set `color.a` to 1. +--
  • If ***alpha*** is not given, and if the given color table already has a value for `color.a`, then leave `color.a` alone. +--
+-- @tparam[opt=white] defines.color|Concepts.Color color the color to configure +-- @tparam[opt=1] float alpha the alpha value (*[0 - 1]*) to set for the given color +-- @treturn a color table that has the specified value for the alpha channel +function Color.set(color, alpha) + color = color or defines.color.white + Color.to_table(color) + color.a = alpha or color.a or 1 + return color +end + +--- Converts a color in the array format to a color in the table format. +-- @tparam table c_arr the color to convert +-- @treturn a converted color — { r = c\_arr[1], g = c\_arr[2], b = c\_arr[3], a = c\_arr[4] } +function Color.to_table(c_arr) + if #c_arr > 0 then + return {r = c_arr[1], g = c_arr[2], b = c_arr[3], a = c_arr[4]} + end + return c_arr +end + +--- Converts a color in the rgb format to a color table +-- @tparam[opt=0] int r 0-255 red +-- @tparam[opt=0] int g 0-255 green +-- @tparam[opt=0] int b 0-255 blue +-- @tparam[opt=255] int a 0-255 alpha +-- @treturn Concepts.Color +function Color.from_rgb(r, g, b, a) + r = r or 0 + g = g or 0 + b = b or 0 + a = a or 255 + return {r = r/255, g = g/255, b = b/255, a = a/255} +end + +--- Get a color table with a hexadecimal string. +-- Optionally provide the value for the alpha channel. +-- @tparam string hex hexadecimal color string (#ffffff, not #fff) +-- @tparam[opt=1] float alpha the alpha value to set; such that ***[ 0 ⋜ value ⋜ 1 ]*** +-- @treturn a color table with RGB converted from Hex and with alpha +function Color.from_hex(hex, alpha) + if not _G.Game then error('StdLib/Game not loaded') end + _G.Game.fail_if_missing(hex, "missing color hex value") + if hex:find("#") then hex = hex:sub(2) end + if not(#hex == 6) then error("invalid color hex value: "..hex) end + local number = tonumber(hex, 16) + return { + r = bit32.extract(number, 16, 8) / 255, + g = bit32.extract(number, 8, 8) / 255, + b = bit32.extract(number, 0, 8) / 255, + a = alpha or 1 + } +end + +--added by cooldude2606 + +--- Converts a color in the color table format to rgb +-- @tparam table color the color to convert +-- @treturn table the color as rgb +function Color.to_rgb(color) + local r = color.r or 0 + local g = color.g or 0 + local b = color.b or 0 + local a = color.a or 0.5 + return {r = r*255, g = g*255, b = b*255, a = a*255} +end + +--added by cooldude2606 + +--- Converts a color in the color table format to hex +-- @tparam table color the color to convert +-- @treturn string the color as hex +function Color.to_hex(color) + local hexadecimal = '0x' + for key, value in pairs{math.floor(color.r*255),math.floor(color.g*255),math.floor(color.b*255)} do + local hex = '' + while(value > 0)do + local index = math.fmod(value, 16) + 1 + value = math.floor(value / 16) + hex = string.sub('0123456789ABCDEF', index, index) .. hex + end + if string.len(hex) == 0 then hex = '00' + elseif string.len(hex) == 1 then hex = '0' .. hex + end + hexadecimal = hexadecimal .. hex + end + return hexadecimal +end + +return Color diff --git a/jsonDownloads/FactorioStdLib.Color@0.8.0.json b/modules/FactorioStdLib/Color/softmod.json similarity index 56% rename from jsonDownloads/FactorioStdLib.Color@0.8.0.json rename to modules/FactorioStdLib/Color/softmod.json index bdf1c0aa..57e7935f 100644 --- a/jsonDownloads/FactorioStdLib.Color@0.8.0.json +++ b/modules/FactorioStdLib/Color/softmod.json @@ -1,7 +1,10 @@ { "name": "Color", + "version": "0.8.0", "module": "Color", + "type": "Submodule", "description": "A defines module for retrieving colors by name.", + "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/FactorioStdLib.Color.zip", "keywords": [ "Standard Library", "Lib", @@ -9,7 +12,8 @@ "Color", "Extends" ], - "version": "0.8.0", - "location": "url", + "author": "", + "contact": "", + "license": "", "dependencies": {} } \ No newline at end of file diff --git a/modules/FactorioStdLib/Game/control.lua b/modules/FactorioStdLib/Game/control.lua new file mode 100644 index 00000000..219b88f7 --- /dev/null +++ b/modules/FactorioStdLib/Game/control.lua @@ -0,0 +1,110 @@ +--- The game module. +-- @module StdLib.Game + +local Game = { --luacheck: allow defined top + VALID_FILTER = function(v) + return v and v.valid + end, + _protect = function(module_name) + return { + __newindex = function() error("Attempt to mutatate read-only "..module_name.." Module") end, + __metatable = true + } + end, + _concat = function(lhs, rhs) + --Sanatize to remove address + return tostring(lhs):gsub("(%w+)%: %x+", "%1: (ADDR)") .. tostring(rhs):gsub("(%w+)%: %x+", "%1: (ADDR)") + end, + _rawstring = function (t) + local m = getmetatable(t) + local f = m.__tostring + m.__tostring = nil + local s = tostring(t) + m.__tostring = f + return s + end +} + +-- No Doc +-- This is a helper global and functions until .16 +-- to set the name of your mod in control.lua set _stdlib_mod_name = 'name of your mod' +-- luacheck: ignore _stdlib_mod_name +function Game.get_mod_name() + local ok, mod_name = pcall(function() return script.mod_name end) + return ok and mod_name or _stdlib_mod_name or "stdlib" +end + +--- Print msg if specified var evaluates to false. +-- @tparam Mixed var variable to evaluate +-- @tparam[opt="missing value"] string msg message +function Game.fail_if_missing(var, msg) + if not var then + error(msg or "Missing value", 3) + end + return false +end + +--- Return a valid player object from event, index, string, or userdata +-- @tparam string|number|LuaPlayer|event mixed +-- @treturn LuaPlayer a valid player or nil +function Game.get_player(mixed) + if type(mixed) == "table" then + if mixed.__self then + return mixed and mixed.valid and mixed + elseif mixed.player_index then + local player = game.players[mixed.player_index] + return player and player.valid and player + end + elseif mixed then + local player = game.players[mixed] + if type(mixed) == "string" and tonumber(mixed) then + for _, p in pairs(game.players) do + if p.name == mixed then + player = p + break + end + end + end + return player and player.valid and player + end +end + +--- Return a valid force object from event, string, or userdata +-- @tparam string|LuaForce|event mixed +-- @treturn LuaForce a valid force or nil +function Game.get_force(mixed) + if type(mixed) == "table" then + if mixed.__self then + return mixed and mixed.valid and mixed + elseif mixed.force then + return Game.get_force(mixed.force) + end + elseif type(mixed) == "string" then + local force = game.forces[mixed] + return (force and force.valid) and force + end +end + +--- Messages all players currently connected to the game. +--> Offline players are not counted as having received the message. +-- If no players exist msg is stored in the `global._print_queue` table. +-- @tparam string msg the message to send to players +-- @tparam[opt] ?|nil|boolean condition the condition to be true for a player to be messaged +-- @treturn uint the number of players who received the message. +function Game.print_all(msg, condition) + local num = 0 + if #game.players > 0 then + for _, player in pairs(game.players) do + if condition == nil or select(2, pcall(condition, player)) then + player.print(msg) + num = num + 1 + end + end + return num + else + global._print_queue = global._print_queue or {} + global._print_queue[#global._print_queue + 1] = msg + end +end + +return Game diff --git a/jsonDownloads/FactorioStdLib.Game@0.8.0.json b/modules/FactorioStdLib/Game/softmod.json similarity index 53% rename from jsonDownloads/FactorioStdLib.Game@0.8.0.json rename to modules/FactorioStdLib/Game/softmod.json index cfb47f58..4c1d8624 100644 --- a/jsonDownloads/FactorioStdLib.Game@0.8.0.json +++ b/modules/FactorioStdLib/Game/softmod.json @@ -1,7 +1,10 @@ { "name": "Game", + "version": "0.8.0", "module": "Game", + "type": "Submodule", "description": "The game module.", + "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/FactorioStdLib.Game.zip", "keywords": [ "Standard Library", "Lib", @@ -9,7 +12,8 @@ "Game", "Extends" ], - "version": "0.8.0", - "location": "url", + "author": "", + "contact": "", + "license": "", "dependencies": {} } \ No newline at end of file diff --git a/modules/FactorioStdLib/String/control.lua b/modules/FactorioStdLib/String/control.lua new file mode 100644 index 00000000..24ff26ad --- /dev/null +++ b/modules/FactorioStdLib/String/control.lua @@ -0,0 +1,86 @@ +--- Extends Lua 5.2 string. +-- @module StdLib.String +-- @alias string + +-- luacheck: globals string (Allow mutating string) + +--- Returns a copy of the string with any leading or trailing whitespace from the string removed. +-- @tparam string s the string to remove leading or trailing whitespace from +-- @treturn string a copy of the string without leading or trailing whitespace +function string.trim(s) + return (s:gsub("^%s*(.-)%s*$", "%1")) +end + +--- Tests if a string starts with a given substring. +-- @tparam string s the string to check for the start substring +-- @tparam string start the substring to test for +-- @treturn boolean true if the start substring was found in the string +function string.starts_with(s, start) + return string.find(s, start, 1, true) == 1 +end + +--- Tests if a string ends with a given substring. +-- @tparam string s the string to check for the end substring +-- @tparam string ends the substring to test for +-- @treturn boolean true if the end substring was found in the string +function string.ends_with(s, ends) + return #s >= #ends and string.find(s, ends, #s - #ends + 1, true) and true or false +end + +--- Tests if a string contains a given substring. +-- @tparam string s the string to check for the substring +-- @tparam string contains the substring to test for +-- @treturn boolean true if the substring was found in the string +function string.contains(s, contains) + return s and string.find(s, contains) ~= nil +end + +--- Tests whether a string is empty. +-- @tparam string s the string to test +-- @treturn boolean true if the string is empty +function string.is_empty(s) + return s == nil or s == '' +end + +--- Splits a string into an array. +-- *Note:* Empty split substrings are not included in the resulting table. +--

For example, `string.split("foo.bar...", ".", false)` results in the table `{"foo", "bar"}`. +-- @tparam string s the string to split +-- @tparam[opt="."] string sep the separator to use. +-- @tparam[opt=false] boolean pattern whether to interpret the separator as a lua pattern or plaintext for the string split +-- @treturn {string,...} an array of strings +function string.split(s, sep, pattern) + sep = sep or "." + sep = sep ~= "" and sep or "." + sep = not pattern and string.gsub(sep, "([^%w])", "%%%1") or sep + + local fields = {} + local start_idx, end_idx = string.find(s, sep) + local last_find = 1 + while start_idx do + local substr = string.sub(s, last_find, start_idx - 1) + if string.len(substr) > 0 then + table.insert(fields, string.sub(s, last_find, start_idx - 1)) + end + last_find = end_idx + 1 + start_idx, end_idx = string.find(s, sep, end_idx + 1) + end + local substr = string.sub(s, last_find) + if string.len(substr) > 0 then + table.insert(fields, string.sub(s, last_find)) + end + return fields +end + +-- added by cooldude2606 +--- Returns a string as a hex format (also a string) +-- @usage a = 'foo' +-- string.to_hex(a) -- return '666f6f' +-- @tparam string str the string to encode +-- @treturn string the hex format of the string +function string.to_hex(str) + if not is_type(str,'string') then return '' end + return str:gsub('.',function (c) + return string.format('%02X',string.byte(c)) + end) +end \ No newline at end of file diff --git a/jsonDownloads/FactorioStdLib.String@0.8.0.json b/modules/FactorioStdLib/String/softmod.json similarity index 54% rename from jsonDownloads/FactorioStdLib.String@0.8.0.json rename to modules/FactorioStdLib/String/softmod.json index a6098aba..ac0f23df 100644 --- a/jsonDownloads/FactorioStdLib.String@0.8.0.json +++ b/modules/FactorioStdLib/String/softmod.json @@ -1,7 +1,10 @@ { "name": "String", + "version": "0.8.0", "module": "string", + "type": "Submodule", "description": "Extends Lua 5.2 string.", + "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/FactorioStdLib.String.zip", "keywords": [ "Standard Library", "Lib", @@ -9,7 +12,8 @@ "String", "Extends" ], - "version": "0.8.0", - "location": "url", + "author": "", + "contact": "", + "license": "", "dependencies": {} } \ No newline at end of file diff --git a/modules/FactorioStdLib/Table/control.lua b/modules/FactorioStdLib/Table/control.lua new file mode 100644 index 00000000..c79655a2 --- /dev/null +++ b/modules/FactorioStdLib/Table/control.lua @@ -0,0 +1,397 @@ +--- Extends Lua 5.2 table. +-- @module StdLib.Table +-- @alias table + +-- luacheck: globals table (Allow mutating global table) + +--- Given a mapping function, creates a transformed copy of the table +--- by calling the function for each element in the table, and using +--- the result as the new value for the key. Passes the index as second argument to the function. +--- @usage a= { 1, 2, 3, 4, 5} +---table.map(a, function(v) return v * 10 end) --produces: { 10, 20, 30, 40, 50 } +--- @usage a = {1, 2, 3, 4, 5} +---table.map(a, function(v, k, x) return v * k + x end, 100) --produces { 101, 104, 109, 116, 125} +-- @tparam table tbl the table to be mapped to the transform +-- @tparam function func the function to transform values +-- @param[opt] ... additional arguments passed to the function +-- @treturn table a new table containing the keys and mapped values +function table.map(tbl, func, ...) + local newtbl = {} + for i, v in pairs(tbl) do + newtbl[i] = func(v, i, ...) + end + return newtbl +end + +--- Given a filter function, creates a filtered copy of the table +--- by calling the function for each element in the table, and +--- filtering out any key-value pairs for non-true results. Passes the index as second argument to the function. +--- @usage a= { 1, 2, 3, 4, 5} +---table.filter(a, function(v) return v % 2 == 0 end) --produces: { 2, 4 } +--- @usage a = {1, 2, 3, 4, 5} +---table.filter(a, function(v, k, x) return k % 2 == 1 end) --produces: { 1, 3, 5 } +-- @tparam table tbl the table to be filtered +-- @tparam function func the function to filter values +-- @param[opt] ... additional arguments passed to the function +-- @treturn table a new table containing the filtered key-value pairs +function table.filter(tbl, func, ...) + local newtbl = {} + local insert = #tbl > 0 + for k, v in pairs(tbl) do + if func(v, k, ...) then + if insert then table.insert(newtbl, v) + else newtbl[k] = v end + end + end + return newtbl +end + +--- Given a candidate search function, iterates over the table, calling the function +--- for each element in the table, and returns the first element the search function returned true. +--- Passes the index as second argument to the function. +--- @usage a= { 1, 2, 3, 4, 5} +---table.find(a, function(v) return v % 2 == 0 end) --produces: 2 +--- @usage a = {1, 2, 3, 4, 5} +---table.find(a, function(v, k, x) return k % 2 == 1 end) --produces: 1 +-- @tparam table tbl the table to be searched +-- @tparam function func the function to use to search for any matching element +-- @param[opt] ... additional arguments passed to the function +-- @treturn ?|nil|Mixed the first found value, or nil if none was found +function table.find(tbl, func, ...) + for k, v in pairs(tbl) do + if func(v, k, ...) then + return v, k + end + end + return nil +end + +--- Given a candidate search function, iterates over the table, calling the function +-- for each element in the table, and returns true if search function returned true. +-- Passes the index as second argument to the function. +-- @usage a= { 1, 2, 3, 4, 5} table.any(a, function(v) return v % 2 == 0 end) --produces: true +-- @usage a = {1, 2, 3, 4, 5} table.any(a, function(v, k, x) return k % 2 == 1 end) --produces: true +-- @tparam table tbl the table to be searched +-- @tparam function func the function to use to search for any matching element +-- @param[opt] ... additional arguments passed to the function +-- @treturn boolean true if an element was found, false if none was found +function table.any(tbl, func, ...) + return table.find(tbl, func, ...) ~= nil +end + +--- Given a function, apply it to each element in the table. +-- Passes the index as the second argument to the function. +--

Iteration is aborted if the applied function returns true for any element during iteration. +-- @usage +-- a = {10, 20, 30, 40} +-- table.each(a, function(v) game.print(v) end) --prints 10, 20, 30, 40, 50 +-- @tparam table tbl the table to be iterated +-- @tparam function func the function to apply to elements +-- @param[opt] ... additional arguments passed to the function +-- @treturn table the table where the given function has been applied to its elements +function table.each(tbl, func, ...) + for k, v in pairs(tbl) do + if func(v, k, ...) then + break + end + end + return tbl +end + +--- Returns a new array that is a one-dimensional recursive flattening of the given array. +-- For every element that is an array, extract its elements into the new array. +--

The optional level argument determines the level of recursion to flatten. +--> This function flattens an integer-indexed array, but not an associative array. +-- @tparam array tbl the array to be flattened +-- @tparam[opt] uint level recursive levels, or no limit to recursion if not supplied +-- @treturn array a new array that represents the flattened contents of the given array +function table.flatten(tbl, level) + local flattened = {} + table.each(tbl, + function(value) + if type(value) == "table" and #value > 0 then + if level then + if level > 0 then + table.merge(flattened, table.flatten(value, level - 1), true) + else + table.insert(flattened, value) + end + else + table.merge(flattened, table.flatten(value), true) + end + else + table.insert(flattened, value) + end + end + ) + return flattened +end + +--- Given an array, returns the first element or nil if no element exists. +-- @tparam array tbl the array +-- @treturn ?|nil|Mixed the first element +function table.first(tbl) + return tbl[1] +end + +--- Given an array, returns the last element or nil if no elements exist. +-- @tparam array tbl the array +-- @treturn ?|nil|Mixed the last element or nil +function table.last(tbl) + local size = #tbl + if size == 0 then return nil end + return tbl[size] +end + +--- Given an array of only numeric values, returns the minimum or nil if no element exists. +-- @tparam {number,...} tbl the array with only numeric values +-- @treturn ?|nil|number the minimum value +function table.min(tbl) + if #tbl == 0 then return nil end + + local min = tbl[1] + for _, num in pairs(tbl) do + min = num < min and num or min + end + return min +end + +---Given an array of only numeric values, returns the maximum or nil if no element exists. +-- @tparam {number,...} tbl the array with only numeric values +-- @treturn ?|nil|number the maximum value +function table.max(tbl) + if #tbl == 0 then return nil end + + local max = tbl[1] + for _, num in pairs(tbl) do + max = num > max and num or max + end + return max +end + +--- Given an array of only numeric values, return the sum of all values, or 0 for empty arrays. +-- @tparam {number,...} tbl the array with only numeric values +-- @treturn number the sum of the numbers or zero if the given array was empty +function table.sum(tbl) + local sum = 0 + for _, num in pairs(tbl) do + sum = sum + num + end + return sum +end + +--- Given an array of only numeric values, returns the average or nil if no element exists. +-- @tparam {number,...} tbl the array with only numeric values +-- @treturn ?|nil|number the average value +function table.avg(tbl) + local cnt = #tbl + return cnt ~= 0 and table.sum(tbl) / cnt or nil +end + +--- Merges two tables — values from first get overwritten by the second. +--- @usage +-- function some_func(x, y, args) +-- args = table.merge({option1=false}, args) +-- if opts.option1 == true then return x else return y end +-- end +-- some_func(1,2) -- returns 2 +-- some_func(1,2,{option1=true}) -- returns 1 +-- @tparam table tblA first table +-- @tparam table tblB second table +-- @tparam[opt=false] boolean array_merge set to true to merge the tables as an array or false for an associative array +-- @treturn array|table an array or an associated array where tblA and tblB have been merged +function table.merge(tblA, tblB, array_merge) + if not tblB then + return tblA + end + if array_merge then + for _, v in pairs(tblB) do + table.insert(tblA, v) + end + + else + for k, v in pairs(tblB) do + tblA[k] = v + end + end + return tblA +end + +-- copied from factorio/data/core/luablib/util.lua + +--- Creates a deep copy of table without copying Factorio objects. +-- @usage local copy = table.deepcopy[data.raw.["stone-furnace"]["stone-furnace"]] -- returns a copy of the stone furnace entity +-- @tparam table object the table to copy +-- @treturn table a copy of the table +function table.deepcopy(object) + local lookup_table = {} + local function _copy(this_object) + if type(this_object) ~= "table" then + return this_object + elseif this_object.__self then + return this_object + elseif lookup_table[this_object] then + return lookup_table[this_object] + end + local new_table = {} + lookup_table[this_object] = new_table + for index, value in pairs(this_object) do + new_table[_copy(index)] = _copy(value) + end + return setmetatable(new_table, getmetatable(this_object)) + end + return _copy(object) +end + +--- Returns a copy of all of the values in the table. +-- @tparam table tbl the table to copy the keys from, or an empty table if tbl is nil +-- @tparam[opt] boolean sorted whether to sort the keys (slower) or keep the random order from pairs() +-- @tparam[opt] boolean as_string whether to try and parse the values as strings, or leave them as their existing type +-- @treturn array an array with a copy of all the values in the table +function table.values(tbl, sorted, as_string) + if not tbl then return {} end + local valueset = {} + local n = 0 + if as_string then --checking as_string /before/ looping is faster + for _, v in pairs(tbl) do + n = n + 1 + valueset[n] = tostring(v) + end + else + for _, v in pairs(tbl) do + n = n + 1 + valueset[n] = v + end + end + if sorted then + table.sort(valueset, + function(x, y) --sorts tables with mixed index types. + local tx = type(x) == 'number' + local ty = type(y) == 'number' + if tx == ty then + return x < y and true or false --similar type can be compared + elseif tx == true then + return true --only x is a number and goes first + else + return false --only y is a number and goes first + end + end + ) + end + return valueset +end + +--- Returns a copy of all of the keys in the table. +-- @tparam table tbl the table to copy the keys from, or an empty table if tbl is nil +-- @tparam[opt] boolean sorted whether to sort the keys (slower) or keep the random order from pairs() +-- @tparam[opt] boolean as_string whether to try and parse the keys as strings, or leave them as their existing type +-- @treturn array an array with a copy of all the keys in the table +function table.keys(tbl, sorted, as_string) + if not tbl then return {} end + local keyset = {} + local n = 0 + if as_string then --checking as_string /before/ looping is faster + for k, _ in pairs(tbl) do + n = n + 1 + keyset[n] = tostring(k) + end + else + for k, _ in pairs(tbl) do + n = n + 1 + keyset[n] = k + end + end + if sorted then + table.sort(keyset, + function(x, y) --sorts tables with mixed index types. + local tx = type(x) == 'number' + local ty = type(y) == 'number' + if tx == ty then + return x < y and true or false --similar type can be compared + elseif tx == true then + return true --only x is a number and goes first + else + return false --only y is a number and goes first + end + end + ) + end + return keyset +end + +--- Removes keys from a table by setting the values associated with the keys to nil. +-- @usage local a = {1, 2, 3, 4} +--table.remove_keys(a, {1,3}) --returns {nil, 2, nil, 4} +-- @usage local b = {k1 = 1, k2 = 'foo', old_key = 'bar'} +--table.remove_keys(b, {'old_key'}) --returns {k1 = 1, k2 = 'foo'} +-- @tparam table tbl the table to remove the keys from +-- @tparam {Mixed,...} keys an array of keys that exist in the given table +-- @treturn table tbl without the specified keys +function table.remove_keys(tbl, keys) + for i = 1, #keys do + tbl[keys[i]] = nil + end + return tbl +end + +--- Returns the number of keys in a table, if func is passed only count keys when the function is true. +-- @tparam table tbl to count keys +-- @tparam[opt] function func to incremement counter +-- @param[optchain] ... additional arguments passed to the function +-- @treturn number The number of keys matching the function or the number of all keys if func isn't passed +-- @treturn number The total number of keys +-- @usage local a = { 1, 2, 3, 4, 5} +-- table.count_keys(a) -- produces: 5, 5 +-- @usage local a = {1, 2, 3, 4, 5} +-- table.count_keys(a, function(v, k) return k % 2 == 1 end) -- produces: 3, 5 +function table.count_keys(tbl, func, ...) + if type(tbl) ~= 'table' then return 0, 0 end + local count, total = 0, 0 + for k, v in pairs(tbl) do + total = total + 1 + if func then + if func(v, k, ...) then + count = count + 1 + end + else + count = count + 1 + end + end + return count, total +end + +--- Returns an inverted (***{[value] = key,...}***) copy of the given table. If the values are not unique, the assigned key depends on the order of pairs(). +-- @usage local a = {k1 = 'foo', k2 = 'bar'} +--table.invert(a) --returns {'foo' = k1, 'bar' = k2} +-- @usage local b = {k1 = 'foo', k2 = 'bar', k3 = 'bar'} +--table.invert(b) --returns {'foo' = k1, 'bar' = ?} +-- @tparam table tbl the table to invert +-- @treturn table a new table with inverted mapping +function table.invert(tbl) + local inverted = {} + for k, v in pairs(tbl) do + inverted[v] = k + end + return inverted +end + +--- Return the size of a table using built in table_size function +-- @function size +-- @tparam table table to use +-- @treturn int size of the table +table.size = table_size + +--- For all string or number values in an array map them to a key = true table +-- @usage local a = {"v1", "v2"} +-- table.array_to_dict_bool(a) -- return {["v1"] = true, ["v2"]= true} +-- @tparam table tbl the table to convert +-- @treturn table the converted table +function table.arr_to_bool(tbl) + local newtbl = {} + for _, v in pairs(tbl) do + if type(v) == "string" or type(v) == "number" then + newtbl[v] = true + end + end + return newtbl +end \ No newline at end of file diff --git a/jsonDownloads/FactorioStdLib.Table@0.8.0.json b/modules/FactorioStdLib/Table/softmod.json similarity index 54% rename from jsonDownloads/FactorioStdLib.Table@0.8.0.json rename to modules/FactorioStdLib/Table/softmod.json index 305f60fd..e37d4faa 100644 --- a/jsonDownloads/FactorioStdLib.Table@0.8.0.json +++ b/modules/FactorioStdLib/Table/softmod.json @@ -1,7 +1,10 @@ { "name": "Table", + "version": "0.8.0", "module": "table", + "type": "Submodule", "description": "Extends Lua 5.2 table.", + "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/FactorioStdLib.Table.zip", "keywords": [ "Standard Library", "Lib", @@ -9,7 +12,8 @@ "Table", "Extends" ], - "version": "0.8.0", - "location": "url", + "author": "", + "contact": "", + "license": "", "dependencies": {} } \ No newline at end of file diff --git a/modules/FactorioStdLib/softmod.json b/modules/FactorioStdLib/softmod.json index cfbee2c4..64d5009f 100644 --- a/modules/FactorioStdLib/softmod.json +++ b/modules/FactorioStdLib/softmod.json @@ -1,19 +1,26 @@ { "name": "FactorioStdLib", - "module": "Collection", + "version": "0.8.0", + "module": "factorioStdLib", + "type": "Collection", "description": "Factorio Standard Library Projects", + "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/FactorioStdLib.zip", "keywords": [ "Standard Library", "Lib", "StdLib" ], - "version": "0.8.0", - "location": "url", + "author": "Afforess", + "contact": "https://github.com/Afforess/Factorio-Stdlib/issues", + "license": "https://github.com/Afforess/Factorio-Stdlib/blob/master/LICENSE", "submodules": { "Color": { "name": "Color", + "version": "0.8.0", "module": "Color", + "type": "Submodule", "description": "A defines module for retrieving colors by name.", + "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/FactorioStdLib.Color.zip", "keywords": [ "Standard Library", "Lib", @@ -21,14 +28,15 @@ "Color", "Extends" ], - "version": "0.8.0", - "location": "url", "dependencies": {} }, "Game": { "name": "Game", + "version": "0.8.0", "module": "Game", + "type": "Submodule", "description": "The game module.", + "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/FactorioStdLib.Game.zip", "keywords": [ "Standard Library", "Lib", @@ -36,14 +44,15 @@ "Game", "Extends" ], - "version": "0.8.0", - "location": "url", "dependencies": {} }, "String": { "name": "String", + "version": "0.8.0", "module": "string", + "type": "Submodule", "description": "Extends Lua 5.2 string.", + "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/FactorioStdLib.String.zip", "keywords": [ "Standard Library", "Lib", @@ -51,14 +60,15 @@ "String", "Extends" ], - "version": "0.8.0", - "location": "url", "dependencies": {} }, "Table": { "name": "Table", + "version": "0.8.0", "module": "table", + "type": "Submodule", "description": "Extends Lua 5.2 table.", + "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/FactorioStdLib.Table.zip", "keywords": [ "Standard Library", "Lib", @@ -66,28 +76,7 @@ "Table", "Extends" ], - "version": "0.8.0", - "location": "url", - "dependencies": {} - }, - "Time": { - "name": "Time", - "module": "Time", - "description": "A defines module for retrieving the number of ticks in 1 unit of time.", - "keywords": [ - "Standard Library", - "Lib", - "StdLib", - "Time", - "Extends" - ], - "version": "0.8.0", - "location": "url", "dependencies": {} } - }, - "author": "Afforess", - "contact": "https://github.com/Afforess/Factorio-Stdlib/issues", - "license": "https://github.com/Afforess/Factorio-Stdlib/blob/master/LICENSE", - "dependencies": {} + } } \ No newline at end of file diff --git a/softmod.json b/softmod.json index 44081d56..fe58dc28 100644 --- a/softmod.json +++ b/softmod.json @@ -1,12 +1,16 @@ { "name": "ExpGamingScenario", "version": "0.16.51", - "module": "Scenario", + "module": "expGamingScenario", + "type": "Scenario", "description": "Explosive gaming's factorio secenario ran on every public server", "modules": { "ExpGamingCore": "^4.0.0", "ExpGamingLib": "^4.0.0", - "FactorioModGui": "^1.0.0", + "FactorioStdLib.Color": "^0.8.0", + "FactorioStdLib.Game": "^0.8.0", + "FactorioStdLib.String": "^0.8.0", + "FactorioStdLib.Table": "^0.8.0", "FactorioStdLib": "^0.8.0" } } \ No newline at end of file