Services is just the folder the modules are parented in.
You have to insert them into a table.
local modules = {}
for _, module in ipairs(script.Parent:GetDescendants()) do
if (module:IsA("ModuleScript") then
modules[module.Name] = require(module)
end
end
You also used pairs
which indexes a dictionary, but GetDescendants
returns a numercially-indexed table.
the code you gave me is the excact same code I did but see im putting this code inside of a module script calling it the main module I am trying to make a single script architecture.
Sorry but I do not understand what you mean by this.
ok I see what dies ipairs do also thanks for the response let me try this
its a way of abstracting your code or simplifying your code using a normal script to require module scripts to require other module scripts this may help you if you wanna learn about it
the code is simple enough using an normal script to require another module just to require other modules is plain stupid (no offense)
this is also in a module script
using this code do I return modules because modules isnt the module name but my own table so then do return modules and put modules in the module script?
none taken theres a reason I just dont know it yet im trying to learn why people do it but I think I know its for using oop which is a really good method a lot of good scripters and devs made to transfer information between modules then call upon that information in a script instead of per say a remote event or bindable event
Heres my workspace
heres the code of one of my child modules
local class1 = {"Hello"}
return class1
heres the code of my main module
local modules = {}
local main = {modules}
for _, module in ipairs(script.Parent:GetDescendants()) do
if module:IsA("ModuleScript") then
modules[module.Name] = require(module)
return modules
end
end
return main
and heres my main script code
local main = require(script.Parent.mainModuleScript)
print(main.modules[1])
I never really heard of people using other modules to require other modules in your use case honestly. Unless you are creating an module handler script to handle your modules and what and who can use them. If you are trying to learn oop i recommend this post Concepts: Object Oriented Programming in Roblox
Its just a method of transfering information its supposed to be very useful but still I do not know how to make them also I titled this post wrong
this is the way i do it
local ss = game:GetService("ServerStorage")
local rs = game:GetService("ReplicatedStorage")
local client = rs:WaitForChild("client")
local server = rs:WaitForChild("server")
local a = {}
function FindFirstChildNCS(obj,name)
for i,v in pairs(obj:GetChildren()) do
if v.Name:lower() == name:lower() then
return v
end
end
return
end
function WaitForChildNCS(obj,name,timeout)
local z = os.time() + timeout
repeat wait()
for i,v in pairs(obj:GetChildren()) do
if v.Name:lower() == name:lower() then
return v
end
end
until os.time() >= z
return
end
function a:GetServices()
local y = {}
for i,v in pairs(ss:GetChildren()) do
if v:IsA("ModuleScript") then
y[v.Name] = require(v)
end
end
return y
end
function a:GetService(name)
local y = WaitForChildNCS(ss,name,5)
print(y)
return (y == nil and assert("Service could not be found.") or require(y))
end
function a:GetClientEvents()
local y = {}
for i,v in pairs(client:GetChildren()) do
if v:IsA("RemoteEvent") or v:IsA("RemoteFunction") then
y[v.Name] = v
end
end
return y
end
function a:GetServerEvents()
local y = {}
for i,v in pairs(server:GetChildren()) do
if v:IsA("RemoteEvent") or v:IsA("RemoteFunction") then
y[v.Name] = v
end
end
return y
end
return a
this isnt excactly what im trying to do but maybe Im just explaining it wrong or attempting something impossible
Is this what you mean?
local Module = {}
local Module.Modules = {};
for _, Object in next, script.Parent:GetDescendants() do
if Object:IsA("ModuleScript") then
Module.Modules[Object.Name] = require(Object);
end
end
return Module
------------------------------------------------------------
require(Module).Modules["CoolRequire"].CoolFunction()
Since your using return inside your loop once this module is required it would only return that ModuleScript.
Also you’ll need to set modules inside the main table to something instead of just making it error.
local Main = {}
Main.modules = {}
for i, module in pairs(script.Parent:GetDescendants()) do
if module:IsA("ModuleScript") then
table.insert(Main.modules, require(module))
end
end
return Main
local main = require(script.Parent.mainModuleScript)
local data = main.modules[1]
print(data)
Hey also I just also realised what this single script architecture is for and just wanted to explain it better to you. Heres an article that explains it well.
this seems right let me try it
it’s on the right path but it gives me an error and this is what I’m trying to do but I’m trying to figure out the error now the error involves modules requiring each other
Mind sending the error, would help a bunch!