Kali Hub LEAKED SOURCE no Key
Key Required

Kali Hub LEAKED SOURCE no Key

Football Fusion 2WaylonTheEvidentWaylonTheEvident 4.2K views 4.7K executesUpdated Dec 8, 2025
Unrated
00
Lua Script•955 lines (29365 chars)
local RS = game:GetService("ReplicatedStorage")
local gc = getgc(true)

local function findTargetConstant()
    local candidates = {}
    
    for _, obj in pairs(gc) do
        pcall(function()
            if type(obj) == "function" and islclosure(obj) and not isexecutorclosure(obj) then
                local protos = getprotos(obj)
                if protos and #protos == 1 then
                    local consts = getconstants(protos[1])
                    for _, const in pairs(consts) do
                        if type(const) == "number" and const > 1000000 and const < 10000000 then
                            table.insert(candidates, {value = const, func = obj})
                        end
                    end
                end
            end
        end)
    end
    
    return candidates
end

for _, obj in pairs(gc) do
    pcall(function()
        if type(obj) == "table" and rawlen(obj) == 19 then
            local last = rawget(obj, 19)
            if type(last) == "userdata" then
                for i = 2, 18 do
                    rawset(obj, i, math.random(1e6, 1e8))
                end
            end
        end
    end)
end

local detectedConstants = findTargetConstant()

if #detectedConstants > 0 then
    for _, candidate in ipairs(detectedConstants) do
        pcall(function()
            hookfunction(candidate.func, newcclosure(function() end))
        end)
    end
end

local remote = RS.Remotes.CharacterSoundEvent
local oldFire = remote.FireServer

hookfunction(remote.FireServer, newcclosure(function(self, ...)
    local args = {...}
    
    if type(args[1]) == "string" and #args[1] > 20 then
        if args[2] == "b51b07a5c14d" or args[2] == "error" then
            return
        end
    end
    
    return oldFire(self, ...)
end))

_G.b51b07a5c14d = false

local fakeLS = Instance.new("LocalScript")
fakeLS.Disabled = true
fakeLS.Parent = game:GetService("ReplicatedFirst")

for _, tbl in pairs(gc) do
    pcall(function()
        if type(tbl) == "table" then
            local mt = getrawmetatable(tbl)
            if mt and mt.__call then
                local oldCall = mt.__call
                rawset(mt, "__call", newcclosure(function(self, a, b, c, d, e, f)
                    if a and b and c and d and e and f then
                        if a > 1000 and b > 1000 then
                            return { 20.02 }
                        end
                    end
                    return oldCall(self, a, b, c, d, e, f)
                end))
                rawset(mt, "__tostring", nil)
            end
        end
    end)
end

task.wait(1)

local repo = "https://raw.githubusercontent.com/deividcomsono/Obsidian/main/"
local Library = loadstring(game:HttpGet(repo .. "Library.lua"))()
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

local Window = Library:CreateWindow({
    Title = "Kali Hub",
    Footer = "by @wrl11 & @aylonthegiant | discord.gg/epNcR8Ce89",
    NotifySide = "Right",
    ShowCustomCursor = false,
    Mobile = {
        Enabled = true,
        Title = "Kali Hub",
        Icon = "rbxassetid://10723434711"
    }
})

local Tabs = {
    Catching = Window:AddTab("Catching", "hand"),
    Physics = Window:AddTab("Physics", "zap"),
    ["UI Settings"] = Window:AddTab("UI Settings", "settings"),
}

-- Services
local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")
local Workspace = game:GetService("Workspace")
local CoreGui = game:GetService("CoreGui")
local VIM = game:GetService("VirtualInputManager")
local ContextActionService = game:GetService("ContextActionService")

local Player = Players.LocalPlayer
while not Player do
    Player = Players.LocalPlayer
    wait()
end

