-- Keys: N = anti-rubberband, G = stamina, T = tackle. Drag header/pill to move, — to minimize, × to close. local UserInputService = game:GetService("UserInputService") local ReplicatedStorage = game:GetService("ReplicatedStorage") local TweenService = game:GetService("TweenService") local Players = game:GetService("Players") local RunService = game:GetService("RunService") local LocalPlayer = Players.LocalPlayer :: Player local PlayerGui = LocalPlayer:FindFirstChildOfClass("PlayerGui") or LocalPlayer:WaitForChild("PlayerGui", 5) :: PlayerGui assert(PlayerGui, "[Bismuth Lite] PlayerGui not found") -- State local antiRubberEnabled = true local staminaEnabled = false local tackleEnabled = false local speedEnabled = false local minimized = false local watchdogConn: RBXScriptConnection? = nil -- Module refs local SlideTackleMod: any = nil local MoveMod: any = nil local GuardMod: any = nil local TackBack: {[string]: any}? = nil local MoveBack: {[string]: any}? = nil local MovementCorrectionRemote: RemoteEvent? = nil pcall(function() SlideTackleMod = require(ReplicatedStorage.Modules.Actions.SlideTackle) if SlideTackleMod and SlideTackleMod.Constants then TackBack = table.clone(SlideTackleMod.Constants) end end) pcall(function() MoveMod = require(ReplicatedStorage.Modules.Actions.ActionMovement) if MoveMod and MoveMod.Constants then MoveBack = table.clone(MoveMod.Constants) end end) pcall(function() GuardMod = require(ReplicatedStorage.Modules.Characters.LocalMovementGuard) end) pcall(function() local Remotes = require(ReplicatedStorage.Modules.Remotes) MovementCorrectionRemote = Remotes.Get("Characters", "MovementCorrection") :: any end) local ENHANCED_WALK = 19 local ENHANCED_SPRINT = 1.82 local ENHANCED_TACKLE = 1.38 --[[Stamina hook (executor only — uses filtergc / hookfunction when available) pcall(function() local execFilterGc: any = rawget(getfenv(), "filtergc") local execHook: any = rawget(getfenv(), "hookfunction") if not execFilterGc or not execHook then return end local updateSprint = execFilterGc("function", { Name = "updateSprint" }, true) if not updateSprint then return end local mod = debug.getupvalue(updateSprint, 14) if not mod then return end local Update = (mod :: any).Update if not Update then return end local oldUpdate: any oldUpdate = execHook(Update, function(...) local data = select(2, ...) if staminaEnabled and data and rawget(data, "HasUnlimitedStamina") ~= nil then rawset(data, "HasUnlimitedStamina", true) end return oldUpdate(...) end) end) ]] -- old ver stamina pcall(function() local updateSprint = filtergc("function", {Name = "updateSprint"}, true) if not updateSprint then return end local mod = debug.getupvalue(updateSprint, 14) local Update = mod.Update local oldUpdate oldUpdate = hookfunction(Update, function(...) local data = select(2, ...) if staminaEnabled and data and rawget(data, "HasUnlimitedStamina") ~= nil then rawset(data, "HasUnlimitedStamina", true) end return oldUpdate(...) end) end) -- Apply helpers local function applyTackle() if tackleEnabled and SlideTackleMod and TackBack then for k, v in pairs(TackBack :: any) do if typeof(v) == "number" then if k == "Distance" or k == "StartupDashDistance" or k == "BallKnockSpeed" then SlideTackleMod.Constants[k] = (v :: number) * ENHANCED_TACKLE elseif k == "StaminaCost" then SlideTackleMod.Constants[k] = 0 else SlideTackleMod.Constants[k] = v end else SlideTackleMod.Constants[k] = v end end else pcall(function() if TackBack and SlideTackleMod then for k, v in pairs(TackBack :: any) do SlideTackleMod.Constants[k] = v end end end) end end local function applySpeed() pcall(function() if MoveMod and MoveBack then if speedEnabled then MoveMod.Constants.BaseWalkSpeed = ENHANCED_WALK MoveMod.Constants.SprintSpeedMultiplier = ENHANCED_SPRINT else MoveMod.Constants.BaseWalkSpeed = (MoveBack :: any).BaseWalkSpeed MoveMod.Constants.SprintSpeedMultiplier = (MoveBack :: any).SprintSpeedMultiplier end end end) end local function applyAllCheats() if speedEnabled and MoveMod and MoveMod.Constants then MoveMod.Constants.BaseWalkSpeed = ENHANCED_WALK MoveMod.Constants.SprintSpeedMultiplier = ENHANCED_SPRINT end if tackleEnabled and SlideTackleMod and TackBack then for k, v in pairs(TackBack :: any) do if typeof(v) == "number" then if k == "Distance" or k == "StartupDashDistance" or k == "BallKnockSpeed" then SlideTackleMod.Constants[k] = (v :: number) * ENHANCED_TACKLE elseif k == "StaminaCost" then SlideTackleMod.Constants[k] = 0 else SlideTackleMod.Constants[k] = v end else SlideTackleMod.Constants[k] = v end end end end local function revertAllCheats() pcall(function() if MoveBack and MoveMod then MoveMod.Constants.BaseWalkSpeed = (MoveBack :: any).BaseWalkSpeed MoveMod.Constants.SprintSpeedMultiplier = (MoveBack :: any).SprintSpeedMultiplier end end) pcall(function() if TackBack and SlideTackleMod then for k, v in pairs(TackBack :: any) do SlideTackleMod.Constants[k] = v end end end) end -- Anti-rubberband: guard tolerances + AES + Validate hook + correction block local guardHooked = false local correctionBlocked = false local GuardValidateOrig: any = nil local function setGuardTolerances(wide: boolean) pcall(function() if GuardMod and GuardMod.Constants then if wide then GuardMod.Constants.PositionToleranceStuds = 9999 GuardMod.Constants.VelocityToleranceStudsPerSecond = 9999 else GuardMod.Constants.PositionToleranceStuds = 0.5 GuardMod.Constants.VelocityToleranceStudsPerSecond = 0.001 end end end) end local function setAESEnabled(enabled: boolean) pcall(function() local aesObj = ReplicatedStorage.Modules.Characters:FindFirstChild("AntiExploitSettings") :: Instance? if aesObj and aesObj:IsA("ModuleScript") then aesObj:SetAttribute("LocalAntiExploitEnabled", enabled) end local ctx = require(ReplicatedStorage.Modules.ContextState).Get("AntiExploitSettings") if ctx then (ctx :: any).LocalEnabled = enabled end end) end local function hookGuardValidate(enable: boolean) if enable and not guardHooked then pcall(function() local execHook: any = rawget(getfenv(), "hookfunction") if not (GuardMod and GuardMod.Validate and execHook) then return end GuardValidateOrig = GuardMod.Validate execHook(GuardMod.Validate, function(root: any, hum: any, ...: any) if antiRubberEnabled then pcall(function() local ctx: any = require(ReplicatedStorage.Modules.ContextState).Get("LocalMovementGuard") local state = ctx and ctx.States and ctx.States[root] if state then state.CFrame = root.CFrame state.Velocity = root.AssemblyLinearVelocity state.PositionError = Vector3.new(0, 0, 0) end end) return true end return GuardValidateOrig(root, hum, ...) end) guardHooked = true end) elseif not enable and guardHooked and GuardValidateOrig then pcall(function() local execHook: any = rawget(getfenv(), "hookfunction") execHook(GuardMod.Validate, GuardValidateOrig) end) guardHooked = false end end local function hookMovementCorrection(enable: boolean) if enable and not correctionBlocked then pcall(function() local gc: any = rawget(getfenv(), "getconnections") if not (MovementCorrectionRemote and gc) then return end for _, c in ipairs(gc((MovementCorrectionRemote :: any).OnClientEvent)) do if c.Disable then c:Disable() end end correctionBlocked = true end) elseif not enable and correctionBlocked then pcall(function() local gc: any = rawget(getfenv(), "getconnections") if gc and MovementCorrectionRemote then for _, c in ipairs(gc((MovementCorrectionRemote :: any).OnClientEvent)) do if c.Enable then c:Enable() end end end end) correctionBlocked = false end end local function applyAntiRubber() if antiRubberEnabled then setGuardTolerances(true) setAESEnabled(false) hookGuardValidate(true) hookMovementCorrection(true) else hookGuardValidate(false) setAESEnabled(true) setGuardTolerances(false) hookMovementCorrection(false) end end local function startWatchdog() if watchdogConn then watchdogConn:Disconnect() watchdogConn = nil end local tick = 0 watchdogConn = RunService.Heartbeat:Connect(function() tick += 1 if tick % 20 ~= 0 then return end applyAllCheats() if antiRubberEnabled and GuardMod and GuardMod.Constants and GuardMod.Constants.PositionToleranceStuds < 9000 then GuardMod.Constants.PositionToleranceStuds = 9999 GuardMod.Constants.VelocityToleranceStudsPerSecond = 9999 end if antiRubberEnabled then pcall(function() local a = ReplicatedStorage.Modules.Characters:FindFirstChild("AntiExploitSettings") if a and a:GetAttribute("LocalAntiExploitEnabled") ~= false then a:SetAttribute("LocalAntiExploitEnabled", false) end end) end end) end local function stopWatchdog() if watchdogConn then watchdogConn:Disconnect() watchdogConn = nil end end LocalPlayer.CharacterAdded:Connect(function() task.wait(0.55) applyAntiRubber() applyAllCheats() startWatchdog() end) -- Purge stale Bismuth panels / pills from every plausible parent (fixes double-pill on re-inject) do pcall(function() for _, inst in ipairs(PlayerGui:GetChildren()) do if inst.Name == "Bismuth_Panel" or inst.Name == "SoccerHub_Panel" or inst.Name == "MiniPill" then inst:Destroy() end if inst.Name:find("^Bismuth") and inst:IsA("ScreenGui") then inst:Destroy() end end end) pcall(function() local hui: any = rawget(getfenv(), "gethui") local h = hui and hui() if h then for _, ch in ipairs(h:GetChildren()) do if ch.Name == "Bismuth_Panel" or ch.Name == "SoccerHub_Panel" or ch.Name == "MiniPill" then ch:Destroy() end end end end) pcall(function() local cg = game:GetService("CoreGui") for _, ch in ipairs(cg:GetChildren()) do if ch.Name == "Bismuth_Panel" or ch.Name == "SoccerHub_Panel" or ch.Name == "MiniPill" then ch:Destroy() end end end) end local gui = Instance.new("ScreenGui") gui.Name = "SoccerHub_Panel" gui.ResetOnSpawn = false gui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling gui.IgnoreGuiInset = true gui.DisplayOrder = 999 gui.Parent = PlayerGui do local syn: any = rawget(getfenv(), "syn") if syn and syn.protect_gui then pcall(syn.protect_gui, gui) end end local main = Instance.new("Frame") main.Name = "Main" main.Size = UDim2.fromOffset(300, 340) main.Position = UDim2.new(0.5, -150, 0.5, -170) main.BackgroundColor3 = Color3.fromRGB(18, 18, 22) main.BorderSizePixel = 0 main.Active = true main.Parent = gui Instance.new("UICorner", main).CornerRadius = UDim.new(0, 14) local mainStroke = Instance.new("UIStroke", main) mainStroke.Color = Color3.fromRGB(58, 58, 70) mainStroke.Thickness = 1.2 mainStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border local header = Instance.new("Frame") header.Name = "Header" header.Size = UDim2.new(1, 0, 0, 40) header.BackgroundColor3 = Color3.fromRGB(28, 28, 34) header.BorderSizePixel = 0 header.Active = true header.Parent = main Instance.new("UICorner", header).CornerRadius = UDim.new(0, 14) local headerFix = Instance.new("Frame", header) headerFix.Size = UDim2.new(1, 0, 0, 10) headerFix.Position = UDim2.new(0, 0, 1, -10) headerFix.BackgroundColor3 = header.BackgroundColor3 headerFix.BorderSizePixel = 0 headerFix.ZIndex = 0 local title = Instance.new("TextLabel", header) title.Size = UDim2.new(1, -92, 1, 0) title.Position = UDim2.new(0, 14, 0, 0) title.BackgroundTransparency = 1 title.Text = "SOCCERHUB • Bismuth LITE" title.Font = Enum.Font.GothamBold title.TextSize = 12 title.TextColor3 = Color3.fromRGB(235, 235, 240) title.TextXAlignment = Enum.TextXAlignment.Left local sub = Instance.new("TextLabel", header) sub.Size = UDim2.new(1, -92, 0, 10) sub.Position = UDim2.new(0, 14, 0, 22) sub.BackgroundTransparency = 1 sub.Text = "drag header/pill • — minimize • N/G/T • SoccerHub.luau" sub.Font = Enum.Font.Gotham sub.TextSize = 9 sub.TextColor3 = Color3.fromRGB(130, 130, 145) sub.TextXAlignment = Enum.TextXAlignment.Left local function makeHeaderBtn(text: string, xOff: number): TextButton local b = Instance.new("TextButton", header) b.Size = UDim2.fromOffset(30, 30) b.Position = UDim2.new(1, xOff, 0.5, -15) b.BackgroundColor3 = Color3.fromRGB(38, 38, 46) b.Text = text b.Font = Enum.Font.GothamBold b.TextSize = 16 b.TextColor3 = Color3.fromRGB(230, 230, 235) b.AutoButtonColor = true Instance.new("UICorner", b).CornerRadius = UDim.new(0, 8) return b end local minBtn = makeHeaderBtn("—", -70) local closeBtn = makeHeaderBtn("×", -34) closeBtn.TextSize = 18 local content = Instance.new("ScrollingFrame", main) content.Name = "Content" content.Size = UDim2.new(1, -12, 1, -48) content.Position = UDim2.new(0, 6, 0, 44) content.BackgroundTransparency = 1 content.BorderSizePixel = 0 content.ScrollBarThickness = 4 content.ScrollBarImageTransparency = 0.3 content.CanvasSize = UDim2.new(0, 0, 0, 0) content.AutomaticCanvasSize = Enum.AutomaticSize.Y local list = Instance.new("UIListLayout", content) list.Padding = UDim.new(0, 8) list.SortOrder = Enum.SortOrder.LayoutOrder local pad = Instance.new("UIPadding", content) pad.PaddingTop = UDim.new(0, 2) pad.PaddingLeft = UDim.new(0, 4) pad.PaddingRight = UDim.new(0, 4) pad.PaddingBottom = UDim.new(0, 6) local statusFrame = Instance.new("Frame", content) statusFrame.Size = UDim2.new(1, 0, 0, 28) statusFrame.BackgroundColor3 = Color3.fromRGB(28, 34, 28) statusFrame.BorderSizePixel = 0 statusFrame.LayoutOrder = 0 Instance.new("UICorner", statusFrame).CornerRadius = UDim.new(0, 8) local statusStroke = Instance.new("UIStroke", statusFrame) statusStroke.Color = Color3.fromRGB(70, 110, 70) statusStroke.Thickness = 1 local statusDot = Instance.new("Frame", statusFrame) statusDot.Size = UDim2.fromOffset(8, 8) statusDot.Position = UDim2.new(0, 10, 0.5, -4) statusDot.BackgroundColor3 = Color3.fromRGB(88, 200, 88) statusDot.BorderSizePixel = 0 Instance.new("UICorner", statusDot).CornerRadius = UDim.new(1, 0) local statusLabel = Instance.new("TextLabel", statusFrame) statusLabel.Size = UDim2.new(1, -28, 1, 0) statusLabel.Position = UDim2.new(0, 24, 0, 0) statusLabel.BackgroundTransparency = 1 statusLabel.Text = "● Anti-Rubberband: ON" statusLabel.Font = Enum.Font.Gotham statusLabel.TextSize = 10 statusLabel.TextColor3 = Color3.fromRGB(170, 210, 170) statusLabel.TextXAlignment = Enum.TextXAlignment.Left -- Single pill: child of the same ScreenGui, created once. Visible toggled via minimized. local mini = Instance.new("TextButton", gui) mini.Name = "MiniPill" mini.Size = UDim2.fromOffset(116, 36) mini.Position = UDim2.new(0, 16, 0.5, 0) mini.BackgroundColor3 = Color3.fromRGB(28, 28, 34) mini.Text = " SOCCERHUB ▶" mini.Font = Enum.Font.GothamBold mini.TextSize = 12 mini.TextColor3 = Color3.fromRGB(235, 235, 240) mini.Visible = false mini.AutoButtonColor = true mini.Active = true Instance.new("UICorner", mini).CornerRadius = UDim.new(0, 18) local miniStroke = Instance.new("UIStroke", mini) miniStroke.Color = Color3.fromRGB(65, 65, 75) miniStroke.Thickness = 1.2 local toggles: { [string]: { btn: TextButton, dot: Frame, row: Frame, accentOn: Color3? } } = {} local function createToggle(key: string, label: string, hint: string, order: number, accentOn: Color3?): (TextButton, Frame) local row = Instance.new("Frame", content) row.Size = UDim2.new(1, 0, 0, 52) row.BackgroundColor3 = Color3.fromRGB(32, 32, 38) row.BorderSizePixel = 0 row.LayoutOrder = order Instance.new("UICorner", row).CornerRadius = UDim.new(0, 10) local st = Instance.new("UIStroke", row) st.Color = Color3.fromRGB(45, 45, 55) st.Thickness = 1 st.ApplyStrokeMode = Enum.ApplyStrokeMode.Border local lb = Instance.new("TextLabel", row) lb.Size = UDim2.new(1, -84, 0, 16) lb.Position = UDim2.new(0, 12, 0, 10) lb.BackgroundTransparency = 1 lb.Text = label lb.Font = Enum.Font.GothamBold lb.TextSize = 12 lb.TextColor3 = Color3.fromRGB(240, 240, 245) lb.TextXAlignment = Enum.TextXAlignment.Left local ht = Instance.new("TextLabel", row) ht.Size = UDim2.new(1, -84, 0, 12) ht.Position = UDim2.new(0, 12, 0, 27) ht.BackgroundTransparency = 1 ht.Text = hint ht.Font = Enum.Font.Gotham ht.TextSize = 10 ht.TextColor3 = Color3.fromRGB(150, 150, 160) ht.TextXAlignment = Enum.TextXAlignment.Left local btn = Instance.new("TextButton", row) btn.Size = UDim2.fromOffset(58, 28) btn.Position = UDim2.new(1, -68, 0.5, -14) btn.BackgroundColor3 = Color3.fromRGB(55, 55, 65) btn.Text = "OFF" btn.Font = Enum.Font.GothamBold btn.TextSize = 11 btn.TextColor3 = Color3.fromRGB(220, 220, 225) btn.AutoButtonColor = false Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 14) local dot = Instance.new("Frame", btn) dot.Name = "Dot" dot.Size = UDim2.fromOffset(20, 20) dot.Position = UDim2.new(0, 4, 0.5, -10) dot.BackgroundColor3 = Color3.fromRGB(200, 200, 205) dot.BorderSizePixel = 0 Instance.new("UICorner", dot).CornerRadius = UDim.new(1, 0) toggles[key] = { btn = btn, dot = dot, row = row, accentOn = accentOn } return btn, dot end local b0 = createToggle("antirubber", "Anti-Rubberband ★", "Guard bypass + server block • N", 1, Color3.fromRGB(90, 170, 90)) local b1 = createToggle("stamina", "Unlimited Stamina", "No drain • G", 2) local b2 = createToggle("tackle", "Power Tackle 1.38×", "Dist + Knock + 0 cost • T", 3) local b3 = createToggle("speed", "Super Speed 19", "Base 16→19 ×1.82 (watchdog)", 4) local function setVisual(key: string, on: boolean) local t = toggles[key] if not t then return end local accent = t.accentOn or Color3.fromRGB(88, 166, 78) TweenService:Create(t.btn, TweenInfo.new(0.18, Enum.EasingStyle.Quad), { BackgroundColor3 = on and accent or Color3.fromRGB(55, 55, 65) }):Play() t.btn.Text = on and "ON" or "OFF" TweenService:Create(t.dot, TweenInfo.new(0.18, Enum.EasingStyle.Quad), { Position = on and UDim2.new(1, -24, 0.5, -10) or UDim2.new(0, 4, 0.5, -10), BackgroundColor3 = on and Color3.fromRGB(255, 255, 255) or Color3.fromRGB(200, 200, 205) }):Play() TweenService:Create(t.row, TweenInfo.new(0.18, Enum.EasingStyle.Quad), { BackgroundColor3 = on and (t.accentOn and Color3.fromRGB(32, 42, 32) or Color3.fromRGB(36, 46, 38)) or Color3.fromRGB(32, 32, 38) }):Play() end local function refreshStatus() if antiRubberEnabled then statusLabel.Text = "● Anti-Rubberband: ON" statusLabel.TextColor3 = Color3.fromRGB(170, 210, 170) TweenService:Create(statusDot, TweenInfo.new(0.2), { BackgroundColor3 = Color3.fromRGB(88, 200, 88) }):Play() TweenService:Create(statusStroke, TweenInfo.new(0.2), { Color = Color3.fromRGB(70, 110, 70) }):Play() TweenService:Create(statusFrame, TweenInfo.new(0.2), { BackgroundColor3 = Color3.fromRGB(28, 34, 28) }):Play() else statusLabel.Text = "● Anti-Rubberband: OFF — may snap" statusLabel.TextColor3 = Color3.fromRGB(190, 150, 130) TweenService:Create(statusDot, TweenInfo.new(0.2), { BackgroundColor3 = Color3.fromRGB(200, 90, 90) }):Play() TweenService:Create(statusStroke, TweenInfo.new(0.2), { Color = Color3.fromRGB(110, 70, 70) }):Play() TweenService:Create(statusFrame, TweenInfo.new(0.2), { BackgroundColor3 = Color3.fromRGB(34, 28, 28) }):Play() end end local function refreshAll() setVisual("antirubber", antiRubberEnabled) setVisual("stamina", staminaEnabled) setVisual("tackle", tackleEnabled) setVisual("speed", speedEnabled) refreshStatus() end b0.MouseButton1Click:Connect(function() antiRubberEnabled = not antiRubberEnabled applyAntiRubber() if antiRubberEnabled then startWatchdog() end refreshAll() end) b1.MouseButton1Click:Connect(function() staminaEnabled = not staminaEnabled refreshAll() end) b2.MouseButton1Click:Connect(function() tackleEnabled = not tackleEnabled applyTackle() refreshAll() end) b3.MouseButton1Click:Connect(function() speedEnabled = not speedEnabled applySpeed() refreshAll() end) UserInputService.InputBegan:Connect(function(input: InputObject, processed: boolean) if processed then return end if input.KeyCode == Enum.KeyCode.N then antiRubberEnabled = not antiRubberEnabled applyAntiRubber() if antiRubberEnabled then startWatchdog() end refreshAll() elseif input.KeyCode == Enum.KeyCode.G then staminaEnabled = not staminaEnabled refreshAll() elseif input.KeyCode == Enum.KeyCode.T then tackleEnabled = not tackleEnabled applyTackle() refreshAll() end end) local function setMinimized(state: boolean) minimized = state if state then content.Visible = false statusFrame.Visible = false TweenService:Create(main, TweenInfo.new(0.2, Enum.EasingStyle.Quad), { Size = UDim2.fromOffset(300, 40) }):Play() mini.Visible = true else mini.Visible = false TweenService:Create(main, TweenInfo.new(0.2, Enum.EasingStyle.Quad), { Size = UDim2.fromOffset(300, 340) }):Play() task.delay(0.02, function() content.Visible = true statusFrame.Visible = true end) end end minBtn.MouseButton1Click:Connect(function() setMinimized(not minimized) end) mini.MouseButton1Click:Connect(function() setMinimized(false) end) closeBtn.MouseButton1Click:Connect(function() antiRubberEnabled = false pcall(applyAntiRubber) stopWatchdog() if guardHooked and GuardValidateOrig then pcall(function() local h: any = rawget(getfenv(), "hookfunction") h(GuardMod.Validate, GuardValidateOrig) end) guardHooked = false end hookMovementCorrection(false) revertAllCheats() local char = LocalPlayer.Character local hum: Humanoid? = char and (char:FindFirstChildOfClass("Humanoid") :: Humanoid) if hum and MoveBack then (hum :: Humanoid).WalkSpeed = (MoveBack :: any).BaseWalkSpeed end pcall(function() if GuardMod then GuardMod.Constants.PositionToleranceStuds = 0.5 GuardMod.Constants.VelocityToleranceStudsPerSecond = 0.001 end end) pcall(function() local a = ReplicatedStorage.Modules.Characters:FindFirstChild("AntiExploitSettings") if a then a:SetAttribute("LocalAntiExploitEnabled", true) end local ctx: any = require(ReplicatedStorage.Modules.ContextState).Get("AntiExploitSettings") if ctx then ctx.LocalEnabled = true end end) gui:Destroy() end) local function makeDraggable(frame: Instance, handle: GuiObject) local dragging = false local dragInput: InputObject? = nil local dragStart: Vector2 = Vector2.new(0, 0) local startPos: UDim2 = UDim2.new(0, 0, 0, 0) local function update(input: InputObject) local delta = input.Position - dragStart ;(frame :: Frame).Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end ;(handle :: any).InputBegan:Connect(function(input: InputObject) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = (frame :: Frame).Position input:GetPropertyChangedSignal("UserInputState"):Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) ;(handle :: any).InputChanged:Connect(function(input: InputObject) if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then dragInput = input end end) UserInputService.InputChanged:Connect(function(input: InputObject) if dragging and input == dragInput then update(input) end end) end makeDraggable(main, header) makeDraggable(mini, mini) -- console helpers local gg: any = rawget(getfenv(), "getgenv") if gg then local g = gg() g.SoccerHubLite = { AntiRubberband = function(on: boolean?): boolean if on ~= nil then antiRubberEnabled = on and true or false end applyAntiRubber() if antiRubberEnabled then startWatchdog() end refreshAll() return antiRubberEnabled end, Watchdog = function(on: boolean?): boolean if on ~= nil then if on then startWatchdog() else stopWatchdog() end end return watchdogConn ~= nil end, } end refreshAll() applyTackle() applySpeed() applyAntiRubber() startWatchdog() refreshAll() print("[Bismuth Lite] ✓ SoccerHub.luau injected — Anti-Rubberband ON + watchdog | N/G/T | draggable header/pill")