Home All Scripts Trending Forum Upload Script Login with Google
Wacky Bats Script | Zika Hub Wacky Bats script keyless Auto spam 🔓 Keyless

Wacky Bats Script | Zika Hub Wacky Bats script keyless Auto spam

24 views  •  3 weeks ago
24 views 3 weeks ago #WackyBats

Looking for a reliable Wacky Bats script that actually works? This one covers the basics well — Auto Spam and Infinite jump are included along with a few other useful options. It is keyless.

What This Script Can Do

  • Auto Spam: Gives you access to Auto Spam in Wacky Bats, which can make a real difference during longer play sessions.
  • Infinite jump: Lets you jump multiple times in the air, which is especially helpful for reaching high platforms or skipping obby sections.
  • Speed Hack: Boosts your character’s movement speed so you can get around Wacky Bats’s map much faster than normal.
  • Auto Follow: Gives you access to Auto Follow in Wacky Bats, which can make a real difference during longer play sessions.
  • Access: No key system or Linkvertise redirect needed — just paste and run.
  • Executor Compatibility: Works great on Delta, Codex, Hydrogen, Wave, and most mobile and PC executors.

How to Use This Script

  1. Start Roblox and join a Wacky Bats server — any public server works fine.
  2. Wait until you’re fully loaded into the game world before running any script.
  3. Open your executor app (Delta, Codex, Hydrogen, Wave, or any compatible one) and go to the script tab.
  4. Copy the loadstring code shown on this page and paste it into your executor’s script box, then press Execute.
  5. A GUI or confirmation should appear in-game — use it to turn on the features you want and adjust any settings.
Compatible Executors: Codex, Delta, Hydro, Potassium, Volt, Wave, Xeno
Script Code
local Rayfield = loadstring(game:HttpGet('https://sirius.menu/rayfield'))()

local Window = Rayfield:CreateWindow({
    Name = "Zika Hub | Use Starstruck Bat",
    LoadingTitle = "Zika Hub",
    LoadingSubtitle = "beta script",
    ConfigurationSaving = {
        Enabled = true,
        FolderName = "ZikaHub",
        FileName = "StarstruckConfig"
    },
    Discord = {
        Enabled = false,
    },
    KeySystem = false,
})

local Roles = {
    Owner = {"RiPNdIPMaKSiM"},
    Dev   = {"MieHideyoshi"},
    Admin = {"Achronath"},
}

local AdminList = {}
for role, users in pairs(Roles) do
    for _, name in ipairs(users) do
        AdminList[name:lower()] = role
    end
end

local function getPlayerRole(player)
    return AdminList[player.Name:lower()]
end

local function isStaff(player)
    return AdminList[player.Name:lower()] ~= nil
end

local function serverHop()
    Rayfield:Notify({
        Title = "Zika Hub",
        Content = "Staff detected! Server hopping...",
        Duration = 4,
        Image = 4483362458,
    })
    task.wait(2)
    local TeleportService = game:GetService("TeleportService")
    local placeId = game.PlaceId
    pcall(function()
        local HttpService = game:GetService("HttpService")
        local url = "https://games.roblox.com/v1/games/" .. placeId .. "/servers/Public?sortOrder=Asc&limit=100"
        local response = HttpService:JSONDecode(game:HttpGet(url))
        local currentJobId = game.JobId
        for _, server in ipairs(response.data) do
            if server.id ~= currentJobId and server.playing < server.maxPlayers then
                TeleportService:TeleportToPlaceInstance(placeId, server.id)
                return
            end
        end
    end)
end

local function checkForAdmins()
    for _, player in ipairs(game:GetService("Players"):GetPlayers()) do
        if isStaff(player) and player ~= game:GetService("Players").LocalPlayer then
            local role = getPlayerRole(player)
            Rayfield:Notify({
                Title = "Staff Detected",
                Content = "[" .. role .. "] " .. player.Name .. " is in the server!",
                Duration = 4,
                Image = 4483362458,
            })
            serverHop()
            return true
        end
    end
    return false
end

game:GetService("Players").PlayerAdded:Connect(function(player)
    task.wait(1)
    if isStaff(player) then
        local role = getPlayerRole(player)
        Rayfield:Notify({
            Title = "Staff Joined",
            Content = "[" .. role .. "] " .. player.Name .. " just joined!",
            Duration = 4,
            Image = 4483362458,
        })
        serverHop()
    end
end)

task.spawn(function()
    while true do
        task.wait(5)
        checkForAdmins()
    end
end)

local starstruckPath = nil

local function findStarstruckBat()
    local Players = game:GetService("Players")
    local LocalPlayer = Players.LocalPlayer
    local character = LocalPlayer.Character
    if character then
        local bat = character:FindFirstChild("Starstruck", true)
        if bat then return bat end
    end
    local bat = workspace:FindFirstChild("Starstruck", true)
    if bat then return bat end
    return nil
end

local function checkStarstruckBat()
    local bat = findStarstruckBat()
    if bat then
        starstruckPath = bat
        Rayfield:Notify({
            Title = "Zika Hub",
            Content = "Starstruck Bat found at: " .. bat:GetFullName(),
            Duration = 6,
            Image = 4483362458,
        })
        return true
    else
        Rayfield:Notify({
            Title = "Zika Hub",
            Content = "Starstruck Bat not found. Equip it first.",
            Duration = 6,
            Image = 4483362458,
        })
        return false
    end
end

workspace.DescendantAdded:Connect(function(obj)
    if obj.Name == "Starstruck" and starstruckPath == nil then
        starstruckPath = obj
        Rayfield:Notify({
            Title = "Zika Hub",
            Content = "Starstruck Bat detected: " .. obj:GetFullName(),
            Duration = 4,
            Image = 4483362458,
        })
    end
end)

workspace.DescendantRemoving:Connect(function(obj)
    if obj.Name == "Starstruck" and starstruckPath == obj then
        starstruckPath = nil
    end
end)

local isSpamming = false
local connection = nil