-- Settings
local autocatchon = false
local catchdistance = 10
local magson = false
local magsrange = 0
local magsdelayon = false
local magsdelay = 0
local showhitboxon = false
local hitboxshape = "Sphere"
local hitboxcolor = Color3.fromRGB(128, 0, 128)
local hitboxes = {}
local catchresizeon = false
local catchresizerange = 10
local lmgg = 0
local magmode = "FTI"
local speedEnabled = false
local speedValue = 0.1
local movementLoop = nil
local jumpoweron = false
local jumpboost = 50
local nojpcooldownon = false
local njcconnections = {}
local pullvector = false
local pullvectorpower = 1
local pullvectordistance = 5
local clicktackleon = false
local clicktacklerange = 5
local ballpathOn = false
local ballpathColor = Color3.fromRGB(128,0,128)
local ballpathConnection
local deleteOOBEnabled = false

-- Functions
local function gotfb()
    local character = Player.Character
    if not character then return false end
    local humanoid = character:FindFirstChild("Humanoid")
    if not humanoid then return false end
    for _, tool in pairs(character:GetChildren()) do
        if tool:IsA("Tool") and (tool.Name:lower():match("football") or tool:FindFirstChild("Handle")) then
            return true
        end
    end
    return false
end

local function findclosestball()
    local character = Player.Character
    if not character or not character:FindFirstChild("HumanoidRootPart") then return nil end
    local hrp = character.HumanoidRootPart
    local closestball, mindist = nil, math.huge
    for _, ball in pairs(Workspace:GetChildren()) do
        if ball.Name:lower():match("football") and ball:IsA("BasePart") and not ball.Anchored then
            local dist = (hrp.Position - ball.Position).Magnitude
            if dist < mindist then closestball, mindist = ball, dist end
        end
    end
    return closestball, mindist
end

local function hitboxx(oid)
    if not oid or hitboxes[oid] or not magson or not showhitboxon then return end
    local holder = oid:FindFirstAncestorOfClass("Model")
    if holder and Players:GetPlayerFromCharacter(holder) then return end
    local hitbox = Instance.new("Part")
    hitbox.Name = "Hitbox"
    hitbox.Size = Vector3.new(magsrange, magsrange, magsrange)
    hitbox.Anchored = true
    hitbox.CanCollide = false
    hitbox.Transparency = 0.2
    hitbox.Material = Enum.Material.ForceField
    hitbox.Color = Color3.fromRGB(128, 0, 128)
    hitbox.CastShadow = false
    hitbox.CFrame = oid.CFrame
    hitbox.Shape = Enum.PartType.Ball
    hitbox.Parent = oid
    local success, uistroke = pcall(function() return Instance.new("UIStroke") end)
    if success and uistroke then
        pcall(function()
            uistroke.Color = Color3.fromRGB(255,255,255)
            uistroke.Thickness = 1
            uistroke.Transparency = 0
            uistroke.Parent = hitbox
        end)
    end
    hitboxes[oid] = {part = hitbox}
    local connection
    connection = RunService.Heartbeat:Connect(function(dt)
        if not oid or not oid.Parent or not magson or not showhitboxon then
            if hitbox then hitbox:Destroy() end
            if connection then connection:Disconnect() end
            hitboxes[oid] = nil
            return
        end
        local holder = oid:FindFirstAncestorOfClass("Model")
        if holder and Players:GetPlayerFromCharacter(holder) then
            if hitbox then hitbox:Destroy() end
            if connection then connection:Disconnect() end
            hitboxes[oid] = nil
            return
        end
        hitbox.CFrame = oid.CFrame
        hitbox.Size = Vector3.new(magsrange, magsrange, magsrange)
        hitbox.Color = Color3.fromRGB(128, 0, 128)
    end)
end

local function fitbalsize()
    for oid, data in pairs(hitboxes) do
        if data and data.part then
            data.part.Size = Vector3.new(magsrange, magsrange, magsrange)
            data.part.Color = Color3.fromRGB(128, 0, 128)
        else
            if data and data.part then data.part:Destroy() end
            hitboxes[oid] = nil
        end
    end
end

local function remove()
    for oid, football in pairs(hitboxes) do
        if football.part then football.part:Destroy() end
    end
    hitboxes = {}
end

local function footballhitbox()
    if not magson then return end
    for _, child in pairs(Workspace:GetChildren()) do
        if child.Name:lower():match("football") and child:IsA("BasePart") then
            hitboxx(child)
        end
    end
end

