Initial commit
This commit is contained in:
152
gamemodes/darkrp/gamemode/libraries/modificationloader.lua
Normal file
152
gamemodes/darkrp/gamemode/libraries/modificationloader.lua
Normal file
@@ -0,0 +1,152 @@
|
||||
-- Modification loader.
|
||||
-- Dependencies:
|
||||
-- - fn
|
||||
-- - simplerr
|
||||
|
||||
--[[---------------------------------------------------------------------------
|
||||
Disabled defaults
|
||||
---------------------------------------------------------------------------]]
|
||||
DarkRP.disabledDefaults = {}
|
||||
DarkRP.disabledDefaults["modules"] = {
|
||||
["afk"] = true,
|
||||
["chatsounds"] = false,
|
||||
["events"] = false,
|
||||
["fpp"] = false,
|
||||
["hitmenu"] = false,
|
||||
["hud"] = false,
|
||||
["hungermod"] = true,
|
||||
["playerscale"] = false,
|
||||
["sleep"] = false,
|
||||
}
|
||||
|
||||
DarkRP.disabledDefaults["agendas"] = {}
|
||||
DarkRP.disabledDefaults["ammo"] = {}
|
||||
DarkRP.disabledDefaults["demotegroups"] = {}
|
||||
DarkRP.disabledDefaults["doorgroups"] = {}
|
||||
DarkRP.disabledDefaults["entities"] = {}
|
||||
DarkRP.disabledDefaults["food"] = {}
|
||||
DarkRP.disabledDefaults["groupchat"] = {}
|
||||
DarkRP.disabledDefaults["hitmen"] = {}
|
||||
DarkRP.disabledDefaults["jobs"] = {}
|
||||
DarkRP.disabledDefaults["shipments"] = {}
|
||||
DarkRP.disabledDefaults["vehicles"] = {}
|
||||
DarkRP.disabledDefaults["workarounds"] = {}
|
||||
|
||||
-- The client cannot use simplerr.runLuaFile because of restrictions in GMod.
|
||||
local doInclude = CLIENT and include or fc{simplerr.wrapError, simplerr.wrapLog, simplerr.runFile}
|
||||
|
||||
if file.Exists("darkrp_config/disabled_defaults.lua", "LUA") then
|
||||
if SERVER then AddCSLuaFile("darkrp_config/disabled_defaults.lua") end
|
||||
doInclude("darkrp_config/disabled_defaults.lua")
|
||||
end
|
||||
|
||||
--[[---------------------------------------------------------------------------
|
||||
Config
|
||||
---------------------------------------------------------------------------]]
|
||||
local configFiles = {
|
||||
"darkrp_config/settings.lua",
|
||||
"darkrp_config/licenseweapons.lua",
|
||||
}
|
||||
|
||||
for _, File in ipairs(configFiles) do
|
||||
if not file.Exists(File, "LUA") then continue end
|
||||
|
||||
if SERVER then AddCSLuaFile(File) end
|
||||
doInclude(File)
|
||||
end
|
||||
if SERVER and file.Exists("darkrp_config/mysql.lua", "LUA") then doInclude("darkrp_config/mysql.lua") end
|
||||
|
||||
--[[---------------------------------------------------------------------------
|
||||
Modules
|
||||
---------------------------------------------------------------------------]]
|
||||
local function loadModules()
|
||||
local fol = "darkrp_modules/"
|
||||
|
||||
local _, folders = file.Find(fol .. "*", "LUA")
|
||||
|
||||
for _, folder in SortedPairs(folders, true) do
|
||||
if folder == "." or folder == ".." or GAMEMODE.Config.DisabledCustomModules[folder] then continue end
|
||||
-- Sound but incomplete way of detecting the error of putting addons in the darkrpmod folder
|
||||
if file.Exists(fol .. folder .. "/addon.txt", "LUA") or file.Exists(fol .. folder .. "/addon.json", "LUA") then
|
||||
DarkRP.errorNoHalt("Addon detected in the darkrp_modules folder.", 2, {
|
||||
"This addon is not supposed to be in the darkrp_modules folder.",
|
||||
"It is supposed to be in garrysmod/addons/ instead.",
|
||||
"Whether a mod is to be installed in darkrp_modules or addons is the author's decision.",
|
||||
"Please read the readme of the addons you're installing next time."
|
||||
},
|
||||
"<darkrpmod addon>/lua/darkrp_modules/" .. folder, -1)
|
||||
continue
|
||||
end
|
||||
|
||||
for _, File in SortedPairs(file.Find(fol .. folder .. "/sh_*.lua", "LUA"), true) do
|
||||
if SERVER then
|
||||
AddCSLuaFile(fol .. folder .. "/" .. File)
|
||||
end
|
||||
|
||||
if File == "sh_interface.lua" then continue end
|
||||
doInclude(fol .. folder .. "/" .. File)
|
||||
end
|
||||
|
||||
if SERVER then
|
||||
for _, File in SortedPairs(file.Find(fol .. folder .. "/sv_*.lua", "LUA"), true) do
|
||||
if File == "sv_interface.lua" then continue end
|
||||
doInclude(fol .. folder .. "/" .. File)
|
||||
end
|
||||
end
|
||||
|
||||
for _, File in SortedPairs(file.Find(fol .. folder .. "/cl_*.lua", "LUA"), true) do
|
||||
if File == "cl_interface.lua" then continue end
|
||||
|
||||
if SERVER then
|
||||
AddCSLuaFile(fol .. folder .. "/" .. File)
|
||||
else
|
||||
doInclude(fol .. folder .. "/" .. File)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function loadLanguages()
|
||||
local fol = "darkrp_language/"
|
||||
|
||||
local files, _ = file.Find(fol .. "*", "LUA")
|
||||
for _, File in ipairs(files) do
|
||||
if SERVER then AddCSLuaFile(fol .. File) end
|
||||
doInclude(fol .. File)
|
||||
end
|
||||
end
|
||||
|
||||
local customFiles = {
|
||||
"darkrp_customthings/jobs.lua",
|
||||
"darkrp_customthings/shipments.lua",
|
||||
"darkrp_customthings/entities.lua",
|
||||
"darkrp_customthings/vehicles.lua",
|
||||
"darkrp_customthings/food.lua",
|
||||
"darkrp_customthings/ammo.lua",
|
||||
"darkrp_customthings/groupchats.lua",
|
||||
"darkrp_customthings/categories.lua",
|
||||
"darkrp_customthings/agendas.lua", -- has to be run after jobs.lua
|
||||
"darkrp_customthings/doorgroups.lua", -- has to be run after jobs.lua
|
||||
"darkrp_customthings/demotegroups.lua", -- has to be run after jobs.lua
|
||||
}
|
||||
local function loadCustomDarkRPItems()
|
||||
for _, File in ipairs(customFiles) do
|
||||
if not file.Exists(File, "LUA") then continue end
|
||||
if File == "darkrp_customthings/food.lua" and DarkRP.disabledDefaults["modules"]["hungermod"] then continue end
|
||||
|
||||
if SERVER then AddCSLuaFile(File) end
|
||||
doInclude(File)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function GM:DarkRPFinishedLoading()
|
||||
-- GAMEMODE gets set after the last statement in the gamemode files is run. That is not the case in this hook
|
||||
GAMEMODE = GAMEMODE or GM
|
||||
|
||||
loadLanguages()
|
||||
loadModules()
|
||||
loadCustomDarkRPItems()
|
||||
hook.Call("loadCustomDarkRPItems", self)
|
||||
hook.Call("postLoadCustomDarkRPItems", self)
|
||||
end
|
||||
Reference in New Issue
Block a user