Pastebin
API
tools
faq
paste
Login
Sign up
Please fix the following errors:
New Paste
Syntax Highlighting
if getgenv().SignalSpyExecuted and type(getgenv().SignalSpyShutdown) == "function" then getgenv().SignalSpyShutdown() task.wait(0.3) end if not game:IsLoaded() then game.Loaded:Wait() end local function missing(t, f, fallback) if type(f) == t then return f end return fallback end cloneref = missing("function", cloneref, function(...) return ... end) newcclosure = missing("function", newcclosure, function(f) return f end) checkcaller = missing("function", checkcaller, function() return false end) getconnections = missing("function", getconnections or get_signal_cons) firesignal = missing("function", firesignal or fire_signal) replicatesignal = missing("function", replicatesignal) getnilinstances = missing("function", getnilinstances or get_nil_instances, function() return {} end) gethui = missing("function", gethui or get_hidden_gui) protect_gui = missing("function", protect_gui or (syn and syn.protect_gui)) gethiddenproperty = missing("function", gethiddenproperty or get_hidden_property) sethiddenproperty = missing("function", sethiddenproperty or set_hidden_property) isscriptable = missing("function", isscriptable or is_scriptable) setscriptable = missing("function", setscriptable or set_scriptable) getrawmetatable = missing("function", getrawmetatable) setreadonly = missing("function", setreadonly) isreadonly = missing("function", isreadonly) hookmetamethod = missing("function", hookmetamethod) hookfunction = missing("function", hookfunction or replaceclosure or hookfunc) getnamecallmethod = missing("function", getnamecallmethod) getcallingscript = missing("function", getcallingscript, function() return nil end) getinfo = missing("function", getinfo or debug.getinfo, function() return {} end) iscclosure = missing("function", iscclosure, function() return false end) islclosure = missing("function", islclosure or is_l_closure, function() return true end) getupvalues = missing("function", getupvalues or debug.getupvalues, function() return {} end) getconstants = missing("function", getconstants or debug.getconstants, function() return {} end) isfile = missing("function", isfile, function() return false end) readfile = missing("function", readfile, function() return "" end) writefile = missing("function", writefile) makefolder = missing("function", makefolder) local setclipboard = missing("function", setclipboard or toclipboard or set_clipboard, function() end) local lower = string.lower local byte = string.byte local running = coroutine.running local resume = coroutine.resume local status = coroutine.status local yield = coroutine.yield local create = coroutine.create local function Create(instance, properties, children) local obj = Instance.new(instance) for i, v in next, properties or {} do obj[i] = v end for _, child in next, children or {} do child.Parent = obj end return obj end local Services = setmetatable({}, { __index = function(self, name) local ok, svc = pcall(function() return cloneref(game:GetService(name)) end) if ok and svc then rawset(self, name, svc) return svc end return nil end }) local Players = Services.Players local HttpService = Services.HttpService local TweenService = Services.TweenService local UserInputService = Services.UserInputService local RunService = Services.RunService local CoreGui = Services.CoreGui local TextService = Services.TextService local GuiService = Services.GuiService local UGCValidationService = Services.UGCValidationService local LocalPlayer = Players and Players.LocalPlayer local GuiInset = GuiService:GetGuiInset() local function ugcGetProperty(instance, property) if not UGCValidationService then return false, nil end local ok, result = pcall(function() return UGCValidationService:GetPropertyValue(instance, property) end) return ok, result end getgenv().gethiddenpropertyy = newcclosure(function(inst, prop) if type(gethiddenproperty) == "function" then local ok, result = pcall(gethiddenproperty, inst, prop) if ok then return result end end if type(setscriptable) == "function" then local ok = pcall(function() local was = isscriptable and isscriptable(inst, prop) if not was then setscriptable(inst, prop, true) end end) if ok then local ok2, val = pcall(function() return inst[prop] end) if ok2 then return val end end end local ok, result = ugcGetProperty(inst, prop) if ok then return result end return nil end) local ExploitCapabilities = { setscriptable = type(setscriptable) == "function", isscriptable = type(isscriptable) == "function", gethiddenproperty = type(gethiddenproperty) == "function", sethiddenproperty = type(sethiddenproperty) == "function", ugcGetProperty = UGCValidationService ~= nil, getrawmetatable = type(getrawmetatable) == "function", setreadonly = type(setreadonly) == "function", replicatesignal = type(replicatesignal) == "function", firesignal = type(firesignal) == "function", getconnections = type(getconnections) == "function", hookmetamethod = type(hookmetamethod) == "function", hookfunction = type(hookfunction) == "function", checkcaller = type(checkcaller) == "function", getnamecallmethod = type(getnamecallmethod) == "function", } local Highlight pcall(function() Highlight = loadstring(game:HttpGet("https://raw.githubusercontent.com/infyiff/backup/refs/heads/main/SimpleSpyV3/highlight.lua"))() end) local LazyFix pcall(function() LazyFix = loadstring(game:HttpGet("https://raw.githubusercontent.com/infyiff/backup/refs/heads/main/SimpleSpyV3/DataToCode.lua"))() end) local SPAM_PROPERTIES = { Position = true, CFrame = true, Rotation = true, Orientation = true, Velocity = true, RotVelocity = true, AssemblyLinearVelocity = true, AssemblyAngularVelocity = true, AssemblyCenterOfMass = true, CenterOfMass = true, LocalTransparencyModifier = true, ReceiveAge = true, ExtentsCFrame = true, Focus = true, CoordinateFrame = true, MoveDirection = true, WalkToPoint = true, DistributedGameTime = true, FloorMaterial = true, TargetPoint = true, Origin = true, } local INTERESTING_HIDDEN = { "ReplicationPV", "NetworkOwnerV3", "PhysicsRepRootPart", "NetworkIsSleeping", "NetworkOwnershipRule", "LocalSimulationValidation", "Attributes", "AttributesReplicate", "RobloxLocked", "SourceAssetId", "UniqueId", } local selectedColor = Color3.fromRGB(92, 126, 229) local deselectedColor = Color3.fromRGB(0, 0, 0) local layoutOrderNum = 999999999 local logs = {} local groupedLogs = {} local selected = nil local blacklist = {} local blocklist = {} local connections = {} local HookedSignals = {} local HookedProperties = {} local SpamHistory = {} local PropertySpamHistory = {} local FunctionSpamHistory = {} local CachedAPIEvents = {} local CachedAPIProperties = {} local CachedAPIFunctions = {} local TotalSignalHooks = 0 local TotalPropertyHooks = 0 local TotalFunctionCalls = 0 local HiddenSignalHooks = 0 local HiddenPropertyHooks = 0 local closed = false local sideClosed = false local mainClosing = false local sideClosing = false local maximized = false local toggle = true local mouseInGui = false local currentTab = "Signals" local codebox local remotesFadeIn local rightFadeIn getgenv().CaptureClasses = getgenv().CaptureClasses or {"Humanoid", "Tool", "ClickDetector", "ProximityPrompt", "Player"} getgenv().CaptureHidden = getgenv().CaptureHidden or false getgenv().CaptureDeprecated = getgenv().CaptureDeprecated or false getgenv().CaptureProperties = getgenv().CaptureProperties or false getgenv().CaptureFunctions = getgenv().CaptureFunctions or false getgenv().PropertyClasses = getgenv().PropertyClasses or {"Humanoid", "Tool"} getgenv().FunctionClasses = getgenv().FunctionClasses or {"Humanoid", "Tool", "ClickDetector", "ProximityPrompt"} local CONFIG = { Enabled = true, FilterSpammy = true, SpamThreshold = 5, SpamTimeWindow = 1, MaxLogs = 500, ShowClassName = true, LogCheckcaller = false, FuncInfoEnabled = true, AutoBlock = false, } local function randomString() local arr = {} for i = 1, math.random(10, 20) do arr[i] = string.char(math.random(65, 90)) end return table.concat(arr) end local SignalSpy = Create("ScreenGui", { ResetOnSpawn = false, Name = randomString(), ZIndexBehavior = Enum.ZIndexBehavior.Sibling }) local Storage = Create("Folder", {}) local Background = Create("Frame", { Parent = SignalSpy, BackgroundColor3 = Color3.new(1, 1, 1), BackgroundTransparency = 1, Position = UDim2.new(0, 500, 0, 200), Size = UDim2.new(0, 520, 0, 320) }) local TopBar = Create("Frame", { Parent = Background, BackgroundColor3 = Color3.fromRGB(37, 35, 38), BorderSizePixel = 0, Size = UDim2.new(0, 520, 0, 19), ZIndex = 2 }) local LeftPanel = Create("Frame", { Parent = Background, BackgroundColor3 = Color3.fromRGB(53, 52, 55), BorderSizePixel = 0, Position = UDim2.new(0, 0, 0, 19), Size = UDim2.new(0, 145, 0, 301), ClipsDescendants = true }) local TabFrame = Create("Frame", { Parent = LeftPanel, BackgroundColor3 = Color3.fromRGB(37, 36, 38), BorderSizePixel = 0, Position = UDim2.new(0, 3, 0, 3), Size = UDim2.new(1, -6, 0, 22) }) Create("UICorner", {CornerRadius = UDim.new(0, 4), Parent = TabFrame}) local TabSignals = Create("TextButton", { Parent = TabFrame, BackgroundColor3 = Color3.fromRGB(255, 100, 150), BackgroundTransparency = 0.3, BorderSizePixel = 0, Position = UDim2.new(0, 2, 0, 2), Size = UDim2.new(0.33, -2, 0, 18), Font = Enum.Font.SourceSansBold, Text = "Signals", TextColor3 = Color3.new(1, 1, 1), TextSize = 10, AutoButtonColor = false }) Create("UICorner", {CornerRadius = UDim.new(0, 3), Parent = TabSignals}) local TabProperties = Create("TextButton", { Parent = TabFrame, BackgroundColor3 = Color3.fromRGB(100, 180, 255), BackgroundTransparency = 0.7, BorderSizePixel = 0, Position = UDim2.new(0.33, 1, 0, 2), Size = UDim2.new(0.33, -2, 0, 18), Font = Enum.Font.SourceSansBold, Text = "Props", TextColor3 = Color3.new(1, 1, 1), TextSize = 10, AutoButtonColor = false }) Create("UICorner", {CornerRadius = UDim.new(0, 3), Parent = TabProperties}) local TabFunctions = Create("TextButton", { Parent = TabFrame, BackgroundColor3 = Color3.fromRGB(255, 220, 100), BackgroundTransparency = 0.7, BorderSizePixel = 0, Position = UDim2.new(0.66, 1, 0, 2), Size = UDim2.new(0.34, -3, 0, 18), Font = Enum.Font.SourceSansBold, Text = "Funcs", TextColor3 = Color3.fromRGB(30, 30, 30), TextSize = 10, AutoButtonColor = false }) Create("UICorner", {CornerRadius = UDim.new(0, 3), Parent = TabFunctions}) local LogList = Create("ScrollingFrame", { Parent = LeftPanel, Active = true, BackgroundColor3 = Color3.new(1, 1, 1), BackgroundTransparency = 1, BorderSizePixel = 0, Position = UDim2.new(0, 0, 0, 28), Size = UDim2.new(1, 0, 1, -32), CanvasSize = UDim2.new(0, 0, 0, 0), ScrollBarThickness = 4, ScrollBarImageColor3 = Color3.fromRGB(255, 100, 150) }) local UIListLayout = Create("UIListLayout", { Parent = LogList, HorizontalAlignment = Enum.HorizontalAlignment.Center, SortOrder = Enum.SortOrder.LayoutOrder, Padding = UDim.new(0, 1) }) local RightPanel = Create("Frame", { Parent = Background, BackgroundColor3 = Color3.fromRGB(37, 36, 38), BorderSizePixel = 0, Position = UDim2.new(0, 145, 0, 19), Size = UDim2.new(0, 375, 0, 301), ClipsDescendants = true }) local CodeBox = Create("Frame", { Parent = RightPanel, BackgroundColor3 = Color3.fromRGB(21, 19, 20), BorderSizePixel = 0, Size = UDim2.new(1, 0, 0.5, 0) }) local ButtonsFrame = Create("ScrollingFrame", { Parent = RightPanel, Active = true, BackgroundColor3 = Color3.new(1, 1, 1), BackgroundTransparency = 1, Position = UDim2.new(0, 0, 0.5, 0), Size = UDim2.new(1, 0, 0.5, -9), CanvasSize = UDim2.new(0, 0, 0, 0), ScrollBarThickness = 4, ScrollBarImageColor3 = Color3.fromRGB(255, 100, 150) }) local UIGridLayout = Create("UIGridLayout", { Parent = ButtonsFrame, HorizontalAlignment = Enum.HorizontalAlignment.Center, SortOrder = Enum.SortOrder.LayoutOrder, CellPadding = UDim2.new(0, 0, 0, 0), CellSize = UDim2.new(0, 94, 0, 27) }) local TitleButton = Create("TextButton", { Parent = TopBar, BackgroundColor3 = Color3.new(1, 1, 1), AutoButtonColor = false, BackgroundTransparency = 1, Position = UDim2.new(0, 5, 0, 0), Size = UDim2.new(0, 80, 0, 18), Font = Enum.Font.SourceSansBold, Text = "SignalSpy+", TextColor3 = Color3.fromRGB(100, 255, 100), TextSize = 13, TextXAlignment = Enum.TextXAlignment.Left, ZIndex = 2 }) local StatusLabel = Create("TextLabel", { Parent = TopBar, BackgroundTransparency = 1, Position = UDim2.new(0, 88, 0, 0), Size = UDim2.new(0, 250, 0, 18), Font = Enum.Font.SourceSans, Text = "[Loading...]", TextColor3 = Color3.fromRGB(150, 150, 150), TextSize = 10, TextXAlignment = Enum.TextXAlignment.Left, ZIndex = 2 }) local CloseButton = Create("TextButton", { Parent = TopBar, BackgroundColor3 = Color3.fromRGB(37, 36, 38), BorderSizePixel = 0, Position = UDim2.new(1, -19, 0, 0), Size = UDim2.new(0, 19, 0, 19), Font = Enum.Font.SourceSans, Text = "", TextColor3 = Color3.new(0, 0, 0), TextSize = 14, ZIndex = 2 }) Create("ImageLabel", { Parent = CloseButton, BackgroundTransparency = 1, Position = UDim2.new(0, 5, 0, 5), Size = UDim2.new(0, 9, 0, 9), Image = "rbxassetid://5597086202", ZIndex = 2 }) local MaximizeButton = Create("TextButton", { Parent = TopBar, BackgroundColor3 = Color3.fromRGB(37, 36, 38), BorderSizePixel = 0, Position = UDim2.new(1, -38, 0, 0), Size = UDim2.new(0, 19, 0, 19), Font = Enum.Font.SourceSans, Text = "", ZIndex = 2 }) Create("ImageLabel", { Parent = MaximizeButton, BackgroundTransparency = 1, Position = UDim2.new(0, 5, 0, 5), Size = UDim2.new(0, 9, 0, 9), Image = "rbxassetid://5597108117", ZIndex = 2 }) local MinimizeButton = Create("TextButton", { Parent = TopBar, BackgroundColor3 = Color3.fromRGB(37, 36, 38), BorderSizePixel = 0, Position = UDim2.new(1, -57, 0, 0), Size = UDim2.new(0, 19, 0, 19), Font = Enum.Font.SourceSans, Text = "", ZIndex = 2 }) Create("ImageLabel", { Parent = MinimizeButton, BackgroundTransparency = 1, Position = UDim2.new(0, 5, 0, 5), Size = UDim2.new(0, 9, 0, 9), Image = "rbxassetid://5597105827", ZIndex = 2 }) local ToolTip = Create("Frame", { Parent = SignalSpy, BackgroundColor3 = Color3.fromRGB(26, 26, 26), BackgroundTransparency = 0.1, BorderColor3 = Color3.new(1, 1, 1), Size = UDim2.new(0, 200, 0, 50), ZIndex = 100, Visible = false }) local ToolTipText = Create("TextLabel", { Parent = ToolTip, BackgroundTransparency = 1, Position = UDim2.new(0, 4, 0, 4), Size = UDim2.new(1, -8, 1, -8), ZIndex = 100, Font = Enum.Font.SourceSans, Text = "", TextColor3 = Color3.new(1, 1, 1), TextSize = 12, TextWrapped = true, TextXAlignment = Enum.TextXAlignment.Left, TextYAlignment = Enum.TextYAlignment.Top }) local function deepclone(args, copies) local copy = nil copies = copies or {} if type(args) == "table" then if copies[args] then copy = copies[args] else copy = {} copies[args] = copy for i, v in next, args do copy[deepclone(i, copies)] = deepclone(v, copies) end end elseif typeof(args) == "Instance" then local ok, c = pcall(cloneref, args) copy = ok and c or args else copy = args end return copy end local function getPlayerFromInstance(instance) for _, v in next, Players:GetPlayers() do if v.Character and (instance:IsDescendantOf(v.Character) or instance == v.Character) then return v end end return nil end local function instanceToPath(inst) if not inst then return "nil" end if inst == game then return "game" end if inst == workspace then return "workspace" end if inst == LocalPlayer then return 'game:GetService("Players").LocalPlayer' end local player = getPlayerFromInstance(inst) local parts = {} local current = inst if player then while current and current ~= player.Character do if current.Name:match("^[%a_][%w_]*$") then table.insert(parts, 1, "." .. current.Name) else table.insert(parts, 1, ':FindFirstChild("' .. current.Name .. '")') end current = current.Parent end if player == LocalPlayer then return 'game:GetService("Players").LocalPlayer.Character' .. table.concat(parts) else return 'game:GetService("Players"):FindFirstChild("' .. player.Name .. '").Character' .. table.concat(parts) end end local ok, result = pcall(function() while current and current.Parent ~= game do if not current.Parent then return 'getNil("' .. inst.Name .. '", "' .. inst.ClassName .. '")' end if current.Name:match("^[%a_][%w_]*$") then table.insert(parts, 1, "." .. current.Name) else table.insert(parts, 1, ':FindFirstChild("' .. current.Name .. '")') end current = current.Parent end if current and current.Parent == game then local svc = current.ClassName if pcall(function() return game:GetService(svc) end) then return 'game:GetService("' .. svc .. '")' .. table.concat(parts) end return "game." .. current.Name .. table.concat(parts) end return "game" end) return ok and result or tostring(inst) end local function deepSerialize(val, depth) depth = depth or 0 if depth > 4 then return "..." end if LazyFix then local ok, result = pcall(function() return LazyFix.Convert(val, true) end) if ok and result then return result end end local t = typeof(val) local spacing = string.rep(" ", depth) local nextSpacing = string.rep(" ", depth + 1) if t == "nil" then return "nil" elseif t == "string" then local str = val if #str > 150 then str = str:sub(1, 150) .. "..." end return string.format("%q", str) elseif t == "number" then if val == math.huge then return "math.huge" end if val == -math.huge then return "-math.huge" end if val ~= val then return "0/0" end return tostring(val) elseif t == "boolean" then return tostring(val) elseif t == "Instance" then return instanceToPath(val) elseif t == "Vector3" then return string.format("Vector3.new(%s, %s, %s)", val.X, val.Y, val.Z) elseif t == "Vector2" then return string.format("Vector2.new(%s, %s)", val.X, val.Y) elseif t == "CFrame" then return string.format("CFrame.new(%s)", table.concat({val:GetComponents()}, ", ")) elseif t == "Color3" then return string.format("Color3.new(%s, %s, %s)", val.R, val.G, val.B) elseif t == "BrickColor" then return string.format('BrickColor.new("%s")', tostring(val)) elseif t == "UDim2" then return string.format("UDim2.new(%s, %s, %s, %s)", val.X.Scale, val.X.Offset, val.Y.Scale, val.Y.Offset) elseif t == "UDim" then return string.format("UDim.new(%s, %s)", val.Scale, val.Offset) elseif t == "EnumItem" then return tostring(val) elseif t == "Enum" then return tostring(val) elseif t == "Ray" then return string.format("Ray.new(Vector3.new(%s, %s, %s), Vector3.new(%s, %s, %s))", val.Origin.X, val.Origin.Y, val.Origin.Z, val.Direction.X, val.Direction.Y, val.Direction.Z) elseif t == "function" then return "function() end" elseif t == "table" then local parts = {} local count = 0 for k, v in pairs(val) do count = count + 1 if count > 15 then table.insert(parts, nextSpacing .. "...") break end local ks if type(k) == "string" and k:match("^[%a_][%w_]*$") then ks = k else ks = "[" .. deepSerialize(k, depth + 1) .. "]" end table.insert(parts, nextSpacing .. ks .. " = " .. deepSerialize(v, depth + 1)) end if #parts == 0 then return "{}" end return "{\n" .. table.concat(parts, ",\n") .. "\n" .. spacing .. "}" else return "<" .. t .. ">" end end local function getPropertyValueSmart(instance, propName, isHidden) if not isHidden then local ok, val = pcall(function() return instance[propName] end) if ok then return true, val, "direct" end end if isHidden and ExploitCapabilities.setscriptable then local wasScriptable = nil pcall(function() wasScriptable = isscriptable and isscriptable(instance, propName) if not wasScriptable then setscriptable(instance, propName, true) end end) local ok, val = pcall(function() return instance[propName] end) if ok then return true, val, "setscriptable" end end if isHidden and ExploitCapabilities.gethiddenproperty then local ok, val = pcall(function() return gethiddenproperty(instance, propName) end) if ok then return true, val, "gethiddenproperty" end end if isHidden and ExploitCapabilities.ugcGetProperty then local ok, val = ugcGetProperty(instance, propName) if ok then return true, val, "UGCValidationService" end end if isHidden and ExploitCapabilities.getrawmetatable then local ok, mt = pcall(function() return getrawmetatable(instance) end) if ok and mt then local oldRO if setreadonly then pcall(function() oldRO = isreadonly and isreadonly(mt) setreadonly(mt, false) end) end local ok2, val = pcall(function() local idx = rawget(mt, "__index") if type(idx) == "function" then return idx(instance, propName) elseif type(idx) == "table" then return rawget(idx, propName) end end) if setreadonly and oldRO then pcall(function() setreadonly(mt, true) end) end if ok2 then return true, val, "rawmetatable" end end end local ok, val = pcall(function() return instance[propName] end) if ok then return true, val, "direct_fallback" end return false, nil, "failed" end local function getSignalFromInstance(instance, signalName, isHidden, isDeprecated) if (isHidden or isDeprecated) and ExploitCapabilities.setscriptable then local wasScriptable = nil pcall(function() wasScriptable = isscriptable and isscriptable(instance, signalName) if not wasScriptable then setscriptable(instance, signalName, true) end end) local ok, sig = pcall(function() return instance[signalName] end) if ok and sig and typeof(sig) == "RBXScriptSignal" then return sig, "setscriptable", wasScriptable == false end end local ok, result = pcall(function() return instance[signalName] end) if ok and result and typeof(result) == "RBXScriptSignal" then return result, "direct", false end if isHidden and ExploitCapabilities.gethiddenproperty then local ok2, result2 = pcall(function() return gethiddenproperty(instance, signalName) end) if ok2 and result2 and typeof(result2) == "RBXScriptSignal" then return result2, "gethiddenproperty", false end end return nil, "failed", false end local function FetchAPIData() local ok, response = pcall(function() return game:HttpGet("https://raw.githubusercontent.com/MaximumADHD/Roblox-Client-Tracker/refs/heads/roblox/Full-API-Dump.json") end) if not ok or not response then return {}, {}, {} end local success, apiData = pcall(function() return HttpService:JSONDecode(response) end) if not success or not apiData or not apiData.Classes then return {}, {}, {} end local events = {} local properties = {} local functions = {} for _, class in ipairs(apiData.Classes) do if type(class.Name) == "string" then events[class.Name] = { Superclass = class.Superclass, Events = {}, HiddenEvents = {}, DeprecatedEvents = {} } properties[class.Name] = { Superclass = class.Superclass, Properties = {}, HiddenProperties = {}, ReadOnlyProperties = {}, DeprecatedProperties = {} } functions[class.Name] = { Superclass = class.Superclass, Functions = {}, HiddenFunctions = {}, DeprecatedFunctions = {} } if class.Members then for _, member in ipairs(class.Members) do local isHidden = false local isDeprecated = false local isNotScriptable = false local isReadOnly = false for _, tag in ipairs(member.Tags or {}) do if type(tag) == "string" then if tag == "Hidden" then isHidden = true end if tag == "Deprecated" then isDeprecated = true end if tag == "NotScriptable" then isNotScriptable = true end if tag == "ReadOnly" then isReadOnly = true end end end if member.MemberType == "Event" and type(member.Name) == "string" and not isNotScriptable then local params = {} for _, p in ipairs(member.Parameters or {}) do table.insert(params, {name = p.Name, type = p.Type and p.Type.Name or "any"}) end local eventData = {name = member.Name, parameters = params} if isDeprecated then table.insert(events[class.Name].DeprecatedEvents, eventData) elseif isHidden then table.insert(events[class.Name].HiddenEvents, eventData) else table.insert(events[class.Name].Events, eventData) end elseif member.MemberType == "Property" and type(member.Name) == "string" then local valueType = member.ValueType and member.ValueType.Name or "unknown" local propData = { name = member.Name, valueType = valueType, hidden = isHidden, readOnly = isReadOnly, deprecated = isDeprecated, notScriptable = isNotScriptable } if not isNotScriptable then if isDeprecated then table.insert(properties[class.Name].DeprecatedProperties, propData) elseif isHidden then table.insert(properties[class.Name].HiddenProperties, propData) elseif isReadOnly then table.insert(properties[class.Name].ReadOnlyProperties, propData) else table.insert(properties[class.Name].Properties, propData) end end elseif member.MemberType == "Function" and type(member.Name) == "string" and not isNotScriptable then local params = {} for _, p in ipairs(member.Parameters or {}) do table.insert(params, {name = p.Name, type = p.Type and p.Type.Name or "any", default = p.Default}) end local returnType = member.ReturnType and member.ReturnType.Name or "void" local funcData = { name = member.Name, parameters = params, returnType = returnType, hidden = isHidden, deprecated = isDeprecated } if isDeprecated then table.insert(functions[class.Name].DeprecatedFunctions, funcData) elseif isHidden then table.insert(functions[class.Name].HiddenFunctions, funcData) else table.insert(functions[class.Name].Functions, funcData) end end end end end end return events, properties, functions end local function GetClassEvents(className, includeHidden, includeDeprecated) if type(className) ~= "string" then return {} end local allEvents = {} local current = className local visited = {} while current and CachedAPIEvents[current] and not visited[current] do visited[current] = true local classData = CachedAPIEvents[current] for _, e in ipairs(classData.Events or {}) do allEvents[e.name] = {hidden = false, deprecated = false, parameters = e.parameters} end if includeHidden then for _, e in ipairs(classData.HiddenEvents or {}) do allEvents[e.name] = {hidden = true, deprecated = false, parameters = e.parameters} end end if includeDeprecated then for _, e in ipairs(classData.DeprecatedEvents or {}) do allEvents[e.name] = {hidden = false, deprecated = true, parameters = e.parameters} end end current = classData.Superclass end local result = {} for name, data in pairs(allEvents) do table.insert(result, {name = name, hidden = data.hidden, deprecated = data.deprecated, parameters = data.parameters}) end table.sort(result, function(a, b) return a.name < b.name end) return result end local function GetClassProperties(className, includeHidden, includeDeprecated, excludeSpam) if type(className) ~= "string" then return {} end local allProps = {} local current = className local visited = {} while current and CachedAPIProperties[current] and not visited[current] do visited[current] = true local classData = CachedAPIProperties[current] for _, p in ipairs(classData.Properties or {}) do if not excludeSpam or not SPAM_PROPERTIES[p.name] then allProps[p.name] = {hidden = false, readOnly = false, deprecated = false, valueType = p.valueType} end end for _, p in ipairs(classData.ReadOnlyProperties or {}) do if not excludeSpam or not SPAM_PROPERTIES[p.name] then allProps[p.name] = {hidden = false, readOnly = true, deprecated = false, valueType = p.valueType} end end if includeHidden then for _, p in ipairs(classData.HiddenProperties or {}) do if not excludeSpam or not SPAM_PROPERTIES[p.name] then allProps[p.name] = {hidden = true, readOnly = p.readOnly, deprecated = false, valueType = p.valueType} end end end if includeDeprecated then for _, p in ipairs(classData.DeprecatedProperties or {}) do if not excludeSpam or not SPAM_PROPERTIES[p.name] then allProps[p.name] = {hidden = p.hidden, readOnly = p.readOnly, deprecated = true, valueType = p.valueType} end end end current = classData.Superclass end local result = {} for name, data in pairs(allProps) do table.insert(result, {name = name, hidden = data.hidden, readOnly = data.readOnly, deprecated = data.deprecated, valueType = data.valueType}) end table.sort(result, function(a, b) return a.name < b.name end) return result end local function GetClassFunctions(className, includeHidden, includeDeprecated) if type(className) ~= "string" then return {} end local allFuncs = {} local current = className local visited = {} while current and CachedAPIFunctions[current] and not visited[current] do visited[current] = true local classData = CachedAPIFunctions[current] for _, f in ipairs(classData.Functions or {}) do allFuncs[f.name] = {hidden = false, deprecated = false, parameters = f.parameters, returnType = f.returnType} end if includeHidden then for _, f in ipairs(classData.HiddenFunctions or {}) do allFuncs[f.name] = {hidden = true, deprecated = false, parameters = f.parameters, returnType = f.returnType} end end if includeDeprecated then for _, f in ipairs(classData.DeprecatedFunctions or {}) do allFuncs[f.name] = {hidden = false, deprecated = true, parameters = f.parameters, returnType = f.returnType} end end current = classData.Superclass end local result = {} for name, data in pairs(allFuncs) do table.insert(result, {name = name, hidden = data.hidden, deprecated = data.deprecated, parameters = data.parameters, returnType = data.returnType}) end table.sort(result, function(a, b) return a.name < b.name end) return result end local function generateScript(data) if data.Type == "PropertyChange" then local script = "" local path = instanceToPath(data.Instance) if path:find("getNil") then script = script .. 'local function getNil(n,c) for _,v in ipairs(getnilinstances()) do if v.ClassName==c and v.Name==n then return v end end end\n\n' end script = script .. "local instance = " .. path .. "\n\n" script = script .. "local oldValue = " .. deepSerialize(data.OldValue) .. "\n" script = script .. "local newValue = " .. deepSerialize(data.NewValue) .. "\n\n" if data.IsHidden then if ExploitCapabilities.setscriptable then script = script .. 'setscriptable(instance, "' .. data.PropertyName .. '", true)\n' script = script .. "local value = instance." .. data.PropertyName .. "\n\n" elseif ExploitCapabilities.gethiddenproperty then script = script .. 'local value = gethiddenproperty(instance, "' .. data.PropertyName .. '")\n\n' elseif ExploitCapabilities.ugcGetProperty then script = script .. 'local UGC = game:GetService("UGCValidationService")\n' script = script .. 'local value = UGC:GetPropertyValue(instance, "' .. data.PropertyName .. '")\n\n' end else script = script .. "local value = instance." .. data.PropertyName .. "\n\n" end if not data.IsReadOnly then if data.IsHidden and ExploitCapabilities.setscriptable then script = script .. 'setscriptable(instance, "' .. data.PropertyName .. '", true)\n' end script = script .. "instance." .. data.PropertyName .. " = newValue\n" end return script elseif data.Type == "Function" then local script = "" local path = instanceToPath(data.Instance) if path:find("getNil") then script = script .. 'local function getNil(n,c) for _,v in ipairs(getnilinstances()) do if v.ClassName==c and v.Name==n then return v end end end\n\n' end script = script .. "local instance = " .. path .. "\n\n" if data.Args and #data.Args > 0 then script = script .. "local args = " .. deepSerialize(data.Args) .. "\n\n" end if data.ReturnValue ~= nil then script = script .. "local result = instance:" .. data.FunctionName .. "(unpack(args or {}))\n" else script = script .. "instance:" .. data.FunctionName .. "(unpack(args or {}))\n" end return script else local script = "" local path = instanceToPath(data.Instance) if path:find("getNil") then script = script .. 'local function getNil(n,c) for _,v in ipairs(getnilinstances()) do if v.ClassName==c and v.Name==n then return v end end end\n\n' end if data.UsedSetScriptable then script = script .. 'setscriptable(' .. path .. ', "' .. data.SignalName .. '", true)\n\n' end if data.Args and #data.Args > 0 then script = script .. "local args = " .. deepSerialize(data.Args) .. "\n\n" end script = script .. "local signal = " .. path .. "." .. data.SignalName .. "\n\n" if ExploitCapabilities.replicatesignal then script = script .. "replicatesignal(signal, unpack(args or {}))\n" elseif ExploitCapabilities.firesignal then script = script .. "firesignal(signal, unpack(args or {}))\n" end return script end end local function isSpammy(key, history, threshold, window) if not CONFIG.FilterSpammy then return false end local now = tick() if not history[key] then history[key] = {count = 1, lastTime = now} return false end local h = history[key] if now - h.lastTime > window then h.count = 1 else h.count = h.count + 1 end h.lastTime = now return h.count > threshold end local function updateLogCanvas() task.defer(function() LogList.CanvasSize = UDim2.new(0, 0, 0, UIListLayout.AbsoluteContentSize.Y + 5) end) end local function updateButtonCanvas() ButtonsFrame.CanvasSize = UDim2.new(0, 0, 0, UIGridLayout.AbsoluteContentSize.Y) end local function setCode(text) if codebox then codebox:setRaw(text) end end local function getCode() return codebox and codebox:getString() or "" end local function scaleToolTip() local size = TextService:GetTextSize(ToolTipText.Text, ToolTipText.TextSize, ToolTipText.Font, Vector2.new(196, math.huge)) ToolTipText.Size = UDim2.new(0, size.X, 0, size.Y) ToolTip.Size = UDim2.new(0, size.X + 8, 0, size.Y + 8) end local function makeToolTip(enable, text) if enable and text then if connections["ToolTip"] then connections["ToolTip"]:Disconnect() end connections["ToolTip"] = RunService.RenderStepped:Connect(function() local mousePos = UserInputService:GetMouseLocation() local x = mousePos.X + 15 local y = mousePos.Y - 10 - GuiInset.Y local viewSize = workspace.CurrentCamera.ViewportSize if x + ToolTip.AbsoluteSize.X > viewSize.X then x = mousePos.X - ToolTip.AbsoluteSize.X - 10 end if y + ToolTip.AbsoluteSize.Y > viewSize.Y - 50 then y = viewSize.Y - ToolTip.AbsoluteSize.Y - 50 end ToolTip.Position = UDim2.new(0, x, 0, y) end) ToolTipText.Text = text scaleToolTip() ToolTip.Visible = true else ToolTip.Visible = false if connections["ToolTip"] then connections["ToolTip"]:Disconnect() end end end local function newButton(name, description, onClick) local FunctionTemplate = Create("Frame", { Name = "FunctionTemplate", Parent = ButtonsFrame, BackgroundColor3 = Color3.new(1, 1, 1), BackgroundTransparency = 1, Size = UDim2.new(0, 94, 0, 23) }) local ColorBar = Create("Frame", { Name = "ColorBar", Parent = FunctionTemplate, BackgroundColor3 = Color3.fromRGB(255, 100, 150), BorderSizePixel = 0, Position = UDim2.new(0, 7, 0, 10), Size = UDim2.new(0, 5, 0, 16), ZIndex = 3 }) local Text = Create("TextLabel", { Name = "Text", Parent = FunctionTemplate, BackgroundTransparency = 1, Position = UDim2.new(0, 16, 0, 10), Size = UDim2.new(0, 72, 0, 16), Font = Enum.Font.SourceSans, Text = name, TextColor3 = Color3.new(1, 1, 1), TextSize = 12, TextXAlignment = Enum.TextXAlignment.Left, TextTruncate = Enum.TextTruncate.AtEnd }) local Button = Create("TextButton", { Name = "Button", Parent = FunctionTemplate, BackgroundColor3 = Color3.new(0, 0, 0), BackgroundTransparency = 0.7, BorderSizePixel = 0, Position = UDim2.new(0, 7, 0, 10), Size = UDim2.new(0, 80, 0, 16), AutoButtonColor = false, Font = Enum.Font.SourceSans, Text = "", TextSize = 14 }) Button.MouseEnter:Connect(function() makeToolTip(true, type(description) == "function" and description() or description) end) Button.MouseLeave:Connect(function() makeToolTip(false) end) Button.MouseButton1Click:Connect(function() pcall(onClick, FunctionTemplate) end) updateButtonCanvas() end local function eventSelect(data) if selected and selected.Button then TweenService:Create(selected.Button, TweenInfo.new(0.3), {BackgroundColor3 = deselectedColor}):Play() end selected = data if selected and selected.Button then TweenService:Create(selected.Button, TweenInfo.new(0.3), {BackgroundColor3 = selectedColor}):Play() end if selected then selected.GenScript = selected.GenScript or generateScript(selected) setCode(selected.GenScript) end if sideClosed then sideClosed = false RightPanel.Visible = true TweenService:Create(RightPanel, TweenInfo.new(0.3), {Size = UDim2.fromOffset(375, Background.AbsoluteSize.Y - 19)}):Play() TweenService:Create(TopBar, TweenInfo.new(0.3), {Size = UDim2.fromOffset(520, 19)}):Play() end end local function createGroupEntry(className, memberName, isHidden, isDeprecated, logType) local groupKey = className .. "." .. memberName .. "." .. logType if groupedLogs[groupKey] then return groupedLogs[groupKey] end if layoutOrderNum < 1 then layoutOrderNum = 999999999 end local group = { MemberName = memberName, ClassName = className, Logs = {}, Expanded = false, CallCount = 0, IsHidden = isHidden, IsDeprecated = isDeprecated, LogType = logType } local color if logType == "Property" then color = isHidden and Color3.fromRGB(100, 200, 255) or Color3.fromRGB(100, 180, 255) elseif logType == "Function" then color = isHidden and Color3.fromRGB(255, 200, 100) or Color3.fromRGB(255, 220, 100) else color = isHidden and Color3.fromRGB(255, 150, 50) or (isDeprecated and Color3.fromRGB(180, 100, 255) or Color3.fromRGB(255, 100, 150)) end local icon if logType == "Property" then icon = "◆" elseif logType == "Function" then icon = "ƒ" else icon = "⚡" end local GroupFrame = Create("Frame", { Parent = LogList, BackgroundTransparency = 1, Size = UDim2.new(1, -4, 0, 20), LayoutOrder = layoutOrderNum, ClipsDescendants = true }) local GroupLayout = Create("UIListLayout", { Parent = GroupFrame, SortOrder = Enum.SortOrder.LayoutOrder, Padding = UDim.new(0, 1) }) GroupLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function() GroupFrame.Size = UDim2.new(1, -4, 0, GroupLayout.AbsoluteContentSize.Y) task.defer(updateLogCanvas) end) local HeaderFrame = Create("Frame", { Parent = GroupFrame, BackgroundTransparency = 1, Size = UDim2.new(1, 0, 0, 20), LayoutOrder = -999999 }) local ExpandButton = Create("TextButton", { Parent = HeaderFrame, BackgroundTransparency = 1, Size = UDim2.new(0, 12, 0, 16), Position = UDim2.new(0, 0, 0, 2), Font = Enum.Font.SourceSansBold, Text = ">", TextColor3 = color, TextSize = 11 }) Create("TextLabel", { Parent = HeaderFrame, BackgroundTransparency = 1, Position = UDim2.new(0, 12, 0, 2), Size = UDim2.new(0, 10, 0, 16), Font = Enum.Font.SourceSans, Text = icon, TextColor3 = color, TextSize = 10 }) Create("Frame", { Parent = HeaderFrame, BackgroundColor3 = color, BorderSizePixel = 0, Position = UDim2.new(0, 22, 0, 2), Size = UDim2.new(0, 3, 0, 16) }) local displayText = CONFIG.ShowClassName and (className .. "." .. memberName) or memberName local tags = {} if isHidden then table.insert(tags, "H") end if isDeprecated then table.insert(tags, "D") end if #tags > 0 then displayText = displayText .. "[" .. table.concat(tags) .. "]" end Create("TextLabel", { Parent = HeaderFrame, BackgroundTransparency = 1, Position = UDim2.new(0, 28, 0, 2), Size = UDim2.new(1, -50, 0, 16), Font = Enum.Font.SourceSans, Text = displayText, TextColor3 = color, TextSize = 10, TextXAlignment = Enum.TextXAlignment.Left, TextTruncate = Enum.TextTruncate.AtEnd }) local CountLabel = Create("TextLabel", { Parent = HeaderFrame, BackgroundTransparency = 1, Position = UDim2.new(1, -20, 0, 2), Size = UDim2.new(0, 18, 0, 16), Font = Enum.Font.SourceSans, Text = "0", TextColor3 = Color3.fromRGB(150, 150, 150), TextSize = 10, TextXAlignment = Enum.TextXAlignment.Right }) local HeaderButton = Create("TextButton", { Parent = HeaderFrame, BackgroundColor3 = Color3.new(0, 0, 0), BackgroundTransparency = 0.88, BorderSizePixel = 0, Size = UDim2.new(1, 0, 0, 16), Position = UDim2.new(0, 0, 0, 2), AutoButtonColor = false, Text = "" }) group.Frame = GroupFrame group.CountLabel = CountLabel group.ExpandButton = ExpandButton local function toggleExpand() group.Expanded = not group.Expanded ExpandButton.Text = group.Expanded and "v" or ">" for _, logData in ipairs(group.Logs) do if logData.LogFrame then logData.LogFrame.Visible = group.Expanded end end task.defer(function() GroupFrame.Size = UDim2.new(1, -4, 0, GroupLayout.AbsoluteContentSize.Y) updateLogCanvas() end) end ExpandButton.MouseButton1Click:Connect(toggleExpand) HeaderButton.MouseButton2Click:Connect(toggleExpand) HeaderButton.MouseButton1Click:Connect(function() if #group.Logs > 0 then eventSelect(group.Logs[1]) end end) groupedLogs[groupKey] = group layoutOrderNum = layoutOrderNum - 1 updateLogCanvas() return group end local function newLog(data) local logType if data.Type == "PropertyChange" then logType = "Property" elseif data.Type == "Function" then logType = "Function" else logType = "Signal" end if currentTab == "Signals" and logType ~= "Signal" then return end if currentTab == "Props" and logType ~= "Property" then return end if currentTab == "Funcs" and logType ~= "Function" then return end local className = data.ClassName or "?" local memberName = data.PropertyName or data.SignalName or data.FunctionName local group = createGroupEntry(className, memberName, data.IsHidden, data.IsDeprecated, logType) group.CallCount = group.CallCount + 1 group.CountLabel.Text = tostring(group.CallCount) data.CallCount = group.CallCount local color if logType == "Property" then color = data.IsHidden and Color3.fromRGB(100, 200, 255) or Color3.fromRGB(100, 180, 255) elseif logType == "Function" then color = data.IsHidden and Color3.fromRGB(255, 200, 100) or Color3.fromRGB(255, 220, 100) else color = data.IsHidden and Color3.fromRGB(255, 150, 50) or (data.IsDeprecated and Color3.fromRGB(180, 100, 255) or Color3.fromRGB(190, 190, 190)) end local LogFrame = Create("Frame", { Parent = group.Frame, BackgroundTransparency = 1, Size = UDim2.new(1, 0, 0, 16), LayoutOrder = -group.CallCount, Visible = group.Expanded }) Create("TextLabel", { Parent = LogFrame, BackgroundTransparency = 1, Position = UDim2.new(0, 5, 0, 0), Size = UDim2.new(0, 20, 1, 0), Font = Enum.Font.SourceSans, Text = "#" .. tostring(group.CallCount - 1), TextColor3 = Color3.fromRGB(150, 150, 150), TextSize = 9, TextXAlignment = Enum.TextXAlignment.Left }) Create("TextLabel", { Parent = LogFrame, BackgroundTransparency = 1, Position = UDim2.new(0, 26, 0, 0), Size = UDim2.new(1, -28, 1, 0), Font = Enum.Font.SourceSans, Text = CONFIG.ShowClassName and (className .. "." .. memberName) or memberName, TextColor3 = color, TextSize = 10, TextXAlignment = Enum.TextXAlignment.Left, TextTruncate = Enum.TextTruncate.AtEnd }) local LogButton = Create("TextButton", { Parent = LogFrame, BackgroundColor3 = Color3.new(0, 0, 0), BackgroundTransparency = 0.92, BorderSizePixel = 0, Size = UDim2.new(1, 0, 1, 0), AutoButtonColor = false, Text = "" }) data.LogFrame = LogFrame data.Button = LogButton data.id = #logs + 1 table.insert(group.Logs, 1, data) table.insert(logs, 1, data) LogButton.MouseButton1Click:Connect(function() eventSelect(data) end) if #logs > CONFIG.MaxLogs then local oldest = table.remove(logs) if oldest and oldest.LogFrame then oldest.LogFrame:Destroy() end end end local function logSignal(instance, signalName, signal, args, isHidden, isDeprecated, accessMethod, usedSetScriptable) if not CONFIG.Enabled then return end local ok, className = pcall(function() return instance.ClassName end) className = ok and className or "?" local key = className .. "." .. signalName .. "." .. tostring(instance) if blacklist[key] or blacklist[signalName] then return end if blocklist[key] or blocklist[signalName] then return end if isSpammy(key, SpamHistory, CONFIG.SpamThreshold, CONFIG.SpamTimeWindow) then return end newLog({ Type = "Signal", SignalName = signalName, Instance = instance, Signal = signal, ClassName = className, Args = deepclone(args or {}), Timestamp = os.time(), IsHidden = isHidden, IsDeprecated = isDeprecated, AccessMethod = accessMethod, UsedSetScriptable = usedSetScriptable }) end local function logPropertyChange(instance, propName, oldValue, newValue, isHidden, isReadOnly, isDeprecated, accessMethod, valueType) if not CONFIG.Enabled then return end if not getgenv().CaptureProperties then return end local ok, className = pcall(function() return instance.ClassName end) className = ok and className or "?" local key = className .. "." .. propName .. "." .. tostring(instance) if blacklist[key] or blacklist[propName] then return end if blocklist[key] or blocklist[propName] then return end if isSpammy(key, PropertySpamHistory, 3, 0.5) then return end newLog({ Type = "PropertyChange", PropertyName = propName, Instance = instance, ClassName = className, OldValue = deepclone(oldValue), NewValue = deepclone(newValue), ValueType = valueType or typeof(newValue), Timestamp = os.time(), IsHidden = isHidden, IsReadOnly = isReadOnly, IsDeprecated = isDeprecated, AccessMethod = accessMethod }) end local function logFunctionCall(instance, funcName, args, returnValue, isHidden, isDeprecated, callingScript) if not CONFIG.Enabled then return end if not getgenv().CaptureFunctions then return end local ok, className = pcall(function() return instance.ClassName end) className = ok and className or "?" local key = className .. "." .. funcName .. "." .. tostring(instance) if blacklist[key] or blacklist[funcName] then return end if blocklist[key] or blocklist[funcName] then return end if isSpammy(key, FunctionSpamHistory, CONFIG.SpamThreshold, CONFIG.SpamTimeWindow) then return end TotalFunctionCalls = TotalFunctionCalls + 1 newLog({ Type = "Function", FunctionName = funcName, Instance = instance, ClassName = className, Args = deepclone(args or {}), ReturnValue = deepclone(returnValue), Timestamp = os.time(), IsHidden = isHidden, IsDeprecated = isDeprecated, CallingScript = callingScript }) end local function hookSignal(instance, signalName, isHidden, isDeprecated) local ok, className = pcall(function() return instance.ClassName end) className = ok and className or "Unknown" local key = className .. "." .. signalName .. "." .. tostring(instance) if HookedSignals[key] then return false end local signal, accessMethod, usedSetScriptable = getSignalFromInstance(instance, signalName, isHidden, isDeprecated) if not signal then return false end HookedSignals[key] = true TotalSignalHooks = TotalSignalHooks + 1 if isHidden then HiddenSignalHooks = HiddenSignalHooks + 1 end local conn = signal:Connect(function(...) logSignal(instance, signalName, signal, {...}, isHidden, isDeprecated, accessMethod, usedSetScriptable) end) table.insert(connections, conn) return true end local function hookProperty(instance, propName, isHidden, isReadOnly, isDeprecated, valueType) if SPAM_PROPERTIES[propName] then return false end local ok, className = pcall(function() return instance.ClassName end) className = ok and className or "Unknown" local key = className .. "." .. propName .. "." .. tostring(instance) if HookedProperties[key] then return false end local signal = nil if isHidden and ExploitCapabilities.setscriptable then pcall(function() local was = isscriptable and isscriptable(instance, propName) if not was then setscriptable(instance, propName, true) end signal = instance:GetPropertyChangedSignal(propName) end) else local ok2 ok2, signal = pcall(function() return instance:GetPropertyChangedSignal(propName) end) if not ok2 then signal = nil end end if not signal then return false end HookedProperties[key] = true TotalPropertyHooks = TotalPropertyHooks + 1 if isHidden then HiddenPropertyHooks = HiddenPropertyHooks + 1 end local lastValue = nil pcall(function() local ok3, val = getPropertyValueSmart(instance, propName, isHidden) if ok3 then lastValue = val end end) local conn = signal:Connect(function() local ok4, newValue, method = getPropertyValueSmart(instance, propName, isHidden) if ok4 then logPropertyChange(instance, propName, lastValue, newValue, isHidden, isReadOnly, isDeprecated, method, valueType) lastValue = newValue end end) table.insert(connections, conn) return true end local function hookInstanceByClass(instance) for _, className in ipairs(getgenv().CaptureClasses or {}) do local ok, isClass = pcall(function() return instance:IsA(className) end) if ok and isClass then for _, e in ipairs(GetClassEvents(className, getgenv().CaptureHidden, getgenv().CaptureDeprecated)) do pcall(function() hookSignal(instance, e.name, e.hidden, e.deprecated) end) end end end if getgenv().CaptureProperties then for _, className in ipairs(getgenv().PropertyClasses or {}) do local ok, isClass = pcall(function() return instance:IsA(className) end) if ok and isClass then for _, p in ipairs(GetClassProperties(className, getgenv().CaptureHidden, getgenv().CaptureDeprecated, true)) do pcall(function() hookProperty(instance, p.name, p.hidden, p.readOnly, p.deprecated, p.valueType) end) end end end end end local function rehookAll() TotalSignalHooks = 0 TotalPropertyHooks = 0 HiddenSignalHooks = 0 HiddenPropertyHooks = 0 HookedSignals = {} HookedProperties = {} for _, conn in pairs(connections) do if typeof(conn) == "RBXScriptConnection" then pcall(function() conn:Disconnect() end) end end connections = {} StatusLabel.Text = "[Rehooking...]" StatusLabel.TextColor3 = Color3.fromRGB(255, 200, 100) task.spawn(function() task.wait(0.1) local count = 0 for _, desc in ipairs(game:GetDescendants()) do count = count + 1 if count % 400 == 0 then task.wait() end pcall(function() hookInstanceByClass(desc) end) end connections["DescAdded"] = game.DescendantAdded:Connect(function(desc) task.defer(function() pcall(function() hookInstanceByClass(desc) end) end) end) StatusLabel.Text = string.format("[S:%d/%dh P:%d/%dh F:%d]", TotalSignalHooks, HiddenSignalHooks, TotalPropertyHooks, HiddenPropertyHooks, TotalFunctionCalls) StatusLabel.TextColor3 = Color3.fromRGB(100, 255, 100) end) end local originalNamecall local namecallHooked = false local function setupFunctionSpy() if not ExploitCapabilities.hookmetamethod then return end if not ExploitCapabilities.getnamecallmethod then return end if namecallHooked then return end local trackedMethods = {} for _, className in ipairs(getgenv().FunctionClasses or {}) do local funcs = GetClassFunctions(className, getgenv().CaptureHidden, getgenv().CaptureDeprecated) for _, f in ipairs(funcs) do trackedMethods[f.name] = {hidden = f.hidden, deprecated = f.deprecated} end end originalNamecall = hookmetamethod(game, "__namecall", newcclosure(function(self, ...) local method = getnamecallmethod() if getgenv().CaptureFunctions and method and trackedMethods[method] then if not CONFIG.LogCheckcaller or not checkcaller() then local args = {...} local callingScript = nil pcall(function() callingScript = getcallingscript() end) task.defer(function() local ok, returnVal = pcall(function() return originalNamecall(self, unpack(args)) end) logFunctionCall(self, method, args, ok and returnVal or nil, trackedMethods[method].hidden, trackedMethods[method].deprecated, callingScript) end) end end return originalNamecall(self, ...) end)) namecallHooked = true end local function shutdown() getgenv().SignalSpyExecuted = false for _, conn in pairs(connections) do if typeof(conn) == "RBXScriptConnection" then pcall(function() conn:Disconnect() end) end end if originalNamecall and namecallHooked then pcall(function() hookmetamethod(game, "__namecall", originalNamecall) end) end pcall(function() SignalSpy:Destroy() end) pcall(function() Storage:Destroy() end) UserInputService.MouseIconEnabled = true end TabSignals.MouseButton1Click:Connect(function() currentTab = "Signals" TabSignals.BackgroundTransparency = 0.3 TabProperties.BackgroundTransparency = 0.7 TabFunctions.BackgroundTransparency = 0.7 end) TabProperties.MouseButton1Click:Connect(function() currentTab = "Props" TabSignals.BackgroundTransparency = 0.7 TabProperties.BackgroundTransparency = 0.3 TabFunctions.BackgroundTransparency = 0.7 end) TabFunctions.MouseButton1Click:Connect(function() currentTab = "Funcs" TabSignals.BackgroundTransparency = 0.7 TabProperties.BackgroundTransparency = 0.7 TabFunctions.BackgroundTransparency = 0.3 end) TitleButton.MouseButton1Click:Connect(function() CONFIG.Enabled = not CONFIG.Enabled TweenService:Create(TitleButton, TweenInfo.new(0.3), {TextColor3 = CONFIG.Enabled and Color3.fromRGB(100, 255, 100) or Color3.fromRGB(255, 100, 100)}):Play() end) CloseButton.MouseEnter:Connect(function() TweenService:Create(CloseButton, TweenInfo.new(0.2), {BackgroundColor3 = Color3.fromRGB(255, 60, 60)}):Play() end) CloseButton.MouseLeave:Connect(function() TweenService:Create(CloseButton, TweenInfo.new(0.2), {BackgroundColor3 = Color3.fromRGB(37, 36, 38)}):Play() end) CloseButton.MouseButton1Click:Connect(shutdown) MinimizeButton.MouseButton1Click:Connect(function() if mainClosing then return end mainClosing = true closed = not closed if closed then TweenService:Create(LeftPanel, TweenInfo.new(0.3), {Size = UDim2.new(0, 145, 0, 0)}):Play() TweenService:Create(RightPanel, TweenInfo.new(0.3), {Size = UDim2.new(0, 375, 0, 0)}):Play() else TweenService:Create(LeftPanel, TweenInfo.new(0.3), {Size = UDim2.new(0, 145, 0, 301)}):Play() if not sideClosed then TweenService:Create(RightPanel, TweenInfo.new(0.3), {Size = UDim2.new(0, 375, 0, 301)}):Play() end end task.delay(0.3, function() mainClosing = false end) end) MaximizeButton.MouseButton1Click:Connect(function() if sideClosing or closed then return end sideClosing = true sideClosed = not sideClosed if sideClosed then TweenService:Create(RightPanel, TweenInfo.new(0.3), {Size = UDim2.new(0, 0, 0, 301)}):Play() TweenService:Create(TopBar, TweenInfo.new(0.3), {Size = UDim2.fromOffset(145, 19)}):Play() else RightPanel.Visible = true TweenService:Create(RightPanel, TweenInfo.new(0.3), {Size = UDim2.new(0, 375, 0, 301)}):Play() TweenService:Create(TopBar, TweenInfo.new(0.3), {Size = UDim2.fromOffset(520, 19)}):Play() end task.delay(0.3, function() sideClosing = false end) end) TopBar.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then local mousePos = UserInputService:GetMouseLocation() - GuiInset local relativePos = mousePos - Background.AbsolutePosition if relativePos.X <= TopBar.AbsoluteSize.X - 60 and relativePos.X >= 0 and relativePos.Y <= 19 and relativePos.Y >= 0 then local dragStart = input.Position local startPos = Background.Position local dragConn dragConn = RunService.RenderStepped:Connect(function() local newPos = UserInputService:GetMouseLocation() local delta = newPos - Vector2.new(dragStart.X, dragStart.Y) Background.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end) local endConn endConn = UserInputService.InputEnded:Connect(function(endInput) if endInput == input then dragConn:Disconnect() endConn:Disconnect() end end) end end end) if Highlight then codebox = Highlight.new(CodeBox) local caps = {} for k, v in pairs(ExploitCapabilities) do if v then table.insert(caps, k) end end codebox:setRaw("SignalSpy+ v7\nCapabilities: " .. table.concat(caps, ", ") .. "\nUGCValidationService: " .. (ExploitCapabilities.ugcGetProperty and "YES" or "NO")) end getgenv().SignalSpyShutdown = shutdown newButton("Copy Code", function() return "Copy generated code" end, function() setclipboard(getCode()) ToolTipText.Text = "Copied!" end) newButton("Refresh", function() return "Rehook all signals and properties" end, function() rehookAll() end) newButton("Clr Logs", function() return "Clear all logs" end, function() for _, g in pairs(groupedLogs) do if g.Frame then g.Frame:Destroy() end end groupedLogs = {} logs = {} selected = nil layoutOrderNum = 999999999 TotalFunctionCalls = 0 setCode("") updateLogCanvas() end) newButton("Props", function() return "Properties: " .. (getgenv().CaptureProperties and "ON" or "OFF") end, function() getgenv().CaptureProperties = not getgenv().CaptureProperties rehookAll() end) newButton("Funcs", function() return "Functions: " .. (getgenv().CaptureFunctions and "ON" or "OFF") end, function() getgenv().CaptureFunctions = not getgenv().CaptureFunctions if getgenv().CaptureFunctions and not namecallHooked then setupFunctionSpy() end end) newButton("Hidden", function() return "Hidden: " .. (getgenv().CaptureHidden and "ON" or "OFF") end, function() getgenv().CaptureHidden = not getgenv().CaptureHidden rehookAll() end) newButton("Fire", function() return "Fire selected signal" end, function() if selected and selected.Signal and ExploitCapabilities.firesignal then pcall(function() firesignal(selected.Signal, unpack(selected.Args or {})) end) ToolTipText.Text = "Fired!" else ToolTipText.Text = "N/A" end end) newButton("Exclude (i)", function() return "Exclude this instance" end, function() if selected then local key = selected.ClassName .. "." .. (selected.PropertyName or selected.SignalName or selected.FunctionName) .. "." .. tostring(selected.Instance) blacklist[key] = true ToolTipText.Text = "Excluded!" end end) newButton("Exclude (n)", function() return "Exclude by name" end, function() if selected then local name = selected.PropertyName or selected.SignalName or selected.FunctionName blacklist[name] = true ToolTipText.Text = "Excluded!" end end) newButton("Clr Blacklist", function() return "Clear exclusions" end, function() blacklist = {} ToolTipText.Text = "Cleared!" end) newButton("Stats", function() return "View statistics" end, function() local info = "STATISTICS\n\n" info = info .. "Signal Hooks: " .. TotalSignalHooks .. " (" .. HiddenSignalHooks .. " hidden)\n" info = info .. "Property Hooks: " .. TotalPropertyHooks .. " (" .. HiddenPropertyHooks .. " hidden)\n" info = info .. "Function Calls: " .. TotalFunctionCalls .. "\n\n" info = info .. "CAPABILITIES:\n" for k, v in pairs(ExploitCapabilities) do info = info .. " " .. k .. ": " .. (v and "YES" or "NO") .. "\n" end info = info .. "\nINTERESTING HIDDEN:\n" for _, p in ipairs(INTERESTING_HIDDEN) do info = info .. " " .. p .. "\n" end setCode(info) end) local guiParent = CoreGui if gethui then guiParent = gethui() elseif protect_gui then protect_gui(SignalSpy) end SignalSpy.Parent = guiParent task.spawn(function() StatusLabel.Text = "[Loading API...]" CachedAPIEvents, CachedAPIProperties, CachedAPIFunctions = FetchAPIData() local classCount = 0 for _ in pairs(CachedAPIEvents) do classCount = classCount + 1 end if classCount == 0 then StatusLabel.Text = "[API FAIL]" StatusLabel.TextColor3 = Color3.fromRGB(255, 100, 100) return end task.wait(0.2) rehookAll() if getgenv().CaptureFunctions then setupFunctionSpy() end end) getgenv().SignalSpyExecuted = true getgenv().SignalSpy = { CONFIG = CONFIG, logs = logs, blacklist = blacklist, blocklist = blocklist, shutdown = shutdown, rehookAll = rehookAll, ExploitCapabilities = ExploitCapabilities, SPAM_PROPERTIES = SPAM_PROPERTIES, INTERESTING_HIDDEN = INTERESTING_HIDDEN, getPropertyValueSmart = getPropertyValueSmart, ugcGetProperty = ugcGetProperty, setupFunctionSpy = setupFunctionSpy, newButton = newButton, }
Optional Paste Settings
Category:
None
Cryptocurrency
Cybersecurity
Fixit
Food
Gaming
Haiku
Help
History
Housing
Jokes
Legal
Money
Movies
Music
Pets
Photo
Science
Software
Source Code
Spirit
Sports
Travel
TV
Writing
Tags:
Syntax Highlighting:
None
Bash
C
C#
C++
CSS
HTML
JSON
Java
JavaScript
Lua
Markdown (PRO members only)
Objective C
PHP
Perl
Python
Ruby
Swift
4CS
6502 ACME Cross Assembler
6502 Kick Assembler
6502 TASM/64TASS
ABAP
AIMMS
ALGOL 68
APT Sources
ARM
ASM (NASM)
ASP
ActionScript
ActionScript 3
Ada
Apache Log
AppleScript
Arduino
Asymptote
AutoIt
Autohotkey
Avisynth
Awk
BASCOM AVR
BNF
BOO
Bash
Basic4GL
Batch
BibTeX
Blitz Basic
Blitz3D
BlitzMax
BrainFuck
C
C (WinAPI)
C Intermediate Language
C for Macs
C#
C++
C++ (WinAPI)
C++ (with Qt extensions)
C: Loadrunner
CAD DCL
CAD Lisp
CFDG
CMake
COBOL
CSS
Ceylon
ChaiScript
Chapel
Clojure
Clone C
Clone C++
CoffeeScript
ColdFusion
Cuesheet
D
DCL
DCPU-16
DCS
DIV
DOT
Dart
Delphi
Delphi Prism (Oxygene)
Diff
E
ECMAScript
EPC
Easytrieve
Eiffel
Email
Erlang
Euphoria
F#
FO Language
Falcon
Filemaker
Formula One
Fortran
FreeBasic
FreeSWITCH
GAMBAS
GDB
GDScript
Game Maker
Genero
Genie
GetText
Go
Godot GLSL
Groovy
GwBasic
HQ9 Plus
HTML
HTML 5
Haskell
Haxe
HicEst
IDL
INI file
INTERCAL
IO
ISPF Panel Definition
Icon
Inno Script
J
JCL
JSON
Java
Java 5
JavaScript
Julia
KSP (Kontakt Script)
KiXtart
Kotlin
LDIF
LLVM
LOL Code
LScript
Latex
Liberty BASIC
Linden Scripting
Lisp
Loco Basic
Logtalk
Lotus Formulas
Lotus Script
Lua
M68000 Assembler
MIX Assembler
MK-61/52
MPASM
MXML
MagikSF
Make
MapBasic
Markdown (PRO members only)
MatLab
Mercury
MetaPost
Modula 2
Modula 3
Motorola 68000 HiSoft Dev
MySQL
Nagios
NetRexx
Nginx
Nim
NullSoft Installer
OCaml
OCaml Brief
Oberon 2
Objeck Programming Langua
Objective C
Octave
Open Object Rexx
OpenBSD PACKET FILTER
OpenGL Shading
Openoffice BASIC
Oracle 11
Oracle 8
Oz
PARI/GP
PCRE
PHP
PHP Brief
PL/I
PL/SQL
POV-Ray
ParaSail
Pascal
Pawn
Per
Perl
Perl 6
Phix
Pic 16
Pike
Pixel Bender
PostScript
PostgreSQL
PowerBuilder
PowerShell
ProFTPd
Progress
Prolog
Properties
ProvideX
Puppet
PureBasic
PyCon
Python
Python for S60
QBasic
QML
R
RBScript
REBOL
REG
RPM Spec
Racket
Rails
Rexx
Robots
Roff Manpage
Ruby
Ruby Gnuplot
Rust
SAS
SCL
SPARK
SPARQL
SQF
SQL
SSH Config
Scala
Scheme
Scilab
SdlBasic
Smalltalk
Smarty
StandardML
StoneScript
SuperCollider
Swift
SystemVerilog
T-SQL
TCL
TeXgraph
Tera Term
TypeScript
TypoScript
UPC
Unicon
UnrealScript
Urbi
VB.NET
VBScript
VHDL
VIM
Vala
Vedit
VeriLog
Visual Pro Log
VisualBasic
VisualFoxPro
WHOIS
WhiteSpace
Winbatch
XBasic
XML
XPP
Xojo
Xorg Config
YAML
YARA
Z80 Assembler
ZXBasic
autoconf
jQuery
mIRC
newLISP
q/kdb+
thinBasic
Paste Expiration:
Never
Burn after read
10 Minutes
1 Hour
1 Day
1 Week
2 Weeks
1 Month
6 Months
1 Year
Paste Exposure:
Public
Unlisted
Private
Folder:
(members only)
Password
NEW
Enabled
Disabled
Burn after read
NEW
Paste Name / Title:
Create New Paste
Hello
Guest
Sign Up
or
Login
Sign in with Facebook
Sign in with Twitter
Sign in with Google
You are currently not logged in, this means you can not edit or delete anything you paste.
Sign Up
or
Login
Public Pastes
F-Formula
2 hours ago | 1.23 KB
SEEING GOD IN THE MATH
2 hours ago | 0.12 KB
Untitled
17 hours ago | 1.88 KB
Untitled
17 hours ago | 0.67 KB
Untitled
18 hours ago | 3.33 KB
Untitled
18 hours ago | 1.00 KB
Untitled
18 hours ago | 0.33 KB
Untitled
18 hours ago | 1.55 KB
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the
Cookies Policy
.
OK, I Understand
Not a member of Pastebin yet?
Sign Up
, it unlocks many cool features!