Skip to content
RoRoScripts
velocity OPEN SOURCE preview
UnknownPatched

velocity OPEN SOURCE

Script
Views
16K
Likes
4
Dislikes
1
Added
Script
-- ==== Load Obsidian Library & Setup ====
local repo = "https://raw.githubusercontent.com/deividcomsono/Obsidian/main/"
local Library = loadstring(game:HttpGet(repo .. "Library.lua"))()
Library:SetDPIScale(85)
Library:SetWatermarkVisibility(true)

local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local Workspace = game:GetService("Workspace")
local LP = Players.LocalPlayer
local Camera = Workspace.CurrentCamera

-- Watermark FPS + Ping update
local FrameTimer = tick()
local FrameCounter = 0
local FPS = 60
local Stats = game:GetService("Stats")

RunService.RenderStepped:Connect(function()
    FrameCounter += 1
    if tick() - FrameTimer >= 1 then
        FPS = FrameCounter
        FrameTimer = tick()
        FrameCounter = 0
    end
    Library:SetWatermark(('Velocity Trial | %s fps | %s ms'):format(
        math.floor(FPS),
        math.floor(Stats.Network.ServerStatsItem['Data Ping']:GetValue())
    ))
end)

Library:Notify({ Title = "Success", Description = "Script Executed successfully", Time = 5 })

-- Load addons
local ThemeManager = loadstring(game:HttpGet(repo .. "addons/ThemeManager.lua"))()
local SaveManager = loadstring(game:HttpGet(repo .. "addons/SaveManager.lua"))()
local Options = Library.Options
local Toggles = Library.Toggles

-- Create Window
local Window = Library:CreateWindow({
    Title = "Velocity",
    Footer = "version: Version 1.0",
    Icon = 128828160470041,
    NotifySide = "Right",
    ShowCustomCursor = false,
})

-- Tabs
local Tabs = {
    Main = Window:AddTab("Main", "user"),
    Esp = Window:AddTab({Name = "Visuals", Description = "Visuals & Players & World Options", Icon = "eye"}),
    AutoFarm = Window:AddTab({Name = "AutoFarm", Description = "Automatically Farm", Icon = "axe"}),
 
}-- ==== Silent Aim Group ====
local SAGroup = Tabs.Main:AddLeftGroupbox("Silent Aim", "crosshair")
local SAFOV = 100
local FOVColor = Color3.fromRGB(255,255,255)
local SAFOVFilled = true
local SAFOVOutline = true
local C1, C2 = nil, nil
local SAConnections = {}
local SAHook = nil
local HitPart = "HumanoidRootPart"
local SAHitChance = 100 -- default 100%
local SASnaplines = false
local SnaplineDrawing = nil
local CircleMode = "Center" -- "Center" or "Follow Crosshair"

