Unlock Chat
Key RequiredUniversal

Unlock Chat

Universal ScriptTonicostaTonicosta 2.3K views 1K executesUpdated Jan 22, 2026
5.0/ 5(1 votes)
10100% Positive
Lua Script•252 lines (8876 chars)
--[[
    DELTA CHAT FIX - CORREÇÃO DE SOBREPOSIÇÃO
    - Corrigido: Bug de texto empilhado/sobreposto.
    - Mantido: Visualização de Dias da Conta.
    - Mantido: Envio para chat original.
]]

local Players = game:GetService("Players")
local CoreGui = game:GetService("CoreGui")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local UserInputService = game:GetService("UserInputService")
local StarterGui = game:GetService("StarterGui")

local LocalPlayer = Players.LocalPlayer

-- 1. Limpeza Garantida
local GUI_NAME = "DeltaFixedChat_v2"
pcall(function()
    if CoreGui:FindFirstChild(GUI_NAME) then
        CoreGui[GUI_NAME]:Destroy()
    end
    -- Tenta desativar o chat nativo visualmente se possível
    StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.Chat, false)
end)

local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = GUI_NAME
ScreenGui.ResetOnSpawn = false -- Importante para não sumir ao morrer
ScreenGui.Parent = CoreGui

-- 2. Estrutura Principal
local ChatFrame = Instance.new("Frame")
ChatFrame.Name = "MainFrame"
ChatFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
ChatFrame.BackgroundTransparency = 0.2
ChatFrame.BorderSizePixel = 0
ChatFrame.Position = UDim2.new(0, 20, 0, 100)
ChatFrame.Size = UDim2.new(0, 320, 0, 220)
ChatFrame.ClipsDescendants = true -- Impede texto de sair da caixa
ChatFrame.Active = true
ChatFrame.Parent = ScreenGui

-- Barra Superior
local TopBar = Instance.new("Frame")
TopBar.Name = "Header"
TopBar.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
TopBar.BackgroundTransparency = 0.4
TopBar.Size = UDim2.new(1, 0, 0, 30)
TopBar.Parent = ChatFrame

local Title = Instance.new("TextLabel")
Title.Text = "Chat Global (Anti-Bug)"
Title.Size = UDim2.new(1, -40, 1, 0)
Title.BackgroundTransparency = 1
Title.TextColor3 = Color3.new(1,1,1)
Title.Font = Enum.Font.GothamBold
Title.TextSize = 14
Title.Parent = TopBar

local MinBtn = Instance.new("TextButton")
MinBtn.Text = "-"
MinBtn.Size = UDim2.new(0, 40, 0, 30)
MinBtn.Position = UDim2.new(1, -40, 0, 0)
MinBtn.BackgroundColor3 = Color3.fromRGB(200, 40, 40)
MinBtn.TextColor3 = Color3.new(1,1,1)
MinBtn.Font = Enum.Font.GothamBold
MinBtn.Parent = TopBar

-- Área de Rolagem (Onde estava o bug)
local Scroll = Instance.new("ScrollingFrame")
Scroll.Name = "MessageContainer"
Scroll.BackgroundTransparency = 1
Scroll.Position = UDim2.new(0, 5, 0, 35)
Scroll.Size = UDim2.new(1, -10, 1, -75) -- Espaço calculado para não sobrar
Scroll.CanvasSize = UDim2.new(0, 0, 0, 0) -- Será ajustado via script
Scroll.ScrollBarThickness = 6
Scroll.Parent = ChatFrame

local Layout = Instance.new("UIListLayout")
Layout.Parent = Scroll
Layout.SortOrder = Enum.SortOrder.LayoutOrder
Layout.Padding = UDim.new(0, 4) -- Espaço entre mensagens

-- Correção do Bug: Atualizar tamanho do scroll manualmente
Layout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function()
    Scroll.CanvasSize = UDim2.new(0, 0, 0, Layout.AbsoluteContentSize.Y + 10)
    -- Auto scroll para baixo suavemente
    Scroll.CanvasPosition = Vector2.new(0, Layout.AbsoluteContentSize.Y)
end)

-- Input Box
local InputContainer = Instance.new("Frame")
InputContainer.BackgroundTransparency = 1
InputContainer.Position = UDim2.new(0, 5, 1, -35)
InputContainer.Size = UDim2.new(1, -10, 0, 30)
InputContainer.Parent = ChatFrame

local Box = Instance.new("TextBox")
Box.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Box.BackgroundTransparency = 0.1
Box.Size = UDim2.new(1, 0, 1, 0)
Box.Font = Enum.Font.SourceSans
Box.TextSize = 16
Box.PlaceholderText = "Toque aqui para falar..."
Box.Text = ""
Box.TextColor3 = Color3.new(0,0,0)
Box.ClearTextOnFocus = false
Box.TextWrapped = true
Box.Parent = InputContainer

local UICorner = Instance.new("UICorner")
UICorner.CornerRadius = UDim.new(0, 6)
UICorner.Parent = Box

-- 3. Sistema de Arrastar (Mobile)
local dragging, dragInput, dragStart, startPos
local function update(input)
    local delta = input.Position - dragStart
    ChatFrame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
end
TopBar.InputBegan:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
        dragging = true
        dragStart = input.Position
        startPos = ChatFrame.Position
        input.Changed:Connect(function()
            if input.UserInputState == Enum.UserInputState.End then dragging = false end
        end)
    end
end)
TopBar.InputChanged:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then dragInput = input end
end)
UserInputService.InputChanged:Connect(function(input) if input == dragInput and dragging then update(input) end end)

