KFC HUB V2
Key RequiredUniversal

KFC HUB V2

Universal Scriptdudes_creationsdudes_creations 693 views 198 executesUpdated Mar 25, 2026
Unrated
00
Lua Script•456 lines (19849 chars)
-- KFC HUB — FULL SCRIPT (LocalScript)
-- Paste into StarterPlayerScripts. This version fixes aim smoothness mapping:
-- Slider 0..100 where 0 = fully snappy/instant, higher = slower smoothing.
-- Mouse-based aim first (mousemoverel), camera fallback if not available.

-- ====== SERVICES & HELPERS ======
local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer or Players.PlayerAdded:Wait()
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")

local function safeHttpGet(url)
    local ok, res = pcall(function() return game:HttpGet(url, true) end)
    if ok then return res end
    warn("HttpGet failed:", url, res)
    return nil
end

-- ====== LOAD RAYFIELD ======
local rfRaw = safeHttpGet("https://sirius.menu/rayfield")
if not rfRaw then
    warn("Rayfield fetch failed. UI won't load.")
    return
end
local Rayfield = loadstring(rfRaw)()

-- ====== THEME ======
local KFCTheme = {
    TextColor = Color3.fromRGB(255,255,255),
    Background = Color3.fromRGB(196,0,0),
    Topbar = Color3.fromRGB(38,28,2),
    Shadow = Color3.fromRGB(20,20,20),
    NotificationBackground = Color3.fromRGB(38,28,2),
    NotificationActionsBackground = Color3.fromRGB(245,212,183),
    TabBackground = Color3.fromRGB(38,28,2),
    TabStroke = Color3.fromRGB(196,0,0),
    TabBackgroundSelected = Color3.fromRGB(245,212,183),
    TabTextColor = Color3.fromRGB(255,255,255),
    SelectedTabTextColor = Color3.fromRGB(38,28,2),
    ElementBackground = Color3.fromRGB(60,30,10),
    ElementBackgroundHover = Color3.fromRGB(245,212,183),
    SecondaryElementBackground = Color3.fromRGB(38,28,2),
    ElementStroke = Color3.fromRGB(196,0,0),
    SecondaryElementStroke = Color3.fromRGB(245,212,183),
    SliderBackground = Color3.fromRGB(245,212,183),
    SliderProgress = Color3.fromRGB(255,255,255),
    SliderStroke = Color3.fromRGB(196,0,0),
    ToggleBackground = Color3.fromRGB(60,30,10),
    ToggleEnabled = Color3.fromRGB(255,255,255),
    ToggleDisabled = Color3.fromRGB(100,50,20),
    ToggleEnabledStroke = Color3.fromRGB(255,255,255),
    ToggleDisabledStroke = Color3.fromRGB(100,50,20),
    ToggleEnabledOuterStroke = Color3.fromRGB(245,212,183),
    ToggleDisabledOuterStroke = Color3.fromRGB(60,30,10),
    DropdownSelected = Color3.fromRGB(245,212,183),
    DropdownUnselected = Color3.fromRGB(60,30,10),
    InputBackground = Color3.fromRGB(100,50,20),
    InputStroke = Color3.fromRGB(60,30,10),
    PlaceholderColor = Color3.fromRGB(255,255,255)
}

-- ====== CREATE WINDOW & TABS ======
local Window = Rayfield:CreateWindow({
    Name = "KFC Hub",
    LoadingTitle = "Eat Fried Chicken",
    LoadingSubtitle = "by DudesCreations",
    ShowText = "KFC",
    Theme = KFCTheme,
    ToggleUIKeybind = "K",
    ConfigurationSaving = { Enabled = true, FolderName = nil, FileName = "KFC_Hub_Config" },
    Discord = { Enabled = false },
    KeySystem = false
})

local MainTab = Window:CreateTab("Main")
local CombatTab = Window:CreateTab("Combat")
local BloxFruitsTab = Window:CreateTab("Blox Fruits")
local GameHubsTab = Window:CreateTab("Game Hubs")

-- ====== SENSE (ESP lib) ======
local senseRaw = safeHttpGet("https://sirius.menu/sense")
local Sense = nil
if senseRaw then
    Sense = loadstring(senseRaw)()
else
    warn("Sense (ESP) fetch failed — ESP toggle will notify and be disabled.")
end

