--[[ I copied of this script https://scriptblox.com/script/Universal-Script-Macro-chat-v2-40200 pls dont be mad at me --]] ----------------------------------------------------------- -- Debug Utilities ----------------------------------------------------------- local DEBUG = true local function debugPrint(msg) if DEBUG then print("[MACRO CHAT DEBUG] " .. msg) end end ----------------------------------------------------------- -- Services & Variables ----------------------------------------------------------- local Players = game:GetService("Players") local ReplicatedStorage = game:GetService("ReplicatedStorage") local StarterGui = game:GetService("StarterGui") local TweenService = game:GetService("TweenService") local UserInputService = game:GetService("UserInputService") local TextChatService pcall(function() TextChatService = game:GetService("TextChatService") end) local player = Players.LocalPlayer local playerGui = player:WaitForChild("PlayerGui") local externalUniqueMessages = {} local isSupport = isfolder and isfile and writefile and readfile local WorkspacePaths = { MACROCHATV2 = "Macro-ChatV2", CONFIG_FILE = "Macro-ChatV2/config.txt", } if isSupport then if not isfolder(WorkspacePaths.MACROCHATV2) then makefolder(WorkspacePaths.MACROCHATV2) end end ----------------------------------------------------------- -- Chat Sender Function ----------------------------------------------------------- local function sendChatMessage(message) local chatEvents = ReplicatedStorage:FindFirstChild("DefaultChatSystemChatEvents") if chatEvents then local remoteEvent = chatEvents:FindFirstChild("SayMessageRequest") if remoteEvent then remoteEvent:FireServer(message, "All") debugPrint("Sent via remote event: " .. message) return end end if TextChatService then local channel = TextChatService.TextChannels and TextChatService.TextChannels:FindFirstChild("RBXGeneral") if channel and channel.SendAsync then local suc, err = pcall(function() channel:SendAsync(message) end) if suc then debugPrint("Sent via TextChatService: " .. message) return else debugPrint("TextChatService error: " .. tostring(err)) end else debugPrint("RBXGeneral channel not found.") end end debugPrint("Falling back to SetCore for chat.") local suc, err = pcall(function() StarterGui:SetCore("ChatMakeSystemMessage", { Text = message, Color = Color3.new(1, 1, 1), Font = Enum.Font.SourceSansBold, TextSize = 18, }) end) if suc then debugPrint("Sent via SetCore: " .. message) else debugPrint("SetCore error: " .. tostring(err)) end end ----------------------------------------------------------- -- Helper: Make a UI Draggable ----------------------------------------------------------- local function makeDraggable(frame) local dragging = false local dragStart, startPos frame.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = frame.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) frame.InputChanged:Connect(function(input) if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then local delta = input.Position - dragStart frame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end end) end ----------------------------------------------------------- -- Main UI Setup ----------------------------------------------------------- local screenGui = Instance.new("ScreenGui") screenGui.Name = "MacroChatScreen" screenGui.Parent = playerGui local mainFrame = Instance.new("Frame") mainFrame.Name = "MainFrame" mainFrame.Size = UDim2.new(0, 200, 0, 200) mainFrame.Position = UDim2.new(0.5, -100, 0.5, -100) mainFrame.BackgroundColor3 = Color3.fromRGB(50, 50, 50) mainFrame.BorderSizePixel = 0 mainFrame.Parent = screenGui local mainCorner = Instance.new("UICorner") mainCorner.CornerRadius = UDim.new(0, 20) mainCorner.Parent = mainFrame makeDraggable(mainFrame) local blueButton = Instance.new("TextButton") blueButton.Name = "BlueButton" blueButton.Size = UDim2.new(0, 120, 0, 40) blueButton.Position = UDim2.new(0.5, -60, 0.5, -20) blueButton.BackgroundColor3 = Color3.fromRGB(0, 120, 255) blueButton.Text = "Open Macro Chat 2" blueButton.TextColor3 = Color3.new(1, 1, 1) blueButton.Font = Enum.Font.SourceSansBold blueButton.TextScaled = true blueButton.Parent = mainFrame local blueButtonCorner = Instance.new("UICorner") blueButtonCorner.CornerRadius = UDim.new(0.45, 0) blueButtonCorner.Parent = blueButton local minimizeButton = Instance.new("TextButton") minimizeButton.Name = "MinimizeButton" minimizeButton.Size = UDim2.new(0, 25, 0, 25) minimizeButton.Position = UDim2.new(0, 5, 0, 5) minimizeButton.BackgroundColor3 = Color3.fromRGB(100, 100, 100) minimizeButton.Text = "–" minimizeButton.TextScaled = true minimizeButton.Font = Enum.Font.SourceSansBold minimizeButton.TextColor3 = Color3.new(1, 1, 1) minimizeButton.Parent = mainFrame local minCorner = Instance.new("UICorner") minCorner.CornerRadius = UDim.new(1, 0) minCorner.Parent = minimizeButton local closeButton = Instance.new("TextButton") closeButton.Name = "CloseButton" closeButton.Size = UDim2.new(0, 25, 0, 25) closeButton.Position = UDim2.new(0, 35, 0, 5) closeButton.BackgroundColor3 = Color3.fromRGB(200, 50, 50) closeButton.Text = "X" closeButton.TextScaled = true closeButton.Font = Enum.Font.SourceSansBold closeButton.TextColor3 = Color3.new(1, 1, 1) closeButton.Parent = mainFrame local closeCorner = Instance.new("UICorner") closeCorner.CornerRadius = UDim.new(1, 0) closeCorner.Parent = closeButton closeButton.MouseButton1Click:Connect(function() screenGui:Destroy() debugPrint("Main UI closed.") end) local isMinimized = false local originalSize = mainFrame.Size minimizeButton.MouseButton1Click:Connect(function() if not isMinimized then TweenService:Create(mainFrame, TweenInfo.new(0.2), {Size = UDim2.new(0, 200, 0, 40)}):Play() blueButton.Visible = false isMinimized = true else TweenService:Create(mainFrame, TweenInfo.new(0.2), {Size = originalSize}):Play() blueButton.Visible = true isMinimized = false end end) ----------------------------------------------------------- -- External UI Variables ----------------------------------------------------------- local externalUI = nil local blueAnimRunning = false ----------------------------------------------------------- -- Blue Button: Toggle External UI ----------------------------------------------------------- blueButton.MouseButton1Click:Connect(function() if isMinimized or blueAnimRunning then return end blueAnimRunning = true local origPos = blueButton.Position local upTween = TweenService:Create(blueButton, TweenInfo.new(0.1), {Position = origPos - UDim2.new(0, 0, 0, 10)}) local downTween = TweenService:Create(blueButton, TweenInfo.new(0.1), {Position = origPos}) upTween:Play() upTween.Completed:Connect(function(status) if status == Enum.PlaybackState.Completed then downTween:Play() end end) downTween.Completed:Connect(function(status) if status == Enum.PlaybackState.Completed then if not externalUI then debugPrint("Creating external UI.") externalUI = Instance.new("Frame") externalUI.Name = "ExternalChatUI" externalUI.Size = UDim2.new(0, 350, 0, 250) externalUI.Position = UDim2.new(0.5, -175, 0.5, -125) externalUI.BackgroundColor3 = Color3.new(1, 1, 1) externalUI.BorderSizePixel = 0 externalUI.Parent = screenGui local extCorner = Instance.new("UICorner") extCorner.CornerRadius = UDim.new(0, 20) extCorner.Parent = externalUI makeDraggable(externalUI) local header = Instance.new("TextLabel") header.Size = UDim2.new(1, -20, 0, 30) header.Position = UDim2.new(0, 10, 0, 10) header.BackgroundTransparency = 1 header.Text = "Put your message here" header.Font = Enum.Font.SourceSansBold header.TextScaled = true header.TextColor3 = Color3.new(0, 0, 0) header.Parent = externalUI local inputBox = Instance.new("TextBox") inputBox.Name = "InputBox" inputBox.Size = UDim2.new(1, -20, 0, 40) inputBox.Position = UDim2.new(0, 10, 0, 50) inputBox.BackgroundColor3 = Color3.fromRGB(240, 240, 240) inputBox.PlaceholderText = "Type your message here..." inputBox.Text = "" inputBox.TextScaled = true inputBox.TextColor3 = Color3.new(0, 0, 0) inputBox.Parent = externalUI local inputCorner = Instance.new("UICorner") inputCorner.CornerRadius = UDim.new(0.45, 0) inputCorner.Parent = inputBox local scrollFrame = Instance.new("ScrollingFrame") scrollFrame.Name = "MessageScroll" scrollFrame.Size = UDim2.new(1, -20, 0, 100) scrollFrame.Position = UDim2.new(0, 10, 0, 100) scrollFrame.BackgroundTransparency = 1 scrollFrame.CanvasSize = UDim2.new(0, 0, 0, 0) scrollFrame.Parent = externalUI local uiList = Instance.new("UIListLayout") uiList.SortOrder = Enum.SortOrder.LayoutOrder uiList.Parent = scrollFrame inputBox.FocusLost:Connect(function(enterPressed) if enterPressed then local text = inputBox.Text if text and text ~= "" and not externalUniqueMessages[text] then externalUniqueMessages[text] = true sendChatMessage(text) local msgButton = Instance.new("TextButton") msgButton.Size = UDim2.new(1, -10, 0, 30) msgButton.BackgroundColor3 = Color3.fromRGB(220, 220, 220) msgButton.Text = text msgButton.TextColor3 = Color3.new(0, 0, 0) msgButton.Font = Enum.Font.SourceSans msgButton.TextScaled = true msgButton.AutoButtonColor = true msgButton.Parent = scrollFrame local msgCorner = Instance.new("UICorner") msgCorner.CornerRadius = UDim.new(0.45, 0) msgCorner.Parent = msgButton msgButton.MouseButton1Click:Connect(function() sendChatMessage(text) end) scrollFrame.CanvasSize = UDim2.new(0, 0, 0, uiList.AbsoluteContentSize.Y) end inputBox.Text = "" end end) local function createExpandableButton(name, position, text, onClick) local button = Instance.new("TextButton") button.Name = name button.Size = UDim2.new(0, 60, 0, 30) button.Position = position button.BackgroundColor3 = Color3.fromRGB(150, 150, 150) button.Text = text button.TextColor3 = Color3.new(0, 0, 0) button.Font = Enum.Font.SourceSansBold button.TextScaled = true button.Parent = externalUI local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0.4, 0) corner.Parent = button local isHolding = false local holdTween = nil local releaseTween = nil button.MouseButton1Down:Connect(function() isHolding = true holdTween = TweenService:Create(button, TweenInfo.new(0.2), {Size = UDim2.new(0, 100, 0, 40)}) holdTween:Play() end) button.MouseButton1Up:Connect(function() if isHolding then isHolding = false releaseTween = TweenService:Create(button, TweenInfo.new(0.2), {Size = UDim2.new(0, 60, 0, 30)}) releaseTween:Play() onClick() end end) return button end local function saveMessages() if not isSupport then return end debugPrint("Saving messages to config file...") local allText = "" for msg, _ in pairs(externalUniqueMessages) do allText = allText .. msg .. "\n" end writefile(WorkspacePaths.CONFIG_FILE, allText) debugPrint("Messages saved.") end local function loadMessages() if not isSupport then return end debugPrint("Loading messages from config file...") if not isfile(WorkspacePaths.CONFIG_FILE) then debugPrint("Config file missing. Creating empty file.") writefile(WorkspacePaths.CONFIG_FILE, "") return end local content = readfile(WorkspacePaths.CONFIG_FILE) if not content or content == "" then debugPrint("Config file is empty.") return end local scrollFrame = externalUI:FindFirstChild("MessageScroll") local uiList = scrollFrame and scrollFrame:FindFirstChildOfClass("UIListLayout") local lines = string.split(content, "\n") coroutine.wrap(function() for _, text in ipairs(lines) do if text ~= "" and not externalUniqueMessages[text] then externalUniqueMessages[text] = true sendChatMessage(text) local msgButton = Instance.new("TextButton") msgButton.Name = "MsgButton" msgButton.Size = UDim2.new(1, -10, 0, 30) msgButton.BackgroundColor3 = Color3.fromRGB(220, 220, 220) msgButton.Text = text msgButton.TextColor3 = Color3.new(0, 0, 0) msgButton.Font = Enum.Font.SourceSans msgButton.TextScaled = true msgButton.AutoButtonColor = true msgButton.Parent = scrollFrame local msgCorner = Instance.new("UICorner") msgCorner.CornerRadius = UDim.new(0.45, 0) msgCorner.Parent = msgButton msgButton.MouseButton1Click:Connect(function() sendChatMessage(text) end) if uiList then scrollFrame.CanvasSize = UDim2.new(0, 0, 0, uiList.AbsoluteContentSize.Y) end wait(0.15) -- simulate user-like loading delay end end end)() end createExpandableButton("SaveButton", UDim2.new(0, 10, 0.80, 10), "Save", saveMessages) createExpandableButton("LoadButton", UDim2.new(1, -70, 0.80, 10), "Load", loadMessages) else externalUI.Visible = not externalUI.Visible end end blueAnimRunning = false end) end)