local Players = game:GetService("Players") local ReplicatedStorage = game:GetService("ReplicatedStorage") local UserInputService = game:GetService("UserInputService") local VirtualInputManager = game:GetService("VirtualInputManager") local LocalPlayer = Players.LocalPlayer local PlayerGui = LocalPlayer:WaitForChild("PlayerGui") local CONFIG = { Enabled = true, MinWordLength = 2, MaxWordLength = 20, UseShortWords = true, RandomizeWords = true, HumanMode = false, MinTypeDelay = 0.08, MaxTypeDelay = 0.18, WarmupLetters = 3, WarmupMultiplier = 1.8, PauseChance = 0.12, MinPauseTime = 0.15, MaxPauseTime = 0.35, ReactionTime = 0.4, ReactionVariance = 0.5, SubmitDelay = 0, } local WORD_DATABASE = { A = {"ant", "ace", "age", "air", "aim", "art", "arm", "ash", "ask", "ate", "able", "acid", "also", "area", "army", "away", "apple", "anger", "among", "about"}, B = {"bat", "bag", "bad", "ban", "bar", "bed", "bet", "big", "bit", "box", "bus", "but", "buy", "back", "ball", "band", "bank", "base", "bear", "beat", "been", "bird", "blue", "boat", "body", "book", "born", "both", "bring"}, C = {"cab", "can", "cap", "car", "cat", "cup", "cut", "call", "came", "camp", "card", "care", "case", "cash", "cast", "city", "club", "coat", "cold", "come", "cool", "copy", "corn", "cost", "crew"}, D = {"dad", "dam", "day", "den", "did", "die", "dig", "dim", "dip", "dog", "dot", "dry", "due", "dug", "dark", "data", "date", "dead", "deal", "dear", "deep", "desk", "does", "done", "door", "down", "draw", "drop", "drug", "dust"}, E = {"ear", "eat", "egg", "end", "era", "eye", "each", "east", "easy", "edge", "else", "even", "ever", "evil", "exit", "early", "earth", "eight", "empty", "enemy", "enjoy", "enter", "entry", "equal", "error", "event", "every", "exact", "exist", "extra"}, F = {"fab", "fad", "fan", "far", "fat", "fax", "fed", "fee", "few", "fig", "fin", "fit", "fix", "fly", "fog", "for", "fox", "fun", "fur", "face", "fact", "fail", "fair", "fall", "fame", "farm", "fast", "fear", "feel", "feet", "fell", "felt", "file", "fill", "film", "find", "fine", "fire", "firm", "fish", "five", "flat", "flew", "flow", "food", "foot", "form", "fort", "four", "free", "from", "fuel", "full", "fund"}, G = {"gab", "gag", "gap", "gas", "gay", "gel", "gem", "get", "gig", "god", "got", "gum", "gun", "gut", "guy", "gym", "gain", "game", "gang", "gate", "gave", "gear", "gene", "gift", "girl", "give", "glad", "goal", "goes", "gold", "golf", "gone", "good", "grab", "gray", "grew", "grid", "grin", "grip", "grow", "gulf"}, H = {"had", "ham", "has", "hat", "hay", "hem", "hen", "her", "hid", "him", "hip", "his", "hit", "hog", "hop", "hot", "how", "hub", "hue", "hug", "hum", "hung", "hurt", "half", "hall", "hand", "hang", "hard", "harm", "hate", "have", "head", "hear", "heat", "held", "hell", "help", "here", "hero", "hide", "high", "hill", "hold", "hole", "holy", "home", "hope", "horn", "host", "hour", "huge", "human", "humor", "hurry"}, I = {"ice", "icy", "ill", "ink", "inn", "ion", "idea", "inch", "into", "iron", "item", "image", "imply", "index", "inner", "input", "issue", "itself"}, J = {"jab", "jag", "jam", "jar", "jaw", "jay", "jet", "jig", "job", "jog", "joy", "jug", "jazz", "jean", "jerk", "jolt", "joke", "join", "judge", "juice", "jump", "just"}, K = {"keg", "ken", "key", "kid", "kin", "kit", "keen", "keep", "kept", "kick", "kill", "kind", "king", "kiss", "kite", "knee", "knew", "knife", "knock", "know", "known"}, L = {"lab", "lac", "lad", "lag", "lap", "law", "lay", "lea", "led", "leg", "let", "lid", "lie", "lip", "lit", "log", "lot", "low", "lack", "lady", "laid", "lake", "lamp", "land", "lane", "last", "late", "lead", "leaf", "lean", "leap", "left", "lend", "less", "liar", "life", "lift", "like", "lily", "limb", "lime", "line", "link", "lion", "list", "live", "load", "loan", "lock", "logo", "lone", "long", "look", "loop", "lord", "lose", "loss", "lost", "lots", "loud", "love", "luck", "lung", "lying"}, M = {"mad", "mag", "man", "map", "mar", "mat", "may", "men", "met", "mid", "mix", "mob", "mom", "mop", "mud", "mug", "made", "mail", "main", "make", "male", "mall", "many", "mark", "mask", "mass", "mate", "math", "meal", "mean", "meat", "meet", "melt", "memo", "menu", "mere", "mess", "mile", "milk", "mill", "mind", "mine", "mint", "miss", "mode", "mold", "mood", "moon", "more", "most", "moth", "move", "much", "must", "myth"}, N = {"nab", "nag", "nap", "net", "new", "nil", "nip", "nit", "nod", "nor", "not", "now", "nun", "nut", "nail", "name", "navy", "near", "neat", "neck", "need", "nest", "news", "next", "nice", "nick", "nine", "node", "none", "noon", "norm", "nose", "note", "noun"}, O = {"oak", "oar", "oat", "odd", "off", "oil", "old", "one", "opt", "orb", "ore", "our", "out", "owe", "owl", "own", "obey", "odor", "okay", "once", "only", "onto", "open", "oral", "oven", "over", "owed", "owner", "occur", "ocean", "offer", "often", "olive", "onion", "opera", "orbit", "order", "organ", "other", "ought", "outer"}, P = {"pad", "pal", "pan", "par", "pat", "paw", "pay", "pea", "peg", "pen", "per", "pet", "pie", "pig", "pin", "pit", "pod", "pop", "pot", "pro", "pub", "pug", "pun", "pup", "put", "pace", "pack", "page", "paid", "pain", "pair", "pale", "palm", "pant", "park", "part", "pass", "past", "path", "pave", "peak", "peer", "pick", "pier", "pile", "pine", "pink", "pipe", "pity", "plan", "play", "plea", "plot", "plug", "plus", "poem", "poet", "pole", "poll", "pond", "pool", "poor", "pope", "pork", "port", "pose", "post", "pour", "pray", "prep", "prey", "prim", "prod", "prop", "pull", "pump", "punk", "pure", "push"}, Q = {"quad", "quay", "quell", "query", "quest", "queue", "quick", "quiet", "quilt", "quirk", "quite", "quota", "quote"}, R = {"rag", "ram", "ran", "rap", "rat", "raw", "ray", "red", "ref", "rep", "rib", "rid", "rig", "rim", "rip", "rob", "rod", "roe", "rot", "row", "rub", "rug", "run", "rut", "race", "rack", "rage", "raid", "rail", "rain", "rank", "rare", "rate", "rave", "read", "real", "rear", "rely", "rent", "rest", "rice", "rich", "ride", "ring", "riot", "rise", "risk", "road", "roam", "rock", "rode", "role", "roll", "roof", "room", "root", "rope", "rose", "rude", "ruin", "rule", "rush"}, S = {"sad", "sag", "sap", "sat", "saw", "say", "sea", "set", "sew", "sex", "she", "shy", "sin", "sip", "sir", "sis", "sit", "six", "ski", "sky", "sob", "sod", "son", "sop", "sow", "spa", "spy", "sub", "sue", "sum", "sun", "sup", "safe", "sage", "said", "sail", "sake", "sale", "salt", "same", "sand", "sang", "sank", "save", "scan", "seal", "seat", "seed", "seek", "seem", "seen", "self", "sell", "send", "sent", "shed", "ship", "shop", "shot", "show", "shut", "sick", "side", "sigh", "sign", "silk", "sing", "sink", "site", "size", "skin", "skip", "slam", "slap", "slid", "slim", "slip", "slow", "snap", "snow", "soak", "soap", "sock", "sofa", "soft", "soil", "sold", "sole", "some", "song", "soon", "sort", "soul", "soup", "spot", "star", "stay", "stem", "step", "stir", "stop", "such", "suck", "suit", "sung", "sunk", "sure", "swim"}, T = {"tab", "tad", "tag", "tan", "tap", "tar", "tax", "tea", "ten", "the", "tie", "tin", "tip", "toe", "ton", "too", "top", "tow", "toy", "try", "tub", "tug", "two", "take", "tale", "talk", "tall", "tank", "tape", "task", "team", "tear", "tech", "teen", "tell", "tend", "tent", "term", "test", "text", "than", "that", "them", "then", "they", "thin", "this", "thus", "tide", "tidy", "tier", "tile", "till", "tilt", "time", "tiny", "tire", "toad", "told", "toll", "tomb", "tone", "took", "tool", "tops", "tore", "torn", "toss", "tour", "town", "trap", "tray", "tree", "trim", "trip", "true", "tube", "tuck", "tune", "turf", "turn", "twin", "type"}, U = {"ugh", "undo", "unit", "upon", "urge", "used", "user", "ultra", "uncle", "under", "union", "unite", "unity", "until", "upper", "upset", "urban", "urged", "using", "usual"}, V = {"van", "vat", "vet", "via", "vie", "vim", "vow", "vain", "vale", "vary", "vast", "veil", "vein", "verb", "very", "vest", "vice", "view", "vine", "visa", "void", "volt", "vote", "value", "valid", "vapor", "vault", "venue", "verse", "video", "vigil", "vigor", "viral", "virus", "visit", "vital", "vivid", "vocal", "voice", "voter"}, W = {"wad", "wag", "war", "was", "wax", "way", "web", "wed", "wet", "who", "why", "wig", "win", "wit", "woe", "wok", "won", "woo", "wow", "wade", "wage", "wait", "wake", "walk", "wall", "want", "ward", "warm", "warn", "wary", "wash", "wave", "wavy", "weak", "wear", "weed", "week", "weep", "weigh", "well", "went", "were", "west", "what", "when", "whip", "wide", "wife", "wild", "will", "wind", "wine", "wing", "wink", "wire", "wise", "wish", "with", "woke", "wolf", "womb", "won't", "wood", "wool", "word", "wore", "work", "worm", "worn", "wrap", "wren"}, X = {"xray"}, Y = {"yam", "yap", "yaw", "yen", "yes", "yet", "yew", "yield", "yolk", "young", "your", "youth", "yard", "yarn", "year", "yell", "yellow", "yesterday"}, Z = {"zap", "zeal", "zero", "zest", "zinc", "zone", "zoom", "zebra", "zipper", "zombie"}, } local function loadExternalWordList() local function getEnvFunc(name) if _G[name] then return _G[name] end if getgenv then local env = getgenv() if env[name] then return env[name] end end return nil end local _isfile = getEnvFunc("isfile") local _readfile = getEnvFunc("readfile") local _writefile = getEnvFunc("writefile") local fileName = "AutoPlay_WordList.txt" local content = nil if _isfile and _readfile and _isfile(fileName) then pcall(function() content = _readfile(fileName) end) end if not content then local url = "https://raw.githubusercontent.com/dwyl/english-words/master/words_alpha.txt" local success, response = pcall(function() return game:HttpGet(url) end) if success and response then content = response if _writefile then pcall(function() _writefile(fileName, content) end) end end end if content then local newDB = {} local count = 0 for word in content:gmatch("[a-zA-Z]+") do if #word >= (CONFIG.MinWordLength or 3) then local first = word:sub(1, 1):upper() if not newDB[first] then newDB[first] = {} end table.insert(newDB[first], word) count = count + 1 end end if count > 1000 then WORD_DATABASE = newDB if CONFIG.UseShortWords then for letter, list in pairs(WORD_DATABASE) do table.sort(list, function(a, b) return #a < #b end) end end end end end task.spawn(loadExternalWordList) local usedWords = {} local function getValidWord(prefix) if not prefix or prefix == "" then return nil end local startLetter = prefix:sub(1, 1):upper() local words = WORD_DATABASE[startLetter] if not words then return nil end local validWords = {} local prefixLower = prefix:lower() for _, word in ipairs(words) do if #word >= CONFIG.MinWordLength and #word <= CONFIG.MaxWordLength then if word:sub(1, #prefix):lower() == prefixLower then if not usedWords[word:lower()] then table.insert(validWords, word:lower()) end end end end if #validWords == 0 then for _, word in ipairs(words) do if #word >= CONFIG.MinWordLength and #word <= CONFIG.MaxWordLength then if word:sub(1, #prefix):lower() == prefixLower then table.insert(validWords, word:lower()) end end end end if #validWords == 0 then return nil end if CONFIG.UseShortWords then table.sort(validWords, function(a, b) return #a < #b end) end local selectedWord if CONFIG.RandomizeWords then local index = math.random(1, math.min(5, #validWords)) selectedWord = validWords[index] else selectedWord = validWords[1] end usedWords[selectedWord] = true return selectedWord end local function typeLetter(letter) local keyCode = Enum.KeyCode[string.upper(letter)] if keyCode then VirtualInputManager:SendKeyEvent(true, keyCode, false, game) task.wait(0.01) VirtualInputManager:SendKeyEvent(false, keyCode, false, game) end end local function randomDelay(min, max) return min + math.random() * (max - min) end local function typeWord(word) for i = 1, #word do if CONFIG.HumanMode then local delay = randomDelay(CONFIG.MinTypeDelay, CONFIG.MaxTypeDelay) if i <= CONFIG.WarmupLetters then delay = delay * CONFIG.WarmupMultiplier end if i == #word then delay = delay * 1.3 end if math.random() < CONFIG.PauseChance then delay = delay + randomDelay(CONFIG.MinPauseTime, CONFIG.MaxPauseTime) end task.wait(delay) else task.wait(CONFIG.MinTypeDelay) end local letter = string.sub(word, i, i) typeLetter(letter) end end local function submitWord() VirtualInputManager:SendKeyEvent(true, Enum.KeyCode.Return, false, game) task.wait(0.01) VirtualInputManager:SendKeyEvent(false, Enum.KeyCode.Return, false, game) end local function getRequiredLetterLabel() local success, result = pcall(function() local inGameUI = PlayerGui:FindFirstChild("InGame") if not inGameUI then return nil end local frame = inGameUI:FindFirstChild("Frame") if not frame then return nil end local typeLabel = frame:FindFirstChild("Type") if typeLabel and typeLabel:IsA("TextLabel") then local text = typeLabel.Text local letter = text:match("starting with:%s*(%a)") if letter then return letter:upper() end letter = text:match("can form a word with:%s*(%a)") if letter then return letter:upper() end end return nil end) return success and result or nil end local function isOurTurn() local success, result = pcall(function() local inGameUI = PlayerGui:FindFirstChild("InGame") if not inGameUI then return false end local frame = inGameUI:FindFirstChild("Frame") if not frame or not frame.Visible then return false end local circle = frame:FindFirstChild("Circle") if not circle or not circle.Visible then return false end local typeLabel = frame:FindFirstChild("Type") if typeLabel and typeLabel:IsA("TextLabel") then local text = typeLabel.Text local displayName = LocalPlayer.DisplayName local userName = LocalPlayer.Name if string.find(text, displayName .. ",") or string.find(text, userName .. ",") then return true end end return false end) return success and result or false end local function isInGame() local inTable = LocalPlayer:GetAttribute("InTable") return inTable ~= nil end local isProcessing = false local lastPlayTime = 0 local function getCurrentPrefix() local success, result = pcall(function() local inGameUI = PlayerGui:FindFirstChild("InGame") if not inGameUI then return "" end local frame = inGameUI:FindFirstChild("Frame") if not frame then return "" end local currentWord = frame:FindFirstChild("CurrentWord") if not currentWord then return "" end local text = "" local index = 1 while true do local charFrame = currentWord:FindFirstChild(tostring(index)) if not charFrame then break end if charFrame:IsA("Frame") and charFrame.Visible then local letterLabel = charFrame:FindFirstChild("Letter") if letterLabel and letterLabel:IsA("TextLabel") then text = text .. letterLabel.Text end end index = index + 1 end return text end) return success and result or "" end local function autoPlay() if isProcessing then return end if not CONFIG.Enabled then return end if not isInGame() then return end if not isOurTurn() then return end local now = tick() if now - lastPlayTime < 1 then return end isProcessing = true lastPlayTime = now local prefix = getCurrentPrefix() if prefix == "" then local req = getRequiredLetterLabel() if req then prefix = req end end if prefix == "" then isProcessing = false return end local fullWord = getValidWord(prefix) if not fullWord then isProcessing = false return end local suffix = fullWord:sub(#prefix + 1) if suffix ~= "" then if CONFIG.HumanMode then local reactionDelay = CONFIG.ReactionTime + (math.random() * CONFIG.ReactionVariance) task.wait(reactionDelay) else task.wait(0.1) end typeWord(suffix) end local submitDelay = CONFIG.SubmitDelay if CONFIG.HumanMode then submitDelay = submitDelay + (math.random() * 0.1) end task.wait(submitDelay) submitWord() isProcessing = false end local function startMonitoring() task.spawn(function() while task.wait(0.1) do if CONFIG.Enabled then autoPlay() end end end) LocalPlayer:GetAttributeChangedSignal("InTable"):Connect(function() if LocalPlayer:GetAttribute("InTable") then usedWords = {} end end) end local function createToggleUI() local screenGui = Instance.new("ScreenGui") screenGui.Name = "AutoPlayUI" screenGui.ResetOnSpawn = false screenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling local frame = Instance.new("Frame") frame.Size = UDim2.new(0, 180, 0, 150) frame.Position = UDim2.new(0, 10, 0.5, -75) frame.BackgroundColor3 = Color3.fromRGB(30, 30, 40) frame.BorderSizePixel = 0 frame.Parent = screenGui local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0, 8) corner.Parent = frame local title = Instance.new("TextLabel") title.Size = UDim2.new(1, 0, 0, 25) title.BackgroundTransparency = 1 title.Text = "AutoPlay" title.TextColor3 = Color3.fromRGB(255, 255, 255) title.TextSize = 14 title.Font = Enum.Font.GothamBold title.Parent = frame local toggleBtn = Instance.new("TextButton") toggleBtn.Size = UDim2.new(0.9, 0, 0, 30) toggleBtn.Position = UDim2.new(0.05, 0, 0, 30) toggleBtn.BackgroundColor3 = CONFIG.Enabled and Color3.fromRGB(80, 180, 80) or Color3.fromRGB(180, 80, 80) toggleBtn.Text = CONFIG.Enabled and "ENABLED" or "DISABLED" toggleBtn.TextColor3 = Color3.fromRGB(255, 255, 255) toggleBtn.TextSize = 12 toggleBtn.Font = Enum.Font.GothamBold toggleBtn.Parent = frame local toggleCorner = Instance.new("UICorner") toggleCorner.CornerRadius = UDim.new(0, 6) toggleCorner.Parent = toggleBtn local statusLabel = Instance.new("TextLabel") statusLabel.Size = UDim2.new(1, 0, 0, 20) statusLabel.Position = UDim2.new(0, 0, 0, 65) statusLabel.BackgroundTransparency = 1 statusLabel.Text = "Waiting..." statusLabel.TextColor3 = Color3.fromRGB(150, 150, 150) statusLabel.TextSize = 10 statusLabel.Font = Enum.Font.Gotham statusLabel.Parent = frame local discordBtn = Instance.new("TextButton") discordBtn.Size = UDim2.new(0.9, 0, 0, 25) discordBtn.Position = UDim2.new(0.05, 0, 0, 90) discordBtn.BackgroundColor3 = Color3.fromRGB(88, 101, 242) discordBtn.Text = "Copy Discord" discordBtn.TextColor3 = Color3.fromRGB(255, 255, 255) discordBtn.TextSize = 11 discordBtn.Font = Enum.Font.GothamBold discordBtn.Parent = frame local discordCorner = Instance.new("UICorner") discordCorner.CornerRadius = UDim.new(0, 6) discordCorner.Parent = discordBtn local discordLink = Instance.new("TextBox") discordLink.Size = UDim2.new(0.9, 0, 0, 22) discordLink.Position = UDim2.new(0.05, 0, 0, 120) discordLink.BackgroundColor3 = Color3.fromRGB(45, 45, 55) discordLink.Text = "discord.gg/6KVvbEYaXF" discordLink.TextColor3 = Color3.fromRGB(180, 180, 180) discordLink.TextSize = 10 discordLink.Font = Enum.Font.Gotham discordLink.TextEditable = false discordLink.ClearTextOnFocus = false discordLink.Parent = frame local linkCorner = Instance.new("UICorner") linkCorner.CornerRadius = UDim.new(0, 4) linkCorner.Parent = discordLink discordBtn.MouseButton1Click:Connect(function() local _setclipboard = setclipboard or (getgenv and getgenv().setclipboard) or toclipboard or (getgenv and getgenv().toclipboard) if _setclipboard then _setclipboard("https://discord.gg/6KVvbEYaXF") discordBtn.Text = "Copied!" task.delay(1.5, function() discordBtn.Text = "Copy Discord" end) else discordBtn.Text = "Copy manually" task.delay(1.5, function() discordBtn.Text = "Copy Discord" end) end end) toggleBtn.MouseButton1Click:Connect(function() CONFIG.Enabled = not CONFIG.Enabled toggleBtn.BackgroundColor3 = CONFIG.Enabled and Color3.fromRGB(80, 180, 80) or Color3.fromRGB(180, 80, 80) toggleBtn.Text = CONFIG.Enabled and "ENABLED" or "DISABLED" end) task.spawn(function() while task.wait(0.5) do if screenGui.Parent then if not isInGame() then statusLabel.Text = "Not in game" elseif isOurTurn() then statusLabel.Text = "Your turn!" statusLabel.TextColor3 = Color3.fromRGB(100, 255, 100) else statusLabel.Text = "Waiting for turn..." statusLabel.TextColor3 = Color3.fromRGB(150, 150, 150) end end end end) local dragging = false local dragStart local startPos frame.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = frame.Position end end) frame.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = false end end) UserInputService.InputChanged:Connect(function(input) if dragging and (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) screenGui.Parent = PlayerGui return screenGui end createToggleUI() startMonitoring()