local SAToggle = SAGroup:AddToggle("SilentAimToggle", {
    Text = "Enable Silent Aim",
    Default = false,
    Callback = function(Value)
        if Value then
            local CC = Workspace.CurrentCamera
            local SA = {fov = SAFOV, fovcircle = true}
            local Tgt = nil
            C1 = Drawing.new("Circle")
            C2 = Drawing.new("Circle")

            SAConnections.RenderStepped = RunService.Stepped:Connect(function()
                local sc
if CircleMode == "Center" then
    sc = Vector2.new(CC.ViewportSize.X/2, CC.ViewportSize.Y/2)
else
    local mouse = LP:GetMouse()
    sc = Vector2.new(mouse.X, mouse.Y)
end

C1.Position = sc
C2.Position = sc
                SA.fov = SAFOV

                C1.Position = sc
                C1.Radius = SA.fov
                C1.Color = FOVColor
                C1.Filled = SAFOVFilled
                C1.Transparency = SAFOVFilled and 0.3 or 0
                C1.Visible = SAFOVFilled

                C2.Position = sc
                C2.Radius = SA.fov
                C2.Color = FOVColor
                C2.Thickness = SAFOVOutline and 2 or 0
                C2.Filled = false
                C2.Visible = SAFOVOutline

                -- Find closest target
                local closest, dist = nil, SA.fov
                for _, v in ipairs(Players:GetPlayers()) do
                    local h = v.Character and v.Character:FindFirstChild(HitPart)
                    if v ~= LP and h then
                        local hum = v.Character:FindFirstChildOfClass("Humanoid")
                        local pos, on = CC:WorldToViewportPoint(h.Position + Vector3.new(0,0.2,0))
                        if on and hum and hum.Health > 0 then
                            local canTarget = true
                            if Toggles.SAWallCheck.Value then
                                local rayParams = RaycastParams.new()
                                rayParams.FilterType = Enum.RaycastFilterType.Blacklist
                                rayParams.FilterDescendantsInstances = {LP.Character}
                                local result = Workspace:Raycast(CC.CFrame.Position, (h.Position - CC.CFrame.Position).Unit * 1000, rayParams)
                                canTarget = not result or result.Instance:IsDescendantOf(v.Character)
                            end
                            if canTarget then
                                local m = (Vector2.new(pos.X,pos.Y)-sc).Magnitude
                                if m < dist then
                                    dist, closest = m, v
                                end
                            end
                        end
                    end
                end
                Tgt = closest

                -- Snapline drawing
                if SASnaplines then
                    if not SnaplineDrawing then
                        SnaplineDrawing = Drawing.new("Line")
                        SnaplineDrawing.Color = Color3.fromRGB(255, 0, 0)
                        SnaplineDrawing.Thickness = 2
                        SnaplineDrawing.Visible = true
                    end
                    if Tgt and Tgt.Character and Tgt.Character:FindFirstChild(HitPart) then
                        local tgtPos, onScreen = CC:WorldToViewportPoint(Tgt.Character[HitPart].Position)
                        if onScreen then
                            SnaplineDrawing.From = Vector2.new(CC.ViewportSize.X/2, CC.ViewportSize.Y/2)
                            SnaplineDrawing.To = Vector2.new(tgtPos.X, tgtPos.Y)
                            SnaplineDrawing.Visible = true
                        else
                            SnaplineDrawing.Visible = false
                        end
                    else
                        SnaplineDrawing.Visible = false
                    end
                else
                    if SnaplineDrawing then
                        SnaplineDrawing.Visible = false
                    end
                end
            end)

            SAHook = hookmetamethod(game, "__namecall", function(self,...)
                local a={...}
                if not checkcaller() and getnamecallmethod()=="FindPartOnRayWithIgnoreList" and Tgt and Tgt.Character then
                    if math.random(1,100) <= SAHitChance then
                        local o = a[1].Origin
                        a[1] = Ray.new(o, Tgt.Character[HitPart].Position-o)
                    end
                end
                return SAHook(self, unpack(a))
            end)
        else
            for _, conn in pairs(SAConnections) do conn:Disconnect() end
            SAConnections = {}
            if C1 then C1:Remove() end
            if C2 then C2:Remove() end
            if SnaplineDrawing then SnaplineDrawing:Remove() SnaplineDrawing=nil end
            if SAHook then hookmetamethod(game, "__namecall", SAHook) end
        end
    end
})

-- Snaplines toggle
SAGroup:AddToggle("SASnaplinesToggle", {
    Text = "Enable Snaplines",
    Default = false,
    Callback = function(Value)
        SASnaplines = Value
        if not Value and SnaplineDrawing then
            SnaplineDrawing:Remove()
            SnaplineDrawing = nil
        end
    end
})

-- FOV Slider
SAGroup:AddSlider("SAFOVSlider", {
    Text = "FOV Size",
    Default = SAFOV,
    Min = 10,
    Max = 500,
    Rounding = 1,
    Callback = function(Value) SAFOV = Value end
})

-- FOV Color
SAToggle:AddColorPicker("SAFOVColor", {
    Default = FOVColor,
    Title = "FOV Color",
    Callback = function(Value) FOVColor = Value end
})

SAGroup:AddDropdown("SAFOVModeDropdown", {
    Text = "FOV Circle Mode",
    Values = {"Center", "Follow Crosshair"},
    Default = "Center",
    Callback = function(Value)
        CircleMode = Value
    end
})

