
Key RequiredUniversal

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)



its really good but detectable :( i got banned for 47 hours
twice
how do you do this on mobile