-- ====== ESP CONFIG ======
local ESP_Enabled = false
local function ApplyESPConfig(enabled)
    if not Sense then return end
    Sense.whitelist = {}
    Sense.sharedSettings = {
        textSize = 13, textFont = 2, limitDistance = true, maxDistance = 700, useTeamColor = false
    }
    Sense.teamSettings.enemy = {
        enabled = enabled,
        box = true,
        boxColor = { Color3.fromRGB(255,255,255), 1 },
        boxOutline = true,
        boxFill = true,
        boxFillColor = { Color3.fromRGB(245,212,183), 0.06 },
        healthBar = true,
        healthBarOutline = true,
        healthyColor = Color3.fromRGB(120,220,120),
        dyingColor = Color3.fromRGB(240,120,120),
        distance = true,
        distanceColor = { Color3.fromRGB(200,200,200), 1 },
        name = true,
        nameColor = { Color3.fromRGB(255,255,255), 1 },
        nameOutline = false,
        tracer = true,
        tracerColor = { Color3.fromRGB(196,0,0), 1 },
        offScreenArrow = false,
        chams = false
    }
    Sense.teamSettings.friendly = { enabled = false }
end

local function EnableESP()
    if ESP_Enabled or not Sense then return end
    ESP_Enabled = true
    ApplyESPConfig(true)
    pcall(function() Sense.Load() end)
end

local function DisableESP()
    if not ESP_Enabled or not Sense then return end
    ESP_Enabled = false
    ApplyESPConfig(false)
    pcall(function() Sense.Unload() end)
end

CombatTab:CreateToggle({
    Name = "Modern ESP",
    CurrentValue = false,
    Callback = function(val)
        if not Sense then
            Rayfield:Notify({ Title = "ESP", Content = "Unavailable (fetch failed)", Duration = 3 })
            return
        end
        if val then EnableESP() else DisableESP() end
    end
})

-- ====== AIM SYSTEM (mouse-based primary) ======
local targetPart = "Head"
local aimFeatureEnabled = false
local markerEnabled = false
local aimBind = { kind = "KeyCode", val = Enum.KeyCode.Q }
local holdToAim = true
local aimHeld = false
local aimToggleActive = false
local smoothness = 18 -- user-facing slider 0..100 (0 = snappy)
local drawingAvailable = pcall(function() return Drawing end)
local mousemoverelAvailable = (typeof(mousemoverel) == "function")
local mouse = LocalPlayer:GetMouse()

-- UI controls
CombatTab:CreateDropdown({
    Name = "Target Body Part",
    Options = {"Head", "HumanoidRootPart", "UpperTorso"},
    CurrentOption = targetPart,
    Callback = function(opt) targetPart = opt end
})

CombatTab:CreateToggle({
    Name = "Enable Aim (hold bind / toggle)",
    CurrentValue = false,
    Callback = function(v)
        aimFeatureEnabled = v
        Rayfield:Notify({Title="Aim", Content=(v and "Enabled (use bind to aim)" or "Disabled"), Duration=2})
    end
})

CombatTab:CreateToggle({
    Name = "Hold to Aim (ON = hold, OFF = toggle)",
    CurrentValue = holdToAim,
    Callback = function(v) holdToAim = v end
})

local keyOptions = {"Q","E","R","F","T","Y","Z","X","C","V","MouseButton1","MouseButton2"}
CombatTab:CreateDropdown({
    Name = "Aim Keybind",
    Options = keyOptions,
    CurrentOption = "Q",
    Callback = function(opt)
        if opt == "MouseButton1" then
            aimBind.kind = "UserInputType"; aimBind.val = Enum.UserInputType.MouseButton1
        elseif opt == "MouseButton2" then
            aimBind.kind = "UserInputType"; aimBind.val = Enum.UserInputType.MouseButton2
        else
            aimBind.kind = "KeyCode"; aimBind.val = Enum.KeyCode[opt]
        end
    end
})

-- Smoothness slider: 0..100 where 0 = instant/snappy
CombatTab:CreateSlider({
    Name = "Aim Smoothness (0 = snappy)",
    Range = {0,100},
    Increment = 1,
    CurrentValue = smoothness,
    Callback = function(v) smoothness = v end
})

CombatTab:CreateToggle({
    Name = "Show Marker + Line",
    CurrentValue = markerEnabled,
    Callback = function(v) markerEnabled = v end
})

-- Input handling
UserInputService.InputBegan:Connect(function(input, processed)
    if processed then return end
    if aimBind.kind == "KeyCode" then
        if input.UserInputType == Enum.UserInputType.Keyboard and input.KeyCode == aimBind.val then
            if holdToAim then aimHeld = true else aimToggleActive = not aimToggleActive end
        end
    else
        if input.UserInputType == aimBind.val then
            if holdToAim then aimHeld = true else aimToggleActive = not aimToggleActive end
        end
    end
end)
UserInputService.InputEnded:Connect(function(input)
    if aimBind.kind == "KeyCode" then
        if input.UserInputType == Enum.UserInputType.Keyboard and input.KeyCode == aimBind.val then
            if holdToAim then aimHeld = false end
        end
    else
        if input.UserInputType == aimBind.val then
            if holdToAim then aimHeld = false end
        end
    end
end)

local function isAimingNow()
    if not aimFeatureEnabled then return false end
    if holdToAim then return aimHeld end
    return aimToggleActive
end

-- Drawing helpers
local function safeNewCircle(pos, radius, color, thickness)
    if not drawingAvailable then return nil end
    local ok, obj = pcall(function()
        local c = Drawing.new("Circle")
        c.Position = pos
        c.Radius = radius
        c.Color = color
        c.Thickness = thickness or 2
        c.Visible = true
        return c
    end)
    if ok then return obj end
    return nil
end
local function safeNewLine(a,b,color,th)
    if not drawingAvailable then return nil end
    local ok, obj = pcall(function()
        local l = Drawing.new("Line")
        l.From = a; l.To = b; l.Color = color; l.Thickness = th or 1.5; l.Visible = true
        return l
    end)
    if ok then return obj end
    return nil
end

-- ====== RENDER LOOP ======
RunService.RenderStepped:Connect(function()
    local cam = workspace.CurrentCamera
    if not cam then return end

    -- find closest on-screen part to mouse
    local closestPart = nil
    local shortest = math.huge
    local mousePos = UserInputService:GetMouseLocation()
    for _, plr in pairs(Players:GetPlayers()) do
        if plr ~= LocalPlayer and plr.Character and plr.Character:FindFirstChild(targetPart) then
            local part = plr.Character[targetPart]
            local sp, onScreen = cam:WorldToViewportPoint(part.Position)
            if onScreen then
                local d = (Vector2.new(sp.X, sp.Y) - mousePos).Magnitude
                if d < shortest then shortest = d; closestPart = part end
            end
        end
    end

    if closestPart then
        local sp, onScreen = cam:WorldToViewportPoint(closestPart.Position)
        if onScreen and markerEnabled then
            local circle = safeNewCircle(Vector2.new(sp.X, sp.Y), 9, Color3.fromRGB(255,255,255), 2)
            if circle then task.delay(0.04, function() pcall(function() circle:Remove() end) end) end
            local center = Vector2.new(cam.ViewportSize.X/2, cam.ViewportSize.Y/2)
            local line = safeNewLine(center, Vector2.new(sp.X, sp.Y), Color3.fromRGB(196,0,0), 2)
            if line then task.delay(0.04, function() pcall(function() line:Remove() end) end) end
        end

        if isAimingNow() then
            local currentMouse = UserInputService:GetMouseLocation()
            local delta = Vector2.new(sp.X, sp.Y) - currentMouse

            -- If mouse movement injection is allowed, prefer it (works with custom FPS)
            if mousemoverelAvailable then
                if smoothness == 0 then
                    -- instant: move full delta
                    pcall(function() mousemoverel(delta.X, delta.Y) end)
                else
                    -- sensitivity mapping: smoothness 0 -> sensitivity 1, 100 -> sensitivity ~0.02
                    local sensitivity = math.clamp(1 - (smoothness / 100), 0.02, 1)
                    local move = delta * sensitivity * 0.6 -- multiplier tuned for feel
                    pcall(function() mousemoverel(move.X, move.Y) end)
                end
            else
                -- fallback to camera lerp/hard aim
                local ok = true
                if smoothness == 0 then
                    ok, _ = pcall(function()
                        local camPos = cam.CFrame.Position
                        cam.CFrame = CFrame.new(camPos, closestPart.Position)
                    end)
                else
                    local alpha = math.clamp(1 - (smoothness / 100), 0.01, 0.99)
                    ok, _ = pcall(function()
                        local camPos = cam.CFrame.Position
                        cam.CFrame = cam.CFrame:Lerp(CFrame.new(camPos, closestPart.Position), alpha)
                    end)
                end
                -- if camera setting fails, marker still helps user aim manually
            end
        end
    end
end)

-- ====== MAIN TAB: organized, working buttons (pcall wrapped) ======
MainTab:CreateSection("Admin")
MainTab:CreateButton({ Name = "Infinite Yield (IY)", Callback = function()
    pcall(function() loadstring(game:HttpGet("https://raw.githubusercontent.com/EdgeIY/infiniteyield/master/source", true))() end)
    Rayfield:Notify({Title="Loaded", Content="Infinite Yield", Duration=2})
end})
MainTab:CreateButton({ Name = "CMD-X Admin", Callback = function()
    pcall(function() loadstring(game:HttpGet("https://raw.githubusercontent.com/CMD-X/CMD-X/master/Source", true))() end)
    Rayfield:Notify({Title="Loaded", Content="CMD-X", Duration=2})
end})
MainTab:CreateButton({ Name = "Fates Admin", Callback = function()
    pcall(function() loadstring(game:HttpGet("https://raw.githubusercontent.com/fatesc/fates-admin/main/main.lua", true))() end)
    Rayfield:Notify({Title="Loaded", Content="Fates Admin", Duration=2})
end})
MainTab:CreateButton({ Name = "Homebrew Admin", Callback = function()
    pcall(function() loadstring(game:HttpGet("https://raw.githubusercontent.com/Syntaxx64/HomebrewAdmin/master/Main", true))() end)
    Rayfield:Notify({Title="Loaded", Content="Homebrew Admin", Duration=2})
end})
MainTab:CreateButton({ Name = "Nameless Admin", Callback = function()
    pcall(function() loadstring(game:HttpGet("https://raw.githubusercontent.com/BlackOut51/NamelessAdmin/master/main.lua", true))() end)
    Rayfield:Notify({Title="Loaded", Content="Nameless Admin", Duration=2})
end})

MainTab:CreateSection("Utilities")
MainTab:CreateButton({ Name = "FPS Boost", Callback = function()
    pcall(function() loadstring(game:HttpGet("https://rawscripts.net/raw/FPS-Boost-Script", true))() end)
    Rayfield:Notify({Title="Loaded", Content="FPS Boost", Duration=2})
end})
MainTab:CreateButton({ Name = "Fly Script", Callback = function()
    pcall(function() loadstring(game:HttpGet("https://rawscripts.net/raw/Fly-V7-Script", true))() end)
    Rayfield:Notify({Title="Loaded", Content="Fly", Duration=2})
end})
MainTab:CreateButton({ Name = "WalkSpeed / JumpPower UI", Callback = function()
    pcall(function() loadstring(game:HttpGet("https://rawscripts.net/raw/WalkSpeed-JumpPower-GUI", true))() end)
    Rayfield:Notify({Title="Loaded", Content="WalkSpeed UI", Duration=2})
end})
MainTab:CreateButton({ Name = "Noclip Toggle", Callback = function()
    pcall(function() loadstring(game:HttpGet("https://rawscripts.net/raw/Noclip-Toggle-Script", true))() end)
    Rayfield:Notify({Title="Loaded", Content="Noclip", Duration=2})
end})
MainTab:CreateButton({ Name = "Auto Chest Collector", Callback = function()
    pcall(function() loadstring(game:HttpGet("https://rawscripts.net/raw/Auto-Chest-Collector", true))() end)
    Rayfield:Notify({Title="Loaded", Content="Chest Collector", Duration=2})
end})
MainTab:CreateButton({ Name = "Auto Fish GUI", Callback = function()
    pcall(function() loadstring(game:HttpGet("https://rawscripts.net/raw/Auto-Fish-GUI", true))() end)
    Rayfield:Notify({Title="Loaded", Content="Auto Fish", Duration=2})
end})

