TCT Hub 14.0
Key RequiredUniversal

TCT Hub 14.0

Universal Scriptkhachthien1khachthien1 3K views 4.6K executesUpdated Feb 12, 2026
5.0/ 5(2 votes)
20100% Positive
Lua Script•364 lines (17966 chars)
local player = game:GetService("Players").LocalPlayer
local mouse = player:GetMouse()
local runService = game:GetService("RunService")
local debris = game:GetService("Debris")
local userInput = game:GetService("UserInputService")
local workspace = game:GetService("Workspace")
local lighting = game:GetService("Lighting")
local teleportService = game:GetService("TeleportService")
local camera = workspace.CurrentCamera

local startTime = tick()

local screenGui = Instance.new("ScreenGui")
screenGui.Name = "TCT_HUB_V14_1"
screenGui.ResetOnSpawn = false
pcall(function() screenGui.Parent = game:GetService("CoreGui") end)
if not screenGui.Parent then screenGui.Parent = player:WaitForChild("PlayerGui") end

local openBtn = Instance.new("TextButton", screenGui)
openBtn.Size = UDim2.new(0, 65, 0, 65)
openBtn.Position = UDim2.new(0, 20, 0.5, -32)
openBtn.BackgroundColor3 = Color3.fromRGB(15, 0, 0)
openBtn.Text = "TCT"
openBtn.TextColor3 = Color3.fromRGB(255, 0, 0)
openBtn.Font = Enum.Font.SourceSansBold
openBtn.TextSize = 24
openBtn.Visible = false
openBtn.Draggable = true
Instance.new("UICorner", openBtn)
Instance.new("UIStroke", openBtn).Color = Color3.fromRGB(255, 0, 0)

local mainFrame = Instance.new("Frame", screenGui)
mainFrame.Size = UDim2.new(0, 500, 0, 400)
mainFrame.Position = UDim2.new(0.5, -250, 0.3, 0)
mainFrame.BackgroundColor3 = Color3.fromRGB(10, 10, 10)
mainFrame.Active = true
mainFrame.Draggable = true
Instance.new("UIStroke", mainFrame).Color = Color3.fromRGB(255, 0, 0)

local topBar = Instance.new("Frame", mainFrame)
topBar.Size = UDim2.new(1, 0, 0, 40)
topBar.BackgroundColor3 = Color3.fromRGB(25, 0, 0)

local title = Instance.new("TextLabel", topBar)
title.Size = UDim2.new(1, -50, 1, 0)
title.Position = UDim2.new(0, 15, 0, 0)
title.Text = "TCT HUB | V14.1 | No Key"
title.TextColor3 = Color3.fromRGB(255, 0, 0)
title.BackgroundTransparency = 1
title.Font = Enum.Font.SourceSansBold
title.TextSize = 20
title.TextXAlignment = Enum.TextXAlignment.Left

local closeBtn = Instance.new("TextButton", topBar)
closeBtn.Size = UDim2.new(0, 40, 1, 0)
closeBtn.Position = UDim2.new(1, -40, 0, 0)
closeBtn.Text = "X"
closeBtn.TextColor3 = Color3.fromRGB(255, 0, 0)
closeBtn.BackgroundTransparency = 1
closeBtn.TextSize = 24
closeBtn.MouseButton1Click:Connect(function() mainFrame.Visible = false openBtn.Visible = true end)
openBtn.MouseButton1Click:Connect(function() mainFrame.Visible = true openBtn.Visible = false end)

local sideBar = Instance.new("Frame", mainFrame)
sideBar.Size = UDim2.new(0, 120, 1, -40)
sideBar.Position = UDim2.new(0, 0, 0, 40)
sideBar.BackgroundColor3 = Color3.fromRGB(15, 15, 15)

local container = Instance.new("Frame", mainFrame)
container.Size = UDim2.new(1, -130, 1, -50)
container.Position = UDim2.new(0, 125, 0, 45)
container.BackgroundTransparency = 1

local crosshair = Instance.new("Frame", screenGui)
crosshair.Size = UDim2.new(0, 12, 0, 12)
crosshair.Position = UDim2.new(0.5, -6, 0.5, -6)
crosshair.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
crosshair.Visible = false
Instance.new("UICorner", crosshair).CornerRadius = UDim.new(1, 0)
local crosshairStroke = Instance.new("UIStroke", crosshair)
crosshairStroke.Thickness = 1.5

local tabs = {}
local currentTab = nil

