--[[ Automated Response System - Ultimate Edition (Google Fixed & Expanded) - Randomized Friendly Apology Pool (Girlfriend Approved โœ…) - Silent Auto-Targeting & Strict Whole-Word Apology Check - Custom Whitelist/Ignore Commands (;wl, ;ignore, ;stop) - Live Session Stats Tracker & PS5 Dashboard UI ]] local Players = game:GetService("Players") local UserInputService = game:GetService("UserInputService") local TextChatService = game:FindFirstChild("TextChatService") local LegacyChat = game:FindFirstChild("Chat") local TweenService = game:GetService("TweenService") local RunService = game:GetService("RunService") local LocalizationService = game:GetService("LocalizationService") local LocalPlayer = Players.LocalPlayer local PlayerGui = LocalPlayer:WaitForChild("PlayerGui") local SystemState = { Targets = {}, TargetList = {}, Whitelisted = {}, MenuOpen = false, IsLocked = false, CurrentIndex = 1, TargetIndex = 1, TransitionProgress = 1, TotalSessionRoasts = 0 } local CurrentFPS = 60 RunService.RenderStepped:Connect(function(dt) if dt > 0 then CurrentFPS = math.floor(1 / dt) end end) local function GetSafeAccountAge(player) local age = 0 local success = pcall(function() age = player.AccountAge end) if success and age then local years = math.floor(age / 365) local remDays = age % 365 if years > 0 then return string.format("%d yr%s, %d days old", years, years > 1 and "s" or "", remDays) else return string.format("%d days old", remDays) end end return "N/A" end local function DetectDevice(player) if player ~= LocalPlayer then return "PC / Console" end if UserInputService.TouchEnabled and not UserInputService.KeyboardEnabled then return "Mobile / Tablet" elseif UserInputService.GamepadEnabled and not UserInputService.KeyboardEnabled then return "Console" elseif UserInputService.VREnabled then return "VR Headset" else return "PC (Keyboard/Mouse)" end end local AggroKeywords = {"buns", "trash", "bad", "bot", "terrible", "horrible", "ez", "free kill", "sucks", "noob", "garb", "dog", "shut up", "shutup", "quiet", "ratio", "dumb", "idiot"} local NiceKeywords = {"w", "gg", "nice", "clutch", "goat", "pro", "carry"} local EmojiCombos = {" ๐Ÿ’€๐Ÿ˜ญโœŒ๏ธ", " ๐Ÿฅ€๐Ÿ™๐Ÿ˜ž๐Ÿ’”", " ๐Ÿคจ๐Ÿ‘๐Ÿ˜”", " ๐Ÿ’€๐Ÿฅ€", " ๐Ÿ˜ญ๐Ÿ’€๐Ÿ’”", " ๐Ÿคจ๐Ÿคฃ๐Ÿ‘", " ๐Ÿคก๐Ÿ’€", " ๐Ÿ˜ญ๐Ÿ™", " ๐Ÿฅฑ๐Ÿคซ๐Ÿงโ€โ™‚๏ธ", " ๐Ÿ’€", " ๐Ÿ˜ญ", " ๐Ÿคก"} local CustomApologies = { "we good now (user), stay on the safe side ๐Ÿคž", "no worries at all (user), all love here โค๏ธ", "it's all good (user), we're just here to have fun โœจ", "water under the bridge (user), let's get it ๐Ÿ™Œ", "all good (user), appreciate you stepping up ๐Ÿค", "no hard feelings (user), let's keep the good vibes rolling ๐ŸŒŸ" } local ContextualClapbacks = { ShutUp = { "bro's really trying to police the server chat", "imagine typing shut up while playing like a training dummy", "bro thinks he's the admin of the lobby", "quiet down bro, your stats are embarrassing", "bro's talking loud for someone getting carried", "calm down, your keyboard is working harder than you are" }, Trash = { "bro is projecting his entire lobby performance right now", "talking about trash with zero game sense is wild", "bro's inventory is full of excuses", "absolute lobby specimen calling others trash", "bro's skill tree is completely empty" }, DogOrBot = { "bot behavior spotted in the wild", "bro is moving like a tutorial NPC", "running around like a lost training bot", "bro got outplayed by physics itself", "absolute zero mechanical skill" } } local AdvancedFragments = { Openers = { "Bro %s", "Why is %s", "Imagine %s", "Look at %s", "Bro %s really thought", "Absolute cinema watching %s", "Can someone check on %s?", "%s out here moving like", "Bro %s is genuinely acting like" }, Actions = { "trying to cook in public", "typing essays with zero game sense", "missing every single input", "running around like a lost tutorial bot", "blaming their setup for being down bad", "fighting the air and losing", "dodging skill checks like it's their job", "freezing up the second things get real", "spamming buttons with zero strategy" }, Punchlines = { "while getting carried by pure luck.", "and still ending up dead last on the board.", "like a literal training dummy.", "with negative tactical awareness.", "while the entire server watches in pure silence.", "and expecting everyone to clap.", "like they downloaded the game five minutes ago.", "and acting like they did something major." } } local function FetchPlayerLocation(player) local success, code = pcall(function() return LocalizationService:GetCountryRegionForPlayerAsync(player) end) if success and code and code ~= "" then return tostring(code) end return "Unknown Country/Region" end local function SendChatMessage(message) if TextChatService then local textChannels = TextChatService:FindFirstChild("TextChannels") if textChannels then local general = textChannels:FindFirstChild("RBXGeneral") or textChannels:FindFirstChildOfClass("TextChannel") if general then pcall(function() general:SendAsync(message) end) return true end end end if LegacyChat and LegacyChat:FindFirstChild("Chat") then local chat = LegacyChat.Chat if chat and chat:FindFirstChild("SendMessage") then pcall(function() chat:SendMessage(message) end) return true end end return false end local function FindPlayerByPartialName(partial) if not partial or partial == "" then return nil end local search = partial:lower():gsub("%s+", "") for _, player in ipairs(Players:GetPlayers()) do if player ~= LocalPlayer then if player.Name:lower() == search or (player.DisplayName and player.DisplayName:lower() == search) then return player end end end for _, player in ipairs(Players:GetPlayers()) do if player ~= LocalPlayer then if player.Name:lower():sub(1, #search) == search or (player.DisplayName and player.DisplayName:lower():sub(1, #search) == search) then return player end end end return nil end local function IsTrueApology(message) local exactApologies = {"mb", "my bad", "sorry", "sry", "forgive", "didn't mean to", "didnt mean to"} local padded = " " .. message:lower() .. " " for _, apol in ipairs(exactApologies) do if padded:find(" " .. apol .. " ") then return true end end return false end local function GenerateDynamicComboResponse(player, message) local name = player.DisplayName or player.Name local msgLower = message:lower() local baseRoast = "" if msgLower:find("shut") or msgLower:find("quiet") or msgLower:find("ratio") then local line = ContextualClapbacks.ShutUp[math.random(1, #ContextualClapbacks.ShutUp)] baseRoast = string.format("Bro %s, %s", name, line) elseif msgLower:find("trash") or msgLower:find("garb") or msgLower:find("buns") then local line = ContextualClapbacks.Trash[math.random(1, #ContextualClapbacks.Trash)] baseRoast = string.format("Look at %s, %s", name, line) elseif msgLower:find("bot") or msgLower:find("dog") or msgLower:find("dumb") or msgLower:find("idiot") then local line = ContextualClapbacks.DogOrBot[math.random(1, #ContextualClapbacks.DogOrBot)] baseRoast = string.format("%s out here, %s", name, line) else local opener = AdvancedFragments.Openers[math.random(1, #AdvancedFragments.Openers)] local action = AdvancedFragments.Actions[math.random(1, #AdvancedFragments.Actions)] local punchline = AdvancedFragments.Punchlines[math.random(1, #AdvancedFragments.Punchlines)] baseRoast = string.format("%s %s %s", opener, action, punchline) baseRoast = string.format(baseRoast, name) end if math.random() <= 0.5 then baseRoast = baseRoast .. EmojiCombos[math.random(1, #EmojiCombos)] end return baseRoast end local function EaseOutCubic(t) return 1 - math.pow(1 - t, 3) end local function EnableWidgetDragging(frame) local dragging = false local dragStart = Vector3.zero local startPos = UDim2.new() local function IsInputInsideFrame(inputPos) local framePos = frame.AbsolutePosition local frameSize = frame.AbsoluteSize return inputPos.X >= framePos.X and inputPos.X <= (framePos.X + frameSize.X) and inputPos.Y >= framePos.Y and inputPos.Y <= (framePos.Y + frameSize.Y) end UserInputService.InputBegan:Connect(function(input) if SystemState.IsLocked then return end if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then if IsInputInsideFrame(input.Position) then dragging = true dragStart = input.Position startPos = frame.Position end end end) UserInputService.InputChanged:Connect(function(input) if dragging and not SystemState.IsLocked then if 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) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = false end end) end local function BuildUI() local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "PS5DashboardUI" ScreenGui.Parent = PlayerGui ScreenGui.ResetOnSpawn = false ScreenGui.IgnoreGuiInset = true ScreenGui.DisplayOrder = 999999 ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling local DashboardRoot = Instance.new("Frame") DashboardRoot.Name = "DashboardRoot" DashboardRoot.Size = UDim2.new(1, 0, 1, 0) DashboardRoot.BackgroundColor3 = Color3.fromRGB(5, 6, 9) DashboardRoot.Visible = false DashboardRoot.Active = true DashboardRoot.Parent = ScreenGui local AtmosphericBG = Instance.new("ImageLabel") AtmosphericBG.Name = "AtmosphericBG" AtmosphericBG.Size = UDim2.new(1.1, 0, 1.1, 0) AtmosphericBG.Position = UDim2.new(-0.05, 0, -0.05, 0) AtmosphericBG.BackgroundColor3 = Color3.fromRGB(5, 6, 9) AtmosphericBG.ScaleType = Enum.ScaleType.Crop AtmosphericBG.ImageTransparency = 0.6 AtmosphericBG.Parent = DashboardRoot local DarkVignette = Instance.new("Frame") DarkVignette.Size = UDim2.new(1, 0, 1, 0) DarkVignette.BackgroundColor3 = Color3.fromRGB(0, 0, 0) DarkVignette.BackgroundTransparency = 0.35 DarkVignette.Parent = DashboardRoot local TopBar = Instance.new("Frame") TopBar.Size = UDim2.new(1, -40, 0, 45) TopBar.Position = UDim2.new(0, 20, 0, 15) TopBar.BackgroundTransparency = 1 TopBar.Parent = DashboardRoot local PlayersTab = Instance.new("TextLabel") PlayersTab.Size = UDim2.new(0, 100, 1, 0) PlayersTab.Position = UDim2.new(0, 20, 0, 0) PlayersTab.BackgroundTransparency = 1 PlayersTab.Text = "Players" PlayersTab.TextColor3 = Color3.fromRGB(255, 255, 255) PlayersTab.TextSize = 20 PlayersTab.Font = Enum.Font.GothamBold PlayersTab.TextXAlignment = Enum.TextXAlignment.Left PlayersTab.Parent = TopBar local TabLine = Instance.new("Frame") TabLine.Size = UDim2.new(0, 75, 0, 3) TabLine.Position = UDim2.new(0, 20, 1, -5) TabLine.BackgroundColor3 = Color3.fromRGB(255, 255, 255) TabLine.BorderSizePixel = 0 TabLine.Parent = TopBar local TimeLabel = Instance.new("TextLabel") TimeLabel.Size = UDim2.new(0, 90, 1, 0) TimeLabel.Position = UDim2.new(1, -90, 0, 0) TimeLabel.BackgroundTransparency = 1 TimeLabel.TextColor3 = Color3.fromRGB(240, 243, 255) TimeLabel.TextSize = 14 TimeLabel.Font = Enum.Font.GothamMedium TimeLabel.TextXAlignment = Enum.TextXAlignment.Right TimeLabel.Text = "10:42 PM" TimeLabel.Parent = TopBar task.spawn(function() while true do local date = os.date("*t") local hour = date.hour % 12 if hour == 0 then hour = 12 end local ampm = date.hour >= 12 and "PM" or "AM" TimeLabel.Text = string.format("%d:%02d %s", hour, date.min, ampm) task.wait(10) end end) local CommandFrame = Instance.new("Frame") CommandFrame.Name = "CommandFrame" CommandFrame.Size = UDim2.new(0, 260, 0, 32) CommandFrame.Position = UDim2.new(1, -360, 0, 20) CommandFrame.BackgroundColor3 = Color3.fromRGB(30, 34, 46) CommandFrame.BackgroundTransparency = 0.25 CommandFrame.BorderSizePixel = 0 CommandFrame.Parent = DashboardRoot Instance.new("UICorner", CommandFrame).CornerRadius = UDim.new(1, 0) local CommandBar = Instance.new("TextBox") CommandBar.Size = UDim2.new(1, -16, 1, 0) CommandBar.Position = UDim2.new(0, 8, 0, 0) CommandBar.BackgroundTransparency = 1 CommandBar.TextColor3 = Color3.fromRGB(255, 255, 255) CommandBar.TextSize = 11 CommandBar.Font = Enum.Font.GothamMedium CommandBar.PlaceholderText = "๐Ÿ” ;roast, ;wl, ;ignore, ;stop..." CommandBar.PlaceholderColor3 = Color3.fromRGB(150, 155, 175) CommandBar.TextXAlignment = Enum.TextXAlignment.Left CommandBar.ClearTextOnFocus = true CommandBar.Parent = CommandFrame local CarouselContainer = Instance.new("Frame") CarouselContainer.Name = "CarouselContainer" CarouselContainer.Size = UDim2.new(1, 0, 0, 150) CarouselContainer.Position = UDim2.new(0, 0, 0, 70) CarouselContainer.BackgroundTransparency = 1 CarouselContainer.ClipsDescendants = false CarouselContainer.Parent = DashboardRoot local startX = 0 local isSwiping = false UserInputService.InputBegan:Connect(function(input) if not SystemState.MenuOpen or SystemState.IsLocked then return end if input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseButton1 then startX = input.Position.X isSwiping = true end end) UserInputService.InputEnded:Connect(function(input) if not SystemState.MenuOpen or not isSwiping or SystemState.IsLocked then return end if input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseButton1 then isSwiping = false local deltaX = input.Position.X - startX if math.abs(deltaX) > 25 then if deltaX < 0 then if SystemState.TargetIndex < #SystemState.TargetList then SystemState.CurrentIndex = SystemState.TargetIndex SystemState.TargetIndex = SystemState.TargetIndex + 1 SystemState.TransitionProgress = 0 end else if SystemState.TargetIndex > 1 then SystemState.CurrentIndex = SystemState.TargetIndex SystemState.TargetIndex = SystemState.TargetIndex - 1 SystemState.TransitionProgress = 0 end end end end end) local DetailsFrame = Instance.new("Frame") DetailsFrame.Name = "DetailsFrame" DetailsFrame.Size = UDim2.new(1, -40, 0, 180) DetailsFrame.Position = UDim2.new(0, 20, 0, 225) DetailsFrame.BackgroundTransparency = 1 DetailsFrame.Parent = DashboardRoot local TagBadge = Instance.new("TextLabel", DetailsFrame) TagBadge.Size = UDim2.new(0, 60, 0, 16) TagBadge.BackgroundColor3 = Color3.fromRGB(255, 255, 255) TagBadge.TextColor3 = Color3.fromRGB(0, 0, 0) TagBadge.Text = "TARGET" TagBadge.TextSize = 9 TagBadge.Font = Enum.Font.GothamBold Instance.new("UICorner", TagBadge).CornerRadius = UDim.new(0, 4) local FocusedTitle = Instance.new("TextLabel", DetailsFrame) FocusedTitle.Size = UDim2.new(1, 0, 0, 24) FocusedTitle.Position = UDim2.new(0, 0, 0, 20) FocusedTitle.BackgroundTransparency = 1 FocusedTitle.TextColor3 = Color3.fromRGB(255, 255, 255) FocusedTitle.TextSize = 20 FocusedTitle.Font = Enum.Font.GothamBold FocusedTitle.TextXAlignment = Enum.TextXAlignment.Left FocusedTitle.Text = "Select a Target" local FocusedSub = Instance.new("TextLabel", DetailsFrame) FocusedSub.Size = UDim2.new(1, 0, 0, 16) FocusedSub.Position = UDim2.new(0, 0, 0, 44) FocusedSub.BackgroundTransparency = 1 FocusedSub.TextColor3 = Color3.fromRGB(180, 185, 200) FocusedSub.TextSize = 12 FocusedSub.Font = Enum.Font.GothamMedium FocusedSub.TextXAlignment = Enum.TextXAlignment.Left FocusedSub.Text = "@username" local MetaCard = Instance.new("Frame", DetailsFrame) MetaCard.Size = UDim2.new(1, 0, 0, 105) MetaCard.Position = UDim2.new(0, 0, 0, 65) MetaCard.BackgroundColor3 = Color3.fromRGB(18, 22, 32) MetaCard.BackgroundTransparency = 0.3 MetaCard.BorderSizePixel = 0 Instance.new("UICorner", MetaCard).CornerRadius = UDim.new(0, 8) local MetaAge = Instance.new("TextLabel", MetaCard) MetaAge.Size = UDim2.new(0.5, -10, 0, 18) MetaAge.Position = UDim2.new(0, 10, 0, 8) MetaAge.BackgroundTransparency = 1 MetaAge.TextColor3 = Color3.fromRGB(220, 225, 240) MetaAge.TextSize = 11 MetaAge.Font = Enum.Font.GothamMedium MetaAge.TextXAlignment = Enum.TextXAlignment.Left MetaAge.Text = "๐ŸŽ‚ Age: --" local MetaLocation = Instance.new("TextLabel", MetaCard) MetaLocation.Size = UDim2.new(0.5, -10, 0, 18) MetaLocation.Position = UDim2.new(0.5, 5, 0, 8) MetaLocation.BackgroundTransparency = 1 MetaLocation.TextColor3 = Color3.fromRGB(220, 225, 240) MetaLocation.TextSize = 11 MetaLocation.Font = Enum.Font.GothamMedium MetaLocation.TextXAlignment = Enum.TextXAlignment.Left MetaLocation.Text = "๐ŸŒ Location: --" local MetaReason = Instance.new("TextLabel", MetaCard) MetaReason.Size = UDim2.new(1, -20, 0, 18) MetaReason.Position = UDim2.new(0, 10, 0, 30) MetaReason.BackgroundTransparency = 1 MetaReason.TextColor3 = Color3.fromRGB(255, 130, 130) MetaReason.TextSize = 11 MetaReason.Font = Enum.Font.GothamMedium MetaReason.TextXAlignment = Enum.TextXAlignment.Left MetaReason.Text = "๐ŸŽฏ Reason: --" local MetaShame = Instance.new("TextLabel", MetaCard) MetaShame.Size = UDim2.new(0.5, -10, 0, 18) MetaShame.Position = UDim2.new(0, 10, 0, 52) MetaShame.BackgroundTransparency = 1 MetaShame.TextColor3 = Color3.fromRGB(255, 200, 100) MetaShame.TextSize = 11 MetaShame.Font = Enum.Font.GothamMedium MetaShame.TextXAlignment = Enum.TextXAlignment.Left MetaShame.Text = "๐Ÿ”ฅ Roasts: 0" local MetaDevice = Instance.new("TextLabel", MetaCard) MetaDevice.Size = UDim2.new(0.5, -10, 0, 18) MetaDevice.Position = UDim2.new(0.5, 5, 0, 52) MetaDevice.BackgroundTransparency = 1 MetaDevice.TextColor3 = Color3.fromRGB(160, 200, 255) MetaDevice.TextSize = 11 MetaDevice.Font = Enum.Font.GothamMedium MetaDevice.TextXAlignment = Enum.TextXAlignment.Left MetaDevice.Text = "๐Ÿ“ฑ Device: --" local MetaSessionStats = Instance.new("TextLabel", MetaCard) MetaSessionStats.Name = "MetaSessionStats" MetaSessionStats.Size = UDim2.new(1, -20, 0, 18) MetaSessionStats.Position = UDim2.new(0, 10, 0, 75) MetaSessionStats.BackgroundTransparency = 1 MetaSessionStats.TextColor3 = Color3.fromRGB(130, 255, 160) MetaSessionStats.TextSize = 11 MetaSessionStats.Font = Enum.Font.GothamBold MetaSessionStats.TextXAlignment = Enum.TextXAlignment.Left MetaSessionStats.Text = "โšก Session Stats: 0 Total Combacks Fired" local WidgetContainer = Instance.new("Frame", ScreenGui) WidgetContainer.Name = "TopWidgetContainer" WidgetContainer.Size = UDim2.new(0, 88, 0, 42) WidgetContainer.Position = UDim2.new(0.5, -44, 0, 10) WidgetContainer.BackgroundTransparency = 1 WidgetContainer.ZIndex = 1000000 WidgetContainer.Active = true local ToggleCircle = Instance.new("ImageButton", WidgetContainer) ToggleCircle.Name = "RuleBreakerToggle" ToggleCircle.Size = UDim2.new(0, 42, 0, 42) ToggleCircle.BackgroundColor3 = Color3.fromRGB(20, 24, 34) ToggleCircle.BorderSizePixel = 0 ToggleCircle.ZIndex = 1000001 Instance.new("UICorner", ToggleCircle).CornerRadius = UDim.new(1, 0) local CircleStroke = Instance.new("UIStroke", ToggleCircle) CircleStroke.Color = Color3.fromRGB(255, 255, 255) CircleStroke.Thickness = 2 local CircleIcon = Instance.new("TextLabel", ToggleCircle) CircleIcon.Size = UDim2.new(1, 0, 1, 0) CircleIcon.BackgroundTransparency = 1 CircleIcon.Text = "๐Ÿ‘‘" CircleIcon.TextSize = 18 local LockButton = Instance.new("TextButton", WidgetContainer) LockButton.Name = "LockButton" LockButton.Size = UDim2.new(0, 42, 0, 42) LockButton.Position = UDim2.new(0, 46, 0, 0) LockButton.BackgroundColor3 = Color3.fromRGB(20, 24, 34) LockButton.BorderSizePixel = 0 LockButton.Text = "๐Ÿ”“" LockButton.TextSize = 16 LockButton.ZIndex = 1000001 Instance.new("UICorner", LockButton).CornerRadius = UDim.new(1, 0) local LockStroke = Instance.new("UIStroke", LockButton) LockStroke.Color = Color3.fromRGB(255, 255, 255) LockStroke.Thickness = 2 EnableWidgetDragging(WidgetContainer) LockButton.MouseButton1Click:Connect(function() SystemState.IsLocked = not SystemState.IsLocked LockButton.Text = SystemState.IsLocked and "๐Ÿ”’" or "๐Ÿ”“" LockButton.BackgroundColor3 = SystemState.IsLocked and Color3.fromRGB(180, 40, 40) or Color3.fromRGB(20, 24, 34) end) local function SetMenuVisible(visible) SystemState.MenuOpen = visible local tweenInfo = TweenInfo.new(0.25, Enum.EasingStyle.Cubic, Enum.EasingDirection.Out) if visible then DashboardRoot.Visible = true TweenService:Create(DashboardRoot, tweenInfo, { BackgroundTransparency = 0 }):Play() CommandBar:CaptureFocus() else local fadeOut = TweenService:Create(DashboardRoot, tweenInfo, { BackgroundTransparency = 1 }) fadeOut.Completed:Connect(function() if not SystemState.MenuOpen then DashboardRoot.Visible = false end end) fadeOut:Play() end end ToggleCircle.MouseButton1Click:Connect(function() SetMenuVisible(not SystemState.MenuOpen) end) return { ScreenGui = ScreenGui, DashboardRoot = DashboardRoot, AtmosphericBG = AtmosphericBG, CommandBar = CommandBar, CarouselContainer = CarouselContainer, FocusedTitle = FocusedTitle, FocusedSub = FocusedSub, MetaAge = MetaAge, MetaLocation = MetaLocation, MetaReason = MetaReason, MetaShame = MetaShame, MetaDevice = MetaDevice, MetaSessionStats = MetaSessionStats, SetMenuVisible = SetMenuVisible } end local UI = BuildUI() local CardInstances = {} local function RenderCarousel() if #SystemState.TargetList == 0 then return end local baseW, baseH = 100, 125 local spacing = 120 local startX = 20 local t = EaseOutCubic(math.clamp(SystemState.TransitionProgress, 0, 1)) local focus = SystemState.CurrentIndex + (SystemState.TargetIndex - SystemState.CurrentIndex) * t for i, targetPlayer in ipairs(SystemState.TargetList) do local Card = CardInstances[targetPlayer.UserId] if Card then local rel = (i - 1) - (focus - 1) local d = math.abs(rel) local scale = (d < 0.001) and 1.1 or math.max(0.8, 1.0 - 0.12 * math.min(d, 2.5)) local w, h = baseW * scale, baseH * scale local x = startX + (i - 1) * spacing - (focus - 1) * spacing local y = (baseH - h) / 2 local selected_amount = math.max(0, 1 - d) Card.Size = UDim2.new(0, w, 0, h) Card.Position = UDim2.new(0, x, 0, y) Card.ZIndex = math.floor(10 - d) local FrameBox = Card:FindFirstChild("FrameBox") local Stroke = FrameBox and FrameBox:FindFirstChildOfClass("UIStroke") if Stroke then if selected_amount > 0 then Stroke.Color = Color3.fromRGB(255, 255, 255) Stroke.Thickness = 2.5 Stroke.Transparency = 0 pcall(function() UI.AtmosphericBG.Image = Players:GetUserThumbnailAsync(targetPlayer.UserId, Enum.ThumbnailType.AvatarBust, Enum.ThumbnailSize.Size420x420) end) UI.FocusedTitle.Text = targetPlayer.DisplayName UI.FocusedSub.Text = "@" .. targetPlayer.Name local targetData = SystemState.Targets[targetPlayer] if targetData then UI.MetaAge.Text = "๐ŸŽ‚ Age: " .. GetSafeAccountAge(targetPlayer) UI.MetaLocation.Text = "๐ŸŒ Location: " .. (targetData.Location or "Fetching...") UI.MetaReason.Text = "๐ŸŽฏ Reason: " .. (targetData.Reason or "Manual Focus") UI.MetaShame.Text = "๐Ÿ”ฅ Roasts: " .. tostring(targetData.RoastCount or 0) UI.MetaDevice.Text = "๐Ÿ“ฑ Device: " .. DetectDevice(targetPlayer) end else Stroke.Color = Color3.fromRGB(100, 110, 130) Stroke.Thickness = 1.0 Stroke.Transparency = 0.6 end end end end end local function UpdateCarousel() SystemState.TargetList = {} for targetPlayer, _ in pairs(SystemState.Targets) do table.insert(SystemState.TargetList, targetPlayer) end for userId, card in pairs(CardInstances) do card:Destroy() CardInstances[userId] = nil end for i, targetPlayer in ipairs(SystemState.TargetList) do local Card = Instance.new("TextButton") Card.Name = "Card_" .. targetPlayer.UserId Card.BackgroundColor3 = Color3.fromRGB(0, 0, 0) Card.BackgroundTransparency = 1 Card.Text = "" Card.AutoButtonColor = false Card.Parent = UI.CarouselContainer local FrameBox = Instance.new("Frame", Card) FrameBox.Name = "FrameBox" FrameBox.Size = UDim2.new(1, 0, 1, 0) FrameBox.BackgroundColor3 = Color3.fromRGB(20, 24, 34) FrameBox.ClipsDescendants = true Instance.new("UICorner", FrameBox).CornerRadius = UDim.new(0, 10) local CardStroke = Instance.new("UIStroke", FrameBox) CardStroke.Color = Color3.fromRGB(255, 255, 255) CardStroke.Thickness = 1.5 local CoverArt = Instance.new("ImageLabel", FrameBox) CoverArt.Size = UDim2.new(1, 0, 1, 0) CoverArt.BackgroundTransparency = 1 CoverArt.ScaleType = Enum.ScaleType.Crop pcall(function() CoverArt.Image = Players:GetUserThumbnailAsync(targetPlayer.UserId, Enum.ThumbnailType.AvatarBust, Enum.ThumbnailSize.Size420x420) end) local DisplayLabel = Instance.new("TextLabel", FrameBox) DisplayLabel.Size = UDim2.new(1, -8, 0, 14) DisplayLabel.Position = UDim2.new(0, 4, 1, -18) DisplayLabel.BackgroundTransparency = 1 DisplayLabel.TextColor3 = Color3.fromRGB(255, 255, 255) DisplayLabel.TextSize = 10 DisplayLabel.Font = Enum.Font.GothamBold DisplayLabel.TextTruncate = Enum.TextTruncate.AtEnd DisplayLabel.TextXAlignment = Enum.TextXAlignment.Left DisplayLabel.Text = targetPlayer.DisplayName Card.MouseButton1Click:Connect(function() if not SystemState.IsLocked and SystemState.TargetIndex ~= i then SystemState.CurrentIndex = SystemState.TargetIndex SystemState.TargetIndex = i SystemState.TransitionProgress = 0 end end) CardInstances[targetPlayer.UserId] = Card end if #SystemState.TargetList == 0 then UI.FocusedTitle.Text = "No Active Targets" UI.FocusedSub.Text = "Swipe cards or type ;roast " UI.MetaAge.Text = "๐ŸŽ‚ Age: --" UI.MetaLocation.Text = "๐ŸŒ Location: --" UI.MetaReason.Text = "๐ŸŽฏ Reason: --" UI.MetaShame.Text = "๐Ÿ”ฅ Roasts: 0" UI.MetaDevice.Text = "๐Ÿ“ฑ Device: --" end RenderCarousel() end RunService.RenderStepped:Connect(function(dt) if SystemState.TransitionProgress < 1 then SystemState.TransitionProgress = math.min(1, SystemState.TransitionProgress + (dt / 0.25)) end if SystemState.MenuOpen then RenderCarousel() end end) UI.CommandBar.FocusLost:Connect(function(enterPressed) if enterPressed then local text = UI.CommandBar.Text UI.CommandBar.Text = "" local parts = {} for w in text:gmatch("%S+") do table.insert(parts, w) end if #parts > 0 then local cmd = parts[1]:lower() if (cmd == ";roast" or cmd == "roast") and parts[2] then local target = FindPlayerByPartialName(parts[2]) if target and not SystemState.Whitelisted[target] then local loc = FetchPlayerLocation(target) SystemState.Targets[target] = { Player = target, LastRoast = 0, RoastCount = 0, Reason = "Manual Target", Location = loc } UpdateCarousel() end elseif (cmd == ";wl" or cmd == "wl" or cmd == ";friend" or cmd == "friend") and parts[2] then local target = FindPlayerByPartialName(parts[2]) if target then SystemState.Whitelisted[target] = true SystemState.Targets[target] = nil UpdateCarousel() SendChatMessage("Whitelisted " .. (target.DisplayName or target.Name) .. " ๐Ÿ›ก๏ธ (Safe from targeting)") end elseif (cmd == ";unwl" or cmd == "unwl" or cmd == ";unfriend" or cmd == "unfriend") and parts[2] then local target = FindPlayerByPartialName(parts[2]) if target then SystemState.Whitelisted[target] = nil SendChatMessage("Removed whitelist for " .. (target.DisplayName or target.Name) .. " ๐Ÿ‘€") end elseif (cmd == ";ignore" or cmd == "ignore") and parts[2] then local target = FindPlayerByPartialName(parts[2]) if target then SystemState.Whitelisted[target] = true SystemState.Targets[target] = nil UpdateCarousel() SendChatMessage("Ignored " .. (target.DisplayName or target.Name) .. " ๐Ÿ›ก๏ธ") end elseif (cmd == ";unignore" or cmd == "unignore") and parts[2] then local target = FindPlayerByPartialName(parts[2]) if target then SystemState.Whitelisted[target] = nil SendChatMessage("Unignored " .. (target.DisplayName or target.Name) .. " ๐Ÿ‘€") end elseif cmd == ";stop" or cmd == "stop" then if parts[2] then local target = FindPlayerByPartialName(parts[2]) if target then SystemState.Targets[target] = nil end else SystemState.Targets = {} end UpdateCarousel() end end end end) local function MonitorAutoTargeting(sender, message) if sender == LocalPlayer or SystemState.Whitelisted[sender] then return end local msgLower = message:lower() local myName = LocalPlayer.Name:lower() local myDisplay = LocalPlayer.DisplayName:lower() local mentionsMe = msgLower:find(myName) or msgLower:find(myDisplay) or msgLower:find("you") if SystemState.Targets[sender] then if IsTrueApology(message) then SystemState.Targets[sender] = nil UpdateCarousel() local template = CustomApologies[math.random(1, #CustomApologies)] local finalApology = template:gsub("%(user%)", sender.DisplayName or sender.Name) SendChatMessage(finalApology) return end end if mentionsMe then for _, nice in ipairs(NiceKeywords) do if msgLower:find(nice) then return end end for _, aggro in ipairs(AggroKeywords) do if msgLower:find(aggro) then if not SystemState.Targets[sender] then local loc = FetchPlayerLocation(sender) SystemState.Targets[sender] = { Player = sender, LastRoast = 0, RoastCount = 0, Reason = "Trigger: '" .. aggro .. "'", Location = loc } UpdateCarousel() end return end end end end local function AttachChatListener(player) player.Chatted:Connect(function(msg) MonitorAutoTargeting(player, msg) local targetData = SystemState.Targets[player] if targetData and not SystemState.Whitelisted[player] then local now = os.time() if (now - (targetData.LastRoast or 0)) >= 3 then targetData.LastRoast = now targetData.RoastCount = (targetData.RoastCount or 0) + 1 SystemState.TotalSessionRoasts = SystemState.TotalSessionRoasts + 1 UI.MetaSessionStats.Text = string.format("โšก Session Stats: %d Total Combacks Fired", SystemState.TotalSessionRoasts) task.delay(2, function() local response = GenerateDynamicComboResponse(player, msg) SendChatMessage(response) if SystemState.TargetList[SystemState.TargetIndex] == player then UI.MetaShame.Text = "๐Ÿ”ฅ Roasts: " .. tostring(targetData.RoastCount) end end) end end end) end for _, p in ipairs(Players:GetPlayers()) do if p ~= LocalPlayer then AttachChatListener(p) end end Players.PlayerAdded:Connect(AttachChatListener) Players.PlayerRemoving:Connect(function(p) SystemState.Targets[p] = nil SystemState.Whitelisted[p] = nil UpdateCarousel() end)