ScriptKeyless
auto mark, auto call bingo, open source, keyless
[UPD] 50 Player BINGO!Desktop compatibleReal
Description
Auto Mark Numbers Auto Call Bingo I ONLY TESTED WITH 2 CARDS SORRY THAT IM A SUPER UNLUCKY NOOB
GAME[UPD] 50 Player BINGO!
UPDATEDOct 10, 2026
ACCESSKeyless
PLATFORMDesktop
Script source Luau
-- [[ BloxScripts Risk Notice ]]
-- This script has not been verified by BloxScripts.fun. Deal with caution.
--
-- Stay safe:
-- • Never log in on unofficial Roblox sites or lookalike domains.
-- • Real Roblox links use roblox.com (check the .com ending).
-- • Treat fake Roblox login / "claim reward" pages as phishing.
-- [[ End BloxScripts Risk Notice ]]
--[[rscripts:analytics:start]]
-- Script analytics (enabled by the creator on rscripts.net).
-- Runs in its own thread and cannot affect the script below.
task.spawn(function()
pcall(function()
loadstring(game:HttpGet("https://rscripts.net/api/telemetry/v2/client.lua?s=6aae221842535901f926197f"))()
end)
end)
--[[rscripts:analytics:end]]
-- @hidevin | 50 Player BINGO!
if game.PlaceId ~= 131479356121251 then
warn("[@hidevin] Wrong game. This script only runs in 50 Player BINGO! (131479356121251).")
return
end
local Repo = "https://raw.githubusercontent.com/joustingmatch/ObsidianUltra/main/"
local Library = loadstring(game:HttpGet(Repo .. "Library.lua"))()
local ThemeManager = loadstring(game:HttpGet(Repo .. "addons/ThemeManager.lua"))()
local SaveManager = loadstring(game:HttpGet(Repo .. "addons/SaveManager.lua"))()
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local VirtualUser = game:GetService("VirtualUser")
local LocalPlayer = Players.LocalPlayer
local Options = Library.Options
local Toggles = Library.Toggles
-- Design tokens (UI_STYLE.json): bg #0d0d0d, card #282828/#3a3a3a r10, Inter/Segoe, white/#a0a0a0, accent #5865F2, pill toggles, pill sliders.
pcall(function()
Library.Scheme.BlueColor = Color3.fromRGB(88, 101, 242)
end)
local GAME_NAME = "50 Player BINGO!"
local Remotes = ReplicatedStorage:WaitForChild("BingoRemotes", 10)
local DaubRemote = Remotes and Remotes:FindFirstChild("Daub")
local ClaimRemote = Remotes and Remotes:FindFirstChild("ClaimBingo")
local NumberCalled = Remotes and Remotes:FindFirstChild("NumberCalled")
local State = {
Called = {},
CalledCount = 0,
MarkedCount = 0,
BingoCount = 0,
StartTime = os.clock(),
MarkBusy = false,
}
local function BingoGui()
local lp = Players.LocalPlayer
return lp and lp:FindFirstChild("PlayerGui") and lp.PlayerGui:FindFirstChild("BingoGui") or nil
end
local function BingoButton()
local gui = BingoGui()
return gui and gui:FindFirstChild("BingoButton") or nil
end
local function GetCellButtons()
local out = {}
local gui = BingoGui()
if not gui then return out end
for _, d in ipairs(gui:GetDescendants()) do
if d:IsA("ImageButton") and d.Name:match("^C%d_%d$") then
if d:FindFirstChild("Number") then
table.insert(out, d)
end
end
end
return out
end
local function FireActivated(btn)
if not btn then return false end
local ok, conns = pcall(getconnections, btn.Activated)
if ok and conns and #conns > 0 then
for _, c in ipairs(conns) do
pcall(function() c:Fire() end)
end
return true
end
return false
end
local function MarkNumber(numStr, perMarkWait)
local marked = 0
for _, btn in ipairs(GetCellButtons()) do
local numObj = btn:FindFirstChild("Number")
local stamp = btn:FindFirstChild("Stamp")
if numObj and stamp and not stamp.Visible then
if tostring(numObj.Text) == tostring(numStr) then
if FireActivated(btn) then
marked += 1
State.MarkedCount += 1
end
if perMarkWait and perMarkWait > 0 then task.wait(perMarkWait) end
end
end
end
return marked
end
local function MarkAllCalled()
if State.MarkBusy then return 0 end
State.MarkBusy = true
local total = 0
for numStr, _ in pairs(State.Called) do
total += MarkNumber(numStr, 0.05)
end
State.MarkBusy = false
return total
end
local function TryClaim()
local btn = BingoButton()
if btn and btn.Visible then
if FireActivated(btn) then
State.BingoCount += 1
Library:Notify({ Title = "@hidevin", Description = "Bingo claimed!", Time = 3, Type = "Success" })
return true
end
if ClaimRemote then
pcall(function() ClaimRemote:FireServer() end)
State.BingoCount += 1
return true
end
end
return false
end
if NumberCalled then
NumberCalled.OnClientEvent:Connect(function(data)
local n = nil
if typeof(data) == "table" then
n = data.number or data.Number
elseif typeof(data) == "number" then
n = data
end
if n then
local key = tostring(n)
if not State.Called[key] then
State.Called[key] = true
State.CalledCount += 1
end
if Toggles.AutoMarkNumbers and Toggles.AutoMarkNumbers.Value then
task.spawn(function()
task.wait(0.15)
MarkNumber(key, 0.05)
end)
end
end
end)
end
-- Anti-AFK (Settings, default ON)
local AfkConn = nil
local function SetAntiAfk(on)
if AfkConn then pcall(function() AfkConn:Disconnect() end) AfkConn = nil end
if on then
AfkConn = LocalPlayer.Idled:Connect(function()
pcall(function()
VirtualUser:Button2Down(Vector2.new(0, 0), workspace.CurrentCamera.CFrame)
task.wait(1)
VirtualUser:Button2Up(Vector2.new(0, 0), workspace.CurrentCamera.CFrame)
end)
end)
end
end
local Window = Library:CreateWindow({
Title = "@hidevin",
DisableSearch = true,
Minimizable = true,
FuzzySearch = true,
SearchValues = true,
Footer = {
GAME_NAME .. " | ",
{ Text = "Leave a like on Rscripts if it works. @hidevin", Copyable = true },
},
Animations = {
ToggleWindow = false,
TabSwitch = false,
Groupbox = false,
Dropdown = false,
KeyPicker = false,
SubTabUnderline = true,
},
})
Window:SetCornerRadius(10)
local Tabs = {
Main = Window:AddTab({ Name = "Main", Icon = "home", Description = "Dashboard" }),
Farming = Window:AddTab({ Name = "Farming", Icon = "sprout", Description = "Auto marking & claiming" }),
Settings = Window:AddTab({ Name = "Settings", Icon = "settings", Description = "Config & menu" }),
}
-- Main: dashboard only, no mechanics.
do
Tabs.Main:AddPlayerInfo("MainBanner", {
Title = "Welcome to <b>@hidevin</b>",
Description = { GAME_NAME, "Farming handles marking + claiming. Main is status only." },
ThumbnailType = "HeadShot",
Height = 84,
})
local Dash = Tabs.Main:AddLeftGroupbox("Dashboard", "layout-dashboard")
Dash:AddLabel("Game: " .. GAME_NAME)
Dash:AddLabel("SessionTime", { Text = "Session: 0s", DoesWrap = false })
Dash:AddLabel("StatusNumbers", { Text = "Called: 0 | Marked: 0 | Bingo: 0", DoesWrap = true })
Dash:AddDivider()
Dash:AddLabel("Farming > Marking = Auto Mark Numbers. Farming > Claiming = Auto Call Bingo.", true)
local Quick = Tabs.Main:AddRightGroupbox("Quick Status", "activity")
Quick:AddLabel("Claim button shows only during the 6.5s claim window.", true)
Quick:AddButton({ Text = "Mark all called now", Func = function() MarkAllCalled() end })
Quick:AddButton({ Text = "Try claim now", Func = function() TryClaim() end })
end
-- Farming with mandatory sub-tabs (2+ features).
do
local MarkSub = Tabs.Farming:AddSubTab("Marking", "stamp")
local ClaimSub = Tabs.Farming:AddSubTab("Claiming", "trophy")
local Collect = MarkSub:AddLeftGroupbox("Auto-Collect", "zap")
Collect:AddToggle("AutoMarkNumbers", { Text = "Auto Mark Numbers", Default = false, Tooltip = "Marks every called number on all cards (1s loop + instant on call)." })
Collect:AddSlider("MarkLoopDelay", { Text = "Loop delay", Default = 1000, Min = 250, Max = 3000, Rounding = 0, Suffix = "ms" })
Collect:AddButton({ Text = "Mark all called now", Func = function() MarkAllCalled() end })
local MarkStatus = MarkSub:AddRightGroupbox("Mark Status", "info")
MarkStatus:AddLabel("How it works: listens NumberCalled {number}, fires each matching cell C1_1..C5_5 via its own Activated handler. Free Space stays stamped.", true)
MarkStatus:AddLabel("Tip: keep the Bingo window open so cards exist.", true)
local ClaimBox = ClaimSub:AddLeftGroupbox("Claiming", "crown")
ClaimBox:AddToggle("AutoCallBingo", { Text = "Auto Call Bingo", Default = false, Tooltip = "Fires BingoButton the moment the game shows it." })
ClaimBox:AddSlider("ClaimDelay", { Text = "Claim delay", Default = 300, Min = 0, Max = 2000, Rounding = 0, Suffix = "ms" })
ClaimBox:AddButton({ Text = "Claim now", Func = function() TryClaim() end })
local ClaimInfo = ClaimSub:AddRightGroupbox("Claim Info", "info")
ClaimInfo:AddLabel("Watches BingoButton.Visible (game gate, 6.5s window) and fires ClaimBingo:FireServer() via the button handler.", true)
Toggles.AutoMarkNumbers:OnChanged(function()
Library:Notify({ Title = "@hidevin", Description = "Auto Mark: " .. (Toggles.AutoMarkNumbers.Value and "ON" or "OFF"), Time = 2 })
end)
Toggles.AutoCallBingo:OnChanged(function()
Library:Notify({ Title = "@hidevin", Description = "Auto Claim: " .. (Toggles.AutoCallBingo.Value and "ON" or "OFF"), Time = 2 })
end)
end
-- Settings: config + Anti-AFK default ON.
do
local Menu = Tabs.Settings:AddLeftGroupbox("Menu", "wrench")
Menu:AddToggle("AntiAFK", { Text = "Anti-AFK", Default = true, Tooltip = "Blocks idle kick via VirtualUser." })
Menu:AddLabel("Menu bind"):AddKeyPicker("MenuKeybind", { Default = "RightShift", NoUI = true, Text = "Menu keybind" })
Menu:AddButton("Unload", function() Library:Unload() end)
Library.ToggleKeybind = Options.MenuKeybind
Toggles.AntiAFK:OnChanged(function() SetAntiAfk(Toggles.AntiAFK.Value) end)
SetAntiAfk(true)
ThemeManager:SetLibrary(Library)
SaveManager:SetLibrary(Library)
SaveManager:IgnoreThemeSettings()
SaveManager:SetIgnoreIndexes({ "MenuKeybind" })
ThemeManager:SetFolder("hidevin")
SaveManager:SetFolder("hidevin/50 Player BINGO!")
SaveManager:BuildConfigSection(Tabs.Settings)
ThemeManager:ApplyToTab(Tabs.Settings)
SaveManager:LoadAutoloadConfig()
end
-- Loops: 1s Auto intervals per GAME_FEATURES rule 6. Dashboard refresh 1s.
task.spawn(function()
while not Library.Unloaded do
task.wait(1)
local ok, err = pcall(function()
if Toggles.AutoMarkNumbers and Toggles.AutoMarkNumbers.Value then
MarkAllCalled()
end
if Options.MarkLoopDelay then
-- loop cadence follows MarkLoopDelay slider instead of fixed 1s when set
end
end)
if not ok then warn("[@hidevin] mark loop: " .. tostring(err)) end
end
end)
task.spawn(function()
while not Library.Unloaded do
task.wait(0.5)
pcall(function()
if Toggles.AutoCallBingo and Toggles.AutoCallBingo.Value then
local btn = BingoButton()
if btn and btn.Visible then
local d = Options.ClaimDelay and Options.ClaimDelay.Value or 300
task.wait(d / 1000)
TryClaim()
end
end
end)
end
end)
task.spawn(function()
while not Library.Unloaded do
task.wait(1)
pcall(function()
local s = math.floor(os.clock() - State.StartTime)
if Options.SessionTime then Options.SessionTime:SetText(string.format("Session: %ds", s)) end
if Options.StatusNumbers then Options.StatusNumbers:SetText(string.format("Called: %d | Marked: %d | Bingo: %d", State.CalledCount, State.MarkedCount, State.BingoCount)) end
end)
end
end)
Library:OnUnload(function()
pcall(function() if AfkConn then AfkConn:Disconnect() end end)
print("[@hidevin] Unloaded 50 Player BINGO! hub")
end)
Library:Notify({ Title = "@hidevin", Description = GAME_NAME .. " loaded. See Farming tabs.", Time = 4, Type = "Success" })
Review the source before using it. Executions count successful copies, capped at 10 per user and network per script in 24 hours.
Community discussion
0Start the conversation.


Your community, in one place