-- Filled/Outline toggles
SAGroup:AddToggle("SAFOVFilledToggle",{Text="Filled FOV",Default=true,Callback=function(Value) SAFOVFilled=Value end})
SAGroup:AddToggle("SAFOVOutlineToggle",{Text="Outline FOV",Default=true,Callback=function(Value) SAFOVOutline=Value end})

-- Wall Check
local SAOptionsGroup = Tabs.Main:AddRightGroupbox("Silent Aim Options", "eye")
SAOptionsGroup:AddToggle("SAWallCheck", { Text = "Wall Check", Default = false })

-- Hit Part Dropdown
SAGroup:AddDropdown("SAHitPartDropdown",{
    Text="Hit Part",
    Values={"Head","Torso","HumanoidRootPart"},
    Default="HumanoidRootPart",
    Callback=function(Value) HitPart=Value end
})

-- Hit Chance Slider
SAGroup:AddSlider("SAHitChanceSlider",{
    Text="Hit Chance %",
    Default=100,
    Min=1,
    Max=100,
    Rounding=1,
    Callback=function(Value) SAHitChance=Value end
})

local SAOptionsGroup = Tabs.Main:AddRightGroupbox("Miscellaneous", "brush")
SAOptionsGroup:AddToggle("CrosshairToggle", {
    Text = "Crosshair",
    Default = false,
}):OnChanged(function(Value)
    if Value then
        -- === CREATE CROSSHAIR ===
        local RunService = game:GetService("RunService")
        local Camera = workspace.CurrentCamera

        local Center = Vector2.new(Camera.ViewportSize.X/2, Camera.ViewportSize.Y/2)
        local CrosshairLines, LineCount, Radius, LineLength, LineColor = {}, 4, 7, 15, Color3.fromRGB(255,0,0)

        for i = 1, LineCount do
            local line = Drawing.new("Line")
            line.Color = LineColor
            line.Thickness = 2
            line.Visible = true
            table.insert(CrosshairLines, line)
        end

        local Dot = Drawing.new("Circle")
        Dot.Radius = 2
        Dot.Position = Center
        Dot.Color = LineColor
        Dot.Filled = true
        Dot.Visible = true

        local VelocityText = Drawing.new("Text")
        VelocityText.Text = "Velocity"
        VelocityText.Position = Vector2.new(Center.X - 20, Center.Y + 20)
        VelocityText.Size = 16
        VelocityText.Center = true
        VelocityText.Outline = true
        VelocityText.Color = Color3.new(1,1,1)
        VelocityText.Visible = true
        VelocityText.Font = 2

        local LOLText = Drawing.new("Text")
        LOLText.Text = ".lol"
        LOLText.Position = Vector2.new(Center.X + 35, Center.Y + 20)
        LOLText.Size = 16
        LOLText.Center = true
        LOLText.Outline = true
        LOLText.Color = Color3.fromRGB(255,0,0)
        LOLText.Visible = true
        LOLText.Font = 2

        local angle = 0
        CrosshairConnection = RunService.RenderStepped:Connect(function()
            Center = Vector2.new(Camera.ViewportSize.X/2, Camera.ViewportSize.Y/2)
            for i, line in ipairs(CrosshairLines) do
                local a = angle + (math.pi*2/LineCount)*(i-1)
                local from = Vector2.new(Center.X + math.cos(a) * Radius, Center.Y + math.sin(a) * Radius)
                local to = Vector2.new(Center.X + math.cos(a) * (Radius + LineLength), Center.Y + math.sin(a) * (Radius + LineLength))
                line.From = from
                line.To = to
            end
            Dot.Position = Center
            VelocityText.Position = Vector2.new(Center.X - 20, Center.Y + 20)
            LOLText.Position = Vector2.new(Center.X + 35, Center.Y + 20)
            angle = angle + 0.05
        end)

        CrosshairObjects = {Dot, VelocityText, LOLText}
        for _, line in ipairs(CrosshairLines) do
            table.insert(CrosshairObjects, line)
        end

    else
        -- === REMOVE CROSSHAIR ===
        if CrosshairConnection then
            CrosshairConnection:Disconnect()
            CrosshairConnection = nil
        end
        if CrosshairObjects then
            for _, obj in ipairs(CrosshairObjects) do
                obj:Remove()
            end
            CrosshairObjects = nil
        end
    end
end)

