Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

How come you have put 'game' before all services except workspace?

You can access workspace with just the name Workspace.

print(Workspace)
--Output: Workspace

However, with other services, like Lighting or ServerStorage, you must put game before the word.

print(game.Lighting)
print(game.ServerStorage)
--Output: Lighting, ServerStorage

--

print(Lighting)
print(ServerStorage)
--Output: nil, nil

Why is this?

1 answer

✓ Accepted answer

workspace is just a normal variable that ROBLOX has provided to us, like they have provided game.

For whatever reason, this is the only service that they give us a variable to, probably because it's the only one that almost any script requires.


If you want to define your own, you can, of course

local lighting = game.Lighting
local players = game.Players

etc.

ROBLOX suggests that you use the lowercase version of the workspace variable, since it's a Lua variable and Lua variables are canonically lowercase.


If you really want this without naming them yourself, you could use something like this:

local env = getfenv(0);
for _, service in pairs(game:GetChildren()) do
	local name = tostring(service);
	name = name:gsub("%W", "");
	env[name:sub(1,1):lower() .. name:sub(2)] = service
end

which will add all of the variables to be used, as in replicatedStorage or lighting.

Ideally you would wrap this into a module script / bindable function that would use a different number than 0 so that you just call that function in a single line and get all of the variables.

I would say this is a bad idea. ROBLOX's Script Analysis will warn that all of the service names were never defined.

This discussion is preserved as it was. New answers, comments, and votes are closed.