--[[ GUESS WHO ULTRA ASSISTANT & SOLVER (УГАДАЙ КТО) [RU / EN Dual-Language Edition] Features: - Smart In-game Match HUD - 50/50 Information Theory Optimal Question Solver - Live Opponent & Board Candidate ESP - Auto-Flip Gamepass Unlocker & Fast Flip - Full Dashboard with RU / EN Language Switcher - Toggle with RightShift ]] local Players = game:GetService("Players") local TweenService = game:GetService("TweenService") local UserInputService = game:GetService("UserInputService") local RunService = game:GetService("RunService") local ReplicatedStorage = game:GetService("ReplicatedStorage") local LocalPlayer = Players.LocalPlayer local PlayerGui = LocalPlayer:WaitForChild("PlayerGui") -- Cleanup previous instance if PlayerGui:FindFirstChild("GuessWhoUltraAssistant") then PlayerGui.GuessWhoUltraAssistant:Destroy() end if _G.GuessWhoAssistant_Cleanup then pcall(_G.GuessWhoAssistant_Cleanup) end -- Game Modules & Remotes local Shared = ReplicatedStorage:WaitForChild("Shared") local CharacterData = require(Shared:WaitForChild("characters"):WaitForChild("CharacterData")) local QuestionCatalogue = require(Shared:WaitForChild("match"):WaitForChild("QuestionCatalogue")) local MatchConfig = require(Shared:WaitForChild("match"):WaitForChild("MatchConfig")) local MatchRemotes = require(Shared:WaitForChild("match"):WaitForChild("MatchRemotes")) local BoardConfig = require(Shared:WaitForChild("board"):WaitForChild("BoardConfig")) -- 30 Character Image Asset IDs local ICONS = { Ace = "rbxassetid://89692261343405", Bo = "rbxassetid://127959519815534", Coco = "rbxassetid://134513241817551", Daisy = "rbxassetid://75617017110034", Dex = "rbxassetid://104027422111427", Fern = "rbxassetid://94064121012694", Finn = "rbxassetid://102919375315159", Gigi = "rbxassetid://136187637834928", Gus = "rbxassetid://132003850037908", Hazel = "rbxassetid://109647626924661", Hugo = "rbxassetid://104735962518107", Ivy = "rbxassetid://105983806489389", Jack = "rbxassetid://105222372738901", June = "rbxassetid://82865657137200", Kai = "rbxassetid://112169148079681", Leo = "rbxassetid://120469717020970", Lulu = "rbxassetid://131498912177926", Max = "rbxassetid://79894298228368", Mia = "rbxassetid://87720413565534", Molly = "rbxassetid://76017943155366", Nell = "rbxassetid://83131275615167", Otis = "rbxassetid://112355432777561", Pip = "rbxassetid://106809036386303", Ruby = "rbxassetid://119142851521704", Sam = "rbxassetid://114057970904161", Tess = "rbxassetid://80452898973801", Vic = "rbxassetid://126736246055405", Winnie = "rbxassetid://133737866628801", Zack = "rbxassetid://70751546705117", Zara = "rbxassetid://80431301570767" } -- Localization Dictionaries local RU_QUESTIONS = { ["Gender|Male"] = "Это мужчина?", ["Gender|Female"] = "Это женщина?", ["Hair|Short"] = "У него/неё короткие волосы?", ["Hair|Long"] = "У него/неё длинные волосы?", ["Hair|Bald"] = "Персонаж лысый?", ["HairColor|BlackHairColor"] = "Черные волосы?", ["HairColor|BrownHairColor"] = "Каштановые (коричневые) волосы?", ["HairColor|BlondeHairColor"] = "Светлые волосы (блондин)?", ["HairColor|GreyHairColor"] = "Седые волосы?", ["HairColor|RedHairColor"] = "Рыжие волосы?", ["EyeColor|BlueEyeColor"] = "Голубые глаза?", ["EyeColor|BrownEyeColor"] = "Карие глаза?", ["EyeColor|GreenEyeColor"] = "Зеленые глаза?", ["SkinTone|Light"] = "Светлая кожа?", ["SkinTone|Olive"] = "Оливковая кожа?", ["SkinTone|Dark"] = "Темная кожа?", ["FacialHair|Mustache"] = "Есть усы?", ["FacialHair|Beard"] = "Есть борода?", ["Accessories|Glassess"] = "Носит очки?", ["Accessories|Hat"] = "Есть головной убор (шляпа)?", ["Accessories|Jewellery"] = "Есть украшения (серьги/колье)?" } local TRANSLATIONS = { RU = { HUD_TITLE = "🎯 GUESS WHO ASSISTANT • В ИГРЕ", HUD_OPPONENT = "Оппонент: %s", HUD_OPPONENT_WAITING = "Ожидание оппонента...", HUD_TARGET_FOUND = "🌟 ЦЕЛЬ ОПРЕДЕЛЕНА: %s!", HUD_CANDIDATES = "🔍 Кандидатов: %d", HUD_BEST_Q = "💡 Рекомендуемый вопрос: %s (делит %d на %d)", HUD_ANY_Q = "💡 Задайте любой уточняющий вопрос", HUD_MAKE_GUESS = "🎯 СДЕЛАЙТЕ ДОГАДКУ: Выберите карточку %s на доске!", MINI_TOGGLE = "⚡ МЕНЮ [RShift]", MAIN_TITLE = "🔮 GUESS WHO SOLVER & ASSISTANT", TAB_SOLVER = "🎯 Солвер & Матч", TAB_CARDS = "🃏 Все Карточки (30)", TAB_TWEAKS = "⚡ Чит-Функции", TAB_RADAR = "👁 Столы Сервера", MATCH_INFO_TITLE = "ИНФОРМАЦИЯ О ТЕКУЩЕМ МАТЧЕ", MATCH_OPPONENT = "Соперник: %s", MATCH_OUT = "Вне матча", MATCH_TARGET_100 = "🌟 ЗАГАДАННАЯ КАРТОЧКА: %s (100% ГАРАНТИЯ)", MATCH_CANDIDATES_COUNT = "🎯 Кандидатов осталось: %d из 30", MATCH_RECOMMEND_MOVE = "💡 Рекомендуемый вопрос: %s", MATCH_WIN_CLICK = "🎯 Нажмите на %s на поле для победы!", REMAINING_CANDIDATES = "ОСТАВШИЕСЯ КАНДИДАТЫ ОППОНЕНТА:", TWEAK_AUTOFLIP = "🔓 Бесплатный Auto-Flip", TWEAK_AUTOFLIP_DESC = "Активирует авто-переворот неподходящих карточек", TWEAK_ESP = "✨ 3D ESP Подсветка Доски", TWEAK_ESP_DESC = "Подсвечивает стоящие тайлы на поле цветом статуса", TWEAK_HINT = "💡 Подсказка правильного ответа", TWEAK_HINT_DESC = "Подсвечивает верный ответ (Да/Нет) при вопросе соперника", TWEAK_INSTANT_FLIP = "⚡ Мгновенно сбросить все отсеянные карточки", ON = "ВКЛ", OFF = "ВЫКЛ", RADAR_ROW = "🎮 %s vs %s • Осталось карточек: %d • Вопросов: %d", RADAR_BOT = "Бот" }, EN = { HUD_TITLE = "🎯 GUESS WHO ASSISTANT • IN MATCH", HUD_OPPONENT = "Opponent: %s", HUD_OPPONENT_WAITING = "Waiting for opponent...", HUD_TARGET_FOUND = "🌟 TARGET IDENTIFIED: %s!", HUD_CANDIDATES = "🔍 Candidates: %d", HUD_BEST_Q = "💡 Best Question: %s (splits %d vs %d)", HUD_ANY_Q = "💡 Ask any clarifying question", HUD_MAKE_GUESS = "🎯 MAKE A GUESS: Select card %s on board!", MINI_TOGGLE = "⚡ MENU [RShift]", MAIN_TITLE = "🔮 GUESS WHO SOLVER & ASSISTANT", TAB_SOLVER = "🎯 Solver & Match", TAB_CARDS = "🃏 All Cards (30)", TAB_TWEAKS = "⚡ Cheat Features", TAB_RADAR = "👁 Server Radar", MATCH_INFO_TITLE = "CURRENT MATCH INFORMATION", MATCH_OPPONENT = "Opponent: %s", MATCH_OUT = "Out of match", MATCH_TARGET_100 = "🌟 TARGET CARD: %s (100% ACCURACY)", MATCH_CANDIDATES_COUNT = "🎯 Candidates remaining: %d of 30", MATCH_RECOMMEND_MOVE = "💡 Recommended question: %s", MATCH_WIN_CLICK = "🎯 Select %s on the board to win!", REMAINING_CANDIDATES = "REMAINING OPPONENT CANDIDATES:", TWEAK_AUTOFLIP = "🔓 Free Auto-Flip", TWEAK_AUTOFLIP_DESC = "Enables auto-flipping of eliminated cards", TWEAK_ESP = "✨ 3D Board ESP Highlight", TWEAK_ESP_DESC = "Highlights standing tiles on board with status colors", TWEAK_HINT = "💡 True Answer Hint", TWEAK_HINT_DESC = "Highlights true reply (Yes/No) when opponent asks", TWEAK_INSTANT_FLIP = "⚡ Instant Flip All Eliminated Cards", ON = "ON", OFF = "OFF", RADAR_ROW = "🎮 %s vs %s • Cards Left: %d • Questions: %d", RADAR_BOT = "Bot" } } -- State local State = { lang = "RU", -- "RU" or "EN" inMatch = false, opponent = nil, opponentUserId = nil, mySecret = nil, candidates = {}, history = {}, espEnabled = true, autoAnswerHint = true, menuOpen = false } local function T(key, ...) local dict = TRANSLATIONS[State.lang] or TRANSLATIONS.RU local str = dict[key] or key if select("#", ...) > 0 then return string.format(str, ...) end return str end for _, c in ipairs(CharacterData) do table.insert(State.candidates, c) end -- Unlock Gamepasses / Free Features local function unlockFeatures() pcall(function() LocalPlayer:SetAttribute("OwnsAutoFlip", true) LocalPlayer:SetAttribute("AutoFlipEnabled", true) LocalPlayer:SetAttribute("DevFreeFlip", true) end) end unlockFeatures() -- Solver Engine local Solver = {} function Solver.reset() State.candidates = {} for _, c in ipairs(CharacterData) do table.insert(State.candidates, c) end State.history = {} end function Solver.filter(question, answer, reply) table.insert(State.history, {question = question, answer = answer, reply = reply}) local nextCandidates = {} local wantMatch = (reply == "Yes") for _, c in ipairs(State.candidates) do local matches = QuestionCatalogue.matches(c, question, answer) if matches == wantMatch then table.insert(nextCandidates, c) end end State.candidates = nextCandidates end function Solver.getBestQuestion() local total = #State.candidates if total <= 1 then return nil end local target = total / 2 local allPairs = QuestionCatalogue.allPairs() local bestPair = nil local bestDiff = math.huge for _, pair in ipairs(allPairs) do local yesCount = 0 for _, c in ipairs(State.candidates) do if QuestionCatalogue.matches(c, pair.question, pair.answer) then yesCount = yesCount + 1 end end if yesCount > 0 and yesCount < total then local diff = math.abs(yesCount - target) if diff < bestDiff then bestDiff = diff local engText = QuestionCatalogue.textFor(pair.question, pair.answer) or "" local ruKey = pair.question .. "|" .. pair.answer local ruText = RU_QUESTIONS[ruKey] or engText bestPair = { question = pair.question, answer = pair.answer, text = (State.lang == "RU") and ruText or engText, yesCount = yesCount, noCount = total - yesCount, diff = diff } end end end return bestPair end -- UI Construction local screenGui = Instance.new("ScreenGui") screenGui.Name = "GuessWhoUltraAssistant" screenGui.ResetOnSpawn = false screenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling screenGui.DisplayOrder = 1000 screenGui.Parent = PlayerGui local function createCorner(parent, radius) local c = Instance.new("UICorner") c.CornerRadius = UDim.new(0, radius or 8) c.Parent = parent return c end local function createStroke(parent, color, thickness) local s = Instance.new("UIStroke") s.Color = color or Color3.fromRGB(60, 65, 90) s.Thickness = thickness or 1 s.ApplyStrokeMode = Enum.ApplyStrokeMode.Border s.Parent = parent return s end -- Top In-Game HUD (Compact) local matchHud = Instance.new("Frame") matchHud.Name = "MatchHUD" matchHud.Size = UDim2.new(0, 490, 0, 105) matchHud.Position = UDim2.new(0.5, -245, 0, 15) matchHud.BackgroundColor3 = Color3.fromRGB(15, 17, 26) matchHud.BackgroundTransparency = 0.12 matchHud.BorderSizePixel = 0 matchHud.Visible = false matchHud.Parent = screenGui createCorner(matchHud, 14) createStroke(matchHud, Color3.fromRGB(124, 58, 237), 1.5) local hudGlow = Instance.new("ImageLabel") hudGlow.Name = "Glow" hudGlow.BackgroundTransparency = 1 hudGlow.Position = UDim2.new(0, -15, 0, -15) hudGlow.Size = UDim2.new(1, 30, 1, 30) hudGlow.Image = "rbxassetid://5028857084" hudGlow.ImageColor3 = Color3.fromRGB(124, 58, 237) hudGlow.ImageTransparency = 0.7 hudGlow.ScaleType = Enum.ScaleType.Slice hudGlow.SliceCenter = Rect.new(24, 24, 276, 276) hudGlow.Parent = matchHud local hudTitle = Instance.new("TextLabel") hudTitle.Name = "Title" hudTitle.Size = UDim2.new(1, -28, 0, 22) hudTitle.Position = UDim2.new(0, 14, 0, 6) hudTitle.BackgroundTransparency = 1 hudTitle.Font = Enum.Font.GothamBold hudTitle.TextSize = 13 hudTitle.TextColor3 = Color3.fromRGB(167, 139, 250) hudTitle.TextXAlignment = Enum.TextXAlignment.Left hudTitle.Text = T("HUD_TITLE") hudTitle.Parent = matchHud local hudOpponent = Instance.new("TextLabel") hudOpponent.Size = UDim2.new(1, -28, 0, 18) hudOpponent.Position = UDim2.new(0, 14, 0, 28) hudOpponent.BackgroundTransparency = 1 hudOpponent.Font = Enum.Font.GothamMedium hudOpponent.TextSize = 12 hudOpponent.TextColor3 = Color3.fromRGB(200, 205, 225) hudOpponent.TextXAlignment = Enum.TextXAlignment.Left hudOpponent.Text = T("HUD_OPPONENT", T("HUD_OPPONENT_WAITING")) hudOpponent.Parent = matchHud local hudTarget = Instance.new("TextLabel") hudTarget.Size = UDim2.new(1, -28, 0, 24) hudTarget.Position = UDim2.new(0, 14, 0, 48) hudTarget.BackgroundTransparency = 1 hudTarget.Font = Enum.Font.GothamBold hudTarget.TextSize = 15 hudTarget.TextColor3 = Color3.fromRGB(52, 211, 153) hudTarget.TextXAlignment = Enum.TextXAlignment.Left hudTarget.Text = T("HUD_CANDIDATES", 30) hudTarget.Parent = matchHud local hudBestQ = Instance.new("TextLabel") hudBestQ.Size = UDim2.new(1, -28, 0, 22) hudBestQ.Position = UDim2.new(0, 14, 0, 74) hudBestQ.BackgroundTransparency = 1 hudBestQ.Font = Enum.Font.GothamMedium hudBestQ.TextSize = 12 hudBestQ.TextColor3 = Color3.fromRGB(251, 191, 36) hudBestQ.TextXAlignment = Enum.TextXAlignment.Left hudBestQ.Text = T("HUD_BEST_Q", "...", 15, 15) hudBestQ.Parent = matchHud -- Mini Floating Toggle Button local miniToggle = Instance.new("TextButton") miniToggle.Name = "MiniToggle" miniToggle.Size = UDim2.new(0, 150, 0, 34) miniToggle.Position = UDim2.new(0, 15, 0, 15) miniToggle.BackgroundColor3 = Color3.fromRGB(20, 22, 34) miniToggle.BackgroundTransparency = 0.15 miniToggle.Font = Enum.Font.GothamBold miniToggle.TextSize = 12 miniToggle.TextColor3 = Color3.fromRGB(220, 225, 245) miniToggle.Text = T("MINI_TOGGLE") miniToggle.Parent = screenGui createCorner(miniToggle, 8) createStroke(miniToggle, Color3.fromRGB(124, 58, 237), 1) -- Main Dashboard Window local mainWindow = Instance.new("Frame") mainWindow.Name = "MainWindow" mainWindow.Size = UDim2.new(0, 690, 0, 465) mainWindow.Position = UDim2.new(0.5, -345, 0.5, -232) mainWindow.BackgroundColor3 = Color3.fromRGB(15, 17, 26) mainWindow.BackgroundTransparency = 0.05 mainWindow.BorderSizePixel = 0 mainWindow.Visible = false mainWindow.ClipsDescendants = true mainWindow.Parent = screenGui createCorner(mainWindow, 14) createStroke(mainWindow, Color3.fromRGB(75, 80, 115), 1.5) -- Draggable Header local header = Instance.new("Frame") header.Name = "Header" header.Size = UDim2.new(1, 0, 0, 48) header.BackgroundColor3 = Color3.fromRGB(22, 25, 38) header.BorderSizePixel = 0 header.Parent = mainWindow createCorner(header, 14) local headerFlatBottom = Instance.new("Frame") headerFlatBottom.Size = UDim2.new(1, 0, 0, 12) headerFlatBottom.Position = UDim2.new(0, 0, 1, -12) headerFlatBottom.BackgroundColor3 = Color3.fromRGB(22, 25, 38) headerFlatBottom.BorderSizePixel = 0 headerFlatBottom.Parent = header local title = Instance.new("TextLabel") title.Size = UDim2.new(0.55, 0, 1, 0) title.Position = UDim2.new(0, 16, 0, 0) title.BackgroundTransparency = 1 title.Font = Enum.Font.GothamBold title.TextSize = 15 title.TextColor3 = Color3.fromRGB(240, 240, 255) title.TextXAlignment = Enum.TextXAlignment.Left title.Text = T("MAIN_TITLE") title.Parent = header -- Language Switcher Button (in Header) local langBtn = Instance.new("TextButton") langBtn.Name = "LangSwitch" langBtn.Size = UDim2.new(0, 85, 0, 30) langBtn.Position = UDim2.new(1, -135, 0, 9) langBtn.BackgroundColor3 = Color3.fromRGB(35, 40, 60) langBtn.Font = Enum.Font.GothamBold langBtn.TextSize = 11 langBtn.TextColor3 = Color3.fromRGB(250, 250, 255) langBtn.Text = (State.lang == "RU") and "🇷🇺 RU" or "🇬🇧 EN" langBtn.Parent = header createCorner(langBtn, 6) createStroke(langBtn, Color3.fromRGB(124, 58, 237), 1) local closeBtn = Instance.new("TextButton") closeBtn.Size = UDim2.new(0, 32, 0, 32) closeBtn.Position = UDim2.new(1, -42, 0, 8) closeBtn.BackgroundColor3 = Color3.fromRGB(40, 45, 65) closeBtn.Font = Enum.Font.GothamBold closeBtn.TextSize = 14 closeBtn.TextColor3 = Color3.fromRGB(200, 205, 220) closeBtn.Text = "✕" closeBtn.Parent = header createCorner(closeBtn, 8) -- Tab Switcher Bar local tabContainer = Instance.new("Frame") tabContainer.Name = "Tabs" tabContainer.Size = UDim2.new(1, -32, 0, 36) tabContainer.Position = UDim2.new(0, 16, 0, 56) tabContainer.BackgroundColor3 = Color3.fromRGB(20, 23, 35) tabContainer.Parent = mainWindow createCorner(tabContainer, 8) local tabLayout = Instance.new("UIListLayout") tabLayout.FillDirection = Enum.FillDirection.Horizontal tabLayout.Padding = UDim.new(0, 6) tabLayout.SortOrder = Enum.SortOrder.LayoutOrder tabLayout.Parent = tabContainer local currentTab = "Solver" local tabButtons = {} local tabPages = {} local pagesContainer = Instance.new("Frame") pagesContainer.Name = "Pages" pagesContainer.Size = UDim2.new(1, -32, 1, -110) pagesContainer.Position = UDim2.new(0, 16, 0, 98) pagesContainer.BackgroundTransparency = 1 pagesContainer.Parent = mainWindow local function createTab(name, titleKey, layoutOrder) local btn = Instance.new("TextButton") btn.Name = name .. "Tab" btn.Size = UDim2.new(0, 152, 1, 0) btn.BackgroundColor3 = (name == currentTab) and Color3.fromRGB(124, 58, 237) or Color3.fromRGB(26, 30, 46) btn.Font = Enum.Font.GothamBold btn.TextSize = 12 btn.TextColor3 = (name == currentTab) and Color3.fromRGB(255, 255, 255) or Color3.fromRGB(170, 175, 200) btn.Text = T(titleKey) btn.LayoutOrder = layoutOrder btn.Parent = tabContainer createCorner(btn, 6) tabButtons[name] = {btn = btn, key = titleKey} local page = Instance.new("ScrollingFrame") page.Name = name .. "Page" page.Size = UDim2.new(1, 0, 1, 0) page.BackgroundTransparency = 1 page.BorderSizePixel = 0 page.ScrollBarThickness = 4 page.ScrollBarImageColor3 = Color3.fromRGB(90, 80, 150) page.Visible = (name == currentTab) page.Parent = pagesContainer tabPages[name] = page btn.Activated:Connect(function() currentTab = name for k, item in pairs(tabButtons) do local active = (k == currentTab) TweenService:Create(item.btn, TweenInfo.new(0.2), { BackgroundColor3 = active and Color3.fromRGB(124, 58, 237) or Color3.fromRGB(26, 30, 46), TextColor3 = active and Color3.fromRGB(255, 255, 255) or Color3.fromRGB(170, 175, 200) }):Play() if tabPages[k] then tabPages[k].Visible = active end end end) return page end local solverPage = createTab("Solver", "TAB_SOLVER", 1) local cardsPage = createTab("Cards", "TAB_CARDS", 2) local tweaksPage = createTab("Tweaks", "TAB_TWEAKS", 3) local radarPage = createTab("Radar", "TAB_RADAR", 4) -- TAB 1: SOLVER local solverLayout = Instance.new("UIListLayout") solverLayout.Padding = UDim.new(0, 10) solverLayout.SortOrder = Enum.SortOrder.LayoutOrder solverLayout.Parent = solverPage local statusCard = Instance.new("Frame") statusCard.Size = UDim2.new(1, -6, 0, 110) statusCard.BackgroundColor3 = Color3.fromRGB(22, 26, 40) statusCard.Parent = solverPage createCorner(statusCard, 10) createStroke(statusCard, Color3.fromRGB(55, 60, 85), 1) local statusTitle = Instance.new("TextLabel") statusTitle.Size = UDim2.new(1, -20, 0, 24) statusTitle.Position = UDim2.new(0, 12, 0, 8) statusTitle.BackgroundTransparency = 1 statusTitle.Font = Enum.Font.GothamBold statusTitle.TextSize = 14 statusTitle.TextColor3 = Color3.fromRGB(139, 92, 246) statusTitle.TextXAlignment = Enum.TextXAlignment.Left statusTitle.Text = T("MATCH_INFO_TITLE") statusTitle.Parent = statusCard local solverOpponentText = Instance.new("TextLabel") solverOpponentText.Size = UDim2.new(0.5, 0, 0, 20) solverOpponentText.Position = UDim2.new(0, 12, 0, 34) solverOpponentText.BackgroundTransparency = 1 solverOpponentText.Font = Enum.Font.GothamMedium solverOpponentText.TextSize = 13 solverOpponentText.TextColor3 = Color3.fromRGB(220, 225, 240) solverOpponentText.TextXAlignment = Enum.TextXAlignment.Left solverOpponentText.Text = T("MATCH_OPPONENT", T("MATCH_OUT")) solverOpponentText.Parent = statusCard local solverTargetText = Instance.new("TextLabel") solverTargetText.Size = UDim2.new(1, -24, 0, 24) solverTargetText.Position = UDim2.new(0, 12, 0, 56) solverTargetText.BackgroundTransparency = 1 solverTargetText.Font = Enum.Font.GothamBold solverTargetText.TextSize = 15 solverTargetText.TextColor3 = Color3.fromRGB(52, 211, 153) solverTargetText.TextXAlignment = Enum.TextXAlignment.Left solverTargetText.Text = T("MATCH_CANDIDATES_COUNT", 30) solverTargetText.Parent = statusCard local solverBestQText = Instance.new("TextLabel") solverBestQText.Size = UDim2.new(1, -24, 0, 22) solverBestQText.Position = UDim2.new(0, 12, 0, 80) solverBestQText.BackgroundTransparency = 1 solverBestQText.Font = Enum.Font.GothamMedium solverBestQText.TextSize = 12 solverBestQText.TextColor3 = Color3.fromRGB(251, 191, 36) solverBestQText.TextXAlignment = Enum.TextXAlignment.Left solverBestQText.Text = T("MATCH_RECOMMEND_MOVE", "...") solverBestQText.Parent = statusCard local candidateSectionTitle = Instance.new("TextLabel") candidateSectionTitle.Size = UDim2.new(1, -6, 0, 24) candidateSectionTitle.BackgroundTransparency = 1 candidateSectionTitle.Font = Enum.Font.GothamBold candidateSectionTitle.TextSize = 13 candidateSectionTitle.TextColor3 = Color3.fromRGB(160, 165, 190) candidateSectionTitle.TextXAlignment = Enum.TextXAlignment.Left candidateSectionTitle.Text = T("REMAINING_CANDIDATES") candidateSectionTitle.Parent = solverPage local candidateGrid = Instance.new("Frame") candidateGrid.Size = UDim2.new(1, -6, 0, 160) candidateGrid.BackgroundTransparency = 1 candidateGrid.Parent = solverPage local gridLayout = Instance.new("UIGridLayout") gridLayout.CellSize = UDim2.new(0, 92, 0, 76) gridLayout.CellPadding = UDim2.new(0, 8, 0, 8) gridLayout.Parent = candidateGrid -- TAB 2: 30 CARDS GALLERY local cardsGrid = Instance.new("Frame") cardsGrid.Size = UDim2.new(1, -6, 0, 520) cardsGrid.BackgroundTransparency = 1 cardsGrid.Parent = cardsPage local cardsGridLayout = Instance.new("UIGridLayout") cardsGridLayout.CellSize = UDim2.new(0, 96, 0, 96) cardsGridLayout.CellPadding = UDim2.new(0, 8, 0, 8) cardsGridLayout.Parent = cardsGrid local function populateCardsGallery() for _, c in ipairs(CharacterData) do local card = Instance.new("Frame") card.Name = c.name card.BackgroundColor3 = Color3.fromRGB(22, 26, 40) card.Parent = cardsGrid createCorner(card, 8) createStroke(card, Color3.fromRGB(50, 55, 75), 1) local icon = Instance.new("ImageLabel") icon.Size = UDim2.new(1, -12, 1, -26) icon.Position = UDim2.new(0, 6, 0, 6) icon.BackgroundTransparency = 1 icon.Image = ICONS[c.name] or "" icon.ScaleType = Enum.ScaleType.Fit icon.Parent = card local name = Instance.new("TextLabel") name.Size = UDim2.new(1, 0, 0, 16) name.Position = UDim2.new(0, 0, 1, -18) name.BackgroundTransparency = 1 name.Font = Enum.Font.GothamBold name.TextSize = 11 name.TextColor3 = Color3.fromRGB(220, 225, 245) name.Text = c.name name.Parent = card end end populateCardsGallery() -- TAB 3: TWEAKS local tweaksLayout = Instance.new("UIListLayout") tweaksLayout.Padding = UDim.new(0, 8) tweaksLayout.Parent = tweaksPage local tweakControls = {} local function createToggle(parent, titleKey, descKey, initialVal, onToggle) local row = Instance.new("Frame") row.Size = UDim2.new(1, -6, 0, 56) row.BackgroundColor3 = Color3.fromRGB(22, 26, 40) row.Parent = parent createCorner(row, 8) createStroke(row, Color3.fromRGB(50, 55, 75), 1) local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(0.7, 0, 0, 20) lbl.Position = UDim2.new(0, 12, 0, 8) lbl.BackgroundTransparency = 1 lbl.Font = Enum.Font.GothamBold lbl.TextSize = 13 lbl.TextColor3 = Color3.fromRGB(240, 240, 255) lbl.TextXAlignment = Enum.TextXAlignment.Left lbl.Text = T(titleKey) lbl.Parent = row local desc = Instance.new("TextLabel") desc.Size = UDim2.new(0.7, 0, 0, 18) desc.Position = UDim2.new(0, 12, 0, 28) desc.BackgroundTransparency = 1 desc.Font = Enum.Font.Gotham desc.TextSize = 11 desc.TextColor3 = Color3.fromRGB(150, 155, 180) desc.TextXAlignment = Enum.TextXAlignment.Left desc.Text = T(descKey) desc.Parent = row local btn = Instance.new("TextButton") btn.Size = UDim2.new(0, 70, 0, 32) btn.Position = UDim2.new(1, -82, 0, 12) btn.BackgroundColor3 = initialVal and Color3.fromRGB(16, 185, 129) or Color3.fromRGB(45, 50, 70) btn.Font = Enum.Font.GothamBold btn.TextSize = 11 btn.TextColor3 = Color3.fromRGB(255, 255, 255) btn.Text = initialVal and T("ON") or T("OFF") btn.Parent = row createCorner(btn, 6) local val = initialVal btn.Activated:Connect(function() val = not val btn.Text = val and T("ON") or T("OFF") TweenService:Create(btn, TweenInfo.new(0.2), { BackgroundColor3 = val and Color3.fromRGB(16, 185, 129) or Color3.fromRGB(45, 50, 70) }):Play() onToggle(val) end) table.insert(tweakControls, { lbl = lbl, titleKey = titleKey, desc = desc, descKey = descKey, btn = btn, getVal = function() return val end }) return row end createToggle(tweaksPage, "TWEAK_AUTOFLIP", "TWEAK_AUTOFLIP_DESC", true, function(v) LocalPlayer:SetAttribute("OwnsAutoFlip", v) LocalPlayer:SetAttribute("AutoFlipEnabled", v) end) createToggle(tweaksPage, "TWEAK_ESP", "TWEAK_ESP_DESC", State.espEnabled, function(v) State.espEnabled = v end) createToggle(tweaksPage, "TWEAK_HINT", "TWEAK_HINT_DESC", State.autoAnswerHint, function(v) State.autoAnswerHint = v end) local flipBtn = Instance.new("TextButton") flipBtn.Size = UDim2.new(1, -6, 0, 42) flipBtn.BackgroundColor3 = Color3.fromRGB(124, 58, 237) flipBtn.Font = Enum.Font.GothamBold flipBtn.TextSize = 13 flipBtn.TextColor3 = Color3.fromRGB(255, 255, 255) flipBtn.Text = T("TWEAK_INSTANT_FLIP") flipBtn.Parent = tweaksPage createCorner(flipBtn, 8) flipBtn.Activated:Connect(function() pcall(function() local myBoard = workspace.Boards:FindFirstChild("Board_" .. LocalPlayer.Name) if myBoard and myBoard:FindFirstChild("Tiles") then for _, tile in ipairs(myBoard.Tiles:GetChildren()) do local charName = tile:GetAttribute("CharacterName") local isCandidate = false for _, c in ipairs(State.candidates) do if c.name == charName then isCandidate = true break end end if not isCandidate then local remote = ReplicatedStorage.Remotes.Board.TileFlipped remote:FireServer(tile.Name, true) end end end end) end) -- TAB 4: RADAR local radarLayout = Instance.new("UIListLayout") radarLayout.Padding = UDim.new(0, 8) radarLayout.Parent = radarPage local function updateRadar() for _, ch in ipairs(radarPage:GetChildren()) do if ch:IsA("Frame") then ch:Destroy() end end for _, p in ipairs(Players:GetPlayers()) do local phase = p:GetAttribute("MatchPhase") local oppId = p:GetAttribute("MatchOpponentUserId") if phase == "Playing" and oppId then local opp = nil for _, other in ipairs(Players:GetPlayers()) do if other.UserId == oppId then opp = other break end end local b = workspace.Boards:FindFirstChild("Board_" .. p.Name) local count = b and b:FindFirstChild("Tiles") and #b.Tiles:GetChildren() or 0 local row = Instance.new("Frame") row.Size = UDim2.new(1, -6, 0, 52) row.BackgroundColor3 = Color3.fromRGB(22, 26, 40) row.Parent = radarPage createCorner(row, 8) createStroke(row, Color3.fromRGB(50, 55, 75), 1) local txt = Instance.new("TextLabel") txt.Size = UDim2.new(1, -20, 1, 0) txt.Position = UDim2.new(0, 12, 0, 0) txt.BackgroundTransparency = 1 txt.Font = Enum.Font.GothamMedium txt.TextSize = 12 txt.TextColor3 = Color3.fromRGB(220, 225, 240) txt.TextXAlignment = Enum.TextXAlignment.Left txt.Text = T("RADAR_ROW", p.DisplayName, opp and opp.DisplayName or T("RADAR_BOT"), count, p:GetAttribute("QuestionsAsked") or 0) txt.Parent = row end end end local function refreshCandidateGrid() for _, ch in ipairs(candidateGrid:GetChildren()) do if ch:IsA("Frame") then ch:Destroy() end end local count = #State.candidates candidateGrid.Size = UDim2.new(1, -6, 0, math.ceil(count / 6) * 84 + 10) for _, c in ipairs(State.candidates) do local card = Instance.new("Frame") card.Name = c.name card.BackgroundColor3 = Color3.fromRGB(26, 30, 46) card.Parent = candidateGrid createCorner(card, 6) local icon = Instance.new("ImageLabel") icon.Size = UDim2.new(1, -8, 1, -22) icon.Position = UDim2.new(0, 4, 0, 4) icon.BackgroundTransparency = 1 icon.Image = ICONS[c.name] or "" icon.ScaleType = Enum.ScaleType.Fit icon.Parent = card local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(1, 0, 0, 16) lbl.Position = UDim2.new(0, 0, 1, -16) lbl.BackgroundTransparency = 1 lbl.Font = Enum.Font.GothamBold lbl.TextSize = 10 lbl.TextColor3 = Color3.fromRGB(220, 225, 245) lbl.Text = c.name lbl.Parent = card end end local function updateUI() local count = #State.candidates local oppName = State.opponent and State.opponent.DisplayName or T("HUD_OPPONENT_WAITING") hudTitle.Text = T("HUD_TITLE") hudOpponent.Text = T("HUD_OPPONENT", oppName) solverOpponentText.Text = T("MATCH_OPPONENT", State.opponent and State.opponent.DisplayName or T("MATCH_OUT")) statusTitle.Text = T("MATCH_INFO_TITLE") candidateSectionTitle.Text = T("REMAINING_CANDIDATES") miniToggle.Text = T("MINI_TOGGLE") title.Text = T("MAIN_TITLE") flipBtn.Text = T("TWEAK_INSTANT_FLIP") for _, item in pairs(tweakControls) do item.lbl.Text = T(item.titleKey) item.desc.Text = T(item.descKey) item.btn.Text = item.getVal() and T("ON") or T("OFF") end for _, item in pairs(tabButtons) do item.btn.Text = T(item.key) end if count == 1 then local target = State.candidates[1].name hudTarget.Text = T("HUD_TARGET_FOUND", target) hudTarget.TextColor3 = Color3.fromRGB(251, 191, 36) solverTargetText.Text = T("MATCH_TARGET_100", target) solverTargetText.TextColor3 = Color3.fromRGB(251, 191, 36) hudBestQ.Text = T("HUD_MAKE_GUESS", target) solverBestQText.Text = T("MATCH_WIN_CLICK", target) else hudTarget.Text = T("HUD_CANDIDATES", count) hudTarget.TextColor3 = Color3.fromRGB(52, 211, 153) solverTargetText.Text = T("MATCH_CANDIDATES_COUNT", count) solverTargetText.TextColor3 = Color3.fromRGB(52, 211, 153) local best = Solver.getBestQuestion() if best then hudBestQ.Text = T("HUD_BEST_Q", best.text, best.yesCount, best.noCount) solverBestQText.Text = T("MATCH_RECOMMEND_MOVE", best.text) else hudBestQ.Text = T("HUD_ANY_Q") solverBestQText.Text = T("HUD_ANY_Q") end end refreshCandidateGrid() end -- Language Switch Action langBtn.Activated:Connect(function() State.lang = (State.lang == "RU") and "EN" or "RU" langBtn.Text = (State.lang == "RU") and "🇷🇺 RU" or "🇬🇧 EN" updateUI() updateRadar() end) -- Dragging local dragging = false local dragInput, dragStart, startPos header.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = mainWindow.Position end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = false end end) header.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then dragInput = input end end) UserInputService.InputChanged:Connect(function(input) if input == dragInput and dragging then local delta = input.Position - dragStart mainWindow.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end end) -- Toggle Menu local function toggleMenu() State.menuOpen = not State.menuOpen mainWindow.Visible = State.menuOpen if State.menuOpen then updateRadar() updateUI() mainWindow.Size = UDim2.new(0, 690, 0, 425) TweenService:Create(mainWindow, TweenInfo.new(0.25, Enum.EasingStyle.Back, Enum.EasingDirection.Out), { Size = UDim2.new(0, 690, 0, 465) }):Play() end end closeBtn.Activated:Connect(toggleMenu) miniToggle.Activated:Connect(toggleMenu) -- Keybind: RightShift UserInputService.InputBegan:Connect(function(input, processed) if processed then return end if input.KeyCode == Enum.KeyCode.RightShift then toggleMenu() end end) -- Match Remotes MatchRemotes.secretCharacter().OnClientEvent:Connect(function(charName) State.mySecret = charName end) MatchRemotes.questionAnswered().OnClientEvent:Connect(function(q, a, reply) local role = LocalPlayer:GetAttribute("MatchRole") if role == "Asking" then Solver.filter(q, a, reply) updateUI() end end) -- Watcher Loop task.spawn(function() while screenGui.Parent do unlockFeatures() local phase = LocalPlayer:GetAttribute("MatchPhase") local inGame = (phase == "Playing" or phase == "ReadyUpPhase" or phase == "Reveal") if inGame ~= State.inMatch then State.inMatch = inGame matchHud.Visible = inGame if inGame then Solver.reset() local oppId = LocalPlayer:GetAttribute("MatchOpponentUserId") if oppId then for _, p in ipairs(Players:GetPlayers()) do if p.UserId == oppId then State.opponent = p break end end end updateUI() end end -- 3D ESP if State.espEnabled and inGame then pcall(function() local myBoard = workspace.Boards:FindFirstChild("Board_" .. LocalPlayer.Name) if myBoard and myBoard:FindFirstChild("Tiles") then for _, tile in ipairs(myBoard.Tiles:GetChildren()) do local name = tile:GetAttribute("CharacterName") local hl = tile:FindFirstChild("SolverHighlight") or Instance.new("Highlight") hl.Name = "SolverHighlight" hl.Adornee = tile hl.Parent = tile local isCandidate = false for _, c in ipairs(State.candidates) do if c.name == name then isCandidate = true break end end if #State.candidates == 1 and isCandidate then hl.FillColor = Color3.fromRGB(251, 191, 36) hl.OutlineColor = Color3.fromRGB(255, 255, 255) hl.FillTransparency = 0.2 elseif isCandidate then hl.FillColor = Color3.fromRGB(16, 185, 129) hl.OutlineColor = Color3.fromRGB(52, 211, 153) hl.FillTransparency = 0.5 else hl.FillColor = Color3.fromRGB(239, 68, 68) hl.OutlineColor = Color3.fromRGB(150, 40, 40) hl.FillTransparency = 0.8 end end end end) end task.wait(0.5) end end) -- Cleanup Handler _G.GuessWhoAssistant_Cleanup = function() if screenGui then screenGui:Destroy() end for _, b in ipairs(workspace.Boards:GetChildren()) do for _, t in ipairs(b:GetDescendants()) do if t.Name == "SolverHighlight" then t:Destroy() end end end end updateUI() print("[GuessWho] Ultra Assistant [RU/EN] loaded successfully!")