local function getfutbal()
    local character = Player.Character
    if not (character and character:FindFirstChild("HumanoidRootPart")) then return nil end
    local playerpos = character.HumanoidRootPart.Position
    local closestfootballpart, mindist = nil, math.huge
    for _, child in pairs(Workspace:GetChildren()) do
        if child.Name:lower():match("football") and child:IsA("BasePart") then
            local dist = (child.Position - playerpos).Magnitude
            if dist < mindist and dist <= magsrange then closestfootballpart, mindist = child, dist end
        end
    end
    return closestfootballpart
end

local function catch(ball)
    if not ball then return nil end
    local character = Player.Character
    if not character then return end
    local catchleft = character:FindFirstChild("CatchLeft")
    local catchright = character:FindFirstChild("CatchRight")
    local closest, mindist = nil, math.huge
    local ballpos = ball.Position
    local rg = magsrange
    if catchleft and catchleft:IsA("BasePart") then
        local dist = (catchleft.Position - ballpos).Magnitude
        if dist < mindist and dist <= rg then closest, mindist = catchleft, dist end
    end
    if catchright and catchright:IsA("BasePart") then
        local dist = (catchright.Position - ballpos).Magnitude
        if dist < mindist and dist <= rg then closest, mindist = catchright, dist end
    end
    return closest
end

local function rrrrrrrsizenugget(character)
    if not character then return end
    if catchresizeon then
        local catchleft = character:FindFirstChild("CatchLeft")
        local catchright = character:FindFirstChild("CatchRight")
        if catchleft then
            catchleft.Size = Vector3.new(catchresizerange, catchresizerange, catchresizerange)
            catchleft.Transparency = 1
        end
        if catchright then
            catchright.Size = Vector3.new(catchresizerange, catchresizerange, catchresizerange)
            catchright.Transparency = 1
        end
    else
        local catchleft = character:FindFirstChild("CatchLeft")
        local catchright = character:FindFirstChild("CatchRight")
        if catchleft then
            catchleft.Size = Vector3.new(0.75, 5, 1.5)
            catchleft.Transparency = 1
        end
        if catchright then
            catchright.Size = Vector3.new(0.75, 5, 1.5)
            catchright.Transparency = 1
        end
    end
end

local function startMovementSystem()
    if not movementLoop then
        movementLoop = RunService.Heartbeat:Connect(function(dt)
            if not speedEnabled then return end
            local character = Player.Character
            if not character or not character:FindFirstChild("HumanoidRootPart") then return end
            local hrp = character.HumanoidRootPart
            local humanoid = character:FindFirstChild("Humanoid")
            if humanoid and humanoid.MoveDirection.Magnitude > 0 then
                local speedStudsPerSec = speedValue * 8
                local moveVector = humanoid.MoveDirection * speedStudsPerSec * dt
                hrp.CFrame = hrp.CFrame + moveVector
            end
        end)
    end
end

local function stopMovementSystem()
    if movementLoop then
        movementLoop:Disconnect()
        movementLoop = nil
    end
end

local function whenmoving(character)
    if not character then return end
    local humanoid = character:WaitForChild("Humanoid")
    local humanoidrootpart = character:WaitForChild("HumanoidRootPart")
    humanoid.StateChanged:Connect(function(_, newstate)
        if newstate == Enum.HumanoidStateType.Jumping and jumpoweron then
            task.wait(0.05)
            humanoidrootpart.AssemblyLinearVelocity = humanoidrootpart.AssemblyLinearVelocity + Vector3.new(0, jumpboost - 50, 0)
        end
    end)
end

local function njc(char)
    if not char then return end
    local hum = char:WaitForChild("Humanoid")
    local connection = RunService.Stepped:Connect(function()
        if nojpcooldownon then
            hum:SetStateEnabled(Enum.HumanoidStateType.Jumping, true)
        end
    end)
    njcconnections[char] = connection
end