local function createTab(name)
    local btn = Instance.new("TextButton", sideBar)
    btn.Size = UDim2.new(1, 0, 0, 50)
    btn.Position = UDim2.new(0, 0, 0, #tabs * 50)
    btn.Text = name
    btn.BackgroundColor3 = Color3.fromRGB(15, 15, 15)
    btn.TextColor3 = Color3.fromRGB(150, 150, 150)
    btn.Font = Enum.Font.SourceSansBold
    btn.TextSize = 18
    
    local page = Instance.new("ScrollingFrame", container)
    page.Size = UDim2.new(1, 0, 1, 0)
    page.BackgroundTransparency = 1
    page.Visible = false
    page.ScrollBarThickness = 4
    page.ScrollBarImageColor3 = Color3.fromRGB(255, 0, 0)
    local layout = Instance.new("UIListLayout", page)
    layout.Padding = UDim.new(0, 8)
    layout.HorizontalAlignment = Enum.HorizontalAlignment.Center
    
    btn.MouseButton1Click:Connect(function()
        if currentTab then currentTab.btn.TextColor3 = Color3.fromRGB(150, 150, 150) currentTab.page.Visible = false end
        currentTab = {btn = btn, page = page}
        btn.TextColor3 = Color3.fromRGB(255, 0, 0)
        page.Visible = true
    end)
    table.insert(tabs, {btn = btn, page = page})
    return page
end

local playerTab = createTab("Player")
local visualTab = createTab("Visual")
local toolsTab = createTab("Tools")
local resizeTab = createTab("Resize")
local creditTab = createTab("Credit")

local vars = {
    Speed = 16, Jump = 50, InfJump = false, ShiftLock = false, 
    Pathway = false, GodMode = false, NoFog = false, FullBright = false,
    FOV = 70, ESP = false, AutoClick = false, AntiAFK = false,
    ResizeMode = false, SelectedPart = nil, FreezedPlayers = {},
    FakePlayer = false, FlingMode = false, Dummy = nil, AntiBan = false
}

local function createToggle(parent, text, callback)
    local btn = Instance.new("TextButton", parent)
    btn.Size = UDim2.new(0.95, 0, 0, 40); btn.BackgroundColor3 = Color3.fromRGB(25, 25, 25)
    btn.Text = "  " .. text .. ": OFF"; btn.TextColor3 = Color3.fromRGB(200, 200, 200)
    btn.TextSize = 18; btn.TextXAlignment = Enum.TextXAlignment.Left
    Instance.new("UICorner", btn)
    local on = false
    btn.MouseButton1Click:Connect(function()
        on = not on
        btn.Text = "  " .. text .. ": " .. (on and "ON" or "OFF")
        btn.TextColor3 = on and Color3.fromRGB(255, 0, 0) or Color3.fromRGB(200, 200, 200)
        callback(on)
    end)
    return btn
end

local function createSlider(parent, text, min, max, default, callback)
    local frame = Instance.new("Frame", parent)
    frame.Size = UDim2.new(0.95, 0, 0, 55); frame.BackgroundTransparency = 1
    local label = Instance.new("TextLabel", frame)
    label.Size = UDim2.new(1, 0, 0, 25); label.Text = text .. ": " .. default; label.TextColor3 = Color3.fromRGB(255, 0, 0); label.BackgroundTransparency = 1; label.TextSize = 17
    local bar = Instance.new("Frame", frame)
    bar.Size = UDim2.new(1, 0, 0, 8); bar.Position = UDim2.new(0, 0, 0.7, 0); bar.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
    local fill = Instance.new("Frame", bar)
    fill.Size = UDim2.new((default-min)/(max-min), 0, 1, 0); fill.BackgroundColor3 = Color3.fromRGB(255, 0, 0)
    local function update(input)
        local p = math.clamp((input.Position.X - bar.AbsolutePosition.X) / bar.AbsoluteSize.X, 0, 1)
        fill.Size = UDim2.new(p, 0, 1, 0)
        local val = math.floor(min + (max - min) * p)
        label.Text = text .. ": " .. val
        callback(val)
    end
    bar.InputBegan:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
            local con; con = userInput.InputChanged:Connect(function(inp) if inp.UserInputType == Enum.UserInputType.MouseMovement or inp.UserInputType == Enum.UserInputType.Touch then update(inp) end end)
            userInput.InputEnded:Connect(function(inp) if inp.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then con:Disconnect() end end)
        end
    end)
end

local function createButton(parent, text, callback)
    local btn = Instance.new("TextButton", parent)
    btn.Size = UDim2.new(0.95, 0, 0, 40); btn.BackgroundColor3 = Color3.fromRGB(40, 0, 0)
    btn.Text = text; btn.TextColor3 = Color3.fromRGB(255, 255, 255); btn.Font = Enum.Font.SourceSansBold; btn.TextSize = 18
    Instance.new("UICorner", btn)
    btn.MouseButton1Click:Connect(callback)
end

-- Tab Player
createSlider(playerTab, "Walk Speed", 16, 500, 16, function(v) vars.Speed = v end)
createSlider(playerTab, "Jump Power", 50, 500, 50, function(v) vars.Jump = v end)
createToggle(playerTab, "Infinite Jump", function(s) vars.InfJump = s end)
createToggle(playerTab, "Force Shiftlock", function(s) vars.ShiftLock = s crosshair.Visible = s end)
createToggle(playerTab, "Pathway (Neon Red)", function(s) vars.Pathway = s end)
createToggle(playerTab, "God Mode", function(s) vars.GodMode = s end)
createToggle(playerTab, "Fake Player (Dummy)", function(s)
    vars.FakePlayer = s
    if s then
        vars.Dummy = Instance.new("Part", workspace)
        vars.Dummy.Size = Vector3.new(2, 4, 1); vars.Dummy.Name = "FakePlayer_TCT"
        vars.Dummy.CanCollide = false; vars.Dummy.Transparency = 0.5; vars.Dummy.Color = Color3.fromRGB(255, 0, 0)
    else
        if vars.Dummy then vars.Dummy:Destroy() vars.Dummy = nil end
    end
end)
createToggle(playerTab, "Dummy Fling", function(s) vars.FlingMode = s end)

-- Freeze Player List
local freezeSection = Instance.new("Frame", playerTab)
freezeSection.Size = UDim2.new(0.95, 0, 0, 180); freezeSection.BackgroundTransparency = 1
local freezeTitle = Instance.new("TextLabel", freezeSection)
freezeTitle.Size = UDim2.new(1, 0, 0, 30); freezeTitle.Text = "--- Freeze Player List ---"; freezeTitle.TextColor3 = Color3.fromRGB(255, 0, 0); freezeTitle.BackgroundTransparency = 1; freezeTitle.TextSize = 19; freezeTitle.Font = Enum.Font.SourceSansBold

local freezeScroll = Instance.new("ScrollingFrame", freezeSection)
freezeScroll.Size = UDim2.new(1, 0, 1, -35); freezeScroll.Position = UDim2.new(0, 0, 0, 35); freezeScroll.BackgroundColor3 = Color3.fromRGB(20, 20, 20); freezeScroll.ScrollBarThickness = 3
Instance.new("UIListLayout", freezeScroll).Padding = UDim.new(0, 2)

local function updateFreeze()
    for _,v in pairs(freezeScroll:GetChildren()) do if v:IsA("TextButton") then v:Destroy() end end
    for _,p in pairs(game.Players:GetPlayers()) do
        local b = Instance.new("TextButton", freezeScroll)
        b.Size = UDim2.new(1, 0, 0, 35); b.Text = "  " .. p.Name; b.TextColor3 = vars.FreezedPlayers[p.Name] and Color3.fromRGB(255, 0, 0) or Color3.fromRGB(255, 255, 255)
        b.BackgroundColor3 = Color3.fromRGB(30, 30, 30); b.TextXAlignment = Enum.TextXAlignment.Left; b.TextSize = 17
        b.MouseButton1Click:Connect(function()
            vars.FreezedPlayers[p.Name] = not vars.FreezedPlayers[p.Name]
            b.TextColor3 = vars.FreezedPlayers[p.Name] and Color3.fromRGB(255, 0, 0) or Color3.fromRGB(255, 255, 255)
            if p.Character and p.Character:FindFirstChild("HumanoidRootPart") then p.Character.HumanoidRootPart.Anchored = vars.FreezedPlayers[p.Name] end
        end)
    end
    freezeScroll.CanvasSize = UDim2.new(0, 0, 0, #game.Players:GetPlayers() * 37)
end
updateFreeze()
game.Players.PlayerAdded:Connect(updateFreeze)
game.Players.PlayerRemoving:Connect(updateFreeze)

-- Tab Visuals
createToggle(visualTab, "No Fog", function(s) vars.NoFog = s end)
createToggle(visualTab, "Fullbright", function(s) vars.FullBright = s end)
createSlider(visualTab, "Field of View", 40, 120, 70, function(v) vars.FOV = v end)
createToggle(visualTab, "ESP Player", function(s) vars.ESP = s end)
createButton(visualTab, "Set Time: Day", function() lighting.ClockTime = 14 end)
createButton(visualTab, "Set Time: Night", function() lighting.ClockTime = 0 end)

-- Tab Tools
local statusLabel = Instance.new("TextLabel", toolsTab)
statusLabel.Size = UDim2.new(0.95, 0, 0, 65); statusLabel.BackgroundColor3 = Color3.fromRGB(20, 0, 0); statusLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
statusLabel.TextSize = 17; statusLabel.Text = "Loading Server Stats..."; Instance.new("UICorner", statusLabel)

createToggle(toolsTab, "Anti AFK", function(s) vars.AntiAFK = s end)
createToggle(toolsTab, "Anti Ban/Kick/AC", function(s) 
    vars.AntiBan = s
    if s then
        local mt = getrawmetatable(game)
        setreadonly(mt, false)
        local old = mt.__namecall
        mt.__namecall = newcclosure(function(self, ...)
            if getnamecallmethod() == "Kick" then return nil end
            return old(self, ...)
        end)
        
        local keywords = {"ban", "kick", "anticheat", "cheat", "check", "detect"}
        for _, obj in pairs(game:GetDescendants()) do
            pcall(function()
                local name = obj.Name:lower()
                for _, key in pairs(keywords) do
                    if name:find(key) then
                        obj:Destroy()
                        break
                    end
                end
            end)
        end
    end
end)
createButton(toolsTab, "Rejoin Server", function() teleportService:Teleport(game.PlaceId, player) end)
createButton(toolsTab, "Find Big Server", function()
    local res = game:HttpGet("https://games.roblox.com/v1/games/"..game.PlaceId.."/servers/Public?sortOrder=Desc&limit=100")
    local data = game:GetService("HttpService"):JSONDecode(res).data
    if #data > 0 then teleportService:TeleportToPlaceInstance(game.PlaceId, data[1].id) end
end)
createButton(toolsTab, "Find Small Server", function()
    local res = game:HttpGet("https://games.roblox.com/v1/games/"..game.PlaceId.."/servers/Public?sortOrder=Asc&limit=100")
    local data = game:GetService("HttpService"):JSONDecode(res).data
    if #data > 0 then teleportService:TeleportToPlaceInstance(game.PlaceId, data[1].id) end
end)

local kbFrame = Instance.new("Frame", screenGui)
kbFrame.Size = UDim2.new(0, 500, 0, 200); kbFrame.Position = UDim2.new(0.5, -250, 0.7, 0)
kbFrame.BackgroundColor3 = Color3.fromRGB(15, 15, 15); kbFrame.Visible = false
local kbStr = Instance.new("UIStroke", kbFrame); kbStr.Thickness = 2
task.spawn(function() while task.wait(0.01) do kbStr.Color = Color3.fromHSV(tick() % 5 / 5, 1, 1) end end)

createToggle(toolsTab, "Virtual Keyboard", function(s) kbFrame.Visible = s end)
createToggle(toolsTab, "Keyboard Drag", function(s) kbFrame.Draggable = s kbFrame.Active = s end)

-- Tab Resize
createToggle(resizeTab, "Select Mode (Click Part)", function(s) vars.ResizeMode = s end)
createSlider(resizeTab, "Resize Width (X)", 1, 100, 4, function(v) if vars.SelectedPart then vars.SelectedPart.Size = Vector3.new(v, vars.SelectedPart.Size.Y, vars.SelectedPart.Size.Z) end end)
createSlider(resizeTab, "Resize Height (Y)", 1, 100, 4, function(v) if vars.SelectedPart then vars.SelectedPart.Size = Vector3.new(vars.SelectedPart.Size.X, v, vars.SelectedPart.Size.Z) end end)
createSlider(resizeTab, "Resize Depth (Z)", 1, 100, 4, function(v) if vars.SelectedPart then vars.SelectedPart.Size = Vector3.new(vars.SelectedPart.Size.X, vars.SelectedPart.Size.Y, v) end end)

mouse.Button1Down:Connect(function()
    if vars.ResizeMode and mouse.Target and mouse.Target:IsA("BasePart") then
        vars.SelectedPart = mouse.Target
        local h = Instance.new("Highlight", vars.SelectedPart); h.FillColor = Color3.fromRGB(255, 0, 0); debris:AddItem(h, 0.5)
    end
end)

-- Tab Credit
local cLabel = Instance.new("TextLabel", creditTab)
cLabel.Size = UDim2.new(1, 0, 1, 0); cLabel.Text = "Made by Thienz\nVer: 14.1\nNo Key Version\nDiscord: Not yet"; cLabel.TextColor3 = Color3.fromRGB(255, 0, 0); cLabel.BackgroundTransparency = 1; cLabel.Font = Enum.Font.SourceSansBold; cLabel.TextSize = 26

-- Logic Loop
local lastPathPos = Vector3.new()
runService.RenderStepped:Connect(function()
    local char = player.Character
    local hum = char and char:FindFirstChildOfClass("Humanoid")
    local root = char and char:FindFirstChild("HumanoidRootPart")
    
    if hum and root then
        hum.WalkSpeed = vars.Speed
        hum.JumpPower = vars.Jump
        camera.FieldOfView = vars.FOV
        
        if vars.ShiftLock then
            userInput.MouseBehavior = Enum.MouseBehavior.LockCenter
            local lookVector = camera.CFrame.LookVector
            local rootPos = root.Position
            root.CFrame = CFrame.new(rootPos, rootPos + Vector3.new(lookVector.X, 0, lookVector.Z))
            
            local r = Ray.new(camera.CFrame.Position, camera.CFrame.LookVector * 500)
            local part = workspace:FindPartOnRay(r, char)
            if part and part.Parent:FindFirstChildOfClass("Humanoid") then
                crosshair.BackgroundColor3 = Color3.fromRGB(255, 0, 0)
            else
                crosshair.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
            end
        else
            if not vars.ResizeMode then
                userInput.MouseBehavior = Enum.MouseBehavior.Default
            end
        end
        
        if vars.GodMode then hum.Health = hum.MaxHealth end
        
        if vars.Pathway and (root.Position - lastPathPos).Magnitude > 3 then
            lastPathPos = root.Position
            local p = Instance.new("Part", workspace); p.Size = Vector3.new(4, 0.6, 4); p.Anchored = true; p.CFrame = root.CFrame * CFrame.new(0, -3.2, 0)
            p.Color = Color3.fromRGB(255, 0, 0); p.Material = Enum.Material.Neon; debris:AddItem(p, 1.5)
        end
        
        if vars.FakePlayer and vars.Dummy then
            if vars.FlingMode then
                vars.Dummy.Velocity = Vector3.new(0, 9999, 0)
                vars.Dummy.RotVelocity = Vector3.new(0, 9999, 0)
                vars.Dummy.CFrame = root.CFrame * CFrame.new(0, 0, -2)
            else
                vars.Dummy.CFrame = root.CFrame * CFrame.new(4, 0, 4)
            end
        end
    end
    
    if vars.FullBright then lighting.Brightness = 2 lighting.ClockTime = 14 lighting.FogEnd = 9e9 end
    
    local sTime = math.floor(workspace.DistributedGameTime)
    local pTime = math.floor(tick() - startTime)
    statusLabel.Text = string.format("Server Uptime: %d m %d s\nYour Playtime: %d m %d s", math.floor(sTime/60), sTime%60, math.floor(pTime/60), pTime%60)
end)

player.Idled:Connect(function() if vars.AntiAFK then game:GetService("VirtualUser"):CaptureController() game:GetService("VirtualUser"):ClickButton2(Vector2.new(0,0)) end end)
userInput.JumpRequest:Connect(function() if vars.InfJump and player.Character then player.Character:FindFirstChildOfClass("Humanoid"):ChangeState(3) end end)

tabs[1].btn.TextColor3 = Color3.fromRGB(255, 0, 0)
tabs[1].page.Visible = true
currentTab = tabs[1]

Features & Information

Path way Resize Part Freeze Player Vitural Keyboard Anti Gameplay Pause Infinite Jump Fullbright No Fog Antilag Walkspeed Jumppower HD Admin Set Day or Night (Client) Esp with username Rejoin And more No key needed
#Universal#No key#Anti Lag#No lag#Path way

Community Comments (2)

khachthien1khachthien1Feb 12, 2026

Please like and i will make no key script for custom game

gleb8282822gleb8282822Feb 12, 2026

👍👍👍👍👍👍👍👍👍👍👍👍

More Scripts for Universal Scripts