-- [[ Rscripts Risk Notice ]] -- This script is not verified by rscripts.net. 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 Rscripts 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 @hidevin", 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" })