-- ONE LocalScript -- Put in StarterPlayer > StarterPlayerScripts local Players = game:GetService("Players") local TextChatService = game:GetService("TextChatService") local UserInputService = game:GetService("UserInputService") local TweenService = game:GetService("TweenService") local LP = Players.LocalPlayer local PG = LP:WaitForChild("PlayerGui") --================================================== -- COLORS --================================================== local BLUE = Color3.fromRGB(0,170,255) local CYAN = Color3.fromRGB(0,255,255) local PURPLE = Color3.fromRGB(150,70,255) local BG = Color3.fromRGB(7,9,14) local PANEL = Color3.fromRGB(15,18,27) local PANEL2 = Color3.fromRGB(24,28,40) local WHITE = Color3.fromRGB(245,248,255) local GRAY = Color3.fromRGB(145,150,165) --================================================== -- MAIN GUI --================================================== local GUI = Instance.new("ScreenGui") GUI.Name = "NexusChat" GUI.ResetOnSpawn = false GUI.IgnoreGuiInset = true GUI.Parent = PG local Main = Instance.new("Frame") Main.Size = UDim2.fromOffset(470,410) Main.Position = UDim2.new(.5,-235,.5,-205) Main.BackgroundColor3 = BG Main.BorderSizePixel = 0 Main.Active = true Main.Parent = GUI Instance.new("UICorner",Main).CornerRadius = UDim.new(0,25) local Border = Instance.new("UIStroke") Border.Color = BLUE Border.Thickness = 2 Border.Transparency = .1 Border.Parent = Main --================================================== -- GLOW --================================================== local Glow = Instance.new("Frame") Glow.Size = UDim2.new(1,45,1,45) Glow.Position = UDim2.fromOffset(-22,-22) Glow.BackgroundColor3 = BLUE Glow.BackgroundTransparency = .94 Glow.BorderSizePixel = 0 Glow.ZIndex = -1 Glow.Parent = Main Instance.new("UICorner",Glow).CornerRadius = UDim.new(0,32) task.spawn(function() while Main.Parent do TweenService:Create( Glow, TweenInfo.new(1.5,Enum.EasingStyle.Sine,Enum.EasingDirection.InOut), { BackgroundColor3 = CYAN, BackgroundTransparency = .87 } ):Play() TweenService:Create( Border, TweenInfo.new(1.5), {Color = CYAN} ):Play() task.wait(1.5) TweenService:Create( Glow, TweenInfo.new(1.5,Enum.EasingStyle.Sine,Enum.EasingDirection.InOut), { BackgroundColor3 = PURPLE, BackgroundTransparency = .94 } ):Play() TweenService:Create( Border, TweenInfo.new(1.5), {Color = PURPLE} ):Play() task.wait(1.5) end end) --================================================== -- TOP BAR --================================================== local Top = Instance.new("Frame") Top.Size = UDim2.new(1,0,0,72) Top.BackgroundColor3 = PANEL Top.BorderSizePixel = 0 Top.Active = true Top.Parent = Main Instance.new("UICorner",Top).CornerRadius = UDim.new(0,25) local Logo = Instance.new("TextLabel") Logo.Size = UDim2.fromOffset(54,54) Logo.Position = UDim2.fromOffset(10,9) Logo.BackgroundColor3 = BLUE Logo.Text = "⚡" Logo.TextSize = 29 Logo.Parent = Top Instance.new("UICorner",Logo).CornerRadius = UDim.new(0,17) local Title = Instance.new("TextLabel") Title.Size = UDim2.new(1,-190,0,30) Title.Position = UDim2.fromOffset(76,8) Title.BackgroundTransparency = 1 Title.Text = "NEXUS CHAT" Title.TextColor3 = WHITE Title.TextSize = 21 Title.Font = Enum.Font.GothamBlack Title.TextXAlignment = Enum.TextXAlignment.Left Title.Parent = Top local Status = Instance.new("TextLabel") Status.Size = UDim2.new(1,-190,0,20) Status.Position = UDim2.fromOffset(77,38) Status.BackgroundTransparency = 1 Status.Text = "● LOCAL VISUAL MODE" Status.TextColor3 = Color3.fromRGB(80,255,160) Status.TextSize = 11 Status.Font = Enum.Font.GothamBold Status.TextXAlignment = Enum.TextXAlignment.Left Status.Parent = Top local Min = Instance.new("TextButton") Min.Size = UDim2.fromOffset(42,42) Min.Position = UDim2.new(1,-100,0,15) Min.BackgroundColor3 = PANEL2 Min.Text = "—" Min.TextColor3 = WHITE Min.TextSize = 20 Min.Font = Enum.Font.GothamBold Min.Parent = Top Instance.new("UICorner",Min).CornerRadius = UDim.new(0,13) local Close = Instance.new("TextButton") Close.Size = UDim2.fromOffset(42,42) Close.Position = UDim2.new(1,-52,0,15) Close.BackgroundColor3 = Color3.fromRGB(55,25,40) Close.Text = "×" Close.TextColor3 = Color3.fromRGB(255,110,145) Close.TextSize = 25 Close.Font = Enum.Font.GothamBold Close.Parent = Top Instance.new("UICorner",Close).CornerRadius = UDim.new(0,13) --================================================== -- PLAYER SELECTOR --================================================== local PlayerArea = Instance.new("Frame") PlayerArea.Size = UDim2.new(1,-30,0,58) PlayerArea.Position = UDim2.fromOffset(15,87) PlayerArea.BackgroundColor3 = PANEL PlayerArea.BorderSizePixel = 0 PlayerArea.Parent = Main Instance.new("UICorner",PlayerArea).CornerRadius = UDim.new(0,16) local Avatar = Instance.new("ImageLabel") Avatar.Size = UDim2.fromOffset(46,46) Avatar.Position = UDim2.fromOffset(6,6) Avatar.BackgroundColor3 = PANEL2 Avatar.Parent = PlayerArea Instance.new("UICorner",Avatar).CornerRadius = UDim.new(0,13) local PlayerButton = Instance.new("TextButton") PlayerButton.Size = UDim2.new(1,-65,1,0) PlayerButton.Position = UDim2.fromOffset(62,0) PlayerButton.BackgroundTransparency = 1 PlayerButton.Text = "👤 Select a player..." PlayerButton.TextColor3 = GRAY PlayerButton.TextSize = 14 PlayerButton.Font = Enum.Font.Gotham PlayerButton.TextXAlignment = Enum.TextXAlignment.Left PlayerButton.Parent = PlayerArea --================================================== -- PLAYER DROPDOWN --================================================== local Dropdown = Instance.new("ScrollingFrame") Dropdown.Size = UDim2.new(1,-30,0,145) Dropdown.Position = UDim2.fromOffset(15,150) Dropdown.BackgroundColor3 = PANEL2 Dropdown.BorderSizePixel = 0 Dropdown.ScrollBarThickness = 4 Dropdown.Visible = false Dropdown.ZIndex = 20 Dropdown.Parent = Main Instance.new("UICorner",Dropdown).CornerRadius = UDim.new(0,15) local Layout = Instance.new("UIListLayout") Layout.Padding = UDim.new(0,5) Layout.Parent = Dropdown local Padding = Instance.new("UIPadding") Padding.PaddingTop = UDim.new(0,7) Padding.PaddingLeft = UDim.new(0,7) Padding.PaddingRight = UDim.new(0,7) Padding.Parent = Dropdown --================================================== -- MESSAGE BOX --================================================== local MessageBox = Instance.new("TextBox") MessageBox.Size = UDim2.new(1,-30,0,55) MessageBox.Position = UDim2.fromOffset(15,155) MessageBox.BackgroundColor3 = PANEL MessageBox.TextColor3 = WHITE MessageBox.PlaceholderColor3 = GRAY MessageBox.PlaceholderText = "✦ Type a message..." MessageBox.Text = "" MessageBox.TextSize = 14 MessageBox.Font = Enum.Font.Gotham MessageBox.ClearTextOnFocus = false MessageBox.TextXAlignment = Enum.TextXAlignment.Left MessageBox.Parent = Main Instance.new("UICorner",MessageBox).CornerRadius = UDim.new(0,16) --================================================== -- PREVIEW --================================================== local PreviewTitle = Instance.new("TextLabel") PreviewTitle.Size = UDim2.new(1,-30,0,20) PreviewTitle.Position = UDim2.fromOffset(15,220) PreviewTitle.BackgroundTransparency = 1 PreviewTitle.Text = "LIVE PREVIEW" PreviewTitle.TextColor3 = BLUE PreviewTitle.TextSize = 10 PreviewTitle.Font = Enum.Font.GothamBold PreviewTitle.TextXAlignment = Enum.TextXAlignment.Left PreviewTitle.Parent = Main local Preview = Instance.new("TextLabel") Preview.Size = UDim2.new(1,-30,0,38) Preview.Position = UDim2.fromOffset(15,240) Preview.BackgroundColor3 = PANEL Preview.Text = " Player: ..." Preview.TextColor3 = WHITE Preview.TextSize = 13 Preview.Font = Enum.Font.Gotham Preview.TextXAlignment = Enum.TextXAlignment.Left Preview.TextTruncate = Enum.TextTruncate.AtEnd Preview.Parent = Main Instance.new("UICorner",Preview).CornerRadius = UDim.new(0,12) --================================================== -- SEND BUTTON --================================================== local Send = Instance.new("TextButton") Send.Size = UDim2.new(1,-30,0,55) Send.Position = UDim2.fromOffset(15,290) Send.BackgroundColor3 = BLUE Send.Text = "⚡ SEND TO CHAT + BUBBLE" Send.TextColor3 = WHITE Send.TextSize = 14 Send.Font = Enum.Font.GothamBold Send.Parent = Main Instance.new("UICorner",Send).CornerRadius = UDim.new(0,15) --================================================== -- SELECTED PLAYER --================================================== local SelectedPlayer = nil local function UpdateAvatar(player) if not player then Avatar.Image = "" return end local ok,url = pcall(function() return Players:GetUserThumbnailAsync( player.UserId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size100x100 ) end) if ok then Avatar.Image = url end end local function UpdatePreview() local name = SelectedPlayer and SelectedPlayer.DisplayName or "You" local msg = MessageBox.Text if msg == "" then msg = "..." end Preview.Text = " " .. name .. ": " .. msg end MessageBox:GetPropertyChangedSignal("Text"):Connect(UpdatePreview) --================================================== -- PLAYER LIST --================================================== local function RefreshPlayers() for _,child in ipairs(Dropdown:GetChildren()) do if child:IsA("TextButton") then child:Destroy() end end for _,player in ipairs(Players:GetPlayers()) do local Button = Instance.new("TextButton") Button.Size = UDim2.new(1,0,0,38) Button.BackgroundColor3 = PANEL Button.Text = " " .. player.DisplayName .. " @" .. player.Name Button.TextColor3 = WHITE Button.TextSize = 12 Button.Font = Enum.Font.Gotham Button.TextXAlignment = Enum.TextXAlignment.Left Button.ZIndex = 21 Button.Parent = Dropdown Instance.new("UICorner",Button).CornerRadius = UDim.new(0,10) Button.Activated:Connect(function() SelectedPlayer = player PlayerButton.Text = "👤 " .. player.DisplayName PlayerButton.TextColor3 = WHITE UpdateAvatar(player) UpdatePreview() Dropdown.Visible = false end) end Dropdown.CanvasSize = UDim2.fromOffset(0,Layout.AbsoluteContentSize.Y + 15) end Players.PlayerAdded:Connect(RefreshPlayers) Players.PlayerRemoving:Connect(function(player) if SelectedPlayer == player then SelectedPlayer = nil PlayerButton.Text = "👤 Select a player..." PlayerButton.TextColor3 = GRAY Avatar.Image = "" UpdatePreview() end RefreshPlayers() end) PlayerButton.Activated:Connect(function() RefreshPlayers() Dropdown.Visible = not Dropdown.Visible end) --================================================== -- SHOW MESSAGE --================================================== local function ShowMessage(target,message) if not target or message == "" then return end -- Chat window local channels = TextChatService:FindFirstChild("TextChannels") if channels then local general = channels:FindFirstChild("RBXGeneral") if general then general:DisplaySystemMessage( "" .. target.DisplayName .. ": " .. message .. "" ) end end -- Bubble local character = target.Character if character then local head = character:FindFirstChild("Head") if head then TextChatService:DisplayBubble(head,message) end end end Send.Activated:Connect(function() -- Blank player = yourself local target = SelectedPlayer or LP local message = MessageBox.Text if message == "" then Send.Text = "⚠ TYPE A MESSAGE" task.wait(.8) Send.Text = "⚡ SEND TO CHAT + BUBBLE" return end ShowMessage(target,message) MessageBox.Text = "" Send.Text = "✓ SENT" TweenService:Create( Send, TweenInfo.new(.12), {Size = UDim2.new(1,-45,0,48)} ):Play() task.wait(.15) TweenService:Create( Send, TweenInfo.new(.12), {Size = UDim2.new(1,-30,0,55)} ):Play() task.wait(.5) Send.Text = "⚡ SEND TO CHAT + BUBBLE" end) --================================================== -- MINIMIZE --================================================== local minimized = false Min.Activated:Connect(function() minimized = not minimized for _,obj in ipairs(Main:GetChildren()) do if obj ~= Top and obj ~= Glow then obj.Visible = not minimized end end Main.Size = minimized and UDim2.fromOffset(470,72) or UDim2.fromOffset(470,410) Min.Text = minimized and "+" or "—" end) --================================================== -- CLOSE / REOPEN --================================================== local Reopen = Instance.new("TextButton") Reopen.Size = UDim2.fromOffset(68,68) Reopen.Position = UDim2.fromOffset(20,180) Reopen.BackgroundColor3 = BG Reopen.Text = "⚡" Reopen.TextSize = 30 Reopen.Visible = false Reopen.Parent = GUI Instance.new("UICorner",Reopen).CornerRadius = UDim.new(1,0) local ReopenStroke = Instance.new("UIStroke") ReopenStroke.Color = BLUE ReopenStroke.Thickness = 2 ReopenStroke.Parent = Reopen Close.Activated:Connect(function() Main.Visible = false Reopen.Visible = true end) Reopen.Activated:Connect(function() Main.Visible = true Reopen.Visible = false end) --================================================== -- DRAGGING — MOBILE + PC --================================================== local dragging = false local dragStart local startPos Top.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = Main.Position end end) UserInputService.InputChanged:Connect(function(input) if not dragging then return end if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then local delta = input.Position - dragStart Main.Position = UDim2.new( startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y ) end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = false end end) --================================================== -- START --================================================== RefreshPlayers() UpdatePreview()