Speed Adjuster
Key RequiredUniversal

Speed Adjuster

Universal ScriptMeohMeoh 683 views 11.9K executesUpdated Oct 4, 2026
5.0/ 5(2 votes)
20100% Positive
Lua Script•185 lines (6610 chars)
local UserInputService = game:GetService("UserInputService")
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local StarterGui = game:GetService("StarterGui")

local player = Players.LocalPlayer
local targetSpeed = 16
local isScriptActive = true
local isFirstOpen = true -- "Speed: ?" yazısını kontrol etmek için

-- [1] BİLDİRİM GÖNDERME
pcall(function()
    StarterGui:SetCore("SendNotification", {
        Title = "SPEED ADJUSTER",
        Text = 'Enter the value "0" to close the panel.',
        Duration = 2.5
    })
end)

-- [2] GUI OLUŞTURMA (Oyun içi Anti-GUI tespitini engellemek için CoreGui'ye saklanır)
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "SafeSpeedAdjuster"
screenGui.ResetOnSpawn = false

local success, coreGui = pcall(function() return game:GetService("CoreGui") end)
screenGui.Parent = (success and coreGui) and coreGui or player:WaitForChild("PlayerGui")

local speedLabel = Instance.new("TextLabel")
speedLabel.Size = UDim2.new(0, 0, 0, 30)
speedLabel.AutomaticSize = Enum.AutomaticSize.X -- Sayıya göre sağa/sola otomatik uzama
speedLabel.Position = UDim2.new(0, 20, 0, 20)
speedLabel.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
speedLabel.BackgroundTransparency = 0.4 -- %60 Opaklık
speedLabel.TextColor3 = Color3.fromRGB(0, 255, 0)
speedLabel.TextSize = 16
speedLabel.Font = Enum.Font.SourceSansBold
speedLabel.Text = "Speed: ?"
speedLabel.Active = true
speedLabel.ClipsDescendants = true
speedLabel.Parent = screenGui

-- Yazının kenarlara yapışmaması için boşluk ayarlayıcı
local padding = Instance.new("UIPadding")
padding.PaddingLeft = UDim.new(0, 10)
padding.PaddingRight = UDim.new(0, 10)
padding.Parent = speedLabel

local speedBox = Instance.new("TextBox")
speedBox.Size = UDim2.new(0, 0, 0, 0)
speedBox.BackgroundTransparency = 1
speedBox.Text = ""
speedBox.TextColor3 = Color3.fromRGB(255, 255, 255)
speedBox.TextTransparency = 1
speedBox.ClearTextOnFocus = true
speedBox.Parent = speedLabel

-- [3] KUSURSUZ SÜRÜKLEME MEKANİZMASI
local dragging, dragInput, dragStart, startPos
local isJustClick = false -- Sürükleme mi tıklama mı olduğunu ayırt etmek için

speedLabel.InputBegan:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
        dragging = true
        isJustClick = true
        dragStart = input.Position
        startPos = speedLabel.Position

        input.Changed:Connect(function()
            if input.UserInputState == Enum.UserInputState.End then
                dragging = false
                if isJustClick then
                    isFirstOpen = false
                    speedBox:CaptureFocus()
                end
            end
        end)
    end
end)

speedLabel.InputChanged:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
        dragInput = input
    end
end)

UserInputService.InputChanged:Connect(function(input)
    if input == dragInput and dragging then
        if (input.Position - dragStart).Magnitude > 5 then
            isJustClick = false -- Eğer 5 pikselden fazla kaydırılırsa tıklama iptal, sürükleme sayılır
        end
        local delta = input.Position - dragStart
        speedLabel.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
    end
end)

-- [4] SAYI GİRİŞİ VE KAPATMA (0) MEKANİZMASI
speedBox:GetPropertyChangedSignal("Text"):Connect(function()
    if speedBox:IsFocused() then
        speedLabel.Text = speedBox.Text
    end
end)

speedBox.FocusLost:Connect(function(enterPressed)
    local newSpeed = tonumber(speedBox.Text)
    
    if newSpeed then
        if newSpeed == 0 then
            -- 0 yazıldıysa her şeyi kapat ve hızı normale döndür
            isScriptActive = false
            targetSpeed = 16
            if player.Character and player.Character:FindFirstChildOfClass("Humanoid") then
                player.Character:FindFirstChildOfClass("Humanoid").WalkSpeed = 16
            end
            screenGui:Destroy()
            return
        else
            targetSpeed = newSpeed
        end
    end
    
    if isScriptActive then
        speedBox.Text = ""
        speedLabel.Text = tostring(math.floor(targetSpeed))
    end
end)

-- [5] GELİŞMİŞ VE ÇÖKMEYEN ANTI-CHEAT BYPASS
if hookmetamethod and checkcaller then
    local oldIndex, oldNewIndex, oldNameCall
    
    oldIndex = hookmetamethod(game, "__index", function(t, k)
        -- Çökme (Stack Overflow) engellendi: Önce string (k) kontrol ediliyor!
        if not checkcaller() and k == "WalkSpeed" then
            if typeof(t) == "Instance" and t:IsA("Humanoid") then
                return 16 -- Oyun okumaya çalışırsa 16 döner
            end
        end
        return oldIndex(t, k)
    end)

    oldNewIndex = hookmetamethod(game, "__newindex", function(t, k, v)
        if not checkcaller() and k == "WalkSpeed" then
            if typeof(t) == "Instance" and t:IsA("Humanoid") then
                return -- Oyun hızı değiştirmeye çalışırsa yoksay (Reddet)
            end
        end
        return oldNewIndex(t, k, v)
    end)

    oldNameCall = hookmetamethod(game, "__namecall", function(t, ...)
        local method = getnamecallmethod()
        local args = {...}
        
        -- Anti-hile, hızın ne zaman değiştiğini takip eden bir sinyal (GetPropertyChangedSignal) kurmak isterse sahte bir event gönder.
        if not checkcaller() and method == "GetPropertyChangedSignal" and args[1] == "WalkSpeed" then
            if typeof(t) == "Instance" and t:IsA("Humanoid") then
                return Instance.new("BindableEvent").Event
            end
        end
        return oldNameCall(t, ...)
    end)
end

-- [6] SIFIR KASAN HIZ DÖNGÜSÜ (RunService)
local speedLoop
speedLoop = RunService.Heartbeat:Connect(function()
    if not isScriptActive then
        speedLoop:Disconnect() -- Script kapandıysa döngüyü tamamen yok et
        return
    end

    local character = player.Character
    if character then
        local humanoid = character:FindFirstChildOfClass("Humanoid")
        if humanoid then
            if humanoid.WalkSpeed ~= targetSpeed then
                humanoid.WalkSpeed = targetSpeed
            end
            -- Textbox'a yazı yazılmıyorsa ve panel ilk halinde değilse hızı güncelle
            if not speedBox:IsFocused() and not isFirstOpen then
                speedLabel.Text = tostring(math.floor(humanoid.WalkSpeed))
            end
        end
    end
end)

Features & Information

To adjust the speed (for short work) Enter "0" to close

Community Comments (3)

voltexvoltexOct 11, 2026

Not very creative, and this can be detected very easily by games. Use at your own risk!

Replying to @voltex
MeohMeohOct 11, 2026

@voltex Thanks for the heads up. For games with high anti-cheat Protection I didn't. I don't know if you would use it in a high-protection game anyway?

Replying to @Meoh
voltexvoltexOct 11, 2026

@Meoh The typical user couldn't tell if a game was "high-protection" or not

More Scripts for Universal Scripts