--[[ 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('%s [%s]: %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)