-- Arcade Basketball | JBSploit.mov Script

-- Load dependencies
local repo = 'https://[Log in to view URL]'
local Library       = loadstring(game:HttpGet('https://[Log in to view URL]'))()
local ThemeManager = loadstring(game:HttpGet('https://[Log in to view URL]'))()
local SaveManager  = loadstring(game:HttpGet(repo .. 'addons/SaveManager.lua'))()

-- Roblox services
local Players           = game:GetService('Players')
local Workspace         = game:GetService('Workspace')
local RunService        = game:GetService('RunService')
local ReplicatedStorage = game:GetService('ReplicatedStorage')
local UserInputService  = game:GetService('UserInputService')

-- Player references
local LocalPlayer       = Players.LocalPlayer
local Character         = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait()
local Humanoid          = Character:FindFirstChildOfClass("Humanoid")
local HumanoidRootPart  = Character.HumanoidRootPart

-- Player inventory and cosmetic assets
local inventory        = LocalPlayer:WaitForChild("Profile"):WaitForChild("Inventory")
local clothingAssets   = ReplicatedStorage:WaitForChild("ClothingAssets")
local LogosFolder      = LocalPlayer.Profile.Logos

-- Basketballs and camera
local Basketballs      = Workspace.Basketballs
local Camera           = Workspace.CurrentCamera

-- Find the shoot function via garbage collection
local ShootFunction
for _, v in next, getgc(false) do
    if type(v) == "function" then
        local name = debug.getinfo(v).name
        if name == "shoot" or name == "Shoot" then
            ShootFunction = v
        end
    end
end

-- Default shoot arguments
local args = { true, 100, [4] = false }

-- Set up logos dropdown list
local LogosTable = {}
for _, value in ipairs(LogosFolder:GetChildren()) do
    table.insert(LogosTable, tostring(value))
end

-- Create UI window
local Window = Library:CreateWindow({
    Title      = 'JBSploit | Free | Arcade Basketball',
    Center     = true,
    AutoShow   = true,
    TabPadding = 8,
    MenuFadeTime = 0.2
})

-- Tabs
local Tabs = {
    Main         = Window:AddTab('Main'),
    UI_Settings  = Window:AddTab('UI Settings'),
}

-- Main tab controls
local Main = Tabs.Main:AddLeftGroupbox('Main')

Main:AddToggle('AutoGreen', { Text = 'Auto Green' })
Main:AddToggle('WalkSpeed', { Text = 'Walk Speed' })
Main:AddSlider('Speed', {
    Text     = 'Speed',
    Default  = 16,
    Min      = 0,
    Max      = 40,
    Rounding = 2,
})
Main:AddToggle('AutoGreenRageToggle', {
    Text    = 'Rage Auto Green (PRESS T)',
    Default = false,
    Tooltip = 'Very obvious -- works the best',
})
Main:AddToggle('LogosDisplayToggle', {
    Text    = 'Logos Display',
    Default = false,
    Tooltip = 'Shows a Logo next to your name in Chat [Client-Sided]',
    Callback = function(Value)
        for _, logo in ipairs(LogosFolder:GetChildren()) do
            logo.Value = false
        end
        if Value then
            LogosFolder:FindFirstChild(Options.LogosDropdown.Value).Value = true
        end
    end,
})
Main:AddDropdown('LogosDropdown', {
    Values  = LogosTable,
    Default = 1,
    Multi   = false,
    Text    = 'Logos Dropdown',
    Tooltip = 'Shows Logo in Chat [Client-Sided]',
    Callback = function(Value)
        if Toggles.LogosDisplayToggle.Value then
            for _, logo in ipairs(LogosFolder:GetChildren()) do
                logo.Value = false
            end
            LogosFolder:FindFirstChild(Value).Value = true
        end
    end,
})
Main:AddToggle('InfStamina', { Text = 'Infinite Stamina' })
Main:AddButton({
    Text = 'Unlock All',
    Func = function()
        -- Clears profile inventory and clones clothing assets into it
        for _, item in ipairs(inventory:GetChildren()) do
            item:Destroy()
        end
        for _, asset in ipairs(clothingAssets:GetChildren()) do
            asset:Clone().Parent = inventory
        end
    end,
    DoubleClick = false,
})

-- Hook shoot event to enable AutoGreen functionality
local ShootRemote = ReplicatedStorage:WaitForChild("Events"):WaitForChild("Shoot")
local namecall
namecall = hookmetamethod(game, "__namecall", function(self, ...)
    local arg = {...}
    if not checkcaller() and self == ShootRemote and getnamecallmethod():lower() == "fireserver" and Toggles.AutoGreen.Value then
        arg[2] = -0.98
        return namecall(self, unpack(arg))
    end
    return namecall(self, ...)
end)

-- Rage auto green: press T to shoot with green effect
UserInputService.InputBegan:Connect(function(input, gameProcessed)
    if input.KeyCode == Enum.KeyCode.T then
        ShootRemote:FireServer(nil, -1, nil, nil)
        ShootRemote:FireServer(nil, -1, nil)
    end
end)

-- Infinite stamina
LocalPlayer.Values.Stamina:GetPropertyChangedSignal("Value"):Connect(function()
    if LocalPlayer.Values.Stamina.Value ~= 1 and Toggles.InfStamina.Value then
        LocalPlayer.Values.Stamina.Value = 1
    end
end)

-- WalkSpeed control
RunService.RenderStepped:Connect(function()
    if Toggles.WalkSpeed.Value then
        Character.Humanoid.WalkSpeed = Options.Speed.Value
    end
end)

-- Watermark and FPS tracker
Library:SetWatermarkVisibility(true)
local FrameTimer, FrameCounter = tick(), 0
local FPS = 60
RunService.RenderStepped:Connect(function()
    FrameCounter += 1
    if tick() - FrameTimer >= 1 then
        FPS = FrameCounter
        FrameTimer = tick()
        FrameCounter = 0
    end
    local ping = math.floor(game:GetService('Stats').Network.ServerStatsItem['Data Ping']:GetValue())
    Library:SetWatermark(('JBSploit | Free(Temp) | %s fps | %s ms'):format(math.floor(FPS), ping))
end)

Library.KeybindFrame.Visible = true
Library:OnUnload(function()
    Library.Unloaded = true
end)

-- UI Settings tab
local MenuGroup = Tabs.UI_Settings:AddLeftGroupbox('Menu')
MenuGroup:AddLabel('Made by: jaayb, The')
MenuGroup:AddButton('Copy Discord', function()
    setclipboard("https://[Log in to view URL]")
end)
MenuGroup:AddButton('Unload', function()
    Library:Unload()
end)
MenuGroup:AddToggle('WatermarkVisibiltyToggle', {
    Text    = 'Hide Watermark',
    Default = false,
    Tooltip = 'Hides Watermark',
    Callback = function(Value)
        Library:SetWatermarkVisibility(not Value)
    end,
})
MenuGroup:AddLabel('Menu bind')
           :AddKeyPicker('MenuKeybind', {
               Default = 'End',
               NoUI    = true,
               Text    = 'Menu keybind'
           })

-- Apply Theme and Save settings
Library.ToggleKeybind = Options.MenuKeybind
ThemeManager:SetLibrary(Library)
SaveManager:SetLibrary(Library)
SaveManager:IgnoreThemeSettings()
SaveManager:SetIgnoreIndexes({ 'MenuKeybind' })
ThemeManager:SetFolder('JBSploit.mov')
SaveManager:SetFolder('JBSploit.mov/ArcadeBasketball')
SaveManager:BuildConfigSection(Tabs.UI_Settings)
ThemeManager:ApplyToTab(Tabs.UI_Settings)
SaveManager:LoadAutoloadConfig()

-- Notifications
Library:Notify(("Welcome to JBSploit.Mov %s"):format(LocalPlayer.Name), 6)
Library:Notify(("Status: - Undetected (Safe to use)"), 6)

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: