local Players = game:GetService("Players") local UserInputService = game:GetService("UserInputService") local TextChatService = game:GetService("TextChatService") local Player = Players.LocalPlayer local GUIParent = Player:WaitForChild("PlayerGui") local Old = GUIParent:FindFirstChild("EggmanThroughChat") if Old then Old:Destroy() end local OldEffect = GUIParent:FindFirstChild("EggmanChaseEffect") if OldEffect then OldEffect:Destroy() end local OldInstructions = GUIParent:FindFirstChild("EggmanDeactivateInstructions") if OldInstructions then OldInstructions:Destroy() end local RED = Color3.fromRGB(205, 0, 0) local DARK_RED = Color3.fromRGB(75, 0, 0) local YELLOW = Color3.fromRGB(255, 190, 0) local ORANGE = Color3.fromRGB(255, 155, 0) local WHITE = Color3.fromRGB(255, 255, 255) local CYAN = Color3.fromRGB(0, 255, 255) local FONT = Enum.Font.Cartoon local CHASE_DISTANCE = 45 local END_DISTANCE = 55 local END_CONFIRM_TIME = 1 local MESSAGE_COOLDOWN = 6 local Active = true local Connections = {} local TargetPlayer = nil local SelectedEXE = nil local Searching = false local Chasing = false local TooFarSince = nil local LastMessageTime = 0 local MessageBags = {} local LastPicked = {} local function Connect(signal, callback) local connection = signal:Connect(callback) table.insert(Connections, connection) return connection end local function Deactivate() if not Active then return end Active = false SelectedEXE = nil TargetPlayer = nil Chasing = false TooFarSince = nil for _, connection in ipairs(Connections) do if connection.Connected then connection:Disconnect() end end table.clear(Connections) local effect = GUIParent:FindFirstChild("EggmanChaseEffect") if effect then effect:Destroy() end local gui = GUIParent:FindFirstChild("EggmanThroughChat") if gui then gui:Destroy() end local instructions = GUIParent:FindFirstChild("EggmanDeactivateInstructions") if instructions then instructions:Destroy() end end local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "EggmanThroughChat" ScreenGui.ResetOnSpawn = false ScreenGui.IgnoreGuiInset = true ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling ScreenGui.Parent = GUIParent local Main = Instance.new("Frame") Main.Name = "Main" Main.Size = UDim2.fromScale(0.90, 0.62) Main.Position = UDim2.fromScale(0.5, 0.5) Main.AnchorPoint = Vector2.new(0.5, 0.5) Main.BackgroundColor3 = RED Main.BorderSizePixel = 0 Main.Parent = ScreenGui local Border = Instance.new("UIStroke") Border.Color = DARK_RED Border.Thickness = 6 Border.Parent = Main local Credit = Instance.new("TextLabel") Credit.Name = "Credit" Credit.Size = UDim2.fromScale(0.25, 0.055) Credit.Position = UDim2.fromScale(0.73, 0.93) Credit.BackgroundTransparency = 1 Credit.Text = "by ICalinTY29" Credit.TextColor3 = CYAN Credit.Font = FONT Credit.TextScaled = true Credit.TextXAlignment = Enum.TextXAlignment.Right Credit.TextStrokeColor3 = DARK_RED Credit.TextStrokeTransparency = 0 Credit.ZIndex = 10 Credit.Parent = Main local CreditConstraint = Instance.new("UITextSizeConstraint") CreditConstraint.MinTextSize = 10 CreditConstraint.MaxTextSize = 16 CreditConstraint.Parent = Credit local CloseButton = Instance.new("TextButton") CloseButton.Size = UDim2.fromScale(0.065, 0.09) CloseButton.Position = UDim2.fromScale(0.925, 0.015) CloseButton.BackgroundColor3 = DARK_RED CloseButton.BorderSizePixel = 0 CloseButton.Text = "X" CloseButton.TextColor3 = WHITE CloseButton.Font = FONT CloseButton.TextScaled = true CloseButton.TextStrokeColor3 = RED CloseButton.TextStrokeTransparency = 0 CloseButton.ZIndex = 10 CloseButton.Parent = Main local dragging = false local dragStart local startPosition Connect(Main.InputBegan, function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPosition = Main.Position end end) Connect(UserInputService.InputChanged, function(input) if dragging and ( input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch ) then local delta = input.Position - dragStart Main.Position = UDim2.new( startPosition.X.Scale, startPosition.X.Offset + delta.X, startPosition.Y.Scale, startPosition.Y.Offset + delta.Y ) end end) Connect(UserInputService.InputEnded, function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = false end end) local Page1 = Instance.new("Frame") Page1.Name = "MainPage" Page1.Size = UDim2.fromScale(1, 1) Page1.BackgroundTransparency = 1 Page1.Parent = Main local function CreateText(parent, text, position, size, color, maxSize) local label = Instance.new("TextLabel") label.BackgroundTransparency = 1 label.Text = text label.Position = position label.Size = size label.TextColor3 = color label.Font = FONT label.TextScaled = true label.TextWrapped = true label.TextStrokeColor3 = DARK_RED label.TextStrokeTransparency = 0 label.Parent = parent local constraint = Instance.new("UITextSizeConstraint") constraint.MinTextSize = 12 constraint.MaxTextSize = maxSize or 48 constraint.Parent = label return label end CreateText( Page1, "DR. EGGMAN THROUGH CHAT", UDim2.fromScale(0.02, 0.015), UDim2.fromScale(0.96, 0.15), YELLOW, 48 ) local Description = CreateText( Page1, "PUT SOMEONE AS THE EXE AND\nUSE EGGMAN VOICE LINES\nAUTOMATICALLY IN CHAT!", UDim2.fromScale(0.025, 0.20), UDim2.fromScale(0.95, 0.37), YELLOW, 46 ) Description.TextYAlignment = Enum.TextYAlignment.Center local Note = CreateText( Page1, "EXCEPT SHIELD VOICE LINES ONLY ESCAPING CHASE ONES", UDim2.fromScale(0.025, 0.59), UDim2.fromScale(0.95, 0.075), WHITE, 22 ) Note.TextStrokeColor3 = DARK_RED local InputFrame = Instance.new("Frame") InputFrame.Size = UDim2.fromScale(0.94, 0.15) InputFrame.Position = UDim2.fromScale(0.03, 0.69) InputFrame.BackgroundColor3 = DARK_RED InputFrame.BorderSizePixel = 0 InputFrame.Parent = Page1 local InputCorner = Instance.new("UICorner") InputCorner.CornerRadius = UDim.new(0, 12) InputCorner.Parent = InputFrame local InputBorder = Instance.new("UIStroke") InputBorder.Color = Color3.fromRGB(120, 0, 0) InputBorder.Thickness = 2 InputBorder.Parent = InputFrame local Username = Instance.new("TextBox") Username.Size = UDim2.fromScale(0.66, 0.85) Username.Position = UDim2.fromScale(0.025, 0.075) Username.BackgroundTransparency = 1 Username.PlaceholderText = "DISPLAY NAME OR USERNAME" Username.PlaceholderColor3 = Color3.fromRGB(190, 150, 150) Username.Text = "" Username.TextColor3 = WHITE Username.Font = FONT Username.TextScaled = true Username.TextWrapped = false Username.ClearTextOnFocus = false Username.TextStrokeColor3 = DARK_RED Username.TextStrokeTransparency = 0 Username.Parent = InputFrame local InputConstraint = Instance.new("UITextSizeConstraint") InputConstraint.MinTextSize = 12 InputConstraint.MaxTextSize = 24 InputConstraint.Parent = Username local SearchButton = Instance.new("TextButton") SearchButton.Size = UDim2.fromScale(0.29, 0.78) SearchButton.Position = UDim2.fromScale(0.69, 0.11) SearchButton.BackgroundColor3 = Color3.fromRGB(180, 0, 0) SearchButton.BorderSizePixel = 0 SearchButton.Text = "SEARCH PLAYER" SearchButton.TextColor3 = YELLOW SearchButton.Font = FONT SearchButton.TextScaled = true SearchButton.TextStrokeColor3 = DARK_RED SearchButton.TextStrokeTransparency = 0 SearchButton.Parent = InputFrame local SearchCorner = Instance.new("UICorner") SearchCorner.CornerRadius = UDim.new(0, 8) SearchCorner.Parent = SearchButton local SearchBorder = Instance.new("UIStroke") SearchBorder.Color = DARK_RED SearchBorder.Thickness = 2 SearchBorder.Parent = SearchButton local SearchConstraint = Instance.new("UITextSizeConstraint") SearchConstraint.MinTextSize = 10 SearchConstraint.MaxTextSize = 22 SearchConstraint.Parent = SearchButton local Page2 = Instance.new("Frame") Page2.Name = "ExeSelection" Page2.Size = UDim2.fromScale(1, 1) Page2.BackgroundTransparency = 1 Page2.Visible = false Page2.Parent = Main CreateText( Page2, "TO WHAT EXE ARE THE VOICE LINES?", UDim2.fromScale(0.02, 0.02), UDim2.fromScale(0.96, 0.18), YELLOW, 42 ) local function CreateExeButton(name, position, color, textColor, strokeColor) local button = Instance.new("TextButton") button.Name = name button.Size = UDim2.fromScale(0.48, 0.27) button.Position = position button.BackgroundColor3 = color button.BorderSizePixel = 0 button.Text = name button.TextColor3 = textColor button.Font = FONT button.TextScaled = true button.TextStrokeColor3 = strokeColor or DARK_RED button.TextStrokeTransparency = 0 button.Parent = Page2 local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0, 5) corner.Parent = button local outline = Instance.new("UIStroke") outline.Color = DARK_RED outline.Thickness = 2 outline.Parent = button local constraint = Instance.new("UITextSizeConstraint") constraint.MinTextSize = 16 constraint.MaxTextSize = 48 constraint.Parent = button return button end local Fleetway = CreateExeButton( "FLEETWAY", UDim2.fromScale(0.02, 0.30), YELLOW, RED, DARK_RED ) local Kolossos = CreateExeButton( "KOLOSSOS", UDim2.fromScale(0.50, 0.30), Color3.fromRGB(0, 0, 150), RED, Color3.fromRGB(0, 0, 0) ) local X2011 = CreateExeButton( "2011X", UDim2.fromScale(0.02, 0.62), Color3.fromRGB(0, 65, 210), Color3.fromRGB(255, 30, 30), Color3.fromRGB(190, 190, 190) ) local Tripwire = CreateExeButton( "TRIPWIRE", UDim2.fromScale(0.50, 0.62), ORANGE, WHITE, DARK_RED ) local TripwireSubtitle = Instance.new("TextLabel") TripwireSubtitle.Name = "TripwireSubtitle" TripwireSubtitle.Size = UDim2.fromScale(0.48, 0.07) TripwireSubtitle.Position = UDim2.fromScale(0.50, 0.82) TripwireSubtitle.BackgroundTransparency = 1 TripwireSubtitle.Text = "OR TAILS DOLL" TripwireSubtitle.TextColor3 = Color3.fromRGB(180, 120, 0) TripwireSubtitle.TextStrokeColor3 = Color3.fromRGB(255, 190, 0) TripwireSubtitle.TextStrokeTransparency = 0 TripwireSubtitle.Font = FONT TripwireSubtitle.TextScaled = true TripwireSubtitle.Parent = Page2 local Messages = { Fleetway = { "What's wrong, hedgehog? Hate second place?", "Too slow!", "Keep up!", "Get a load of this! This is so boring... How about you FAILING instead?", "No matter what you look like, you're still that dumb rodent I have encountered...", "Slowest thing alive, aren't you?", "Aww... Did someone sleep on a Chaos Emerald wrong?", "Bye, bye, inferior Super Sonic!", "How are you even more annoying than the original?" }, Kolossos = { "What's wrong, hedgehog? Hate second place?", "Too slow!", "Keep up!", "Get a load of this! This is so boring... How about you FAILING instead?", "No matter what you look like, you're still that dumb rodent I have encountered...", "Slowest thing alive, aren't you?", "Keep that grotesque arm to yourself!", "And I thought you couldn't get any uglier." }, ["2011X"] = { "What's wrong, hedgehog? Hate second place?", "Too slow!", "Keep up!", "Get a load of this! This is so boring... How about you FAILING instead?", "No matter what you look like, you're still that dumb rodent I have encountered...", "Slowest thing alive, aren't you?" }, Tripwire = { "Ugh... Another dud.", "Back to the drawing board...", "You stuffy little traitor, I'll have you SHREDDED after this!", "You're more useless than the original Tails!", "Not my finest work." } } local EffectGui = Instance.new("ScreenGui") EffectGui.Name = "EggmanChaseEffect" EffectGui.ResetOnSpawn = false EffectGui.IgnoreGuiInset = true EffectGui.DisplayOrder = 9999 EffectGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling EffectGui.Parent = GUIParent local function CreateEdge(size, position, rotation) local edge = Instance.new("Frame") edge.Size = size edge.Position = position edge.BackgroundColor3 = RED edge.BackgroundTransparency = 0 edge.BorderSizePixel = 0 edge.Visible = false edge.ZIndex = 100 edge.Parent = EffectGui local gradient = Instance.new("UIGradient") gradient.Rotation = rotation gradient.Transparency = NumberSequence.new({ NumberSequenceKeypoint.new(0, 0.05), NumberSequenceKeypoint.new(1, 1) }) gradient.Parent = edge return edge end local Edges = { CreateEdge( UDim2.new(1, 0, 0, 100), UDim2.new(0, 0, 0, 0), 90 ), CreateEdge( UDim2.new(1, 0, 0, 100), UDim2.new(0, 0, 1, -100), -90 ), CreateEdge( UDim2.new(0, 100, 1, 0), UDim2.new(0, 0, 0, 0), 0 ), CreateEdge( UDim2.new(0, 100, 1, 0), UDim2.new(1, -100, 0, 0), 180 ) } local function SetChaseEffect(enabled) if not Active then return end for _, edge in ipairs(Edges) do edge.Visible = enabled end end local function ShowDeactivateInstructions() local InstructionGui = Instance.new("ScreenGui") InstructionGui.Name = "EggmanDeactivateInstructions" InstructionGui.ResetOnSpawn = false InstructionGui.IgnoreGuiInset = true InstructionGui.DisplayOrder = 10000 InstructionGui.Parent = GUIParent local Box = Instance.new("Frame") Box.Name = "InstructionBox" Box.Size = UDim2.fromScale(0.78, 0.30) Box.Position = UDim2.fromScale(0.5, 0.5) Box.AnchorPoint = Vector2.new(0.5, 0.5) Box.BackgroundColor3 = RED Box.BorderSizePixel = 0 Box.Parent = InstructionGui local Corner = Instance.new("UICorner") Corner.CornerRadius = UDim.new(0, 18) Corner.Parent = Box local Outline = Instance.new("UIStroke") Outline.Color = DARK_RED Outline.Thickness = 4 Outline.Parent = Box local InstructionText = Instance.new("TextLabel") InstructionText.Name = "InstructionText" InstructionText.Size = UDim2.fromScale(0.90, 0.55) InstructionText.Position = UDim2.fromScale(0.05, 0.08) InstructionText.BackgroundTransparency = 1 InstructionText.Text = 'TO DEACTIVATE THE EGGMAN THING TYPE IN CHAT\n:eggmandeactivate' InstructionText.RichText = true InstructionText.TextColor3 = WHITE InstructionText.TextStrokeColor3 = DARK_RED InstructionText.TextStrokeTransparency = 0 InstructionText.Font = FONT InstructionText.TextScaled = true InstructionText.TextWrapped = true InstructionText.Parent = Box local TextConstraint = Instance.new("UITextSizeConstraint") TextConstraint.MinTextSize = 12 TextConstraint.MaxTextSize = 28 TextConstraint.Parent = InstructionText local Button = Instance.new("TextButton") Button.Name = "OKButton" Button.Size = UDim2.fromScale(0.40, 0.23) Button.Position = UDim2.fromScale(0.30, 0.68) Button.BackgroundColor3 = DARK_RED Button.BorderSizePixel = 0 Button.Text = "OK (5)" Button.TextColor3 = WHITE Button.TextStrokeColor3 = RED Button.TextStrokeTransparency = 0 Button.Font = FONT Button.TextScaled = true Button.Active = false Button.AutoButtonColor = false Button.Parent = Box local ButtonCorner = Instance.new("UICorner") ButtonCorner.CornerRadius = UDim.new(0, 12) ButtonCorner.Parent = Button local ButtonOutline = Instance.new("UIStroke") ButtonOutline.Color = Color3.fromRGB(120, 0, 0) ButtonOutline.Thickness = 2 ButtonOutline.Parent = Button task.spawn(function() for remaining = 5, 1, -1 do if not Active or not InstructionGui.Parent then return end Button.Text = "OK (" .. remaining .. ")" task.wait(1) end if not Active or not InstructionGui.Parent then return end Button.Text = "OK" Button.Active = true Button.AutoButtonColor = true Button.BackgroundColor3 = Color3.fromRGB(180, 0, 0) end) Connect(Button.Activated, function() if not Active or not Button.Active then return end InstructionGui:Destroy() end) end local function GetRandomMessage(exe) local options = Messages[exe] if not options then return nil end local bag = MessageBags[exe] if not bag or #bag == 0 then bag = table.clone(options) for i = #bag, 2, -1 do local j = math.random(i) bag[i], bag[j] = bag[j], bag[i] end if LastPicked[exe] and #bag > 1 and bag[#bag] == LastPicked[exe] then bag[1], bag[#bag] = bag[#bag], bag[1] end MessageBags[exe] = bag end local message = table.remove(bag) LastPicked[exe] = message return message end local function SendChatMessage() if not Active or not SelectedEXE then return end if os.clock() - LastMessageTime < MESSAGE_COOLDOWN then return end local message = GetRandomMessage(SelectedEXE) if not message then return end local channels = TextChatService:FindFirstChild("TextChannels") local general = channels and channels:FindFirstChild("RBXGeneral") if not general then return end local success = pcall(function() general:SendAsync(message) end) if success then LastMessageTime = os.clock() end end Connect(Username:GetPropertyChangedSignal("Text"), function() TargetPlayer = nil SelectedEXE = nil SearchButton.Text = "SEARCH PLAYER" SearchButton.TextColor3 = YELLOW end) local function SearchForPlayer() if Searching or not Active then return end local query = Username.Text:lower():gsub("^%s+", ""):gsub("%s+$", "") if query == "" then SearchButton.Text = "ENTER NAME" return end Searching = true SearchButton.Text = "SEARCHING..." local foundPlayer = nil for _, otherPlayer in ipairs(Players:GetPlayers()) do if otherPlayer.Name:lower() == query or otherPlayer.DisplayName:lower() == query then foundPlayer = otherPlayer break end end if foundPlayer then TargetPlayer = foundPlayer SearchButton.Text = "FOUND!" SearchButton.TextColor3 = Color3.fromRGB(0, 255, 100) task.wait(0.5) if not Active then return end if TargetPlayer and TargetPlayer.Parent == Players then Page1.Visible = false Page2.Visible = true else TargetPlayer = nil SearchButton.Text = "PLAYER LEFT" SearchButton.TextColor3 = Color3.fromRGB(255, 70, 70) end else TargetPlayer = nil SearchButton.Text = "NOT FOUND" SearchButton.TextColor3 = Color3.fromRGB(255, 70, 70) end Searching = false end Connect(SearchButton.Activated, SearchForPlayer) local function SelectEXE(name) if not Active then return end if not TargetPlayer or TargetPlayer.Parent ~= Players then Page2.Visible = false Page1.Visible = true TargetPlayer = nil SearchButton.Text = "PLAYER LEFT" SearchButton.TextColor3 = Color3.fromRGB(255, 70, 70) return end SelectedEXE = name Chasing = false TooFarSince = nil LastMessageTime = 0 MessageBags[name] = nil LastPicked[name] = nil SetChaseEffect(false) ScreenGui.Enabled = false ShowDeactivateInstructions() end Connect(Fleetway.Activated, function() SelectEXE("Fleetway") end) Connect(Kolossos.Activated, function() SelectEXE("Kolossos") end) Connect(X2011.Activated, function() SelectEXE("2011X") end) Connect(Tripwire.Activated, function() SelectEXE("Tripwire") end) Connect(CloseButton.Activated, Deactivate) local function IsDeactivateCommand(message) return message:lower():match("^%s*:eggmandeactivate%s*$") ~= nil end Connect(Player.Chatted, function(message) if Active and IsDeactivateCommand(message) then Deactivate() end end) Connect(TextChatService.MessageReceived, function(message) if not Active then return end local source = message.TextSource if source and source.UserId == Player.UserId and IsDeactivateCommand(message.Text) then Deactivate() end end) task.spawn(function() while Active and ScreenGui.Parent and EffectGui.Parent do task.wait(0.25) if not Active then break end if not SelectedEXE or not TargetPlayer or TargetPlayer.Parent ~= Players then Chasing = false TooFarSince = nil SetChaseEffect(false) continue end local myCharacter = Player.Character local targetCharacter = TargetPlayer.Character local myRoot = myCharacter and myCharacter:FindFirstChild("HumanoidRootPart") local targetRoot = targetCharacter and targetCharacter:FindFirstChild("HumanoidRootPart") if not myRoot or not targetRoot then Chasing = false TooFarSince = nil SetChaseEffect(false) continue end local distance = (myRoot.Position - targetRoot.Position).Magnitude if distance <= CHASE_DISTANCE then TooFarSince = nil if not Chasing then Chasing = true SetChaseEffect(true) end elseif distance >= END_DISTANCE and Chasing then if not TooFarSince then TooFarSince = os.clock() elseif os.clock() - TooFarSince >= END_CONFIRM_TIME then Chasing = false TooFarSince = nil SetChaseEffect(false) SendChatMessage() end elseif Chasing then TooFarSince = nil end end end) print("DR. EGGMAN THROUGH CHAT LOADED!")