What I want is to have the line:
repeat wait() until _G.engyn_s _G.engyn_s()
-at the beginning of the script and load in all the functions below within the script to a table. So far, it only works when the functions are above the repeat block but how can I make it so that I can allow the repeat block to be placed at the top of the script and still be able to load all functions within it?
Script Server
_G[ROOT.Name:lower() .. "_s"] = function(...)
local Documents = ROOT_LIB.Documents;
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);
};
}
local Meta = {
__index = {
init = function(this, env)
--Transfer all functions to environment
for i, v in pairs(env) do
if (type(v) == "function") then
this.Environment[i] = v;
end
end
end;
};
__call = function(this, args)
end;
}
App.New = function(env, ...)
local app = setmetatable(App, Meta);
app.script = env["script"];
app:init(env);
app({...});
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
Script a
repeat wait() until _G.engyn_s _G.engyn_s();
include("b");
sayHi();
Script b
function sayHi()
print("Hi!");
end
repeat wait() until _G.engyn_s _G.engyn_s();