local function findclosestsleveesor(maxdistance)
    local character = Player.Character
    if not character then
        return nil
    end
    local hrp = character:FindFirstChild("HumanoidRootPart")
    if not hrp then
        return nil
    end
    local closestdistance = maxdistance
    local closestcharacter = nil
    for _, plr in ipairs(Players:GetPlayers()) do
        if plr == Player or plr.Team == Player.Team then
            continue
        end
        local targetchar = plr.Character
        if not targetchar then
            continue
        end
        local targethrp = targetchar:FindFirstChild("HumanoidRootPart")
        if not targethrp then
            continue
        end
        local hasfootball = false
        for _, item in ipairs(targetchar:GetChildren()) do
            if item:IsA("Tool") and item.Name:match("Football") then
                hasfootball = true
                break
            end
        end
        if not hasfootball then
            continue
        end
        local distance = (hrp.Position - targethrp.Position).Magnitude
        if distance < closestdistance then
            closestdistance = distance
            closestcharacter = targetchar
        end
    end
    return closestcharacter
end

local function beamProjectile(g, v0, x0, t1)
    local c = 0.125
    local p3 = 0.5*g*t1*t1 + v0*t1 + x0
    local p2 = p3 - (g*t1*t1 + v0*t1)/3
    local p1 = (c*g*t1*t1 + 0.5*v0*t1 + x0 - c*(x0+p3))/(3*c) - p2

    local curve0 = (p1 - x0).magnitude
    local curve1 = (p2 - p3).magnitude

    local b = (x0 - p3).unit
    local r1 = (p1 - x0).unit
    local u1 = r1:Cross(b).unit
    local r2 = (p2 - p3).unit
    local u2 = r2:Cross(b).unit
    b = u1:Cross(r1).unit

    local cf1 = CFrame.new(
        x0.x, x0.y, x0.z,
        r1.x, u1.x, b.x,
        r1.y, u1.y, b.y,
        r1.z, u1.z, b.z
    )
    local cf2 = CFrame.new(
        p3.x, p3.y, p3.z,
        r2.x, u2.x, b.x,
        r2.y, u2.y, b.y,
        r2.z, u2.z, b.z
    )
    return curve0, -curve1, cf1, cf2
end

local function TriggerTouchEvent()
    local Camera = workspace.CurrentCamera
    local xPos = Camera.ViewportSize.X / 2
    local yPos = Camera.ViewportSize.Y / 2
    VIM:SendTouchEvent(1, Enum.UserInputState.Begin.Value, xPos, yPos)
    task.wait(0.005)
    VIM:SendTouchEvent(1, Enum.UserInputState.End.Value, xPos, yPos)
end

-- UI Groups
local MagsGroup = Tabs.Catching:AddLeftGroupbox("Mags")
local FootballGroup = Tabs.Catching:AddLeftGroupbox("Football")
local SpeedGroup = Tabs.Catching:AddRightGroupbox("Speed")
local PullGroup = Tabs.Catching:AddRightGroupbox("Pull")

local JumpPowerGroup = Tabs.Physics:AddLeftGroupbox("Jump Power")
local PhysicsStuffGroup = Tabs.Physics:AddRightGroupbox("Jump Cooldown")
local DeleteOOBGroup = Tabs.Physics:AddRightGroupbox("Delete OOB")
local TackleGroup = Tabs.Physics:AddLeftGroupbox("Tackle")

local MenuGroup = Tabs["UI Settings"]:AddLeftGroupbox("Menu")

-- Mags Settings
MagsGroup:AddSlider("magsrange", {
    Text = "Range",
    Min = 0,
    Max = 20,
    Default = 0,
    Rounding = 1,
    Callback = function(Value)
        magsrange = Value
        if magson and showhitboxon then fitbalsize() end
    end
})

MagsGroup:AddToggle("mags", {
    Text = "Mags",
    Default = false,
    Callback = function(Value)
        magson = Value
        if not Value then
            remove()
        elseif showhitboxon then
            footballhitbox()
        end
    end
})

MagsGroup:AddSlider("magsdelay", {
    Text = "Delay",
    Min = 0,
    Max = 1,
    Default = 0,
    Rounding = 1,
    Callback = function(Value)
        magsdelay = Value
        magsdelayon = Value > 0
    end
})

MagsGroup:AddDropdown("magtype", {
    Values = {"Blatant", "Legit"},
    Default = "Blatant",
    Text = "Mag Type",
    Callback = function(Value)
        local newvalue = Value == "Blatant" and 20 or Value == "Legit" and 8 or 3
        if Options and Options.magsrange and Options.magsrange.SetValue then
            Options.magsrange:SetValue(newvalue)
        end
    end
})

MagsGroup:AddDropdown("magmode", {
    Values = {"FTI", "CFrame"},
    Default = "FTI",
    Text = "Mag Mode",
    Callback = function(Value)
        magmode = Value
    end
})

MagsGroup:AddToggle("showhitbox", {
    Text = "Show Hitbox",
    Default = false,
    Callback = function(Value)
        showhitboxon = Value
        if not Value then
            remove()
        elseif magson then
            footballhitbox()
        end
    end
})

MagsGroup:AddToggle("autocatch", {
    Text = "Auto Catch",
    Default = false,
    Callback = function(Value)
        autocatchon = Value
    end
})

MagsGroup:AddSlider("catchdistance", {
    Text = "Auto Catch Radius",
    Min = 1,
    Max = 25,
    Default = 10,
    Rounding = 1,
    Callback = function(Value)
        catchdistance = Value
    end
})

-- Football Settings
FootballGroup:AddToggle("ballpath", {
    Text = "Ball Path",
    Default = false,
    Callback = function(Value)
        ballpathOn = Value
        if not Value then
            if ballpathConnection then ballpathConnection:Disconnect() ballpathConnection = nil end
            for _, obj in ipairs(Workspace.Terrain:GetChildren()) do
                if obj:IsA("Beam") and obj.Name == "BallPath" then obj:Destroy()
                elseif obj:IsA("Attachment") and obj.Name == "BallPathAttachment" then obj:Destroy() end
            end
        else
            if ballpathConnection then ballpathConnection:Disconnect() end
            ballpathConnection = Workspace.ChildAdded:Connect(function(ball)
                if ball.Name:lower():find("football") and ball:IsA("BasePart") then
                    task.wait()
                    local vel = ball.Velocity
                    local pos = ball.Position
                    local c0, c1, cf1, cf2 = beamProjectile(Vector3.new(0, -28, 0), vel, pos, 10)
                    local beam = Instance.new("Beam")
                    local a0 = Instance.new("Attachment")
                    local a1 = Instance.new("Attachment")
                    beam.Color = ColorSequence.new{
                        ColorSequenceKeypoint.new(0, ballpathColor),
                        ColorSequenceKeypoint.new(1, ballpathColor)
                    }
                    beam.Transparency = NumberSequence.new{
                        NumberSequenceKeypoint.new(0, 1),
                        NumberSequenceKeypoint.new(0.01, 0), NumberSequenceKeypoint.new(0.99, 0), NumberSequenceKeypoint.new(1, 0.01)
                    }
                    beam.CurveSize0 = c0
                    beam.CurveSize1 = c1
                    beam.Segments = 1750
                    beam.Width0 = 1
                    beam.Width1 = 1
                    beam.Name = "BallPath"
                    beam.Parent = Workspace.Terrain

                    a0.Parent = Workspace.Terrain
                    a1.Parent = Workspace.Terrain
                    a0.Name = "BallPathAttachment"
                    a1.Name = "BallPathAttachment"
                    a0.CFrame = a0.Parent.CFrame:Inverse() * cf1
                    a1.CFrame = a1.Parent.CFrame:Inverse() * cf2
                    beam.Attachment0 = a0
                    beam.Attachment1 = a1

                    local heartbeatConn
                    heartbeatConn = RunService.Heartbeat:Connect(function()
                        if ball.Velocity.Magnitude < 1 then
                            heartbeatConn:Disconnect()
                            beam:Destroy()
                            a0:Destroy()
                            a1:Destroy()
                        end
                    end)
                    task.spawn(function()
                        repeat task.wait() until not ball.Parent or not Workspace:FindFirstChild(ball.Name)
                        if beam and beam.Parent then beam:Destroy() end
                        if a0 and a0.Parent then a0:Destroy() end
                        if a1 and a1.Parent then a1:Destroy() end
                    end)
                end
            end)
        end
    end
})

-- Speed Settings
SpeedGroup:AddSlider("SpeedValue", {
    Text = "Speed Value",
    Default = 0.1,
    Min = 0.1,
    Max = 1.2,
    Rounding = 1,
    Callback = function(value)
        speedValue = value
    end
})

SpeedGroup:AddToggle("CFrameSpeed", {
    Text = "CFrame Speed",
    Default = false,
    Callback = function(state)
        speedEnabled = state
        if state then
            startMovementSystem()
        else
            stopMovementSystem()
        end
    end
})

-- Pull Settings
PullGroup:AddToggle("pullvector", {
    Text = "Pull Vector",
    Default = false,
    Callback = function(Value)
        pullvector = Value
    end
})

PullGroup:AddSlider("pullvectorpower", {
    Text = "Pull Vector Speed",
    Min = 1,
    Max = 3,
    Default = 1,
    Rounding = 1,
    Callback = function(Value)
        pullvectorpower = Value
    end
})

PullGroup:AddSlider("pullvectordistance", {
    Text = "Pull Vector Radius",
    Min = 1,
    Max = 25,
    Default = 5,
    Rounding = 1,
    Callback = function(Value)
        pullvectordistance = Value
    end
})

-- Jump Power Settings
JumpPowerGroup:AddToggle("jumppower", {
    Text = "Jump Power",
    Default = false,
    Callback = function(Value) 
        jumpoweron = Value 
    end
})

JumpPowerGroup:AddSlider("jumpboost", {
    Text = "Jump Power",
    Min = 50,
    Max = 65,
    Default = 50,
    Rounding = 1,
    Callback = function(Value) 
        jumpboost = Value 
    end
})

-- Jump Cooldown Settings
PhysicsStuffGroup:AddToggle("nojpcooldown", {
    Text = "No Jump Cooldown",
    Default = false,
    Callback = function(Value)
        nojpcooldownon = Value
        if not Value and Player.Character then
            local connection = njcconnections[Player.Character]
            if connection then
                connection:Disconnect()
                njcconnections[Player.Character] = nil
            end
        elseif Value and Player.Character then
            njc(Player.Character)
        end
    end
})

-- Delete OOB Settings
DeleteOOBGroup:AddToggle("DeleteOOB", {
    Text = "Delete OOB",
    Default = false,
    Callback = function(Value)
        deleteOOBEnabled = Value
    end
})

-- Tackle Settings
TackleGroup:AddToggle("clicktackle", {
    Text = "Click Tackle",
    Default = false,
    Callback = function(Value)
        clicktackleon = Value
    end
})

TackleGroup:AddSlider("clicktacklerange", {
    Text = "Click Tackle Range",
    Min = 1,
    Max = 15,
    Default = 5,
    Rounding = 1,
    Callback = function(Value)
        clicktacklerange = Value
    end
})

-- Menu Settings
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 = false,
    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:AddDivider()
MenuGroup:AddLabel("Menu bind"):AddKeyPicker("MenuKeybind", { 
    Default = "LeftControl", 
    NoUI = true, 
    Text = "Menu keybind" 
})

MenuGroup:AddButton({
    Text = "Unload",
    Func = function()
        Library:Unload()
    end
})

Library.ToggleKeybind = Options.MenuKeybind

ThemeManager:SetLibrary(Library)
SaveManager:SetLibrary(Library)
SaveManager:IgnoreThemeSettings()
SaveManager:SetIgnoreIndexes({ "MenuKeybind" })
ThemeManager:SetFolder("Kali Hub")
SaveManager:SetFolder("KaliHub/FF2")

SaveManager:BuildConfigSection(Tabs["UI Settings"])
ThemeManager:ApplyToTab(Tabs["UI Settings"])

-- Initialize character
if Player.Character then
    rrrrrrrsizenugget(Player.Character)
    whenmoving(Player.Character)
    njc(Player.Character)
end

Player.CharacterAdded:Connect(function(char)
    rrrrrrrsizenugget(char)
    whenmoving(char)
    njc(char)
end)

