
Key RequiredUniversal

-- 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)No comments yet for this script.



