-- 1.30.2025 -- PLACE STEALER + DEX EXPLORER AT HOME -- 4.5.2025 -- added UI stuff + UDIM2 property type ROOTS = {workspace.CampA, workspace.Campers} -- Dictionary to map classes to the properties we want to serialize local propertyMap = { BasePart = { "Position", "Orientation", "Size", "Anchored", "CanCollide", "Material", "Color", "Transparency", "Reflectance", "TopSurface", "BottomSurface", "RightSurface", "LeftSurface", "FrontSurface", "BackSurface", "Shape" }, MeshPart = { "MeshId", "TextureID" }, Decal = { "Face", "Texture", "Transparency", "Color3" }, Texture = { "Face", "Texture", "Transparency", "Color3", "OffsetStudsU", "OffsetStudsV", "StudsPerTileU", "StudsPerTileV" }, SpecialMesh = { "MeshType", "MeshId", "TextureId", "Scale", "Offset", "VertexColor" }, ParticleEmitter = { "Texture", "Color", "Transparency", "LightEmission", "Size", "Rate", "Lifetime", "Speed" }, Smoke = { "Enabled", "Color", "Size" }, Fire = { "Enabled", "Color", "Size" }, Sparkles = { "Enabled", "Color" }, Seat = { "Disabled", }, VehicleSeat = { "MaxSpeed", "Steer", "SteerFloat", "Throttle", "ThrottleFloat", "Torque", "TurnSpeed" }, Model = { --"PrimaryPart" -- JSON cannot store object references }, ValueBase = { "Value" }, -------------------------- Humanoid = { "DisplayDistanceType", "HealthDisplayDistance", "HealthDisplayType", "NameOcclusion", "Health", "MaxHealth", "HipHeight", "WalkSpeed", "JumpPower" }, BodyColors = { "HeadColor3", "TorsoColor3", "LeftArmColor3", "RightArmColor3", "LeftLegColor3", "RightLegColor3" }, Shirt = { "Color3", "ShirtTemplate" }, Pants = { "Color3", "PantsTemplate" }, ShirtGraphic = { "Color3", "Graphic" }, Tool = { "Enabled", "ToolTip", "Grip", "TextureId", "CanBeDropped", "RequiresHandle", "ManualActivationOnly" }, HopperBin = { "Active", "BinType", "TextureId" }, Sound = { "SoundId", "Looped", "PlaybackSpeed", "TimePosition", "Volume" }, -------------------------- ScreenGui = {"Enabled"}, BillboardGui = {"Enabled"}, SurfaceGui = {"Enabled"}, GuiObject = { "AnchorPoint", "Position", "Size", "Rotation", "Visible", "ZIndex", "BackgroundColor3", "BackgroundTransparency", "BorderColor3", "BorderMode", "BorderSizePixel", }, TextButton = { "Style", "Text", "TextSize", "TextScaled", "TextWrapped", "TextTransparency", "TextStrokeTransparency", "TextColor3", "TextStrokeColor3", }, TextLabel = { "Style", "Text", "TextSize", "TextScaled", "TextWrapped", "TextTransparency", "TextStrokeTransparency", "TextColor3", "TextStrokeColor3", }, ImageButton = { "Image", "ImageColor3", "ImageTransparency" }, ImageLabel = { "Image", "ImageColor3", "ImageTransparency" }, } local function round(num) return math.round(num*10000)/10000 end -- Function to serialize an instance and its children local function serializeInstance(instance) local data = { Name = instance.Name, ClassName = instance.ClassName, Properties = {}, Children = {} } -- Get the list of properties for this class for className, properties in pairs(propertyMap) do if instance:IsA(className) then for _, property in ipairs(properties) do local success, value = pcall(function() return instance[property] end) if success then -- Handle special cases like enums or complex types if typeof(value) == "number" then value = round(value) elseif typeof(value) == "EnumItem" then value = value.Name elseif typeof(value) == "Color3" then value = { R = round(value.R), G = round(value.G), B = round(value.B) } elseif typeof(value) == "Vector3" then value = { X = round(value.X), Y = round(value.Y), Z = round(value.Z) } elseif typeof(value) == "CFrame" then value = { value:GetComponents() } elseif typeof(value) == "ColorSequence" then value = { Keypoints = value.Keypoints } elseif typeof(value) == "NumberSequence" then value = { Keypoints = value.Keypoints } elseif typeof(value) == "NumberRange" then value = { Min = round(value.Min), Max = round(value.Max) } elseif typeof(value) == "UDim2" then value = { X = {Scale = round(value.X.Scale), Offset = round(value.X.Offset)}, Y = {Scale = round(value.Y.Scale), Offset = round(value.Y.Offset)} } end data.Properties[property] = value end end end end -- Serialize children recursively for _, child in ipairs(instance:GetChildren()) do -- make sure the children is a valid class for className, properties in pairs(propertyMap) do if instance:IsA(className) then table.insert(data.Children, serializeInstance(child)) break end end end return data end -- Serialize all selected instances local serializedData = {} for _,ROOT in pairs(ROOTS) do for _,instance in pairs(ROOT:GetChildren()) do -- make sure the children is a valid class for className, properties in pairs(propertyMap) do if instance:IsA(className) then table.insert(serializedData, serializeInstance(instance)) end end end end -- Convert to JSON local HttpService = game:GetService("HttpService") local jsonData = HttpService:JSONEncode(serializedData) --///////////////////////////////////////////////////// --///////////////////////////////////////////////////// --///////////////////////////////////////////////////// CREATE_GUI = true DEPTH_LIMIT = 8 ----------------------------- local plrGui = game:GetService('Players').LocalPlayer:FindFirstChildOfClass('PlayerGui') if CREATE_GUI then GUI = plrGui:FindFirstChild("DEX_ATHOME") if GUI then GUI:Destroy() end GUI = Instance.new("ScreenGui") GUI.Name = "DEX_ATHOME" GUI.DisplayOrder = 999 GUI.Parent = plrGui else local guis = plrGui:GetChildren() GUI = guis[math.random(1,#guis)] end SCROLL = Instance.new('ScrollingFrame') SCROLL.Name = "DEX_SCROLL" SCROLL.Size = UDim2.new(0.7,0,0,250) SCROLL.Position = UDim2.new(0.15,0,0,0) SCROLL.BackgroundColor3 = Color3.new(0,0,0) SCROLL.BackgroundTransparency = 0.5 SCROLL.ScrollingDirection = Enum.ScrollingDirection.Y SCROLL.CanvasSize = UDim2.new(0,0,0,0) -- to be adjusted later SCROLL.Parent = GUI GRID = Instance.new("UIGridLayout") GRID.CellPadding = UDim2.new(0,0,0,0) GRID.CellSize = UDim2.new(0.25,-3 , 0,250) GRID.SortOrder = Enum.SortOrder.LayoutOrder GRID.Parent = SCROLL ----------------------------- function box(num, txt) local txtbox = Instance.new('TextBox') txtbox.Name = "DEX_TXTBOX_" .. num -- size already determined by the grid layout txtbox.BackgroundColor3 = Color3.new(1,1,1) txtbox.TextSize = 12 txtbox.ClearTextOnFocus = false txtbox.TextWrapped = true txtbox.Text = txt txtbox.Parent = SCROLL local pagenum = Instance.new('TextLabel') pagenum.BackgroundColor3 = Color3.new(0,0,0) pagenum.BackgroundTransparency = 0.5 pagenum.TextScaled = true pagenum.TextColor3 = Color3.new(1,1,1) pagenum.TextStrokeTransparency = 0 pagenum.Size = UDim2.new(0,25,0,25) pagenum.Position = UDim2.new(0,0,1,-25) pagenum.Text = num pagenum.Parent = txtbox end function split(inputString, chunkLength) local result = {} local length = #inputString for i = 1, length, chunkLength do local chunk = inputString:sub(i, i + chunkLength - 1) table.insert(result, chunk) end return result end local pages = split(jsonData, 2^14-1024) for num,data in pairs(pages) do box(num,data) end SCROLL.CanvasSize = UDim2.new(0,0,0, math.ceil(#pages / 4) * GRID.CellSize.Y.Offset)