MainTab:CreateSection("Hubs & Fun")
MainTab:CreateButton({ Name = "InfiniteFun IY", Callback = function()
    pcall(function() loadstring(game:HttpGet("https://raw.githubusercontent.com/Xane123/InfiniteFun_IY/master/source", true))() end)
    Rayfield:Notify({Title="Loaded", Content="InfiniteFun IY", Duration=2})
end})
MainTab:CreateButton({ Name = "Fun Tenna Dance", Callback = function()
    pcall(function() loadstring(game:HttpGet("https://rawscripts.net/raw/Universal-Script-Fe-Tenna-Dance-58322", true))() end)
    Rayfield:Notify({Title="Loaded", Content="Tenna Dance", Duration=2})
end})
MainTab:CreateButton({ Name = "Goner FE Hat", Callback = function()
    pcall(function() loadstring(game:HttpGet("https://rawscripts.net/raw/Universal-Script-FE-Goner-Hat-Script-UNIVERSAL-DA-HOOD-SUPPORT-15569", true))() end)
    Rayfield:Notify({Title="Loaded", Content="Goner FE", Duration=2})
end})
MainTab:CreateButton({ Name = "FE Animations (R6)", Callback = function()
    pcall(function() loadstring(game:HttpGet("https://rawscripts.net/raw/Universal-Script-FE-R6-Animations-80487", true))() end)
    Rayfield:Notify({Title="Loaded", Content="R6 Animations", Duration=2})
end})
MainTab:CreateButton({ Name = "DomainX Utils", Callback = function()
    pcall(function() loadstring(game:HttpGet("https://shlex.dev/release/domainx/latest.lua", true))() end)
    Rayfield:Notify({Title="Loaded", Content="DomainX", Duration=2})
end})
MainTab:CreateButton({ Name = "Hydra Hub", Callback = function()
    pcall(function() loadstring(game:HttpGet("https://raw.githubusercontent.com/HydraHubTeam/Hydra/main/source", true))() end)
    Rayfield:Notify({Title="Loaded", Content="Hydra Hub", Duration=2})
end})
MainTab:CreateButton({ Name = "Owl Hub", Callback = function()
    pcall(function() loadstring(game:HttpGet("https://raw.githubusercontent.com/OwlHubTeam/Owl/main/init.lua", true))() end)
    Rayfield:Notify({Title="Loaded", Content="Owl Hub", Duration=2})
end})

-- ====== BLOX FRUITS TAB ======
BloxFruitsTab:CreateSection("Blox Fruits Hubs")
BloxFruitsTab:CreateButton({ Name = "Redz Hub", Callback = function()
    pcall(function() loadstring(game:HttpGet("https://raw.githubusercontent.com/realredz/BloxFruits/master/Source.lua", true))() end)
    Rayfield:Notify({Title="Loaded", Content="Redz Hub", Duration=2})
end})
BloxFruitsTab:CreateButton({ Name = "Speed Hub X", Callback = function()
    pcall(function() loadstring(game:HttpGet("https://raw.githubusercontent.com/AhmadV99/Speed-Hub-X/main/Speed%20Hub%20X.lua", true))() end)
    Rayfield:Notify({Title="Loaded", Content="Speed Hub X", Duration=2})
end})
BloxFruitsTab:CreateButton({ Name = "Aurora Hub", Callback = function()
    pcall(function() loadstring(game:HttpGet("https://raw.githubusercontent.com/Jadelly261/BloxFruits/main/Aurora", true))() end)
    Rayfield:Notify({Title="Loaded", Content="Aurora Hub", Duration=2})
end})
BloxFruitsTab:CreateButton({ Name = "Raito Hub", Callback = function()
    pcall(function() loadstring(game:HttpGet("https://raw.githubusercontent.com/Efe0626/RaitoHub/main/Script", true))() end)
    Rayfield:Notify({Title="Loaded", Content="Raito Hub", Duration=2})
end})
BloxFruitsTab:CreateButton({ Name = "Banana Hub", Callback = function()
    pcall(function() loadstring(game:HttpGet("https://raw.githubusercontent.com/Nghia11n/Banana-Hub/main/bananahub.lua", true))() end)
    Rayfield:Notify({Title="Loaded", Content="Banana Hub", Duration=2})
end})

-- ====== GAME HUBS TAB ======
GameHubsTab:CreateSection("Universal Game Hubs")
GameHubsTab:CreateButton({ Name = "Hydra Universal", Callback = function()
    pcall(function() loadstring(game:HttpGet("https://raw.githubusercontent.com/HydraHubTeam/Hydra/main/source", true))() end)
    Rayfield:Notify({Title="Loaded", Content="Hydra Universal", Duration=2})
end})
GameHubsTab:CreateButton({ Name = "DomainX", Callback = function()
    pcall(function() loadstring(game:HttpGet("https://shlex.dev/release/domainx/latest.lua", true))() end)
    Rayfield:Notify({Title="Loaded", Content="DomainX", Duration=2})
end})
GameHubsTab:CreateButton({ Name = "Project Krampus", Callback = function()
    pcall(function() loadstring(game:HttpGet("https://raw.githubusercontent.com/ProjectKrampusTeam/krampus/main/source", true))() end)
    Rayfield:Notify({Title="Loaded", Content="Krampus Tools", Duration=2})
end})

-- ====== FINISH ======
Rayfield:Notify({ Title = "KFC Hub Loaded", Content = "ESP, Aim, and Scripts ready 🍗", Duration = 4 })
print("KFC Hub initialized. Drawing available:", drawingAvailable, "mousemoverel:", mousemoverelAvailable)

Features & Information

Its a hub with aimbot.

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts