Simple Game Explorer.lua
if game.CoreGui:findFirstChild("Explorer") then
  game.CoreGui:findFirstChild("Explorer"):remove();
end

local TextProperties = {"BorderSizePixel", "BackgroundTransparency", "Gravity", "ClassName", "Name", "Value", "Text", "Reflectance", "Transparency", "Heat", "TeamName", "WalkSpeed", "Health", "MaxHealth", "Size", "Position", "AccountAge", "RobloxLocked", "TeamColor", "userId", "Brightness", "Ambient", "TimeOfDay", "FieldOfView", "CameraType", "LinkedSource"}
local BoolProperties = {"Anchored", "CanCollide", "Disabled", "Jump", "Sit", "Visible", "Enabled", "Locked", "FilteringEnabled", "StreamingEnabled", "GlobalShadows"}
local BrickColorProperties = {"BrickColor", "BackgroundColor3", "BorderColor3", "Color", "TeamColor", "Texture", "Value"}

local ScreenGui = Instance.new("ScreenGui", game.CoreGui)
ScreenGui.Name = 'Explorer'
local Button = Instance.new("TextButton")
Button.Parent = ScreenGui
Button.Size = UDim2.new(0,100,0,20)
Button.Position = UDim2.new(0,30,0,440)
Button.Text = 'Open Explorer'
Button.BackgroundTransparency = 0.3
Button.TextColor3 = Color3.new(255/255,255/255,255/255)
Button.BackgroundColor3 = Color3.new(85/255,170/255,255/255)
Button.Font = Enum.Font.SciFi
Button.FontSize = Enum.FontSize.Size14;
Button.BorderSizePixel = 0



local Cloned
local Deleted
local DeleteParent
local Player
local Search
local ScriptSearch
local Gui
local Cloned = nil
local Deleted = nil
local DeleteParent = nil
local Current = 0
local CurrentOption = 0

function Clear()
  if Gui then
      Gui:Remove()
  end
  Current = 0
  CurrentOption = 0
end

function AddButton(N, Function, Color, Copy)
  if not N then
      error("RenderButton - No Name Specified")
  end
  if not Function then
      error("RenderButton - No Function Specified")
  end
  if not Color then
      Color = Color3.new(1, 1, 1)
  end
  if Copy == nil then
      Copy = true
  end
  P = Instance.new("TextButton")
  if Copy then
      P.Size = UDim2.new(0, 110, 0, 20)
  else
      P.Size = UDim2.new(0, 130, 0, 20)
  end
  P.Text = N.Name
  P.Name = N.Name
  P.Parent = Gui
  P.BackgroundColor3 = Color3.new(85/255,170/255,255/255)
  P.BorderColor3 = Color3.new(85/255,170/255,255/255)
  P.BorderSizePixel = 0
  P.TextColor3 = Color3.new(1,1,1)
  P.Font = Enum.Font.SciFi
  P.FontSize = Enum.FontSize.Size14;
  P.BackgroundTransparency = 0.5
  P.Position = UDim2.new(0, ((math.modf(Current/30))*150)+300, 0, 50+(20*((Current%30)-1)))
  P.MouseButton1Click:connect(function()
      Function(P)
  end)
  local D = Instance.new("TextButton")
  D.Size = UDim2.new(0, 20, 0, 20)
  D.Text = "X"
  D.Name = N.Name
  D.Parent = Gui
  D.BackgroundColor3 = Color3.new(1,0,0)
  D.BorderColor3 = Color3.new(1,0,0)
  D.BorderSizePixel = 0
  D.TextColor3 = Color3.new(1,1,1)
  D.Font = Enum.Font.SciFi
  D.FontSize = Enum.FontSize.Size14;
  D.BackgroundTransparency = 0.5
  D.Position = UDim2.new(0, ((math.modf(Current/30))*150)+300+130, 0, 50+(20*((Current%30)-1)))
  D.MouseButton1Click:connect(function()
      Deleted = N
      DeleteParent = N.Parent
      N.Parent = nil
      Clear()
      Search(DeleteParent)
  end)
  if Copy then
      local C = Instance.new("TextButton")
      C.Size = UDim2.new(0, 20, 0, 20)
      C.Text = "C"
      C.Name = N.Name
      C.Parent = Gui
      C.BackgroundColor3 = Color3.new(85/255,170/255,255/255)
      C.BorderColor3 = Color3.new(85/255,170/255,255/255)
  C.BorderSizePixel = 0
      C.TextColor3 = Color3.new(1,1,1)
      C.Font = Enum.Font.SciFi
    C.FontSize = Enum.FontSize.Size14;
      C.BackgroundTransparency = 0.5
      C.Position = UDim2.new(0, ((math.modf(Current/30))*150)+300+110, 0, 50+(20*((Current%30)-1)))
      C.MouseButton1Click:connect(function()
          Cloned = N
          Clear()
          Search(N.Parent)
      end)
  end
  Current = Current + 1
  return P
end
  
function AddOption(N, Function, Color, Text)
  Color = nil;
  if not N then
      N = "No Name Specified";
  end
  if Text == nil then
      Text = false
  end
  if Text then
      P = Instance.new("TextBox")
  else
      P = Instance.new("TextButton")
  end
  P.Text = N
  P.Name = N
  P.Parent = Gui
  P.BackgroundColor3 = Color3.new(85/255,170/255,255/255)
  P.BorderColor3 = Color3.new(85/255,170/255,255/255)
  P.TextColor3 = Color3.new(1,1,1)
  P.BorderSizePixel = 0
  P.Font = Enum.Font.SciFi
  P.FontSize = Enum.FontSize.Size14;
  P.BackgroundTransparency = 0.5
  P.Size = UDim2.new(0, 150, 0, 20)
  P.Position = UDim2.new(0, ((math.modf(CurrentOption/30))*150)+150, 0, 50+(20*((CurrentOption%30)-1)))
  if not Text and Function then
      P.MouseButton1Click:connect(function() Function(P) end)
  end
  CurrentOption = CurrentOption + 1
  return P
