Homemade something
Key RequiredUniversal

Homemade something

Universal ScriptKonethorixKonethorix 13.6K views 299 executesUpdated Apr 7, 2025
0.0/ 5(1 votes)
010% Positive
Lua Script•279 lines (7497 chars)
-- 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)

Features & Information

wa

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts