To replicate this issue, you have to put a LocalScript in ReplicatedFirst with the following code:
for _,v in pairs(game:GetChildren()) do
v.Name="CoreGui"
if v.Name=="StarterPlayer" then
for _,v in pairs(v:GetChildren()) do
v.Name="CoreGui"
end
end
v:GetPropertyChangedSignal("Name"):Connect(function()
v.Name="CoreGui"
end)
end
game.ChildAdded:Connect(function(v)
v.Name="CoreGui"
if v.Name=="StarterPlayer" then
for _,v in pairs(v:GetChildren()) do
v.Name="CoreGui"
end
end
v:GetPropertyChangedSignal("Name"):Connect(function()
v.Name="CoreGui"
end)
end)
Seems it has something to do with a StarterScript .
As-well, that code breaks some roblox analytics in the roblox client:
To fix that, you edit this part in SetttingsHub: local starterPlayerScripts = StarterPlayer:WaitForChild("StarterPlayerScripts") to
local starterPlayerScripts = StarterPlayer:FindFirstChildOfClass("StarterPlayerScripts")
while not starterPlayerScripts do starterPlayerScripts = StarterPlayer:FindFirstChildOfClass("StarterPlayerScripts") task.wait() end
You sure? A GameScript renamed the services, as can be seen in the Report, which makes “Modules”/“RobloxGui” folder be put into the wrong location “Workspace”, which makes RobloxGui/such not work, thus making purchases in studio/sucn not work.
This also breaks internal roblox analytics of games with modified PlayerModules, if services were to be renamed.
This is a bug report, not a feature request, the CoreScript that adds the “modules” folder can be tricked by names. In this topic as far as the replies go, no user mentioned why renaming services to “CoreGui” is helpful.
Certain developers like to give services different names, incase if their too long for their script editor or such,
At runtime (playing, GameScript) i tend to rename services to “CoreGui” so certain exploit scripts fail (ive looked into many exploit scripts and saw some use game.CoreGui so i like to prevent them, it does work cause i have detection logs for my games and i see)
but its quite interesting that Robloxs Own Code (the CoreScripts) in Studio error/Infinite Yield because of not using GetService/such, renaming services does not make it disappear from GetService.
What if other developers, in the content of what they publish to the Creator Marketplace, put stuff that would hide CoreGui? As seen, causing this bug is pretty straight foward.
Ok.
let’s go chat now we can make our OWN core gui! it’s a feature, not a bug! it’s just the pre-release yk. -Dot said that, not me!
Thank you for the explanation. It sounds like the root of the problem is then
Exploits
Variable name length in the Script Editor
It makes sense, though to reopen this I would need to see significant support for fixing this, which would raise the priority of this ticket over other tickets that currently have more support.
I can tell you this though: we’re actively working on generic solutions to prevent exploits, so creators won’t have to resort to hacks like this that can potentially break things in other places.
To shorten names, the common solution is using variables.
As part of Roblox’s previous update (v686), attempts to retrieve CoreGui via API methods (such as GetService, DataModel indexing, GetChildren, etc.) are locked behind Plugin security, so your Script must be a Plugin, CoreScript, or anything higher in thread identity to access CoreGui or any of its descendants. It’s only locked in Live Sessions (in-game), so you can still retrieve CoreGui in Studio. It makes no sense to me why this change was implemented; however, it consequently resolved the issue in this thread, because GetDescendants and other methods no longer return CoreGui or any of its descendants, so they can’t be renamed.