end

function AddTextOption(Obj, Prop)
  local Ob = Obj
  local Pro = Prop
  if type(Ob[Pro]) == "number" or type(Ob[Pro]) == "string" then
      CurrentOption = CurrentOption + 1
      local T = AddOption(Ob[Pro], nil, Color3.new(0.1, 0.4, 0.1), true)
      CurrentOption = CurrentOption - 2
      local O = AddOption("Change "..Pro..":", function() Ob[Pro] = T.Text end, Color3.new(0.1, 0.8, 0.1), false)
      CurrentOption = CurrentOption + 1
  end
end

function AddBrickColorOption(Obj, Prop)
  local Ob = Obj
  local Pro = Prop
  if BrickColor.new(tostring(Ob[Pro])) == Ob[Pro] then
      CurrentOption = CurrentOption + 1
      local T = AddOption(tostring(Ob[Pro]), nil, Color3.new(0.1, 0.4, 0.1), true)
      CurrentOption = CurrentOption - 2
      local O = AddOption("Change "..Pro..":", function() Ob[Pro] = BrickColor.new(T.Text) end, Color3.new(0.1, 0.8, 0.1), false)
      CurrentOption = CurrentOption + 1
  end
end

function AddBoolOption(Obj, Prop)
  local Ob = Obj
  local Pro = Prop
  if type(Ob[Pro]) == "boolean" then
      local O = AddOption(Pro..": "..tostring(Ob[Pro]), nil, Color3.new(0.1, 0.8, 0.1), false)
      O.MouseButton1Click:connect(function()
          if Ob[Pro] then
              Ob[Pro] = false
              O.Text = Pro..": false"
          else
              Ob[Pro] = true
              O.Text = Pro..": true"
          end
      end)
  end
end

function TestProperty(Obj, Property)
  Success = pcall(function()
      if Obj[Property] then
          return
      end
  end)
  return Success
end

function LoadOptions(Object)
  for Num, Prop in pairs(TextProperties) do
      if TestProperty(Object, Prop) then
          AddTextOption(Object, Prop)
      end
  end
  for Num, Prop in pairs(BoolProperties) do
      if TestProperty(Object, Prop) then
          AddBoolOption(Object, Prop)
      end
  end
  for Num, Prop in pairs(BrickColorProperties) do
      if TestProperty(Object, Prop) then
          AddBrickColorOption(Object, Prop)
      end
  end
end

function Search(Object)
  Gui = Instance.new("ScreenGui")
  Gui.Parent = game.CoreGui
  Gui.Name = "Explorer"
  if Object ~= game then
      AddOption("Back", function()
          Clear();
          Search(Object.Parent)
      end, Color3.new(0.5, 1, 1), false)
  end
  AddOption("Reload", function() Clear(); Search(Object); end, Color3.new(0.2, 1, 0.2), false)
  if Cloned then
      AddOption("Paste", function() Cloned:Clone().Parent = Object; Clear(); Search(Object); end, Color3.new(0.5, 1, 1), false)
  end
  if Deleted then
      AddOption("Undo", function() Deleted.Parent = DeleteParent; Deleted = nil; DeletedParent = nil; Clear(); Search(Object); end, Color3.new(1, 0.6, 0.1), false)
  end
  if Object:IsA("Player") then
AddOption("Kill Player", function() if Object.Character:FindFirstChild('Humanoid') then Object.Character.Humanoid.Health = 0; end end)   
   AddOption("Goto  Character", function() Clear(); if Object.Character then Search(Object.Character); end end, Color3.new(1, 1, 1), false)
  end
  if Object:IsA("Terrain") then
      AddOption("Clear", function() Object:Clear(); end, Color3.new(1, 1, 1), false)
  end
  LoadOptions(Object)
  AddOption("Close", Clear, Color3.new(1, 0.2, 0), false)
  if not Object:IsA("Workspace") or not Object:IsA("Player") then
      for Num, Obj in pairs(Object:GetChildren()) do
          if true then
              if Obj:IsA("LocalScript") then
                  AddButton(Obj, function() Clear(); Search(Obj); end, Color3.new(1, 0, 0), true)
              elseif Obj:IsA("Script") or Obj:IsA("StarterScript") or Obj:IsA("CoreScript") then
                  AddButton(Obj, function() Clear(); Search(Obj); end, Color3.new(0.5, 0.5, 0.8), true)
              elseif Obj.Parent == game then
                  AddButton(Obj, function() Clear(); Search(Obj); end, Color3.new(1, 1, 1), false)
              else
                  AddButton(Obj, function() Clear(); Search(Obj); end, Color3.new(1, 1, 1), true)
              end
          end
      end
  end
  local function MoveUp(Place, Amount)
      for i,v in pairs(Place:GetChildren()) do
          if v:IsA("TextLabel") or v:IsA("TextBox") then
              v.Position = v.Position + UDim2.new(0,0,0,-Amount)
          end
      end
  end
  local function MoveDown(Place, Amount)
      for i,v in pairs(Place:GetChildren()) do
          if v:IsA("TextLabel") or v:IsA("TextBox") then
              v.Position = v.Position + UDim2.new(0,0,0,Amount)
          end
      end
  end
  i=0;
end

Button.MouseButton1Click:connect(function()
  Clear()
  Search(game)
end)