I am making a ModuleScript that allows other scripts to share functions easier and such. However, when I run Script a, sometimes it works and sometimes it doesn't. Is this a problem with ROBLOX's interpreter or my script(if so, please tell me the issue)?
Script a
require(workspace.engyn)();
include("b");
sayHi();
Script b
function sayHi()
out("hi!");
end
require(workspace.engyn)();
ModuleScript engyn
local documents = {};
local appc = require(script:FindFirstChild("appc"));
local M = function(...)
local env = getfenv(2);
local App = {
Environment = {
out = function(...)local info = {...};for i, v in pairs(info) do print("Engyn("..env["script"]:GetFullName()..") :: "..tostring(v));end end;
include = coroutine.wrap(function(...)
local function getDoc(id)
return documents[id];
end
local function loadDoc(doc)
for i, v in pairs(doc.Environment) do
if (type(v) == "function") then
if (not env[i]) then
env[i] = v;
end
end
end
end
for _, id in pairs({...}) do
local doc = getDoc(id);
if (doc) then
loadDoc(doc);
else
if (not getDoc(id)) then
repeat
wait()
until getDoc(id);
else
return true;
end
end
end
end);
};
}
--Irrelevant code...
App.New = function(env, args)
local app = setmetatable(App, Meta);
app.script = env["script"];
app:init(env);
app(args);
return app;
end
documents[env["script"].Name] = App.New(env, {...});
for i, v in pairs(App.Environment) do
env[i] = v;
end
return documents[env["script"].Name];
end
return M;
