Here’s a system I made.
wait(1)
local plr = game.Players.LocalPlayer
local plrGUI = plr.PlayerGui
local gui = Instance.new("ScreenGui", plrGUI)
gui.Name = "EriExplorer"
gui.ResetOnSpawn = false
function createUIList(parent)
local uiautosortlist = Instance.new("UIListLayout", parent)
uiautosortlist.HorizontalFlex = Enum.UIFlexAlignment.Fill
uiautosortlist.VerticalFlex = Enum.UIFlexAlignment.None
uiautosortlist.SortOrder = Enum.SortOrder.LayoutOrder
return uiautosortlist
end
function createExplorer()
local frame = Instance.new("ScrollingFrame", gui)
frame.Position = UDim2.new(1, 0, 0, 0)
frame.AnchorPoint = Vector2.new(1, 0)
frame.Size = UDim2.new(0.2, 0, 1, 0)
frame.BackgroundColor3 = Color3.new(0, 0, 0)
frame.BackgroundTransparency = 0.5
frame.CanvasSize = UDim2.new(0, 0, 0, 20)
local uiautosortlist = Instance.new("UIListLayout", frame)
uiautosortlist.HorizontalFlex = Enum.UIFlexAlignment.Fill
uiautosortlist.VerticalFlex = Enum.UIFlexAlignment.None
uiautosortlist.SortOrder = Enum.SortOrder.LayoutOrder
local nochildrendiv = Instance.new("TextButton", frame)
nochildrendiv.LayoutOrder = 5
nochildrendiv.Name = "NOCHILDDIV"
nochildrendiv.Text = "No children V"
nochildrendiv.BackgroundColor3 = Color3.new(1, 1, 1)
nochildrendiv.BackgroundTransparency = 0
nochildrendiv.TextColor3 = Color3.new(0, 0, 0)
nochildrendiv.Size = UDim2.new(1, 0, 0, 20)
nochildrendiv.TextScaled = true
function createButton(parent, thing)
local parentFrame = Instance.new("Frame", parent)
parentFrame.Name = thing.Name
createUIList(parentFrame)
parentFrame.BackgroundColor3 = Color3.new(1, 1, 1)
parentFrame.BackgroundTransparency = 1
parentFrame.Size = UDim2.new(1, 0, 0, 20)
parentFrame.AutomaticSize = Enum.AutomaticSize.Y
local button = Instance.new("TextButton", parentFrame)
button.Name = thing.Name
button.Text = thing.Name
if thing:IsA("Folder") then
button.BackgroundColor3 = Color3.new(1, 1, 0.498039)
elseif thing:IsA("RemoteEvent") then
button.BackgroundColor3 = Color3.new(0.666667, 0.333333, 1)
elseif thing:IsA("RemoteFunction") then
button.BackgroundColor3 = Color3.new(0.666667, 0.666667, 1)
elseif thing:IsA("BindableEvent") then
button.BackgroundColor3 = Color3.new(1, 0.666667, 0.498039)
elseif thing:IsA("LocalScript") then
button.BackgroundColor3 = Color3.new(0, 0.666667, 1)
elseif thing:IsA("Script") then
button.BackgroundColor3 = Color3.new(0, 0.333333, 1)
elseif thing:IsA("ModuleScript") then
button.BackgroundColor3 = Color3.new(0.666667, 0.333333, 0.498039)
elseif thing:IsA("ValueBase") then
button.BackgroundColor3 = Color3.new(0.333333, 0.333333, 0.498039)
elseif thing:IsA("Model") then
button.BackgroundColor3 = Color3.new(1, 0.333333, 0)
else
button.BackgroundColor3 = Color3.new(1, 1, 1)
end
button.BackgroundTransparency = 0.5
button.TextColor3 = Color3.new(0, 0, 0)
button.Size = UDim2.new(1, 0, 0, 20)
button.TextScaled = true
button.Font = Enum.Font.Roboto
if hasChildren(thing) then
button.Font = Enum.Font.RobotoCondensed
end
button.MouseButton2Up:Connect(function()
contextMenu(thing)
end)
return button
end
function hasChildren(parent)
for _, v in parent:GetChildren() do
if v then
return true
end
end
return false
end
function changeSize(framee, dir)
-- Start with the parent of the current frame
local currentParent = framee.Parent
-- Loop through the parent hierarchy
while currentParent do
-- Check if the parent is a Frame with the name "CHILDHOLD"
if currentParent:IsA("Frame") then
if dir == true then
currentParent.Size = currentParent.Size + UDim2.new(0, 0, 0, framee.Size.Y.Offset)
frame.CanvasSize = frame.CanvasSize + UDim2.new(0, 0, 0, framee.Size.Y.Offset)
else
currentParent.Size = currentParent.Size - UDim2.new(0, 0, 0, framee.Size.Y.Offset)
frame.CanvasSize = frame.CanvasSize - UDim2.new(0, 0, 0, framee.Size.Y.Offset)
end
end
-- Stop if the parent is a ScrollingFrame
if currentParent:IsA("ScrollingFrame") then
break
end
-- Move to the next parent
currentParent = currentParent.Parent
end
end
function ParentHandler(p, button)
if not button.Parent:FindFirstChild("CHILDHOLD") then
if hasChildren(p) then
openParent(p, button)
end
else
closeParent(button)
end
end
function openParent(p, button)
local childrenHolder = Instance.new("Frame", button.Parent)
childrenHolder.Name = "CHILDHOLD"
childrenHolder.Size = UDim2.new(1, 0, 0, 0)
childrenHolder.AutomaticSize = Enum.AutomaticSize.Y
createUIList(childrenHolder)
for i, c in p:GetChildren() do
local childbutton = createButton(childrenHolder, c)
childbutton.MouseButton1Click:Connect(function()
ParentHandler(c, childbutton)
end)
--childrenHolder.Size += UDim2.new(0, 0, 0, 20)
end
changeSize(childrenHolder, true)
end
function closeParent(button)
local parent = button.Parent
local CHILDHOLD = parent:FindFirstChild("CHILDHOLD")
changeSize(CHILDHOLD, false)
for _, v in CHILDHOLD:GetChildren() do
v:Destroy()
end
CHILDHOLD:Destroy()
end
for i, c in game:GetChildren() do
local service = createButton(frame, c)
service.Parent.LayoutOrder = 0
if not hasChildren(c) then
service.Parent.LayoutOrder = 10
else
service.MouseButton1Click:Connect(function()
ParentHandler(c, service)
end)
end
frame.CanvasSize = frame.CanvasSize + UDim2.new(0, 0, 0, 20)
end
end
function enableDragging(frame, dragHandle)
local dragging = false
local dragStart, startPos
dragHandle.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
dragging = true
dragStart = input.Position
startPos = frame.Position
end
end)
dragHandle.InputChanged:Connect(function(input)
if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then
local delta = input.Position - dragStart
frame.Position = UDim2.new(
startPos.X.Scale,
startPos.X.Offset + delta.X,
startPos.Y.Scale,
startPos.Y.Offset + delta.Y
)
end
end)
dragHandle.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
dragging = false
end
end)
end
function monitorEvent(thing)
local monitor = Instance.new("Frame", gui)
monitor.Name = "MONITOR"..thing.Name
monitor.Size = UDim2.new(0, 400, 0, 200)
monitor.BackgroundColor3 = Color3.fromRGB(59, 59, 59)
monitor.Position = UDim2.new(0.5, 0, 0.5, 0)
monitor.AnchorPoint = Vector2.new(0.5, 0.5)
createUIList(monitor)
local namelableldrag = Instance.new("TextButton", monitor)
namelableldrag.Size = UDim2.new(1, 0, 0, 50)
namelableldrag.BackgroundColor3 = Color3.fromRGB(49, 49, 49)
namelableldrag.Text = thing.Name
namelableldrag.TextColor3 = Color3.fromRGB(255, 255, 255)
namelableldrag.TextScaled = true
enableDragging(monitor, namelableldrag)
namelableldrag.MouseButton2Up:Connect(function()
monitor:Destroy()
end)
local disp = Instance.new("ScrollingFrame", monitor)
disp.Name = "MONITOR"..thing.Name
disp.Size = UDim2.new(1, 0, 1, 0)
disp.BackgroundColor3 = Color3.fromRGB(59, 59, 59)
disp.Position = UDim2.new(0.5, 0, 0.5, 0)
disp.AnchorPoint = Vector2.new(0.5, 0.5)
createUIList(disp)
thing.OnClientEvent:Connect(function(...)
local args = {...}
local text = ""
for i, v in args do
text = text..tostring(v).." "
end
local label = Instance.new("TextLabel", disp)
label.Size = UDim2.new(1, 0, 0, 20)
label.BackgroundColor3 = Color3.fromRGB(49, 49, 49)
label.Text = text
label.TextColor3 = Color3.fromRGB(255, 255, 255)
label.TextScaled = true
label.TextWrapped = true
disp.CanvasSize += UDim2.new(0, 0, 0, 20)
end)
end
function contextMenu(thing)
local context = Instance.new("Frame", gui)
context.Size = UDim2.new(0, 200, 0, 300)
context.BackgroundColor3 = Color3.fromRGB(59, 59, 59)
context.Position = UDim2.new(0.5, 0, 0.5, 0)
context.AnchorPoint = Vector2.new(0.5, 0.5)
local uilist = createUIList(context)
uilist.VerticalFlex = Enum.UIFlexAlignment.Fill
local namelableldrag = Instance.new("TextButton", context)
namelableldrag.Size = UDim2.new(1, 0, 0, 50)
namelableldrag.BackgroundColor3 = Color3.fromRGB(49, 49, 49)
namelableldrag.Text = thing.Name
namelableldrag.TextColor3 = Color3.fromRGB(255, 255, 255)
namelableldrag.TextScaled = true
enableDragging(context, namelableldrag)
namelableldrag.MouseButton2Up:Connect(function()
context:Destroy()
end)
if thing:IsA("BasePart") then
local poslabel = Instance.new("TextLabel", context)
poslabel.Size = UDim2.new(1, 0, 0, 20)
poslabel.BackgroundColor3 = Color3.fromRGB(49, 49, 49)
poslabel.Text = "Position: "..tostring(thing.Position)
poslabel.TextColor3 = Color3.fromRGB(255, 255, 255)
poslabel.TextScaled = true
local rotlabel = Instance.new("TextLabel", context)
rotlabel.Size = UDim2.new(1, 0, 0, 20)
rotlabel.BackgroundColor3 = Color3.fromRGB(49, 49, 49)
rotlabel.Text = "Rotation: "..tostring(thing.Rotation)
rotlabel.TextColor3 = Color3.fromRGB(255, 255, 255)
rotlabel.TextScaled = true
local sizelabel = Instance.new("TextLabel", context)
sizelabel.Size = UDim2.new(1, 0, 0, 20)
sizelabel.BackgroundColor3 = Color3.fromRGB(49, 49, 49)
sizelabel.Text = "Size: "..tostring(thing.Size)
sizelabel.TextColor3 = Color3.fromRGB(255, 255, 255)
sizelabel.TextScaled = true
local colorlabel = Instance.new("TextLabel", context)
colorlabel.Size = UDim2.new(1, 0, 0, 20)
colorlabel.BackgroundColor3 = thing.Color
colorlabel.Text = tostring(thing.BrickColor)
colorlabel.TextColor3 = Color3.fromRGB(0, 0, 0)
colorlabel.TextStrokeTransparency = 0
colorlabel.TextScaled = true
local tpbutton = Instance.new("TextButton", context)
tpbutton.Size = UDim2.new(1, 0, 0, 20)
tpbutton.BackgroundColor3 = Color3.fromRGB(49, 49, 49)
tpbutton.Text = "Teleport"
tpbutton.TextColor3 = Color3.fromRGB(255, 255, 255)
tpbutton.TextScaled = true
tpbutton.Activated:Connect(function()
local char = game.Players.LocalPlayer.Character
char:MoveTo(thing.Position)
end)
local walktobutton = Instance.new("TextButton", context)
walktobutton.Size = UDim2.new(1, 0, 0, 20)
walktobutton.BackgroundColor3 = Color3.fromRGB(49, 49, 49)
walktobutton.Text = "Walk to"
walktobutton.TextColor3 = Color3.fromRGB(255, 255, 255)
walktobutton.TextScaled = true
walktobutton.Activated:Connect(function()
local char = game.Players.LocalPlayer.Character
local hum = char:FindFirstChildOfClass("Humanoid")
hum:MoveTo(thing.Position)
end)
local hlbutton = Instance.new("TextButton", context)
hlbutton.Size = UDim2.new(1, 0, 0, 20)
hlbutton.BackgroundColor3 = Color3.fromRGB(49, 49, 49)
hlbutton.Text = "Highlight"
hlbutton.TextColor3 = Color3.fromRGB(255, 255, 255)
hlbutton.TextScaled = true
hlbutton.Activated:Connect(function()
Instance.new("Highlight", thing)
end)
elseif thing:IsA("RemoteEvent") then
local argsbox = Instance.new("TextBox", context)
argsbox.Size = UDim2.new(1, 0, 0, 20)
argsbox.BackgroundColor3 = Color3.fromRGB(49, 49, 49)
argsbox.Text = ""
argsbox.PlaceholderText = "Put arguments in here arg1, arg2, ..."
argsbox.TextColor3 = Color3.fromRGB(255, 255, 255)
argsbox.TextScaled = true
local firebutton = Instance.new("TextButton", context)
firebutton.Size = UDim2.new(1, 0, 0, 20)
firebutton.BackgroundColor3 = Color3.fromRGB(49, 49, 49)
firebutton.Text = "Fire event"
firebutton.TextColor3 = Color3.fromRGB(255, 255, 255)
firebutton.TextScaled = true
firebutton.Activated:Connect(function()
local argsText = argsbox.Text
local args = {}
for arg in string.gmatch(argsText, "[^,]+") do
table.insert(args, arg:match("^%s*(.-)%s*$"))
end
thing:FireServer(unpack(args))
end)
local monitorbutton = Instance.new("TextButton", context)
monitorbutton.Size = UDim2.new(1, 0, 0, 20)
monitorbutton.BackgroundColor3 = Color3.fromRGB(49, 49, 49)
monitorbutton.Text = "Monitor event"
monitorbutton.TextColor3 = Color3.fromRGB(255, 255, 255)
monitorbutton.TextScaled = true
monitorbutton.Activated:Connect(function()
monitorEvent(thing)
end)
elseif thing:IsA("ValueBase") then
local valuelabel = Instance.new("TextLabel", context)
valuelabel.Size = UDim2.new(1, 0, 0, 20)
valuelabel.BackgroundColor3 = Color3.fromRGB(49, 49, 49)
valuelabel.Text = tostring(thing.Value)
valuelabel.TextColor3 = Color3.fromRGB(255, 255, 255)
valuelabel.TextStrokeTransparency = 0
valuelabel.TextScaled = true
elseif thing:IsA("Model") then
local primarylabel = Instance.new("TextLabel", context)
primarylabel.Size = UDim2.new(1, 0, 0, 20)
primarylabel.BackgroundColor3 = Color3.fromRGB(49, 49, 49)
primarylabel.Text = tostring(thing.PrimaryPart)
primarylabel.TextColor3 = Color3.fromRGB(255, 255, 255)
primarylabel.TextStrokeTransparency = 0
primarylabel.TextScaled = true
end
end
createExplorer()