In short
StarterGui:SetCore(name, value) talks to Roblox's own interface scripts (the CoreScripts), and each name only works once the CoreScript behind it has registered it. Your LocalScript asked too early, or asked for a name that does not exist (names are case-sensitive: TopbarEnabled, not TopBarEnabled), or asked for a feature your experience does not have, such as ChatMakeSystemMessage without legacy chat. Retry early calls in a pcall loop, copy the exact name from the docs, and use TextChatService for chat messages.
What the message means
Players.Builderman.PlayerScripts.DisableReset:4: SetCore: ResetButtonCallback has not been registered by the CoreScripts
Other forms of the same message:
SetCore: SendNotification has not been registered by the CoreScriptsSetCore: ChatMakeSystemMessage has not been registered by the CoreScriptsGetCore: ChatActive has not been registered by the CoreScripts
The CoreScripts load alongside your own scripts when a player joins. A LocalScript in StarterPlayerScripts or StarterGui can run before they finish, and Roblox's own reference for SetCore says to call it several times with pcall for that reason.
SetCore only works on the client. From a server Script the message is different: StarterGui:SetCore must be called from a local script.
Causes and fixes
Three things cause this error in practice. Each one below has the smallest code that triggers it, then the fix.
- SetCore runs before the CoreScripts are ready
- The name is misspelt or does not exist
- ChatMakeSystemMessage in a game on TextChatService
SetCore runs before the CoreScripts are ready
Turning off the reset button in the first line of a LocalScript is the textbook case: it works on a fast computer and fails on a slow one, or only sometimes.
local StarterGui = game:GetService("StarterGui")
-- runs at once: SetCore: ResetButtonCallback has not been registered by the CoreScripts
StarterGui:SetCore("ResetButtonCallback", false)
Call it in a pcall and try again after a short wait until it works. Give up after a number of tries so a name that never registers does not loop for ever.
local StarterGui = game:GetService("StarterGui")
local function setCoreWhenReady(name: string, value: any, tries: number?)
for _ = 1, tries or 50 do
local ok = pcall(StarterGui.SetCore, StarterGui, name, value)
if ok then
return true
end
task.wait(0.2)
end
warn(`[SetCore] {name} never registered`)
return false
end
setCoreWhenReady("ResetButtonCallback", false)
The name is misspelt or does not exist
The first argument is a plain string, so the Script Editor cannot check it. TopBarEnabled, ResetButtonCallBack or SendNotifcation are never registered, so they fail every time, and no amount of waiting helps.
local StarterGui = game:GetService("StarterGui")
-- the name is TopbarEnabled (lower-case b)
StarterGui:SetCore("TopBarEnabled", false)
Copy the exact name from the StarterGui:SetCore reference. If a retry loop like the one above never succeeds, check the spelling before anything else.
local StarterGui = game:GetService("StarterGui")
for _ = 1, 50 do
if pcall(StarterGui.SetCore, StarterGui, "TopbarEnabled", false) then
break
end
task.wait(0.2)
end
ChatMakeSystemMessage in a game on TextChatService
ChatMakeSystemMessage belongs to the legacy chat system. Roblox's reference says it needs TextChatService.ChatVersion set to LegacyChatService, which is deprecated. In a game using the current TextChatService, the name is never registered.
local StarterGui = game:GetService("StarterGui")
-- legacy chat only: SetCore: ChatMakeSystemMessage has not been registered by the CoreScripts
StarterGui:SetCore("ChatMakeSystemMessage", {
Text = "Round starting!",
Color = Color3.fromRGB(255, 200, 0),
})
Use TextChannel:DisplaySystemMessage on the general channel instead. It runs on the client and shows the message to that player only.
local TextChatService = game:GetService("TextChatService")
local channels = TextChatService:WaitForChild("TextChannels")
local general = channels:WaitForChild("RBXGeneral") :: TextChannel
general:DisplaySystemMessage("Round starting!")
Fix it in your place
Paste the error, RoCode fixes it in your place
Copy the line from Output and paste it here. RoCode opens the script it names in the place you have open in Studio, works out which of the causes above it is, and edits the code there instead of handing you a snippet to paste.
RoCode is an AI agent for Roblox Studio: it reads the scripts in the place you have open, finds the line and edits it there, and every change is an undo point. It runs on Windows or macOS with a desktop browser. Free to start, with free credits every day.
How to find the line that causes it
- Open Output (Window menu, or the Script tab), clear it with Ctrl+K (⌘K on Mac), and press Play.
- Find the first red line. It starts with the script's place in the Explorer and the line number, such as
ServerScriptService.Shop:12:. - Click the red line. Studio opens that script with the cursor on the failing line.
- Read the lines between
Stack BeginandStack Endunder it: they list the calls that led there, newest first, so you can see which function called the broken one. - Still not sure which value is wrong? Add
print(typeof(x), x)just above the line, or set a breakpoint on it and read the values in the Watch window.
Questions
How do I disable the reset button in Roblox?
In a LocalScript, call StarterGui:SetCore("ResetButtonCallback", false), wrapped in a pcall retry loop like the one on this page so it still works when the CoreScripts load late.
Why does a task.wait(1) before SetCore not fix it?
A fixed wait only guesses how long loading takes. On a slower device it is still too early. Retrying until the pcall succeeds works on every device.
Can I call SetCore from a server Script?
No. It only runs on the client, and from the server it fails with StarterGui:SetCore must be called from a local script. Send the client a RemoteEvent and call SetCore there.
Can RoCode fix it?
Yes. Paste the Output line into RoCode. It reads the LocalScript in the place you have open, adds the retry, corrects the name or moves chat messages to TextChatService.
Sources and further reading
- Roblox Creator Docs: StarterGui:SetCore. the accepted names, and calling it with pcall until the core script has loaded
- Roblox Creator Docs: TextChannel:DisplaySystemMessage
- Roblox Creator Docs: TextChatService
How the code was checked: every block marked Fixed passes Luau's strict type checker against Roblox's API definitions (luau-lsp, 4 November 2026), and every block marked Breaks compiles and fails only when it runs. The message wording, including the GetCore form, was checked against the message format strings in Roblox Studio itself (macOS build installed on 24 October 2026) on 4 November 2026. The SetCore names and the advice to retry with pcall are from the StarterGui:SetCore reference in the Roblox creator docs. A type check catches misspelt APIs and wrong types, not game logic, so playtest in Studio before you publish.