--======================================================== -- ⚡ SHUBU FONTS CHAT :D -- SAFE / ROBLOX STUDIO VERSION -- Put this LocalScript in: -- StarterPlayer > StarterPlayerScripts --======================================================== local Players = game:GetService("Players") local TweenService = game:GetService("TweenService") local TextChatService = game:GetService("TextChatService") local UserInputService = game:GetService("UserInputService") local player = Players.LocalPlayer local playerGui = player:WaitForChild("PlayerGui") --======================================================== -- SETTINGS --======================================================== local GUI_NAME = "SHUBU_FONTS_CHAT" local NOTIFICATION_TIME = 5 --======================================================== -- SAFE STYLE ENGINE -- No mathematical Unicode fonts. -- This prevents □ missing-glyph characters. --======================================================== local styles = {} local function addStyle(name, formatter) table.insert(styles, { Name = name, Format = formatter }) end -- Basic addStyle("Normal", function(t) return t end) addStyle("Spaced", function(t) local result = "" for _, code in utf8.codes(t) do result ..= utf8.char(code) .. " " end return result end) addStyle("Wide", function(t) local result = "" for _, code in utf8.codes(t) do local c = utf8.char(code) if c == " " then result ..= " " else result ..= c .. " " end end return result end) -- Safe decorations local decorations = { {"Stars", "★ ", " ★"}, {"Spark", "✦ ", " ✦"}, {"Lightning", "⚡ ", " ⚡"}, {"Diamond", "◆ ", " ◆"}, {"Circle", "● ", " ●"}, {"Arrow", "➤ ", ""}, {"DoubleArrow", "» ", " «"}, {"Crown", "♛ ", " ♛"}, {"Music", "♪ ", " ♪"}, {"Dot", "• ", " •"}, {"Plus", "✚ ", " ✚"}, {"Cross", "✧ ", " ✧"}, {"Dash", "— ", " —"}, {"Question", "? ", " ?"}, {"Exclaim", "! ", " !"}, {"Slash", "/ ", " /"}, {"Hash", "# ", " #"}, {"Equal", "= ", " ="}, {"Gaming", "乂 ", " 乂"}, {"Aura", "亗 ", " 亗"}, {"Fire", "🔥 ", " 🔥"}, {"Cool", "😎 ", " 😎"}, {"Love", "❤ ", " ❤"}, {"Game", "🎮 ", " 🎮"}, {"Rocket", "🚀 ", " 🚀"}, {"Star", "⭐ ", " ⭐"}, {"Boom", "💥 ", " 💥"}, } for _, data in ipairs(decorations) do local name = data[1] local left = data[2] local right = data[3] addStyle(name, function(t) return left .. t .. right end) end -- Bracket styles local brackets = { {"Round", "(", ")"}, {"Square", "[", "]"}, {"Curly", "{", "}"}, {"Angle", "<", ">"}, {"Double", "<<", ">>"}, {"Triple", "<<<", ">>>"}, {"Dash", "- ", " -"}, {"Equals", "= ", " ="}, {"Slash", "/ ", " /"}, {"Backslash", "\\ ", " \\"}, {"Pipe", "| ", " |"}, } for _, data in ipairs(brackets) do local name = data[1] local left = data[2] local right = data[3] addStyle(name, function(t) return left .. t .. right end) end -- Combination styles for _, deco in ipairs(decorations) do for _, bracket in ipairs(brackets) do local name = deco[1] .. " + " .. bracket[1] addStyle(name, function(t) return deco[2] .. bracket[2] .. t .. bracket[3] .. deco[3] end) end end -- More combinations for _, deco1 in ipairs(decorations) do for _, deco2 in ipairs(decorations) do if #styles < 1000 then addStyle( deco1[1] .. " + " .. deco2[1], function(t) return deco1[2] .. t .. deco1[3] .. " " .. deco2[2] .. deco2[3] end ) end end if #styles >= 1000 then break end end --======================================================== -- EMOJIS --======================================================== local emojis = { "😀","😃","😄","😁","😆","😅","😂","🤣","😊","😇", "🙂","🙃","😉","😍","🥰","😘","😎","🤩","🥳","😏", "😱","🤔","🤨","😐","😑","🙄","😴","🤯","😡","😤", "😭","😢","🥺","😳","🤪","😜","😝","🤓","😈","👿", "💀","👻","🤖","👽","🗿","🫡","🤝","👏","🙏","💪", "👍","👎","🔥","⚡","✨","💫","⭐","🌟","💥","💯", "❤️","🖤","💙","💚","💜","🩷","🤍","🩵","🧡","💛", "👑","💎","🎮","🎯","🏆","🚀","🌈","☠️","🎉","🎊", "🎵","🎶","🍀","🌙","☀️","🌸","🌹","🍕","🍔","🍟" } --======================================================== -- GUI --======================================================== local gui = Instance.new("ScreenGui") gui.Name = GUI_NAME gui.ResetOnSpawn = false gui.IgnoreGuiInset = true gui.Parent = playerGui --======================================================== -- MAIN GUI --======================================================== local main = Instance.new("Frame") main.Name = "Main" main.Size = UDim2.fromOffset(480,350) main.Position = UDim2.new(0.5,-240,0.5,-175) main.BackgroundColor3 = Color3.fromRGB(12,12,18) main.BorderSizePixel = 0 main.Parent = gui local mainCorner = Instance.new("UICorner") mainCorner.CornerRadius = UDim.new(0,18) mainCorner.Parent = main local outline = Instance.new("UIStroke") outline.Thickness = 2 outline.Parent = main -- RGB border task.spawn(function() local hue = 0 while gui.Parent do hue = (hue + 0.004) % 1 outline.Color = Color3.fromHSV(hue,0.9,1) task.wait() end end) --======================================================== -- TITLE --======================================================== local title = Instance.new("TextLabel") title.BackgroundTransparency = 1 title.Position = UDim2.fromOffset(18,8) title.Size = UDim2.new(1,-70,0,38) title.Text = "⚡ SHUBU FONTS CHAT :D" title.TextColor3 = Color3.new(1,1,1) title.TextSize = 19 title.Font = Enum.Font.GothamBold title.TextXAlignment = Enum.TextXAlignment.Left title.Parent = main --======================================================== -- CLOSE --======================================================== local close = Instance.new("TextButton") close.BackgroundTransparency = 1 close.Position = UDim2.new(1,-48,0,8) close.Size = UDim2.fromOffset(36,36) close.Text = "×" close.TextColor3 = Color3.new(1,1,1) close.TextSize = 27 close.Font = Enum.Font.GothamBold close.Parent = main --======================================================== -- INPUT --======================================================== local input = Instance.new("TextBox") input.Position = UDim2.fromOffset(18,55) input.Size = UDim2.new(1,-36,0,42) input.BackgroundColor3 = Color3.fromRGB(24,24,32) input.BorderSizePixel = 0 input.Text = "" input.PlaceholderText = "TYPE YOUR W SHUBHAM LETTER:P" input.PlaceholderColor3 = Color3.fromRGB(145,145,155) input.TextColor3 = Color3.new(1,1,1) input.TextSize = 15 input.Font = Enum.Font.Gotham input.ClearTextOnFocus = false input.Parent = main local inputCorner = Instance.new("UICorner") inputCorner.CornerRadius = UDim.new(0,11) inputCorner.Parent = input --======================================================== -- PREVIEW --======================================================== local preview = Instance.new("TextLabel") preview.Position = UDim2.fromOffset(18,101) preview.Size = UDim2.new(1,-36,0,38) preview.BackgroundTransparency = 1 preview.Text = "SHUBHAM" preview.TextColor3 = Color3.new(1,1,1) preview.TextSize = 17 preview.Font = Enum.Font.GothamBold preview.TextTruncate = Enum.TextTruncate.AtEnd preview.Parent = main --======================================================== -- TABS --======================================================== local fontTab = Instance.new("TextButton") fontTab.Position = UDim2.fromOffset(18,143) fontTab.Size = UDim2.fromOffset(105,30) fontTab.Text = "🔤 FONTS" fontTab.TextSize = 13 fontTab.Font = Enum.Font.GothamBold fontTab.TextColor3 = Color3.new(1,1,1) fontTab.BackgroundColor3 = Color3.fromRGB(38,38,50) fontTab.Parent = main local emojiTab = Instance.new("TextButton") emojiTab.Position = UDim2.fromOffset(130,143) emojiTab.Size = UDim2.fromOffset(105,30) emojiTab.Text = "😀 EMOJI" emojiTab.TextSize = 13 emojiTab.Font = Enum.Font.GothamBold emojiTab.TextColor3 = Color3.new(1,1,1) emojiTab.BackgroundColor3 = Color3.fromRGB(24,24,32) emojiTab.Parent = main for _,button in ipairs({fontTab,emojiTab}) do local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0,9) corner.Parent = button end --======================================================== -- SEARCH --======================================================== local search = Instance.new("TextBox") search.Position = UDim2.new(1,-195,0,143) search.Size = UDim2.fromOffset(177,30) search.BackgroundColor3 = Color3.fromRGB(24,24,32) search.BorderSizePixel = 0 search.PlaceholderText = "🔎 Search..." search.PlaceholderColor3 = Color3.fromRGB(140,140,150) search.TextColor3 = Color3.new(1,1,1) search.TextSize = 12 search.Font = Enum.Font.Gotham search.ClearTextOnFocus = false search.Parent = main local searchCorner = Instance.new("UICorner") searchCorner.CornerRadius = UDim.new(0,9) searchCorner.Parent = search --======================================================== -- SCROLL LIST --======================================================== local scroll = Instance.new("ScrollingFrame") scroll.Position = UDim2.fromOffset(18,181) scroll.Size = UDim2.new(1,-36,0,105) scroll.BackgroundTransparency = 1 scroll.BorderSizePixel = 0 scroll.ScrollBarThickness = 4 scroll.CanvasSize = UDim2.new() scroll.Parent = main local layout = Instance.new("UIListLayout") layout.Padding = UDim.new(0,5) layout.Parent = scroll --======================================================== -- SELECTED STYLE --======================================================== local selectedStyle = styles[1] local currentMode = "Fonts" local function refreshPreview() local text = input.Text if text == "" then text = "SHUBHAM" end preview.Text = selectedStyle.Format(text) end --======================================================== -- LIST RENDER --======================================================== local function clearList() for _,child in ipairs(scroll:GetChildren()) do if not child:IsA("UIListLayout") then child:Destroy() end end end local function renderFonts(filter) clearList() local count = 0 for index,style in ipairs(styles) do local matches = filter == "" or string.find( string.lower(style.Name), string.lower(filter), 1, true ) if matches then count += 1 local button = Instance.new("TextButton") button.Size = UDim2.new(1,-5,0,30) -- IMPORTANT: -- Button itself uses normal Roblox font. -- No unsupported Unicode mathematical glyphs. button.Text = style.Name .. " • SHUBHAM" button.TextColor3 = Color3.new(1,1,1) button.TextSize = 13 button.Font = Enum.Font.Gotham button.BackgroundColor3 = Color3.fromRGB(24,24,32) button.BorderSizePixel = 0 button.Parent = scroll local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0,8) corner.Parent = button button.MouseButton1Click:Connect(function() selectedStyle = style refreshPreview() end) end end scroll.CanvasSize = UDim2.fromOffset(0,count * 35) end local function renderEmoji(filter) clearList() local count = 0 for _,emoji in ipairs(emojis) do if filter == "" or string.find(emoji,filter,1,true) then count += 1 local button = Instance.new("TextButton") button.Size = UDim2.new(1,-5,0,30) button.Text = emoji .. " Add Emoji" button.TextColor3 = Color3.new(1,1,1) button.TextSize = 16 button.Font = Enum.Font.Gotham button.BackgroundColor3 = Color3.fromRGB(24,24,32) button.BorderSizePixel = 0 button.Parent = scroll local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0,8) corner.Parent = button button.MouseButton1Click:Connect(function() input.Text ..= emoji refreshPreview() end) end end scroll.CanvasSize = UDim2.fromOffset(0,count * 35) end fontTab.MouseButton1Click:Connect(function() currentMode = "Fonts" renderFonts(search.Text) end) emojiTab.MouseButton1Click:Connect(function() currentMode = "Emoji" renderEmoji(search.Text) end) search:GetPropertyChangedSignal("Text"):Connect(function() if currentMode == "Fonts" then renderFonts(search.Text) else renderEmoji(search.Text) end end) input:GetPropertyChangedSignal("Text"):Connect(refreshPreview) renderFonts("") --======================================================== -- SEND --======================================================== local send = Instance.new("TextButton") send.Position = UDim2.new(1,-140,1,-48) send.Size = UDim2.fromOffset(122,35) send.Text = "⚡ SEND" send.TextColor3 = Color3.new(1,1,1) send.TextSize = 14 send.Font = Enum.Font.GothamBold send.BackgroundColor3 = Color3.fromRGB(35,35,45) send.BorderSizePixel = 0 send.Parent = main local sendCorner = Instance.new("UICorner") sendCorner.CornerRadius = UDim.new(0,10) sendCorner.Parent = send local function sendMessage(message) local channels = TextChatService:FindFirstChild("TextChannels") if not channels then return end local general = channels:FindFirstChild("RBXGeneral") if general then general:SendAsync(message) end end send.MouseButton1Click:Connect(function() if input.Text == "" then return end local message = selectedStyle.Format(input.Text) sendMessage(message) end) --======================================================== -- PHONE NOTIFICATION --======================================================== local notification = Instance.new("Frame") notification.Size = UDim2.fromOffset(310,65) notification.Position = UDim2.new(1,330,0,18) notification.BackgroundColor3 = Color3.fromRGB(18,18,24) notification.BorderSizePixel = 0 notification.Parent = gui local notificationCorner = Instance.new("UICorner") notificationCorner.CornerRadius = UDim.new(0,16) notificationCorner.Parent = notification local notificationStroke = Instance.new("UIStroke") notificationStroke.Thickness = 1.5 notificationStroke.Parent = notification local notificationText = Instance.new("TextLabel") notificationText.BackgroundTransparency = 1 notificationText.Position = UDim2.fromOffset(12,7) notificationText.Size = UDim2.new(1,-24,1,-14) notificationText.Text = "😍 SHUBHAM KA HAI YE BHAI!!" notificationText.TextColor3 = Color3.new(1,1,1) notificationText.TextSize = 15 notificationText.Font = Enum.Font.GothamBold notificationText.TextWrapped = true notificationText.Parent = notification local function showNotification() notification.Position = UDim2.new(1,330,0,18) TweenService:Create( notification, TweenInfo.new( 0.45, Enum.EasingStyle.Quint, Enum.EasingDirection.Out ), { Position = UDim2.new(1,-325,0,18) } ):Play() task.delay(NOTIFICATION_TIME,function() TweenService:Create( notification, TweenInfo.new( 0.4, Enum.EasingStyle.Quint, Enum.EasingDirection.In ), { Position = UDim2.new(1,330,0,18) } ):Play() end) end --======================================================== -- FLOATING BUTTON --======================================================== local floating = Instance.new("TextButton") floating.Size = UDim2.fromOffset(55,55) floating.Position = UDim2.new(1,-70,0.5,-27) floating.Text = "⚡" floating.TextSize = 25 floating.Font = Enum.Font.GothamBold floating.TextColor3 = Color3.new(1,1,1) floating.BackgroundColor3 = Color3.fromRGB(20,20,28) floating.BorderSizePixel = 0 floating.Visible = false floating.Parent = gui local floatingCorner = Instance.new("UICorner") floatingCorner.CornerRadius = UDim.new(1,0) floatingCorner.Parent = floating local floatingStroke = Instance.new("UIStroke") floatingStroke.Thickness = 2 floatingStroke.Parent = floating --======================================================== -- OPEN / CLOSE --======================================================== local function openGUI() floating.Visible = false main.Visible = true main.Size = UDim2.fromOffset(480,0) TweenService:Create( main, TweenInfo.new( 0.45, Enum.EasingStyle.Back, Enum.EasingDirection.Out ), { Size = UDim2.fromOffset(480,350) } ):Play() showNotification() end local function closeGUI() local tween = TweenService:Create( main, TweenInfo.new( 0.3, Enum.EasingStyle.Quint, Enum.EasingDirection.In ), { Size = UDim2.fromOffset(480,0) } ) tween:Play() tween.Completed:Wait() main.Visible = false main.Size = UDim2.fromOffset(480,350) floating.Visible = true end close.MouseButton1Click:Connect(closeGUI) floating.MouseButton1Click:Connect(openGUI) --======================================================== -- DRAG SYSTEM --======================================================== local function makeDraggable(object) local dragging = false local dragStart local startPosition object.InputBegan:Connect(function(inputObject) if inputObject.UserInputType == Enum.UserInputType.MouseButton1 or inputObject.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = inputObject.Position startPosition = object.Position inputObject.Changed:Connect(function() if inputObject.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) UserInputService.InputChanged:Connect(function(inputObject) if not dragging then return end if inputObject.UserInputType == Enum.UserInputType.MouseMovement or inputObject.UserInputType == Enum.UserInputType.Touch then local delta = inputObject.Position - dragStart object.Position = UDim2.new( startPosition.X.Scale, startPosition.X.Offset + delta.X, startPosition.Y.Scale, startPosition.Y.Offset + delta.Y ) end end) end makeDraggable(main) makeDraggable(floating) --======================================================== -- START --======================================================== task.wait(0.8) sendMessage( "________________________SHUBHAM FONT CHAT EXECUTED :D" ) showNotification() print("⚡ SHUBU FONTS CHAT :D loaded successfully!") print("Styles available:", #styles)