
Key RequiredUniversal

repeat task.wait() until game:IsLoaded()
if game.GameId == 6505338302 then
local Players = game:GetService("Players")
local TweenService = game:GetService("TweenService")
local HttpService = game:GetService("HttpService")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Workspace = game:GetService("Workspace")
local player = Players.LocalPlayer
local plr = player
-- ==================== PULL VECTOR VARIABLES ====================
local pullVectorEnabled = false
local smoothPullEnabled = false
local isPullingBall = false
local isSmoothPulling = false
local cframeSpeedEnabled = false
local isCFrameMoving = false
local hitboxEnabled = false
local offsetDistance = 18
local magnetSmoothness = 0.1
local updateInterval = 0.1
local maxPullDistance = 150
local cframeSpeed = 1.5
local hitboxSize = 10
local playerHitboxSize = 5
local playerHitboxTransparency = 0.7
local playerHitboxEnabled = false
local playerHitboxConnection = nil
-- ==================== PLAYER VARIABLES ====================
local flyEnabled = false
local isFlying = false
local teleportForwardEnabled = false
local jumpPowerEnabled = false
local autoKickEnabled = false
local isAutoKicking = false
local staminaDepletionEnabled = false
local staminaDepletionRate = 0
local OldStam = 100
local flySpeed = 50
local customJumpPower = 50
local kickPower = 0.95
local kickAccuracy = 0.08
local flyBodyVelocity = nil
local flyBodyGyro = nil
local jumpConnection = nil
local hitboxParts = {}
local visualParts = {}
local originalSizes = {}
-- ==================== CHARACTER SETUP ====================
local character = plr.Character or plr.CharacterAdded:Wait()
local humanoidRootPart = character:WaitForChild("HumanoidRootPart")
local humanoid = character:WaitForChild("Humanoid")
plr.CharacterAdded:Connect(function(char)
character = char
humanoidRootPart = char:WaitForChild("HumanoidRootPart")
humanoid = char:WaitForChild("Humanoid")
end)
-- ==================== GET FOOTBALL FUNCTION ====================
local function getFootball()
for _, player in ipairs(Players:GetPlayers()) do
if player.Character then
local charBall = player.Character:FindFirstChild("Football")
if charBall then
return nil
end
local gameObjects = Workspace:FindFirstChild(player.Name)
if gameObjects then
local gameObjectsFolder = gameObjects:FindFirstChild("GAMEOBJECTS")
if gameObjectsFolder then
local ball = gameObjectsFolder:FindFirstChild("Football")
if ball then
return nil
end
end
end
end
end
local football = Workspace:FindFirstChild("Football")
if football and football:IsA("BasePart") then
return football
end
for _, obj in ipairs(Workspace:GetDescendants()) do
if obj.Name == "Football" and obj:IsA("BasePart") then
local isInPlayer = false
for _, player in ipairs(Players:GetPlayers()) do
if player.Character and obj:IsDescendantOf(player.Character) then
isInPlayer = true
break
end
end
if not isInPlayer then
return obj
end
end
end
return nils
end
-- ==================== TELEPORT TO BALL ====================
local function teleportToBall()
local ball = getFootball()
if ball and humanoidRootPart then
local ballPosition = ball.Position
local direction = ball.CFrame.LookVector
local targetPosition = ballPosition + (direction * offsetDistance) - Vector3.new(0, 1.5, 0) + Vector3.new(0, 5.197499752044678 / 6, 0)
local lookDirection = (ballPosition - humanoidRootPart.Position).Unit
humanoidRootPart.CFrame = CFrame.new(targetPosition, targetPosition + lookDirection)
end
end
-- ==================== AUTOKICK FUNCTION ====================
local function performAutoKick()
if isAutoKicking then return end
isAutoKicking = true
spawn(function()
local args = {kickAccuracy, kickPower}
local success, err = pcall(function()
game:GetService("ReplicatedStorage"):WaitForChild("Packages"):WaitForChild("Knit")
:WaitForChild("Services"):WaitForChild("ControlService"):WaitForChild("RE")
:WaitForChild("KickValues"):FireServer(unpack(args))
end)
if not success then
warn("Failed to fire KickValues:", err)
isAutoKicking = false
return
end
local kickSuccess, kickErr = pcall(function()
game:GetService("ReplicatedStorage"):WaitForChild("Packages"):WaitForChild("Knit")
:WaitForChild("Services"):WaitForChild("ControlService"):WaitForChild("RE")
:WaitForChild("Kick"):FireServer()
end)
if not kickSuccess then
warn("Failed to fire Kick:", kickErr)
end
wait(0.3)
isAutoKicking = false
end)
end
local function startCFrameSpeed()
if isCFrameMoving then return end
isCFrameMoving = true
spawn(function()
while cframeSpeedEnabled and isCFrameMoving do
if humanoidRootPart and character then
local moveDirection = humanoid.MoveDirection
if moveDirection.Magnitude > 0 then
humanoidRootPart.CFrame = humanoidRootPart.CFrame + (moveDirection * cframeSpeed)
end
end
wait()
end
isCFrameMoving = false
end)
end
local function stopCFrameSpeed()
isCFrameMoving = false
end
-- ==================== SMOOTH PULL ====================
local function smoothTeleportToBall()
local ball = getFootball()
if ball and humanoidRootPart then
local ballVelocity = ball.Velocity
local ballSpeed = ballVelocity.Magnitude
local offset = (ballSpeed > 0) and (ballVelocity.Unit * offsetDistance) or Vector3.new(0, 0, 0)
local targetPosition = ball.Position + offset + Vector3.new(0, 3, 0)
local lookDirection = (ball.Position - humanoidRootPart.Position).Unit
humanoidRootPart.CFrame = humanoidRootPart.CFrame:Lerp(CFrame.new(targetPosition, targetPosition + lookDirection), magnetSmoothness)
end
end
-- ==================== TELEPORT FORWARD FUNCTION ====================
local function teleportForward()
if character and humanoidRootPart then
humanoidRootPart.CFrame = humanoidRootPart.CFrame + (humanoidRootPart.CFrame.LookVector * 3)
end
end
local function expandHitbox(targetPlayer)
if targetPlayer == player then return end
local character = targetPlayer.Character
if not character then return end
local hrp = character:FindFirstChild("HumanoidRootPart")
if not hrp then return end
if not originalSizes[targetPlayer.UserId] then
originalSizes[targetPlayer.UserId] = hrp.Size
end
hrp.Size = Vector3.new(hitboxSize, hitboxSize, hitboxSize)
hrp.Transparency = hitboxTransparency
hrp.CanCollide = false
end
local function restoreHitbox(targetPlayer)
local character = targetPlayer.Character
if not character then return end
local hrp = character:FindFirstChild("HumanoidRootPart")
if not hrp then return end
if originalSizes[targetPlayer.UserId] then
hrp.Size = originalSizes[targetPlayer.UserId]
else
hrp.Size = Vector3.new(2, 2, 1)
end
hrp.Transparency = 1
end
local function updateAllHitboxes()
for _, targetPlayer in ipairs(Players:GetPlayers()) do
if targetPlayer ~= player and targetPlayer.Character then
expandHitbox(targetPlayer)
end
end
end
local function enableHitboxes()
for _, targetPlayer in ipairs(Players:GetPlayers()) do
if targetPlayer ~= player and targetPlayer.Character then
expandHitbox(targetPlayer)
end
end
spawn(function()
while hitboxEnabled do
for _, targetPlayer in ipairs(Players:GetPlayers()) do
if targetPlayer ~= player and targetPlayer.Character then
local hrp = targetPlayer.Character:FindFirstChild("HumanoidRootPart")
if hrp then
hrp.Size = Vector3.new(hitboxSize, hitboxSize, hitboxSize)
hrp.Transparency = hitboxTransparency
hrp.CanCollide = false
end
end
end
wait(0.1)
end
end)
end
local function disableHitboxes()
for _, targetPlayer in ipairs(Players:GetPlayers()) do
if targetPlayer ~= player then
restoreHitbox(targetPlayer)
end
end
originalSizes = {}
end
-- ==================== INPUT HANDLING ====================
UserInputService.InputBegan:Connect(function(input, gameProcessed)
if gameProcessed then return end
if input.UserInputType == Enum.UserInputType.MouseButton1 or
(input.UserInputType == Enum.UserInputType.Gamepad1 and input.KeyCode == Enum.KeyCode.ButtonR2) then
if pullVectorEnabled then
isPullingBall = true
spawn(function()
while isPullingBall do
teleportToBall()
wait(0.05)
end
end)
end
if smoothPullEnabled then
isSmoothPulling = true
spawn(function()
while isSmoothPulling do
smoothTeleportToBall()
wait(updateInterval)
end
end)
end
elseif input.UserInputType == Enum.UserInputType.Keyboard then
if teleportForwardEnabled and input.KeyCode == Enum.KeyCode.Z then
teleportForward()
elseif autoKickEnabled and input.KeyCode == Enum.KeyCode.L then
performAutoKick()
end
end
end)
UserInputService.InputEnded:Connect(function(input, gameProcessed)
if input.UserInputType == Enum.UserInputType.MouseButton1 or
(input.UserInputType == Enum.UserInputType.Gamepad1 and input.KeyCode == Enum.KeyCode.ButtonR2) then
isPullingBall = false
isSmoothPulling = false
end
end)
-- ==================== FLUENT UI SETUP ====================
local Library = loadstring(game:HttpGetAsync("https://github.com/ActualMasterOogway/Fluent-Renewed/releases/latest/download/Fluent.luau"))()
local SaveManager = loadstring(game:HttpGetAsync("https://raw.githubusercontent.com/ActualMasterOogway/Fluent-Renewed/master/Addons/SaveManager.luau"))()
local InterfaceManager = loadstring(game:HttpGetAsync("https://raw.githubusercontent.com/ActualMasterOogway/Fluent-Renewed/master/Addons/InterfaceManager.luau"))()
local Window = Library:CreateWindow{
Title = "Kali Hub | Football Legends",
SubTitle = "by @wrl11",
TabWidth = 160,
Size = UDim2.fromOffset(830, 525),
Resize = true,
MinSize = Vector2.new(470, 380),
Acrylic = true,
Theme = "Dark",
MinimizeKey = Enum.KeyCode.LeftControl
}
local Tabs = {
Main = Window:CreateTab{
Title = "Main",
Icon = "phosphor-football-bold"
},
Player = Window:CreateTab{
Title = "Player",
Icon = "user"
},
Settings = Window:CreateTab{
Title = "Settings",
Icon = "settings"
}
}
-- ==================== PULL VECTOR UI ====================
local LegitPullSection = Tabs.Main:CreateSection("Legit Pull Vector")
LegitPullSection:CreateToggle("SmoothPull", {
Title = "Legit Pull Vector (M1)",
Default = false,
Callback = function(value)
smoothPullEnabled = value
end
})
LegitPullSection:CreateSlider("MagnetSmoothness", {
Title = "Vector Smoothing",
Description = "Lower = smoother, Higher = faster",
Default = 0.05,
Min = 0.01,
Max = 1.0,
Rounding = 2,
Callback = function(value)
magnetSmoothness = value
end
})
local PullVectorSection = Tabs.Main:CreateSection("Pull Vector")
PullVectorSection:CreateToggle("PullVector", {
Title = "Pull Vector (M1)",
Default = false,
Callback = function(value)
pullVectorEnabled = value
end
})
PullVectorSection:CreateSlider("OffsetDistance", {
Title = "Offset Distance",
Description = "Distance in front of the ball (5-15 recommended)",
Default = 9,
Min = 5,
Max = 30,
Rounding = 0,
Callback = function(value)
offsetDistance = value
end
})
PullVectorSection:CreateSlider("MaxPullDistance", {
Title = "Max Pull Distance",
Description = "Maximum distance to pull from",
Default = 150,
Min = 1,
Max = 300,
Rounding = 0,
Callback = function(value)
maxPullDistance = value
end
})
-- ==================== PLAYER TAB ====================
local CFrameSpeedSection = Tabs.Player:CreateSection("CFrame Speed")
CFrameSpeedSection:CreateToggle("CFrameSpeed", {
Title = "CFrame Speed",
Description = "Move using CFrame instead of WalkSpeed",
Default = false,
Callback = function(value)
cframeSpeedEnabled = value
if value then
startCFrameSpeed()
else
stopCFrameSpeed()
end
end
})
CFrameSpeedSection:CreateSlider("CFrameSpeedValue", {
Title = "CFrame Speed",
Description = "Speed multiplier for CFrame movement",
Default = 1.5,
Min = 0.5,
Max = 5,
Rounding = 1,
Callback = function(value)
cframeSpeed = value
end
})
local JumpPowerSection = Tabs.Player:CreateSection("JumpPower")
JumpPowerSection:CreateToggle("JumpPowerToggle", {
Title = "JumpPower",
Description = "Increases your jump height",
Default = false,
Callback = function(value)
jumpPowerEnabled = value
if value then
if jumpConnection then jumpConnection:Disconnect() end
jumpConnection = humanoid.Jumping:Connect(function()
if jumpPowerEnabled and humanoidRootPart then
local jumpVelocity = Vector3.new(0, customJumpPower, 0)
humanoidRootPart.Velocity = Vector3.new(humanoidRootPart.Velocity.X, 0, humanoidRootPart.Velocity.Z) + jumpVelocity
end
end)
else
if jumpConnection then jumpConnection:Disconnect() end
jumpConnection = nil
end
end
})
JumpPowerSection:CreateSlider("JumpPowerValue", {
Title = "Custom JumpPower",
Default = 50,
Min = 10,
Max = 200,
Rounding = 0,
Callback = function(value)
customJumpPower = value
end
})
local FlySection = Tabs.Player:CreateSection("Fly")
FlySection:CreateToggle("FlyToggle", {
Title = "Fly",
Description = "Allows your character to fly",
Default = false,
Callback = function(value)
flyEnabled = value
if value then
if not flyBodyVelocity then
flyBodyVelocity = Instance.new("BodyVelocity")
flyBodyVelocity.MaxForce = Vector3.new(100000, 100000, 100000)
flyBodyVelocity.Velocity = Vector3.new(0, 0, 0)
flyBodyVelocity.Parent = humanoidRootPart
flyBodyGyro = Instance.new("BodyGyro")
flyBodyGyro.MaxTorque = Vector3.new(100000, 100000, 100000)
flyBodyGyro.P = 1000
flyBodyGyro.D = 100
flyBodyGyro.Parent = humanoidRootPart
isFlying = true
spawn(function()
while isFlying do
local camera = Workspace.CurrentCamera
local moveDirection = Vector3.new(0, 0, 0)
if UserInputService:IsKeyDown(Enum.KeyCode.W) then moveDirection = moveDirection + camera.CFrame.LookVector end
if UserInputService:IsKeyDown(Enum.KeyCode.S) then moveDirection = moveDirection - camera.CFrame.LookVector end
if UserInputService:IsKeyDown(Enum.KeyCode.A) then moveDirection = moveDirection - camera.CFrame.RightVector end
if UserInputService:IsKeyDown(Enum.KeyCode.D) then moveDirection = moveDirection + camera.CFrame.RightVector end
if UserInputService:IsKeyDown(Enum.KeyCode.Space) then moveDirection = moveDirection + Vector3.new(0, 1, 0) end
if UserInputService:IsKeyDown(Enum.KeyCode.LeftShift) then moveDirection = moveDirection - Vector3.new(0, 1, 0) end
if moveDirection.Magnitude > 0 then
flyBodyVelocity.Velocity = moveDirection.Unit * flySpeed
else
flyBodyVelocity.Velocity = Vector3.new(0, 0, 0)
end
wait()
end
end)
end
else
if flyBodyVelocity then flyBodyVelocity:Destroy() flyBodyVelocity = nil end
if flyBodyGyro then flyBodyGyro:Destroy() flyBodyGyro = nil end
isFlying = false
end
end
})
FlySection:CreateSlider("FlySpeed", {
Title = "Fly Speed",
Default = 50,
Min = 10,
Max = 200,
Rounding = 0,
Callback = function(value)
flySpeed = value
end
})
local TeleportSection = Tabs.Player:CreateSection("Teleport")
TeleportSection:CreateToggle("TeleportForward", {
Title = "Teleport Forward (Z)",
Description = "Teleports you forward 3 studs",
Default = false,
Callback = function(value)
teleportForwardEnabled = value
end
})
local AutoKickSection = Tabs.Player:CreateSection("Auto Kick")
AutoKickSection:CreateToggle("AutoKick", {
Title = "Auto Kick (L)",
Description = "Automatically kicks the ball when pressed",
Default = false,
Callback = function(value)
autoKickEnabled = value
end
})
AutoKickSection:CreateSlider("KickPower", {
Title = "Kick Power",
Description = "Power of the kick (Recommended 0.95)",
Default = 0.95,
Min = 0,
Max = 1,
Rounding = 2,
Callback = function(value)
kickPower = value
end
})
AutoKickSection:CreateSlider("KickAccuracy", {
Title = "Kick Accuracy",
Description = "Accuracy of the kick (Recommended 0.1)",
Default = 0.1,
Min = 0,
Max = 1,
Rounding = 2,
Callback = function(value)
kickAccuracy = value
end
})
-- ==================== FINALIZE UI ====================
SaveManager:SetLibrary(Library)
InterfaceManager:SetLibrary(Library)
SaveManager:IgnoreThemeSettings()
SaveManager:SetIgnoreIndexes{}
InterfaceManager:SetFolder("kalihub")
SaveManager:SetFolder("kalihub/football-legends")
InterfaceManager:BuildInterfaceSection(Tabs.Settings)
SaveManager:BuildConfigSection(Tabs.Settings)
Window:SelectTab(1)
Library:Notify{
Title = "Kali Hub",
Content = "Football Legends loaded!",
Duration = 5
}
SaveManager:LoadAutoloadConfig()
print("✅ Football Legends - Kali Hub by @wrl11 and @aylonthegiant")
end



Whats the best pull sets?
how do i use the scripts