-- [[ Rscripts Risk Notice ]] -- This script is not verified by rscripts.net. Deal with caution. -- -- Stay safe: -- • Never log in on unofficial Roblox sites or lookalike domains. -- • Real Roblox links use roblox.com (check the .com ending). -- • Treat fake Roblox login / "claim reward" pages as phishing. -- [[ End Rscripts Risk Notice ]] --===================================================================== -- SHOGUN'S REIGN :: AUTO DOC For Latest Update -- -- RightShift = panel Delete = unload --===================================================================== local Players = game:GetService("Players") local ReplicatedStorage = game:GetService("ReplicatedStorage") local UserInputService = game:GetService("UserInputService") local TweenService = game:GetService("TweenService") local VIM = game:GetService("VirtualInputManager") local plr = Players.LocalPlayer local LOGFILE = "shogun_doc_auto.txt" local LOG_ON = false -- console local LOG_FILE = false -- shogun_doc_auto.txt local CFG = { SEND_DELAY = 0, MIN_GAP = 0.05, DEFAULT_AUTH = true, PRESS_GAP = 1.5, ROLE_GAP = 5, STALE_CLOSE = 12, } local COL = { bg = Color3.fromRGB(8, 11, 18), panel = Color3.fromRGB(13, 17, 28), line = Color3.fromRGB(38, 52, 82), blue = Color3.fromRGB(56, 132, 255), cyan = Color3.fromRGB(110, 200, 255), text = Color3.fromRGB(228, 236, 250), dim = Color3.fromRGB(118, 134, 164), good = Color3.fromRGB(88, 220, 148), bad = Color3.fromRGB(240, 104, 116), trackOff = Color3.fromRGB(26, 34, 52), trackOn = Color3.fromRGB(24, 52, 100), } local GRANT, DENY, REFER = "Grant", "Deny", "Refer" local function raw(...) local p = {} for i = 1, select("#", ...) do p[#p + 1] = tostring(select(i, ...)) end return table.concat(p, " ") end local function log(...) if not LOG_ON and not LOG_FILE then return end local line = raw(...) if LOG_ON then print(line) end if LOG_FILE and appendfile then pcall(appendfile, LOGFILE, line .. "\n") end end --===================================================================== -- 1) DocumentsData --===================================================================== local DD = nil local ASK2AUTH = {} local function normalizeAsk(s) return (tostring(s):lower():gsub("[^%a]", "")) end local function findTemplates() ASK2AUTH = {} if not DD then return end local best for _, v in pairs(DD) do if type(v) == "table" and type(v[1]) == "table" and (type(v[1].ask) == "string" or type(v[1].body) == "string") then best = v; break end end if not best then return end for _, t in ipairs(best) do if type(t) == "table" and type(t.ask) == "string" then ASK2AUTH[normalizeAsk(t.ask)] = (t.authority == true) end end end local function loadData() local mod for _, d in ipairs(ReplicatedStorage:GetDescendants()) do if d:IsA("ModuleScript") and d.Name == "DocumentsData" then mod = d; break end end if not mod then return end local ok, res = pcall(require, mod) if not ok or type(res) ~= "table" then return end DD = res if type(DD.GRANT) == "string" then GRANT = DD.GRANT end if type(DD.DENY) == "string" then DENY = DD.DENY end if type(DD.REFER) == "string" then REFER = DD.REFER end findTemplates() end local function authorityFor(ask): boolean if type(ask) ~= "string" then return CFG.DEFAULT_AUTH end local a = ASK2AUTH[normalizeAsk(ask)] if a == nil then return CFG.DEFAULT_AUTH end return a end local function rulingFor(marks, authority): string local anyFalse = false for _, m in ipairs(marks) do if m == false then anyFalse = true end end if DD and type(DD.correctRuling) == "function" then local ok, r = pcall(DD.correctRuling, not anyFalse, authority == true) if ok and type(r) == "string" then return r end end if anyFalse then return DENY end return authority and GRANT or REFER end --===================================================================== -- 2) CLAIM VERIFICATION --===================================================================== local function parseRecords(records) local map, districts = {}, {} local last = nil for _, r in ipairs(records) do if type(r) == "table" then local label = tostring(r[1] or "") local val = tostring(r[2] or "") map[label:lower()] = val local head = label:match("^head:%s*(.+)$") local houses = tonumber(val:match("^(%d+)%s+houses")) if head then if last then districts[last].head = head if houses then districts[last].houses = houses end end else local tax = tonumber(val:match("(%d+)%s*Ryo")) if tax then districts[label] = { glyph = val:match("^(%S+)"), tax = tax } last = label elseif houses and last then districts[last].houses = houses end end end end return map, districts end local function verifyClaim(claim, map, districts, body, sealGlyph): boolean local dist, amount = claim:match("^(.-)%s+paid%s+(%d+)%s*Ryo%s+in%s+tax") if dist and amount then local d = districts[dist] return d ~= nil and d.tax == tonumber(amount) end local sealDist = claim:match("^This seal belongs to%s+(.-)%.?$") if sealDist then local d = districts[sealDist] return d ~= nil and d.glyph == sealGlyph end local head, hdist = claim:match("^(.-)%s+is%s+the%s+head%s+of%s+(.-)%.?$") if head and hdist then local d = districts[hdist] return d ~= nil and d.head == head end local day = claim:match("signed%s+on%s+day%s+(%-?%d+)") if day then return map["signed on"] == ("day " .. day) end if claim:match("%s+has%s+not%s+written%s+in") then return map["times they wrote before"] == "none" end local _, wtimes = claim:match("^(.-)%s+has%s+written%s+in%s+(%d+)%s+times") if wtimes then return map["times they wrote before"] == wtimes end local _, wword = claim:match("^(.-)%s+has%s+written%s+in%s+(%a+)%s+this%s+season") if wword then local words = { once = "1", twice = "2", thrice = "3" } return map["times they wrote before"] == (words[wword:lower()] or wword) end local hdist2, houses = claim:match("^(.-)%s+has%s+(%d+)%s+houses") if hdist2 then local d = districts[hdist2] return d ~= nil and d.houses == tonumber(houses) end local n, unit = claim:match("(%d+)%s+([%a]+)") if n and unit then return body:lower():find(n .. " " .. unit:lower(), 1, true) ~= nil end return true end local function marksFromCase(case): (any, string) local claims, records = case.claims, case.records if type(claims) ~= "table" or #claims < 3 or type(records) ~= "table" then return nil, "no-claims" end local map, districts = parseRecords(records) local body = tostring(case.body or "") local sealGlyph = tostring(case.sealGlyph or "") local marks = {} for i = 1, 3 do marks[i] = verifyClaim(tostring(claims[i]), map, districts, body, sealGlyph) end return marks, "claim-verify" end local function deepWalk(v, depth, fn, seen) depth = depth or 0 if depth > 6 or type(v) ~= "table" then return end seen = seen or {} if seen[v] then return end seen[v] = true fn(v) for _, s in pairs(v) do deepWalk(s, depth + 1, fn, seen) end end local function findCaseTable(arr) local found deepWalk(arr, 0, function(t) if found then return end if type(t.claims) == "table" and type(t.records) == "table" and type(t.body) == "string" then found = t end end) return found end --===================================================================== -- 3) STATE --===================================================================== local ST = { autoAnswer = true, autoDocs = true, teleport = true, verbose = false, events = 0, cases = 0, sent = 0, lastSend = 0, lastCase = 0, lastPress = 0, lastRole = 0, docOpen = false, docCaseAt = 0, lastMarks = nil, lastRuling = nil, match = 0, miss = 0, barred = 0, reward = 0, fastest = 999, } --===================================================================== -- 4) WORLD / DOCS AUTOMATION --===================================================================== local docsRemote: RemoteEvent? = nil local function alive(): boolean local ch = plr.Character local hum = ch and ch:FindFirstChildOfClass("Humanoid") return hum ~= nil and hum.Health > 0 end local function findRemoteByName(name): Instance? local events = ReplicatedStorage:FindFirstChild("Events") if not events then return nil end for _, d in ipairs(events:GetDescendants()) do if d:IsA("RemoteEvent") and d.Name == name then return d end end return nil end local function changeRole(team, subrole, display): boolean if not team or team == "" then return false end local p = findRemoteByName("ProgressionRemote") if not p then return false end pcall(function() p:FireServer("ChangeRole", team, subrole or "", display or "") end) return true end local function getDocsFolder(): Instance? local w = workspace:FindFirstChild("World") local inter = w and w:FindFirstChild("Interactables") return inter and inter:FindFirstChild("Documents") end local function docsPanel(): Instance? local pg = plr:FindFirstChild("PlayerGui") local main = pg and pg:FindFirstChild("MainUI") return main and main:FindFirstChild("Documents") end local function hideGuide() local d = docsPanel() local g = d and d:FindFirstChild("Guide") if g and g:IsA("GuiObject") and g.Visible then g.Visible = false end end local function readGuide() hideGuide() if docsRemote then pcall(function() docsRemote:FireServer("GuideRead") end) end end local function docsPos() local folder = getDocsFolder() local ch = plr.Character local hrp = ch and ch:FindFirstChild("HumanoidRootPart") if not folder or not hrp then return nil end local best, bestD for _, obj in ipairs(folder:GetDescendants()) do if obj:IsA("BasePart") then local d = (obj.Position - hrp.Position).Magnitude if not bestD or d < bestD then best, bestD = obj, d end end end return best and best.Position or nil end local function tpSnap(pos): boolean local ch = plr.Character if not ch or not pos then return false end local rp = RaycastParams.new() rp.FilterDescendantsInstances = { ch } rp.IgnoreWater = false local res = workspace:Raycast(Vector3.new(pos.X, pos.Y + 5, pos.Z), Vector3.new(0, -50, 0), rp) local land = res and (res.Position + Vector3.new(0, 3, 0)) or (pos + Vector3.new(0, 3, 0)) ch:PivotTo(CFrame.new(land)) return true end local function docsPrompt(): ProximityPrompt? local folder = getDocsFolder() if not folder then return nil end local ch = plr.Character local hrp = ch and ch:FindFirstChild("HumanoidRootPart") if not hrp then return nil end for _, obj in ipairs(folder:GetDescendants()) do if obj:IsA("ProximityPrompt") and obj.Enabled then if obj.ActionText == "Check documents" or obj.ObjectText == "Documents" then local parentPart = obj:FindFirstAncestorWhichIsA("BasePart") if parentPart and (parentPart.Position - hrp.Position).Magnitude <= 14 then return obj end end end end for _, obj in ipairs(folder:GetDescendants()) do if obj:IsA("ProximityPrompt") and obj.Enabled then local parentPart = obj:FindFirstAncestorWhichIsA("BasePart") if parentPart and (parentPart.Position - hrp.Position).Magnitude <= 12 then return obj end end end return nil end local function triggerPrompt(pr) if not pr then return end if type(fireproximityprompt) == "function" then if pcall(fireproximityprompt, pr) then task.wait(0.3) return end end pcall(function() pr:InputHoldBegin() task.wait(math.max(pr.HoldDuration or 0, 0.15) + 0.05) pr:InputHoldEnd() end) task.wait(0.2) pcall(function() VIM:SendKeyEvent(true, Enum.KeyCode.E, false, game) task.wait(0.1) VIM:SendKeyEvent(false, Enum.KeyCode.E, false, game) end) end local function docTick() if not ST.autoDocs or not alive() then return end if not ST.docOpen and tick() - ST.lastPress > CFG.PRESS_GAP then if (plr.Team and plr.Team.Name) ~= "Feudal Noble" then if tick() - ST.lastRole > CFG.ROLE_GAP then ST.lastRole = tick() changeRole("Feudal Noble", "", "") task.wait(1.5) end return end hideGuide() local pr = docsPrompt() if not pr then local pos = docsPos() if pos then tpSnap(pos) task.wait(0.35) pr = docsPrompt() end end if pr then ST.lastPress = tick() triggerPrompt(pr) ST.docOpen = true ST.docCaseAt = tick() end end if ST.docOpen and tick() - ST.docCaseAt > CFG.STALE_CLOSE then ST.docOpen = false if docsRemote then pcall(function() docsRemote:FireServer("Close") end) end end end --===================================================================== -- 5) REMOTE --===================================================================== local conns = {} local function findRemote(): RemoteEvent? local ev = ReplicatedStorage:FindFirstChild("Events") ev = ev and ev:FindFirstChild("Activities") ev = ev and ev:FindFirstChild("Documents") if ev and ev:IsA("RemoteEvent") then return ev end for _, d in ipairs(ReplicatedStorage:GetDescendants()) do if d:IsA("RemoteEvent") and d.Name == "Documents" then return d end end return nil end local function send(...) if not docsRemote then return end local a = table.pack(...) local ok = pcall(function() docsRemote:FireServer(table.unpack(a, 1, a.n)) end) if not ok then log("[SEND] FAILED") end end local function handleVerdict(v) if type(v) ~= "table" then return end ST.docCaseAt = tick() local t = v.truths if type(v.reward) == "number" then ST.reward += v.reward end if t and ST.lastMarks then local same = ST.lastMarks[1] == t[1] and ST.lastMarks[2] == t[2] and ST.lastMarks[3] == t[3] if same then ST.match += 1 else ST.miss += 1 end log(("[verdict] %s | our %s vs correct %s | reward %s"):format( same and "MATCH" or "DIFFER", tostring(ST.lastRuling), tostring(v.ruling), tostring(v.reward))) end if v.barred then ST.barred += 1 end end local function handlePayload(...) local t0 = os.clock() local args = table.pack(...) ST.events += 1 local arr = {} for i = 1, args.n do arr[i] = args[i] end local head = tostring(arr[1] or "") if head == "Verdict" then handleVerdict(arr[2]); return end if head == "Guide" then readGuide(); return end if head ~= "Case" then return end ST.docCaseAt = tick() ST.docOpen = true local case = findCaseTable(arr) if not case then return end local marks = marksFromCase(case) if not marks then marks = { true, true, true } end local authority = authorityFor(tostring(case.ask or "")) local ruling = rulingFor(marks, authority) local now = os.clock() if ST.autoAnswer and (now - ST.lastSend) >= CFG.MIN_GAP then ST.lastSend = now if CFG.SEND_DELAY > 0 then task.delay(CFG.SEND_DELAY, function() send("Rule", marks, ruling) end) else send("Rule", marks, ruling) end ST.sent += 1 end local ms = (os.clock() - t0) * 1000 if ms < ST.fastest then ST.fastest = ms end ST.lastMarks, ST.lastRuling, ST.lastCase = marks, ruling, os.clock() ST.cases += 1 log(("[case #%s] %.2fms marks={%s,%s,%s} -> %s"):format( tostring(arr[2]), ms, tostring(marks[1]), tostring(marks[2]), tostring(marks[3]), tostring(ruling))) end local function connect() if not docsRemote then return end for _, c in ipairs(conns) do pcall(function() c:Disconnect() end) end conns = {} conns[#conns + 1] = docsRemote.OnClientEvent:Connect(function(...) local ok, err = pcall(handlePayload, ...) if not ok then log("[handler] " .. tostring(err)) end end) end --===================================================================== -- 6) GUI --===================================================================== local W, H = 430, 336 local UI = {} local function makeGui() local sg = Instance.new("ScreenGui") sg.Name = "ShogunDocs" sg.ResetOnSpawn = false sg.IgnoreGuiInset = true sg.ZIndexBehavior = Enum.ZIndexBehavior.Sibling sg.DisplayOrder = 60 sg.Parent = plr:WaitForChild("PlayerGui") local root = Instance.new("Frame") root.AnchorPoint = Vector2.new(0.5, 0.5) root.Position = UDim2.new(0.5, 0, 0.5, 0) root.Size = UDim2.new(0, 0, 0, H) root.BackgroundTransparency = 1 root.ClipsDescendants = true root.Visible = false root.ZIndex = 0 root.Parent = sg local panel = Instance.new("CanvasGroup") panel.Size = UDim2.new(0, W, 0, H) panel.BackgroundColor3 = COL.panel panel.BorderSizePixel = 0 panel.ZIndex = 1 panel.Parent = root local pc = Instance.new("UICorner"); pc.CornerRadius = UDim.new(0, 12); pc.Parent = panel local ps = Instance.new("UIStroke"); ps.Thickness = 1.4; ps.Color = COL.blue ps.Transparency = 0.25; ps.Parent = panel local pg = Instance.new("UIGradient") pg.Color = ColorSequence.new(COL.cyan, COL.blue) pg.Rotation = 45; pg.Transparency = NumberSequence.new(0.15, 0.6); pg.Parent = ps local head = Instance.new("Frame") head.Size = UDim2.new(1, 0, 0, 54); head.BackgroundTransparency = 1 head.ZIndex = 2; head.Parent = panel local title = Instance.new("TextLabel") title.BackgroundTransparency = 1 title.Position = UDim2.new(0, 16, 0, 12) title.Size = UDim2.new(1, -32, 0, 20) title.Font = Enum.Font.GothamBold; title.TextSize = 15 title.TextXAlignment = Enum.TextXAlignment.Left title.TextColor3 = COL.text title.Text = "SHOGUN'S REIGN AUTO DOCS V.1" title.ZIndex = 3; title.Parent = head local credit = Instance.new("TextLabel") credit.BackgroundTransparency = 1 credit.Position = UDim2.new(0, 16, 0, 31) credit.Size = UDim2.new(1, -32, 0, 14) credit.Font = Enum.Font.Gotham; credit.TextSize = 10 credit.TextXAlignment = Enum.TextXAlignment.Left credit.TextColor3 = COL.dim credit.Text = "Made by SoullessTony" credit.ZIndex = 3; credit.Parent = head local dot = Instance.new("Frame") dot.AnchorPoint = Vector2.new(1, 0.5) dot.Position = UDim2.new(1, -16, 0, 27) dot.Size = UDim2.new(0, 8, 0, 8) dot.BackgroundColor3 = COL.dim dot.ZIndex = 3; dot.Parent = head local dc = Instance.new("UICorner"); dc.CornerRadius = UDim.new(1, 0); dc.Parent = dot UI.dot = dot local sep = Instance.new("Frame") sep.Position = UDim2.new(0, 12, 0, 54) sep.Size = UDim2.new(1, -24, 0, 1) sep.BackgroundColor3 = COL.line; sep.BorderSizePixel = 0 sep.ZIndex = 2; sep.Parent = panel local tabs = Instance.new("Frame") tabs.Position = UDim2.new(0, 12, 0, 62) tabs.Size = UDim2.new(1, -24, 0, 24) tabs.BackgroundTransparency = 1 tabs.ZIndex = 2; tabs.Parent = panel local tl = Instance.new("UIListLayout") tl.FillDirection = Enum.FillDirection.Horizontal tl.Padding = UDim.new(0, 6); tl.Parent = tabs local pages = Instance.new("Frame") pages.Position = UDim2.new(0, 14, 0, 94) pages.Size = UDim2.new(1, -28, 1, -140) pages.BackgroundTransparency = 1 pages.ZIndex = 2; pages.Parent = panel local pageCfg = Instance.new("Frame") pageCfg.Size = UDim2.new(1, 0, 1, 0); pageCfg.BackgroundTransparency = 1 pageCfg.ZIndex = 2; pageCfg.Parent = pages local pageStat = Instance.new("Frame") pageStat.Size = UDim2.new(1, 0, 1, 0); pageStat.BackgroundTransparency = 1 pageStat.Visible = false; pageStat.ZIndex = 2; pageStat.Parent = pages local cfgList = Instance.new("UIListLayout") cfgList.Padding = UDim.new(0, 4); cfgList.Parent = pageCfg local statList = Instance.new("UIListLayout") statList.Padding = UDim.new(0, 3); statList.Parent = pageStat local tabButtons = {} local function makeTab(label, page) local b = Instance.new("TextButton") b.Size = UDim2.new(0, 92, 0, 24) b.BackgroundColor3 = COL.bg b.Text = label b.Font = Enum.Font.GothamMedium; b.TextSize = 11 b.TextColor3 = COL.dim; b.AutoButtonColor = false b.ZIndex = 3; b.Parent = tabs local c = Instance.new("UICorner"); c.CornerRadius = UDim.new(0, 7); c.Parent = b local s = Instance.new("UIStroke"); s.Color = COL.line; s.Thickness = 1; s.Parent = b local function render(active) TweenService:Create(b, TweenInfo.new(0.15), { BackgroundColor3 = active and COL.trackOn or COL.bg, TextColor3 = active and COL.text or COL.dim }):Play() s.Color = active and COL.blue or COL.line end b.MouseButton1Click:Connect(function() pageCfg.Visible = (page == pageCfg) pageStat.Visible = (page == pageStat) for other, r in pairs(tabButtons) do r(other == b) end end) tabButtons[b] = render return b end makeTab("CONFIG", pageCfg) makeTab("STATUS", pageStat) for b, r in pairs(tabButtons) do r(b.Text == "CONFIG") end local function makeToggle(parent, order, label, get, set) local row = Instance.new("Frame") row.Size = UDim2.new(1, 0, 0, 26); row.BackgroundTransparency = 1 row.LayoutOrder = order; row.ZIndex = 3; row.Parent = parent local txt = Instance.new("TextLabel") txt.BackgroundTransparency = 1 txt.Size = UDim2.new(1, -54, 1, 0) txt.Font = Enum.Font.GothamMedium; txt.TextSize = 12 txt.TextColor3 = COL.dim; txt.TextXAlignment = Enum.TextXAlignment.Left txt.Text = label; txt.ZIndex = 4; txt.Parent = row local track = Instance.new("Frame") track.AnchorPoint = Vector2.new(1, 0.5) track.Position = UDim2.new(1, 0, 0.5, 0) track.Size = UDim2.new(0, 38, 0, 18) track.BackgroundColor3 = COL.trackOff track.ZIndex = 4; track.Parent = row local tc = Instance.new("UICorner"); tc.CornerRadius = UDim.new(1, 0); tc.Parent = track local ts = Instance.new("UIStroke"); ts.Color = COL.line; ts.Thickness = 1; ts.Parent = track local knob = Instance.new("Frame") knob.AnchorPoint = Vector2.new(0, 0.5) knob.Position = UDim2.new(0, 2, 0.5, 0) knob.Size = UDim2.new(0, 14, 0, 14) knob.BackgroundColor3 = COL.dim knob.ZIndex = 5; knob.Parent = track local kc = Instance.new("UICorner"); kc.CornerRadius = UDim.new(1, 0); kc.Parent = knob local btn = Instance.new("TextButton") btn.Size = UDim2.new(1, 0, 1, 0); btn.BackgroundTransparency = 1 btn.Text = ""; btn.ZIndex = 6; btn.Parent = row local function render() local on = get() TweenService:Create(knob, TweenInfo.new(0.16, Enum.EasingStyle.Quint), { Position = on and UDim2.new(1, -16, 0.5, 0) or UDim2.new(0, 2, 0.5, 0), BackgroundColor3 = on and COL.blue or COL.dim }):Play() TweenService:Create(track, TweenInfo.new(0.16), { BackgroundColor3 = on and COL.trackOn or COL.trackOff }):Play() ts.Color = on and COL.blue or COL.line txt.TextColor3 = on and COL.text or COL.dim end btn.MouseButton1Click:Connect(function() set(not get()); render() end) render() return render end makeToggle(pageCfg, 1, "Auto Docs (walk + E)", function() return ST.autoDocs end, function(v) ST.autoDocs = v end) makeToggle(pageCfg, 2, "Auto Answer", function() return ST.autoAnswer end, function(v) ST.autoAnswer = v end) makeToggle(pageCfg, 3, "Teleport to table", function() return ST.teleport end, function(v) ST.teleport = v end) makeToggle(pageCfg, 4, "Logs (console + file)", function() return ST.verbose end, function(v) ST.verbose = v LOG_ON, LOG_FILE = v, v if v and writefile then pcall(writefile, LOGFILE, "-- shogun doc auto --\n") end end) local btnRow = Instance.new("Frame") btnRow.Size = UDim2.new(1, 0, 0, 30); btnRow.BackgroundTransparency = 1 btnRow.LayoutOrder = 6; btnRow.ZIndex = 3; btnRow.Parent = pageCfg local brl = Instance.new("UIListLayout") brl.FillDirection = Enum.FillDirection.Horizontal brl.Padding = UDim.new(0, 6); brl.Parent = btnRow local function makeButton(parent, label, width, fn, accent) local b = Instance.new("TextButton") b.Size = UDim2.new(0, width, 1, 0) b.BackgroundColor3 = accent and COL.trackOn or COL.bg b.Text = label b.Font = Enum.Font.GothamBold; b.TextSize = 11 b.TextColor3 = accent and COL.text or COL.dim b.AutoButtonColor = false b.ZIndex = 4; b.Parent = parent local c = Instance.new("UICorner"); c.CornerRadius = UDim.new(0, 8); c.Parent = b local s = Instance.new("UIStroke"); s.Color = accent and COL.blue or COL.line s.Thickness = 1; s.Parent = b b.MouseButton1Click:Connect(function() TweenService:Create(b, TweenInfo.new(0.1), { BackgroundColor3 = COL.blue }):Play() task.delay(0.12, function() TweenService:Create(b, TweenInfo.new(0.2), { BackgroundColor3 = accent and COL.trackOn or COL.bg }):Play() end) fn() end) return b end makeButton(btnRow, "GO TO DOCS", 108, function() local pos = docsPos() if pos then tpSnap(pos) end end, true) makeButton(btnRow, "OPEN DOCS", 92, function() local pr = docsPrompt() if not pr then local pos = docsPos() if pos then tpSnap(pos); task.wait(0.4); pr = docsPrompt() end end if pr then triggerPrompt(pr) end end) makeButton(btnRow, "FEUDAL", 92, function() changeRole("Feudal Noble", "", "") end) local statRows = {} local function makeStat(order, label) local row = Instance.new("Frame") row.Size = UDim2.new(1, 0, 0, 18); row.BackgroundTransparency = 1 row.LayoutOrder = order; row.ZIndex = 3; row.Parent = pageStat local l = Instance.new("TextLabel") l.BackgroundTransparency = 1; l.Size = UDim2.new(0.6, 0, 1, 0) l.Font = Enum.Font.Gotham; l.TextSize = 11; l.TextColor3 = COL.dim l.TextXAlignment = Enum.TextXAlignment.Left; l.Text = label l.ZIndex = 4; l.Parent = row local v = Instance.new("TextLabel") v.BackgroundTransparency = 1 v.Position = UDim2.new(0.6, 0, 0, 0); v.Size = UDim2.new(0.4, 0, 1, 0) v.Font = Enum.Font.GothamBold; v.TextSize = 11; v.TextColor3 = COL.text v.TextXAlignment = Enum.TextXAlignment.Right; v.Text = "-" v.ZIndex = 4; v.Parent = row statRows[label] = v end makeStat(1, "cases"); makeStat(2, "claims match"); makeStat(3, "claims miss") makeStat(4, "sent"); makeStat(5, "reward"); makeStat(6, "fastest ms") makeStat(7, "barred"); makeStat(8, "team"); makeStat(9, "templates") UI.statRows = statRows local foot = Instance.new("TextLabel") foot.AnchorPoint = Vector2.new(0.5, 1) foot.Position = UDim2.new(0.5, 0, 1, -10) foot.Size = UDim2.new(1, -28, 0, 14) foot.BackgroundTransparency = 1 foot.Font = Enum.Font.Gotham; foot.TextSize = 10 foot.TextColor3 = COL.dim foot.Text = "RightShift toggle Delete unload" foot.ZIndex = 3; foot.Parent = panel local isOpen = false local function setOpen(v) if isOpen == v then return end isOpen = v if v then root.Visible = true root.Size = UDim2.new(0, 0, 0, H) panel.GroupTransparency = 1 TweenService:Create(root, TweenInfo.new(0.34, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), { Size = UDim2.new(0, W, 0, H) }):Play() TweenService:Create(panel, TweenInfo.new(0.3), { GroupTransparency = 0 }):Play() else TweenService:Create(root, TweenInfo.new(0.28, Enum.EasingStyle.Quint, Enum.EasingDirection.In), { Size = UDim2.new(0, 0, 0, H) }):Play() TweenService:Create(panel, TweenInfo.new(0.2), { GroupTransparency = 1 }):Play() task.delay(0.3, function() if not isOpen then root.Visible = false end end) end end UI.root = root UI.setOpen = setOpen UI.isOpen = function() return isOpen end task.spawn(function() while true do task.wait(0.4) local r = UI.statRows if r then r["cases"].Text = tostring(ST.cases) r["claims match"].Text = tostring(ST.match) r["claims miss"].Text = tostring(ST.miss) r["claims miss"].TextColor3 = ST.miss > 0 and COL.bad or COL.text r["sent"].Text = tostring(ST.sent) r["reward"].Text = tostring(ST.reward) r["reward"].TextColor3 = ST.reward >= 0 and COL.good or COL.bad r["fastest ms"].Text = ST.fastest < 999 and string.format("%.2f", ST.fastest) or "-" r["barred"].Text = tostring(ST.barred) r["team"].Text = (plr.Team and plr.Team.Name) or "-" local n = 0 for _ in pairs(ASK2AUTH) do n += 1 end r["templates"].Text = tostring(n) end if UI.dot then UI.dot.BackgroundColor3 = (os.clock() - ST.lastCase) < 1.2 and COL.cyan or COL.dim end end end) end --===================================================================== -- 7) BOOT --===================================================================== local binds = {} local function unload() for _, c in ipairs(conns) do pcall(function() c:Disconnect() end) end for _, b in ipairs(binds) do pcall(function() b:Disconnect() end) end if UI.root and UI.root.Parent then pcall(function() UI.root.Parent:Destroy() end) end log("[auto] unloaded") end local function bind(key, fn) binds[#binds + 1] = UserInputService.InputBegan:Connect(function(input) if input.KeyCode == key then fn() end end) end local function boot() makeGui() loadData() bind(Enum.KeyCode.RightShift, function() UI.setOpen(not UI.isOpen()) end) bind(Enum.KeyCode.Delete, unload) task.spawn(function() while not docsRemote do docsRemote = findRemote() if docsRemote then connect() else task.wait(1) end end end) task.spawn(function() while true do task.wait(0.5) pcall(docTick) end end) UI.setOpen(true) end boot()