-- Vihaan Secret Chat (The Ultimate Edition)
-- Fully Optimized & Cleaned
local Players = game:GetService("Players")
local TextChatService = game:GetService("TextChatService")
local TweenService = game:GetService("TweenService")
local RunService = game:GetService("RunService")
local LocalPlayer = Players.LocalPlayer
local PlayerGui = LocalPlayer:WaitForChild("PlayerGui")
-- Clean up any legacy instances to avoid duplication lag
local existingGui = PlayerGui:FindFirstChild("VihaanSecretGui")
if existingGui then existingGui:Destroy() end
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "VihaanSecretGui"
ScreenGui.ResetOnSpawn = false
ScreenGui.Parent = PlayerGui
----------------------------------------------------
-- 1. UTILITY: RAINBOW GENERATOR
----------------------------------------------------
local function makeRainbowText(text)
local colors = {
"rgb(255, 0, 0)", "rgb(255, 127, 0)", "rgb(255, 255, 0)",
"rgb(0, 255, 0)", "rgb(0, 200, 255)", "rgb(0, 0, 255)", "rgb(139, 0, 255)"
}
local formattedText = ""
for i = 1, #text do
local character = string.sub(text, i, i)
if character == " " then
formattedText = formattedText .. " "
else
local color = colors[((i - 1) % #colors) + 1]
formattedText = formattedText .. string.format("%s", color, character)
end
end
return formattedText
end
local rainbowStarTag = makeRainbowText("[STAR:] ")
-- Optimized Rainbow Loop
local function applyRainbowLoop(uiInstance, property)
task.spawn(function()
local hue = 0
while uiInstance and uiInstance.Parent do
hue = (hue + 1) % 360
local color = Color3.fromHSV(hue / 360, 0.8, 1)
uiInstance[property] = color
RunService.RenderStepped:Wait()
end
end)
end
----------------------------------------------------
-- 2. CORE CHAT OVERRIDE
----------------------------------------------------
TextChatService.OnIncomingMessage = function(message: TextChatMessage)
local properties = Instance.new("TextChatMessageProperties")
if message.TextSource then
local sender = Players:GetPlayerByUserId(message.TextSource.UserId)
if sender == LocalPlayer then
local displayName = sender.DisplayName
local rainbowName = makeRainbowText(displayName)
properties.PrefixText = rainbowStarTag .. rainbowName
end
end
return properties
end
----------------------------------------------------
-- 3. THE NOTE TAB (WINDOW)
----------------------------------------------------
local function createNoteWindow()
-- Main Window Frame
local NoteFrame = Instance.new("Frame")
NoteFrame.Name = "NoteFrame"
NoteFrame.Size = UDim2.new(0, 340, 0, 180)
NoteFrame.Position = UDim2.new(0.5, -170, 0.5, -90)
NoteFrame.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
NoteFrame.BorderSizePixel = 0
NoteFrame.ClipsDescendants = true
NoteFrame.Active = true
NoteFrame.Draggable = true
NoteFrame.Parent = ScreenGui
local MainCorner = Instance.new("UICorner")
MainCorner.CornerRadius = UDim.new(0, 10)
MainCorner.Parent = NoteFrame
-- Rainbow Stroke Outer Border
local Border = Instance.new("UIStroke")
Border.Thickness = 2.5
Border.Parent = NoteFrame
applyRainbowLoop(Border, "Color")
-- Top Header Bar
local TopBar = Instance.new("Frame")
TopBar.Size = UDim2.new(1, 0, 0, 30)
TopBar.BackgroundTransparency = 1
TopBar.Parent = NoteFrame
-- Minimized Title Header (Black cursive text)
local MinimizedTitle = Instance.new("TextLabel")
MinimizedTitle.Size = UDim2.new(1, -80, 1, 0)
MinimizedTitle.Position = UDim2.new(0, 12, 0, 0)
MinimizedTitle.BackgroundTransparency = 1
MinimizedTitle.Font = Enum.Font.Bodoni
MinimizedTitle.TextSize = 16
MinimizedTitle.TextColor3 = Color3.fromRGB(15, 15, 15)
MinimizedTitle.TextXAlignment = Enum.TextXAlignment.Left
MinimizedTitle.Text = "VIHAAN SECRET CHAT"
MinimizedTitle.TextTransparency = 1
MinimizedTitle.Parent = TopBar
-- Minimize Button (-)
local MinButton = Instance.new("TextButton")
MinButton.Size = UDim2.new(0, 22, 0, 22)
MinButton.Position = UDim2.new(1, -55, 0, 4)
MinButton.BackgroundTransparency = 1
MinButton.Text = "–"
MinButton.Font = Enum.Font.GothamBold
MinButton.TextSize = 18
MinButton.Parent = TopBar
applyRainbowLoop(MinButton, "TextColor3")
-- Close Button (✕)
local CloseButton = Instance.new("TextButton")
CloseButton.Size = UDim2.new(0, 22, 0, 22)
CloseButton.Position = UDim2.new(1, -28, 0, 4)
CloseButton.BackgroundTransparency = 1
CloseButton.Text = "✕"
CloseButton.Font = Enum.Font.GothamBold
CloseButton.TextSize = 14
CloseButton.Parent = TopBar
applyRainbowLoop(CloseButton, "TextColor3")
-- Body Message (Cursive black body text)
local MessageText = Instance.new("TextLabel")
MessageText.Size = UDim2.new(1, -24, 1, -45)
MessageText.Position = UDim2.new(0, 12, 0, 32)
MessageText.BackgroundTransparency = 1
MessageText.Font = Enum.Font.Bodoni
MessageText.TextSize = 17
MessageText.TextColor3 = Color3.fromRGB(15, 15, 15)
MessageText.TextWrapped = true
MessageText.RichText = true
MessageText.Text = "WELCOME TO VIHAAN SECRET CHAT💫
TYPE ANYTHING IN THE CHAT IT WILL BE ONLY VISIBLE TO YOU AND WHO WILL OPEN THE SCRIPT💫"
MessageText.Parent = NoteFrame
-- Precise Minimize Logic (No overlapping possible)
local minimized = false
local originalSize = NoteFrame.Size
MinButton.MouseButton1Click:Connect(function()
minimized = not minimized
if minimized then
-- Immediately shut off visibility to avoid text overlapping
MessageText.Visible = false
-- Minimize animation
TweenService:Create(NoteFrame, TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Size = UDim2.new(0, 340, 0, 30)}):Play()
TweenService:Create(MinimizedTitle, TweenInfo.new(0.2), {TextTransparency = 0}):Play()
MinButton.Text = "+"
else
-- Expand animation
TweenService:Create(NoteFrame, TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Size = originalSize}):Play()
TweenService:Create(MinimizedTitle, TweenInfo.new(0.2), {TextTransparency = 1}):Play()
-- Safely make body text visible after the frame starts expanding
task.delay(0.15, function()
if not minimized then
MessageText.Visible = true
end
end)
MinButton.Text = "–"
end
end)
-- Close Window Button Action
CloseButton.MouseButton1Click:Connect(function()
NoteFrame:Destroy()
end)
-- Smooth Scale Intro Pop-in
NoteFrame.Size = UDim2.new(0, 0, 0, 0)
NoteFrame.Position = UDim2.new(0.5, 0, 0.5, 0)
TweenService:Create(NoteFrame, TweenInfo.new(0.4, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {
Size = originalSize,
Position = UDim2.new(0.5, -170, 0.5, -90)
}):Play()
end
----------------------------------------------------
-- 4. HORROR INTRO PIPELINE
----------------------------------------------------
local function createHorrorIntro()
local blackFrame = Instance.new("Frame")
blackFrame.Size = UDim2.new(1, 0, 1, 0)
blackFrame.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
blackFrame.BorderSizePixel = 0
blackFrame.Parent = ScreenGui
local horrorLabel = Instance.new("TextLabel")
horrorLabel.Size = UDim2.new(0.8, 0, 0.2, 0)
horrorLabel.Position = UDim2.new(0.1, 0, 0.4, 0)
horrorLabel.BackgroundTransparency = 1
horrorLabel.Font = Enum.Font.Creepster
horrorLabel.TextColor3 = Color3.fromRGB(180, 0, 0)
horrorLabel.TextSize = 50
horrorLabel.TextWrapped = true
horrorLabel.TextXAlignment = Enum.TextXAlignment.Center
horrorLabel.TextYAlignment = Enum.TextYAlignment.Center
horrorLabel.Text = "VIHAAN SECRET CHAT LOADED 🇧🇷"
horrorLabel.TextStrokeColor3 = Color3.fromRGB(40, 0, 0)
horrorLabel.TextStrokeTransparency = 0.2
horrorLabel.Parent = blackFrame
task.wait(2) -- Precise 2 second lock
local fadeTime = 0.5
local fadeInfo = TweenInfo.new(fadeTime, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
local tweenFrame = TweenService:Create(blackFrame, fadeInfo, {BackgroundTransparency = 1})
local tweenText = TweenService:Create(horrorLabel, fadeInfo, {TextTransparency = 1, TextStrokeTransparency = 1})
tweenFrame:Play()
tweenText:Play()
task.wait(fadeTime)
-- Destroy the screen to save Roblox memory, then draw the note
blackFrame:Destroy()
createNoteWindow()
end
-- Fire the system script sequence!
task.spawn(createHorrorIntro)