MIN CHAT Brookhaven Script | Custom Name, RGB Tags, Private Chat

MIN CHAT Brookhaven Script | Custom Name, RGB Tags, Private Chat

Brookhaven RP 6 days ago
19 views
MIN CHAT Brookhaven Script | Custom Name, RGB Tags, Private Chat Keyless

Description

MIN CHAT is a Brookhaven RP script with custom display names, animated RGB tags, roleplay name and bio features, and private messaging commands. It also includes multi-line chat wrapping to help prevent long text from overflowing the chat box.

Key Features

  • Custom Display Name
  • Custom Name Reset
  • Animated RGB Tags
  • Custom Tag Reset
  • Founder RGB Badge
  • Leader RGB Badge
  • Multi-Line Auto Wrapping
  • Chat Overflow Fix
  • Secret Private Message System
  • Auto Roleplay Name
  • Auto Roleplay Bio
  • /name Command
  • /tag Command
  • /pm Command
  • Direct Execute
Features
Compatible Executors

Script

-- MIN CHAT (Fixed Text Overflow & Multi-Line Wrapping Issue)
local CoreGui = game:GetService("CoreGui")
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local RunService = game:GetService("RunService")
local LocalPlayer = Players.LocalPlayer

-- Custom Variables
local CustomDisplayName = LocalPlayer.Name
local CustomTag = "" -- Secret Tag variable

-- Fixed RP Name & Bio Set Function (Normal RP Name)
local function applyRP()
    local username = LocalPlayer.Name
    local normalName = 'xMIN_CHATx'
    local redBio = '' .. username .. ''
    
    local RE = ReplicatedStorage:FindFirstChild("RE") or ReplicatedStorage:FindFirstChild("Remotes")
    if RE then
        local nameRemote = RE:FindFirstChild("1RPNam1eTex1t") or RE:FindFirstChild("RPNameText") or RE:FindFirstChild("1RPNameText")
        local bioRemote = RE:FindFirstChild("1RPBi1oTex1t") or RE:FindFirstChild("RPBioText") or RE:FindFirstChild("1RPBioText")
        
        if nameRemote then
            pcall(function() nameRemote:FireServer("RolePlayName", normalName) end)
            pcall(function() nameRemote:FireServer(normalName) end)
        end
        if bioRemote then
            pcall(function() bioRemote:FireServer("RolePlayBio", redBio) end)
            pcall(function() bioRemote:FireServer(redBio) end)
        end
    end

    local char = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait()
    if char then
        local bioVal = char:FindFirstChild("RPBio") or char:FindFirstChild("Bio")
        if bioVal and bioVal:IsA("StringValue") then pcall(function() bioVal.Value = redBio end) end
        
        local nameVal = char:FindFirstChild("RPName") or char:FindFirstChild("Name")
        if nameVal and nameVal:IsA("StringValue") then pcall(function() nameVal.Value = normalName end) end
    end
end

-- Run RP Auto-Set on Spawn
task.spawn(function()
    task.wait(1.5)
    applyRP()
    
    LocalPlayer.CharacterAdded:Connect(function()
        task.wait(1.5)
        applyRP()
    end)
end)

-- Network Event Setup
local ChatEvent = ReplicatedStorage:FindFirstChild("MinChatNetwork")
if not ChatEvent then
    ChatEvent = Instance.new("BindableEvent")
    ChatEvent.Name = "MinChatNetwork"
    ChatEvent.Parent = ReplicatedStorage
end

-- Screen UI Setup
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "MinChatGui"
ScreenGui.Parent = CoreGui

-- Title Bar
local TitleBar = Instance.new("Frame")
TitleBar.Size = UDim2.new(0, 110, 0, 25)
TitleBar.Position = UDim2.new(0.02, 0, 0.4, -30)
TitleBar.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
TitleBar.BackgroundTransparency = 0.2
TitleBar.BorderSizePixel = 0
TitleBar.Parent = ScreenGui

local TitleText = Instance.new("TextLabel")
TitleText.Size = UDim2.new(1, 0, 1, 0)
TitleText.BackgroundTransparency = 1
TitleText.Text = "MIN CHAT"
TitleText.TextColor3 = Color3.fromRGB(255, 255, 255)
TitleText.Font = Enum.Font.SourceSansBold
TitleText.TextSize = 14
TitleText.Parent = TitleBar