-- Main Loops
RunService.Heartbeat:Connect(function(deltatime)
    if not magson then return end
    local cnp = tick()
    if magsdelayon and (cnp - lmgg) < magsdelay then return end
    local magthatbihfoo = getfutbal()
    if magthatbihfoo then
        local closestcatchpart = catch(magthatbihfoo)
        if closestcatchpart then
            if magmode == "CFrame" then
                magthatbihfoo.CFrame = closestcatchpart.CFrame
            else
                firetouchinterest(closestcatchpart, magthatbihfoo, 0)
                task.wait()
                firetouchinterest(closestcatchpart, magthatbihfoo, 1)
            end
        end
    end
    if magsdelayon then lmgg = cnp end
end)

Workspace.ChildAdded:Connect(function(child)
    if child.Name:lower():match("football") and magson and showhitboxon and child:IsA("BasePart") then
        hitboxx(child)
    end
end)

task.spawn(function()
    while task.wait(0.02) do
        if not autocatchon then continue end

        local ball, distance = findclosestball()
        if ball and distance <= catchdistance then
            TriggerTouchEvent()
        end
    end
end)

task.spawn(function()
    while task.wait(0.1) do
        if pullvector then
            local character = Player.Character
            if character then
                local humanoidrootpart = character:FindFirstChild("HumanoidRootPart")
                if humanoidrootpart then
                    for _, ball in pairs(Workspace:GetChildren()) do
                        if ball.Name:lower():match("football") and ball:IsA("BasePart") then
                            local distance = (humanoidrootpart.Position - ball.Position).Magnitude
                            if distance <= pullvectordistance then
                                local direction = (ball.Position - humanoidrootpart.Position).Unit
                                humanoidrootpart.AssemblyLinearVelocity = direction * pullvectorpower * 25
                            end
                        end
                    end
                end
            end
        end
    end
end)

task.spawn(function()
    while task.wait(1) do
        if deleteOOBEnabled then
            for _, obj in pairs(Workspace:GetChildren()) do
                if obj:IsA("BasePart") and obj.Position.Y < -100 then
                    obj:Destroy()
                end
            end
        end
    end
end)

UserInputService.InputBegan:Connect(function(input, gameprocessed)
    if gameprocessed then return end
    if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
        if not clicktackleon then return end
        local slveesor = findclosestsleveesor(clicktacklerange)
        if slveesor and slveesor:FindFirstChild("HumanoidRootPart") then
            local character = Player.Character
            if not character then return end
            local hrp = character:FindFirstChild("HumanoidRootPart")
            if not hrp then return end
            hrp.CFrame = slveesor.HumanoidRootPart.CFrame
        end
    end
end)

Library:Notify({
    Title = "Kali Hub",
    Description = "Script loaded successfully!",
    Time = 5,
})

Library:OnUnload(function()
    magson = false
    autocatchon = false
    speedEnabled = false
    pullvector = false
    jumpoweron = false
    nojpcooldownon = false
    clicktackleon = false
    ballpathOn = false
    deleteOOBEnabled = false
    
    for _, data in pairs(hitboxes) do
        if data.part and data.part.Parent then 
            data.part:Destroy() 
        end
    end
    
    local character = Player.Character
    if character then
        if catchresizeon then
            local catchleft = character:FindFirstChild("CatchLeft")
            local catchright = character:FindFirstChild("CatchRight")
            if catchleft then catchleft.Size = Vector3.new(0.75, 5, 1.5) end
            if catchright then catchright.Size = Vector3.new(0.75, 5, 1.5) end
        end
    end
    
    for char, connection in pairs(njcconnections) do
        if connection then connection:Disconnect() end
    end
    njcconnections = {}
    
    stopMovementSystem()
    
    if ballpathConnection then 
        ballpathConnection:Disconnect() 
    end
    
    for _, obj in ipairs(Workspace.Terrain:GetChildren()) do
        if obj:IsA("Beam") and obj.Name == "BallPath" then obj:Destroy()
        elseif obj:IsA("Attachment") and obj.Name == "BallPathAttachment" then obj:Destroy() end
    end
end)

Features & Information

Kali Hub Is Now Leaked -Aylon

Community Comments (3)

MadmanFWyouMadmanFWyouDec 10, 2025

its really good but detectable :( i got banned for 47 hours

MadmanFWyouMadmanFWyouDec 10, 2025

twice

montybaladimontybaladiDec 10, 2025

how do you do this on mobile

More Scripts for Football Fusion 2