Hotel Elephant
local main = Instance.new("ScreenGui") local top = Instance.new("Frame") local back = Instance.new("Frame") local ScrollingFrame = Instance.new("ScrollingFrame") local bald = Instance.new("TextButton") local ragdoll = Instance.new("TextButton") local kill = Instance.new("TextButton") local naked = Instance.new("TextButton") local goto = Instance.new("TextButton") local rtools = Instance.new("TextButton") local box = Instance.new("TextButton") local sink = Instance.new("TextButton") local ban = Instance.new("TextButton") local explorer = Instance.new("TextButton") local slock = Instance.new("TextButton") local UIGridLayout = Instance.new("UIGridLayout") local kick = Instance.new("TextButton") local blockhead = Instance.new("TextButton") local stools = Instance.new("TextButton") local noface = Instance.new("TextButton") local punish = Instance.new("TextButton") local pantsless = Instance.new("TextButton") local shirtless = Instance.new("TextButton") local tshirtless = Instance.new("TextButton") local noregen = Instance.new("TextButton") local stopanim = Instance.new("TextButton") local blockchar = Instance.new("TextButton") local nolimbs = Instance.new("TextButton") local nola = Instance.new("TextButton") local noll = Instance.new("TextButton") local nora = Instance.new("TextButton") local norl = Instance.new("TextButton") local nowaist = Instance.new("TextButton") local noroot = Instance.new("TextButton") local top_2 = Instance.new("TextLabel") local credits = Instance.new("TextLabel") local queue = Instance.new("TextLabel") local target = Instance.new("TextBox") local Players = game:GetService("Players") function splitString(str,delim) local broken = {} if delim == nil then delim = "," end for w in string.gmatch(str,"[^"..delim.."]+") do table.insert(broken,w) end return broken end function toTokens(str) local tokens = {} for op,name in string.gmatch(str,"([+-])([^+-]+)") do table.insert(tokens,{Operator = op,Name = name}) end return tokens end function getRoot(char) local rootPart = char:FindFirstChild('HumanoidRootPart') or char:FindFirstChild('Torso') or char:FindFirstChild('UpperTorso') return rootPart end local WTS = function(Object) local ObjectVector = workspace.CurrentCamera:WorldToScreenPoint(Object.Position) return Vector2.new(ObjectVector.X, ObjectVector.Y) end local mouse = Players.LocalPlayer:GetMouse() local MousePositionToVector2 = function() return Vector2.new(mouse.X, mouse.Y) end local GetClosestPlayerFromCursor = function() local found = nil local ClosestDistance = math.huge for i, v in pairs(Players:GetPlayers()) do if v ~= Players.LocalPlayer and v.Character and v.Character:FindFirstChildOfClass("Humanoid") then for k, x in pairs(v.Character:GetChildren()) do if string.find(x.Name, "Torso") then local Distance = (WTS(x) - MousePositionToVector2()).Magnitude if Distance < ClosestDistance then ClosestDistance = Distance found = v end end end end end return found end local SpecialPlayerCases = { ["all"] = function(speaker) return Players:GetPlayers() end, ["others"] = function(speaker) local plrs = {} for i,v in pairs(Players:GetPlayers()) do if v ~= speaker then table.insert(plrs,v) end end return plrs end, ["me"] = function(speaker)return {speaker} end, ["#(%d+)"] = function(speaker,args,currentList) local returns = {} local randAmount = tonumber(args[1]) local players = {unpack(currentList)} for i = 1,randAmount do if #players == 0 then break end local randIndex = math.random(1,#players) table.insert(returns,players[randIndex]) table.remove(players,randIndex) end return returns end, ["random"] = function(speaker,args,currentList) local players = Players:GetPlayers() local localplayer = Players.LocalPlayer table.remove(players, table.find(players, localplayer)) return {players[math.random(1,#players)]} end, ["%%(.+)"] = function(speaker,args) local returns = {} local team = args[1] for _,plr in pairs(Players:GetPlayers()) do if plr.Team and string.sub(string.lower(plr.Team.Name),1,#team) == string.lower(team) then table.insert(returns,plr) end end return returns end, ["allies"] = function(speaker) local returns = {} local team = speaker.Team for _,plr in pairs(Players:GetPlayers()) do if plr.Team == team then table.insert(returns,plr) end end return returns end, ["enemies"] = function(speaker) local returns = {} local team = speaker.Team for _,plr in pairs(Players:GetPlayers()) do if plr.Team ~= team then table.insert(returns,plr) end end return returns end, ["team"] = function(speaker) local returns = {} local team = speaker.Team for _,plr in pairs(Players:GetPlayers()) do if plr.Team == team then table.insert(returns,plr) end end return returns end, ["nonteam"] = function(speaker) local returns = {} local team = speaker.Team for _,plr in pairs(Players:GetPlayers()) do if plr.Team ~= team then table.insert(returns,plr) end end return returns end, ["friends"] = function(speaker,args) local returns = {} for _,plr in pairs(Players:GetPlayers()) do if plr:IsFriendsWith(speaker.UserId) and plr ~= speaker then table.insert(returns,plr) end end return returns end, ["nonfriends"] = function(speaker,args) local returns = {} for _,plr in pairs(Players:GetPlayers()) do if not plr:IsFriendsWith(speaker.UserId) and plr ~= speaker then table.insert(returns,plr) end end return returns end, ["guests"] = function(speaker,args) local returns = {} for _,plr in pairs(Players:GetPlayers()) do if plr.Guest then table.insert(returns,plr) end end return returns end, ["bacons"] = function(speaker,args) local returns = {} for _,plr in pairs(Players:GetPlayers()) do if plr.Character:FindFirstChild('Pal Hair') or plr.Character:FindFirstChild('Kate Hair') then table.insert(returns,plr) end end return returns end, ["age(%d+)"] = function(speaker,args) local returns = {} local age = tonumber(args[1]) if not age == nil then return end for _,plr in pairs(Players:GetPlayers()) do if plr.AccountAge <= age then table.insert(returns,plr) end end return returns end, ["nearest"] = function(speaker,args,currentList) local speakerChar = speaker.Character if not speakerChar or not getRoot(speakerChar) then return end local lowest = math.huge local NearestPlayer = nil for _,plr in pairs(currentList) do if plr ~= speaker and plr.Character then local distance = plr:DistanceFromCharacter(getRoot(speakerChar).Position) if distance highest then highest = distance Farthest = {plr} end end end return Farthest end, ["group(%d+)"] = function(speaker,args) local returns = {} local groupID = tonumber(args[1]) for _,plr in pairs(Players:GetPlayers()) do if plr:IsInGroup(groupID) then table.insert(returns,plr) end end return returns end, ["alive"] = function(speaker,args) local returns = {} for _,plr in pairs(Players:GetPlayers()) do if plr.Character and plr.Character:FindFirstChildOfClass("Humanoid") and plr.Character:FindFirstChildOfClass("Humanoid").Health > 0 then table.insert(returns,plr) end end return returns end, ["dead"] = function(speaker,args) local returns = {} for _,plr in pairs(Players:GetPlayers()) do if (not plr.Character or not plr.Character:FindFirstChildOfClass("Humanoid")) or plr.Character:FindFirstChildOfClass("Humanoid").Health <= 0 then table.insert(returns,plr) end end return returns end, ["rad(%d+)"] = function(speaker,args) local returns = {} local radius = tonumber(args[1]) local speakerChar = speaker.Character if not speakerChar or not getRoot(speakerChar) then return end for _,plr in pairs(Players:GetPlayers()) do if plr.Character and getRoot(plr.Character) then local magnitude = (getRoot(plr.Character).Position-getRoot(speakerChar).Position).magnitude if magnitude 0 then foundCase = true initialPlayers = onlyIncludeInTable(initialPlayers,case(speaker,matches,initialPlayers)) end end if not foundCase then initialPlayers = onlyIncludeInTable(initialPlayers,getPlayersByName(tokenContent)) end else local tokenContent = v.Name local foundCase = false for regex,case in pairs(SpecialPlayerCases) do local matches = {string.match(tokenContent,"^"..regex.."$")} if #matches > 0 then foundCase = true initialPlayers = removeTableMatches(initialPlayers,case(speaker,matches,initialPlayers)) end end if not foundCase then initialPlayers = removeTableMatches(initialPlayers,getPlayersByName(tokenContent)) end end end for i,v in pairs(initialPlayers) do table.insert(foundList,v) end end local foundNames = {} for i,v in pairs(foundList) do table.insert(foundNames,v.Name) end return foundNames end function Destroy(instance) spawn(function() game:GetService("ReplicatedStorage").GuiHandler:FireServer(false, instance) end) end main.Name = "main" main.Parent = game:GetService("CoreGui") top.Name = "top" top.Parent = main top.Active = true top.BackgroundColor3 = Color3.fromRGB(447, 47, 200) top.BackgroundTransparency = 0.300 top.BorderColor3 = Color3.fromRGB(29, 29, 29) top.Draggable = true top.Position = UDim2.new(0.612145662, 102, 0.311965823, -29) top.Size = UDim2.new(0, 291, 0, 30) back.Name = "back" back.Parent = top back.BackgroundColor3 = Color3.fromRGB(47, 47, 200) back.BackgroundTransparency = 0.300 back.BorderColor3 = Color3.fromRGB(29, 29, 29) back.BorderSizePixel = 0 back.Position = UDim2.new(-0.00343642617, 0, 1, 0) back.Size = UDim2.new(0, 293, 0, 293) ScrollingFrame.Parent = back ScrollingFrame.Active = true ScrollingFrame.BackgroundColor3 = Color3.fromRGB(255, 255, 255) ScrollingFrame.BackgroundTransparency = 1.000 ScrollingFrame.BorderSizePixel = 0 ScrollingFrame.LayoutOrder = 999999999 ScrollingFrame.Position = UDim2.new(0.0341299027, 0, 0.0784982964, 0) ScrollingFrame.Size = UDim2.new(0, 282, 0, 208) ScrollingFrame.CanvasSize = UDim2.new(0, 0, 0, 825) bald.Name = "bald" bald.Parent = ScrollingFrame bald.BackgroundColor3 = Color3.fromRGB(172, 172, 172) bald.BackgroundTransparency = 0.500 bald.BorderSizePixel = 0 bald.Size = UDim2.new(0, 131, 0, 40) bald.Font = Enum.Font.SourceSansLight bald.Text = "Bald" bald.TextColor3 = Color3.fromRGB(255, 255, 255) bald.TextSize = 23.000 bald.MouseButton1Click:connect(function() local players = getPlayer(target.Text, Players.LocalPlayer) for i, v in pairs(players) do for i, v in pairs(Players[v].Character:GetChildren()) do if v:IsA("Accessory") then Destroy(v) end end end end) ragdoll.Name = "ragdoll" ragdoll.Parent = ScrollingFrame ragdoll.BackgroundColor3 = Color3.fromRGB(172, 172, 172) ragdoll.BackgroundTransparency = 0.500 ragdoll.BorderSizePixel = 0 ragdoll.Position = UDim2.new(0.079136692, 0, -0.00990098994, 0) ragdoll.Size = UDim2.new(0, 131, 0, 40) ragdoll.Font = Enum.Font.SourceSansLight ragdoll.Text = "Ragdoll" ragdoll.TextColor3 = Color3.fromRGB(255, 255, 255) ragdoll.TextSize = 23.000 ragdoll.MouseButton1Click:connect(function() local players = getPlayer(target.Text, Players.LocalPlayer) for i, v in pairs(players) do Destroy(Players[v].Character:FindFirstChildOfClass("Humanoid")) end end) kill.Name = "kill" kill.Parent = ScrollingFrame kill.BackgroundColor3 = Color3.fromRGB(172, 172, 172) kill.BackgroundTransparency = 0.500 kill.BorderSizePixel = 0 kill.Position = UDim2.new(0.079136692, 0, -0.00990098994, 0) kill.Size = UDim2.new(0, 131, 0, 40) kill.Font = Enum.Font.SourceSansLight kill.Text = "Kill" kill.TextColor3 = Color3.fromRGB(255, 255, 255) kill.TextSize = 23.000 kill.MouseButton1Click:connect(function() local players = getPlayer(target.Text, Players.LocalPlayer) for i, v in pairs(players) do if Players[v].Character:FindFirstChildOfClass("Humanoid").RigType == Enum.HumanoidRigType.R6 then Destroy(Players[v].Character.Torso.Neck) else Destroy(Players[v].Character.Head.Neck) end end end) naked.Name = "naked" naked.Parent = ScrollingFrame naked.BackgroundColor3 = Color3.fromRGB(172, 172, 172) naked.BackgroundTransparency = 0.500 naked.BorderSizePixel = 0 naked.Position = UDim2.new(0.079136692, 0, -0.00990098994, 0) naked.Size = UDim2.new(0, 131, 0, 40) naked.Font = Enum.Font.SourceSansLight naked.Text = "Naked" naked.TextColor3 = Color3.fromRGB(255, 255, 255) naked.TextSize = 23.000 naked.MouseButton1Click:connect(function() local players = getPlayer(target.Text, Players.LocalPlayer) for i, v in pairs(players) do Destroy(Players[v].Character:FindFirstChildOfClass("Pants")) Destroy(Players[v].Character:FindFirstChildOfClass("Shirt")) Destroy(Players[v].Character:FindFirstChildOfClass("ShirtGraphic")) end end) goto.Name = "goto" goto.Parent = ScrollingFrame goto.BackgroundColor3 = Color3.fromRGB(172, 172, 172) goto.BackgroundTransparency = 0.500 goto.BorderSizePixel = 0 goto.Position = UDim2.new(0.079136692, 0, -0.00990098994, 0) goto.Size = UDim2.new(0, 131, 0, 40) goto.Font = Enum.Font.SourceSansLight goto.Text = "Goto" goto.TextColor3 = Color3.fromRGB(255, 255, 255) goto.TextSize = 23.000 goto.MouseButton1Click:connect(function() local players = getPlayer(target.Text, Players.LocalPlayer) for i, v in pairs(players) do if Players[v].Character ~= nil then if Players.LocalPlayer.Character:FindFirstChildOfClass('Humanoid') and Players.LocalPlayer.Character:FindFirstChildOfClass('Humanoid').SeatPart then Players.LocalPlayer.Character:FindFirstChildOfClass('Humanoid').Sit = false wait(.1) end getRoot(Players.LocalPlayer.Character).CFrame = getRoot(Players[v].Character).CFrame + Vector3.new(3,1,0) end end end) rtools.Name = "rtools" rtools.Parent = ScrollingFrame rtools.BackgroundColor3 = Color3.fromRGB(172, 172, 172) rtools.BackgroundTransparency = 0.500 rtools.BorderSizePixel = 0 rtools.Position = UDim2.new(0.079136692, 0, -0.00990098994, 0) rtools.Size = UDim2.new(0, 131, 0, 40) rtools.Font = Enum.Font.SourceSansLight rtools.Text = "Rtools" rtools.TextColor3 = Color3.fromRGB(255, 255, 255) rtools.TextSize = 23.000 rtools.MouseButton1Click:connect(function() local players = getPlayer(target.Text) for i, v in pairs(players) do for i, v in pairs(Players[v]:FindFirstChildOfClass("Backpack"):GetChildren()) do Destroy(v) end end end) box.Name = "box" box.Parent = ScrollingFrame box.BackgroundColor3 = Color3.fromRGB(172, 172, 172) box.BackgroundTransparency = 0.500 box.BorderSizePixel = 0 box.Position = UDim2.new(0.079136692, 0, -0.00990098994, 0) box.Size = UDim2.new(0, 131, 0, 40) box.Font = Enum.Font.SourceSansLight box.Text = "Box" box.TextColor3 = Color3.fromRGB(255, 255, 255) box.TextSize = 23.000 box.MouseButton1Click:connect(function() local players = getPlayer(target.Text, Players.LocalPlayer) for i, v in pairs(players) do for i, v in pairs(Players[v].Character:GetChildren()) do if v:IsA("Accessory") then Destroy(v) end end for i, v in pairs(Players[v].Character:GetChildren()) do if v:IsA("CharacterMesh") then Destroy(v) end end Destroy(Players[v].Character:FindFirstChildOfClass("Pants")) Destroy(Players[v].Character:FindFirstChildOfClass("Shirt")) Destroy(Players[v].Character:FindFirstChildOfClass("ShirtGraphic")) Destroy(Players[v].Character["Left Arm"]) Destroy(Players[v].Character["Left Leg"]) Destroy(Players[v].Character["Right Arm"]) Destroy(Players[v].Character["Right Leg"]) Destroy(Players[v].Character.Head:FindFirstChildOfClass("SpecialMesh")) Destroy(Players[v].Character.Head:FindFirstChildOfClass("Decal")) end end) sink.Name = "sink" sink.Parent = ScrollingFrame sink.BackgroundColor3 = Color3.fromRGB(172, 172, 172) sink.BackgroundTransparency = 0.500 sink.BorderSizePixel = 0 sink.Position = UDim2.new(0.079136692, 0, -0.00990098994, 0) sink.Size = UDim2.new(0, 131, 0, 40) sink.Font = Enum.Font.SourceSansLight sink.Text = "Sink" sink.TextColor3 = Color3.fromRGB(255, 255, 255) sink.TextSize = 23.000 sink.MouseButton1Click:connect(function() local players = getPlayer(target.Text, Players.LocalPlayer) for i, v in pairs(players) do Destroy(Players[v].Character.HumanoidRootPart) end end) function FindInTable(tbl,val) if tbl == nil then return false end for _,v in pairs(tbl) do if v == val then return true end end return false end local slockk = false local banned = {} Players.PlayerAdded:connect(function(plr) if slockk then Destroy(plr) end if FindInTable(banned, plr.UserId) then Destroy(plr) end end) ban.Name = "ban" ban.Parent = ScrollingFrame ban.BackgroundColor3 = Color3.fromRGB(172, 172, 172) ban.BackgroundTransparency = 0.500 ban.BorderSizePixel = 0 ban.Position = UDim2.new(0.079136692, 0, -0.00990098994, 0) ban.Size = UDim2.new(0, 131, 0, 40) ban.Font = Enum.Font.SourceSansLight ban.Text = "Ban" ban.TextColor3 = Color3.fromRGB(255, 255, 255) ban.TextSize = 23.000 ban.MouseButton1Click:connect(function() local players = getPlayer(target.Text, Players.LocalPlayer) for i, v in pairs(players) do table.insert(banned, Players[v].UserId) Destroy(Players[v]) end end) explorer.Name = "explorer" explorer.Parent = ScrollingFrame explorer.BackgroundColor3 = Color3.fromRGB(172, 172, 172) explorer.BackgroundTransparency = 0.500 explorer.BorderSizePixel = 0 explorer.Position = UDim2.new(0.079136692, 0, -0.00990098994, 0) explorer.Size = UDim2.new(0, 131, 0, 40) explorer.Font = Enum.Font.SourceSansLight explorer.Text = "Explorer" explorer.TextColor3 = Color3.fromRGB(255, 255, 255) explorer.TextSize = 23.000 explorer.MouseButton1Click:connect(function() CreateGui = function() local NewGuiPart1 = Instance.new("ScreenGui") local NewGuiPart2 = Instance.new("Frame") local NewGuiPart3 = Instance.new("Frame") local NewGuiPart4 = Instance.new("TextLabel") local NewGuiPart5 = Instance.new("TextBox") local NewGuiPart6 = Instance.new("Frame") local NewGuiPart7 = Instance.new("Frame") local NewGuiPart8 = Instance.new("TextButton") local NewGuiPart9 = Instance.new("TextLabel") local NewGuiPart10 = Instance.new("TextLabel") local NewGuiPart11 = Instance.new("ImageLabel") local NewGuiPart12 = Instance.new("Frame") local NewGuiPart13 = Instance.new("Frame") local NewGuiPart14 = Instance.new("Frame") local NewGuiPart15 = Instance.new("TextButton") local NewGuiPart16 = Instance.new("ImageLabel") local NewGuiPart17 = Instance.new("TextButton") local NewGuiPart18 = Instance.new("ImageLabel") local NewGuiPart19 = Instance.new("TextButton") local NewGuiPart20 = Instance.new("ImageLabel") local NewGuiPart21 = Instance.new("TextButton") local NewGuiPart22 = Instance.new("ImageLabel") local NewGuiPart23 = Instance.new("TextButton") local NewGuiPart24 = Instance.new("ImageLabel") local NewGuiPart25 = Instance.new("TextButton") local NewGuiPart26 = Instance.new("ImageLabel") local NewGuiPart27 = Instance.new("TextButton") local NewGuiPart28 = Instance.new("Frame") local NewGuiPart29 = Instance.new("Frame") local NewGuiPart30 = Instance.new("TextLabel") local NewGuiPart31 = Instance.new("Frame") local NewGuiPart32 = Instance.new("TextLabel") local NewGuiPart33 = Instance.new("TextLabel") local NewGuiPart34 = Instance.new("TextButton") local NewGuiPart35 = Instance.new("TextLabel") local NewGuiPart36 = Instance.new("TextLabel") local NewGuiPart37 = Instance.new("Frame") local NewGuiPart38 = Instance.new("Frame") local NewGuiPart39 = Instance.new("TextLabel") local NewGuiPart40 = Instance.new("Frame") local NewGuiPart41 = Instance.new("TextButton") local NewGuiPart42 = Instance.new("TextLabel") local NewGuiPart43 = Instance.new("TextButton") local NewGuiPart44 = Instance.new("TextBox") local NewGuiPart45 = Instance.new("TextButton") local NewGuiPart46 = Instance.new("TextLabel") local NewGuiPart47 = Instance.new("TextLabel") local NewGuiPart48 = Instance.new("Frame") local NewGuiPart49 = Instance.new("TextLabel") local NewGuiPart50 = Instance.new("Frame") local NewGuiPart51 = Instance.new("TextButton") local NewGuiPart52 = Instance.new("TextLabel") local NewGuiPart53 = Instance.new("TextButton") local NewGuiPart54 = Instance.new("Frame") local NewGuiPart55 = Instance.new("TextLabel") local NewGuiPart56 = Instance.new("Frame") local NewGuiPart57 = Instance.new("TextLabel") local NewGuiPart58 = Instance.new("TextButton") local NewGuiPart59 = Instance.new("Frame") local NewGuiPart60 = Instance.new("TextLabel") local NewGuiPart61 = Instance.new("Frame") local NewGuiPart62 = Instance.new("TextLabel") local NewGuiPart63 = Instance.new("ScrollingFrame") local NewGuiPart64 = Instance.new("TextButton") local NewGuiPart65 = Instance.new("TextLabel") local NewGuiPart66 = Instance.new("TextLabel") local NewGuiPart67 = Instance.new("TextButton") local NewGuiPart68 = Instance.new("TextButton") local NewGuiPart69 = Instance.new("Frame") local NewGuiPart70 = Instance.new("TextButton") local NewGuiPart71 = Instance.new("TextBox") local NewGuiPart72 = Instance.new("TextButton") local NewGuiPart73 = Instance.new("TextButton") local NewGuiPart74 = Instance.new("Frame") local NewGuiPart75 = Instance.new("Frame") local NewGuiPart76 = Instance.new("TextButton") local NewGuiPart77 = Instance.new("ScrollingFrame") local NewGuiPart78 = Instance.new("Frame") local NewGuiPart79 = Instance.new("TextLabel") local NewGuiPart80 = Instance.new("TextLabel") local NewGuiPart81 = Instance.new("TextLabel") local NewGuiPart82 = Instance.new("Frame") local NewGuiPart83 = Instance.new("TextLabel") local NewGuiPart84 = Instance.new("Frame") local NewGuiPart85 = Instance.new("Frame") local NewGuiPart86 = Instance.new("Frame") local NewGuiPart87 = Instance.new("ImageButton") local NewGuiPart88 = Instance.new("Frame") local NewGuiPart89 = Instance.new("Frame") local NewGuiPart90 = Instance.new("Frame") local NewGuiPart91 = Instance.new("Frame") local NewGuiPart92 = Instance.new("Frame") local NewGuiPart93 = Instance.new("ImageButton") local NewGuiPart94 = Instance.new("Frame") local NewGuiPart95 = Instance.new("Frame") local NewGuiPart96 = Instance.new("Frame") local NewGuiPart97 = Instance.new("Frame") local NewGuiPart98 = Instance.new("Frame") local NewGuiPart99 = Instance.new("TextButton") local NewGuiPart100 = Instance.new("Frame") local NewGuiPart101 = Instance.new("Frame") local NewGuiPart102 = Instance.new("TextButton") local NewGuiPart103 = Instance.new("TextButton") local NewGuiPart104 = Instance.new("TextButton") local NewGuiPart105 = Instance.new("Frame") local NewGuiPart106 = Instance.new("Frame") local NewGuiPart107 = Instance.new("TextLabel") local NewGuiPart108 = Instance.new("TextLabel") local NewGuiPart109 = Instance.new("TextLabel") local NewGuiPart110 = Instance.new("ImageLabel") local NewGuiPart111 = Instance.new("Frame") local NewGuiPart112 = Instance.new("Frame") local NewGuiPart113 = Instance.new("TextLabel") local NewGuiPart114 = Instance.new("Frame") local NewGuiPart115 = Instance.new("Frame") local NewGuiPart116 = Instance.new("TextLabel") local NewGuiPart117 = Instance.new("TextLabel") local NewGuiPart118 = Instance.new("TextButton") local NewGuiPart119 = Instance.new("TextLabel") local NewGuiPart120 = Instance.new("TextLabel") local NewGuiPart121 = Instance.new("Frame") local NewGuiPart122 = Instance.new("TextLabel") local NewGuiPart123 = Instance.new("TextLabel") local NewGuiPart124 = Instance.new("TextButton") local NewGuiPart125 = Instance.new("TextLabel") local NewGuiPart126 = Instance.new("TextLabel") local NewGuiPart127 = Instance.new("Frame") local NewGuiPart128 = Instance.new("TextLabel") local NewGuiPart129 = Instance.new("TextLabel") local NewGuiPart130 = Instance.new("TextButton") local NewGuiPart131 = Instance.new("TextLabel") local NewGuiPart132 = Instance.new("TextLabel") local NewGuiPart133 = Instance.new("Frame") local NewGuiPart134 = Instance.new("TextLabel") local NewGuiPart135 = Instance.new("TextLabel") local NewGuiPart136 = Instance.new("TextButton") local NewGuiPart137 = Instance.new("TextLabel") local NewGuiPart138 = Instance.new("TextLabel") local NewGuiPart139 = Instance.new("TextLabel") local NewGuiPart140 = Instance.new("Frame") local NewGuiPart141 = Instance.new("Frame") local NewGuiPart142 = Instance.new("TextLabel") local NewGuiPart143 = Instance.new("TextButton") local NewGuiPart144 = Instance.new("TextBox") local NewGuiPart145 = Instance.new("Frame") local NewGuiPart146 = Instance.new("TextButton") local NewGuiPart147 = Instance.new("TextLabel") local NewGuiPart148 = Instance.new("TextLabel") local NewGuiPart149 = Instance.new("Frame") local NewGuiPart150 = Instance.new("Frame") local NewGuiPart151 = Instance.new("TextLabel") local NewGuiPart152 = Instance.new("TextLabel") local NewGuiPart153 = Instance.new("BindableFunction") local NewGuiPart154 = Instance.new("BindableFunction") local NewGuiPart155 = Instance.new("BindableFunction") local NewGuiPart156 = Instance.new("BindableFunction") local NewGuiPart157 = Instance.new("BindableEvent") local NewGuiPart158 = Instance.new("BindableFunction") local NewGuiPart159 = Instance.new("BindableFunction") local NewGuiPart160 = Instance.new("BindableEvent") local NewGuiPart161 = Instance.new("BindableFunction") local NewGuiPart162 = Instance.new("BindableFunction") local NewGuiPart163 = Instance.new("BindableEvent") -- Properties NewGuiPart1.Name = "Dex" NewGuiPart2.Name = "PropertiesFrame" NewGuiPart2.Parent = NewGuiPart1 NewGuiPart2.Active = true NewGuiPart2.BackgroundColor3 = Color3.new(1, 1, 1) NewGuiPart2.BackgroundTransparency = 0.10000000149012 NewGuiPart2.BorderColor3 = Color3.new(0.74902, 0.74902, 0.74902) NewGuiPart2.Position = UDim2.new(1, 0, 0.5, 36) NewGuiPart2.Size = UDim2.new(0, 300, 0.5, -36) NewGuiPart158.Name = "GetApi" NewGuiPart158.Parent = NewGuiPart2 NewGuiPart158.Archivable = true NewGuiPart159.Name = "GetAwaiting" NewGuiPart159.Parent = NewGuiPart2 NewGuiPart159.Archivable = true NewGuiPart160.Name = "SetAwaiting" NewGuiPart160.Parent = NewGuiPart2 NewGuiPart160.Archivable = true NewGuiPart3.Name = "Header" NewGuiPart3.Parent = NewGuiPart2 NewGuiPart3.BackgroundColor3 = Color3.new(0.913726, 0.913726, 0.913726) NewGuiPart3.BorderColor3 = Color3.new(0.584314, 0.584314, 0.584314) NewGuiPart3.Position = UDim2.new(0, 0, 0, -36) NewGuiPart3.Size = UDim2.new(1, 0, 0, 35) NewGuiPart4.Parent = NewGuiPart3 NewGuiPart4.BackgroundTransparency = 1 NewGuiPart4.Position = UDim2.new(0, 4, 0, 0) NewGuiPart4.Size = UDim2.new(1, -4, 0.5, 0) NewGuiPart4.Font = Enum.Font.SourceSans NewGuiPart4.FontSize = Enum.FontSize.Size14 NewGuiPart4.Text = "Properties" NewGuiPart4.TextColor3 = Color3.new(0, 0, 0) NewGuiPart4.TextXAlignment = Enum.TextXAlignment.Left NewGuiPart5.Parent = NewGuiPart3 NewGuiPart5.BackgroundTransparency = 0.80000001192093 NewGuiPart5.Position = UDim2.new(0, 4, 0.5, 0) NewGuiPart5.Size = UDim2.new(1, -8, 0.5, -3) NewGuiPart5.Font = Enum.Font.SourceSans NewGuiPart5.FontSize = Enum.FontSize.Size14 NewGuiPart5.Text = "Search Properties" --NewGuiPart5.TextColor3 = Color3.new(0, 0, 0) NewGuiPart5.TextXAlignment = Enum.TextXAlignment.Left NewGuiPart6.Name = "ExplorerPanel" NewGuiPart6.Parent = NewGuiPart1 NewGuiPart6.BackgroundColor3 = Color3.new(1, 1, 1) NewGuiPart6.BackgroundTransparency = 0.10000000149012 NewGuiPart6.BorderColor3 = Color3.new(0.74902, 0.74902, 0.74902) NewGuiPart6.Position = UDim2.new(1, 0, 0, 0) NewGuiPart6.Size = UDim2.new(0, 300, 0.5, 0) NewGuiPart153.Name = "GetOption" NewGuiPart153.Parent = NewGuiPart6 NewGuiPart153.Archivable = true NewGuiPart154.Name = "TotallyNotGetSelection" NewGuiPart154.Parent = NewGuiPart6 NewGuiPart154.Archivable = true NewGuiPart155.Name = "SetOption" NewGuiPart155.Parent = NewGuiPart6 NewGuiPart155.Archivable = true NewGuiPart156.Name = "TotallyNotSetSelection" NewGuiPart156.Parent = NewGuiPart6 NewGuiPart156.Archivable = true NewGuiPart157.Name = "TotallyNotSelectionChanged" NewGuiPart157.Parent = NewGuiPart6 NewGuiPart157.Archivable = true NewGuiPart7.Name = "SideMenu" NewGuiPart7.Parent = NewGuiPart1 NewGuiPart7.BackgroundColor3 = Color3.new(0.913726, 0.913726, 0.913726) NewGuiPart7.BackgroundTransparency = 1 NewGuiPart7.BorderColor3 = Color3.new(0.584314, 0.584314, 0.584314) NewGuiPart7.BorderSizePixel = 0 NewGuiPart7.Position = UDim2.new(1, -330, 0, 0) NewGuiPart7.Size = UDim2.new(0, 30, 0, 180) NewGuiPart7.Visible = false NewGuiPart7.ZIndex = 2 NewGuiPart8.Name = "Toggle" NewGuiPart8.Parent = NewGuiPart7 NewGuiPart8.Active = false NewGuiPart8.BackgroundColor3 = Color3.new(0.913726, 0.913726, 0.913726) NewGuiPart8.BorderSizePixel = 0 NewGuiPart8.Position = UDim2.new(0, 0, 0, 60) NewGuiPart8.Size = UDim2.new(0, 30, 0, 30) NewGuiPart8.AutoButtonColor = false NewGuiPart8.Font = Enum.Font.SourceSans NewGuiPart8.FontSize = Enum.FontSize.Size24 NewGuiPart8.Text = ">" NewGuiPart8.TextTransparency = 1 NewGuiPart8.TextWrapped = true NewGuiPart9.Name = "Title" NewGuiPart9.Parent = NewGuiPart7 NewGuiPart9.BackgroundColor3 = Color3.new(1, 1, 1) NewGuiPart9.BackgroundTransparency = 1 NewGuiPart9.Size = UDim2.new(0, 30, 0, 20) NewGuiPart9.ZIndex = 2 NewGuiPart9.Font = Enum.Font.SourceSansBold NewGuiPart9.FontSize = Enum.FontSize.Size14 NewGuiPart9.Text = "DEX" NewGuiPart9.TextWrapped = true NewGuiPart10.Name = "Version" NewGuiPart10.Parent = NewGuiPart7 NewGuiPart10.BackgroundColor3 = Color3.new(1, 1, 1) NewGuiPart10.BackgroundTransparency = 1 NewGuiPart10.Position = UDim2.new(0, 0, 0, 15) NewGuiPart10.Size = UDim2.new(0, 30, 0, 20) NewGuiPart10.ZIndex = 2 NewGuiPart10.Font = Enum.Font.SourceSansBold NewGuiPart10.FontSize = Enum.FontSize.Size12 NewGuiPart10.Text = "V2.0.0" NewGuiPart10.TextWrapped = true NewGuiPart11.Name = "Slant" NewGuiPart11.Parent = NewGuiPart7 NewGuiPart11.BackgroundColor3 = Color3.new(1, 1, 1) NewGuiPart11.BackgroundTransparency = 1 NewGuiPart11.Position = UDim2.new(0, 0, 0, 90) NewGuiPart11.Rotation = 180 NewGuiPart11.Size = UDim2.new(0, 30, 0, 30) NewGuiPart11.Image = "rbxassetid://474172996" NewGuiPart11.ImageColor3 = Color3.new(0.913726, 0.913726, 0.913726) NewGuiPart12.Name = "Main" NewGuiPart12.Parent = NewGuiPart7 NewGuiPart12.BackgroundColor3 = Color3.new(0.913726, 0.913726, 0.913726) NewGuiPart12.BorderSizePixel = 0 NewGuiPart12.Size = UDim2.new(0, 30, 0, 30) NewGuiPart13.Name = "SlideOut" NewGuiPart13.Parent = NewGuiPart7 NewGuiPart13.BackgroundColor3 = Color3.new(0.862745, 0.862745, 0.862745) NewGuiPart13.BackgroundTransparency = 1 NewGuiPart13.BorderSizePixel = 0 NewGuiPart13.ClipsDescendants = true NewGuiPart13.Position = UDim2.new(0, 0, 0, 30) NewGuiPart13.Size = UDim2.new(0, 30, 0, 150) NewGuiPart14.Name = "SlideFrame" NewGuiPart14.Parent = NewGuiPart13 NewGuiPart14.BackgroundColor3 = Color3.new(0.862745, 0.862745, 0.862745) NewGuiPart14.BorderSizePixel = 0 NewGuiPart14.Position = UDim2.new(0, 0, 0, -150) NewGuiPart14.Size = UDim2.new(0, 30, 0, 150) NewGuiPart15.Name = "Explorer" NewGuiPart15.Parent = NewGuiPart14 NewGuiPart15.BackgroundColor3 = Color3.new(1, 1, 1) NewGuiPart15.BackgroundTransparency = 1 NewGuiPart15.BorderSizePixel = 0 NewGuiPart15.Position = UDim2.new(0, 0, 0, 120) NewGuiPart15.Size = UDim2.new(0, 30, 0, 30) NewGuiPart15.ZIndex = 2 NewGuiPart15.AutoButtonColor = false NewGuiPart15.Font = Enum.Font.SourceSans NewGuiPart15.FontSize = Enum.FontSize.Size24 NewGuiPart15.Text = "" NewGuiPart16.Name = "Icon" NewGuiPart16.Parent = NewGuiPart15 NewGuiPart16.BackgroundColor3 = Color3.new(1, 1, 1) NewGuiPart16.BackgroundTransparency = 1 NewGuiPart16.Position = UDim2.new(0, 5, 0, 5) NewGuiPart16.Size = UDim2.new(0, 20, 0, 20) NewGuiPart16.ZIndex = 2 NewGuiPart16.Image = "rbxassetid://472635937" NewGuiPart16.ImageColor3 = Color3.new(0.27451, 0.27451, 0.27451) NewGuiPart17.Name = "SaveMap" NewGuiPart17.Parent = NewGuiPart14 NewGuiPart17.BackgroundColor3 = Color3.new(1, 1, 1) NewGuiPart17.BackgroundTransparency = 1 NewGuiPart17.BorderSizePixel = 0 NewGuiPart17.Position = UDim2.new(0, 0, 0, 90) NewGuiPart17.Size = UDim2.new(0, 30, 0, 30) NewGuiPart17.ZIndex = 2 NewGuiPart17.AutoButtonColor = false NewGuiPart17.Font = Enum.Font.SourceSans NewGuiPart17.FontSize = Enum.FontSize.Size24 NewGuiPart17.Text = "" NewGuiPart18.Name = "Icon" NewGuiPart18.Parent = NewGuiPart17 NewGuiPart18.BackgroundColor3 = Color3.new(1, 1, 1) NewGuiPart18.BackgroundTransparency = 1 NewGuiPart18.Position = UDim2.new(0, 5, 0, 5) NewGuiPart18.Size = UDim2.new(0, 20, 0, 20) NewGuiPart18.ZIndex = 2 NewGuiPart18.Image = "rbxassetid://472636337" NewGuiPart18.ImageColor3 = Color3.new(0.27451, 0.27451, 0.27451) NewGuiPart19.Name = "Settings" NewGuiPart19.Parent = NewGuiPart14 NewGuiPart19.BackgroundColor3 = Color3.new(1, 1, 1) NewGuiPart19.BackgroundTransparency = 1 NewGuiPart19.BorderSizePixel = 0 NewGuiPart19.Position = UDim2.new(0, 0, 0, 30) NewGuiPart19.Size = UDim2.new(0, 30, 0, 30) NewGuiPart19.ZIndex = 2 NewGuiPart19.AutoButtonColor = false NewGuiPart19.Font = Enum.Font.SourceSans NewGuiPart19.FontSize = Enum.FontSize.Size24 NewGuiPart19.Text = "" NewGuiPart20.Name = "Icon" NewGuiPart20.Parent = NewGuiPart19 NewGuiPart20.BackgroundColor3 = Color3.new(1, 1, 1) NewGuiPart20.BackgroundTransparency = 1 NewGuiPart20.Position = UDim2.new(0, 5, 0, 5) NewGuiPart20.Size = UDim2.new(0, 20, 0, 20) NewGuiPart20.ZIndex = 2 NewGuiPart20.Image = "rbxassetid://472635774" NewGuiPart20.ImageColor3 = Color3.new(0.27451, 0.27451, 0.27451) NewGuiPart21.Name = "Remotes" NewGuiPart21.Parent = NewGuiPart14 NewGuiPart21.BackgroundColor3 = Color3.new(1, 1, 1) NewGuiPart21.BackgroundTransparency = 1 NewGuiPart21.BorderSizePixel = 0 NewGuiPart21.Position = UDim2.new(0, 0, 0, 60) NewGuiPart21.Size = UDim2.new(0, 30, 0, 30) NewGuiPart21.ZIndex = 2 NewGuiPart21.AutoButtonColor = false NewGuiPart21.Font = Enum.Font.SourceSans NewGuiPart21.FontSize = Enum.FontSize.Size24 NewGuiPart21.Text = "" NewGuiPart22.Name = "Icon" NewGuiPart22.Parent = NewGuiPart21 NewGuiPart22.BackgroundColor3 = Color3.new(1, 1, 1) NewGuiPart22.BackgroundTransparency = 1 NewGuiPart22.Position = UDim2.new(0, 5, 0, 5) NewGuiPart22.Size = UDim2.new(0, 20, 0, 20) NewGuiPart22.ZIndex = 2 NewGuiPart22.Image = "rbxassetid://472636187" NewGuiPart22.ImageColor3 = Color3.new(0.27451, 0.27451, 0.27451) NewGuiPart23.Name = "About" NewGuiPart23.Parent = NewGuiPart14 NewGuiPart23.BackgroundColor3 = Color3.new(1, 1, 1) NewGuiPart23.BackgroundTransparency = 1 NewGuiPart23.BorderSizePixel = 0 NewGuiPart23.Size = UDim2.new(0, 30, 0, 30) NewGuiPart23.ZIndex = 2 NewGuiPart23.AutoButtonColor = false NewGuiPart23.Font = Enum.Font.SourceSans NewGuiPart23.FontSize = Enum.FontSize.Size24 NewGuiPart23.Text = "" NewGuiPart24.Name = "Icon" NewGuiPart24.Parent = NewGuiPart23 NewGuiPart24.BackgroundColor3 = Color3.new(1, 1, 1) NewGuiPart24.BackgroundTransparency = 1 NewGuiPart24.Position = UDim2.new(0, 5, 0, 5) NewGuiPart24.Size = UDim2.new(0, 20, 0, 20) NewGuiPart24.ZIndex = 2 NewGuiPart24.Image = "rbxassetid://476354004" NewGuiPart24.ImageColor3 = Color3.new(0.27451, 0.27451, 0.27451) NewGuiPart25.Name = "OpenScriptEditor" NewGuiPart25.Parent = NewGuiPart7 NewGuiPart25.Active = false NewGuiPart25.BackgroundColor3 = Color3.new(0.913726, 0.913726, 0.913726) NewGuiPart25.BorderSizePixel = 0 NewGuiPart25.Position = UDim2.new(0, 0, 0, 30) NewGuiPart25.Size = UDim2.new(0, 30, 0, 30) NewGuiPart25.ZIndex = 2 NewGuiPart25.AutoButtonColor = false NewGuiPart25.Font = Enum.Font.SourceSans NewGuiPart25.FontSize = Enum.FontSize.Size24 NewGuiPart25.Text = "" NewGuiPart26.Name = "Icon" NewGuiPart26.Parent = NewGuiPart25 NewGuiPart26.BackgroundColor3 = Color3.new(1, 1, 1) NewGuiPart26.BackgroundTransparency = 1 NewGuiPart26.Position = UDim2.new(0, 5, 0, 5) NewGuiPart26.Size = UDim2.new(0, 20, 0, 20) NewGuiPart26.ZIndex = 2 NewGuiPart26.Image = "rbxassetid://475456048" NewGuiPart26.ImageColor3 = Color3.new(0.105882, 0.164706, 0.207843) NewGuiPart26.ImageTransparency = 1 NewGuiPart27.Name = "Toggle" NewGuiPart27.Parent = NewGuiPart1 NewGuiPart27.BackgroundColor3 = Color3.new(0.913726, 0.913726, 0.913726) NewGuiPart27.BorderColor3 = Color3.new(0.584314, 0.584314, 0.584314) NewGuiPart27.Position = UDim2.new(1, 0, 0, 0) NewGuiPart27.Size = UDim2.new(0, 30, 0, 30) NewGuiPart27.Font = Enum.Font.SourceSans NewGuiPart27.FontSize = Enum.FontSize.Size24 NewGuiPart27.Text = " 0 then return t[1] else return nil end end Mouse.Button1Down:connect(function() if CurrentWindow == "Explorer" and Settings.ClickSelect then local target = Mouse.Target if target then SetSelection:Invoke({target}) end end end) TotallyNotSelectionChanged.Event:connect(function() if Settings.SelBox then local success,err = pcall(function() local selection = getSelection() SelectionBox.Adornee = selection end) if err then SelectionBox.Adornee = nil end end end) SettingsListener.OnInvoke = ReturnSetting -- Map Copier function createMapSetting(obj,interName,defaultOn) local function toggle(on) if on then obj.Change.Bar:TweenPosition(UDim2.new(0,32,0,-2),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,0.25,true) obj.Change.OnBar:TweenSize(UDim2.new(0,34,0,15),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,0.25,true) obj.Status.Text = "On" SaveMapSettings[interName] = true else obj.Change.Bar:TweenPosition(UDim2.new(0,-2,0,-2),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,0.25,true) obj.Change.OnBar:TweenSize(UDim2.new(0,0,0,15),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,0.25,true) obj.Status.Text = "Off" SaveMapSettings[interName] = false end end obj.Change.MouseButton1Click:connect(function() toggle(not SaveMapSettings[interName]) end) obj.Visible = true obj.Parent = SaveMapSettingFrame if defaultOn then toggle(true) end end function createCopyWhatSetting(serv) if SaveMapSettings.CopyWhat[serv] then local newSetting = SaveMapCopyTemplate:Clone() newSetting.Position = UDim2.new(0,0,0,#SaveMapCopyList:GetChildren() * 22 + 5) newSetting.Info.Text = serv local function toggle(on) if on then newSetting.Change.enabled.Visible = true SaveMapSettings.CopyWhat[serv] = true else newSetting.Change.enabled.Visible = false SaveMapSettings.CopyWhat[serv] = false end end newSetting.Change.MouseButton1Click:connect(function() toggle(not SaveMapSettings.CopyWhat[serv]) end) newSetting.Visible = true newSetting.Parent = SaveMapCopyList end end createMapSetting(SaveMapSettingFrame.Scripts,"SaveScripts",true) createMapSetting(SaveMapSettingFrame.Terrain,"SaveTerrain",true) createMapSetting(SaveMapSettingFrame.Lighting,"LightingProperties",true) createMapSetting(SaveMapSettingFrame.CameraInstances,"CameraInstances",true) createCopyWhatSetting("Workspace") createCopyWhatSetting("Lighting") createCopyWhatSetting("ReplicatedStorage") createCopyWhatSetting("ReplicatedFirst") createCopyWhatSetting("StarterPack") createCopyWhatSetting("StarterGui") createCopyWhatSetting("StarterPlayer") SaveMapName.Text = tostring(game.PlaceId).."MapCopy" SaveMapButton.MouseButton1Click:connect(function() local copyWhat = {} local copyGroup = Instance.new("Model",game.ReplicatedStorage) local copyScripts = SaveMapSettings.SaveScripts local copyTerrain = SaveMapSettings.SaveTerrain local lightingProperties = SaveMapSettings.LightingProperties local cameraInstances = SaveMapSettings.CameraInstances ----------------------------------------------------------------------------------- for i,v in pairs(SaveMapSettings.CopyWhat) do if v then table.insert(copyWhat,i) end end local consoleFunc = printconsole or writeconsole if consoleFunc then consoleFunc("Raspberry Pi's place copier loaded.") consoleFunc("Copying map of game "..tostring(game.PlaceId)..".") end function archivable(root) for i,v in pairs(root:GetChildren()) do if not game.Players:GetPlayerFromCharacter(v) then v.Archivable = true archivable(v) end end end function decompileS(root) for i,v in pairs(root:GetChildren()) do pcall(function() if v:IsA("LocalScript") then local isDisabled = v.Disabled v.Disabled = true v.Source = decompile(v) v.Disabled = isDisabled if v.Source == "" then if consoleFunc then consoleFunc("LocalScript "..v.Name.." had a problem decompiling.") end else if consoleFunc then consoleFunc("LocalScript "..v.Name.." decompiled.") end end elseif v:IsA("ModuleScript") then v.Source = decompile(v) if v.Source == "" then if consoleFunc then consoleFunc("ModuleScript "..v.Name.." had a problem decompiling.") end else if consoleFunc then consoleFunc("ModuleScript "..v.Name.." decompiled.") end end end end) decompileS(v) end end for i,v in pairs(copyWhat) do archivable(game[v]) end for j,obj in pairs(copyWhat) do if obj ~= "StarterPlayer" then local newFolder = Instance.new("Folder",copyGroup) newFolder.Name = obj for i,v in pairs(game[obj]:GetChildren()) do if v ~= copyGroup then pcall(function() v:Clone().Parent = newFolder end) end end else local newFolder = Instance.new("Model",copyGroup) newFolder.Name = "StarterPlayer" for i,v in pairs(game[obj]:GetChildren()) do local newObj = Instance.new("Folder",newFolder) newObj.Name = v.Name for _,c in pairs(v:GetChildren()) do if c.Name ~= "ControlScript" and c.Name ~= "CameraScript" then c:Clone().Parent = newObj end end end end end if workspace.CurrentCamera and cameraInstances then local cameraFolder = Instance.new("Model",copyGroup) cameraFolder.Name = "CameraItems" for i,v in pairs(workspace.CurrentCamera:GetChildren()) do v:Clone().Parent = cameraFolder end end if copyTerrain then local myTerrain = workspace.Terrain:CopyRegion(workspace.Terrain.MaxExtents) myTerrain.Parent = copyGroup end function saveProp(obj,prop,par) local myProp = obj[prop] if type(myProp) == "boolean" then local newProp = Instance.new("BoolValue",par) newProp.Name = prop newProp.Value = myProp elseif type(myProp) == "number" then local newProp = Instance.new("IntValue",par) newProp.Name = prop newProp.Value = myProp elseif type(myProp) == "string" then local newProp = Instance.new("StringValue",par) newProp.Name = prop newProp.Value = myProp elseif type(myProp) == "userdata" then -- Assume Color3 pcall(function() local newProp = Instance.new("Color3Value",par) newProp.Name = prop newProp.Value = myProp end) end end if lightingProperties then local lightingProps = Instance.new("Model",copyGroup) lightingProps.Name = "LightingProperties" saveProp(game.Lighting,"Ambient",lightingProps) saveProp(game.Lighting,"Brightness",lightingProps) saveProp(game.Lighting,"ColorShift_Bottom",lightingProps) saveProp(game.Lighting,"ColorShift_Top",lightingProps) saveProp(game.Lighting,"GlobalShadows",lightingProps) saveProp(game.Lighting,"OutdoorAmbient",lightingProps) saveProp(game.Lighting,"Outlines",lightingProps) saveProp(game.Lighting,"GeographicLatitude",lightingProps) saveProp(game.Lighting,"TimeOfDay",lightingProps) saveProp(game.Lighting,"FogColor",lightingProps) saveProp(game.Lighting,"FogEnd",lightingProps) saveProp(game.Lighting,"FogStart",lightingProps) end if decompile and copyScripts then decompileS(copyGroup) end if SaveInstance then SaveInstance(copyGroup,SaveMapName.Text..".rbxm") elseif saveinstance then saveinstance(getelysianpath()..SaveMapName.Text..".rbxm",copyGroup) end --print("Saved!") if consoleFunc then consoleFunc("The map has been copied.") end SaveMapButton.Text = "The map has been saved" wait(5) SaveMapButton.Text = "Save" end) -- End Copier wait() IntroFrame:TweenPosition(UDim2.new(1,-300,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,0.5,true) switchWindows("Explorer") wait(1) SideMenu.Visible = true for i = 0,1,0.1 do IntroFrame.BackgroundTransparency = i IntroFrame.Main.BackgroundTransparency = i IntroFrame.Slant.ImageTransparency = i IntroFrame.Title.TextTransparency = i IntroFrame.Version.TextTransparency = i IntroFrame.Creator.TextTransparency = i wait() end IntroFrame.Visible = false SlideFrame:TweenPosition(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,0.5,true) OpenScriptEditorButton:TweenPosition(UDim2.new(0,0,0,180),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,0.5,true) CloseToggleButton:TweenPosition(UDim2.new(0,0,0,210),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,0.5,true) Slant:TweenPosition(UDim2.new(0,0,0,240),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,0.5,true) wait(0.5) for i = 1,0,-0.1 do OpenScriptEditorButton.Icon.ImageTransparency = i CloseToggleButton.TextTransparency = i wait() end CloseToggleButton.Active = true CloseToggleButton.AutoButtonColor = true OpenScriptEditorButton.Active = true OpenScriptEditorButton.AutoButtonColor = true end) spawn(function() -- initial states local Option = { -- can modify object parents in the hierarchy Modifiable = false; -- can select objects Selectable = true; } -- MERELY Option.Modifiable = true -- END MERELY -- general size of GUI objects, in pixels local GUI_SIZE = 16 -- padding between items within each entry local ENTRY_PADDING = 1 -- padding between each entry local ENTRY_MARGIN = 1 local Input = game:GetService("UserInputService") local HoldingCtrl = false local HoldingShift = false --[[ # Explorer Panel A GUI panel that displays the game hierarchy. ## Selection Bindables - `Function GetSelection ( )` Returns an array of objects representing the objects currently selected in the panel. - `Function SetSelection ( Objects selection )` Sets the objects that are selected in the panel. `selection` is an array of objects. - `Event SelectionChanged ( )` Fired after the selection changes. ## Option Bindables - `Function GetOption ( string optionName )` If `optionName` is given, returns the value of that option. Otherwise, returns a table of options and their current values. - `Function SetOption ( string optionName, bool value )` Sets `optionName` to `value`. Options: - Modifiable Whether objects can be modified by the panel. Note that modifying objects depends on being able to select them. If Selectable is false, then Actions will not be available. Reparenting is still possible, but only for the dragged object. - Selectable Whether objects can be selected. If Modifiable is false, then left-clicking will perform a drag selection. ## Updates - 2013-09-18 - Fixed explorer icons to match studio explorer. - 2013-09-14 - Added GetOption and SetOption bindables. - Option: Modifiable; sets whether objects can be modified by the panel. - Option: Selectable; sets whether objects can be selected. - Slight modification to left-click selection behavior. - Improved layout and scaling. - 2013-09-13 - Added drag to reparent objects. - Left-click to select/deselect object. - Left-click and drag unselected object to reparent single object. - Left-click and drag selected object to move reparent entire selection. - Right-click while dragging to cancel. - 2013-09-11 - Added explorer panel header with actions. - Added Cut action. - Added Copy action. - Added Paste action. - Added Delete action. - Added drag selection. - Left-click: Add to selection on drag. - Right-click: Add to or remove from selection on drag. - Ensured SelectionChanged fires only when the selection actually changes. - Added documentation and change log. - Fixed thread issue. - 2013-09-09 - Added basic multi-selection. - Left-click to set selection. - Right-click to add to or remove from selection. - Removed "Selection" ObjectValue. - Added GetSelection BindableFunction. - Added SetSelection BindableFunction. - Added SelectionChanged BindableEvent. - Changed font to SourceSans. - 2013-08-31 - Improved GUI sizing based off of `GUI_SIZE` constant. - Automatic font size detection. - 2013-08-27 - Initial explorer panel. ## Todo - Sorting - by ExplorerOrder - by children - by name - Drag objects to reparent ]] local ENTRY_SIZE = GUI_SIZE + ENTRY_PADDING*2 local ENTRY_BOUND = ENTRY_SIZE + ENTRY_MARGIN local HEADER_SIZE = ENTRY_SIZE*2 local FONT = 'SourceSans' local FONT_SIZE do local size = {8,9,10,11,12,14,18,24,36,48} local s local n = math.huge for i = 1,#size do if size[i] 1 then local t = template:Clone() local p,s = scale(transform( UDim2.new(0,0,0,size-o-1), UDim2.new(0,size,0,1) )) t.Position = p t.Size = s t.Parent = Frame end return Frame end local function GripGraphic(size,dir,spacing,scaled,template) local Frame = Create('Frame',{ Name = "Grip Graphic"; BorderSizePixel = 0; Size = UDim2.new(0,size.x,0,size.y); Transparency = 1; }) if not template then template = Instance.new("Frame") template.BorderSizePixel = 0 end spacing = spacing or 2 local scale if scaled then function scale(p) return UDim2.new(p.X.Offset/size.x,0,p.Y.Offset/size.y,0) end else function scale(p) return p end end if dir == 'Vertical' then for i=0,size.x-1,spacing do local t = template:Clone() t.Size = scale(UDim2.new(0,1,0,size.y)) t.Position = scale(UDim2.new(0,i,0,0)) t.Parent = Frame end elseif dir == nil or dir == 'Horizontal' then for i=0,size.y-1,spacing do local t = template:Clone() t.Size = scale(UDim2.new(0,size.x,0,1)) t.Position = scale(UDim2.new(0,0,0,i)) t.Parent = Frame end end return Frame end local mt = { __index = { GetScrollPercent = function(self) return self.ScrollIndex/(self.TotalSpace-self.VisibleSpace) end; CanScrollDown = function(self) return self.ScrollIndex + self.VisibleSpace 0 end; ScrollDown = function(self) self.ScrollIndex = self.ScrollIndex + self.PageIncrement self:Update() end; ScrollUp = function(self) self.ScrollIndex = self.ScrollIndex - self.PageIncrement self:Update() end; ScrollTo = function(self,index) self.ScrollIndex = index self:Update() end; SetScrollPercent = function(self,percent) self.ScrollIndex = math.floor((self.TotalSpace - self.VisibleSpace)*percent + 0.5) self:Update() end; }; } mt.__index.CanScrollRight = mt.__index.CanScrollDown mt.__index.CanScrollLeft = mt.__index.CanScrollUp mt.__index.ScrollLeft = mt.__index.ScrollUp mt.__index.ScrollRight = mt.__index.ScrollDown function ScrollBar(horizontal) -- create row scroll bar local ScrollFrame = Create('Frame',{ Name = "ScrollFrame"; Position = horizontal and UDim2.new(0,0,1,-GUI_SIZE) or UDim2.new(1,-GUI_SIZE,0,0); Size = horizontal and UDim2.new(1,0,0,GUI_SIZE) or UDim2.new(0,GUI_SIZE,1,0); BackgroundTransparency = 1; Create('ImageButton',{ Name = "ScrollDown"; Position = horizontal and UDim2.new(1,-GUI_SIZE,0,0) or UDim2.new(0,0,1,-GUI_SIZE); Size = UDim2.new(0, GUI_SIZE, 0, GUI_SIZE); BackgroundColor3 = GuiColor.Button; BorderColor3 = GuiColor.Border; --BorderSizePixel = 0; }); Create('ImageButton',{ Name = "ScrollUp"; Size = UDim2.new(0, GUI_SIZE, 0, GUI_SIZE); BackgroundColor3 = GuiColor.Button; BorderColor3 = GuiColor.Border; --BorderSizePixel = 0; }); Create('ImageButton',{ Name = "ScrollBar"; Size = horizontal and UDim2.new(1,-GUI_SIZE*2,1,0) or UDim2.new(1,0,1,-GUI_SIZE*2); Position = horizontal and UDim2.new(0,GUI_SIZE,0,0) or UDim2.new(0,0,0,GUI_SIZE); AutoButtonColor = false; BackgroundColor3 = Color3.new(0.94902, 0.94902, 0.94902); BorderColor3 = GuiColor.Border; --BorderSizePixel = 0; Create('ImageButton',{ Name = "ScrollThumb"; AutoButtonColor = false; Size = UDim2.new(0, GUI_SIZE, 0, GUI_SIZE); BackgroundColor3 = GuiColor.Button; BorderColor3 = GuiColor.Border; --BorderSizePixel = 0; }); }); }) local graphicTemplate = Create('Frame',{ Name="Graphic"; BorderSizePixel = 0; BackgroundColor3 = GuiColor.Border; }) local graphicSize = GUI_SIZE/2 local ScrollDownFrame = ScrollFrame.ScrollDown local ScrollDownGraphic = ArrowGraphic(graphicSize,horizontal and 'Right' or 'Down',true,graphicTemplate) ScrollDownGraphic.Position = UDim2.new(0.5,-graphicSize/2,0.5,-graphicSize/2) ScrollDownGraphic.Parent = ScrollDownFrame local ScrollUpFrame = ScrollFrame.ScrollUp local ScrollUpGraphic = ArrowGraphic(graphicSize,horizontal and 'Left' or 'Up',true,graphicTemplate) ScrollUpGraphic.Position = UDim2.new(0.5,-graphicSize/2,0.5,-graphicSize/2) ScrollUpGraphic.Parent = ScrollUpFrame local ScrollBarFrame = ScrollFrame.ScrollBar local ScrollThumbFrame = ScrollBarFrame.ScrollThumb do local size = GUI_SIZE*3/8 local Decal = GripGraphic(Vector2.new(size,size),horizontal and 'Vertical' or 'Horizontal',2,graphicTemplate) Decal.Position = UDim2.new(0.5,-size/2,0.5,-size/2) Decal.Parent = ScrollThumbFrame end local Class = setmetatable({ GUI = ScrollFrame; ScrollIndex = 0; VisibleSpace = 0; TotalSpace = 0; PageIncrement = 1; },mt) local UpdateScrollThumb if horizontal then function UpdateScrollThumb() ScrollThumbFrame.Size = UDim2.new(Class.VisibleSpace/Class.TotalSpace,0,0,GUI_SIZE) if ScrollThumbFrame.AbsoluteSize.x < GUI_SIZE then ScrollThumbFrame.Size = UDim2.new(0,GUI_SIZE,0,GUI_SIZE) end local barSize = ScrollBarFrame.AbsoluteSize.x ScrollThumbFrame.Position = UDim2.new(Class:GetScrollPercent()*(barSize - ScrollThumbFrame.AbsoluteSize.x)/barSize,0,0,0) end else function UpdateScrollThumb() ScrollThumbFrame.Size = UDim2.new(0,GUI_SIZE,Class.VisibleSpace/Class.TotalSpace,0) if ScrollThumbFrame.AbsoluteSize.y < GUI_SIZE then ScrollThumbFrame.Size = UDim2.new(0,GUI_SIZE,0,GUI_SIZE) end local barSize = ScrollBarFrame.AbsoluteSize.y ScrollThumbFrame.Position = UDim2.new(0,0,Class:GetScrollPercent()*(barSize - ScrollThumbFrame.AbsoluteSize.y)/barSize,0) end end local lastDown local lastUp local scrollStyle = {BackgroundColor3=GuiColor.Border,BackgroundTransparency=0} local scrollStyle_ds = {BackgroundColor3=GuiColor.Border,BackgroundTransparency=0.7} local function Update() local t = Class.TotalSpace local v = Class.VisibleSpace local s = Class.ScrollIndex if v 0 then if s + v > t then Class.ScrollIndex = t - v end else Class.ScrollIndex = 0 end else Class.ScrollIndex = 0 end if Class.UpdateCallback then if Class.UpdateCallback(Class) == false then return end end local down = Class:CanScrollDown() local up = Class:CanScrollUp() if down ~= lastDown then lastDown = down ScrollDownFrame.Active = down ScrollDownFrame.AutoButtonColor = down local children = ScrollDownGraphic:GetChildren() local style = down and scrollStyle or scrollStyle_ds for i = 1,#children do Create(children[i],style) end end if up ~= lastUp then lastUp = up ScrollUpFrame.Active = up ScrollUpFrame.AutoButtonColor = up local children = ScrollUpGraphic:GetChildren() local style = up and scrollStyle or scrollStyle_ds for i = 1,#children do Create(children[i],style) end end ScrollThumbFrame.Visible = down or up UpdateScrollThumb() end Class.Update = Update SetZIndexOnChanged(ScrollFrame) local MouseDrag = Create('ImageButton',{ Name = "MouseDrag"; Position = UDim2.new(-0.25,0,-0.25,0); Size = UDim2.new(1.5,0,1.5,0); Transparency = 1; AutoButtonColor = false; Active = true; ZIndex = 10; }) local scrollEventID = 0 ScrollDownFrame.MouseButton1Down:connect(function() scrollEventID = tick() local current = scrollEventID local up_con up_con = MouseDrag.MouseButton1Up:connect(function() scrollEventID = tick() MouseDrag.Parent = nil ResetButtonColor(ScrollDownFrame) up_con:disconnect(); drag = nil end) MouseDrag.Parent = GetScreen(ScrollFrame) Class:ScrollDown() wait(0.2) -- delay before auto scroll while scrollEventID == current do Class:ScrollDown() if not Class:CanScrollDown() then break end wait() end end) ScrollDownFrame.MouseButton1Up:connect(function() scrollEventID = tick() end) ScrollUpFrame.MouseButton1Down:connect(function() scrollEventID = tick() local current = scrollEventID local up_con up_con = MouseDrag.MouseButton1Up:connect(function() scrollEventID = tick() MouseDrag.Parent = nil ResetButtonColor(ScrollUpFrame) up_con:disconnect(); drag = nil end) MouseDrag.Parent = GetScreen(ScrollFrame) Class:ScrollUp() wait(0.2) while scrollEventID == current do Class:ScrollUp() if not Class:CanScrollUp() then break end wait() end end) ScrollUpFrame.MouseButton1Up:connect(function() scrollEventID = tick() end) if horizontal then ScrollBarFrame.MouseButton1Down:connect(function(x,y) scrollEventID = tick() local current = scrollEventID local up_con up_con = MouseDrag.MouseButton1Up:connect(function() scrollEventID = tick() MouseDrag.Parent = nil ResetButtonColor(ScrollUpFrame) up_con:disconnect(); drag = nil end) MouseDrag.Parent = GetScreen(ScrollFrame) if x > ScrollThumbFrame.AbsolutePosition.x then Class:ScrollTo(Class.ScrollIndex + Class.VisibleSpace) wait(0.2) while scrollEventID == current do if x ScrollThumbFrame.AbsolutePosition.x then break end Class:ScrollTo(Class.ScrollIndex - Class.VisibleSpace) wait() end end end) else ScrollBarFrame.MouseButton1Down:connect(function(x,y) scrollEventID = tick() local current = scrollEventID local up_con up_con = MouseDrag.MouseButton1Up:connect(function() scrollEventID = tick() MouseDrag.Parent = nil ResetButtonColor(ScrollUpFrame) up_con:disconnect(); drag = nil end) MouseDrag.Parent = GetScreen(ScrollFrame) if y > ScrollThumbFrame.AbsolutePosition.y then Class:ScrollTo(Class.ScrollIndex + Class.VisibleSpace) wait(0.2) while scrollEventID == current do if y ScrollThumbFrame.AbsolutePosition.y then break end Class:ScrollTo(Class.ScrollIndex - Class.VisibleSpace) wait() end end end) end if horizontal then ScrollThumbFrame.MouseButton1Down:connect(function(x,y) scrollEventID = tick() local mouse_offset = x - ScrollThumbFrame.AbsolutePosition.x local drag_con local up_con drag_con = MouseDrag.MouseMoved:connect(function(x,y) local bar_abs_pos = ScrollBarFrame.AbsolutePosition.x local bar_drag = ScrollBarFrame.AbsoluteSize.x - ScrollThumbFrame.AbsoluteSize.x local bar_abs_one = bar_abs_pos + bar_drag x = x - mouse_offset x = x bar_abs_one and bar_abs_one or x x = x - bar_abs_pos Class:SetScrollPercent(x/(bar_drag)) end) up_con = MouseDrag.MouseButton1Up:connect(function() scrollEventID = tick() MouseDrag.Parent = nil ResetButtonColor(ScrollThumbFrame) drag_con:disconnect(); drag_con = nil up_con:disconnect(); drag = nil end) MouseDrag.Parent = GetScreen(ScrollFrame) end) else ScrollThumbFrame.MouseButton1Down:connect(function(x,y) scrollEventID = tick() local mouse_offset = y - ScrollThumbFrame.AbsolutePosition.y local drag_con local up_con drag_con = MouseDrag.MouseMoved:connect(function(x,y) local bar_abs_pos = ScrollBarFrame.AbsolutePosition.y local bar_drag = ScrollBarFrame.AbsoluteSize.y - ScrollThumbFrame.AbsoluteSize.y local bar_abs_one = bar_abs_pos + bar_drag y = y - mouse_offset y = y bar_abs_one and bar_abs_one or y y = y - bar_abs_pos Class:SetScrollPercent(y/(bar_drag)) end) up_con = MouseDrag.MouseButton1Up:connect(function() scrollEventID = tick() MouseDrag.Parent = nil ResetButtonColor(ScrollThumbFrame) drag_con:disconnect(); drag_con = nil up_con:disconnect(); drag = nil end) MouseDrag.Parent = GetScreen(ScrollFrame) end) end function Class:Destroy() ScrollFrame:Destroy() MouseDrag:Destroy() for k in pairs(Class) do Class[k] = nil end setmetatable(Class,nil) end Update() return Class end end ---------------------------------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- ---- Explorer panel local explorerPanel = D_E_X.ExplorerPanel Create(explorerPanel,{ BackgroundColor3 = GuiColor.Field; BorderColor3 = GuiColor.Border; Active = true; }) local SettingsRemote = explorerPanel.Parent:WaitForChild("SettingsPanel"):WaitForChild("GetSetting") local GetApiRemote = explorerPanel.Parent:WaitForChild("PropertiesFrame"):WaitForChild("GetApi") local GetAwaitRemote = explorerPanel.Parent:WaitForChild("PropertiesFrame"):WaitForChild("GetAwaiting") local bindSetAwaiting = explorerPanel.Parent:WaitForChild("PropertiesFrame"):WaitForChild("SetAwaiting") local SaveInstanceWindow = explorerPanel.Parent:WaitForChild("SaveInstance") local ConfirmationWindow = explorerPanel.Parent:WaitForChild("Confirmation") local CautionWindow = explorerPanel.Parent:WaitForChild("Caution") local TableCautionWindow = explorerPanel.Parent:WaitForChild("TableCaution") local RemoteWindow = explorerPanel.Parent:WaitForChild("CallRemote") local ScriptEditor = explorerPanel.Parent:WaitForChild("ScriptEditor") local ScriptEditorEvent = ScriptEditor:WaitForChild("OpenScript") local CurrentSaveInstanceWindow local CurrentRemoteWindow local lastSelectedNode local DexStorage local DexStorageMain local DexStorageEnabled if saveinstance then DexStorageEnabled = true end if DexStorageEnabled then DexStorage = Instance.new("Folder") DexStorage.Name = "Dex" DexStorageMain = Instance.new("Folder",DexStorage) DexStorageMain.Name = "DexStorage" end local NilStorage local NilStorageMain local NilStorageEnabled if get_nil_instances and IfThisFunctionWasStableEnough then NilStorageEnabled = true end if NilStorageEnabled then NilStorage = Instance.new("Folder") NilStorage.Name = "Dex Internal Storage" NilStorageMain = Instance.new("Folder",NilStorage) NilStorageMain.Name = "Nil Instances" end local listFrame = Create('Frame',{ Name = "List"; BackgroundTransparency = 1; ClipsDescendants = true; Position = UDim2.new(0,0,0,HEADER_SIZE); Size = UDim2.new(1,-GUI_SIZE,1,-HEADER_SIZE); Parent = explorerPanel; }) local scrollBar = ScrollBar(false) scrollBar.PageIncrement = 1 Create(scrollBar.GUI,{ Position = UDim2.new(1,-GUI_SIZE,0,HEADER_SIZE); Size = UDim2.new(0,GUI_SIZE,1,-HEADER_SIZE); Parent = explorerPanel; }) local scrollBarH = ScrollBar(true) scrollBarH.PageIncrement = GUI_SIZE Create(scrollBarH.GUI,{ Position = UDim2.new(0,0,1,-GUI_SIZE); Size = UDim2.new(1,-GUI_SIZE,0,GUI_SIZE); Visible = false; Parent = explorerPanel; }) local headerFrame = Create('Frame',{ Name = "Header"; BackgroundColor3 = GuiColor.Background; BorderColor3 = GuiColor.Border; Position = UDim2.new(0,0,0,0); Size = UDim2.new(1,0,0,HEADER_SIZE); Parent = explorerPanel; Create('TextLabel',{ Text = "Explorer"; BackgroundTransparency = 1; TextColor3 = GuiColor.Text; TextXAlignment = 'Left'; Font = FONT; FontSize = FONT_SIZE; Position = UDim2.new(0,4,0,0); Size = UDim2.new(1,-4,0.5,0); }); }) local explorerFilter = Create('TextBox',{ Text = "Filter Workspace"; BackgroundTransparency = 0.8; TextColor3 = GuiColor.Text; TextXAlignment = 'Left'; Font = FONT; FontSize = FONT_SIZE; Position = UDim2.new(0,4,0.5,0); Size = UDim2.new(1,-8,0.5,-2); }); explorerFilter.Parent = headerFrame SetZIndexOnChanged(explorerPanel) local function CreateColor3(r, g, b) return Color3.new(r/255,g/255,b/255) end local Styles = { Font = Enum.Font.Arial; Margin = 5; Black = CreateColor3(0,0,0); White = CreateColor3(255,255,255); } local DropDown = { Font = Styles.Font; FontSize = Enum.FontSize.Size14; TextColor = CreateColor3(0,0,0); TextColorOver = Styles.White; TextXAlignment = Enum.TextXAlignment.Left; Height = 20; BackColor = Styles.White; BackColorOver = CreateColor3(86,125,188); BorderColor = CreateColor3(216,216,216); BorderSizePixel = 2; ArrowColor = CreateColor3(160,160,160); ArrowColorOver = Styles.Black; } local Row = { Font = Styles.Font; FontSize = Enum.FontSize.Size14; TextXAlignment = Enum.TextXAlignment.Left; TextColor = Styles.Black; TextColorOver = Styles.White; TextLockedColor = CreateColor3(120,120,120); Height = 24; BorderColor = CreateColor3(216,216,216); BackgroundColor = Styles.White; BackgroundColorAlternate = CreateColor3(246,246,246); BackgroundColorMouseover = CreateColor3(211,224,244); TitleMarginLeft = 15; } local currentRightClickMenu local CurrentInsertObjectWindow local CurrentFunctionCallerWindow local RbxApi function ClassCanCreate(IName) local success,err = pcall(function() Instance.new(IName) end) if err then return false else return true end end function GetClasses() if RbxApi == nil then return {} end local classTable = {} for i,v in pairs(RbxApi.Classes) do if ClassCanCreate(v.Name) then table.insert(classTable,v.Name) end end return classTable end local function sortAlphabetic(t, property) table.sort(t, function(x,y) return x[property] < y[property] end) end local function FunctionIsHidden(functionData) local tags = functionData["tags"] for _,name in pairs(tags) do if name == "deprecated" or name == "hidden" or name == "writeonly" then return true end end return false end local function GetAllFunctions(className) local class = RbxApi.Classes[className] local functions = {} if not class then return functions end while class do if class.Name == "Instance" then break end for _,nextFunction in pairs(class.Functions) do if not FunctionIsHidden(nextFunction) then table.insert(functions, nextFunction) end end class = RbxApi.Classes[class.Superclass] end sortAlphabetic(functions, "Name") return functions end function GetFunctions() if RbxApi == nil then return {} end local List = SelectionVar():Get() if #List == 0 then return end local MyObject = List[1] local functionTable = {} for i,v in pairs(GetAllFunctions(MyObject.ClassName)) do table.insert(functionTable,v) end return functionTable end function CreateInsertObjectMenu(choices, currentChoice, readOnly, onClick) local mouse = game.Players.LocalPlayer:GetMouse() local totalSize = explorerPanel.Parent.AbsoluteSize.y if #choices == 0 then return end table.sort(choices, function(a,b) return a parentFrameHeight then -- menu.Position = UDim2.new(0, margin, 0, -1 * (#choices * DropDown.Height) - margin) --end local function choice(name) onClick(name) hideMenu() end for i,name in pairs(choices) do local option = CreateRightClickMenuItem(name, function() choice(name) end,1) option.Size = UDim2.new(1, 0, 0, 20) option.Position = UDim2.new(0, 0, 0, (i - 1) * DropDown.Height) option.ZIndex = menu.ZIndex option.Parent = menu end end showMenu() return frame end function CreateFunctionCallerMenu(choices, currentChoice, readOnly, onClick) local mouse = game.Players.LocalPlayer:GetMouse() local totalSize = explorerPanel.Parent.AbsoluteSize.y if #choices == 0 then return end table.sort(choices, function(a,b) return a.Name parentFrameHeight then -- menu.Position = UDim2.new(0, margin, 0, -1 * (#choices * DropDown.Height) - margin) --end local function GetParameters(functionData) local paraString = "" paraString = paraString.."(" for i,v in pairs(functionData.Arguments) do paraString = paraString..v.Type.." "..v.Name if i parentFrameHeight then -- menu.Position = UDim2.new(0, margin, 0, -1 * (#choices * DropDown.Height) - margin) --end local function choice(name) onClick(name) hideMenu() end for i,name in pairs(choices) do local option = CreateRightClickMenuItem(name, function() choice(name) end) option.Size = UDim2.new(1, 0, 0, 20) option.Position = UDim2.new(0, 0, 0, (i - 1) * DropDown.Height) option.ZIndex = menu.ZIndex option.Parent = menu end end showMenu() return frame end function checkMouseInGui(gui) if gui == nil then return false end local plrMouse = game.Players.LocalPlayer:GetMouse() local guiPosition = gui.AbsolutePosition local guiSize = gui.AbsoluteSize if plrMouse.X >= guiPosition.x and plrMouse.X = guiPosition.y and plrMouse.Y nodeWidth then nodeWidth = w end if t[i].Expanded or filteringWorkspace() then r(t[i]) end end end end function rawUpdateSize() scrollBarH.TotalSpace = nodeWidth scrollBarH.VisibleSpace = listFrame.AbsoluteSize.x scrollBarH:Update() local visible = scrollBarH:CanScrollDown() or scrollBarH:CanScrollUp() scrollBarH.GUI.Visible = visible listFrame.Size = UDim2.new(1,-GUI_SIZE,1,-GUI_SIZE*(visible and 1 or 0) - HEADER_SIZE) scrollBar.VisibleSpace = math.ceil(listFrame.AbsoluteSize.y/ENTRY_BOUND) scrollBar.GUI.Size = UDim2.new(0,GUI_SIZE,1,-GUI_SIZE*(visible and 1 or 0) - HEADER_SIZE) scrollBar.TotalSpace = #TreeList+1 scrollBar:Update() end function rawUpdateList() -- Clear then repopulate the entire list. It appears to be fast enough. TreeList = {} nodeWidth = 0 r(NodeLookup[workspace.Parent]) if DexStorageEnabled then r(NodeLookup[DexStorage]) end if NilStorageEnabled then r(NodeLookup[NilStorage]) end rawUpdateSize() updateActions() end -- Adding or removing large models will cause many updates to occur. We -- can reduce the number of updates by creating a delay, then dropping any -- updates that occur during the delay. local updatingList = false function updateList() if updatingList then return end updatingList = true wait(0.25) updatingList = false rawUpdateList() end local updatingScroll = false function updateScroll() if updatingScroll then return end updatingScroll = true wait(0.25) updatingScroll = false scrollBar:Update() end end local Selection do local bindGetSelection = explorerPanel:FindFirstChild("TotallyNotGetSelection") if not bindGetSelection then bindGetSelection = Create('BindableFunction',{Name = "TotallyNotGetSelection"}) bindGetSelection.Parent = explorerPanel end local bindSetSelection = explorerPanel:FindFirstChild("TotallyNotSetSelection") if not bindSetSelection then bindSetSelection = Create('BindableFunction',{Name = "TotallyNotSetSelection"}) bindSetSelection.Parent = explorerPanel end local bindSelectionChanged = explorerPanel:FindFirstChild("TotallyNotSelectionChanged") if not bindSelectionChanged then bindSelectionChanged = Create('BindableEvent',{Name = "TotallyNotSelectionChanged"}) bindSelectionChanged.Parent = explorerPanel end local SelectionList = {} local SelectionSet = {} local Updates = true Selection = { Selected = SelectionSet; List = SelectionList; } local function addObject(object) -- list update local lupdate = false -- scroll update local supdate = false if not SelectionSet[object] then local node = NodeLookup[object] if node then table.insert(SelectionList,object) SelectionSet[object] = true node.Selected = true -- expand all ancestors so that selected node becomes visible node = node.Parent while node do if not node.Expanded then node.Expanded = true lupdate = true end node = node.Parent end supdate = true end end return lupdate,supdate end function Selection:Set(objects) local lupdate = false local supdate = false if #SelectionList > 0 then for i = 1,#SelectionList do local object = SelectionList[i] local node = NodeLookup[object] if node then node.Selected = false SelectionSet[object] = nil end end SelectionList = {} Selection.List = SelectionList supdate = true end for i = 1,#objects do local l,s = addObject(objects[i]) lupdate = l or lupdate supdate = s or supdate end if lupdate then rawUpdateList() supdate = true elseif supdate then scrollBar:Update() end if supdate then bindSelectionChanged:Fire() updateActions() end end function Selection:Add(object) local l,s = addObject(object) if l then rawUpdateList() if Updates then bindSelectionChanged:Fire() updateActions() end elseif s then scrollBar:Update() if Updates then bindSelectionChanged:Fire() updateActions() end end end function Selection:StopUpdates() Updates = false end function Selection:ResumeUpdates() Updates = true bindSelectionChanged:Fire() updateActions() end function Selection:Remove(object,noupdate) if SelectionSet[object] then local node = NodeLookup[object] if node then node.Selected = false SelectionSet[object] = nil for i = 1,#SelectionList do if SelectionList[i] == object then table.remove(SelectionList,i) break end end if not noupdate then scrollBar:Update() end bindSelectionChanged:Fire() updateActions() end end end function Selection:Get() local list = {} for i = 1,#SelectionList do list[i] = SelectionList[i] end return list end bindSetSelection.OnInvoke = function(...) Selection:Set(...) end bindGetSelection.OnInvoke = function() return Selection:Get() end end function CreateCaution(title,msg) local newCaution = CautionWindow:Clone() newCaution.Title.Text = title newCaution.MainWindow.Desc.Text = msg newCaution.Parent = explorerPanel.Parent newCaution.Visible = true newCaution.MainWindow.Ok.MouseButton1Up:connect(function() newCaution:Destroy() end) end function CreateTableCaution(title,msg) if type(msg) ~= "table" then return CreateCaution(title,tostring(msg)) end local newCaution = TableCautionWindow:Clone() newCaution.Title.Text = title local TableList = newCaution.MainWindow.TableResults local TableTemplate = newCaution.MainWindow.TableTemplate for i,v in pairs(msg) do local newResult = TableTemplate:Clone() newResult.Type.Text = type(v) newResult.Value.Text = tostring(v) newResult.Position = UDim2.new(0,0,0,#TableList:GetChildren() * 20) newResult.Parent = TableList TableList.CanvasSize = UDim2.new(0,0,0,#TableList:GetChildren() * 20) newResult.Visible = true end newCaution.Parent = explorerPanel.Parent newCaution.Visible = true newCaution.MainWindow.Ok.MouseButton1Up:connect(function() newCaution:Destroy() end) end local function Split(str, delimiter) local start = 1 local t = {} while true do local pos = string.find (str, delimiter, start, true) if not pos then break end table.insert (t, string.sub (str, start, pos - 1)) start = pos + string.len (delimiter) end table.insert (t, string.sub (str, start)) return t end local function ToValue(value,type) if type == "Vector2" then local list = Split(value,",") if #list < 2 then return nil end local x = tonumber(list[1]) or 0 local y = tonumber(list[2]) or 0 return Vector2.new(x,y) elseif type == "Vector3" then local list = Split(value,",") if #list < 3 then return nil end local x = tonumber(list[1]) or 0 local y = tonumber(list[2]) or 0 local z = tonumber(list[3]) or 0 return Vector3.new(x,y,z) elseif type == "Color3" then local list = Split(value,",") if #list < 3 then return nil end local r = tonumber(list[1]) or 0 local g = tonumber(list[2]) or 0 local b = tonumber(list[3]) or 0 return Color3.new(r/255,g/255, b/255) elseif type == "UDim2" then local list = Split(string.gsub(string.gsub(value, "{", ""),"}",""),",") if #list < 4 then return nil end local xScale = tonumber(list[1]) or 0 local xOffset = tonumber(list[2]) or 0 local yScale = tonumber(list[3]) or 0 local yOffset = tonumber(list[4]) or 0 return UDim2.new(xScale, xOffset, yScale, yOffset) elseif type == "Number" then return tonumber(value) elseif type == "String" then return value elseif type == "NumberRange" then local list = Split(value,",") if #list == 1 then if tonumber(list[1]) == nil then return nil end local newVal = tonumber(list[1]) or 0 return NumberRange.new(newVal) end if #list < 2 then return nil end local x = tonumber(list[1]) or 0 local y = tonumber(list[2]) or 0 return NumberRange.new(x,y) elseif type == "Script" then local success,err = ypcall(function() _G.D_E_X_DONOTUSETHISPLEASE = nil loadstring( "_G.D_E_X_DONOTUSETHISPLEASE = "..value )() return _G.D_E_X_DONOTUSETHISPLEASE end) if err then return nil end else return nil end end local function ToPropValue(value,type) if type == "Vector2" then local list = Split(value,",") if #list < 2 then return nil end local x = tonumber(list[1]) or 0 local y = tonumber(list[2]) or 0 return Vector2.new(x,y) elseif type == "Vector3" then local list = Split(value,",") if #list < 3 then return nil end local x = tonumber(list[1]) or 0 local y = tonumber(list[2]) or 0 local z = tonumber(list[3]) or 0 return Vector3.new(x,y,z) elseif type == "Color3" then local list = Split(value,",") if #list < 3 then return nil end local r = tonumber(list[1]) or 0 local g = tonumber(list[2]) or 0 local b = tonumber(list[3]) or 0 return Color3.new(r/255,g/255, b/255) elseif type == "UDim2" then local list = Split(string.gsub(string.gsub(value, "{", ""),"}",""),",") if #list < 4 then return nil end local xScale = tonumber(list[1]) or 0 local xOffset = tonumber(list[2]) or 0 local yScale = tonumber(list[3]) or 0 local yOffset = tonumber(list[4]) or 0 return UDim2.new(xScale, xOffset, yScale, yOffset) elseif type == "Content" then return value elseif type == "float" or type == "int" or type == "double" then return tonumber(value) elseif type == "string" then return value elseif type == "NumberRange" then local list = Split(value,",") if #list == 1 then if tonumber(list[1]) == nil then return nil end local newVal = tonumber(list[1]) or 0 return NumberRange.new(newVal) end if #list 1 then ArgumentList:GetChildren()[#ArgumentList:GetChildren()]:Destroy() ArgumentList.CanvasSize = UDim2.new(0,0,0,#ArgumentList:GetChildren() * 20) end end end) CurrentRemoteWindow.MainWindow.Cancel.MouseButton1Up:connect(function() if CurrentRemoteWindow then CurrentRemoteWindow:Destroy() CurrentRemoteWindow = nil end end) CurrentRemoteWindow.MainWindow.DisplayReturned.MouseButton1Up:connect(function() if displayValues then displayValues = false CurrentRemoteWindow.MainWindow.DisplayReturned.enabled.Visible = false else displayValues = true CurrentRemoteWindow.MainWindow.DisplayReturned.enabled.Visible = true end end) end function PromptSaveInstance(inst) if not SaveInstance and not _G.SaveInstance then CreateCaution("SaveInstance Missing","You do not have the SaveInstance function installed. Please go to RaspberryPi's thread to retrieve it.") return end if CurrentSaveInstanceWindow then CurrentSaveInstanceWindow:Destroy() CurrentSaveInstanceWindow = nil if explorerPanel.Parent:FindFirstChild("SaveInstanceOverwriteCaution") then explorerPanel.Parent.SaveInstanceOverwriteCaution:Destroy() end end CurrentSaveInstanceWindow = SaveInstanceWindow:Clone() CurrentSaveInstanceWindow.Parent = explorerPanel.Parent CurrentSaveInstanceWindow.Visible = true local filename = CurrentSaveInstanceWindow.MainWindow.FileName local saveObjects = true local overwriteCaution = false CurrentSaveInstanceWindow.MainWindow.Save.MouseButton1Up:connect(function() if readfile and getelysianpath then if readfile(getelysianpath()..filename.Text..".rbxmx") then if not overwriteCaution then overwriteCaution = true local newCaution = ConfirmationWindow:Clone() newCaution.Name = "SaveInstanceOverwriteCaution" newCaution.MainWindow.Desc.Text = "The file, "..filename.Text..".rbxmx, already exists. Overwrite?" newCaution.Parent = explorerPanel.Parent newCaution.Visible = true newCaution.MainWindow.Yes.MouseButton1Up:connect(function() ypcall(function() SaveInstance(inst,filename.Text..".rbxmx",not saveObjects) end) overwriteCaution = false newCaution:Destroy() if CurrentSaveInstanceWindow then CurrentSaveInstanceWindow:Destroy() CurrentSaveInstanceWindow = nil end end) newCaution.MainWindow.No.MouseButton1Up:connect(function() overwriteCaution = false newCaution:Destroy() end) end else ypcall(function() SaveInstance(inst,filename.Text..".rbxmx",not saveObjects) end) if CurrentSaveInstanceWindow then CurrentSaveInstanceWindow:Destroy() CurrentSaveInstanceWindow = nil if explorerPanel.Parent:FindFirstChild("SaveInstanceOverwriteCaution") then explorerPanel.Parent.SaveInstanceOverwriteCaution:Destroy() end end end else ypcall(function() if SaveInstance then SaveInstance(inst,filename.Text..".rbxmx",not saveObjects) else _G.SaveInstance(inst,filename.Text,not saveObjects) end end) if CurrentSaveInstanceWindow then CurrentSaveInstanceWindow:Destroy() CurrentSaveInstanceWindow = nil if explorerPanel.Parent:FindFirstChild("SaveInstanceOverwriteCaution") then explorerPanel.Parent.SaveInstanceOverwriteCaution:Destroy() end end end end) CurrentSaveInstanceWindow.MainWindow.Cancel.MouseButton1Up:connect(function() if CurrentSaveInstanceWindow then CurrentSaveInstanceWindow:Destroy() CurrentSaveInstanceWindow = nil if explorerPanel.Parent:FindFirstChild("SaveInstanceOverwriteCaution") then explorerPanel.Parent.SaveInstanceOverwriteCaution:Destroy() end end end) CurrentSaveInstanceWindow.MainWindow.SaveObjects.MouseButton1Up:connect(function() if saveObjects then saveObjects = false CurrentSaveInstanceWindow.MainWindow.SaveObjects.enabled.Visible = false else saveObjects = true CurrentSaveInstanceWindow.MainWindow.SaveObjects.enabled.Visible = true end end) end function DestroyRightClick() if currentRightClickMenu then currentRightClickMenu:Destroy() currentRightClickMenu = nil end if CurrentInsertObjectWindow and CurrentInsertObjectWindow.Visible then CurrentInsertObjectWindow.Visible = false end end function rightClickMenu(sObj) local mouse = game.Players.LocalPlayer:GetMouse() currentRightClickMenu = CreateRightClickMenu( {"Cut","Copy","Paste Into","Duplicate","Delete","Group","Ungroup","Select Children","Teleport To","Insert Part","Insert Object","View Script","Save Instance","Call Function","Call Remote"}, "", false, function(option) if option == "Cut" then if not Option.Modifiable then return end clipboard = {} local list = Selection.List local cut = {} for i = 1,#list do local obj = list[i]:Clone() if obj then table.insert(clipboard,obj) table.insert(cut,list[i]) end end for i = 1,#cut do pcall(delete,cut[i]) end updateActions() elseif option == "Copy" then if not Option.Modifiable then return end clipboard = {} local list = Selection.List for i = 1,#list do table.insert(clipboard,list[i]:Clone()) end updateActions() elseif option == "Paste Into" then if not Option.Modifiable then return end local parent = Selection.List[1] or workspace for i = 1,#clipboard do clipboard[i]:Clone().Parent = parent end elseif option == "Duplicate" then if not Option.Modifiable then return end local list = Selection:Get() for i = 1,#list do list[i]:Clone().Parent = Selection.List[1].Parent or workspace end elseif option == "Delete" then if not Option.Modifiable then return end local list = Selection:Get() for i = 1,#list do pcall(delete,list[i]) end Selection:Set({}) elseif option == "Group" then if not Option.Modifiable then return end local newModel = Instance.new("Model") local list = Selection:Get() newModel.Parent = Selection.List[1].Parent or workspace for i = 1,#list do list[i].Parent = newModel end Selection:Set({}) elseif option == "Ungroup" then if not Option.Modifiable then return end local ungrouped = {} local list = Selection:Get() for i = 1,#list do if list[i]:IsA("Model") then for i2,v2 in pairs(list[i]:GetChildren()) do v2.Parent = list[i].Parent or workspace table.insert(ungrouped,v2) end pcall(delete,list[i]) end end Selection:Set({}) if SettingsRemote:Invoke("SelectUngrouped") then for i,v in pairs(ungrouped) do Selection:Add(v) end end elseif option == "Select Children" then if not Option.Modifiable then return end local list = Selection:Get() Selection:Set({}) Selection:StopUpdates() for i = 1,#list do for i2,v2 in pairs(list[i]:GetChildren()) do Selection:Add(v2) end end Selection:ResumeUpdates() elseif option == "Teleport To" then if not Option.Modifiable then return end local list = Selection:Get() for i = 1,#list do if list[i]:IsA("BasePart") then pcall(function() game.Players.LocalPlayer.Character.HumanoidRootPart.CFrame = list[i].CFrame end) break end end elseif option == "Insert Part" then if not Option.Modifiable then return end local insertedParts = {} local list = Selection:Get() for i = 1,#list do pcall(function() local newPart = Instance.new("Part") newPart.Parent = list[i] newPart.CFrame = CFrame.new(game.Players.LocalPlayer.Character.Head.Position) + Vector3.new(0,3,0) table.insert(insertedParts,newPart) end) end elseif option == "Save Instance" then if not Option.Modifiable then return end local list = Selection:Get() if #list == 1 then list[1].Archivable = true ypcall(function()PromptSaveInstance(list[1]:Clone())end) elseif #list > 1 then local newModel = Instance.new("Model") newModel.Name = "SavedInstances" for i = 1,#list do ypcall(function() list[i].Archivable = true list[i]:Clone().Parent = newModel end) end PromptSaveInstance(newModel) end elseif option == "Call Remote" then if not Option.Modifiable then return end local list = Selection:Get() for i = 1,#list do if list[i]:IsA("RemoteFunction") or list[i]:IsA("RemoteEvent") then PromptRemoteCaller(list[i]) break end end elseif option == "View Script" then if not Option.Modifiable then return end local list = Selection:Get() for i = 1,#list do if list[i]:IsA("LocalScript") or list[i]:IsA("ModuleScript") then ScriptEditorEvent:Fire(list[i]) end end end end) currentRightClickMenu.Parent = explorerPanel.Parent currentRightClickMenu.Position = UDim2.new(0,mouse.X,0,mouse.Y) if currentRightClickMenu.AbsolutePosition.X + currentRightClickMenu.AbsoluteSize.X > explorerPanel.AbsolutePosition.X + explorerPanel.AbsoluteSize.X then currentRightClickMenu.Position = UDim2.new(0, explorerPanel.AbsolutePosition.X + explorerPanel.AbsoluteSize.X - currentRightClickMenu.AbsoluteSize.X, 0, mouse.Y) end end local function cancelReparentDrag()end local function cancelSelectDrag()end do local listEntries = {} local nameConnLookup = {} local mouseDrag = Create('ImageButton',{ Name = "MouseDrag"; Position = UDim2.new(-0.25,0,-0.25,0); Size = UDim2.new(1.5,0,1.5,0); Transparency = 1; AutoButtonColor = false; Active = true; ZIndex = 10; }) local function dragSelect(last,add,button) local connDrag local conUp conDrag = mouseDrag.MouseMoved:connect(function(x,y) local pos = Vector2.new(x,y) - listFrame.AbsolutePosition local size = listFrame.AbsoluteSize if pos.x size.x or pos.y size.y then return end local i = math.ceil(pos.y/ENTRY_BOUND) + scrollBar.ScrollIndex -- Mouse may have made a large step, so interpolate between the -- last index and the current. for n = ilast and i or last do local node = TreeList[n] if node then if add then Selection:Add(node.Object) else Selection:Remove(node.Object) end end end last = i end) function cancelSelectDrag() mouseDrag.Parent = nil conDrag:disconnect() conUp:disconnect() function cancelSelectDrag()end end conUp = mouseDrag:connect(cancelSelectDrag) mouseDrag.Parent = GetScreen(listFrame) end local function dragReparent(object,dragGhost,clickPos,ghostOffset) local connDrag local conUp local conUp2 local parentIndex = nil local dragged = false local parentHighlight = Create('Frame',{ Transparency = 1; Visible = false; Create('Frame',{ BorderSizePixel = 0; BackgroundColor3 = Color3.new(0,0,0); BackgroundTransparency = 0.1; Position = UDim2.new(0,0,0,0); Size = UDim2.new(1,0,0,1); }); Create('Frame',{ BorderSizePixel = 0; BackgroundColor3 = Color3.new(0,0,0); BackgroundTransparency = 0.1; Position = UDim2.new(1,0,0,0); Size = UDim2.new(0,1,1,0); }); Create('Frame',{ BorderSizePixel = 0; BackgroundColor3 = Color3.new(0,0,0); BackgroundTransparency = 0.1; Position = UDim2.new(0,0,1,0); Size = UDim2.new(1,0,0,1); }); Create('Frame',{ BorderSizePixel = 0; BackgroundColor3 = Color3.new(0,0,0); BackgroundTransparency = 0.1; Position = UDim2.new(0,0,0,0); Size = UDim2.new(0,1,1,0); }); }) SetZIndex(parentHighlight,9) conDrag = mouseDrag.MouseMoved:connect(function(x,y) local dragPos = Vector2.new(x,y) if dragged then local pos = dragPos - listFrame.AbsolutePosition local size = listFrame.AbsoluteSize parentIndex = nil parentHighlight.Visible = false if pos.x >= 0 and pos.x = 0 and pos.y 8 then dragged = true SetZIndex(dragGhost,9) dragGhost.IndentFrame.Transparency = 0.25 dragGhost.IndentFrame.EntryText.TextColor3 = GuiColor.TextSelected dragGhost.Position = UDim2.new(0,dragPos.x+ghostOffset.x,0,dragPos.y+ghostOffset.y) dragGhost.Parent = GetScreen(listFrame) parentHighlight.Parent = listFrame end end) function cancelReparentDrag() mouseDrag.Parent = nil conDrag:disconnect() conUp:disconnect() conUp2:disconnect() dragGhost:Destroy() parentHighlight:Destroy() function cancelReparentDrag()end end local wasSelected = Selection.Selected[object] if not wasSelected and Option.Selectable then Selection:Set({object}) end conUp = mouseDrag.MouseButton1Up:connect(function() cancelReparentDrag() if dragged then if parentIndex then local parentNode = TreeList[parentIndex + scrollBar.ScrollIndex] if parentNode then parentNode.Expanded = true local parentObj = parentNode.Object local function parent(a,b) a.Parent = b end if Option.Selectable then local list = Selection.List for i = 1,#list do pcall(parent,list[i],parentObj) end else pcall(parent,object,parentObj) end end end else -- do selection click if wasSelected and Option.Selectable then Selection:Set({}) end end end) conUp2 = mouseDrag.MouseButton2Down:connect(function() cancelReparentDrag() end) mouseDrag.Parent = GetScreen(listFrame) end local entryTemplate = Create('ImageButton',{ Name = "Entry"; Transparency = 1; AutoButtonColor = false; Position = UDim2.new(0,0,0,0); Size = UDim2.new(1,0,0,ENTRY_SIZE); Create('Frame',{ Name = "IndentFrame"; BackgroundTransparency = 1; BackgroundColor3 = GuiColor.Selected; BorderColor3 = GuiColor.BorderSelected; Position = UDim2.new(0,0,0,0); Size = UDim2.new(1,0,1,0); Create(Icon('ImageButton',0),{ Name = "Expand"; AutoButtonColor = false; Position = UDim2.new(0,-GUI_SIZE,0.5,-GUI_SIZE/2); Size = UDim2.new(0,GUI_SIZE,0,GUI_SIZE); }); Create(Icon(nil,0),{ Name = "ExplorerIcon"; Position = UDim2.new(0,2+ENTRY_PADDING,0.5,-GUI_SIZE/2); Size = UDim2.new(0,GUI_SIZE,0,GUI_SIZE); }); Create('TextLabel',{ Name = "EntryText"; BackgroundTransparency = 1; TextColor3 = GuiColor.Text; TextXAlignment = 'Left'; TextYAlignment = 'Center'; Font = FONT; FontSize = FONT_SIZE; Text = ""; Position = UDim2.new(0,2+ENTRY_SIZE+4,0,0); Size = UDim2.new(1,-2,1,0); }); }); }) function scrollBar.UpdateCallback(self) for i = 1,self.VisibleSpace do local node = TreeList[i + self.ScrollIndex] if node then local entry = listEntries[i] if not entry then entry = Create(entryTemplate:Clone(),{ Position = UDim2.new(0,2,0,ENTRY_BOUND*(i-1)+2); Size = UDim2.new(0,nodeWidth,0,ENTRY_SIZE); ZIndex = listFrame.ZIndex; }) listEntries[i] = entry local expand = entry.IndentFrame.Expand expand.MouseEnter:connect(function() local node = TreeList[i + self.ScrollIndex] if #node > 0 then if node.Expanded then Icon(expand,NODE_EXPANDED_OVER) else Icon(expand,NODE_COLLAPSED_OVER) end end end) expand.MouseLeave:connect(function() local node = TreeList[i + self.ScrollIndex] if #node > 0 then if node.Expanded then Icon(expand,NODE_EXPANDED) else Icon(expand,NODE_COLLAPSED) end end end) expand.MouseButton1Down:connect(function() local node = TreeList[i + self.ScrollIndex] if #node > 0 then node.Expanded = not node.Expanded if node.Object == explorerPanel.Parent and node.Expanded then CreateCaution("Warning","Please be careful when editing instances inside here, this is like the System32 of Dex and modifying objects here can break Dex.") end -- use raw update so the list updates instantly rawUpdateList() end end) entry.MouseButton1Down:connect(function(x,y) local node = TreeList[i + self.ScrollIndex] DestroyRightClick() if GetAwaitRemote:Invoke() then bindSetAwaiting:Fire(node.Object) return end if not HoldingShift then lastSelectedNode = i + self.ScrollIndex end if HoldingShift and not filteringWorkspace() then if lastSelectedNode then if i + self.ScrollIndex - lastSelectedNode > 0 then Selection:StopUpdates() for i2 = 1, i + self.ScrollIndex - lastSelectedNode do local newNode = TreeList[lastSelectedNode + i2] if newNode then Selection:Add(newNode.Object) end end Selection:ResumeUpdates() else Selection:StopUpdates() for i2 = i + self.ScrollIndex - lastSelectedNode, 1 do local newNode = TreeList[lastSelectedNode + i2] if newNode then Selection:Add(newNode.Object) end end Selection:ResumeUpdates() end end return end if HoldingCtrl then if Selection.Selected[node.Object] then Selection:Remove(node.Object) else Selection:Add(node.Object) end return end if Option.Modifiable then local pos = Vector2.new(x,y) dragReparent(node.Object,entry:Clone(),pos,entry.AbsolutePosition-pos) elseif Option.Selectable then if Selection.Selected[node.Object] then Selection:Set({}) else Selection:Set({node.Object}) end dragSelect(i+self.ScrollIndex,true,'MouseButton1Up') end end) entry.MouseButton2Down:connect(function() if not Option.Selectable then return end DestroyRightClick() curSelect = entry local node = TreeList[i + self.ScrollIndex] if GetAwaitRemote:Invoke() then bindSetAwaiting:Fire(node.Object) return end if not Selection.Selected[node.Object] then Selection:Set({node.Object}) end end) entry.MouseButton2Up:connect(function() if not Option.Selectable then return end local node = TreeList[i + self.ScrollIndex] if checkMouseInGui(curSelect) then rightClickMenu(node.Object) end end) entry.Parent = listFrame end entry.Visible = true local object = node.Object -- update expand icon if #node == 0 then entry.IndentFrame.Expand.Visible = false elseif node.Expanded then Icon(entry.IndentFrame.Expand,NODE_EXPANDED) entry.IndentFrame.Expand.Visible = true else Icon(entry.IndentFrame.Expand,NODE_COLLAPSED) entry.IndentFrame.Expand.Visible = true end -- update explorer icon Icon(entry.IndentFrame.ExplorerIcon,ExplorerIndex[object.ClassName] or 0) -- update indentation local w = (node.Depth)*(2+ENTRY_PADDING+GUI_SIZE) entry.IndentFrame.Position = UDim2.new(0,w,0,0) entry.IndentFrame.Size = UDim2.new(1,-w,1,0) -- update name change detection if nameConnLookup[entry] then nameConnLookup[entry]:disconnect() end local text = entry.IndentFrame.EntryText text.Text = object.Name nameConnLookup[entry] = node.Object.Changed:connect(function(p) if p == 'Name' then text.Text = object.Name end end) -- update selection entry.IndentFrame.Transparency = node.Selected and 0 or 1 text.TextColor3 = GuiColor[node.Selected and 'TextSelected' or 'Text'] entry.Size = UDim2.new(0,nodeWidth,0,ENTRY_SIZE) elseif listEntries[i] then listEntries[i].Visible = false end end for i = self.VisibleSpace+1,self.TotalSpace do local entry = listEntries[i] if entry then listEntries[i] = nil entry:Destroy() end end end function scrollBarH.UpdateCallback(self) for i = 1,scrollBar.VisibleSpace do local node = TreeList[i + scrollBar.ScrollIndex] if node then local entry = listEntries[i] if entry then entry.Position = UDim2.new(0,2 - scrollBarH.ScrollIndex,0,ENTRY_BOUND*(i-1)+2) end end end end Connect(listFrame.Changed,function(p) if p == 'AbsoluteSize' then rawUpdateSize() end end) local wheelAmount = 6 explorerPanel.MouseWheelForward:connect(function() if scrollBar.VisibleSpace - 1 > wheelAmount then scrollBar:ScrollTo(scrollBar.ScrollIndex - wheelAmount) else scrollBar:ScrollTo(scrollBar.ScrollIndex - scrollBar.VisibleSpace) end end) explorerPanel.MouseWheelBackward:connect(function() if scrollBar.VisibleSpace - 1 > wheelAmount then scrollBar:ScrollTo(scrollBar.ScrollIndex + wheelAmount) else scrollBar:ScrollTo(scrollBar.ScrollIndex + scrollBar.VisibleSpace) end end) end ---------------------------------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- ---- Object detection -- Inserts `v` into `t` at `i`. Also sets `Index` field in `v`. local function insert(t,i,v) for n = #t,i,-1 do local v = t[n] v.Index = n+1 t[n+1] = v end v.Index = i t[i] = v end -- Removes `i` from `t`. Also sets `Index` field in removed value. local function remove(t,i) local v = t[i] for n = i+1,#t do local v = t[n] v.Index = n-1 t[n-1] = v end t[#t] = nil v.Index = 0 return v end -- Returns how deep `o` is in the tree. local function depth(o) local d = -1 while o do o = o.Parent d = d + 1 end return d end local connLookup = {} -- Returns whether a node would be present in the tree list local function nodeIsVisible(node) local visible = true node = node.Parent while node and visible do visible = visible and node.Expanded node = node.Parent end return visible end -- Removes an object's tree node. Called when the object stops existing in the -- game tree. local function removeObject(object) local objectNode = NodeLookup[object] if not objectNode then return end local visible = nodeIsVisible(objectNode) Selection:Remove(object,true) local parent = objectNode.Parent remove(parent,objectNode.Index) NodeLookup[object] = nil connLookup[object]:disconnect() connLookup[object] = nil if visible then updateList() elseif nodeIsVisible(parent) then updateScroll() end end -- Moves a tree node to a new parent. Called when an existing object's parent -- changes. local function moveObject(object,parent) local objectNode = NodeLookup[object] if not objectNode then return end local parentNode = NodeLookup[parent] if not parentNode then return end local visible = nodeIsVisible(objectNode) remove(objectNode.Parent,objectNode.Index) objectNode.Parent = parentNode objectNode.Depth = depth(object) local function r(node,d) for i = 1,#node do node[i].Depth = d r(node[i],d+1) end end r(objectNode,objectNode.Depth+1) insert(parentNode,#parentNode+1,objectNode) if visible or nodeIsVisible(objectNode) then updateList() elseif nodeIsVisible(objectNode.Parent) then updateScroll() end end -- ScriptContext['/Libraries/LibraryRegistration/LibraryRegistration'] -- This RobloxLocked object lets me index its properties for some reason local function check(object) return object.AncestryChanged end -- Creates a new tree node from an object. Called when an object starts -- existing in the game tree. local function addObject(object,noupdate) if script then -- protect against naughty RobloxLocked objects local s = pcall(check,object) if not s then return end end local parentNode = NodeLookup[object.Parent] if not parentNode then return end local objectNode = { Object = object; Parent = parentNode; Index = 0; Expanded = false; Selected = false; Depth = depth(object); } connLookup[object] = Connect(object.AncestryChanged,function(c,p) if c == object then if p == nil then removeObject(c) else moveObject(c,p) end end end) NodeLookup[object] = objectNode insert(parentNode,#parentNode+1,objectNode) if not noupdate then if nodeIsVisible(objectNode) then updateList() elseif nodeIsVisible(objectNode.Parent) then updateScroll() end end end local function makeObject(obj,par) local newObject = Instance.new(obj.ClassName) for i,v in pairs(obj.Properties) do ypcall(function() local newProp newProp = ToPropValue(v.Value,v.Type) newObject[v.Name] = newProp end) end newObject.Parent = par end local function writeObject(obj) local newObject = {ClassName = obj.ClassName, Properties = {}} for i,v in pairs(RbxApi.GetProperties(obj.className)) do if v["Name"] ~= "Parent" then print("thispassed") table.insert(newObject.Properties,{Name = v["Name"], Type = v["ValueType"], Value = tostring(obj[v["Name"]])}) end end return newObject end local function buildDexStorage() local localDexStorage local success,err = ypcall(function() localDexStorage = game:GetObjects("rbxasset://DexStorage.rbxm")[1] end) if success and localDexStorage then for i,v in pairs(localDexStorage:GetChildren()) do ypcall(function() v.Parent = DexStorageMain end) end end updateDexStorageListeners() --[[ local localDexStorage = readfile(getelysianpath().."DexStorage.txt")--game:GetService("CookiesService"):GetCookieValue("DexStorage") --local success,err = pcall(function() if localDexStorage then local objTable = game:GetService("HttpService"):JSONDecode(localDexStorage) for i,v in pairs(objTable) do makeObject(v,DexStorageMain) end end --end) --]] end local dexStorageDebounce = false local dexStorageListeners = {} local function updateDexStorage() if dexStorageDebounce then return end dexStorageDebounce = true wait() pcall(function() saveinstance("content//DexStorage.rbxm",DexStorageMain) end) updateDexStorageListeners() dexStorageDebounce = false --[[ local success,err = ypcall(function() local objs = {} for i,v in pairs(DexStorageMain:GetChildren()) do table.insert(objs,writeObject(v)) end writefile(getelysianpath().."DexStorage.txt",game:GetService("HttpService"):JSONEncode(objs)) --game:GetService("CookiesService"):SetCookieValue("DexStorage",game:GetService("HttpService"):JSONEncode(objs)) end) if err then CreateCaution("DexStorage Save Fail!","DexStorage broke! If you see this message, report to Raspberry Pi!") end print("hi") --]] end function updateDexStorageListeners() for i,v in pairs(dexStorageListeners) do v:Disconnect() end dexStorageListeners = {} for i,v in pairs(DexStorageMain:GetChildren()) do pcall(function() local ev = v.Changed:connect(updateDexStorage) table.insert(dexStorageListeners,ev) end) end end do NodeLookup[workspace.Parent] = { Object = workspace.Parent; Parent = nil; Index = 0; Expanded = true; } if DexStorageEnabled then NodeLookup[DexStorage] = { Object = DexStorage; Parent = nil; Index = 0; Expanded = true; } end if NilStorageEnabled then NodeLookup[NilStorage] = { Object = NilStorage; Parent = nil; Index = 0; Expanded = true; } end Connect(game.DescendantAdded,addObject) Connect(game.DescendantRemoving,removeObject) if DexStorageEnabled then --[[ if readfile(getelysianpath().."DexStorage.txt") == nil then writefile(getelysianpath().."DexStorage.txt","") end --]] buildDexStorage() Connect(DexStorage.DescendantAdded,addObject) Connect(DexStorage.DescendantRemoving,removeObject) Connect(DexStorage.DescendantAdded,updateDexStorage) Connect(DexStorage.DescendantRemoving,updateDexStorage) end if NilStorageEnabled then Connect(NilStorage.DescendantAdded,addObject) Connect(NilStorage.DescendantRemoving,removeObject) local currentTable = get_nil_instances() spawn(function() while wait() do if #currentTable ~= #get_nil_instances() then currentTable = get_nil_instances() --NilStorageMain:ClearAllChildren() for i,v in pairs(get_nil_instances()) do if v ~= NilStorage and v ~= DexStorage then pcall(function() v.Parent = NilStorageMain end) --[[ local newNil = v newNil.Archivable = true newNil:Clone().Parent = NilStorageMain --]] end end end end end) end local function get(o) return o:GetChildren() end local function r(o) local s,children = pcall(get,o) if s then for i = 1,#children do addObject(children[i],true) r(children[i]) end end end r(workspace.Parent) if DexStorageEnabled then r(DexStorage) end if NilStorageEnabled then r(NilStorage) end scrollBar.VisibleSpace = math.ceil(listFrame.AbsoluteSize.y/ENTRY_BOUND) updateList() end ---------------------------------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- ---- Actions local actionButtons do actionButtons = {} local totalActions = 1 local currentActions = totalActions local function makeButton(icon,over,name,vis,cond) local buttonEnabled = false local button = Create(Icon('ImageButton',icon),{ Name = name .. "Button"; Visible = Option.Modifiable and Option.Selectable; Position = UDim2.new(1,-(GUI_SIZE+2)*currentActions+2,0.25,-GUI_SIZE/2); Size = UDim2.new(0,GUI_SIZE,0,GUI_SIZE); Parent = headerFrame; }) local tipText = Create('TextLabel',{ Name = name .. "Text"; Text = name; Visible = false; BackgroundTransparency = 1; TextXAlignment = 'Right'; Font = FONT; FontSize = FONT_SIZE; Position = UDim2.new(0,0,0,0); Size = UDim2.new(1,-(GUI_SIZE+2)*totalActions,1,0); Parent = headerFrame; }) button.MouseEnter:connect(function() if buttonEnabled then button.BackgroundTransparency = 0.9 end --Icon(button,over) --tipText.Visible = true end) button.MouseLeave:connect(function() button.BackgroundTransparency = 1 --Icon(button,icon) --tipText.Visible = false end) currentActions = currentActions + 1 actionButtons[#actionButtons+1] = {Obj = button,Cond = cond} QuickButtons[#actionButtons+1] = {Obj = button,Cond = cond, Toggle = function(on) if on then buttonEnabled = true Icon(button,over) else buttonEnabled = false Icon(button,icon) end end} return button end --local clipboard = {} local function delete(o) Destroy(o) end makeButton(ACTION_EDITQUICKACCESS,ACTION_EDITQUICKACCESS,"Options",true,function()return true end).MouseButton1Click:connect(function() end) -- DELETE makeButton(ACTION_DELETE,ACTION_DELETE_OVER,"Delete",true,function() return #Selection:Get() > 0 end).MouseButton1Click:connect(function() if not Option.Modifiable then return end local list = Selection:Get() for i = 1,#list do pcall(delete,list[i]) end Selection:Set({}) end) -- PASTE makeButton(ACTION_PASTE,ACTION_PASTE_OVER,"Paste",true,function() return #Selection:Get() > 0 and #clipboard > 0 end).MouseButton1Click:connect(function() if not Option.Modifiable then return end local parent = Selection.List[1] or workspace for i = 1,#clipboard do clipboard[i]:Clone().Parent = parent end end) -- COPY makeButton(ACTION_COPY,ACTION_COPY_OVER,"Copy",true,function() return #Selection:Get() > 0 end).MouseButton1Click:connect(function() if not Option.Modifiable then return end clipboard = {} local list = Selection.List for i = 1,#list do table.insert(clipboard,list[i]:Clone()) end updateActions() end) -- CUT makeButton(ACTION_CUT,ACTION_CUT_OVER,"Cut",true,function() return #Selection:Get() > 0 end).MouseButton1Click:connect(function() if not Option.Modifiable then return end clipboard = {} local list = Selection.List local cut = {} for i = 1,#list do local obj = list[i]:Clone() if obj then table.insert(clipboard,obj) table.insert(cut,list[i]) end end for i = 1,#cut do pcall(delete,cut[i]) end updateActions() end) -- FREEZE makeButton(ACTION_FREEZE,ACTION_FREEZE,"Freeze",true,function() return true end) -- ADD/REMOVE STARRED makeButton(ACTION_ADDSTAR,ACTION_ADDSTAR_OVER,"Star",true,function() return #Selection:Get() > 0 end) -- STARRED makeButton(ACTION_STARRED,ACTION_STARRED,"Starred",true,function() return true end) -- SORT -- local actionSort = makeButton(ACTION_SORT,ACTION_SORT_OVER,"Sort") end ---------------------------------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- ---- Option Bindables do local optionCallback = { Modifiable = function(value) for i = 1,#actionButtons do actionButtons[i].Obj.Visible = value and Option.Selectable end cancelReparentDrag() end; Selectable = function(value) for i = 1,#actionButtons do actionButtons[i].Obj.Visible = value and Option.Modifiable end cancelSelectDrag() Selection:Set({}) end; } local bindSetOption = explorerPanel:FindFirstChild("SetOption") if not bindSetOption then bindSetOption = Create('BindableFunction',{Name = "SetOption"}) bindSetOption.Parent = explorerPanel end bindSetOption.OnInvoke = function(optionName,value) if optionCallback[optionName] then Option[optionName] = value optionCallback[optionName](value) end end local bindGetOption = explorerPanel:FindFirstChild("GetOption") if not bindGetOption then bindGetOption = Create('BindableFunction',{Name = "GetOption"}) bindGetOption.Parent = explorerPanel end bindGetOption.OnInvoke = function(optionName) if optionName then return Option[optionName] else local options = {} for k,v in pairs(Option) do options[k] = v end return options end end end function SelectionVar() return Selection end Input.InputBegan:connect(function(key) if key.KeyCode == Enum.KeyCode.LeftControl then HoldingCtrl = true end if key.KeyCode == Enum.KeyCode.LeftShift then HoldingShift = true end end) Input.InputEnded:connect(function(key) if key.KeyCode == Enum.KeyCode.LeftControl then HoldingCtrl = false end if key.KeyCode == Enum.KeyCode.LeftShift then HoldingShift = false end end) while RbxApi == nil do RbxApi = GetApiRemote:Invoke() wait() end explorerFilter.Changed:connect(function(prop) if prop == "Text" then rawUpdateList() end end) CurrentInsertObjectWindow = CreateInsertObjectMenu( GetClasses(), "", false, function(option) CurrentInsertObjectWindow.Visible = false local list = SelectionVar():Get() for i = 1,#list do pcall(function() Instance.new(option,list[i]) end) end DestroyRightClick() end ) end) spawn(function() --[[ Change log: 09/18 Fixed checkbox mouseover sprite Encapsulated checkbox creation into separate method Fixed another checkbox issue 09/15 Invalid input is ignored instead of setting to default of that data type Consolidated control methods and simplified them All input goes through ToValue method Fixed position of BrickColor palette Made DropDown appear above row if it would otherwise exceed the page height Cleaned up stylesheets 09/14 Made properties window scroll when mouse wheel scrolled Object/Instance and Color3 data types handled properly Multiple BrickColor controls interfering with each other fixed Added support for Content data type --]] wait(0.2) local print = function(s) print(tostring(s)) end -- Services local Teams = game:GetService("Teams") local Workspace = game:GetService("Workspace") local Debris = game:GetService("Debris") local ContentProvider = game:GetService("ContentProvider") local Players = game:GetService("Players") local ReplicatedStorage = game:GetService("ReplicatedStorage") --[[ RbxApi.Classes RbxApi.Enums RbxApi.GetProperties(className) RbxApi.IsEnum(valueType) --]] -- Styles local function CreateColor3(r, g, b) return Color3.new(r/255,g/255,b/255) end local Styles = { Font = Enum.Font.Arial; Margin = 5; Black = CreateColor3(0,0,0); White = CreateColor3(255,255,255); } local Row = { Font = Styles.Font; FontSize = Enum.FontSize.Size14; TextXAlignment = Enum.TextXAlignment.Left; TextColor = Styles.Black; TextColorOver = Styles.White; TextLockedColor = CreateColor3(120,120,120); Height = 24; BorderColor = CreateColor3(216,216,216); BackgroundColor = Styles.White; BackgroundColorAlternate = CreateColor3(246,246,246); BackgroundColorMouseover = CreateColor3(211,224,244); TitleMarginLeft = 15; } local DropDown = { Font = Styles.Font; FontSize = Enum.FontSize.Size14; TextColor = CreateColor3(0,0,0); TextColorOver = Styles.White; TextXAlignment = Enum.TextXAlignment.Left; Height = 16; BackColor = Styles.White; BackColorOver = CreateColor3(86,125,188); BorderColor = CreateColor3(216,216,216); BorderSizePixel = 2; ArrowColor = CreateColor3(160,160,160); ArrowColorOver = Styles.Black; } local BrickColors = { BoxSize = 13; BorderSizePixel = 1; BorderColor = CreateColor3(160,160,160); FrameColor = CreateColor3(160,160,160); Size = 20; Padding = 4; ColorsPerRow = 8; OuterBorder = 1; OuterBorderColor = Styles.Black; } wait(1) local Gui = D_E_X local PropertiesFrame = Gui:WaitForChild("PropertiesFrame") local ExplorerFrame = Gui:WaitForChild("ExplorerPanel") local bindGetSelection = ExplorerFrame.TotallyNotGetSelection local bindSelectionChanged = ExplorerFrame.TotallyNotSelectionChanged local bindGetApi = PropertiesFrame.GetApi local bindGetAwait = PropertiesFrame.GetAwaiting local bindSetAwait = PropertiesFrame.SetAwaiting local ContentUrl = ContentProvider.BaseUrl .. "asset/?id=" local SettingsRemote = Gui:WaitForChild("SettingsPanel"):WaitForChild("GetSetting") local propertiesSearch = PropertiesFrame.Header.TextBox local AwaitingObjectValue = false local AwaitingObjectObj local AwaitingObjectProp function searchingProperties() if propertiesSearch.Text ~= "" and propertiesSearch.Text ~= "Search Properties" then return true end return false end local function GetSelection() local selection = bindGetSelection:Invoke() if #selection == 0 then return nil else return selection end end -- Number local function Round(number, decimalPlaces) return tonumber(string.format("%." .. (decimalPlaces or 0) .. "f", number)) end -- Strings local function Split(str, delimiter) local start = 1 local t = {} while true do local pos = string.find (str, delimiter, start, true) if not pos then break end table.insert (t, string.sub (str, start, pos - 1)) start = pos + string.len (delimiter) end table.insert (t, string.sub (str, start)) return t end -- Data Type Handling local function ToString(value, type) if type == "float" then return tostring(Round(value,2)) elseif type == "Content" then if string.find(value,"/asset") then local match = string.find(value, "=") + 1 local id = string.sub(value, match) return id else return tostring(value) end elseif type == "Vector2" then local x = value.x local y = value.y return string.format("%g, %g", x,y) elseif type == "Vector3" then local x = value.x local y = value.y local z = value.z return string.format("%g, %g, %g", x,y,z) elseif type == "Color3" then local r = value.r local g = value.g local b = value.b return string.format("%d, %d, %d", r*255,g*255,b*255) elseif type == "UDim2" then local xScale = value.X.Scale local xOffset = value.X.Offset local yScale = value.Y.Scale local yOffset = value.Y.Offset return string.format("{%d, %d}, {%d, %d}", xScale, xOffset, yScale, yOffset) else return tostring(value) end end local function ToValue(value,type) if type == "Vector2" then local list = Split(value,",") if #list < 2 then return nil end local x = tonumber(list[1]) or 0 local y = tonumber(list[2]) or 0 return Vector2.new(x,y) elseif type == "Vector3" then local list = Split(value,",") if #list < 3 then return nil end local x = tonumber(list[1]) or 0 local y = tonumber(list[2]) or 0 local z = tonumber(list[3]) or 0 return Vector3.new(x,y,z) elseif type == "Color3" then local list = Split(value,",") if #list < 3 then return nil end local r = tonumber(list[1]) or 0 local g = tonumber(list[2]) or 0 local b = tonumber(list[3]) or 0 return Color3.new(r/255,g/255, b/255) elseif type == "UDim2" then local list = Split(string.gsub(string.gsub(value, "{", ""),"}",""),",") if #list < 4 then return nil end local xScale = tonumber(list[1]) or 0 local xOffset = tonumber(list[2]) or 0 local yScale = tonumber(list[3]) or 0 local yOffset = tonumber(list[4]) or 0 return UDim2.new(xScale, xOffset, yScale, yOffset) elseif type == "Content" then if tonumber(value) ~= nil then value = ContentUrl .. value end return value elseif type == "float" or type == "int" or type == "double" then return tonumber(value) elseif type == "string" then return value elseif type == "NumberRange" then local list = Split(value,",") if #list == 1 then if tonumber(list[1]) == nil then return nil end local newVal = tonumber(list[1]) or 0 return NumberRange.new(newVal) end if #list < 2 then return nil end local x = tonumber(list[1]) or 0 local y = tonumber(list[2]) or 0 return NumberRange.new(x,y) else return nil end end -- Tables local function CopyTable(T) local t2 = {} for k,v in pairs(T) do t2[k] = v end return t2 end local function SortTable(T) table.sort(T, function(x,y) return x.Name Spritesheet.Width then x = 0 y = y + Sprite.Height end end end local function GetCheckboxImageName(checked, readOnly, mouseover) if checked then if readOnly then return "checked_disabled" elseif mouseover then return "checked_over" else return "checked" end else if readOnly then return "unchecked_disabled" elseif mouseover then return "unchecked_over" else return "unchecked" end end end local MAP_ID = 418720155 -- Gui Controls -- ---- IconMap ---- -- Image size: 256px x 256px -- Icon size: 16px x 16px -- Padding between each icon: 2px -- Padding around image edge: 1px -- Total icons: 14 x 14 (196) local Icon do local iconMap = 'http://www.roblox.com/asset/?id=' .. MAP_ID game:GetService('ContentProvider'):Preload(iconMap) local iconDehash do -- 14 x 14, 0-based input, 0-based output local f=math.floor function iconDehash(h) return f(h/14%14),f(h%14) end end function Icon(IconFrame,index) local row,col = iconDehash(index) local mapSize = Vector2.new(256,256) local pad,border = 2,1 local iconSize = 16 local class = 'Frame' if type(IconFrame) == 'string' then class = IconFrame IconFrame = nil end if not IconFrame then IconFrame = Create(class,{ Name = "Icon"; BackgroundTransparency = 1; ClipsDescendants = true; Create('ImageLabel',{ Name = "IconMap"; Active = false; BackgroundTransparency = 1; Image = iconMap; Size = UDim2.new(mapSize.x/iconSize,0,mapSize.y/iconSize,0); }); }) end IconFrame.IconMap.Position = UDim2.new(-col - (pad*(col+1) + border)/iconSize,0,-row - (pad*(row+1) + border)/iconSize,0) return IconFrame end end local function CreateCell() local tableCell = Instance.new("Frame") tableCell.Size = UDim2.new(0.5, -1, 1, 0) tableCell.BackgroundColor3 = Row.BackgroundColor tableCell.BorderColor3 = Row.BorderColor return tableCell end local function CreateLabel(readOnly) local label = Instance.new("TextLabel") label.Font = Row.Font label.FontSize = Row.FontSize label.TextXAlignment = Row.TextXAlignment label.BackgroundTransparency = 1 if readOnly then label.TextColor3 = Row.TextLockedColor else label.TextColor3 = Row.TextColor end return label end local function CreateTextButton(readOnly, onClick) local button = Instance.new("TextButton") button.Font = Row.Font button.FontSize = Row.FontSize button.TextXAlignment = Row.TextXAlignment button.BackgroundTransparency = 1 if readOnly then button.TextColor3 = Row.TextLockedColor else button.TextColor3 = Row.TextColor button.MouseButton1Click:connect(function() onClick() end) end return button end local function CreateObject(readOnly) local button = Instance.new("TextButton") button.Font = Row.Font button.FontSize = Row.FontSize button.TextXAlignment = Row.TextXAlignment button.BackgroundTransparency = 1 if readOnly then button.TextColor3 = Row.TextLockedColor else button.TextColor3 = Row.TextColor end local cancel = Create(Icon('ImageButton',177),{ Name = "Cancel"; Visible = false; Position = UDim2.new(1,-20,0,0); Size = UDim2.new(0,20,0,20); Parent = button; }) return button end local function CreateTextBox(readOnly) if readOnly then local box = CreateLabel(readOnly) return box else local box = Instance.new("TextBox") if not SettingsRemote:Invoke("ClearProps") then box.ClearTextOnFocus = false end box.Font = Row.Font box.FontSize = Row.FontSize box.TextXAlignment = Row.TextXAlignment box.BackgroundTransparency = 1 box.TextColor3 = Row.TextColor return box end end local function CreateDropDownItem(text, onClick) local button = Instance.new("TextButton") button.Font = DropDown.Font button.FontSize = DropDown.FontSize button.TextColor3 = DropDown.TextColor button.TextXAlignment = DropDown.TextXAlignment button.BackgroundColor3 = DropDown.BackColor button.AutoButtonColor = false button.BorderSizePixel = 0 button.Active = true button.Text = text button.MouseEnter:connect(function() button.TextColor3 = DropDown.TextColorOver button.BackgroundColor3 = DropDown.BackColorOver end) button.MouseLeave:connect(function() button.TextColor3 = DropDown.TextColor button.BackgroundColor3 = DropDown.BackColor end) button.MouseButton1Click:connect(function() onClick(text) end) return button end local function CreateDropDown(choices, currentChoice, readOnly, onClick) local frame = Instance.new("Frame") frame.Name = "DropDown" frame.Size = UDim2.new(1, 0, 1, 0) frame.BackgroundTransparency = 1 frame.Active = true local menu = nil local arrow = nil local expanded = false local margin = DropDown.BorderSizePixel; local button = Instance.new("TextButton") button.Font = Row.Font button.FontSize = Row.FontSize button.TextXAlignment = Row.TextXAlignment button.BackgroundTransparency = 1 button.TextColor3 = Row.TextColor if readOnly then button.TextColor3 = Row.TextLockedColor end button.Text = currentChoice button.Size = UDim2.new(1, -2 * Styles.Margin, 1, 0) button.Position = UDim2.new(0, Styles.Margin, 0, 0) button.Parent = frame local function showArrow(color) if arrow then arrow:Destroy() end local graphicTemplate = Create('Frame',{ Name="Graphic"; BorderSizePixel = 0; BackgroundColor3 = color; }) local graphicSize = 16/2 arrow = ArrowGraphic(graphicSize,'Down',true,graphicTemplate) arrow.Position = UDim2.new(1,-graphicSize * 2,0.5,-graphicSize/2) arrow.Parent = frame end local function hideMenu() expanded = false showArrow(DropDown.ArrowColor) if menu then menu:Destroy() end end local function showMenu() expanded = true menu = Instance.new("Frame") menu.Size = UDim2.new(1, -2 * margin, 0, #choices * DropDown.Height) menu.Position = UDim2.new(0, margin, 0, Row.Height + margin) menu.BackgroundTransparency = 0 menu.BackgroundColor3 = DropDown.BackColor menu.BorderColor3 = DropDown.BorderColor menu.BorderSizePixel = DropDown.BorderSizePixel menu.Active = true menu.ZIndex = 5 menu.Parent = frame local parentFrameHeight = menu.Parent.Parent.Parent.Parent.Size.Y.Offset local rowHeight = menu.Parent.Parent.Parent.Position.Y.Offset if (rowHeight + menu.Size.Y.Offset) > math.max(parentFrameHeight,PropertiesFrame.AbsoluteSize.y) then menu.Position = UDim2.new(0, margin, 0, -1 * (#choices * DropDown.Height) - margin) end local function choice(name) onClick(name) hideMenu() end for i,name in pairs(choices) do local option = CreateDropDownItem(name, function() choice(name) end) option.Size = UDim2.new(1, 0, 0, 16) option.Position = UDim2.new(0, 0, 0, (i - 1) * DropDown.Height) option.ZIndex = menu.ZIndex option.Parent = menu end end showArrow(DropDown.ArrowColor) if not readOnly then button.MouseEnter:connect(function() button.TextColor3 = Row.TextColor showArrow(DropDown.ArrowColorOver) end) button.MouseLeave:connect(function() button.TextColor3 = Row.TextColor if not expanded then showArrow(DropDown.ArrowColor) end end) button.MouseButton1Click:connect(function() if expanded then hideMenu() else showMenu() end end) end return frame,button end local function CreateBrickColor(readOnly, onClick) local frame = Instance.new("Frame") frame.Size = UDim2.new(1,0,1,0) frame.BackgroundTransparency = 1 local colorPalette = Instance.new("Frame") colorPalette.BackgroundTransparency = 0 colorPalette.SizeConstraint = Enum.SizeConstraint.RelativeXX colorPalette.Size = UDim2.new(1, -2 * BrickColors.OuterBorder, 1, -2 * BrickColors.OuterBorder) colorPalette.BorderSizePixel = BrickColors.BorderSizePixel colorPalette.BorderColor3 = BrickColors.BorderColor colorPalette.Position = UDim2.new(0, BrickColors.OuterBorder, 0, BrickColors.OuterBorder + Row.Height) colorPalette.ZIndex = 5 colorPalette.Visible = false colorPalette.BorderSizePixel = BrickColors.OuterBorder colorPalette.BorderColor3 = BrickColors.OuterBorderColor colorPalette.Parent = frame local function show() colorPalette.Visible = true end local function hide() colorPalette.Visible = false end local function toggle() colorPalette.Visible = not colorPalette.Visible end local colorBox = Instance.new("TextButton", frame) colorBox.Position = UDim2.new(0, Styles.Margin, 0, Styles.Margin) colorBox.Size = UDim2.new(0, BrickColors.BoxSize, 0, BrickColors.BoxSize) colorBox.Text = "" colorBox.MouseButton1Click:connect(function() if not readOnly then toggle() end end) if readOnly then colorBox.AutoButtonColor = false end local spacingBefore = (Styles.Margin * 2) + BrickColors.BoxSize local propertyLabel = CreateTextButton(readOnly, function() if not readOnly then toggle() end end) propertyLabel.Size = UDim2.new(1, (-1 * spacingBefore) - Styles.Margin, 1, 0) propertyLabel.Position = UDim2.new(0, spacingBefore, 0, 0) propertyLabel.Parent = frame local size = (1 / BrickColors.ColorsPerRow) for index = 0, 127 do local brickColor = BrickColor.palette(index) local color3 = brickColor.Color local x = size * (index % BrickColors.ColorsPerRow) local y = size * math.floor(index / BrickColors.ColorsPerRow) local brickColorBox = Instance.new("TextButton") brickColorBox.Text = "" brickColorBox.Size = UDim2.new(size,0,size,0) brickColorBox.BackgroundColor3 = color3 brickColorBox.Position = UDim2.new(x, 0, y, 0) brickColorBox.ZIndex = colorPalette.ZIndex brickColorBox.Parent = colorPalette brickColorBox.MouseButton1Click:connect(function() hide() onClick(brickColor) end) end return frame,propertyLabel,colorBox end local function CreateColor3Control(readOnly, onClick) local frame = Instance.new("Frame") frame.Size = UDim2.new(1,0,1,0) frame.BackgroundTransparency = 1 local colorBox = Instance.new("TextButton", frame) colorBox.Position = UDim2.new(0, Styles.Margin, 0, Styles.Margin) colorBox.Size = UDim2.new(0, BrickColors.BoxSize, 0, BrickColors.BoxSize) colorBox.Text = "" colorBox.AutoButtonColor = false local spacingBefore = (Styles.Margin * 2) + BrickColors.BoxSize local box = CreateTextBox(readOnly) box.Size = UDim2.new(1, (-1 * spacingBefore) - Styles.Margin, 1, 0) box.Position = UDim2.new(0, spacingBefore, 0, 0) box.Parent = frame return frame,box,colorBox end function CreateCheckbox(value, readOnly, onClick) local checked = value local mouseover = false local checkboxFrame = Instance.new("ImageButton") checkboxFrame.Size = UDim2.new(0, Sprite.Width, 0, Sprite.Height) checkboxFrame.BackgroundTransparency = 1 checkboxFrame.ClipsDescendants = true --checkboxFrame.Position = UDim2.new(0, Styles.Margin, 0, Styles.Margin) local spritesheetImage = Instance.new("ImageLabel", checkboxFrame) spritesheetImage.Name = "SpritesheetImageLabel" spritesheetImage.Size = UDim2.new(0, Spritesheet.Width, 0, Spritesheet.Height) spritesheetImage.Image = Spritesheet.Image spritesheetImage.BackgroundTransparency = 1 local function updateSprite() local spriteName = GetCheckboxImageName(checked, readOnly, mouseover) local spritePosition = SpritePosition(spriteName) spritesheetImage.Position = UDim2.new(0, -1 * spritePosition[1], 0, -1 * spritePosition[2]) end local function setValue(val) checked = val updateSprite() end if not readOnly then checkboxFrame.MouseEnter:connect(function() mouseover = true updateSprite() end) checkboxFrame.MouseLeave:connect(function() mouseover = false updateSprite() end) checkboxFrame.MouseButton1Click:connect(function() onClick(checked) end) end updateSprite() return checkboxFrame, setValue end -- Code for handling controls of various data types -- local Controls = {} Controls["default"] = function(object, propertyData, readOnly) local propertyName = propertyData["Name"] local propertyType = propertyData["ValueType"] local box = CreateTextBox(readOnly) box.Size = UDim2.new(1, -2 * Styles.Margin, 1, 0) box.Position = UDim2.new(0, Styles.Margin, 0, 0) local function update() local value = object[propertyName] box.Text = ToString(value, propertyType) end if not readOnly then box.FocusLost:connect(function(enterPressed) Set(object, propertyData, ToValue(box.Text,propertyType)) update() end) end update() object.Changed:connect(function(property) if (property == propertyName) then update() end end) return box end Controls["bool"] = function(object, propertyData, readOnly) local propertyName = propertyData["Name"] local checked = object[propertyName] local checkbox, setValue = CreateCheckbox(checked, readOnly, function(value) Set(object, propertyData, not checked) end) checkbox.Position = UDim2.new(0, Styles.Margin, 0, Styles.Margin) setValue(checked) local function update() checked = object[propertyName] setValue(checked) end object.Changed:connect(function(property) if (property == propertyName) then update() end end) if object:IsA("BoolValue") then object.Changed:connect(function(val) update() end) end update() return checkbox end Controls["BrickColor"] = function(object, propertyData, readOnly) local propertyName = propertyData["Name"] local frame,label,brickColorBox = CreateBrickColor(readOnly, function(brickColor) Set(object, propertyData, brickColor) end) local function update() local value = object[propertyName] brickColorBox.BackgroundColor3 = value.Color label.Text = tostring(value) end update() object.Changed:connect(function(property) if (property == propertyName) then update() end end) return frame end Controls["Color3"] = function(object, propertyData, readOnly) local propertyName = propertyData["Name"] local frame,textBox,colorBox = CreateColor3Control(readOnly) textBox.FocusLost:connect(function(enterPressed) Set(object, propertyData, ToValue(textBox.Text,"Color3")) local value = object[propertyName] colorBox.BackgroundColor3 = value textBox.Text = ToString(value, "Color3") end) local function update() local value = object[propertyName] colorBox.BackgroundColor3 = value textBox.Text = ToString(value, "Color3") end update() object.Changed:connect(function(property) if (property == propertyName) then update() end end) return frame end Controls["Enum"] = function(object, propertyData, readOnly) local propertyName = propertyData["Name"] local propertyType = propertyData["ValueType"] local enumName = object[propertyName].Name local enumNames = {} for _,enum in pairs(Enum[tostring(propertyType)]:GetEnumItems()) do table.insert(enumNames, enum.Name) end local dropdown, propertyLabel = CreateDropDown(enumNames, enumName, readOnly, function(value) Set(object, propertyData, value) end) --dropdown.Parent = frame local function update() local value = object[propertyName].Name propertyLabel.Text = tostring(value) end update() object.Changed:connect(function(property) if (property == propertyName) then update() end end) return dropdown end Controls["Object"] = function(object, propertyData, readOnly) local propertyName = propertyData["Name"] local propertyType = propertyData["ValueType"] local box = CreateObject(readOnly,function()end) box.Size = UDim2.new(1, -2 * Styles.Margin, 1, 0) box.Position = UDim2.new(0, Styles.Margin, 0, 0) local function update() if AwaitingObjectObj == object then if AwaitingObjectValue == true then box.Text = "Select an Object" return end end local value = object[propertyName] box.Text = ToString(value, propertyType) end if not readOnly then box.MouseButton1Click:connect(function() if AwaitingObjectValue then AwaitingObjectValue = false update() return end AwaitingObjectValue = true AwaitingObjectObj = object AwaitingObjectProp = propertyData box.Text = "Select an Object" end) box.Cancel.Visible = true box.Cancel.MouseButton1Click:connect(function() object[propertyName] = nil end) end update() object.Changed:connect(function(property) if (property == propertyName) then update() end end) if object:IsA("ObjectValue") then object.Changed:connect(function(val) update() end) end return box end function GetControl(object, propertyData, readOnly) local propertyType = propertyData["ValueType"] local control = nil if Controls[propertyType] then control = Controls[propertyType](object, propertyData, readOnly) elseif RbxApi.IsEnum(propertyType) then control = Controls["Enum"](object, propertyData, readOnly) else control = Controls["default"](object, propertyData, readOnly) end return control end -- Permissions function CanEditObject(object) local player = Players.LocalPlayer local character = player.Character return Permissions.CanEdit end function CanEditProperty(object,propertyData) local tags = propertyData["tags"] for _,name in pairs(tags) do if name == "readonly" then return false end end return CanEditObject(object) end --RbxApi local function PropertyIsHidden(propertyData) local tags = propertyData["tags"] for _,name in pairs(tags) do if name == "deprecated" or name == "hidden" or name == "writeonly" then return true end end return false end function Set(object, propertyData, value) local propertyName = propertyData["Name"] local propertyType = propertyData["ValueType"] if value == nil then return end for i,v in pairs(GetSelection()) do if CanEditProperty(v,propertyData) then pcall(function() --print("Setting " .. propertyName .. " to " .. tostring(value)) v[propertyName] = value end) end end end function CreateRow(object, propertyData, isAlternateRow) local propertyName = propertyData["Name"] local propertyType = propertyData["ValueType"] local propertyValue = object[propertyName] --rowValue, rowValueType, isAlternate local backColor = Row.BackgroundColor; if (isAlternateRow) then backColor = Row.BackgroundColorAlternate end local readOnly = not CanEditProperty(object, propertyData) if propertyType == "Instance" or propertyName == "Parent" then readOnly = true end local rowFrame = Instance.new("Frame") rowFrame.Size = UDim2.new(1,0,0,Row.Height) rowFrame.BackgroundTransparency = 1 rowFrame.Name = 'Row' local propertyLabelFrame = CreateCell() propertyLabelFrame.Parent = rowFrame propertyLabelFrame.ClipsDescendants = true local propertyLabel = CreateLabel(readOnly) propertyLabel.Text = propertyName propertyLabel.Size = UDim2.new(1, -1 * Row.TitleMarginLeft, 1, 0) propertyLabel.Position = UDim2.new(0, Row.TitleMarginLeft, 0, 0) propertyLabel.Parent = propertyLabelFrame local propertyValueFrame = CreateCell() propertyValueFrame.Size = UDim2.new(0.5, -1, 1, 0) propertyValueFrame.Position = UDim2.new(0.5, 0, 0, 0) propertyValueFrame.Parent = rowFrame local control = GetControl(object, propertyData, readOnly) control.Parent = propertyValueFrame rowFrame.MouseEnter:connect(function() propertyLabelFrame.BackgroundColor3 = Row.BackgroundColorMouseover propertyValueFrame.BackgroundColor3 = Row.BackgroundColorMouseover end) rowFrame.MouseLeave:connect(function() propertyLabelFrame.BackgroundColor3 = backColor propertyValueFrame.BackgroundColor3 = backColor end) propertyLabelFrame.BackgroundColor3 = backColor propertyValueFrame.BackgroundColor3 = backColor return rowFrame end function ClearPropertiesList() for _,instance in pairs(ContentFrame:GetChildren()) do instance:Destroy() end end local selection = Gui:FindFirstChild("Selection", 1) print(selection) function displayProperties(props) for i,v in pairs(props) do pcall(function() local a = CreateRow(v.object, v.propertyData, ((numRows % 2) == 0)) a.Position = UDim2.new(0,0,0,numRows*Row.Height) a.Parent = ContentFrame numRows = numRows + 1 end) end end function checkForDupe(prop,props) for i,v in pairs(props) do if v.propertyData.Name == prop.Name and v.propertyData.ValueType == prop.ValueType then return true end end return false end function sortProps(t) table.sort(t, function(x,y) return x.propertyData.Name 1 then local t = template:Clone() local p,s = scale(transform( UDim2.new(0,0,0,size-o-1), UDim2.new(0,size,0,1) )) t.Position = p t.Size = s t.Parent = Frame end return Frame end function GripGraphic(size,dir,spacing,scaled,template) local Frame = Create('Frame',{ Name = "Grip Graphic"; BorderSizePixel = 0; Size = UDim2.new(0,size.x,0,size.y); Transparency = 1; }) if not template then template = Instance.new("Frame") template.BorderSizePixel = 0 end spacing = spacing or 2 local scale if scaled then function scale(p) return UDim2.new(p.X.Offset/size.x,0,p.Y.Offset/size.y,0) end else function scale(p) return p end end if dir == 'Vertical' then for i=0,size.x-1,spacing do local t = template:Clone() t.Size = scale(UDim2.new(0,1,0,size.y)) t.Position = scale(UDim2.new(0,i,0,0)) t.Parent = Frame end elseif dir == nil or dir == 'Horizontal' then for i=0,size.y-1,spacing do local t = template:Clone() t.Size = scale(UDim2.new(0,size.x,0,1)) t.Position = scale(UDim2.new(0,0,0,i)) t.Parent = Frame end end return Frame end do local mt = { __index = { GetScrollPercent = function(self) return self.ScrollIndex/(self.TotalSpace-self.VisibleSpace) end; CanScrollDown = function(self) return self.ScrollIndex + self.VisibleSpace 0 end; ScrollDown = function(self) self.ScrollIndex = self.ScrollIndex + self.PageIncrement self:Update() end; ScrollUp = function(self) self.ScrollIndex = self.ScrollIndex - self.PageIncrement self:Update() end; ScrollTo = function(self,index) self.ScrollIndex = index self:Update() end; SetScrollPercent = function(self,percent) self.ScrollIndex = math.floor((self.TotalSpace - self.VisibleSpace)*percent + 0.5) self:Update() end; }; } mt.__index.CanScrollRight = mt.__index.CanScrollDown mt.__index.CanScrollLeft = mt.__index.CanScrollUp mt.__index.ScrollLeft = mt.__index.ScrollUp mt.__index.ScrollRight = mt.__index.ScrollDown function ScrollBar(horizontal) -- create row scroll bar local ScrollFrame = Create('Frame',{ Name = "ScrollFrame"; Position = horizontal and UDim2.new(0,0,1,-ScrollBarWidth) or UDim2.new(1,-ScrollBarWidth,0,0); Size = horizontal and UDim2.new(1,0,0,ScrollBarWidth) or UDim2.new(0,ScrollBarWidth,1,0); BackgroundTransparency = 1; Create('ImageButton',{ Name = "ScrollDown"; Position = horizontal and UDim2.new(1,-ScrollBarWidth,0,0) or UDim2.new(0,0,1,-ScrollBarWidth); Size = UDim2.new(0, ScrollBarWidth, 0, ScrollBarWidth); BackgroundColor3 = ScrollStyles.Button; BorderColor3 = ScrollStyles.Border; --BorderSizePixel = 0; }); Create('ImageButton',{ Name = "ScrollUp"; Size = UDim2.new(0, ScrollBarWidth, 0, ScrollBarWidth); BackgroundColor3 = ScrollStyles.Button; BorderColor3 = ScrollStyles.Border; --BorderSizePixel = 0; }); Create('ImageButton',{ Name = "ScrollBar"; Size = horizontal and UDim2.new(1,-ScrollBarWidth*2,1,0) or UDim2.new(1,0,1,-ScrollBarWidth*2); Position = horizontal and UDim2.new(0,ScrollBarWidth,0,0) or UDim2.new(0,0,0,ScrollBarWidth); AutoButtonColor = false; BackgroundColor3 = Color3.new(0.94902, 0.94902, 0.94902); BorderColor3 = ScrollStyles.Border; --BorderSizePixel = 0; Create('ImageButton',{ Name = "ScrollThumb"; AutoButtonColor = false; Size = UDim2.new(0, ScrollBarWidth, 0, ScrollBarWidth); BackgroundColor3 = ScrollStyles.Button; BorderColor3 = ScrollStyles.Border; --BorderSizePixel = 0; }); }); }) local graphicTemplate = Create('Frame',{ Name="Graphic"; BorderSizePixel = 0; BackgroundColor3 = ScrollStyles.Border; }) local graphicSize = ScrollBarWidth/2 local ScrollDownFrame = ScrollFrame.ScrollDown local ScrollDownGraphic = ArrowGraphic(graphicSize,horizontal and 'Right' or 'Down',true,graphicTemplate) ScrollDownGraphic.Position = UDim2.new(0.5,-graphicSize/2,0.5,-graphicSize/2) ScrollDownGraphic.Parent = ScrollDownFrame local ScrollUpFrame = ScrollFrame.ScrollUp local ScrollUpGraphic = ArrowGraphic(graphicSize,horizontal and 'Left' or 'Up',true,graphicTemplate) ScrollUpGraphic.Position = UDim2.new(0.5,-graphicSize/2,0.5,-graphicSize/2) ScrollUpGraphic.Parent = ScrollUpFrame local ScrollBarFrame = ScrollFrame.ScrollBar local ScrollThumbFrame = ScrollBarFrame.ScrollThumb do local size = ScrollBarWidth*3/8 local Decal = GripGraphic(Vector2.new(size,size),horizontal and 'Vertical' or 'Horizontal',2,graphicTemplate) Decal.Position = UDim2.new(0.5,-size/2,0.5,-size/2) Decal.Parent = ScrollThumbFrame end local MouseDrag = Create('ImageButton',{ Name = "MouseDrag"; Position = UDim2.new(-0.25,0,-0.25,0); Size = UDim2.new(1.5,0,1.5,0); Transparency = 1; AutoButtonColor = false; Active = true; ZIndex = 10; }) local Class = setmetatable({ GUI = ScrollFrame; ScrollIndex = 0; VisibleSpace = 0; TotalSpace = 0; PageIncrement = 1; },mt) local UpdateScrollThumb if horizontal then function UpdateScrollThumb() ScrollThumbFrame.Size = UDim2.new(Class.VisibleSpace/Class.TotalSpace,0,0,ScrollBarWidth) if ScrollThumbFrame.AbsoluteSize.x < ScrollBarWidth then ScrollThumbFrame.Size = UDim2.new(0,ScrollBarWidth,0,ScrollBarWidth) end local barSize = ScrollBarFrame.AbsoluteSize.x ScrollThumbFrame.Position = UDim2.new(Class:GetScrollPercent()*(barSize - ScrollThumbFrame.AbsoluteSize.x)/barSize,0,0,0) end else function UpdateScrollThumb() ScrollThumbFrame.Size = UDim2.new(0,ScrollBarWidth,Class.VisibleSpace/Class.TotalSpace,0) if ScrollThumbFrame.AbsoluteSize.y < ScrollBarWidth then ScrollThumbFrame.Size = UDim2.new(0,ScrollBarWidth,0,ScrollBarWidth) end local barSize = ScrollBarFrame.AbsoluteSize.y ScrollThumbFrame.Position = UDim2.new(0,0,Class:GetScrollPercent()*(barSize - ScrollThumbFrame.AbsoluteSize.y)/barSize,0) end end local lastDown local lastUp local scrollStyle = {BackgroundColor3=ScrollStyles.Border,BackgroundTransparency=0} local scrollStyle_ds = {BackgroundColor3=ScrollStyles.Border,BackgroundTransparency=0.7} local function Update() local t = Class.TotalSpace local v = Class.VisibleSpace local s = Class.ScrollIndex if v 0 then if s + v > t then Class.ScrollIndex = t - v end else Class.ScrollIndex = 0 end else Class.ScrollIndex = 0 end if Class.UpdateCallback then if Class.UpdateCallback(Class) == false then return end end local down = Class:CanScrollDown() local up = Class:CanScrollUp() if down ~= lastDown then lastDown = down ScrollDownFrame.Active = down ScrollDownFrame.AutoButtonColor = down local children = ScrollDownGraphic:GetChildren() local style = down and scrollStyle or scrollStyle_ds for i = 1,#children do Create(children[i],style) end end if up ~= lastUp then lastUp = up ScrollUpFrame.Active = up ScrollUpFrame.AutoButtonColor = up local children = ScrollUpGraphic:GetChildren() local style = up and scrollStyle or scrollStyle_ds for i = 1,#children do Create(children[i],style) end end ScrollThumbFrame.Visible = down or up UpdateScrollThumb() end Class.Update = Update SetZIndexOnChanged(ScrollFrame) local scrollEventID = 0 ScrollDownFrame.MouseButton1Down:connect(function() scrollEventID = tick() local current = scrollEventID local up_con up_con = MouseDrag.MouseButton1Up:connect(function() scrollEventID = tick() MouseDrag.Parent = nil ResetButtonColor(ScrollDownFrame) up_con:disconnect(); drag = nil end) MouseDrag.Parent = GetScreen(ScrollFrame) Class:ScrollDown() wait(0.2) -- delay before auto scroll while scrollEventID == current do Class:ScrollDown() if not Class:CanScrollDown() then break end wait() end end) ScrollDownFrame.MouseButton1Up:connect(function() scrollEventID = tick() end) ScrollUpFrame.MouseButton1Down:connect(function() scrollEventID = tick() local current = scrollEventID local up_con up_con = MouseDrag.MouseButton1Up:connect(function() scrollEventID = tick() MouseDrag.Parent = nil ResetButtonColor(ScrollUpFrame) up_con:disconnect(); drag = nil end) MouseDrag.Parent = GetScreen(ScrollFrame) Class:ScrollUp() wait(0.2) while scrollEventID == current do Class:ScrollUp() if not Class:CanScrollUp() then break end wait() end end) ScrollUpFrame.MouseButton1Up:connect(function() scrollEventID = tick() end) if horizontal then ScrollBarFrame.MouseButton1Down:connect(function(x,y) scrollEventID = tick() local current = scrollEventID local up_con up_con = MouseDrag.MouseButton1Up:connect(function() scrollEventID = tick() MouseDrag.Parent = nil ResetButtonColor(ScrollUpFrame) up_con:disconnect(); drag = nil end) MouseDrag.Parent = GetScreen(ScrollFrame) if x > ScrollThumbFrame.AbsolutePosition.x then Class:ScrollTo(Class.ScrollIndex + Class.VisibleSpace) wait(0.2) while scrollEventID == current do if x ScrollThumbFrame.AbsolutePosition.x then break end Class:ScrollTo(Class.ScrollIndex - Class.VisibleSpace) wait() end end end) else ScrollBarFrame.MouseButton1Down:connect(function(x,y) scrollEventID = tick() local current = scrollEventID local up_con up_con = MouseDrag.MouseButton1Up:connect(function() scrollEventID = tick() MouseDrag.Parent = nil ResetButtonColor(ScrollUpFrame) up_con:disconnect(); drag = nil end) MouseDrag.Parent = GetScreen(ScrollFrame) if y > ScrollThumbFrame.AbsolutePosition.y then Class:ScrollTo(Class.ScrollIndex + Class.VisibleSpace) wait(0.2) while scrollEventID == current do if y ScrollThumbFrame.AbsolutePosition.y then break end Class:ScrollTo(Class.ScrollIndex - Class.VisibleSpace) wait() end end end) end if horizontal then ScrollThumbFrame.MouseButton1Down:connect(function(x,y) scrollEventID = tick() local mouse_offset = x - ScrollThumbFrame.AbsolutePosition.x local drag_con local up_con drag_con = MouseDrag.MouseMoved:connect(function(x,y) local bar_abs_pos = ScrollBarFrame.AbsolutePosition.x local bar_drag = ScrollBarFrame.AbsoluteSize.x - ScrollThumbFrame.AbsoluteSize.x local bar_abs_one = bar_abs_pos + bar_drag x = x - mouse_offset x = x bar_abs_one and bar_abs_one or x x = x - bar_abs_pos Class:SetScrollPercent(x/(bar_drag)) end) up_con = MouseDrag.MouseButton1Up:connect(function() scrollEventID = tick() MouseDrag.Parent = nil ResetButtonColor(ScrollThumbFrame) drag_con:disconnect(); drag_con = nil up_con:disconnect(); drag = nil end) MouseDrag.Parent = GetScreen(ScrollFrame) end) else ScrollThumbFrame.MouseButton1Down:connect(function(x,y) scrollEventID = tick() local mouse_offset = y - ScrollThumbFrame.AbsolutePosition.y local drag_con local up_con drag_con = MouseDrag.MouseMoved:connect(function(x,y) local bar_abs_pos = ScrollBarFrame.AbsolutePosition.y local bar_drag = ScrollBarFrame.AbsoluteSize.y - ScrollThumbFrame.AbsoluteSize.y local bar_abs_one = bar_abs_pos + bar_drag y = y - mouse_offset y = y bar_abs_one and bar_abs_one or y y = y - bar_abs_pos Class:SetScrollPercent(y/(bar_drag)) end) up_con = MouseDrag.MouseButton1Up:connect(function() scrollEventID = tick() MouseDrag.Parent = nil ResetButtonColor(ScrollThumbFrame) drag_con:disconnect(); drag_con = nil up_con:disconnect(); drag = nil end) MouseDrag.Parent = GetScreen(ScrollFrame) end) end function Class:Destroy() ScrollFrame:Destroy() MouseDrag:Destroy() for k in pairs(Class) do Class[k] = nil end setmetatable(Class,nil) end Update() return Class end end ---------------------------------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- local MainFrame = Instance.new("Frame") MainFrame.Name = "MainFrame" MainFrame.Size = UDim2.new(1, -1 * ScrollBarWidth, 1, 0) MainFrame.Position = UDim2.new(0, 0, 0, 0) MainFrame.BackgroundTransparency = 1 MainFrame.ClipsDescendants = true MainFrame.Parent = PropertiesFrame ContentFrame = Instance.new("Frame") ContentFrame.Name = "ContentFrame" ContentFrame.Size = UDim2.new(1, 0, 0, 0) ContentFrame.BackgroundTransparency = 1 ContentFrame.Parent = MainFrame scrollBar = ScrollBar(false) scrollBar.PageIncrement = 1 Create(scrollBar.GUI,{ Position = UDim2.new(1,-ScrollBarWidth,0,0); Size = UDim2.new(0,ScrollBarWidth,1,0); Parent = PropertiesFrame; }) scrollBarH = ScrollBar(true) scrollBarH.PageIncrement = ScrollBarWidth Create(scrollBarH.GUI,{ Position = UDim2.new(0,0,1,-ScrollBarWidth); Size = UDim2.new(1,-ScrollBarWidth,0,ScrollBarWidth); Visible = false; Parent = PropertiesFrame; }) do local listEntries = {} local nameConnLookup = {} function scrollBar.UpdateCallback(self) scrollBar.TotalSpace = ContentFrame.AbsoluteSize.Y scrollBar.VisibleSpace = MainFrame.AbsoluteSize.Y ContentFrame.Position = UDim2.new(ContentFrame.Position.X.Scale,ContentFrame.Position.X.Offset,0,-1*scrollBar.ScrollIndex) end function scrollBarH.UpdateCallback(self) end MainFrame.Changed:connect(function(p) if p == 'AbsoluteSize' then scrollBarH.VisibleSpace = math.ceil(MainFrame.AbsoluteSize.x) scrollBarH:Update() scrollBar.VisibleSpace = math.ceil(MainFrame.AbsoluteSize.y) scrollBar:Update() end end) local wheelAmount = Row.Height PropertiesFrame.MouseWheelForward:connect(function() if scrollBar.VisibleSpace - 1 > wheelAmount then scrollBar:ScrollTo(scrollBar.ScrollIndex - wheelAmount) else scrollBar:ScrollTo(scrollBar.ScrollIndex - scrollBar.VisibleSpace) end end) PropertiesFrame.MouseWheelBackward:connect(function() if scrollBar.VisibleSpace - 1 > wheelAmount then scrollBar:ScrollTo(scrollBar.ScrollIndex + wheelAmount) else scrollBar:ScrollTo(scrollBar.ScrollIndex + scrollBar.VisibleSpace) end end) end scrollBar.VisibleSpace = math.ceil(MainFrame.AbsoluteSize.y) scrollBar:Update() showProperties(GetSelection()) bindSelectionChanged.Event:connect(function() showProperties(GetSelection()) end) bindSetAwait.Event:connect(function(obj) if AwaitingObjectValue then AwaitingObjectValue = false local mySel = obj if mySel then pcall(function() Set(AwaitingObjectObj, AwaitingObjectProp, mySel) end) end end end) propertiesSearch.Changed:connect(function(prop) if prop == "Text" then showProperties(GetSelection()) end end) bindGetApi.OnInvoke = function() return RbxApi end bindGetAwait.OnInvoke = function() return AwaitingObjectValue end end) spawn(function() local top = D_E_X.ScriptEditor local editorGrid = top:WaitForChild("EditorGrid") local currentSource = "" local currentEditor = { x = 0, y = 0 } local userInput = game:GetService("UserInputService") local mouse = game.Players.LocalPlayer:GetMouse() local topBar = top:WaitForChild("TopBar") local scriptBar = topBar:WaitForChild("ScriptBar") local scriptBarLeft = topBar:WaitForChild("ScriptBarLeft") local scriptBarRight = topBar:WaitForChild("ScriptBarRight") local clipboardButton = topBar:WaitForChild("Clipboard") local entryTemplate = topBar:WaitForChild("Entry") local openEvent = top:WaitForChild("OpenScript") local closeButton = top:WaitForChild("Close") local memoryScripts = {} local editingIndex = 0 -- Scrollbar local ScrollBarWidth = 16 local ScrollStyles = { Background = Color3.new(233/255, 233/255, 233/255); Border = Color3.new(149/255, 149/255, 149/255); Selected = Color3.new( 63/255, 119/255, 189/255); BorderSelected = Color3.new( 55/255, 106/255, 167/255); Text = Color3.new( 0/255, 0/255, 0/255); TextDisabled = Color3.new(128/255, 128/255, 128/255); TextSelected = Color3.new(255/255, 255/255, 255/255); Button = Color3.new(221/255, 221/255, 221/255); ButtonBorder = Color3.new(149/255, 149/255, 149/255); ButtonSelected = Color3.new(255/255, 0/255, 0/255); Field = Color3.new(255/255, 255/255, 255/255); FieldBorder = Color3.new(191/255, 191/255, 191/255); TitleBackground = Color3.new(178/255, 178/255, 178/255); } do local ZIndexLock = {} function SetZIndex(object,z) if not ZIndexLock[object] then ZIndexLock[object] = true if object:IsA'GuiObject' then object.ZIndex = z end local children = object:GetChildren() for i = 1,#children do SetZIndex(children[i],z) end ZIndexLock[object] = nil end end end function SetZIndexOnChanged(object) return object.Changed:connect(function(p) if p == "ZIndex" then SetZIndex(object,object.ZIndex) end end) end function Create(ty,data) local obj if type(ty) == 'string' then obj = Instance.new(ty) else obj = ty end for k, v in pairs(data) do if type(k) == 'number' then v.Parent = obj else obj[k] = v end end return obj end -- returns the ascendant ScreenGui of an object function GetScreen(screen) if screen == nil then return nil end while not screen:IsA("ScreenGui") do screen = screen.Parent if screen == nil then return nil end end return screen end -- AutoButtonColor doesn't always reset properly function ResetButtonColor(button) local active = button.Active button.Active = not active button.Active = active end function ArrowGraphic(size,dir,scaled,template) local Frame = Create('Frame',{ Name = "Arrow Graphic"; BorderSizePixel = 0; Size = UDim2.new(0,size,0,size); Transparency = 1; }) if not template then template = Instance.new("Frame") template.BorderSizePixel = 0 end local transform if dir == nil or dir == 'Up' then function transform(p,s) return p,s end elseif dir == 'Down' then function transform(p,s) return UDim2.new(0,p.X.Offset,0,size-p.Y.Offset-1),s end elseif dir == 'Left' then function transform(p,s) return UDim2.new(0,p.Y.Offset,0,p.X.Offset),UDim2.new(0,s.Y.Offset,0,s.X.Offset) end elseif dir == 'Right' then function transform(p,s) return UDim2.new(0,size-p.Y.Offset-1,0,p.X.Offset),UDim2.new(0,s.Y.Offset,0,s.X.Offset) end end local scale if scaled then function scale(p,s) return UDim2.new(p.X.Offset/size,0,p.Y.Offset/size,0),UDim2.new(s.X.Offset/size,0,s.Y.Offset/size,0) end else function scale(p,s) return p,s end end local o = math.floor(size/4) if size%2 == 0 then local n = size/2-1 for i = 0,n do local t = template:Clone() local p,s = scale(transform( UDim2.new(0,n-i,0,o+i), UDim2.new(0,(i+1)*2,0,1) )) t.Position = p t.Size = s t.Parent = Frame end else local n = (size-1)/2 for i = 0,n do local t = template:Clone() local p,s = scale(transform( UDim2.new(0,n-i,0,o+i), UDim2.new(0,i*2+1,0,1) )) t.Position = p t.Size = s t.Parent = Frame end end if size%4 > 1 then local t = template:Clone() local p,s = scale(transform( UDim2.new(0,0,0,size-o-1), UDim2.new(0,size,0,1) )) t.Position = p t.Size = s t.Parent = Frame end return Frame end function GripGraphic(size,dir,spacing,scaled,template) local Frame = Create('Frame',{ Name = "Grip Graphic"; BorderSizePixel = 0; Size = UDim2.new(0,size.x,0,size.y); Transparency = 1; }) if not template then template = Instance.new("Frame") template.BorderSizePixel = 0 end spacing = spacing or 2 local scale if scaled then function scale(p) return UDim2.new(p.X.Offset/size.x,0,p.Y.Offset/size.y,0) end else function scale(p) return p end end if dir == 'Vertical' then for i=0,size.x-1,spacing do local t = template:Clone() t.Size = scale(UDim2.new(0,1,0,size.y)) t.Position = scale(UDim2.new(0,i,0,0)) t.Parent = Frame end elseif dir == nil or dir == 'Horizontal' then for i=0,size.y-1,spacing do local t = template:Clone() t.Size = scale(UDim2.new(0,size.x,0,1)) t.Position = scale(UDim2.new(0,0,0,i)) t.Parent = Frame end end return Frame end do local mt = { __index = { GetScrollPercent = function(self) return self.ScrollIndex/(self.TotalSpace-self.VisibleSpace) end; CanScrollDown = function(self) return self.ScrollIndex + self.VisibleSpace 0 end; ScrollDown = function(self) self.ScrollIndex = self.ScrollIndex + self.PageIncrement self:Update() end; ScrollUp = function(self) self.ScrollIndex = self.ScrollIndex - self.PageIncrement self:Update() end; ScrollTo = function(self,index) self.ScrollIndex = index self:Update() end; SetScrollPercent = function(self,percent) self.ScrollIndex = math.floor((self.TotalSpace - self.VisibleSpace)*percent + 0.5) self:Update() end; }; } mt.__index.CanScrollRight = mt.__index.CanScrollDown mt.__index.CanScrollLeft = mt.__index.CanScrollUp mt.__index.ScrollLeft = mt.__index.ScrollUp mt.__index.ScrollRight = mt.__index.ScrollDown function ScrollBar(horizontal) -- create row scroll bar local ScrollFrame = Create('Frame',{ Name = "ScrollFrame"; Position = horizontal and UDim2.new(0,0,1,-ScrollBarWidth) or UDim2.new(1,-ScrollBarWidth,0,0); Size = horizontal and UDim2.new(1,0,0,ScrollBarWidth) or UDim2.new(0,ScrollBarWidth,1,0); BackgroundTransparency = 1; Create('ImageButton',{ Name = "ScrollDown"; Position = horizontal and UDim2.new(1,-ScrollBarWidth,0,0) or UDim2.new(0,0,1,-ScrollBarWidth); Size = UDim2.new(0, ScrollBarWidth, 0, ScrollBarWidth); BackgroundColor3 = ScrollStyles.Button; BorderColor3 = ScrollStyles.Border; --BorderSizePixel = 0; }); Create('ImageButton',{ Name = "ScrollUp"; Size = UDim2.new(0, ScrollBarWidth, 0, ScrollBarWidth); BackgroundColor3 = ScrollStyles.Button; BorderColor3 = ScrollStyles.Border; --BorderSizePixel = 0; }); Create('ImageButton',{ Name = "ScrollBar"; Size = horizontal and UDim2.new(1,-ScrollBarWidth*2,1,0) or UDim2.new(1,0,1,-ScrollBarWidth*2); Position = horizontal and UDim2.new(0,ScrollBarWidth,0,0) or UDim2.new(0,0,0,ScrollBarWidth); AutoButtonColor = false; BackgroundColor3 = Color3.new(0.94902, 0.94902, 0.94902); BorderColor3 = ScrollStyles.Border; --BorderSizePixel = 0; Create('ImageButton',{ Name = "ScrollThumb"; AutoButtonColor = false; Size = UDim2.new(0, ScrollBarWidth, 0, ScrollBarWidth); BackgroundColor3 = ScrollStyles.Button; BorderColor3 = ScrollStyles.Border; --BorderSizePixel = 0; }); }); }) local graphicTemplate = Create('Frame',{ Name="Graphic"; BorderSizePixel = 0; BackgroundColor3 = ScrollStyles.Border; }) local graphicSize = ScrollBarWidth/2 local ScrollDownFrame = ScrollFrame.ScrollDown local ScrollDownGraphic = ArrowGraphic(graphicSize,horizontal and 'Right' or 'Down',true,graphicTemplate) ScrollDownGraphic.Position = UDim2.new(0.5,-graphicSize/2,0.5,-graphicSize/2) ScrollDownGraphic.Parent = ScrollDownFrame local ScrollUpFrame = ScrollFrame.ScrollUp local ScrollUpGraphic = ArrowGraphic(graphicSize,horizontal and 'Left' or 'Up',true,graphicTemplate) ScrollUpGraphic.Position = UDim2.new(0.5,-graphicSize/2,0.5,-graphicSize/2) ScrollUpGraphic.Parent = ScrollUpFrame local ScrollBarFrame = ScrollFrame.ScrollBar local ScrollThumbFrame = ScrollBarFrame.ScrollThumb do local size = ScrollBarWidth*3/8 local Decal = GripGraphic(Vector2.new(size,size),horizontal and 'Vertical' or 'Horizontal',2,graphicTemplate) Decal.Position = UDim2.new(0.5,-size/2,0.5,-size/2) Decal.Parent = ScrollThumbFrame end local MouseDrag = Create('ImageButton',{ Name = "MouseDrag"; Position = UDim2.new(-0.25,0,-0.25,0); Size = UDim2.new(1.5,0,1.5,0); Transparency = 1; AutoButtonColor = false; Active = true; ZIndex = 10; }) local Class = setmetatable({ GUI = ScrollFrame; ScrollIndex = 0; VisibleSpace = 0; TotalSpace = 0; PageIncrement = 1; },mt) local UpdateScrollThumb if horizontal then function UpdateScrollThumb() ScrollThumbFrame.Size = UDim2.new(Class.VisibleSpace/Class.TotalSpace,0,0,ScrollBarWidth) if ScrollThumbFrame.AbsoluteSize.x < ScrollBarWidth then ScrollThumbFrame.Size = UDim2.new(0,ScrollBarWidth,0,ScrollBarWidth) end local barSize = ScrollBarFrame.AbsoluteSize.x ScrollThumbFrame.Position = UDim2.new(Class:GetScrollPercent()*(barSize - ScrollThumbFrame.AbsoluteSize.x)/barSize,0,0,0) end else function UpdateScrollThumb() ScrollThumbFrame.Size = UDim2.new(0,ScrollBarWidth,Class.VisibleSpace/Class.TotalSpace,0) if ScrollThumbFrame.AbsoluteSize.y < ScrollBarWidth then ScrollThumbFrame.Size = UDim2.new(0,ScrollBarWidth,0,ScrollBarWidth) end local barSize = ScrollBarFrame.AbsoluteSize.y ScrollThumbFrame.Position = UDim2.new(0,0,Class:GetScrollPercent()*(barSize - ScrollThumbFrame.AbsoluteSize.y)/barSize,0) end end local lastDown local lastUp local scrollStyle = {BackgroundColor3=ScrollStyles.Border,BackgroundTransparency=0} local scrollStyle_ds = {BackgroundColor3=ScrollStyles.Border,BackgroundTransparency=0.7} local function Update() local t = Class.TotalSpace local v = Class.VisibleSpace local s = Class.ScrollIndex if v 0 then if s + v > t then Class.ScrollIndex = t - v end else Class.ScrollIndex = 0 end else Class.ScrollIndex = 0 end if Class.UpdateCallback then if Class.UpdateCallback(Class) == false then return end end local down = Class:CanScrollDown() local up = Class:CanScrollUp() if down ~= lastDown then lastDown = down ScrollDownFrame.Active = down ScrollDownFrame.AutoButtonColor = down local children = ScrollDownGraphic:GetChildren() local style = down and scrollStyle or scrollStyle_ds for i = 1,#children do Create(children[i],style) end end if up ~= lastUp then lastUp = up ScrollUpFrame.Active = up ScrollUpFrame.AutoButtonColor = up local children = ScrollUpGraphic:GetChildren() local style = up and scrollStyle or scrollStyle_ds for i = 1,#children do Create(children[i],style) end end ScrollThumbFrame.Visible = down or up UpdateScrollThumb() end Class.Update = Update SetZIndexOnChanged(ScrollFrame) local scrollEventID = 0 ScrollDownFrame.MouseButton1Down:connect(function() scrollEventID = tick() local current = scrollEventID local up_con up_con = MouseDrag.MouseButton1Up:connect(function() scrollEventID = tick() MouseDrag.Parent = nil ResetButtonColor(ScrollDownFrame) up_con:disconnect(); drag = nil end) MouseDrag.Parent = GetScreen(ScrollFrame) Class:ScrollDown() wait(0.2) -- delay before auto scroll while scrollEventID == current do Class:ScrollDown() if not Class:CanScrollDown() then break end wait() end end) ScrollDownFrame.MouseButton1Up:connect(function() scrollEventID = tick() end) ScrollUpFrame.MouseButton1Down:connect(function() scrollEventID = tick() local current = scrollEventID local up_con up_con = MouseDrag.MouseButton1Up:connect(function() scrollEventID = tick() MouseDrag.Parent = nil ResetButtonColor(ScrollUpFrame) up_con:disconnect(); drag = nil end) MouseDrag.Parent = GetScreen(ScrollFrame) Class:ScrollUp() wait(0.2) while scrollEventID == current do Class:ScrollUp() if not Class:CanScrollUp() then break end wait() end end) ScrollUpFrame.MouseButton1Up:connect(function() scrollEventID = tick() end) if horizontal then ScrollBarFrame.MouseButton1Down:connect(function(x,y) scrollEventID = tick() local current = scrollEventID local up_con up_con = MouseDrag.MouseButton1Up:connect(function() scrollEventID = tick() MouseDrag.Parent = nil ResetButtonColor(ScrollUpFrame) up_con:disconnect(); drag = nil end) MouseDrag.Parent = GetScreen(ScrollFrame) if x > ScrollThumbFrame.AbsolutePosition.x then Class:ScrollTo(Class.ScrollIndex + Class.VisibleSpace) wait(0.2) while scrollEventID == current do if x ScrollThumbFrame.AbsolutePosition.x then break end Class:ScrollTo(Class.ScrollIndex - Class.VisibleSpace) wait() end end end) else ScrollBarFrame.MouseButton1Down:connect(function(x,y) scrollEventID = tick() local current = scrollEventID local up_con up_con = MouseDrag.MouseButton1Up:connect(function() scrollEventID = tick() MouseDrag.Parent = nil ResetButtonColor(ScrollUpFrame) up_con:disconnect(); drag = nil end) MouseDrag.Parent = GetScreen(ScrollFrame) if y > ScrollThumbFrame.AbsolutePosition.y then Class:ScrollTo(Class.ScrollIndex + Class.VisibleSpace) wait(0.2) while scrollEventID == current do if y ScrollThumbFrame.AbsolutePosition.y then break end Class:ScrollTo(Class.ScrollIndex - Class.VisibleSpace) wait() end end end) end if horizontal then ScrollThumbFrame.MouseButton1Down:connect(function(x,y) scrollEventID = tick() local mouse_offset = x - ScrollThumbFrame.AbsolutePosition.x local drag_con local up_con drag_con = MouseDrag.MouseMoved:connect(function(x,y) local bar_abs_pos = ScrollBarFrame.AbsolutePosition.x local bar_drag = ScrollBarFrame.AbsoluteSize.x - ScrollThumbFrame.AbsoluteSize.x local bar_abs_one = bar_abs_pos + bar_drag x = x - mouse_offset x = x bar_abs_one and bar_abs_one or x x = x - bar_abs_pos Class:SetScrollPercent(x/(bar_drag)) end) up_con = MouseDrag.MouseButton1Up:connect(function() scrollEventID = tick() MouseDrag.Parent = nil ResetButtonColor(ScrollThumbFrame) drag_con:disconnect(); drag_con = nil up_con:disconnect(); drag = nil end) MouseDrag.Parent = GetScreen(ScrollFrame) end) else ScrollThumbFrame.MouseButton1Down:connect(function(x,y) scrollEventID = tick() local mouse_offset = y - ScrollThumbFrame.AbsolutePosition.y local drag_con local up_con drag_con = MouseDrag.MouseMoved:connect(function(x,y) local bar_abs_pos = ScrollBarFrame.AbsolutePosition.y local bar_drag = ScrollBarFrame.AbsoluteSize.y - ScrollThumbFrame.AbsoluteSize.y local bar_abs_one = bar_abs_pos + bar_drag y = y - mouse_offset y = y bar_abs_one and bar_abs_one or y y = y - bar_abs_pos Class:SetScrollPercent(y/(bar_drag)) end) up_con = MouseDrag.MouseButton1Up:connect(function() scrollEventID = tick() MouseDrag.Parent = nil ResetButtonColor(ScrollThumbFrame) drag_con:disconnect(); drag_con = nil up_con:disconnect(); drag = nil end) MouseDrag.Parent = GetScreen(ScrollFrame) end) end function Class:Destroy() ScrollFrame:Destroy() MouseDrag:Destroy() for k in pairs(Class) do Class[k] = nil end setmetatable(Class,nil) end Update() return Class end end -- End Scrollbar local scrollBar = ScrollBar(false) scrollBar.PageIncrement = 16 Create(scrollBar.GUI,{ Position = UDim2.new(1,0,0,0); Size = UDim2.new(0,ScrollBarWidth,1,0); Parent = editorGrid; }) local scrollBarH = ScrollBar(true) scrollBarH.PageIncrement = 8 Create(scrollBarH.GUI,{ Position = UDim2.new(0,0,1,0); Size = UDim2.new(1,0,0,ScrollBarWidth); Parent = editorGrid; }) local entries = {} local grid = {} local count = 1 local xCount = 1 local lineSpan = 0 for i = 0,490,8 do local newRow = {} for j = 0,390,16 do local cellText = Instance.new("TextLabel",editorGrid) cellText.BackgroundTransparency = 1 cellText.BorderSizePixel = 0 cellText.Text = "" cellText.Position = UDim2.new(0,i,0,j) cellText.Size = UDim2.new(0,8,0,16) cellText.Font = Enum.Font.SourceSans cellText.FontSize = Enum.FontSize.Size18 table.insert(newRow,cellText) xCount = xCount + 1 end table.insert(grid,newRow) count = count + 1 xCount = 1 end local syntaxHighlightList = { {["Keyword"] = "for", ["Color"] = Color3.new(0, 0, 127/255), ["Independent"] = true}, {["Keyword"] = "local", ["Color"] = Color3.new(0, 0, 127/255), ["Independent"] = true}, {["Keyword"] = "if", ["Color"] = Color3.new(0, 0, 127/255), ["Independent"] = true}, {["Keyword"] = "then", ["Color"] = Color3.new(0, 0, 127/255), ["Independent"] = true}, {["Keyword"] = "do", ["Color"] = Color3.new(0, 0, 127/255), ["Independent"] = true}, {["Keyword"] = "while", ["Color"] = Color3.new(0, 0, 127/255), ["Independent"] = true}, {["Keyword"] = "end", ["Color"] = Color3.new(0, 0, 127/255), ["Independent"] = true}, {["Keyword"] = "function", ["Color"] = Color3.new(0, 0, 127/255), ["Independent"] = true}, {["Keyword"] = "string", ["Color"] = Color3.new(0, 0, 127/255), ["Independent"] = true}, {["Keyword"] = "table", ["Color"] = Color3.new(0, 0, 127/255), ["Independent"] = true}, {["Keyword"] = "game", ["Color"] = Color3.new(0, 0, 127/255), ["Independent"] = true}, {["Keyword"] = "workspace", ["Color"] = Color3.new(0, 0, 127/255), ["Independent"] = true}, {["Keyword"] = "return", ["Color"] = Color3.new(0, 0, 127/255), ["Independent"] = true}, {["Keyword"] = "break", ["Color"] = Color3.new(0, 0, 127/255), ["Independent"] = true}, {["Keyword"] = "elseif", ["Color"] = Color3.new(0, 0, 127/255), ["Independent"] = true}, {["Keyword"] = "in", ["Color"] = Color3.new(0, 0, 127/255), ["Independent"] = true}, {["Keyword"] = "pairs", ["Color"] = Color3.new(0, 0, 127/255), ["Independent"] = true}, {["Keyword"] = "ipairs", ["Color"] = Color3.new(0, 0, 127/255), ["Independent"] = true} } function checkMouseInGui(gui) if gui == nil then return false end local plrMouse = game.Players.LocalPlayer:GetMouse() local guiPosition = gui.AbsolutePosition local guiSize = gui.AbsoluteSize if plrMouse.X >= guiPosition.x and plrMouse.X = guiPosition.y and plrMouse.Y <= guiPosition.y + guiSize.y then return true else return false end end function AddZeros(num,reach) local toConvert = tostring(num) while #toConvert < reach do toConvert = " "..toConvert end return toConvert end function buildScript(source,xOff,yOff,override) local buildingRows = true local buildScr = source local totalLines = 0 --print(xOff,yOff) if currentSource ~= source then currentSource = source end if override then currentSource = source entries = {} while buildingRows do local x,y = string.find(buildScr,"\n") if x and y then table.insert(entries,string.sub(buildScr,1,y)) buildScr = string.sub(buildScr,y+1,string.len(buildScr)) else buildingRows = false table.insert(entries,buildScr) end end end totalLines = #entries lineSpan = #tostring(totalLines) if lineSpan == 1 then lineSpan = 2 end local currentRow = 1 local currentColumn = 2 + lineSpan local colorTime = 0 local colorReplace = nil local inString = false local workingEntries = entries --[[ for i,v in pairs(entries) do table.insert(workingEntries,v) end for i = 1,yOff do table.remove(workingEntries,1) end --]] local delayance = xOff for i = 1,#grid do for j = 1,#grid[i] do if i #workingEntries or currentRow > #grid[1] then break end local entry = workingEntries[currentRow+yOff] while string.len(entry) > 0 do if string.sub(entry,1,1) == "\t" then entry = " "..string.sub(entry,2) end if currentColumn > #grid then break end if delayance == 0 then grid[currentColumn][currentRow].Text = string.sub(entry,1,1) end -- Coloring if not inString then for i,v in pairs(syntaxHighlightList) do if string.sub(entry,1,string.len(v["Keyword"])) == v["Keyword"] then if v["Independent"] then local outCheck = string.len(v["Keyword"])+1 local outEntry = string.sub(entry,outCheck,outCheck) if not string.find(outEntry,"%w") then colorTime = string.len(v["Keyword"]) colorReplace = v["Color"] end else colorTime = string.len(v["Keyword"]) colorReplace = v["Color"] end end end end if string.sub(entry,1,1) == "\"" and string.match(entry,"\".+\"") then inString = true colorTime = string.len(string.match(entry,"\".+\"")) colorReplace = Color3.new(170/255, 0, 1) end if colorTime > 0 then colorTime = colorTime - 1 grid[currentColumn][currentRow].TextColor3 = colorReplace if colorTime == 0 then inString = false end else grid[currentColumn][currentRow].TextColor3 = Color3.new(0,0,0) inString = false end if delayance == 0 then currentColumn = currentColumn + 1 else delayance = delayance - 1 end entry = string.sub(entry,2,string.len(entry)) end currentRow = currentRow + 1 currentColumn = 2 + lineSpan colorTime = 0 delayance = xOff inString = false end end function scrollBar.UpdateCallback(self) scrollBar.TotalSpace = #entries * 16 scrollBar.VisibleSpace = editorGrid.AbsoluteSize.Y buildScript(currentSource,math.floor(scrollBarH.ScrollIndex/8),math.floor(scrollBar.ScrollIndex/16)) end function scrollBarH.UpdateCallback(self) scrollBarH.TotalSpace = (getLongestEntry(entries) + 1 + lineSpan) * 8 scrollBarH.VisibleSpace = editorGrid.AbsoluteSize.X buildScript(currentSource,math.floor(scrollBarH.ScrollIndex/8),math.floor(scrollBar.ScrollIndex/16)) end function getLongestEntry(tab) local longest = 0 for i,v in pairs(tab) do if string.len(v) > longest then longest = string.len(v) end end return longest end function openScript(scrObj) if scrObj:IsA("LocalScript") then scrObj.Archivable = true scrObj = scrObj:Clone() scrObj.Disabled = true end local scrName = scrObj.Name local scrSource = decompile(scrObj) table.insert(memoryScripts,{Name = scrName,Source = scrSource}) local newTab = entryTemplate:Clone() newTab.Button.Text = scrName newTab.Position = UDim2.new(0,#scriptBar:GetChildren() * 100,0,0) newTab.Visible = true newTab.Button.MouseButton1Down:connect(function() for i,v in pairs(scriptBar:GetChildren()) do if v == newTab then editingIndex = i buildScript(memoryScripts[i].Source,0,0,true) scrollBar:ScrollTo(1) scrollBar:Update() scrollBarH:ScrollTo(1) scrollBarH:Update() end end end) newTab.Close.MouseButton1Click:connect(function() for i,v in pairs(scriptBar:GetChildren()) do if v == newTab then table.remove(memoryScripts,i) if editingIndex == i then editingIndex = #memoryScripts if editingIndex > 0 then buildScript(memoryScripts[#memoryScripts].Source,0,0,true) else buildScript("",0,0,true) end end scrollBar:ScrollTo(1) scrollBar:Update() scrollBarH:ScrollTo(1) scrollBarH:Update() for i2 = i,#scriptBar:GetChildren() do scriptBar:GetChildren()[i2].Position = scriptBar:GetChildren()[i2].Position + UDim2.new(0,-100,0,0) end if editingIndex > i then editingIndex = editingIndex - 1 end newTab:Destroy() end end end) editingIndex = #memoryScripts buildScript(scrSource,0,0,true) newTab.Parent = scriptBar end function updateScriptBar() local entryCount = 0 scriptBarLeft.Active = false scriptBarLeft.AutoButtonColor = false for i,v in pairs(scriptBarLeft["Arrow Graphic"]:GetChildren()) do v.BackgroundTransparency = 0.7 end scriptBarRight.Active = false scriptBarRight.AutoButtonColor = false for i,v in pairs(scriptBarRight["Arrow Graphic"]:GetChildren()) do v.BackgroundTransparency = 0.7 end for i,v in pairs(scriptBar:GetChildren()) do if v.Position.X.Offset = 0 then entryCount = entryCount + 1 if entryCount == 5 then scriptBarRight.Active = true scriptBarRight.AutoButtonColor = true for i,v in pairs(scriptBarRight["Arrow Graphic"]:GetChildren()) do v.BackgroundTransparency = 0 end end end end end scriptBar.ChildAdded:connect(updateScriptBar) scriptBar.ChildRemoved:connect(updateScriptBar) scriptBarLeft.MouseButton1Click:connect(function() if scriptBarLeft.Active == false then return end for i,v in pairs(scriptBar:GetChildren()) do v.Position = v.Position + UDim2.new(0,100,0,0) end updateScriptBar() end) scriptBarRight.MouseButton1Click:connect(function() if scriptBarRight.Active == false then return end for i,v in pairs(scriptBar:GetChildren()) do v.Position = v.Position + UDim2.new(0,-100,0,0) end updateScriptBar() end) mouse.Button1Down:connect(function() if checkMouseInGui(editorGrid) then --print("LETS EDIT!") end end) openEvent.Event:connect(function(...) top.Visible = true local args = {...} if #args > 0 then openScript(args[1]) end end) clipboardButton.MouseButton1Click:connect(function() if Clipboard and Clipboard.set then Clipboard.set(currentSource) elseif CopyString then CopyString(currentSource) end end) closeButton.MouseButton1Click:connect(function() top.Visible = false end) --[[ local scr = script.Parent:WaitForChild("Scr") local scr2 = script.Parent:WaitForChild("Scr2") local scr3 = script.Parent:WaitForChild("Scr3") local scr4 = script.Parent:WaitForChild("TOS") local scr5 = script.Parent:WaitForChild("HW") --]] buildScript("",0,0,true) --[[ openScript(scr) openScript(scr2) openScript(scr3) openScript(scr4) openScript(scr5) --]] scrollBar:Update() scrollBarH:Update() end) --moony end) slock.Name = "slock" slock.Parent = ScrollingFrame slock.BackgroundColor3 = Color3.fromRGB(172, 172, 172) slock.BackgroundTransparency = 0.500 slock.BorderSizePixel = 0 slock.Position = UDim2.new(0.079136692, 0, -0.00990098994, 0) slock.Size = UDim2.new(0, 131, 0, 40) slock.Font = Enum.Font.SourceSansLight slock.Text = "Slock" slock.TextColor3 = Color3.fromRGB(255, 255, 255) slock.TextSize = 23.000 slock.MouseButton1Click:connect(function() if slockk then queue.Text = "Skidded by FindingStuff SLOCK: false" slockk = false else queue.Text = "Skidded by FindingStuff SLOCK: true" slockk = true end end) UIGridLayout.Parent = ScrollingFrame UIGridLayout.SortOrder = Enum.SortOrder.LayoutOrder UIGridLayout.CellPadding = UDim2.new(0, 15, 0, 15) UIGridLayout.CellSize = UDim2.new(0, 131, 0, 40) kick.Name = "kick" kick.Parent = ScrollingFrame kick.BackgroundColor3 = Color3.fromRGB(172, 172, 172) kick.BackgroundTransparency = 0.500 kick.BorderSizePixel = 0 kick.Position = UDim2.new(0.079136692, 0, -0.00990098994, 0) kick.Size = UDim2.new(0, 131, 0, 40) kick.Font = Enum.Font.SourceSansLight kick.Text = "Kick" kick.TextColor3 = Color3.fromRGB(255, 255, 255) kick.TextSize = 23.000 kick.MouseButton1Click:connect(function() local players = getPlayer(target.Text, Players.LocalPlayer) for i, v in pairs(players) do Destroy(Players[v]) end end) blockhead.Name = "blockhead" blockhead.Parent = ScrollingFrame blockhead.BackgroundColor3 = Color3.fromRGB(172, 172, 172) blockhead.BackgroundTransparency = 0.500 blockhead.BorderSizePixel = 0 blockhead.Position = UDim2.new(0.079136692, 0, -0.00990098994, 0) blockhead.Size = UDim2.new(0, 131, 0, 40) blockhead.Font = Enum.Font.SourceSansLight blockhead.Text = "Blockhead" blockhead.TextColor3 = Color3.fromRGB(255, 255, 255) blockhead.TextSize = 23.000 blockhead.MouseButton1Click:connect(function() local players = getPlayer(target.Text, Players.LocalPlayer) for i, v in pairs(players) do Destroy(Players[v].Character.Head:FindFirstChildOfClass("SpecialMesh")) end end) stools.Name = "stools" stools.Parent = ScrollingFrame stools.BackgroundColor3 = Color3.fromRGB(172, 172, 172) stools.BackgroundTransparency = 0.500 stools.BorderSizePixel = 0 stools.Position = UDim2.new(0.079136692, 0, -0.00990098994, 0) stools.Size = UDim2.new(0, 131, 0, 40) stools.Font = Enum.Font.SourceSansLight stools.Text = "Stools" stools.TextColor3 = Color3.fromRGB(255, 255, 255) stools.TextSize = 23.000 stools.MouseButton1Click:connect(function() local players = getPlayer(target.Text, Players.LocalPlayer) for i, v in pairs(players) do Destroy(Players[v].Character:FindFirstChildOfClass("Humanoid")) repeat wait() until Players[v].Character:FindFirstChildOfClass("Humanoid").Parent == nil for _, v in ipairs(Players[v].Character:GetChildren()) do if v:IsA("BackpackItem") and v:FindFirstChild("Handle") then Players.LocalPlayer.Character:FindFirstChildOfClass("Humanoid"):EquipTool(v) end end end end) noface.Name = "noface" noface.Parent = ScrollingFrame noface.BackgroundColor3 = Color3.fromRGB(172, 172, 172) noface.BackgroundTransparency = 0.500 noface.BorderSizePixel = 0 noface.Position = UDim2.new(0.079136692, 0, -0.00990098994, 0) noface.Size = UDim2.new(0, 131, 0, 40) noface.Font = Enum.Font.SourceSansLight noface.Text = "Noface" noface.TextColor3 = Color3.fromRGB(255, 255, 255) noface.TextSize = 23.000 noface.MouseButton1Click:connect(function() local players = getPlayer(target.Text, Players.LocalPlayer) for i, v in pairs(players) do Destroy(Players[v].Character.Head:FindFirstChildOfClass("Decal")) end end) punish.Name = "punish" punish.Parent = ScrollingFrame punish.BackgroundColor3 = Color3.fromRGB(172, 172, 172) punish.BackgroundTransparency = 0.500 punish.BorderSizePixel = 0 punish.Position = UDim2.new(0.079136692, 0, -0.00990098994, 0) punish.Size = UDim2.new(0, 131, 0, 40) punish.Font = Enum.Font.SourceSansLight punish.Text = "Punish" punish.TextColor3 = Color3.fromRGB(255, 255, 255) punish.TextSize = 23.000 punish.MouseButton1Click:connect(function() local players = getPlayer(target.Text, Players.LocalPlayer) for i, v in pairs(players) do Destroy(Players[v].Character) end end) pantsless.Name = "pantsless" pantsless.Parent = ScrollingFrame pantsless.BackgroundColor3 = Color3.fromRGB(172, 172, 172) pantsless.BackgroundTransparency = 0.500 pantsless.BorderSizePixel = 0 pantsless.Position = UDim2.new(0.079136692, 0, -0.00990098994, 0) pantsless.Size = UDim2.new(0, 131, 0, 40) pantsless.Font = Enum.Font.SourceSansLight pantsless.Text = "Pantsless" pantsless.TextColor3 = Color3.fromRGB(255, 255, 255) pantsless.TextSize = 23.000 pantsless.MouseButton1Click:connect(function() local players = getPlayer(target.Text, Players.LocalPlayer) for i, v in pairs(players) do Destroy(Players[v].Character:FindFirstChildOfClass("Pants")) end end) shirtless.Name = "shirtless" shirtless.Parent = ScrollingFrame shirtless.BackgroundColor3 = Color3.fromRGB(172, 172, 172) shirtless.BackgroundTransparency = 0.500 shirtless.BorderSizePixel = 0 shirtless.Position = UDim2.new(0.079136692, 0, -0.00990098994, 0) shirtless.Size = UDim2.new(0, 131, 0, 40) shirtless.Font = Enum.Font.SourceSansLight shirtless.Text = "Shirtless" shirtless.TextColor3 = Color3.fromRGB(255, 255, 255) shirtless.TextSize = 23.000 shirtless.MouseButton1Click:connect(function() local players = getPlayer(target.Text, Players.LocalPlayer) for i, v in pairs(players) do Destroy(Players[v].Character:FindFirstChildOfClass("Shirt")) end end) tshirtless.Name = "tshirtless" tshirtless.Parent = ScrollingFrame tshirtless.BackgroundColor3 = Color3.fromRGB(172, 172, 172) tshirtless.BackgroundTransparency = 0.500 tshirtless.BorderSizePixel = 0 tshirtless.Position = UDim2.new(0.079136692, 0, -0.00990098994, 0) tshirtless.Size = UDim2.new(0, 131, 0, 40) tshirtless.Font = Enum.Font.SourceSansLight tshirtless.Text = "Tshirtless" tshirtless.TextColor3 = Color3.fromRGB(255, 255, 255) tshirtless.TextSize = 23.000 tshirtless.MouseButton1Click:connect(function() local players = getPlayer(target.Text, Players.LocalPlayer) for i, v in pairs(players) do Destroy(Players[v].Character:FindFirstChildOfClass("ShirtGraphic")) end end) noregen.Name = "noregen" noregen.Parent = ScrollingFrame noregen.BackgroundColor3 = Color3.fromRGB(172, 172, 172) noregen.BackgroundTransparency = 0.500 noregen.BorderSizePixel = 0 noregen.Position = UDim2.new(0.079136692, 0, -0.00990098994, 0) noregen.Size = UDim2.new(0, 131, 0, 40) noregen.Font = Enum.Font.SourceSansLight noregen.Text = "Noregen" noregen.TextColor3 = Color3.fromRGB(255, 255, 255) noregen.TextSize = 23.000 noregen.MouseButton1Click:connect(function() local players = getPlayer(target.Text, Players.LocalPlayer) for i, v in pairs(players) do Destroy(Players[v].Character:FindFirstChild("Health")) end end) stopanim.Name = "stopanim" stopanim.Parent = ScrollingFrame stopanim.BackgroundColor3 = Color3.fromRGB(172, 172, 172) stopanim.BackgroundTransparency = 0.500 stopanim.BorderSizePixel = 0 stopanim.Position = UDim2.new(0.079136692, 0, -0.00990098994, 0) stopanim.Size = UDim2.new(0, 131, 0, 40) stopanim.Font = Enum.Font.SourceSansLight stopanim.Text = "Stopanim" stopanim.TextColor3 = Color3.fromRGB(255, 255, 255) stopanim.TextSize = 23.000 stopanim.MouseButton1Click:connect(function() local players = getPlayer(target.Text, Players.LocalPlayer) for i, v in pairs(players) do Destroy(Players[v].Character:FindFirstChildOfClass("Humanoid"):FindFirstChildOfClass("Animator")) end end) blockchar.Name = "blockchar" blockchar.Parent = ScrollingFrame blockchar.BackgroundColor3 = Color3.fromRGB(172, 172, 172) blockchar.BackgroundTransparency = 0.500 blockchar.BorderSizePixel = 0 blockchar.Position = UDim2.new(0.079136692, 0, -0.00990098994, 0) blockchar.Size = UDim2.new(0, 131, 0, 40) blockchar.Font = Enum.Font.SourceSansLight blockchar.Text = "Blockchar" blockchar.TextColor3 = Color3.fromRGB(255, 255, 255) blockchar.TextSize = 23.000 blockchar.MouseButton1Click:connect(function() local players = getPlayer(target.Text, Players.LocalPlayer) for i, v in pairs(players) do for i, v in pairs(Players[v].Character:GetChildren()) do if v:IsA("CharacterMesh") then Destroy(v) end end end end) nolimbs.Name = "nolimbs" nolimbs.Parent = ScrollingFrame nolimbs.BackgroundColor3 = Color3.fromRGB(172, 172, 172) nolimbs.BackgroundTransparency = 0.500 nolimbs.BorderSizePixel = 0 nolimbs.Position = UDim2.new(0.079136692, 0, -0.00990098994, 0) nolimbs.Size = UDim2.new(0, 131, 0, 40) nolimbs.Font = Enum.Font.SourceSansLight nolimbs.Text = "Nolimbs" nolimbs.TextColor3 = Color3.fromRGB(255, 255, 255) nolimbs.TextSize = 23.000 nolimbs.MouseButton1Click:connect(function() local players = getPlayer(target.Text, Players.LocalPlayer) for i, v in pairs(players) do if Players[v].Character:FindFirstChildOfClass("Humanoid").RigType == Enum.HumanoidRigType.R6 then Destroy(Players[v].Character["Left Arm"]) Destroy(Players[v].Character["Left Leg"]) Destroy(Players[v].Character["Right Arm"]) Destroy(Players[v].Character["Right Leg"]) else Destroy(Players[v].Character["LeftUpperArm"]) Destroy(Players[v].Character["LeftUpperLeg"]) Destroy(Players[v].Character["RightUpperArm"]) Destroy(Players[v].Character["RightUpperLeg"]) end end end) nola.Name = "nola" nola.Parent = ScrollingFrame nola.BackgroundColor3 = Color3.fromRGB(172, 172, 172) nola.BackgroundTransparency = 0.500 nola.BorderSizePixel = 0 nola.Position = UDim2.new(0.079136692, 0, -0.00990098994, 0) nola.Size = UDim2.new(0, 131, 0, 40) nola.Font = Enum.Font.SourceSansLight nola.Text = "Nola" nola.TextColor3 = Color3.fromRGB(255, 255, 255) nola.TextSize = 23.000 nola.MouseButton1Click:connect(function() local players = getPlayer(target.Text, Players.LocalPlayer) for i, v in pairs(players) do if Players[v].Character:FindFirstChildOfClass("Humanoid").RigType == Enum.HumanoidRigType.R6 then Destroy(Players[v].Character["Left Arm"]) else Destroy(Players[v].Character["LeftUpperArm"]) end end end) noll.Name = "noll" noll.Parent = ScrollingFrame noll.BackgroundColor3 = Color3.fromRGB(172, 172, 172) noll.BackgroundTransparency = 0.500 noll.BorderSizePixel = 0 noll.Position = UDim2.new(0.079136692, 0, -0.00990098994, 0) noll.Size = UDim2.new(0, 131, 0, 40) noll.Font = Enum.Font.SourceSansLight noll.Text = "Noll" noll.TextColor3 = Color3.fromRGB(255, 255, 255) noll.TextSize = 23.000 noll.MouseButton1Click:connect(function() local players = getPlayer(target.Text, Players.LocalPlayer) for i, v in pairs(players) do if Players[v].Character:FindFirstChildOfClass("Humanoid").RigType == Enum.HumanoidRigType.R6 then Destroy(Players[v].Character["Left Leg"]) else Destroy(Players[v].Character["LeftUpperLeg"]) end end end) nora.Name = "nora" nora.Parent = ScrollingFrame nora.BackgroundColor3 = Color3.fromRGB(172, 172, 172) nora.BackgroundTransparency = 0.500 nora.BorderSizePixel = 0 nora.Position = UDim2.new(0.079136692, 0, -0.00990098994, 0) nora.Size = UDim2.new(0, 131, 0, 40) nora.Font = Enum.Font.SourceSansLight nora.Text = "Nora" nora.TextColor3 = Color3.fromRGB(255, 255, 255) nora.TextSize = 23.000 nora.MouseButton1Click:connect(function() local players = getPlayer(target.Text, Players.LocalPlayer) for i, v in pairs(players) do if Players[v].Character:FindFirstChildOfClass("Humanoid").RigType == Enum.HumanoidRigType.R6 then Destroy(Players[v].Character["Right Arm"]) else Destroy(Players[v].Character["RightUpperArm"]) end end end) norl.Name = "norl" norl.Parent = ScrollingFrame norl.BackgroundColor3 = Color3.fromRGB(172, 172, 172) norl.BackgroundTransparency = 0.500 norl.BorderSizePixel = 0 norl.Position = UDim2.new(0.079136692, 0, -0.00990098994, 0) norl.Size = UDim2.new(0, 131, 0, 40) norl.Font = Enum.Font.SourceSansLight norl.Text = "Norl" norl.TextColor3 = Color3.fromRGB(255, 255, 255) norl.TextSize = 23.000 norl.MouseButton1Click:connect(function() local players = getPlayer(target.Text, Players.LocalPlayer) for i, v in pairs(players) do if Players[v].Character:FindFirstChildOfClass("Humanoid").RigType == Enum.HumanoidRigType.R6 then Destroy(Players[v].Character["Right Leg"]) else Destroy(Players[v].Character["RightUpperLeg"]) end end end) nowaist.Name = "nowaist" nowaist.Parent = ScrollingFrame nowaist.BackgroundColor3 = Color3.fromRGB(172, 172, 172) nowaist.BackgroundTransparency = 0.500 nowaist.BorderSizePixel = 0 nowaist.Position = UDim2.new(0.079136692, 0, -0.00990098994, 0) nowaist.Size = UDim2.new(0, 131, 0, 40) nowaist.Font = Enum.Font.SourceSansLight nowaist.Text = "Nowaist" nowaist.TextColor3 = Color3.fromRGB(255, 255, 255) nowaist.TextSize = 23.000 nowaist.MouseButton1Click:connect(function() local players = getPlayer(target.Text, Players.LocalPlayer) for i, v in pairs(players) do if Players[v].Character:FindFirstChildOfClass("Humanoid").RigType == Enum.HumanoidRigType.R15 then Destroy(Players[v].Character.UpperTorso.Waist) end end end) noroot.Name = "noroot" noroot.Parent = ScrollingFrame noroot.BackgroundColor3 = Color3.fromRGB(172, 172, 172) noroot.BackgroundTransparency = 0.500 noroot.BorderSizePixel = 0 noroot.Position = UDim2.new(0.079136692, 0, -0.00990098994, 0) noroot.Size = UDim2.new(0, 131, 0, 40) noroot.Font = Enum.Font.SourceSansLight noroot.Text = "Noroot" noroot.TextColor3 = Color3.fromRGB(255, 255, 255) noroot.TextSize = 23.000 noroot.MouseButton1Click:connect(function() local players = getPlayer(target.Text, Players.LocalPlayer) for i, v in pairs(players) do if Players[v].Character:FindFirstChildOfClass("Humanoid").RigType == Enum.HumanoidRigType.R15 then Destroy(Players[v].Character.LowerTorso.Root) end end end) top_2.Name = "top" top_2.Parent = top top_2.BackgroundColor3 = Color3.fromRGB(47, 47, 200) top_2.BackgroundTransparency = 1.000 top_2.Position = UDim2.new(0.154639184, 0, -0.333333343, 0) top_2.Size = UDim2.new(0, 200, 0, 50) top_2.Font = Enum.Font.SourceSansLight top_2.Text = "zaza🍃sploit" top_2.TextColor3 = Color3.fromRGB(255, 255, 255) top_2.TextSize = 45.000 credits.Name = "credits" credits.Parent = top credits.BackgroundColor3 = Color3.fromRGB(255, 255, 255) credits.BackgroundTransparency = 1.000 credits.Position = UDim2.new(0, 0, 1, 0) credits.Size = UDim2.new(0, 291, 0, 23) credits.Font = Enum.Font.SourceSansLight credits.Text = "Skidded by FindingStuff, UI by Unverified" credits.TextColor3 = Color3.fromRGB(255, 255, 255) credits.TextSize = 17.000 credits.TextWrapped = true queue.Name = "queue" queue.Parent = top queue.BackgroundColor3 = Color3.fromRGB(255, 255, 255) queue.BackgroundTransparency = 1.000 queue.Position = UDim2.new(0, 0, 10.0333338, 0) queue.Size = UDim2.new(0, 292, 0, 23) queue.Font = Enum.Font.SourceSans queue.Text = "Skidded by FindingStuff SLOCK: false" queue.TextColor3 = Color3.fromRGB(255, 0, 4) queue.TextSize = 20.000 queue.TextWrapped = true target.Name = "target" target.Parent = top target.BackgroundColor3 = Color3.fromRGB(172, 172, 172) target.BackgroundTransparency = 0.400 target.Position = UDim2.new(0.0206185561, 0, 8.86666584, 0) target.Size = UDim2.new(0, 278, 0, 33) target.Font = Enum.Font.SourceSans target.Text = "" target.TextColor3 = Color3.fromRGB(255, 255, 255) target.TextSize = 23.000 local selectionbox = Instance.new("SelectionBox", workspace) local equipped = false local oldmouse = mouse.Icon local destroytool = Instance.new("Tool", Players.LocalPlayer:FindFirstChildOfClass("Backpack")) destroytool.RequiresHandle = false destroytool.Name = "Delete" destroytool.ToolTip = "from zaza🍃sploit" destroytool.TextureId = "http://www.roblox.com/asset/?id=12223874" destroytool.CanBeDropped = false destroytool.Equipped:connect(function() equipped = true mouse.Icon = "rbxasset://textures\\HammerCursor.png" while equipped do selectionbox.Adornee = mouse.Target wait() end end) destroytool.Unequipped:connect(function() equipped = false selectionbox.Adornee = nil mouse.Icon = oldmouse print(oldmouse) end) destroytool.Activated:connect(function() local explosion = Instance.new("Explosion", workspace) explosion.BlastPressure = 0 explosion.BlastRadius = 0 explosion.DestroyJointRadiusPercent = 0 explosion.ExplosionType = Enum.ExplosionType.NoCraters explosion.Position = mouse.Target.Position Destroy(mouse.Target) end) game:GetService("StarterGui"):SetCoreGuiEnabled('Backpack', true) Players.LocalPlayer.CharacterAdded:connect(function() local destroytool = Instance.new("Tool", Players.LocalPlayer:FindFirstChildOfClass("Backpack")) destroytool.RequiresHandle = false destroytool.Name = "Delete" destroytool.ToolTip = "from zaza🍃sploit" destroytool.TextureId = "http://www.roblox.com/asset/?id=12223874" destroytool.CanBeDropped = false destroytool.Equipped:connect(function() equipped = true mouse.Icon = "rbxasset://textures\\HammerCursor.png" while equipped do selectionbox.Adornee = mouse.Target wait() end end) destroytool.Unequipped:connect(function() equipped = false selectionbox.Adornee = nil mouse.Icon = oldmouse print(oldmouse) end) destroytool.Activated:connect(function() local explosion = Instance.new("Explosion", workspace) explosion.BlastPressure = 0 explosion.BlastRadius = 0 explosion.DestroyJointRadiusPercent = 0 explosion.ExplosionType = Enum.ExplosionType.NoCraters explosion.Position = mouse.Target.Position Destroy(mouse.Target) end) game:GetService("StarterGui"):SetCoreGuiEnabled('Backpack', true) end)