-- Toggle Button
local ToggleBtn = Instance.new("TextButton")
ToggleBtn.Size = UDim2.new(0, 110, 0, 25)
ToggleBtn.Position = UDim2.new(0.02, 0, 0.4, 0)
ToggleBtn.BackgroundColor3 = Color3.fromRGB(15, 15, 15)
ToggleBtn.BackgroundTransparency = 0.3
ToggleBtn.BorderSizePixel = 0
ToggleBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
ToggleBtn.Text = "Toggle Chat"
ToggleBtn.Font = Enum.Font.SourceSansSemibold
ToggleBtn.TextSize = 14
ToggleBtn.Parent = ScreenGui

-- Main Chat Frame
local MainFrame = Instance.new("Frame")
MainFrame.Size = UDim2.new(0, 380, 0, 260)
MainFrame.Position = UDim2.new(0.5, -190, 0.5, -130)
MainFrame.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
MainFrame.BackgroundTransparency = 0.4
MainFrame.BorderSizePixel = 0
MainFrame.Active = true
MainFrame.Draggable = true
MainFrame.ClipsDescendants = true
MainFrame.Parent = ScreenGui

-- Scroll Message Box
local ScrollBox = Instance.new("ScrollingFrame")
ScrollBox.Size = UDim2.new(1, -10, 1, -45)
ScrollBox.Position = UDim2.new(0, 5, 0, 5)
ScrollBox.BackgroundTransparency = 1
ScrollBox.CanvasSize = UDim2.new(0, 0, 0, 0)
ScrollBox.ClipsDescendants = true
ScrollBox.ScrollBarThickness = 6
ScrollBox.Parent = MainFrame

local UIListLayout = Instance.new("UIListLayout")
UIListLayout.Parent = ScrollBox
UIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
UIListLayout.Padding = UDim.new(0, 4)

-- Input Text Box
local TextBox = Instance.new("TextBox")
TextBox.Size = UDim2.new(1, -10, 0, 30)
TextBox.Position = UDim2.new(0, 5, 1, -35)
TextBox.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
TextBox.BackgroundTransparency = 0.3
TextBox.TextColor3 = Color3.fromRGB(255, 255, 255)
TextBox.PlaceholderText = "Type message or click username to PM..."
TextBox.Text = ""
TextBox.ClearTextOnFocus = false
TextBox.TextWrapped = true
TextBox.Parent = MainFrame

-- Toggle Visibility
ToggleBtn.MouseButton1Click:Connect(function()
    MainFrame.Visible = not MainFrame.Visible
end)

-- Table to store references to active Animated Tags/Names
local RainbowTagsList = {}

