-- << INTEGRATED OP MODS PATCH >> -- Add/replace into your Main tab section (this block was designed to slot into your existing script) -- It keeps original behavior and adds OP Mode, presets, and custom numeric controls. -------------------------------------------------------------------- -- OP MODE / CUSTOM VALUE MODIFIERS (client-only, aggressive) -------------------------------------------------------------------- -- configurable runtime variables (editable by the UI below) local walkMultiplier = 3.125 -- multiplies default walk speed (example: default 16 -> ~50) local jumpMultiplier = 2.0 -- multiplies default jump power local tpInterval = 0.015 -- how often TP collect loop runs (seconds) local tpDwell = 0.010 -- how long to dwell on token local tpSearchRadius = 1200 -- search radius for tokens local tpTouchOffset = Vector3.new(0, 2.0, 0) -- OP presets (very large values — use with caution) local PRESETS = { ["OP"] = { walkMultiplier = 12.5, -- e.g. 16 * 12.5 = 200 jumpMultiplier = 6.25, -- e.g. 50 * 6.25 = 312 tpInterval = 0.002, tpDwell = 0.001, tpSearchRadius = 9999, tpTouchOffset = Vector3.new(0, 0.5, 0), }, ["ULTRA"] = { walkMultiplier = 25.0, -- absurd values (use at your own risk) jumpMultiplier = 10.0, tpInterval = 0.0005, tpDwell = 0.0005, tpSearchRadius = 20000, tpTouchOffset = Vector3.new(0, 0.2, 0), }, ["VANILLA"] = { walkMultiplier = 1.0, jumpMultiplier = 1.0, tpInterval = 0.015, tpDwell = 0.010, tpSearchRadius = 1200, tpTouchOffset = Vector3.new(0, 2.0, 0), } } -- internal state local customOn = false local opModeOn = false -- keep existing defaults capture (your script already had these) captureDefaults() -- ensure defaultWalk/defaultJump exist -- Apply current multipliers to humanoid if toggles active local function applyMovementMultipliers() local h = hum() if not h then return end -- apply multipliers based on captured defaults local baseWalk = defaultWalk or h.WalkSpeed or 16 local baseJump = defaultJump or h.JumpPower or 50 -- if Walk toggle is on, set to modified value; otherwise preserve current / default if wsOn then h.WalkSpeed = math.clamp(baseWalk * walkMultiplier, 0, 10000) end if jpOn then h.JumpPower = math.clamp(baseJump * jumpMultiplier, 0, 10000) end end -- expose TP variables to the existing TP collect loop by replacing constants with these variables. -- we replace the names used in nearestToken / TP loop by using these variables in those functions. -- (below we rewire nearestToken and the TP loop to reference local variables instead of the previous constants) -- rewrite nearestToken to use tpSearchRadius local function nearestToken_OP(touchPart) local root = workspace:FindFirstChild("Tokens") if not (root and touchPart) then return nil end local best, bestDist for _, c in ipairs(root:GetChildren()) do for _, d in ipairs(c:IsA("BasePart") and {c} or c:GetDescendants()) do if d:IsA("BasePart") then local dist = (d.Position - touchPart.Position).Magnitude if dist <= tpSearchRadius and (not bestDist or dist < bestDist) then best, bestDist = d, dist end end end end return best end -- replace the TP collect worker to use the runtime variables; preserves original toggle behavior -- We'll keep tpEnabled/tpLoopRunning variables from original script -- Hook into existing TPCollectBtn behavior by changing the loop's inner function (if tpEnabled). -- To avoid duplicating logic, we will override the earlier TP worker by redefining the relevant loop function. -- (If your original loop is already started, toggling TPCollectBtn will start/stop as before; new loop uses the new variables.) -- Monkey-patch the existing TPCollectBtn click to ensure the loop uses our variables. -- Note: this assumes TPCollectBtn and variables exist (they do in your original script). do -- keep original variables in case they exist tpEnabled = tpEnabled or false tpLoopRunning = tpLoopRunning or false -- disconnect existing connection if any, then reconnect using our OP-aware loop TPCollectBtn.MouseButton1Click:Connect(function() tpEnabled = not tpEnabled TPCollectBtn.Text = tpEnabled and "TP Collect (Tokens): ON" or "TP Collect (Tokens): OFF" TPCollectBtn.BackgroundColor3 = tpEnabled and Color3.fromRGB(60,95,60) or Color3.fromRGB(42,42,42) if tpEnabled and not tpLoopRunning then tpLoopRunning = true task.spawn(function() while tpEnabled do local hrp = HRP() local token = hrp and nearestToken_OP(hrp) if hrp and token then local old = hrp.CFrame pcall(function() hrp.CFrame = CFrame.new(token.Position + tpTouchOffset) end) task.wait(tpDwell) pcall(function() hrp.CFrame = old end) end task.wait(tpInterval) end tpLoopRunning = false end) end end) end -- OP Toggle button & presets (UI) local OPBtn = makeBtn(96, "OP Mode: OFF") local PresetOP = makeBtn(128, "Preset: OP") local PresetUltra = makeBtn(160, "Preset: ULTRA") local PresetVanilla = makeBtn(192, "Preset: VANILLA (reset)") OPBtn.MouseButton1Click:Connect(function() opModeOn = not opModeOn OPBtn.Text = opModeOn and "OP Mode: ON" or "OP Mode: OFF" OPBtn.BackgroundColor3 = opModeOn and Color3.fromRGB(220,80,80) or Color3.fromRGB(42,42,42) -- when toggled on, apply the currently configured multipliers immediately if opModeOn then applyMovementMultipliers() end end) PresetOP.MouseButton1Click:Connect(function() local p = PRESETS["OP"] if p then walkMultiplier = p.walkMultiplier jumpMultiplier = p.jumpMultiplier tpInterval = p.tpInterval tpDwell = p.tpDwell tpSearchRadius = p.tpSearchRadius tpTouchOffset = p.tpTouchOffset -- apply now applyMovementMultipliers() end end) PresetUltra.MouseButton1Click:Connect(function() local p = PRESETS["ULTRA"] if p then walkMultiplier = p.walkMultiplier jumpMultiplier = p.jumpMultiplier tpInterval = p.tpInterval tpDwell = p.tpDwell tpSearchRadius = p.tpSearchRadius tpTouchOffset = p.tpTouchOffset applyMovementMultipliers() end end) PresetVanilla.MouseButton1Click:Connect(function() local p = PRESETS["VANILLA"] if p then walkMultiplier = p.walkMultiplier jumpMultiplier = p.jumpMultiplier tpInterval = p.tpInterval tpDwell = p.tpDwell tpSearchRadius = p.tpSearchRadius tpTouchOffset = p.tpTouchOffset applyMovementMultipliers() end end) -- Custom numeric fields (simple TextBoxes) local function makeLabelAndBox(y, labelText, initialValue, onChanged) local lbl = Instance.new("TextLabel", MainTab) lbl.BackgroundTransparency = 1 lbl.Position = UDim2.new(0, 0, 0, y) lbl.Size = UDim2.new(0.5, -6, 0, 20) lbl.Font = Enum.Font.SourceSans lbl.TextSize = 14 lbl.TextXAlignment = Enum.TextXAlignment.Left lbl.TextColor3 = Color3.fromRGB(235,235,235) lbl.Text = labelText local box = Instance.new("TextBox", MainTab) box.BackgroundColor3 = Color3.fromRGB(35,35,35) box.BackgroundTransparency = 0 box.Position = UDim2.new(0.5, 6, 0, y) box.Size = UDim2.new(0.5, -6, 0, 20) box.ClearTextOnFocus = false box.Font = Enum.Font.SourceSans box.TextSize = 14 box.TextColor3 = Color3.fromRGB(235,235,235) box.Text = tostring(initialValue) box.FocusLost:Connect(function(enter) local val = tonumber(box.Text) if val then onChanged(val) -- reformat textbox box.Text = tostring(val) -- apply movement if relevant applyMovementMultipliers() else -- restore displayed value if invalid input box.Text = tostring(initialValue) end end) return lbl, box end -- layout y positions (to fit under the preset buttons) local yBase = 224 local lblWalk, boxWalk = makeLabelAndBox(yBase + 0, "Walk Mult (x):", walkMultiplier, function(v) walkMultiplier = v end) local lblJump, boxJump = makeLabelAndBox(yBase + 24, "Jump Mult (x):", jumpMultiplier, function(v) jumpMultiplier = v end) local lblTPInt, boxTPInt = makeLabelAndBox(yBase + 48, "TP Interval (s):", tpInterval, function(v) tpInterval = math.max(0.0001, v) end) local lblTPRange, boxTPRange = makeLabelAndBox(yBase + 72, "TP Range:", tpSearchRadius, function(v) tpSearchRadius = math.max(0, v) end) -- ensure movement is reapplied when the player respawns / toggles walk/jump Player.CharacterAdded:Connect(function() repeat task.wait() until hum() captureDefaults() if wsOn then -- if Walk toggle is on use multiplier hum().WalkSpeed = (defaultWalk or 16) * walkMultiplier end if jpOn then hum().JumpPower = (defaultJump or 50) * jumpMultiplier end end) -- Also watch for runtime changes to multipliers, reapplying if toggles are enabled -- (this keeps UI responsive without forcing user to toggle on/off) local lastWalkMult, lastJumpMult = walkMultiplier, jumpMultiplier task.spawn(function() while true do if wsOn and (lastWalkMult ~= walkMultiplier) and hum() then hum().WalkSpeed = (defaultWalk or hum().WalkSpeed or 16) * walkMultiplier lastWalkMult = walkMultiplier end if jpOn and (lastJumpMult ~= jumpMultiplier) and hum() then hum().JumpPower = (defaultJump or hum().JumpPower or 50) * jumpMultiplier lastJumpMult = jumpMultiplier end task.wait(0.2) end end) -- end OP MODE controls --------------------------------------------------------------------