local function fireStarstruck()
    local bat = starstruckPath or findStarstruckBat()
    if not bat then return end
    local args = { [1] = bat, n = 1 }
    local remote = game:GetService("ReplicatedStorage"):FindFirstChild("BatRemotes")
        and game:GetService("ReplicatedStorage").BatRemotes:FindFirstChild("Starstruck")
    if remote then
        remote:FireServer(unpack(args, 1, args.n or #args))
    end
end

local function startSpam()
    if connection then return end
    connection = game:GetService("RunService").Heartbeat:Connect(function()
        if isSpamming then fireStarstruck() end
    end)
end

local function stopSpam()
    if connection then
        connection:Disconnect()
        connection = nil
    end
end

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local LocalPlayer = Players.LocalPlayer

local infiniteJumpEnabled = false

local function enableInfiniteJump()
    local UIS = game:GetService("UserInputService")
    UIS.JumpRequest:Connect(function()
        if infiniteJumpEnabled then
            local char = LocalPlayer.Character
            if char then
                local hrp = char:FindFirstChild("HumanoidRootPart")
                local hum = char:FindFirstChildOfClass("Humanoid")
                if hrp and hum and hum:GetState() ~= Enum.HumanoidStateType.Jumping then
                    hum:ChangeState(Enum.HumanoidStateType.Jumping)
                end
            end
        end
    end)
end

enableInfiniteJump()

local loopSpeedEnabled = false
local loopSpeedValue = 16
local loopSpeedConn = nil

local function applySpeed(speed)
    local char = LocalPlayer.Character
    if not char then return end
    local hum = char:FindFirstChildOfClass("Humanoid")
    if hum then
        hum.WalkSpeed = math.clamp(speed, 0, 500)
    end
end

local function startLoopSpeed()
    if loopSpeedConn then return end
    loopSpeedConn = RunService.Heartbeat:Connect(function()
        if loopSpeedEnabled then
            applySpeed(loopSpeedValue)
        end
    end)
end

local function stopLoopSpeed()
    if loopSpeedConn then
        loopSpeedConn:Disconnect()
        loopSpeedConn = nil
    end
    applySpeed(16)
end

local followTarget = nil
local followEnabled = false
local followDistance = 5
local followConn = nil

local function startFollow()
    if followConn then followConn:Disconnect() followConn = nil end
    followConn = RunService.Heartbeat:Connect(function()
        if not followEnabled or not followTarget then return end
        local targetChar = followTarget.Character
        local selfChar = LocalPlayer.Character
        if not targetChar or not selfChar then return end
        local targetRoot = targetChar:FindFirstChild("HumanoidRootPart")
        local selfRoot = selfChar:FindFirstChild("HumanoidRootPart")
        local selfHum = selfChar:FindFirstChildOfClass("Humanoid")
        if not targetRoot or not selfRoot or not selfHum then return end
        local dist = (targetRoot.Position - selfRoot.Position).Magnitude
        if dist > followDistance then
            selfHum:MoveTo(targetRoot.Position)
        end
    end)
end

local function stopFollow()
    if followConn then
        followConn:Disconnect()
        followConn = nil
    end
    local selfChar = LocalPlayer.Character
    if selfChar then
        local selfHum = selfChar:FindFirstChildOfClass("Humanoid")
        local selfRoot = selfChar:FindFirstChild("HumanoidRootPart")
        if selfHum and selfRoot then
            selfHum:MoveTo(selfRoot.Position)
        end
    end
end

local antiVoidEnabled = false
local antiVoidPart = nil
local antiVoidConn = nil
local ANTI_VOID_Y = 30

function createAntiVoidPart()
    if antiVoidPart then return end
    antiVoidPart = Instance.new("Part")
    antiVoidPart.Name = "ZikaAntiVoid"
    antiVoidPart.Size = Vector3.new(4096, 4, 4096)
    antiVoidPart.Anchored = true
    antiVoidPart.CanCollide = true
    antiVoidPart.Transparency = 1
    antiVoidPart.Material = Enum.Material.SmoothPlastic
    antiVoidPart.CastShadow = false
    antiVoidPart.Position = Vector3.new(0, ANTI_VOID_Y - 2, 0)
    antiVoidPart.Parent = workspace
end

function destroyAntiVoidPart()
    if antiVoidPart then
        antiVoidPart:Destroy()
        antiVoidPart = nil
    end
end

local function startAntiVoid()
    createAntiVoidPart()
    antiVoidConn = RunService.Heartbeat:Connect(function()
        if not antiVoidEnabled then return end
        local char = LocalPlayer.Character
        if not char then return end
        local hrp = char:FindFirstChild("HumanoidRootPart")
        local hum = char:FindFirstChildOfClass("Humanoid")
        if not hrp or not hum then return end
        if antiVoidPart then
            antiVoidPart.Position = Vector3.new(hrp.Position.X, ANTI_VOID_Y - 2, hrp.Position.Z)
        end
        if hrp.Position.Y < ANTI_VOID_Y then
            hrp.CFrame = CFrame.new(hrp.Position.X, ANTI_VOID_Y + 2, hrp.Position.Z)
            hrp.AssemblyLinearVelocity = Vector3.new(
                hrp.AssemblyLinearVelocity.X,
                0,
                hrp.AssemblyLinearVelocity.Z
            )
        end
    end)
end

local function stopAntiVoid()
    if antiVoidConn then
        antiVoidConn:Disconnect()
        antiVoidConn = nil
    end
    destroyAntiVoidPart()
end

local camera = workspace.CurrentCamera
local espEnabled = false
local espColor = Color3.fromRGB(255, 50, 50)
local espObjects = {}
local espUpdateConn = nil

local function removeESPFromPlayer(player)
    if espObjects[player] then
        for _, obj in pairs(espObjects[player]) do
            if typeof(obj) == "Instance" and obj and obj.Parent then
                obj:Destroy()
            elseif typeof(obj) == "userdata" then
                pcall(function() obj:Remove() end)
            end
        end
        espObjects[player] = nil
    end
end

local function applyHighlightToChar(player, char)
    if not char then return end
    if not espObjects[player] then espObjects[player] = {} end
    local highlight = Instance.new("Highlight")
    highlight.Name = "ZikaHighlight"
    highlight.Adornee = char
    highlight.FillColor = espColor
    highlight.OutlineColor = Color3.fromRGB(255, 255, 255)
    highlight.FillTransparency = 0.5
    highlight.OutlineTransparency = 0
    highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
    highlight.Parent = char
    table.insert(espObjects[player], highlight)
end

local function applyLineToPlayer(player)
    if not espObjects[player] then espObjects[player] = {} end
    local line = Drawing.new("Line")
    line.Visible = false
    line.Thickness = 1.5
    line.Color = espColor
    line.Transparency = 1
    table.insert(espObjects[player], line)
end

local function applyNameTagToPlayer(player)
    if not espObjects[player] then espObjects[player] = {} end
    local nameTag = Drawing.new("Text")
    nameTag.Visible = false
    nameTag.Text = player.Name
    nameTag.Size = 14
    nameTag.Center = true
    nameTag.Outline = true
    nameTag.OutlineColor = Color3.fromRGB(0, 0, 0)
    nameTag.Color = Color3.fromRGB(255, 255, 255)
    nameTag.Font = Drawing.Fonts.UI
    table.insert(espObjects[player], nameTag)
end

local function setupESPForPlayer(player)
    if player == LocalPlayer then return end
    removeESPFromPlayer(player)
    local char = player.Character
    if char then
        applyHighlightToChar(player, char)
    end
    applyLineToPlayer(player)
    applyNameTagToPlayer(player)
    player.CharacterAdded:Connect(function(newChar)
        task.wait(0.5)
        if espEnabled then
            removeESPFromPlayer(player)
            applyHighlightToChar(player, newChar)
            applyLineToPlayer(player)
            applyNameTagToPlayer(player)
        end
    end)
end

local function startESP()
    for _, player in ipairs(Players:GetPlayers()) do
        setupESPForPlayer(player)
    end
    espUpdateConn = RunService.RenderStepped:Connect(function()
        if not espEnabled then return end
        local selfChar = LocalPlayer.Character
        local selfRoot = selfChar and selfChar:FindFirstChild("HumanoidRootPart")
        local viewportSize = camera.ViewportSize
        local screenBottom = Vector2.new(viewportSize.X / 2, viewportSize.Y)
        for _, player in ipairs(Players:GetPlayers()) do
            if player == LocalPlayer then continue end
            if not espObjects[player] then continue end
            local targetChar = player.Character
            local targetRoot = targetChar and targetChar:FindFirstChild("HumanoidRootPart")
            local line = nil
            local nameTag = nil
            local highlight = nil
            for _, obj in ipairs(espObjects[player]) do
                if not obj then continue end
                if typeof(obj) == "Instance" and obj:IsA("Highlight") then
                    highlight = obj
                elseif typeof(obj) == "userdata" then
                    local ok, isText = pcall(function() return obj.Text ~= nil end)
                    if ok and isText then
                        nameTag = obj
                    else
                        line = obj
                    end
                end
            end
            if highlight then
                highlight.FillColor = espColor
            end
            if targetRoot and selfRoot then
                local headPos = targetRoot.Position + Vector3.new(0, 3, 0)
                local screenPos, onScreen = camera:WorldToViewportPoint(headPos)
                if line then
                    if onScreen and screenPos.Z > 0 then
                        line.Visible = true
                        line.Color = espColor
                        line.From = screenBottom
                        line.To = Vector2.new(screenPos.X, screenPos.Y)
                    else
                        line.Visible = false
                    end
                end
                if nameTag then
                    if onScreen and screenPos.Z > 0 then
                        local dist = math.floor((targetRoot.Position - selfRoot.Position).Magnitude)
                        nameTag.Visible = true
                        nameTag.Text = player.Name .. " [" .. dist .. "m]"
                        nameTag.Color = espColor
                        nameTag.Position = Vector2.new(screenPos.X, screenPos.Y - 18)
                    else
                        nameTag.Visible = false
                    end
                end
            else
                if line then line.Visible = false end
                if nameTag then nameTag.Visible = false end
            end
        end
    end)
end

local function stopESP()
    if espUpdateConn then
        espUpdateConn:Disconnect()
        espUpdateConn = nil
    end
    for _, player in ipairs(Players:GetPlayers()) do
        removeESPFromPlayer(player)
    end
    espObjects = {}
end

LocalPlayer.CharacterAdded:Connect(function(newChar)
    local hum = newChar:WaitForChild("Humanoid", 5)
    if hum and loopSpeedEnabled then
        hum.WalkSpeed = math.clamp(loopSpeedValue, 0, 500)
    end
    if antiVoidEnabled then
        task.wait(0.5)
        destroyAntiVoidPart()
        createAntiVoidPart()
    end
    if espEnabled then
        task.wait(0.5)
        for _, player in ipairs(Players:GetPlayers()) do
            if player ~= LocalPlayer then
                removeESPFromPlayer(player)
                setupESPForPlayer(player)
            end
        end
    end
end)

local playerListGui = Instance.new("ScreenGui")
playerListGui.Name = "ZikaFollowList"
playerListGui.ResetOnSpawn = false
playerListGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
playerListGui.Parent = game:GetService("CoreGui")

local listFrame = Instance.new("Frame")
listFrame.Name = "ListFrame"
listFrame.Size = UDim2.new(0, 230, 0, 320)
listFrame.Position = UDim2.new(0, 10, 0.5, -160)
listFrame.BackgroundColor3 = Color3.fromRGB(18, 12, 28)
listFrame.BorderSizePixel = 0
listFrame.Visible = false
listFrame.Parent = playerListGui

local listCorner = Instance.new("UICorner")
listCorner.CornerRadius = UDim.new(0, 10)
listCorner.Parent = listFrame

local listStroke = Instance.new("UIStroke")
listStroke.Color = Color3.fromRGB(120, 60, 200)
listStroke.Thickness = 1.5
listStroke.Parent = listFrame

local listTitle = Instance.new("TextLabel")
listTitle.Size = UDim2.new(1, 0, 0, 32)
listTitle.BackgroundColor3 = Color3.fromRGB(90, 40, 160)
listTitle.BorderSizePixel = 0
listTitle.Text = "   Select Follow Target"
listTitle.TextColor3 = Color3.new(1, 1, 1)
listTitle.TextSize = 13
listTitle.Font = Enum.Font.GothamBold
listTitle.TextXAlignment = Enum.TextXAlignment.Left
listTitle.Parent = listFrame

local titleCorner = Instance.new("UICorner")
titleCorner.CornerRadius = UDim.new(0, 10)
titleCorner.Parent = listTitle

local titleFix = Instance.new("Frame")
titleFix.Size = UDim2.new(1, 0, 0.5, 0)
titleFix.Position = UDim2.new(0, 0, 0.5, 0)
titleFix.BackgroundColor3 = Color3.fromRGB(90, 40, 160)
titleFix.BorderSizePixel = 0
titleFix.Parent = listTitle

local closeBtn = Instance.new("TextButton")
closeBtn.Size = UDim2.new(0, 28, 0, 28)
closeBtn.Position = UDim2.new(1, -32, 0, 2)
closeBtn.BackgroundTransparency = 1
closeBtn.Text = "✕"
closeBtn.TextColor3 = Color3.new(1, 1, 1)
closeBtn.TextSize = 14
closeBtn.Font = Enum.Font.GothamBold
closeBtn.ZIndex = 5
closeBtn.Parent = listFrame
closeBtn.MouseButton1Click:Connect(function()
    listFrame.Visible = false
end)

local scrollFrame = Instance.new("ScrollingFrame")
scrollFrame.Size = UDim2.new(1, -8, 1, -40)
scrollFrame.Position = UDim2.new(0, 4, 0, 36)
scrollFrame.BackgroundTransparency = 1
scrollFrame.BorderSizePixel = 0
scrollFrame.ScrollBarThickness = 3
scrollFrame.ScrollBarImageColor3 = Color3.fromRGB(120, 60, 200)
scrollFrame.Parent = listFrame

local listLayout = Instance.new("UIListLayout")
listLayout.Padding = UDim.new(0, 4)
listLayout.Parent = scrollFrame

local function getAvatarThumb(userId)
    local success, result = pcall(function()
        return Players:GetUserThumbnailAsync(userId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size48x48)
    end)
    return success and result or "rbxassetid://0"
end

local function clearList()
    for _, c in ipairs(scrollFrame:GetChildren()) do
        if c:IsA("Frame") then c:Destroy() end
    end
end

local function buildPlayerList()
    clearList()
    local playerList = Players:GetPlayers()
    local count = 0
    for _, player in ipairs(playerList) do
        if player == LocalPlayer then continue end
        count = count + 1
        local row = Instance.new("Frame")
        row.Size = UDim2.new(1, -4, 0, 48)
        row.BackgroundColor3 = Color3.fromRGB(30, 18, 48)
        row.BorderSizePixel = 0
        row.Parent = scrollFrame
        local rowCorner = Instance.new("UICorner")
        rowCorner.CornerRadius = UDim.new(0, 7)
        rowCorner.Parent = row
        local avatar = Instance.new("ImageLabel")
        avatar.Size = UDim2.new(0, 38, 0, 38)
        avatar.Position = UDim2.new(0, 5, 0.5, -19)
        avatar.BackgroundColor3 = Color3.fromRGB(50, 30, 80)
        avatar.BorderSizePixel = 0
        avatar.Image = getAvatarThumb(player.UserId)
        avatar.Parent = row
        local avatarCorner = Instance.new("UICorner")
        avatarCorner.CornerRadius = UDim.new(0, 5)
        avatarCorner.Parent = avatar
        local nameLabel = Instance.new("TextLabel")
        nameLabel.Size = UDim2.new(1, -60, 0, 20)
        nameLabel.Position = UDim2.new(0, 50, 0, 7)
        nameLabel.BackgroundTransparency = 1
        nameLabel.Text = player.Name
        nameLabel.TextColor3 = Color3.new(1, 1, 1)
        nameLabel.TextSize = 12
        nameLabel.Font = Enum.Font.GothamBold
        nameLabel.TextXAlignment = Enum.TextXAlignment.Left
        nameLabel.TextTruncate = Enum.TextTruncate.AtEnd
        nameLabel.Parent = row
        local selectBtn = Instance.new("TextButton")
        selectBtn.Size = UDim2.new(1, -60, 0, 16)
        selectBtn.Position = UDim2.new(0, 50, 0, 27)
        selectBtn.BackgroundTransparency = 1
        selectBtn.Text = "Select"
        selectBtn.TextColor3 = Color3.fromRGB(160, 100, 255)
        selectBtn.TextSize = 11
        selectBtn.Font = Enum.Font.Gotham
        selectBtn.TextXAlignment = Enum.TextXAlignment.Left
        selectBtn.Parent = row
        local captured = player
        selectBtn.MouseButton1Click:Connect(function()
            followTarget = captured
            listFrame.Visible = false
            Rayfield:Notify({
                Title = "Auto Follow",
                Content = "Now targeting: " .. captured.Name,
                Duration = 3,
                Image = 4483362458,
            })
            if followEnabled then startFollow() end
        end)
        row.MouseEnter:Connect(function()
            row.BackgroundColor3 = Color3.fromRGB(55, 30, 90)
        end)
        row.MouseLeave:Connect(function()
            row.BackgroundColor3 = Color3.fromRGB(30, 18, 48)
        end)
    end
    scrollFrame.CanvasSize = UDim2.new(0, 0, 0, count * 52)
end

Players.PlayerAdded:Connect(function(player)
    if listFrame.Visible then buildPlayerList() end
    if espEnabled then
        player.CharacterAdded:Connect(function()
            task.wait(0.5)
            if espEnabled then setupESPForPlayer(player) end
        end)
    end
end)

Players.PlayerRemoving:Connect(function(p)
    removeESPFromPlayer(p)
    if p == followTarget then
        followTarget = nil
        followEnabled = false
        stopFollow()
        Rayfield:Notify({
            Title = "Auto Follow",
            Content = "Follow target left the server.",
            Duration = 4,
            Image = 4483362458,
        })
    end
    if listFrame.Visible then buildPlayerList() end
end)

local MainTab = Window:CreateTab("Bat Spam", 73344818906607)
local MovementTab = Window:CreateTab("Movement", 112970412232530)
local ESPTab = Window:CreateTab("ESP", 140545092050303)
local AntiAdminTab = Window:CreateTab("Anti Admin", 119988957645009)

MainTab:CreateToggle({
    Name = "Auto Spam",
    CurrentValue = false,
    Flag = "AutoSpamFlag",
    Callback = function(Value)
        isSpamming = Value
        if Value then
            startSpam()
            game:GetService("StarterGui"):SetCore("SendNotification", {
                Title = "Zika Hub",
                Text = "Use starstruck bat",
                Duration = 5,
            })
        else
            stopSpam()
        end
    end,
})

MainTab:CreateButton({
    Name = "Re-detect Starstruck Bat",
    Callback = function()
        checkStarstruckBat()
    end,
})

MovementTab:CreateToggle({
    Name = "Infinite Jump",
    CurrentValue = false,
    Flag = "InfiniteJumpFlag",
    Callback = function(Value)
        infiniteJumpEnabled = Value
    end,
})

MovementTab:CreateSlider({
    Name = "Walk Speed",
    Range = {0, 500},
    Increment = 1,
    Suffix = "sp",
    CurrentValue = 16,
    Flag = "WalkSpeedFlag",
    Callback = function(Value)
        loopSpeedValue = Value
        if not loopSpeedEnabled then
            applySpeed(Value)
        end
    end,
})

MovementTab:CreateToggle({
    Name = "Loop Speed",
    CurrentValue = false,
    Flag = "LoopSpeedFlag",
    Callback = function(Value)
        loopSpeedEnabled = Value
        if Value then
            startLoopSpeed()
            Rayfield:Notify({
                Title = "Loop Speed",
                Content = "Loop Speed enabled at " .. loopSpeedValue .. " sp.",
                Duration = 3,
                Image = 4483362458,
            })
        else
            stopLoopSpeed()
            Rayfield:Notify({
                Title = "Loop Speed",
                Content = "Loop Speed disabled. Speed reset to 16.",
                Duration = 3,
                Image = 4483362458,
            })
        end
    end,
})

MovementTab:CreateDivider()

MovementTab:CreateToggle({
    Name = "Auto Follow",
    CurrentValue = false,
    Flag = "AutoFollowFlag",
    Callback = function(Value)
        followEnabled = Value
        if Value then
            if not followTarget then
                buildPlayerList()
                listFrame.Visible = true
                Rayfield:Notify({
                    Title = "Auto Follow",
                    Content = "Select a player to follow from the list.",
                    Duration = 4,
                    Image = 4483362458,
                })
            else
                startFollow()
            end
        else
            stopFollow()
        end
    end,
})

MovementTab:CreateSlider({
    Name = "Follow Distance",
    Range = {1, 50},
    Increment = 1,
    Suffix = "st",
    CurrentValue = 5,
    Flag = "FollowDistFlag",
    Callback = function(Value)
        followDistance = Value
    end,
})

MovementTab:CreateButton({
    Name = "Select Follow Target",
    Callback = function()
        buildPlayerList()
        listFrame.Visible = true
    end,
})

MovementTab:CreateButton({
    Name = "Clear Follow Target",
    Callback = function()
        followTarget = nil
        stopFollow()
        Rayfield:Notify({
            Title = "Auto Follow",
            Content = "Follow target cleared.",
            Duration = 3,
            Image = 4483362458,
        })
    end,
})

MovementTab:CreateDivider()

MovementTab:CreateToggle({
    Name = "Anti Void",
    CurrentValue = false,
    Flag = "AntiVoidFlag",
    Callback = function(Value)
        antiVoidEnabled = Value
        if Value then
            startAntiVoid()
            Rayfield:Notify({
                Title = "Anti Void",
                Content = "Anti Void enabled.",
                Duration = 3,
                Image = 4483362458,
            })
        else
            stopAntiVoid()
            Rayfield:Notify({
                Title = "Anti Void",
                Content = "Anti Void disabled.",
                Duration = 3,
                Image = 4483362458,
            })
        end
    end,
})

MovementTab:CreateInput({
    Name = "Void Y Level",
    PlaceholderText = "Default: 30",
    RemoveTextAfterFocusLost = false,
    Flag = "AntiVoidYFlag",
    Callback = function(Value)
        local num = tonumber(Value)
        if num then
            ANTI_VOID_Y = num
            if antiVoidPart then
                antiVoidPart.Position = Vector3.new(antiVoidPart.Position.X, ANTI_VOID_Y - 2, antiVoidPart.Position.Z)
            end
        end
    end,
})

ESPTab:CreateToggle({
    Name = "ESP",
    CurrentValue = false,
    Flag = "ESPFlag",
    Callback = function(Value)
        espEnabled = Value
        if Value then
            startESP()
            Rayfield:Notify({
                Title = "ESP",
                Content = "ESP enabled.",
                Duration = 3,
                Image = 4483362458,
            })
        else
            stopESP()
            Rayfield:Notify({
                Title = "ESP",
                Content = "ESP disabled.",
                Duration = 3,
                Image = 4483362458,
            })
        end
    end,
})

ESPTab:CreateColorPicker({
    Name = "ESP Color",
    Color = Color3.fromRGB(255, 50, 50),
    Flag = "ESPColorFlag",
    Callback = function(Value)
        espColor = Value
    end,
})

AntiAdminTab:CreateLabel("Roles: Owner / Admin / Dev")
AntiAdminTab:CreateLabel("Auto-alerts and hops when staff joins!")

checkForAdmins()
checkStarstruckBat()
Rayfield:LoadConfiguration()
💬 Comments 0
You

No comments yet. Be the first!