-- Message Render Function
local function AddMessage(senderPlayer, msg, isSystem, overrideName, overrideTag, isPrivate, recipientName)
    local MessageRow = Instance.new("Frame")
    MessageRow.Size = UDim2.new(1, 0, 0, 0)
    MessageRow.AutomaticSize = Enum.AutomaticSize.Y
    MessageRow.BackgroundTransparency = 1
    MessageRow.ClipsDescendants = true
    MessageRow.Parent = ScrollBox

    local AvatarImg = Instance.new("ImageLabel")
    AvatarImg.Size = UDim2.new(0, 24, 0, 24)
    AvatarImg.Position = UDim2.new(0, 2, 0, 2)
    AvatarImg.BackgroundTransparency = 1
    
    if not isSystem and senderPlayer then
        task.spawn(function()
            local content, isReady = Players:GetUserThumbnailAsync(senderPlayer.UserId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size420x420)
            if isReady then AvatarImg.Image = content end
        end)
    end
    AvatarImg.Parent = MessageRow

    local senderRealName = senderPlayer and senderPlayer.Name or overrideName or "Unknown"
    
    -- Founder & Leader Identification
    local isFounder = (senderRealName:lower() == "minown_aditya" or senderRealName:lower() == "xmin_adityax")
    local isLeader = (senderRealName:lower() == "leaderusername") -- Yahan Leader ka Username daalein

    if isSystem then
        local SysLabel = Instance.new("TextLabel")
        SysLabel.Size = UDim2.new(1, -32, 0, 0)
        SysLabel.Position = UDim2.new(0, 30, 0, 2)
        SysLabel.AutomaticSize = Enum.AutomaticSize.Y
        SysLabel.BackgroundTransparency = 1
        SysLabel.TextXAlignment = Enum.TextXAlignment.Left
        SysLabel.TextColor3 = Color3.fromRGB(255, 215, 0)
        SysLabel.Text = msg
        SysLabel.Font = Enum.Font.SourceSansBold
        SysLabel.TextSize = 14
        SysLabel.TextWrapped = true
        SysLabel.Parent = MessageRow
    else
        local CombinedLabel = Instance.new("TextLabel")
        CombinedLabel.Size = UDim2.new(1, -35, 0, 0)
        CombinedLabel.Position = UDim2.new(0, 30, 0, 2)
        CombinedLabel.AutomaticSize = Enum.AutomaticSize.Y
        CombinedLabel.BackgroundTransparency = 1
        CombinedLabel.TextXAlignment = Enum.TextXAlignment.Left
        CombinedLabel.Font = Enum.Font.SourceSans
        CombinedLabel.TextSize = 14
        CombinedLabel.RichText = true
        CombinedLabel.TextWrapped = true

        local displayName = overrideName or senderRealName

        if isPrivate then
            CombinedLabel.TextColor3 = Color3.fromRGB(255, 120, 255)
            local prefix = (senderPlayer == LocalPlayer) and ("[PM to " .. (recipientName or "Unknown") .. "]: ") or ("[PM from " .. senderRealName .. "]: ")
            
            table.insert(RainbowTagsList, {
                LabelObj = CombinedLabel,
                TagName = overrideTag or "",
                DisplayName = displayName,
                Message = msg,
                IsFounder = isFounder,
                IsLeader = isLeader,
                IsPM = true,
                CustomPrefix = prefix
            })
        else
            CombinedLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
            table.insert(RainbowTagsList, {
                LabelObj = CombinedLabel,
                TagName = overrideTag or "",
                DisplayName = displayName,
                Message = msg,
                IsFounder = isFounder,
                IsLeader = isLeader,
                IsPM = false,
                CustomPrefix = ""
            })
        end

        CombinedLabel.Parent = MessageRow

        -- Click to PM
        if senderPlayer and senderPlayer ~= LocalPlayer then
            local ClickBtn = Instance.new("TextButton")
            ClickBtn.Size = UDim2.new(1, 0, 1, 0)
            ClickBtn.BackgroundTransparency = 1
            ClickBtn.Text = ""
            ClickBtn.Parent = CombinedLabel
            ClickBtn.MouseButton1Click:Connect(function()
                TextBox.Text = "/pm " .. senderRealName .. " "
                TextBox:CaptureFocus()
            end)
        end
    end

    task.defer(function()
        ScrollBox.CanvasSize = UDim2.new(0, 0, 0, UIListLayout.AbsoluteContentSize.Y + 10)
        ScrollBox.CanvasPosition = Vector2.new(0, ScrollBox.AbsoluteCanvasSize.Y)
    end)
end

-- Red-Black-White RGB Cycle (For FOUNDER & LEADER Badges)
local function GetRedBlackWhiteColor(t)
    t = t % 3
    if t < 1 then
        return Color3.new(1 - t, 0, 0)
    elseif t < 2 then
        local v = t - 1
        return Color3.new(v, v, v)
    else
        local v = t - 2
        return Color3.new(1, 1 - v, 1 - v)
    end
end

-- Blue-Green-Red-Purple RGB Cycle (For Custom Tag)
local function GetBlueGreenRedPurpleColor(t)
    t = t % 4
    if t < 1 then
        return Color3.new(0, t, 1 - t)
    elseif t < 2 then
        local v = t - 1
        return Color3.new(v, 1 - v, 0)
    elseif t < 3 then
        local v = t - 2
        return Color3.new(1 - (0.5 * v), 0, 0.5 * v)
    else
        local v = t - 3
        return Color3.new(0.5 * (1 - v), 0, 0.5 + (0.5 * v))
    end
end

-- Live Color Cycling Loop
RunService.RenderStepped:Connect(function()
    local t = tick() * 1.5
    
    local tagColor = GetBlueGreenRedPurpleColor(t)
    local r1, g1, b1 = math.floor(tagColor.R * 255), math.floor(tagColor.G * 255), math.floor(tagColor.B * 255)

    local rbwColor = GetRedBlackWhiteColor(t)
    local r2, g2, b2 = math.floor(rbwColor.R * 255), math.floor(rbwColor.G * 255), math.floor(rbwColor.B * 255)
    
    for _, tagData in ipairs(RainbowTagsList) do
        if tagData.LabelObj and tagData.LabelObj.Parent then
            local prefix = tagData.CustomPrefix or ""
            local formattedBadge = ""
            local formattedTag = ""
            local formattedName = ""

            -- FOUNDER / LEADER Badge (Red-Black-White RGB)
            if tagData.IsFounder then
                formattedBadge = string.format('[FOUNDER] ', r2, g2, b2)
            elseif tagData.IsLeader then
                formattedBadge = string.format('[LEADER] ', r2, g2, b2)
            end

            -- Custom Tag (Blue-Green-Red-Purple RGB)
            if tagData.TagName and tagData.TagName ~= "" then
                formattedTag = string.format('[%s] ', r1, g1, b1, tagData.TagName)
            end

            -- Normal White Display Name in Parentheses ()
            formattedName = string.format('(%s): ', tagData.DisplayName)

            if tagData.IsPM then
                tagData.LabelObj.Text = prefix .. formattedBadge .. formattedTag .. tagData.Message
            else
                tagData.LabelObj.Text = prefix .. formattedBadge .. formattedTag .. formattedName .. tagData.Message
            end
        end
    end
end)

-- Special Welcome Messages
task.spawn(function()
    task.wait(0.5)
    local username = LocalPlayer.Name:lower()
    if username == "minown_aditya" or username == "xmin_adityax" then
        AddMessage(nil, "[FOUNDER ADITYA] WELCOME BACK BOSS " .. LocalPlayer.Name, true)
    elseif username == "leaderusername" then -- Yahan Leader ka Username daalein
        AddMessage(nil, "[LEADER] WELCOME " .. LocalPlayer.Name, true)
    else
        AddMessage(nil, "WELCOME " .. LocalPlayer.Name, true)
    end
end)

-- Find Target Player Helper
local function GetPlayerByName(name)
    name = name:lower()
    for _, p in ipairs(Players:GetPlayers()) do
        if p.Name:lower():sub(1, #name) == name or p.DisplayName:lower():sub(1, #name) == name then
            return p
        end
    end
    return nil
end

-- Send Message & Secret Commands Logic
TextBox.FocusLost:Connect(function(enterPressed)
    if enterPressed and TextBox.Text ~= "" then
        local textToSend = TextBox.Text
        TextBox.Text = ""
        local cleanText = textToSend:lower():gsub("%s+", "")
        
        -- Secret /pm Command
        if textToSend:sub(1, 4):lower() == "/pm " or textToSend:sub(1, 3):lower() == "/w " then
            local args = string.split(textToSend, " ")
            local targetName = args[2]
            local pmMsg = table.concat(args, " ", 3)
            
            if targetName and pmMsg and pmMsg ~= "" then
                local targetPlayer = GetPlayerByName(targetName)
                if targetPlayer then
                    AddMessage(LocalPlayer, pmMsg, false, CustomDisplayName, CustomTag, true, targetPlayer.Name)
                    ChatEvent:Fire(LocalPlayer, pmMsg, CustomDisplayName, CustomTag, true, targetPlayer.Name)
                else
                    AddMessage(nil, "Player not found!", true)
                end
            end

        -- Secret /name Command
        elseif textToSend:sub(1, 6):lower() == "/name " then
            local newName = textToSend:sub(7)
            if newName and newName:gsub("%s+", "") ~= "" then
                CustomDisplayName = newName
            end
        elseif cleanText == "/namereset" or cleanText == "/nameremove" then
            CustomDisplayName = LocalPlayer.Name

        -- Secret /tag Command (Tag Remove Options Included)
        elseif cleanText == "/tag" or cleanText == "/tagreset" or cleanText == "/tagclear" or cleanText == "/tagremove" then
            CustomTag = ""
            AddMessage(nil, "Tag removed!", true)

        elseif textToSend:sub(1, 5):lower() == "/tag " then
            local newTag = textToSend:sub(6)
            if newTag and newTag:gsub("%s+", "") ~= "" then
                CustomTag = newTag
            end

        else
            -- Normal Message Send
            AddMessage(LocalPlayer, textToSend, false, CustomDisplayName, CustomTag, false)
            ChatEvent:Fire(LocalPlayer, textToSend, CustomDisplayName, CustomTag, false)
        end
    end
end)

ChatEvent.Event:Connect(function(senderPlayer, msg, senderCustomName, senderCustomTag, isPrivate, recipientName)
    if senderPlayer ~= LocalPlayer then
        if isPrivate then

Comments (0)

No comments yet. Be the first!