--[[ FULL CHAT GUI SCRIPT - Delta Executor - Works on mobile - Drag enabled - ??? - Can see yourself messages --]] local player = game.Players.LocalPlayer -- Clear old GUI local old = player.PlayerGui:FindFirstChild("FullChatGUI") if old then old:Destroy() end -- Create GUI local gui = Instance.new("ScreenGui") gui.Name = "FullChatGUI" gui.Parent = player.PlayerGui gui.ResetOnSpawn = false -- Main Frame local frame = Instance.new("Frame") frame.Size = UDim2.new(0, 380, 0, 450) frame.Position = UDim2.new(0.5, -190, 0.5, -225) frame.BackgroundColor3 = Color3.fromRGB(35, 35, 45) frame.BackgroundTransparency = 0.1 frame.BorderSizePixel = 0 frame.Parent = gui -- DRAG FUNCTIONALITY local dragging = false local dragStart local frameStart frame.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = true dragStart = input.Position frameStart = frame.Position end end) frame.InputEnded:Connect(function(input) dragging = false end) game:GetService("UserInputService").InputChanged:Connect(function(input) if dragging and (input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseMovement) then local delta = input.Position - dragStart frame.Position = UDim2.new(frameStart.X.Scale, frameStart.X.Offset + delta.X, frameStart.Y.Scale, frameStart.Y.Offset + delta.Y) end end) -- Title Bar local title = Instance.new("TextLabel") title.Size = UDim2.new(1, 0, 0, 40) title.BackgroundColor3 = Color3.fromRGB(55, 55, 70) title.Text = "≡≡≡ BUBBLE CHAT ≡≡≡" title.TextColor3 = Color3.fromRGB(255, 255, 255) title.Font = Enum.Font.GothamBold title.TextSize = 16 title.Parent = frame -- Close Button local close = Instance.new("TextButton") close.Size = UDim2.new(0, 35, 0, 35) close.Position = UDim2.new(1, -40, 0, 2) close.BackgroundColor3 = Color3.fromRGB(200, 60, 60) close.Text = "X" close.TextColor3 = Color3.fromRGB(255, 255, 255) close.Font = Enum.Font.GothamBold close.TextSize = 16 close.Parent = title close.MouseButton1Click:Connect(function() gui:Destroy() end) -- Chat Display (ScrollingFrame) local chatDisplay = Instance.new("ScrollingFrame") chatDisplay.Size = UDim2.new(1, -10, 1, -110) chatDisplay.Position = UDim2.new(0, 5, 0, 45) chatDisplay.BackgroundColor3 = Color3.fromRGB(25, 25, 35) chatDisplay.BackgroundTransparency = 0.2 chatDisplay.BorderSizePixel = 0 chatDisplay.CanvasSize = UDim2.new(0, 0, 0, 0) chatDisplay.ScrollBarThickness = 6 chatDisplay.Parent = frame local messageLayout = Instance.new("UIListLayout") messageLayout.Parent = chatDisplay messageLayout.Padding = UDim.new(0, 5) -- Input Area local inputArea = Instance.new("Frame") inputArea.Size = UDim2.new(1, -10, 0, 55) inputArea.Position = UDim2.new(0, 5, 1, -60) inputArea.BackgroundTransparency = 1 inputArea.Parent = frame -- Text Box local textBox = Instance.new("TextBox") textBox.Size = UDim2.new(0.7, -5, 1, 0) textBox.Position = UDim2.new(0, 0, 0, 0) textBox.BackgroundColor3 = Color3.fromRGB(60, 60, 75) textBox.TextColor3 = Color3.fromRGB(255, 255, 255) textBox.PlaceholderText = "Type your message..." textBox.PlaceholderColor3 = Color3.fromRGB(150, 150, 170) textBox.Font = Enum.Font.Gotham textBox.TextSize = 14 textBox.ClearTextOnFocus = false textBox.Parent = inputArea -- Send Button local sendButton = Instance.new("TextButton") sendButton.Size = UDim2.new(0, 70, 1, 0) sendButton.Position = UDim2.new(0.73, 0, 0, 0) sendButton.BackgroundColor3 = Color3.fromRGB(0, 120, 215) sendButton.Text = "SEND" sendButton.TextColor3 = Color3.fromRGB(255, 255, 255) sendButton.Font = Enum.Font.GothamBold sendButton.TextSize = 15 sendButton.Parent = inputArea local buttonCorner = Instance.new("UICorner") buttonCorner.CornerRadius = UDim.new(0, 6) buttonCorner.Parent = sendButton -- Username colors local userColors = {} local colorList = { Color3.fromRGB(0, 120, 215), Color3.fromRGB(0, 160, 80), Color3.fromRGB(200, 80, 200), Color3.fromRGB(220, 120, 0), Color3.fromRGB(180, 60, 60), Color3.fromRGB(0, 180, 180), } local function getUserColor(name) if not userColors[name] then userColors[name] = colorList[math.random(#colorList)] end return userColors[name] end -- Add message to display local function addMessage(sender, message) local msgFrame = Instance.new("Frame") msgFrame.Size = UDim2.new(1, 0, 0, 32) msgFrame.BackgroundTransparency = 1 msgFrame.Parent = chatDisplay local nameLabel = Instance.new("TextLabel") nameLabel.Size = UDim2.new(0, 95, 1, 0) nameLabel.BackgroundTransparency = 1 nameLabel.Text = sender .. ":" nameLabel.TextColor3 = getUserColor(sender) nameLabel.Font = Enum.Font.GothamBold nameLabel.TextSize = 13 nameLabel.TextXAlignment = Enum.TextXAlignment.Left nameLabel.Parent = msgFrame local msgLabel = Instance.new("TextLabel") msgLabel.Size = UDim2.new(1, -105, 1, 0) msgLabel.Position = UDim2.new(0, 105, 0, 0) msgLabel.BackgroundTransparency = 1 msgLabel.TextColor3 = Color3.fromRGB(255, 255, 255) msgLabel.Font = Enum.Font.Gotham msgLabel.TextSize = 13 msgLabel.TextXAlignment = Enum.TextXAlignment.Left msgLabel.Text = message msgLabel.TextWrapped = true msgLabel.Parent = msgFrame task.wait(0.05) chatDisplay.CanvasPosition = Vector2.new(0, chatDisplay.CanvasSize.Y.Offset) end -- Send to Roblox chat (everyone sees) local function sendToRoblox(message) pcall(function() local remote = game:GetService("ReplicatedStorage"):FindFirstChild("DefaultChatSystemChatEvents") if remote and remote:FindFirstChild("SayMessageRequest") then remote.SayMessageRequest:FireServer(message, "All") end end) end -- Create bubble above player local function createBubble(message) local character = player.Character if not character then character = player.CharacterAdded:Wait() end local head = character:FindFirstChild("Head") if not head then return end pcall(function() game:GetService("Chat"):Chat(head, message) end) end -- Send message local function sendMessage() local message = textBox.Text if message == "" then return end addMessage(player.Name, message) sendToRoblox(message) createBubble(message) textBox.Text = "" end -- Listen for other players local function listenForMessages() pcall(function() local remote = game:GetService("ReplicatedStorage"):FindFirstChild("DefaultChatSystemChatEvents") if remote and remote:FindFirstChild("OnMessageDone") then remote.OnMessageDone.OnClientEvent:Connect(function(data) if data.FromSpeaker and data.FromSpeaker ~= player.Name then addMessage(data.FromSpeaker, data.Message) end end) end end) end -- Start listening listenForMessages() -- Button click sendButton.MouseButton1Click:Connect(sendMessage) -- Enter key textBox.FocusLost:Connect(function(enter) if enter then sendMessage() end end) -- Welcome message addMessage("System", "Chat ready! Drag the title bar to move.", false) print("✅ Full Chat GUI loaded!")