-- ==== ESP / Visuals ====
local ESPGroup = Tabs.Esp:AddLeftGroupbox("Player Visuals", "eye")

-- Highlight toggle (chams)
local ESPHighlightToggle = ESPGroup:AddToggle("ESPEnabled", {
    Text = "Enable Highlight",
    Default = false,
    Tooltip = "Enable player highlights (chams)"
})

-- Highlight color variable
local HighlightColor = Color3.fromRGB(0,0,255) -- default blue

-- Color picker for highlight
ESPHighlightToggle:AddColorPicker("ESPHighlightColor", {
    Default = Color3.fromRGB(255, 0, 0),    Title = "Highlight Color",
    Callback = function(Value)
        HighlightColor = Value
        -- Update existing highlights if any
        for _, h in pairs(Highlights) do
            if h then
                h.FillColor = HighlightColor
            end
        end
    end
})

-- Sub-toggles
local ESPNameToggle = ESPGroup:AddToggle("ESPName", {Text = "Show Names", Default = false})
local ESPHealthToggle = ESPGroup:AddToggle("ESPHealthBar", {Text = "Show Health Bars", Default = false})
local ESPDistanceToggle = ESPGroup:AddToggle("ESPDistance", {Text = "Show Distance", Default = false})
local ESPCornersToggle = ESPGroup:AddToggle("ESPCorners", {Text = "Show Outline Box", Default = false})
local ESPWeaponToggle = ESPGroup:AddToggle("ESPWeapon", {Text = "Show Weapon/Tool", Default = false})

-- Storage for drawings and highlights
local Drawings = {}
local Highlights = {}

-- Health color gradient
local function getHealthColor(p)
    return Color3.fromHSV(p * 0.33, 1, 1)
end

-- Cleanup ESP for a player
local function removeESP(plr)
    if Drawings[plr] then
        for _, obj in pairs(Drawings[plr]) do
            if typeof(obj)=="table" then
                for _, d in pairs(obj) do if d.Remove then d:Remove() end end
            elseif obj.Remove then obj:Remove() end
        end
        Drawings[plr]=nil
    end
    if Highlights[plr] then
        Highlights[plr]:Destroy()
        Highlights[plr]=nil
    end
end

-- Corner lines
local function createCorners()
    local lines = {}
    for _=1,8 do
        local l = Drawing.new("Line")
        l.Color = Color3.new(1,1,1)
        l.Thickness = 2
        l.Visible = false
        table.insert(lines,l)
    end
    return lines
end

-- Initialize ESP for a player
local function createESP(plr)
    if plr==LP then return end
    Drawings[plr]={
        DisplayName=Drawing.new("Text"),
        Username=Drawing.new("Text"),
        Distance=Drawing.new("Text"),
        HealthBar=Drawing.new("Line"),
        HealthText=Drawing.new("Text"),
        Corners=createCorners(),
        Weapon=Drawing.new("Text")
    }
    for _, obj in pairs({Drawings[plr].DisplayName,Drawings[plr].Username,Drawings[plr].Distance,Drawings[plr].HealthText,Drawings[plr].Weapon}) do
        obj.Visible=false
        obj.Center=true
        obj.Outline=true
        obj.Font=2
        obj.Size=13
        obj.Color=Color3.new(1,1,1)
    end
    Drawings[plr].HealthBar.Thickness=4
    Drawings[plr].HealthBar.Visible=false

    if ESPHighlightToggle.Value then
        local h = Instance.new("Highlight")
        h.FillColor = Color3.fromRGB(255, 0, 0) -- default red
h.OutlineColor = Color3.new(1,1,1)
        h.FillTransparency = 0.25
        h.OutlineTransparency = 0
        h.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
        h.Parent = game.CoreGui
        Highlights[plr] = h
    end
end