-- 4. Funções de Chat
local function SendMessage(text)
    -- Fallback systems para garantir envio
    local Replicated = game:GetService("ReplicatedStorage")
    local DefaultChat = Replicated:FindFirstChild("DefaultChatSystemChatEvents")
    local SayRequest = DefaultChat and DefaultChat:FindFirstChild("SayMessageRequest")

    if SayRequest then
        SayRequest:FireServer(text, "All")
    else
        local TCS = game:GetService("TextChatService")
        if TCS.ChatInputBarConfiguration.TargetTextChannel then
             TCS.ChatInputBarConfiguration.TargetTextChannel:SendAsync(text)
        else
            game.Players.LocalPlayer.Chatted:Fire(text)
        end
    end
end

Box.FocusLost:Connect(function(enter)
    if enter and Box.Text ~= "" then
        SendMessage(Box.Text)
        Box.Text = ""
    end
end)

-- Função de Criação de Mensagem (CORRIGIDA)
local function CreateMessageLabel(player, message)
    -- Cria um frame invisível para segurar o texto (evita sobreposição)
    local MsgContainer = Instance.new("Frame")
    MsgContainer.BackgroundTransparency = 1
    MsgContainer.Size = UDim2.new(1, 0, 0, 0) -- Começa com 0
    MsgContainer.AutomaticSize = Enum.AutomaticSize.Y -- Cresce sozinho
    MsgContainer.Parent = Scroll
    
    local Label = Instance.new("TextLabel")
    Label.BackgroundTransparency = 1
    Label.Size = UDim2.new(1, 0, 0, 0)
    Label.AutomaticSize = Enum.AutomaticSize.Y
    Label.Font = Enum.Font.SourceSansBold
    Label.TextSize = 16
    Label.TextWrapped = true
    Label.TextXAlignment = Enum.TextXAlignment.Left
    Label.RichText = true
    Label.TextColor3 = Color3.new(1,1,1)
    Label.TextStrokeTransparency = 0.7
    Label.TextStrokeColor3 = Color3.new(0,0,0)
    Label.Parent = MsgContainer
    
    -- Lógica de Dias da Conta
    local statsText = "[?]"
    local nameColor = "#FFFFFF"
    local pName = "Sistema"
    
    if player then
        pName = player.Name
        local days = player.AccountAge or 0
        statsText = string.format("[%sd]", days)
        
        if player.TeamColor then
            local c = player.TeamColor.Color
            nameColor = string.format("#%02x%02x%02x", c.R*255, c.G*255, c.B*255)
        end
    else
        nameColor = "#FFFF00"
    end
    
    Label.Text = string.format('<font color="#AAAAAA">%s</font> <font color="%s">[%s]:</font> %s', statsText, nameColor, pName, message)
    
    -- Limpeza (Mantém apenas as últimas 30 mensagens para não pesar)
    if #Scroll:GetChildren() > 30 then
        -- O primeiro filho é o Layout, então removemos o segundo
        local old = Scroll:GetChildren()[2]
        if old and old:IsA("Frame") then old:Destroy() end
    end
end

-- 5. Listener de Mensagens
local function SetupListener()
    local ChatEvents = ReplicatedStorage:FindFirstChild("DefaultChatSystemChatEvents")
    if ChatEvents and ChatEvents:FindFirstChild("OnMessageDoneFiltering") then
        ChatEvents.OnMessageDoneFiltering.OnClientEvent:Connect(function(data)
            local pName = data.FromSpeaker
            local msg = data.Message
            local player = Players:FindFirstChild(pName)
            CreateMessageLabel(player, msg)
        end)
    else
        -- Fallback universal
        local function onChat(plr)
            plr.Chatted:Connect(function(msg) CreateMessageLabel(plr, msg) end)
        end
        for _, plr in pairs(Players:GetPlayers()) do onChat(plr) end
        Players.PlayerAdded:Connect(onChat)
    end
end
SetupListener()

-- Minimizar
local minimized = false
MinBtn.MouseButton1Click:Connect(function()
    minimized = not minimized
    if minimized then
        ChatFrame.Size = UDim2.new(0, 320, 0, 30)
        Scroll.Visible = false
        InputContainer.Visible = false
        MinBtn.Text = "+"
    else
        ChatFrame.Size = UDim2.new(0, 320, 0, 220)
        Scroll.Visible = true
        InputContainer.Visible = true
        MinBtn.Text = "-"
    end
end)

-- Mensagem de Boas-vindas
CreateMessageLabel(nil, "Chat Delta Corrigido. Seus dias de conta: " .. LocalPlayer.AccountAge)

Features & Information

Sei la

Community Comments (8)

l15042000l15042000Jan 22, 2026

everyone can see?

Replying to @l15042000
TonicostaTonicostaJan 27, 2026

@l15042000 It is guaranteed in the future, yes.

AoshiAoshiJan 22, 2026

ChatGPT

Replying to @Aoshi
JaxxyJaxxyJan 22, 2026

@Aoshi shut the * up

Replying to @Jaxxy
AoshiAoshiJan 22, 2026

@Jaxxy Skid bro, chatgpt

Replying to @Aoshi
JaxxyJaxxyJan 22, 2026

@Aoshi No, it ain't.

Replying to @Jaxxy
AoshiAoshiJan 22, 2026

@Jaxxy Its ChatGPT bro, r u dumb or smth?

okopokopJan 22, 2026

isso daí não unlock o chat não, isso a* faz um chat costumizado

More Scripts for Universal Scripts