-- ESP Render Loop
RunService.RenderStepped:Connect(function()
    if not ESPHighlightToggle.Value and not ESPNameToggle.Value and not ESPHealthToggle.Value and not ESPDistanceToggle.Value and not ESPCornersToggle.Value and not ESPWeaponToggle.Value then
        for _, plr in pairs(Players:GetPlayers()) do removeESP(plr) end
        return
    end

    for _, plr in pairs(Players:GetPlayers()) do
        if plr~=LP and plr.Character and plr.Character:FindFirstChild("HumanoidRootPart") then
            local char=plr.Character
            local hrp=char:FindFirstChild("HumanoidRootPart")
            local hum=char:FindFirstChildOfClass("Humanoid")
            local pos,vis = Camera:WorldToViewportPoint(hrp.Position)
            local dist = (Camera.CFrame.Position-hrp.Position).Magnitude

            if not Drawings[plr] then createESP(plr) end
            local obj=Drawings[plr]

            if vis and dist<=1000 then
                local scale=1/(dist/100)
                local boxW=30*scale
                local boxH=30*scale
                local size=Vector2.new(boxW,boxH)
                local tl=Vector2.new(pos.X-size.X/2,pos.Y-size.Y/2)
                local tr=tl+Vector2.new(size.X,0)
                local bl=tl+Vector2.new(0,size.Y)
                local br=tl+size
                local len=8*scale
                local c=obj.Corners
                for i=1,8 do c[i].Visible=ESPCornersToggle.Value end
                c[1].From=tl;c[1].To=tl+Vector2.new(len,0)
                c[2].From=tl;c[2].To=tl+Vector2.new(0,len)
                c[3].From=tr;c[3].To=tr-Vector2.new(len,0)
                c[4].From=tr;c[4].To=tr+Vector2.new(0,len)
                c[5].From=bl;c[5].To=bl+Vector2.new(len,0)
                c[6].From=bl;c[6].To=bl-Vector2.new(0,len)
                c[7].From=br;c[7].To=br-Vector2.new(0,len)
                c[8].From=br;c[8].To=br-Vector2.new(0,len)

                obj.DisplayName.Position=Vector2.new(pos.X,tl.Y-35)
                obj.DisplayName.Text=plr.DisplayName
                obj.DisplayName.Visible=ESPNameToggle.Value

                obj.Username.Position=Vector2.new(pos.X,tl.Y-23)
                obj.Username.Text=plr.Name
                obj.Username.Visible=ESPNameToggle.Value

                obj.Distance.Position=Vector2.new(pos.X,br.Y+4)
                obj.Distance.Text=math.floor(dist).." Studs"
                obj.Distance.Visible=ESPDistanceToggle.Value

                if hum then
                    local hpPercent=math.clamp(hum.Health/hum.MaxHealth,0,1)
                    local barHeight=size.Y*hpPercent
                    local from=Vector2.new(tl.X-6,br.Y)
                    local to=Vector2.new(tl.X-6,br.Y-barHeight)
                    obj.HealthBar.From=from
                    obj.HealthBar.To=to
                    obj.HealthBar.Color=getHealthColor(hpPercent)
                    obj.HealthBar.Visible=ESPHealthToggle.Value

                    obj.HealthText.Position=Vector2.new(from.X-10,to.Y-6)
                    obj.HealthText.Text=tostring(math.floor(hum.Health))
                    obj.HealthText.Color=getHealthColor(hpPercent)
                    obj.HealthText.Visible=ESPHealthToggle.Value
                end

                if ESPWeaponToggle.Value then
                    local tool=nil
                    for _, child in ipairs(char:GetChildren()) do
                        if child:IsA("Tool") then
                            tool=child
                            break
                        end
                    end
                    if tool then
                        obj.Weapon.Text=tool.Name
                        obj.Weapon.Position=Vector2.new(pos.X,tl.Y-50)
                        obj.Weapon.Visible=true
                    else
                        obj.Weapon.Visible=false
                    end
                else obj.Weapon.Visible=false end

                if Highlights[plr] then
                    Highlights[plr].Adornee=char
                    Highlights[plr].Enabled=ESPHighlightToggle.Value
                end
            else
                for _, obj2 in pairs(obj) do
                    if typeof(obj2)=="table" then
                        for _, x in pairs(obj2) do x.Visible=false end
                    elseif obj2.Visible then obj2.Visible=false end
                end
                if Highlights[plr] then Highlights[plr].Enabled=false end
            end
        else removeESP(plr) end
    end
end)

Players.PlayerRemoving:Connect(removeESP)

-- ==== World Groupbox ====
local WorldGroup = Tabs.Esp:AddRightGroupbox("World", "globe")

local CameraFOV = 70
WorldGroup:AddSlider("CameraFOVSlider",{
    Text="Camera Field Of View",
    Default=CameraFOV,
    Min=50,
    Max=120,
    Rounding=1,
    Callback=function(Value)
        CameraFOV=Value
        Camera.FieldOfView=CameraFOV
    end
})

local VisualSaturation = 100
local VisualBrightness = 1
local Lighting = game:GetService("Lighting")
local ColorEffect = Instance.new("ColorCorrectionEffect")
ColorEffect.Parent = Lighting
ColorEffect.Saturation=VisualSaturation/100
ColorEffect.Brightness=VisualBrightness/35
ColorEffect.TintColor=Color3.new(1,1,1)

WorldGroup:AddSlider("VisualSaturationSlider",{Text="Saturation",Default=VisualSaturation,Min=0,Max=100,Rounding=1,Callback=function(Value)
    VisualSaturation=Value
    ColorEffect.Saturation=VisualSaturation/100
end})

WorldGroup:AddSlider("VisualBrightnessSlider",{Text="Brightness",Default=VisualBrightness,Min=1,Max=10,Rounding=1,Callback=function(Value)
    VisualBrightness=Value
    ColorEffect.Brightness=VisualBrightness/10
end})

WorldGroup:AddButton("Stretched Resolution",function()
    getgenv().Resolution={[".gg/scripters"]=0.65}
    local Camera=workspace.CurrentCamera
    if getgenv().gg_scripters==nil then
        game:GetService("RunService").RenderStepped:Connect(function()
            Camera.CFrame=Camera.CFrame*CFrame.new(0,0,0,1,0,0,0,getgenv().Resolution[".gg/scripters"],0,0,0,1)
        end)
    end
    getgenv().gg_scripters="Aori0001"
end)

WorldGroup:AddButton("FPS Boost (BloxStrap)",function()
    loadstring(game:HttpGet('https://raw.githubusercontent.com/qwertyui-is-back/Bloxstrap/main/Initiate.lua', true))()
end)

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

-- Variables
local followDistance = 2
local sideOffset = 1
local followTime = 1.5
local knifeName = "Knife"
local equipInterval = 0.5

-- Current character reference
local currentChar = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait()
LocalPlayer.CharacterAdded:Connect(function(char)
    currentChar = char
end)

local autoFarmGroup = Tabs.AutoFarm:AddLeftGroupbox("AutoFarm Settings", "axe")

-- AutoFarm toggle
local autoFarmToggle = autoFarmGroup:AddToggle("AutoFarmToggle", {
    Text = "AutoFarm",        -- visible label
    Default = false
})

-- Auto Equip Knife toggle
local autoEquipToggle = autoFarmGroup:AddToggle("AutoEquipKnifeToggle", {
    Text = "Auto Equip Knife", -- visible label
    Default = false
})

-- Helper: get next player
local function getNextPlayer(currentIndex)
    local all = Players:GetPlayers()
    if #all <= 1 then return nil, 0 end

    local index = currentIndex or 0
    local tries = 0
    repeat
        index = index + 1
        if index > #all then index = 1 end
        tries = tries + 1
    until all[index] ~= LocalPlayer or tries > #all

    return all[index] ~= LocalPlayer and all[index] or nil, index
end

-- Combined AutoFarm + Auto Equip Knife loop
task.spawn(function()
    local currentIndex = 0
    while true do
        -- AUTO FARM LOGIC
        if autoFarmToggle.Value then
            local target
            target, currentIndex = getNextPlayer(currentIndex)
            if target and target.Character and target.Character:FindFirstChild("HumanoidRootPart") then
                local startTime = tick()
                while tick() - startTime < followTime and autoFarmToggle.Value do
                    local hrp = target.Character:FindFirstChild("HumanoidRootPart")
                    if currentChar and hrp and currentChar:FindFirstChild("HumanoidRootPart") then
                        local backPos = hrp.Position - hrp.CFrame.LookVector * followDistance
                        local sidePos = backPos + hrp.CFrame.RightVector * sideOffset
                        currentChar.HumanoidRootPart.CFrame = CFrame.new(sidePos, hrp.Position)
                    end
                    RunService.RenderStepped:Wait()
                end
            else
                task.wait(0.2)
            end
        else
            task.wait(0.2)
        end

        -- AUTO EQUIP KNIFE LOGIC
        if autoEquipToggle.Value then
            local backpack = LocalPlayer:FindFirstChild("Backpack")
            if backpack and currentChar then
                local knife = backpack:FindFirstChild(knifeName)
                if knife then
                    currentChar.Humanoid:EquipTool(knife)
                end
            end
        end

        task.wait(equipInterval)
    end
end)

-- Configuration Tab
local Configuration = Window:AddTab({
    Name = "Configuration",
    Description = "Settings & Configs",
    Icon = "file"
})

-- =========================
-- Left Groupbox: Menu / UI
-- =========================
local MenuGroup = Configuration:AddLeftGroupbox("Menu", "wrench")

MenuGroup:AddToggle("KeybindMenuOpen", {
    Default = Library.KeybindFrame.Visible,
    Text = "Open Keybind Menu",
    Callback = function(value)
        Library.KeybindFrame.Visible = value
    end,
})

MenuGroup:AddToggle("ShowCustomCursor", {
    Text = "Custom Cursor",
    Default = true,
    Callback = function(Value)
        Library.ShowCustomCursor = Value
    end,
})

MenuGroup:AddDropdown("NotificationSide", {
    Values = { "Left", "Right" },
    Default = "Right",
    Text = "Notification Side",
    Callback = function(Value)
        Library:SetNotifySide(Value)
    end,
})

MenuGroup:AddDropdown("DPIDropdown", {
    Values = { "50%", "75%", "100%", "125%", "150%", "175%", "200%" },
    Default = "100%",
    Text = "DPI Scale",
    Callback = function(Value)
        Value = Value:gsub("%%", "")
        local DPI = tonumber(Value)
        Library:SetDPIScale(DPI)
    end,
})

MenuGroup:AddDivider()
MenuGroup:AddLabel("Menu bind")
    :AddKeyPicker("MenuKeybind", { Default = "RightShift", NoUI = true, Text = "Menu keybind" })

MenuGroup:AddButton("Unload", function()
    Library:Unload()
end)

Library.ToggleKeybind = Options.MenuKeybind


-- =========================
-- Right Groupbox: Configs
-- =========================
local ConfigGroup = Configuration:AddRightGroupbox("Config Manager", "cog")

-- Hook managers into library
ThemeManager:SetLibrary(Library)
SaveManager:SetLibrary(Library)

-- Ignore theme + menu keybind in configs
SaveManager:IgnoreThemeSettings()
SaveManager:SetIgnoreIndexes({ "MenuKeybind" })

-- Folder structure
ThemeManager:SetFolder("MyScriptHub")
SaveManager:SetFolder("MyScriptHub/specific-game")
SaveManager:SetSubFolder("specific-place")

-- Force managers into RIGHT groupbox
SaveManager:BuildConfigSection(ConfigGroup)   -- ✅ Build config list, save/load, etc
ThemeManager:ApplyToGroupbox(ConfigGroup)     -- ✅ Add theme dropdowns here

-- Auto-load if marked
SaveManager:LoadAutoloadConfig()

-- ==== Finish Setup ====
ThemeManager:SetLibrary(Library)
SaveManager:SetLibrary(Library)
SaveManager:IgnoreThemeSettings()
SaveManager:SetFolder("MyScriptHub")
SaveManager:SetSubFolder("specific-place")
SaveManager:BuildConfigSection(Tabs["UI Settings"])
ThemeManager:ApplyToTab(Tabs["UI Settings"])
SaveManager:LoadAutoloadConfig()

Features

  • velocity.lol discord: .gg/2gFFyCpy