Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function sandbox(var,func)
- local env = getfenv(func)
- local newenv = setmetatable({},{
- __index = function(self,k)
- if k=="script" then
- return var
- else
- return env[k]
- end
- end,
- })
- setfenv(func,newenv)
- return func
- end
- cors = {}
- mas = Instance.new("Model",game:GetService("Lighting"))
- ScreenGui0 = Instance.new("ScreenGui")
- TextButton1 = Instance.new("TextButton")
- LocalScript2 = Instance.new("LocalScript")
- Frame3 = Instance.new("Frame")
- TextButton4 = Instance.new("TextButton")
- LocalScript5 = Instance.new("LocalScript")
- TextButton6 = Instance.new("TextButton")
- TextButton7 = Instance.new("TextButton")
- LocalScript8 = Instance.new("LocalScript")
- Frame9 = Instance.new("Frame")
- Frame10 = Instance.new("Frame")
- TextLabel11 = Instance.new("TextLabel")
- Frame12 = Instance.new("Frame")
- ImageButton13 = Instance.new("ImageButton")
- Frame14 = Instance.new("Frame")
- Frame15 = Instance.new("Frame")
- Frame16 = Instance.new("Frame")
- Frame17 = Instance.new("Frame")
- Frame18 = Instance.new("Frame")
- ImageButton19 = Instance.new("ImageButton")
- Frame20 = Instance.new("Frame")
- Frame21 = Instance.new("Frame")
- Frame22 = Instance.new("Frame")
- Frame23 = Instance.new("Frame")
- Frame24 = Instance.new("Frame")
- ImageButton25 = Instance.new("ImageButton")
- ImageButton26 = Instance.new("ImageButton")
- Frame27 = Instance.new("Frame")
- Frame28 = Instance.new("Frame")
- Frame29 = Instance.new("Frame")
- Frame30 = Instance.new("Frame")
- LocalScript31 = Instance.new("LocalScript")
- Frame32 = Instance.new("Frame")
- TextLabel33 = Instance.new("TextLabel")
- Frame34 = Instance.new("Frame")
- Frame35 = Instance.new("Frame")
- TextLabel36 = Instance.new("TextLabel")
- TextLabel37 = Instance.new("TextLabel")
- Frame38 = Instance.new("Frame")
- Frame39 = Instance.new("Frame")
- TextLabel40 = Instance.new("TextLabel")
- TextBox41 = Instance.new("TextBox")
- ImageButton42 = Instance.new("ImageButton")
- LocalScript43 = Instance.new("LocalScript")
- LocalScript44 = Instance.new("LocalScript")
- Frame45 = Instance.new("Frame")
- Frame46 = Instance.new("Frame")
- TextLabel47 = Instance.new("TextLabel")
- TextLabel48 = Instance.new("TextLabel")
- Frame49 = Instance.new("Frame")
- ImageButton50 = Instance.new("ImageButton")
- Frame51 = Instance.new("Frame")
- Frame52 = Instance.new("Frame")
- Frame53 = Instance.new("Frame")
- Frame54 = Instance.new("Frame")
- Frame55 = Instance.new("Frame")
- ImageButton56 = Instance.new("ImageButton")
- Frame57 = Instance.new("Frame")
- Frame58 = Instance.new("Frame")
- Frame59 = Instance.new("Frame")
- Frame60 = Instance.new("Frame")
- Frame61 = Instance.new("Frame")
- ImageButton62 = Instance.new("ImageButton")
- ImageButton63 = Instance.new("ImageButton")
- Frame64 = Instance.new("Frame")
- Frame65 = Instance.new("Frame")
- Frame66 = Instance.new("Frame")
- Frame67 = Instance.new("Frame")
- Frame68 = Instance.new("Frame")
- Frame69 = Instance.new("Frame")
- TextLabel70 = Instance.new("TextLabel")
- TextLabel71 = Instance.new("TextLabel")
- Frame72 = Instance.new("Frame")
- Frame73 = Instance.new("Frame")
- TextLabel74 = Instance.new("TextLabel")
- TextBox75 = Instance.new("TextBox")
- ImageButton76 = Instance.new("ImageButton")
- LocalScript77 = Instance.new("LocalScript")
- TextBox78 = Instance.new("TextBox")
- TextButton79 = Instance.new("TextButton")
- TextLabel80 = Instance.new("TextLabel")
- TextLabel81 = Instance.new("TextLabel")
- Frame82 = Instance.new("Frame")
- LocalScript83 = Instance.new("LocalScript")
- BindableEvent84 = Instance.new("BindableEvent")
- BindableFunction85 = Instance.new("BindableFunction")
- BindableFunction86 = Instance.new("BindableFunction")
- BindableFunction87 = Instance.new("BindableFunction")
- BindableFunction88 = Instance.new("BindableFunction")
- Frame89 = Instance.new("Frame")
- Frame90 = Instance.new("Frame")
- TextLabel91 = Instance.new("TextLabel")
- Frame92 = Instance.new("Frame")
- TextLabel93 = Instance.new("TextLabel")
- Frame94 = Instance.new("Frame")
- ImageButton95 = Instance.new("ImageButton")
- Frame96 = Instance.new("Frame")
- Frame97 = Instance.new("Frame")
- Frame98 = Instance.new("Frame")
- Frame99 = Instance.new("Frame")
- Frame100 = Instance.new("Frame")
- ImageButton101 = Instance.new("ImageButton")
- Frame102 = Instance.new("Frame")
- Frame103 = Instance.new("Frame")
- Frame104 = Instance.new("Frame")
- Frame105 = Instance.new("Frame")
- Frame106 = Instance.new("Frame")
- ImageButton107 = Instance.new("ImageButton")
- ImageButton108 = Instance.new("ImageButton")
- Frame109 = Instance.new("Frame")
- Frame110 = Instance.new("Frame")
- Frame111 = Instance.new("Frame")
- Frame112 = Instance.new("Frame")
- Frame113 = Instance.new("Frame")
- Frame114 = Instance.new("Frame")
- TextLabel115 = Instance.new("TextLabel")
- TextLabel116 = Instance.new("TextLabel")
- Frame117 = Instance.new("Frame")
- Frame118 = Instance.new("Frame")
- TextLabel119 = Instance.new("TextLabel")
- TextBox120 = Instance.new("TextBox")
- ImageButton121 = Instance.new("ImageButton")
- LocalScript122 = Instance.new("LocalScript")
- Script123 = Instance.new("Script")
- BindableFunction124 = Instance.new("BindableFunction")
- ScreenGui0.Name = "Explorer"
- ScreenGui0.Parent = mas
- TextButton1.Name = "Locaa"
- TextButton1.Parent = ScreenGui0
- TextButton1.Size = UDim2.new(0, 145, 0, 40)
- TextButton1.Text = "Local"
- TextButton1.Position = UDim2.new(0, 154, 0, 330)
- TextButton1.Visible = false
- TextButton1.BackgroundColor3 = Color3.new(0, 0, 0)
- TextButton1.BorderSizePixel = 0
- TextButton1.AutoButtonColor = false
- TextButton1.Font = Enum.Font.SourceSansBold
- TextButton1.FontSize = Enum.FontSize.Size36
- TextButton1.TextColor3 = Color3.new(0, 0, 0)
- TextButton1.TextStrokeColor3 = Color3.new(1, 1, 1)
- TextButton1.TextStrokeTransparency = 0
- LocalScript2.Parent = TextButton1
- table.insert(cors,sandbox(LocalScript2,function()
- local player = game.Players.LocalPlayer
- function click()
- player.PlayerGui.KappaGUI.Page1Commands.Visible = false
- player.PlayerGui.KappaGUI.Close.Visible = true
- player.PlayerGui.KappaGUI.Open.Visible = false
- player.PlayerGui.KappaGUI.Page2Commands.Visible = true
- player.PlayerGui.KappaGUI.lll.Visible = false
- player.PlayerGui.KappaGUI.rrr.Visible = true
- end
- script.Parent.MouseButton1Down:connect(click)
- end))
- Frame3.Name = "Tools"
- Frame3.Parent = ScreenGui0
- Frame3.Transparency = 1
- Frame3.Size = UDim2.new(0, 100, 0, 100)
- Frame3.Active = true
- Frame3.Visible = false
- Frame3.BackgroundColor3 = Color3.new(1, 1, 1)
- Frame3.BackgroundTransparency = 1
- Frame3.BorderSizePixel = 0
- TextButton4.Name = "Close"
- TextButton4.Parent = ScreenGui0
- TextButton4.Size = UDim2.new(0, 70, 0, 20)
- TextButton4.Text = "Close"
- TextButton4.Position = UDim2.new(0, 4, 0, 464)
- TextButton4.Visible = false
- TextButton4.BackgroundColor3 = Color3.new(0, 0, 1)
- TextButton4.BorderSizePixel = 0
- TextButton4.AutoButtonColor = false
- TextButton4.Font = Enum.Font.ArialBold
- TextButton4.FontSize = Enum.FontSize.Size14
- TextButton4.TextColor3 = Color3.new(1, 1, 1)
- LocalScript5.Parent = TextButton4
- table.insert(cors,sandbox(LocalScript5,function()
- local player = game.Players.LocalPlayer
- function click()
- player.PlayerGui.KappaGUI.Page1Commands.Visible = false
- player.PlayerGui.KappaGUI.Close.Visible = false
- player.PlayerGui.KappaGUI.Open.Visible = true
- player.PlayerGui.KappaGUI.Page2Commands.Visible = false
- player.PlayerGui.KappaGUI.Locaa.Visible = false
- player.PlayerGui.KappaGUI.Main.Visible = false
- player.PlayerGui.KappaGUI.lll.Visible = false
- player.PlayerGui.KappaGUI.rrr.Visible = false
- end
- script.Parent.MouseButton1Down:connect(click)
- end))
- TextButton6.Name = "ExplorerToggle"
- TextButton6.Parent = ScreenGui0
- TextButton6.Transparency = 0.5
- TextButton6.Size = UDim2.new(0, 175, 0, 20)
- TextButton6.Text = "Explorer: CLOSED"
- TextButton6.Position = UDim2.new(0.800000012, 0, 0.100000001, 1)
- TextButton6.BackgroundColor3 = Color3.new(0, 0, 0)
- TextButton6.BackgroundTransparency = 0.5
- TextButton6.BorderColor3 = Color3.new(0, 0, 0)
- TextButton6.BorderSizePixel = 0
- TextButton6.Font = Enum.Font.SourceSans
- TextButton6.FontSize = Enum.FontSize.Size18
- TextButton6.TextColor3 = Color3.new(1, 1, 1)
- TextButton6.TextStrokeColor3 = Color3.new(0.105882, 0.164706, 0.207843)
- TextButton6.TextStrokeTransparency = 0.69999998807907
- TextButton7.Name = "Main"
- TextButton7.Parent = ScreenGui0
- TextButton7.Size = UDim2.new(0, 145, 0, 40)
- TextButton7.Text = "Main"
- TextButton7.Position = UDim2.new(0, 4, 0, 330)
- TextButton7.Visible = false
- TextButton7.BackgroundColor3 = Color3.new(0, 0, 0)
- TextButton7.BorderSizePixel = 0
- TextButton7.AutoButtonColor = false
- TextButton7.Font = Enum.Font.SourceSansBold
- TextButton7.FontSize = Enum.FontSize.Size36
- TextButton7.TextColor3 = Color3.new(0, 0, 0)
- TextButton7.TextStrokeColor3 = Color3.new(1, 1, 1)
- TextButton7.TextStrokeTransparency = 0
- LocalScript8.Parent = TextButton7
- table.insert(cors,sandbox(LocalScript8,function()
- local player = game.Players.LocalPlayer
- function click()
- player.PlayerGui.KappaGUI.Page1Commands.Visible = true
- player.PlayerGui.KappaGUI.Close.Visible = true
- player.PlayerGui.KappaGUI.Open.Visible = false
- player.PlayerGui.KappaGUI.Page2Commands.Visible = false
- player.PlayerGui.KappaGUI.lll.Visible = true
- player.PlayerGui.KappaGUI.rrr.Visible = false
- end
- script.Parent.MouseButton1Down:connect(click)
- end))
- Frame9.Name = "PropertiesPanel"
- Frame9.Parent = ScreenGui0
- Frame9.Transparency = 0.10000000149012
- Frame9.Size = UDim2.new(0, 300, 0.5, -50)
- Frame9.Position = UDim2.new(1, -615, 0, 200)
- Frame9.Active = true
- Frame9.Visible = false
- Frame9.BackgroundColor3 = Color3.new(1, 1, 1)
- Frame9.BackgroundTransparency = 0.10000000149012
- Frame9.BorderColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- Frame10.Name = "List"
- Frame10.Parent = Frame9
- Frame10.Transparency = 1
- Frame10.Size = UDim2.new(1, -16, 1, -18)
- Frame10.Position = UDim2.new(0, 0, 0, 18)
- Frame10.BackgroundTransparency = 1
- Frame10.ClipsDescendants = true
- TextLabel11.Name = "TextWidth"
- TextLabel11.Parent = Frame9
- TextLabel11.Size = UDim2.new(1, 0, 1, 0)
- TextLabel11.Text = "TweenService"
- TextLabel11.Visible = false
- TextLabel11.Font = Enum.Font.SourceSans
- TextLabel11.FontSize = Enum.FontSize.Size14
- TextLabel11.TextXAlignment = Enum.TextXAlignment.Left
- Frame12.Name = "ScrollFrame"
- Frame12.Parent = Frame9
- Frame12.Transparency = 1
- Frame12.Size = UDim2.new(0, 16, 1, -18)
- Frame12.Position = UDim2.new(1, -16, 0, 18)
- Frame12.BackgroundTransparency = 1
- ImageButton13.Name = "ScrollDown"
- ImageButton13.Parent = Frame12
- ImageButton13.Size = UDim2.new(0, 16, 0, 16)
- ImageButton13.Position = UDim2.new(0, 0, 1, -16)
- ImageButton13.BackgroundColor3 = Color3.new(0.866667, 0.866667, 0.866667)
- ImageButton13.BorderColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- Frame14.Name = "Arrow Graphic"
- Frame14.Parent = ImageButton13
- Frame14.Transparency = 1
- Frame14.Size = UDim2.new(0, 8, 0, 8)
- Frame14.Position = UDim2.new(0.5, -4, 0.5, -4)
- Frame14.BackgroundTransparency = 1
- Frame14.BorderSizePixel = 0
- Frame15.Name = "Graphic"
- Frame15.Parent = Frame14
- Frame15.Size = UDim2.new(0.25, 0, 0.125, 0)
- Frame15.Position = UDim2.new(0.375, 0, 0.625, 0)
- Frame15.BackgroundColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- Frame15.BorderSizePixel = 0
- Frame16.Name = "Graphic"
- Frame16.Parent = Frame14
- Frame16.Size = UDim2.new(0.5, 0, 0.125, 0)
- Frame16.Position = UDim2.new(0.25, 0, 0.5, 0)
- Frame16.BackgroundColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- Frame16.BorderSizePixel = 0
- Frame17.Name = "Graphic"
- Frame17.Parent = Frame14
- Frame17.Size = UDim2.new(0.75, 0, 0.125, 0)
- Frame17.Position = UDim2.new(0.125, 0, 0.375, 0)
- Frame17.BackgroundColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- Frame17.BorderSizePixel = 0
- Frame18.Name = "Graphic"
- Frame18.Parent = Frame14
- Frame18.Size = UDim2.new(1, 0, 0.125, 0)
- Frame18.Position = UDim2.new(0, 0, 0.25, 0)
- Frame18.BackgroundColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- Frame18.BorderSizePixel = 0
- ImageButton19.Name = "ScrollUp"
- ImageButton19.Parent = Frame12
- ImageButton19.Size = UDim2.new(0, 16, 0, 16)
- ImageButton19.Active = false
- ImageButton19.BackgroundColor3 = Color3.new(0.866667, 0.866667, 0.866667)
- ImageButton19.BorderColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- ImageButton19.AutoButtonColor = false
- Frame20.Name = "Arrow Graphic"
- Frame20.Parent = ImageButton19
- Frame20.Transparency = 1
- Frame20.Size = UDim2.new(0, 8, 0, 8)
- Frame20.Position = UDim2.new(0.5, -4, 0.5, -4)
- Frame20.BackgroundTransparency = 1
- Frame20.BorderSizePixel = 0
- Frame21.Name = "Graphic"
- Frame21.Parent = Frame20
- Frame21.Transparency = 0.69999998807907
- Frame21.Size = UDim2.new(0.25, 0, 0.125, 0)
- Frame21.Position = UDim2.new(0.375, 0, 0.25, 0)
- Frame21.BackgroundColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- Frame21.BackgroundTransparency = 0.69999998807907
- Frame21.BorderSizePixel = 0
- Frame22.Name = "Graphic"
- Frame22.Parent = Frame20
- Frame22.Transparency = 0.69999998807907
- Frame22.Size = UDim2.new(0.5, 0, 0.125, 0)
- Frame22.Position = UDim2.new(0.25, 0, 0.375, 0)
- Frame22.BackgroundColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- Frame22.BackgroundTransparency = 0.69999998807907
- Frame22.BorderSizePixel = 0
- Frame23.Name = "Graphic"
- Frame23.Parent = Frame20
- Frame23.Transparency = 0.69999998807907
- Frame23.Size = UDim2.new(0.75, 0, 0.125, 0)
- Frame23.Position = UDim2.new(0.125, 0, 0.5, 0)
- Frame23.BackgroundColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- Frame23.BackgroundTransparency = 0.69999998807907
- Frame23.BorderSizePixel = 0
- Frame24.Name = "Graphic"
- Frame24.Parent = Frame20
- Frame24.Transparency = 0.69999998807907
- Frame24.Size = UDim2.new(1, 0, 0.125, 0)
- Frame24.Position = UDim2.new(0, 0, 0.625, 0)
- Frame24.BackgroundColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- Frame24.BackgroundTransparency = 0.69999998807907
- Frame24.BorderSizePixel = 0
- ImageButton25.Name = "ScrollBar"
- ImageButton25.Parent = Frame12
- ImageButton25.Size = UDim2.new(1, 0, 1, -32)
- ImageButton25.Position = UDim2.new(0, 0, 0, 16)
- ImageButton25.BackgroundColor3 = Color3.new(0.94902, 0.94902, 0.94902)
- ImageButton25.BorderColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- ImageButton25.AutoButtonColor = false
- ImageButton26.Name = "ScrollThumb"
- ImageButton26.Parent = ImageButton25
- ImageButton26.Size = UDim2.new(0, 16, 0, 75)
- ImageButton26.BackgroundColor3 = Color3.new(0.866667, 0.866667, 0.866667)
- ImageButton26.BorderColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- ImageButton26.Draggable = true
- ImageButton26.AutoButtonColor = false
- Frame27.Name = "Grip Graphic"
- Frame27.Parent = ImageButton26
- Frame27.Transparency = 1
- Frame27.Size = UDim2.new(0, 6, 0, 6)
- Frame27.Position = UDim2.new(0.5, -3, 0.5, -3)
- Frame27.BackgroundTransparency = 1
- Frame27.BorderSizePixel = 0
- Frame28.Parent = Frame27
- Frame28.Size = UDim2.new(1, 0, 0.166666672, 0)
- Frame28.BorderSizePixel = 0
- Frame29.Parent = Frame27
- Frame29.Size = UDim2.new(1, 0, 0.166666672, 0)
- Frame29.Position = UDim2.new(0, 0, 0.333333343, 0)
- Frame29.BorderSizePixel = 0
- Frame30.Parent = Frame27
- Frame30.Size = UDim2.new(1, 0, 0.166666672, 0)
- Frame30.Position = UDim2.new(0, 0, 0.666666687, 0)
- Frame30.BorderSizePixel = 0
- LocalScript31.Name = "Properties"
- LocalScript31.Parent = Frame9
- table.insert(cors,sandbox(LocalScript31,function()
- local Explorer = script.Parent.Parent:WaitForChild("ExplorerPanel")
- Explorer:WaitForChild("List")
- Explorer:WaitForChild("SelectionChanged")
- local Output = script.Parent.Parent:WaitForChild("OutputPanel")
- local Command = script.Parent.Parent:WaitForChild("CommandPanel")
- local Properties = script.Parent
- local Studio = script.Parent.Parent
- function Recursive(Parent,Do)
- for _,v in pairs(Parent:GetChildren())do
- Do(v)
- Recursive(v,Do)
- end
- end
- Recursive(Studio,function(child)
- if child:IsA("GuiObject") then
- child.ZIndex = 10
- end
- end)
- Studio.ChildAdded:connect(function(child)
- if child:IsA("GuiObject") then
- child.ZIndex = 10
- end
- end)
- Studio.DescendantAdded:connect(function(child) -- same as above? idk
- if child:IsA("GuiObject") then
- child.ZIndex = 10
- end
- end)
- wait(2)
- local Alphabet = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"}
- local Properties_TBL = {"AbsolutePosition","AbsoluteSize","AccountAge","AccountAgeReplicate",
- "Active","Adornee","AllowAmbientOcclusion","AllowTeamChangeOnTouch","AluminumQuality",
- "AlwaysOnTop","Ambient","AmbientReverb","Anchored","Angularvelocity","AnimationId",
- "Archivable","AreHingesDetected","AttachmentForward","AttachmentPoint","AttachmentPos",
- "AttachmentRight","AttachmentUp","AutoAssignable","AutoButtonColor","AutoColorCharacters",
- "AvailablePhysicalMemory","Axes","BackgroundColor","BackgroundColor3","BackgroundTransparency",
- "BaseTextureId","BaseUrl","Bevel","Roundness","BinType","BlastPressure","BlastRadius",
- "BodyColor","BodyPart","BorderColor","BorderColor3","BorderSizePixel","BrickColor",
- "Brightness","Browsable","BubbleChat","BubbleChatLifetime","BubbleChatMaxBubbles",
- "Bulge","Button1DownConnectionCount","Button1UpConnectionCount","Button2DownConnectionCount",
- "Button2UpConnectionCount","C0","C1","CameraMode","CameraSubject","CameraType",
- "CanBeDropped","CanCollide","CartoonFactor","CastShadows","CelestialBodiesShown",
- "CFrame","Cframe","Character","CharacterAppearance","CharacterAutoLoads","ChatScrollLength",
- "ClassicChat","ClassName","ClearTextOnFocus","ClipsDescendants","CollisionSoundEnabled",
- "CollisionSoundVolume","Color","Bottom","Top","ConstrainedValue","ControllingHumanoid",
- "ControlMode","ConversationDistance","CoordinateFrame","CorrodedMetalQuality","CPU",
- "CpuCount","CpuSpeed","CreatorId","CreatorType","CurrentAngle","CurrentCamera",
- "CycleOffset","D","DataCap","DataComplexity","DataComplexityLimit","DataCost",
- "DataReady","Deprecated","DeselectedConnectionCount","DesiredAngle","DiamondPlateQuality",
- "Disabled","DistanceFactor","DistributedGameTime","DopplerScale","Draggable","DraggingV1",
- "Duration","EditorFont","EditorFontSize","EditorTabWidth","ElapsedTime","Elasticity",
- "Enabled","ExplosionType","ExtentsOffset","F0","F1","F2","F3","Face","FaceId","Faces",
- "FieldOfView","Focus","FogColor","FogEnd","FogStart","Font","FontSize","Force","FormFactor",
- "Friction","From","GearGenreSetting","Genre","GeographicLatitude","GfxCard","Graphic",
- "GrassQuality","Grip","GripForward","GripPos","GripRight","GripUp","Guest","HeadsUpDisplay",
- "Health","Heat","Hit","Humanoid","IceQuality","Icon","IdleConnectionCount","Image",
- "InitialPrompt","InOut","InUse","IsPaused","IsPlaying","JobId","Jump","KeyDownConnectionCount",
- "KeyUpConnectionCount","LeftLeg","LeftRight","LinkedSource","LocalPlayer","Location",
- "Locked","LODX","LODY","Looped","Material","MaxActivationDistance","MaxCollisionSounds",
- "MaxExtents","MaxForce","MaxHealth","MaxItems","MaxPlayers","MaxSpeed","MaxThrust",
- "MaxTorque","MaxValue","MaxVelocity","MembershipType","MembershipTypeReplicate","MeshId",
- "MeshType","MinValue","Modal","MouseButton1ClickConnectionCount","MouseButton1DownConnectionCount",
- "MouseButton1UpConnectionCount","MouseButton2ClickConnectionCount","MouseButton2DownConnectionCount",
- "MouseButton2UpConnectionCount","MouseDelta","MouseDragConnectionCount","MouseEnterConnectionCount",
- "MouseHit","MouseLeaveConnectionCount","MouseLock","MouseMovedConnectionCount","MouseTarget",
- "MouseTargetFilter","MouseTargetSurface","MoveConnectionCount","MoveState","MultiLine","Name",
- "NameOcclusion","NetworkOwner","Neutral","NumPlayers","Offset","Opacity","Origin","OsPlatform",
- "OsVer","OverlayTextureId","P","PantsTemplate","ParamA","ParamB","Parent","Part","Part0",
- "Part1","Pitch","PixelShaderModel","PlaceId","PlasticQuality","PlatformStand","PlayCount",
- "PlayerToHideFrom","PlayOnRemove","Point","Port","Position","Preliminary","PrimaryPart",
- "PrivateWorkingSetBytes","Purpose","RAM","Reflectance","ReplicatedSelectedConnectionCount",
- "ResizeableFaces","ResizeIncrement","Resolution","ResponseDialog","RightLeg","RiseVelocity",
- "RobloxLocked","RobloxVersion","RolloffScale","RotVelocity","Scale","Score","ScriptsDisabled",
- "SecondaryColor","Selected","ShadowColor","Shape","Shiny","ShirtTemplate","ShowDeprecatedObjects",
- "ShowDevelopmentGui","ShowPreliminaryObjects","Sides","Sit","Size","SizeConstraint",
- "SizeOffset","SkinColor","SkyboxBk","SkyboxDn","SkyboxFt","SkyboxLf","SkyboxRt","SkyboxUp",
- "SlateQuality","SoundId","Source","SparkleColor","Specular","StarCount",
- "Steer","StickyWheels","StudsBetweenTextures","StudsOffset","StudsPerTileU","StudsPerTileV",
- "Style","Summary","SuperSafeChatReplicate","Surface","Surface0",
- "Surface1","SurfaceInput","Target","TargetFilter","TargetOffset","TargetPoint",
- "TargetRadius","TargetSurface","TeamColor","Terrain","Text","TextBounds","TextColor","TextColor3",
- "TextFits","TextScaled","TextStrokeColor3","TextStrokeTransparency","TextTransparency","Texture",
- "TextureId","TextureSize","TextWrap","TextWrapped","TextXAlignment","TextYAlignment","Throttle",
- "ThrustD","ThrustP","Ticket","Time","TimeOfDay","To","Tone","ToolTip","TopBottom","Torque","Torso",
- "Transparency","TrussDetail","TurnD","TurnP","TurnSpeed","UnitRay","UserDialog","UserId","Value",
- "Version","VertexColor","VideoCaptureEnabled","VideoMemory","VideoQuality",
- "ViewSizeX","ViewSizeY","Visible","Volume","WalkDirection","WalkSpeed","WalkToPart","WalkToPoint",
- "WheelBackwardConnectionCount","WheelForwardConnectionCount","WindowSize","WireRadius","WoodQuality",
- "X","Y","Size","Radius"}
- local LockedProperties = { -- cant be edited
- "ClassName",
- "Parent",
- "userId",
- "MembershipType",
- "CameraSubject",
- "FilteringEnabled",
- }
- local LockedItems = { -- cant be edited
- }
- function GetProperties(obj)
- assert(pcall(function() assert(game.IsA(obj,"Instance")) end),"Should be ROBLOX instance")
- local objProper = {}
- for i = 1,#Properties_TBL do
- local v = Properties_TBL[i]
- if pcall(function() return obj[v] end) and ( not obj:FindFirstChild(v)) then
- objProper[#objProper+1] = v
- end
- end
- return objProper
- end
- local Player = game:service"Players".LocalPlayer
- local Mouse = Player:GetMouse()
- local guis_enabled = {}
- if game:service"StarterGui":GetCoreGuiEnabled(0) then
- guis_enabled[0] = true
- end
- if game:service"StarterGui":GetCoreGuiEnabled(1) then
- guis_enabled[1] = true
- end
- if game:service"StarterGui":GetCoreGuiEnabled(2) then
- guis_enabled[2] = true
- end
- if game:service"StarterGui":GetCoreGuiEnabled(3) then
- guis_enabled[3] = true
- end
- Mouse.KeyDown:connect(function(k)
- if string.byte(k) == 30 then
- Properties.Visible = not Properties.Visible
- Explorer.Visible = Properties.Visible
- Command.Visible = Properties.Visible
- Output.Visible = Properties.Visible
- if Properties.Visible then
- game:service"StarterGui":SetCoreGuiEnabled(4,false)
- else
- for _,v in pairs(guis_enabled) do
- game:service"StarterGui":SetCoreGuiEnabled(_,true)
- end
- end
- end
- end)
- -- generik scroll:
- local scroll = Properties:WaitForChild("ScrollFrame")
- scroll:WaitForChild("ScrollBar"):WaitForChild("ScrollThumb")
- local down,up
- scroll.ScrollBar.MouseButton1Click:connect(function()
- scroll.ScrollBar.ScrollThumb.Position = UDim2.new(0,0,0,scroll.ScrollBar.AbsolutePosition.Y-Mouse.Y)
- end)
- scroll.ScrollBar.ScrollThumb.Changed:connect(function()
- scroll.ScrollBar.ScrollThumb.Position = UDim2.new(0,0,0,scroll.ScrollBar.ScrollThumb.Position.Y.Offset)
- local p = scroll.ScrollBar.ScrollThumb.Position
- if p.Y.Offset < 0 then
- scroll.ScrollBar.ScrollThumb.Position = UDim2.new(0,0,0,0)
- end
- if p.Y.Offset > scroll.ScrollBar.AbsoluteSize.Y-scroll.ScrollBar.ScrollThumb.Size.Y.Offset then
- scroll.ScrollBar.ScrollThumb.Position = UDim2.new(0,0,0,scroll.ScrollBar.AbsoluteSize.Y-scroll.ScrollBar.ScrollThumb.Size.Y.Offset)
- end
- if p.Y.Offset > (23*#Properties.List:GetChildren())-(scroll.ScrollBar.ScrollThumb.Size.Y.Offset/2) then
- scroll.ScrollBar.ScrollThumb.Position = UDim2.new(0,0,0,(23*#Properties.List:GetChildren())-(scroll.ScrollBar.ScrollThumb.Size.Y.Offset/2))
- end
- for _,v in pairs(Properties.List:GetChildren())do
- v.Position = UDim2.new(0,0,0,v.BasePosition.Value)-UDim2.new(0,0,0,4*scroll.ScrollBar.ScrollThumb.Position.Y.Offset)
- end
- end)
- scroll.ScrollDown.MouseButton1Down:connect(function()
- down = true
- repeat wait(.001) for _,v in pairs(Properties.List:GetChildren())do v.Position = v.Position - UDim2.new(0,0,0,1) end until not down
- end)
- scroll.ScrollDown.MouseButton1Up:connect(function()
- down = false
- end)
- scroll.ScrollDown.MouseLeave:connect(function()
- down = false
- end)
- scroll.ScrollUp.MouseButton1Down:connect(function()
- up = true
- repeat wait(.001) for _,v in pairs(Properties.List:GetChildren())do v.Position = v.Position + UDim2.new(0,0,0,1) end until not up
- end)
- scroll.ScrollUp.MouseButton1Up:connect(function()
- up = false
- end)
- scroll.ScrollUp.MouseLeave:connect(function()
- up = false
- end)
- function findInTable(tbl,f)
- for _,v in pairs(tbl)do
- if v == f then
- return true
- end
- end
- return false
- end
- function GetPropertyType(prop,obj)
- local propv = obj[prop]
- if type(propv) == "userdata" then
- local type = "instance"
- pcall(function() -- Detect Vector3
- local x,y,z,lv = propv.X,propv.Y,propv.Z,propv.unit.Z
- if x and y and z and lv then
- type = "vector3"
- end
- end)
- pcall(function() -- Detect CFrame
- local x,y,z,lv,p = propv.X,propv.Y,propv.Z,propv.lookVector,propv.p
- if x and y and z and lv and p then
- type = "cframe"
- end
- end)
- pcall(function() -- Detect UDim2
- local x,y,o1,o2 = propv.X.Offset,propv.Y.Offset,propv.X.Scale,propv.Y.Scale
- if x and y and o1 and o2 then
- type = "udim2"
- end
- end)
- pcall(function() -- Detect BrickColor
- local r,g,b,n,c = propv.r,propv.g,propv.b,propv.Name,propv.Color
- if r and g and b and n and c then
- type = "brickcolor"
- end
- end)
- pcall(function() -- Detect Color3
- local r,g,b = propv.r,propv.g,propv.b
- if r and g and b and not type == "brickcolor" then
- type = "color3"
- end
- end)
- pcall(function() -- Detect enum
- if tostring(propv):sub(1,#"Enum.") == "Enum." then
- type = "enum"
- end
- end)
- return type
- elseif type(propv) == "number" then
- return "number"
- elseif type(propv) == "string" then
- return "string"
- elseif type(propv) == "boolean" then
- return "boolean"
- end
- return "string" -- hm...
- end
- local Object
- local Events = {}
- local color = Color3.new(237/255, 237/255, 238/255)
- local ocolor = color
- Explorer.SelectionChanged.Event:connect(function()
- Object = Explorer.GetSelection:Invoke()[1]
- for _,v in pairs(Events)do v:disconnect() end
- Properties.List:ClearAllChildren()
- if Object then
- local Properties_list = GetProperties(Object)
- for i=1,#Properties_list do
- local _ = Properties_list[i]
- if color ~= ocolor then
- color = ocolor
- else
- color = Color3.new(221/255, 221/255, 222/255)
- end
- local ui = Properties.property:Clone()
- ui.Visible = true
- ui.BackgroundColor3 = color
- ui.Parent = Properties.List
- ui.Position = UDim2.new(0,0,0,(22*(#Properties.List:GetChildren()-1))+(1*(#Properties.List:GetChildren()-1)))
- ui.name.locked.Text = _
- ui.name.unlocked.Text = _
- local bp = Instance.new("NumberValue",ui)
- bp.Name = "BasePosition"
- bp.Value = ui.Position.Y.Offset
- if findInTable(LockedProperties,_) then
- ui.name.locked.Visible = true
- else
- ui.name.unlocked.Visible = true
- end
- local type = GetPropertyType(_,Object)
- local propv = Object[_]
- local img_checked = "http://www.roblox.com/asset/?id=48138491"
- local img_unchecked = "http://www.roblox.com/asset/?id=48138474"
- if findInTable(LockedProperties,_) then
- ui.edit.locked.Visible = true
- ui.edit.locked.Text = tostring(propv)
- elseif type == "number" or type == "string" then
- ui.edit.box.Visible = true
- ui.edit.box.Text = tostring(propv)
- ui.edit.box.FocusLost:connect(function()
- if type == "number" then
- Object[_] = tonumber(ui.edit.box.Text)
- else
- Object[_] = ui.edit.box.Text
- end
- end)
- elseif type == "boolean" then
- ui.edit.check.Visible = true
- if propv then
- ui.edit.check.Image = img_checked
- else
- ui.edit.check.Image = img_unchecked
- end
- ui.edit.check.MouseButton1Click:connect(function()
- Object[_] = not Object[_]
- propv = Object[_]
- if propv then
- ui.edit.check.Image = img_checked
- else
- ui.edit.check.Image = img_unchecked
- end
- end)
- elseif type == "instance" then
- ui.edit.locked.Visible = true
- ui.edit.locked.Text = tostring(propv)
- elseif type == "vector3" then
- ui.edit.box.Visible = true
- ui.edit.box.Text = propv.X..", "..propv.Y..", "..propv.Z
- local origit = ui.edit.box.Text
- ui.edit.box.FocusLost:connect(function()
- local x,y,z
- local n = 1
- for match in ui.edit.box.Text:gsub(" ",""):gmatch("[^,]+") do
- if n == 1 then x = tonumber(match) end
- if n == 2 then y = tonumber(match) end
- if n == 3 then z = tonumber(match) end
- n = n + 1
- end
- x,y,z = tonumber(x),tonumber(y),tonumber(z)
- local origi = Object[_] if not pcall(function() Object[_] = Vector3.new(x,y,z) end) then Object[_] = origi ui.edit.box.Text = origit else origit = ui.edit.box.Text end
- end)
- elseif type == "cframe" then
- ui.edit.box.Visible = true
- ui.edit.box.Text = propv.p.X..", "..propv.p.Y..", "..propv.p.Z
- local origit = ui.edit.box.Text
- ui.edit.box.FocusLost:connect(function()
- local x,y,z
- local n = 1
- for match in ui.edit.box.Text:gsub(" ",""):gmatch("[^,]+") do
- if n == 1 then x = tonumber(match) end
- if n == 2 then y = tonumber(match) end
- if n == 3 then z = tonumber(match) end
- n = n + 1
- end
- x,y,z = tonumber(x),tonumber(y),tonumber(z)
- local origi = Object[_] if not pcall(function() Object[_] = CFrame.new(x,y,z) end) then Object[_] = origi ui.edit.box.Text = origit else origit = ui.edit.box.Text end
- end)
- elseif type == "udim2" then
- ui.edit.box.Visible = true
- ui.edit.box.Text = "{"..propv.X.Scale..", "..propv.X.Offset.."}, {"..propv.Y.Scale..", "..propv.Y.Offset.."}"
- local origit = ui.edit.box.Text
- ui.edit.box.FocusLost:connect(function()
- local xscale,xoffset,yscale,yoffset
- local n = 1
- for match in ui.edit.box.Text:gsub(" ",""):gsub("}",""):gsub("{",""):gmatch("[^,]+") do
- if n == 1 then xscale = tonumber(match) end
- if n == 2 then xoffset = tonumber(match) end
- if n == 3 then yscale = tonumber(match) end
- if n == 4 then yoffset = tonumber(match) end
- n = n + 1
- end
- xscale,xoffset,yscale,yoffset = tonumber(xscale),tonumber(xoffset),tonumber(yscale),tonumber(yoffset)
- local origi = Object[_] if not pcall(function() Object[_] = UDim2.new(xscale,xoffset,yscale,yoffset) end) then Object[_] = origi ui.edit.box.Text = origit else origit = ui.edit.box.Text end
- end)
- elseif type == "color3" then
- ui.edit.box.Visible = true
- ui.edit.box.Text = propv.r*255 ..", "..propv.g*255 ..", "..propv.b*255
- local origit = ui.edit.box.Text
- ui.edit.box.FocusLost:connect(function()
- local r,g,b
- local n = 1
- for match in ui.edit.box.Text:gsub(" ",""):gmatch("[^,]+") do
- if n == 1 then r = tonumber(match) end
- if n == 2 then g = tonumber(match) end
- if n == 3 then b = tonumber(match) end
- n = n + 1
- end
- r,g,b = tonumber(r)/255,tonumber(g)/255,tonumber(b)/255
- local origi = Object[_] if not pcall(function() Object[_] = Color3.new(r,g,b) end) then Object[_] = origi ui.edit.box.Text = origit else origit = ui.edit.box.Text end
- end)
- elseif type == "brickcolor" then
- ui.edit.box.Visible = true
- ui.edit.box.Text = tostring(propv)
- local origit = ui.edit.box.Text
- ui.edit.box.FocusLost:connect(function()
- local origi = Object[_] if not pcall(function() Object[_] = BrickColor.new(ui.edit.box.Text) end) then Object[_] = origi ui.edit.box.Text = origit else origit = ui.edit.box.Text end
- end)
- elseif type == "enum" then
- ui.edit.box.Visible = true
- ui.edit.box.Text = tostring(propv)
- local origit = ui.edit.box.Text
- ui.edit.box.FocusLost:connect(function()
- local origi = Object[_] if not pcall(function() Object[_] = loadstring("return "..ui.edit.box.Text)() end) then Object[_] = origi ui.edit.box.Text = origit else origit = ui.edit.box.Text end
- end)
- end
- end
- end
- end)
- end))
- Frame32.Name = "Header"
- Frame32.Parent = Frame9
- Frame32.Size = UDim2.new(1, 0, 0, 18)
- Frame32.BackgroundColor3 = Color3.new(0.913726, 0.913726, 0.913726)
- Frame32.BorderColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- TextLabel33.Parent = Frame32
- TextLabel33.Transparency = 1
- TextLabel33.Size = UDim2.new(1, -4, 1, 0)
- TextLabel33.Text = "Properties"
- TextLabel33.Position = UDim2.new(0, 4, 0, 0)
- TextLabel33.BackgroundTransparency = 1
- TextLabel33.Font = Enum.Font.SourceSans
- TextLabel33.FontSize = Enum.FontSize.Size14
- TextLabel33.TextColor3 = Color3.new(0, 0, 0)
- TextLabel33.TextXAlignment = Enum.TextXAlignment.Left
- Frame34.Name = "property"
- Frame34.Parent = Frame9
- Frame34.Size = UDim2.new(1, 0, 0, 22)
- Frame34.Position = UDim2.new(0, 0, 0, 1)
- Frame34.Visible = false
- Frame34.BackgroundColor3 = Color3.new(0.866667, 0.866667, 0.870588)
- Frame34.BorderColor3 = Color3.new(0.686275, 0.686275, 0.686275)
- Frame35.Name = "name"
- Frame35.Parent = Frame34
- Frame35.Transparency = 1
- Frame35.Size = UDim2.new(0.5, 0, 1, -1)
- Frame35.BackgroundColor3 = Color3.new(0.992157, 0.984314, 1)
- Frame35.BackgroundTransparency = 1
- TextLabel36.Name = "unlocked"
- TextLabel36.Parent = Frame35
- TextLabel36.Transparency = 1
- TextLabel36.Size = UDim2.new(1, -10, 1, 0)
- TextLabel36.Text = ""
- TextLabel36.Position = UDim2.new(0, 5, 0, 0)
- TextLabel36.Visible = false
- TextLabel36.BackgroundTransparency = 1
- TextLabel36.Font = Enum.Font.SourceSans
- TextLabel36.FontSize = Enum.FontSize.Size14
- TextLabel36.TextColor3 = Color3.new(0.0980392, 0.0980392, 0.0980392)
- TextLabel36.TextWrapped = true
- TextLabel36.TextXAlignment = Enum.TextXAlignment.Left
- TextLabel37.Name = "locked"
- TextLabel37.Parent = Frame35
- TextLabel37.Transparency = 1
- TextLabel37.Size = UDim2.new(1, -10, 1, 0)
- TextLabel37.Text = ""
- TextLabel37.Position = UDim2.new(0, 5, 0, 0)
- TextLabel37.Visible = false
- TextLabel37.BackgroundTransparency = 1
- TextLabel37.Font = Enum.Font.SourceSans
- TextLabel37.FontSize = Enum.FontSize.Size14
- TextLabel37.TextColor3 = Color3.new(0.580392, 0.580392, 0.580392)
- TextLabel37.TextWrapped = true
- TextLabel37.TextXAlignment = Enum.TextXAlignment.Left
- Frame38.Name = "border"
- Frame38.Parent = Frame34
- Frame38.Size = UDim2.new(0, 1, 1, 0)
- Frame38.Position = UDim2.new(0.5, 0, 0, 0)
- Frame38.BackgroundColor3 = Color3.new(0.686275, 0.686275, 0.686275)
- Frame38.BorderColor3 = Color3.new(0.686275, 0.686275, 0.686275)
- Frame38.BorderSizePixel = 0
- Frame39.Name = "edit"
- Frame39.Parent = Frame34
- Frame39.Transparency = 1
- Frame39.Size = UDim2.new(0.5, 0, 1, -1)
- Frame39.Position = UDim2.new(0.5, 0, 0, 0)
- Frame39.BackgroundColor3 = Color3.new(0.992157, 0.984314, 1)
- Frame39.BackgroundTransparency = 1
- TextLabel40.Name = "locked"
- TextLabel40.Parent = Frame39
- TextLabel40.Transparency = 1
- TextLabel40.Size = UDim2.new(1, -10, 1, 0)
- TextLabel40.Text = ""
- TextLabel40.Position = UDim2.new(0, 5, 0, 0)
- TextLabel40.Visible = false
- TextLabel40.BackgroundTransparency = 1
- TextLabel40.Font = Enum.Font.SourceSans
- TextLabel40.FontSize = Enum.FontSize.Size14
- TextLabel40.TextColor3 = Color3.new(0.580392, 0.580392, 0.580392)
- TextLabel40.TextWrapped = true
- TextLabel40.TextXAlignment = Enum.TextXAlignment.Left
- TextBox41.Name = "box"
- TextBox41.Parent = Frame39
- TextBox41.Transparency = 1
- TextBox41.Size = UDim2.new(1, -10, 1, 0)
- TextBox41.Text = ""
- TextBox41.Position = UDim2.new(0, 5, 0, 0)
- TextBox41.Visible = false
- TextBox41.BackgroundTransparency = 1
- TextBox41.Font = Enum.Font.SourceSans
- TextBox41.FontSize = Enum.FontSize.Size14
- TextBox41.TextColor3 = Color3.new(0.0980392, 0.0980392, 0.0980392)
- TextBox41.TextWrapped = true
- TextBox41.TextXAlignment = Enum.TextXAlignment.Left
- ImageButton42.Name = "check"
- ImageButton42.Parent = Frame39
- ImageButton42.Size = UDim2.new(0, 12, 0, 12)
- ImageButton42.Position = UDim2.new(0, 5, 0, 5)
- ImageButton42.Visible = false
- ImageButton42.BackgroundColor3 = Color3.new(0.866667, 0.866667, 0.870588)
- ImageButton42.BorderSizePixel = 0
- LocalScript43.Name = "ExplorerPanelToggle"
- LocalScript43.Parent = ScreenGui0
- table.insert(cors,sandbox(LocalScript43,function()
- local ExplorerPanel = script.Parent["ExplorerPanel"]
- local Button = script.Parent.ExplorerToggle
- local Open = false
- Button.MouseButton1Down:connect(function(open)
- if Open == false then
- Button.Text = "Explorer: OPEN"
- Open = true
- ExplorerPanel.Visible = true
- else
- if Open == true then
- Button.Text = "Explorer: CLOSED"
- ExplorerPanel.Visible = false
- Open = false
- end
- end
- end)
- end))
- LocalScript44.Name = "PropertiesToggle"
- LocalScript44.Parent = ScreenGui0
- table.insert(cors,sandbox(LocalScript44,function()
- local PropertiesPanel = script.Parent["PropertiesPanel"]
- local Button = script.Parent.ExplorerToggle
- local Open = false
- Button.MouseButton1Down:connect(function(open)
- if Open == false then
- Button.Text = "Explorer: OPEN"
- Open = true
- PropertiesPanel.Visible = true
- else
- if Open == true then
- Button.Text = "Explorer: CLOSED"
- PropertiesPanel.Visible = false
- Open = false
- end
- end
- end)
- end))
- Frame45.Name = "CommandPanel"
- Frame45.Parent = ScreenGui0
- Frame45.Transparency = 0.10000000149012
- Frame45.Size = UDim2.new(1, -310, 0, 75)
- Frame45.Position = UDim2.new(0, 0, 1, -75)
- Frame45.Active = true
- Frame45.Visible = false
- Frame45.BackgroundColor3 = Color3.new(1, 1, 1)
- Frame45.BackgroundTransparency = 0.10000000149012
- Frame45.BorderColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- Frame46.Name = "Header"
- Frame46.Parent = Frame45
- Frame46.Size = UDim2.new(1, 0, 0, 18)
- Frame46.BackgroundColor3 = Color3.new(0.913726, 0.913726, 0.913726)
- Frame46.BorderColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- TextLabel47.Parent = Frame46
- TextLabel47.Transparency = 1
- TextLabel47.Size = UDim2.new(1, -4, 1, 0)
- TextLabel47.Text = "Command"
- TextLabel47.Position = UDim2.new(0, 4, 0, 0)
- TextLabel47.BackgroundTransparency = 1
- TextLabel47.Font = Enum.Font.SourceSans
- TextLabel47.FontSize = Enum.FontSize.Size14
- TextLabel47.TextColor3 = Color3.new(0, 0, 0)
- TextLabel47.TextXAlignment = Enum.TextXAlignment.Left
- TextLabel48.Name = "TextWidth"
- TextLabel48.Parent = Frame45
- TextLabel48.Size = UDim2.new(1, 0, 1, 0)
- TextLabel48.Text = "TweenService"
- TextLabel48.Visible = false
- TextLabel48.Font = Enum.Font.SourceSans
- TextLabel48.FontSize = Enum.FontSize.Size14
- TextLabel48.TextXAlignment = Enum.TextXAlignment.Left
- Frame49.Name = "ScrollFrame"
- Frame49.Parent = Frame45
- Frame49.Transparency = 1
- Frame49.Size = UDim2.new(0, 16, 1, -18)
- Frame49.Position = UDim2.new(1, -16, 0, 18)
- Frame49.Visible = false
- Frame49.BackgroundTransparency = 1
- ImageButton50.Name = "ScrollDown"
- ImageButton50.Parent = Frame49
- ImageButton50.Size = UDim2.new(0, 16, 0, 16)
- ImageButton50.Position = UDim2.new(0, 0, 1, -16)
- ImageButton50.BackgroundColor3 = Color3.new(0.866667, 0.866667, 0.866667)
- ImageButton50.BorderColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- Frame51.Name = "Arrow Graphic"
- Frame51.Parent = ImageButton50
- Frame51.Transparency = 1
- Frame51.Size = UDim2.new(0, 8, 0, 8)
- Frame51.Position = UDim2.new(0.5, -4, 0.5, -4)
- Frame51.BackgroundTransparency = 1
- Frame51.BorderSizePixel = 0
- Frame52.Name = "Graphic"
- Frame52.Parent = Frame51
- Frame52.Size = UDim2.new(0.25, 0, 0.125, 0)
- Frame52.Position = UDim2.new(0.375, 0, 0.625, 0)
- Frame52.BackgroundColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- Frame52.BorderSizePixel = 0
- Frame53.Name = "Graphic"
- Frame53.Parent = Frame51
- Frame53.Size = UDim2.new(0.5, 0, 0.125, 0)
- Frame53.Position = UDim2.new(0.25, 0, 0.5, 0)
- Frame53.BackgroundColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- Frame53.BorderSizePixel = 0
- Frame54.Name = "Graphic"
- Frame54.Parent = Frame51
- Frame54.Size = UDim2.new(0.75, 0, 0.125, 0)
- Frame54.Position = UDim2.new(0.125, 0, 0.375, 0)
- Frame54.BackgroundColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- Frame54.BorderSizePixel = 0
- Frame55.Name = "Graphic"
- Frame55.Parent = Frame51
- Frame55.Size = UDim2.new(1, 0, 0.125, 0)
- Frame55.Position = UDim2.new(0, 0, 0.25, 0)
- Frame55.BackgroundColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- Frame55.BorderSizePixel = 0
- ImageButton56.Name = "ScrollUp"
- ImageButton56.Parent = Frame49
- ImageButton56.Size = UDim2.new(0, 16, 0, 16)
- ImageButton56.Active = false
- ImageButton56.BackgroundColor3 = Color3.new(0.866667, 0.866667, 0.866667)
- ImageButton56.BorderColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- ImageButton56.AutoButtonColor = false
- Frame57.Name = "Arrow Graphic"
- Frame57.Parent = ImageButton56
- Frame57.Transparency = 1
- Frame57.Size = UDim2.new(0, 8, 0, 8)
- Frame57.Position = UDim2.new(0.5, -4, 0.5, -4)
- Frame57.BackgroundTransparency = 1
- Frame57.BorderSizePixel = 0
- Frame58.Name = "Graphic"
- Frame58.Parent = Frame57
- Frame58.Transparency = 0.69999998807907
- Frame58.Size = UDim2.new(0.25, 0, 0.125, 0)
- Frame58.Position = UDim2.new(0.375, 0, 0.25, 0)
- Frame58.BackgroundColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- Frame58.BackgroundTransparency = 0.69999998807907
- Frame58.BorderSizePixel = 0
- Frame59.Name = "Graphic"
- Frame59.Parent = Frame57
- Frame59.Transparency = 0.69999998807907
- Frame59.Size = UDim2.new(0.5, 0, 0.125, 0)
- Frame59.Position = UDim2.new(0.25, 0, 0.375, 0)
- Frame59.BackgroundColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- Frame59.BackgroundTransparency = 0.69999998807907
- Frame59.BorderSizePixel = 0
- Frame60.Name = "Graphic"
- Frame60.Parent = Frame57
- Frame60.Transparency = 0.69999998807907
- Frame60.Size = UDim2.new(0.75, 0, 0.125, 0)
- Frame60.Position = UDim2.new(0.125, 0, 0.5, 0)
- Frame60.BackgroundColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- Frame60.BackgroundTransparency = 0.69999998807907
- Frame60.BorderSizePixel = 0
- Frame61.Name = "Graphic"
- Frame61.Parent = Frame57
- Frame61.Transparency = 0.69999998807907
- Frame61.Size = UDim2.new(1, 0, 0.125, 0)
- Frame61.Position = UDim2.new(0, 0, 0.625, 0)
- Frame61.BackgroundColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- Frame61.BackgroundTransparency = 0.69999998807907
- Frame61.BorderSizePixel = 0
- ImageButton62.Name = "ScrollBar"
- ImageButton62.Parent = Frame49
- ImageButton62.Size = UDim2.new(1, 0, 1, -32)
- ImageButton62.Position = UDim2.new(0, 0, 0, 16)
- ImageButton62.BackgroundColor3 = Color3.new(0.94902, 0.94902, 0.94902)
- ImageButton62.BorderColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- ImageButton62.AutoButtonColor = false
- ImageButton63.Name = "ScrollThumb"
- ImageButton63.Parent = ImageButton62
- ImageButton63.Size = UDim2.new(0, 16, 0.283333331, 0)
- ImageButton63.BackgroundColor3 = Color3.new(0.866667, 0.866667, 0.866667)
- ImageButton63.BorderColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- ImageButton63.Draggable = true
- ImageButton63.AutoButtonColor = false
- Frame64.Name = "Grip Graphic"
- Frame64.Parent = ImageButton63
- Frame64.Transparency = 1
- Frame64.Size = UDim2.new(0, 6, 0, 6)
- Frame64.Position = UDim2.new(0.5, -3, 0.5, -3)
- Frame64.BackgroundTransparency = 1
- Frame64.BorderSizePixel = 0
- Frame65.Parent = Frame64
- Frame65.Size = UDim2.new(1, 0, 0.166666672, 0)
- Frame65.BorderSizePixel = 0
- Frame66.Parent = Frame64
- Frame66.Size = UDim2.new(1, 0, 0.166666672, 0)
- Frame66.Position = UDim2.new(0, 0, 0.333333343, 0)
- Frame66.BorderSizePixel = 0
- Frame67.Parent = Frame64
- Frame67.Size = UDim2.new(1, 0, 0.166666672, 0)
- Frame67.Position = UDim2.new(0, 0, 0.666666687, 0)
- Frame67.BorderSizePixel = 0
- Frame68.Name = "property"
- Frame68.Parent = Frame45
- Frame68.Size = UDim2.new(1, 0, 0, 22)
- Frame68.Position = UDim2.new(0, 0, 0, 1)
- Frame68.Visible = false
- Frame68.BackgroundColor3 = Color3.new(0.866667, 0.866667, 0.870588)
- Frame68.BorderColor3 = Color3.new(0.686275, 0.686275, 0.686275)
- Frame69.Name = "name"
- Frame69.Parent = Frame68
- Frame69.Transparency = 1
- Frame69.Size = UDim2.new(0.5, 0, 1, -1)
- Frame69.BackgroundColor3 = Color3.new(0.992157, 0.984314, 1)
- Frame69.BackgroundTransparency = 1
- TextLabel70.Name = "unlocked"
- TextLabel70.Parent = Frame69
- TextLabel70.Transparency = 1
- TextLabel70.Size = UDim2.new(1, -10, 1, 0)
- TextLabel70.Text = ""
- TextLabel70.Position = UDim2.new(0, 5, 0, 0)
- TextLabel70.Visible = false
- TextLabel70.BackgroundTransparency = 1
- TextLabel70.Font = Enum.Font.SourceSans
- TextLabel70.FontSize = Enum.FontSize.Size14
- TextLabel70.TextColor3 = Color3.new(0.0980392, 0.0980392, 0.0980392)
- TextLabel70.TextWrapped = true
- TextLabel70.TextXAlignment = Enum.TextXAlignment.Left
- TextLabel71.Name = "locked"
- TextLabel71.Parent = Frame69
- TextLabel71.Transparency = 1
- TextLabel71.Size = UDim2.new(1, -10, 1, 0)
- TextLabel71.Text = ""
- TextLabel71.Position = UDim2.new(0, 5, 0, 0)
- TextLabel71.Visible = false
- TextLabel71.BackgroundTransparency = 1
- TextLabel71.Font = Enum.Font.SourceSans
- TextLabel71.FontSize = Enum.FontSize.Size14
- TextLabel71.TextColor3 = Color3.new(0.580392, 0.580392, 0.580392)
- TextLabel71.TextWrapped = true
- TextLabel71.TextXAlignment = Enum.TextXAlignment.Left
- Frame72.Name = "border"
- Frame72.Parent = Frame68
- Frame72.Size = UDim2.new(0, 1, 1, 0)
- Frame72.Position = UDim2.new(0.5, 0, 0, 0)
- Frame72.BackgroundColor3 = Color3.new(0.686275, 0.686275, 0.686275)
- Frame72.BorderColor3 = Color3.new(0.686275, 0.686275, 0.686275)
- Frame72.BorderSizePixel = 0
- Frame73.Name = "edit"
- Frame73.Parent = Frame68
- Frame73.Transparency = 1
- Frame73.Size = UDim2.new(0.5, 0, 1, -1)
- Frame73.Position = UDim2.new(0.5, 0, 0, 0)
- Frame73.BackgroundColor3 = Color3.new(0.992157, 0.984314, 1)
- Frame73.BackgroundTransparency = 1
- TextLabel74.Name = "locked"
- TextLabel74.Parent = Frame73
- TextLabel74.Transparency = 1
- TextLabel74.Size = UDim2.new(1, -10, 1, 0)
- TextLabel74.Text = ""
- TextLabel74.Position = UDim2.new(0, 5, 0, 0)
- TextLabel74.Visible = false
- TextLabel74.BackgroundTransparency = 1
- TextLabel74.Font = Enum.Font.SourceSans
- TextLabel74.FontSize = Enum.FontSize.Size14
- TextLabel74.TextColor3 = Color3.new(0.580392, 0.580392, 0.580392)
- TextLabel74.TextWrapped = true
- TextLabel74.TextXAlignment = Enum.TextXAlignment.Left
- TextBox75.Name = "box"
- TextBox75.Parent = Frame73
- TextBox75.Transparency = 1
- TextBox75.Size = UDim2.new(1, -10, 1, 0)
- TextBox75.Text = ""
- TextBox75.Position = UDim2.new(0, 5, 0, 0)
- TextBox75.Visible = false
- TextBox75.BackgroundTransparency = 1
- TextBox75.Font = Enum.Font.SourceSans
- TextBox75.FontSize = Enum.FontSize.Size14
- TextBox75.TextColor3 = Color3.new(0.0980392, 0.0980392, 0.0980392)
- TextBox75.TextWrapped = true
- TextBox75.TextXAlignment = Enum.TextXAlignment.Left
- ImageButton76.Name = "check"
- ImageButton76.Parent = Frame73
- ImageButton76.Size = UDim2.new(0, 12, 0, 12)
- ImageButton76.Position = UDim2.new(0, 5, 0, 5)
- ImageButton76.Visible = false
- ImageButton76.BorderSizePixel = 0
- LocalScript77.Name = "Command"
- LocalScript77.Parent = Frame45
- table.insert(cors,sandbox(LocalScript77,function()
- local Explorer = script.Parent.Parent:WaitForChild("ExplorerPanel")
- Explorer:WaitForChild("List")
- Explorer:WaitForChild("SelectionChanged")
- local Output = script.Parent
- local Command = script.Parent.Parent:WaitForChild("CommandPanel")
- local Properties = script.Parent.Parent:WaitForChild("PropertiesPanel")
- local Studio = script.Parent.Parent
- Command:WaitForChild("TextButton").MouseButton1Click:connect(function()
- print(">",game.Players.LocalPlayer.Name.." ran script:",Command.TextBox.Text)
- ypcall(function() loadstring(Command.TextBox.Text)() end)
- end)
- end))
- TextBox78.Parent = Frame45
- TextBox78.Size = UDim2.new(1, -165, 0, 35)
- TextBox78.Text = "print"Hello, world!""
- TextBox78.Position = UDim2.new(0, 0, 0, 30)
- TextBox78.BackgroundColor3 = Color3.new(0.866667, 0.866667, 0.866667)
- TextBox78.ClearTextOnFocus = false
- TextBox78.MultiLine = true
- TextBox78.Font = Enum.Font.SourceSans
- TextBox78.FontSize = Enum.FontSize.Size18
- TextButton79.Parent = Frame45
- TextButton79.Size = UDim2.new(0, 150, 0, 30)
- TextButton79.Style = Enum.ButtonStyle.RobloxButton
- TextButton79.Text = "Execute Code"
- TextButton79.Position = UDim2.new(1, -150, 0, 32)
- TextButton79.BackgroundColor3 = Color3.new(1, 1, 1)
- TextButton79.Font = Enum.Font.SourceSans
- TextButton79.FontSize = Enum.FontSize.Size24
- TextButton79.TextColor3 = Color3.new(1, 1, 1)
- TextButton79.TextWrapped = true
- TextLabel80.Name = "rrr"
- TextLabel80.Parent = ScreenGui0
- TextLabel80.Size = UDim2.new(0, 30, 0, 40)
- TextLabel80.Text = ">"
- TextLabel80.Position = UDim2.new(0, 163, 0, 330)
- TextLabel80.Active = true
- TextLabel80.Visible = false
- TextLabel80.BackgroundColor3 = Color3.new(0, 0, 0)
- TextLabel80.BorderSizePixel = 0
- TextLabel80.Font = Enum.Font.SourceSansBold
- TextLabel80.FontSize = Enum.FontSize.Size36
- TextLabel80.TextColor3 = Color3.new(0, 0, 0)
- TextLabel80.TextStrokeColor3 = Color3.new(1, 1, 1)
- TextLabel80.TextStrokeTransparency = 0
- TextLabel81.Name = "lll"
- TextLabel81.Parent = ScreenGui0
- TextLabel81.Size = UDim2.new(0, 30, 0, 40)
- TextLabel81.Text = ">"
- TextLabel81.Position = UDim2.new(0, 15, 0, 330)
- TextLabel81.Active = true
- TextLabel81.Visible = false
- TextLabel81.BackgroundColor3 = Color3.new(0, 0, 0)
- TextLabel81.BorderSizePixel = 0
- TextLabel81.Font = Enum.Font.SourceSansBold
- TextLabel81.FontSize = Enum.FontSize.Size36
- TextLabel81.TextColor3 = Color3.new(0, 0, 0)
- TextLabel81.TextStrokeColor3 = Color3.new(1, 1, 1)
- TextLabel81.TextStrokeTransparency = 0
- Frame82.Name = "ExplorerPanel"
- Frame82.Parent = ScreenGui0
- Frame82.Transparency = 0.10000000149012
- Frame82.Size = UDim2.new(0, 300, 1, -210)
- Frame82.Position = UDim2.new(1, -308, 0, 190)
- Frame82.Visible = false
- Frame82.BackgroundColor3 = Color3.new(1, 1, 1)
- Frame82.BackgroundTransparency = 0.10000000149012
- Frame82.BorderColor3 = Color3.new(0.74902, 0.74902, 0.74902)
- LocalScript83.Parent = Frame82
- table.insert(cors,sandbox(LocalScript83,function()
- -- initial states
- local Option = {
- -- can modify objects
- Modifiable = true;
- -- can select objects
- Selectable = true;
- }
- -- 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
- --[[
- # 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
- 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] <= GUI_SIZE then
- FONT_SIZE = i - 1
- end
- end
- end
- local GuiColor = {
- Background = Color3.new(233/255, 233/255, 233/255);
- Border = Color3.new(149/255, 149/255, 149/255);
- Selected = Color3.new( 96/255, 140/255, 211/255);
- BorderSelected = Color3.new( 86/255, 125/255, 188/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);
- }
- ----------------------------------------------------------------
- ----------------------------------------------------------------
- ----------------------------------------------------------------
- ----------------------------------------------------------------
- ---- Icon map constants
- local MAP_ID = 129293660
- -- Indices based on implementation of Icon function.
- local ACTION_CUT = 160
- local ACTION_COPY = 161
- local ACTION_PASTE = 162
- local ACTION_DELETE = 163
- local ACTION_SORT = 164
- local ACTION_CUT_OVER = 174
- local ACTION_COPY_OVER = 175
- local ACTION_PASTE_OVER = 176
- local ACTION_DELETE_OVER = 177
- local ACTION_SORT_OVER = 178
- local NODE_COLLAPSED = 165
- local NODE_EXPANDED = 166
- local NODE_COLLAPSED_OVER = 179
- local NODE_EXPANDED_OVER = 180
- local ExplorerIndex = {
- ["Accoutrement"] = 32;
- ["Animation"] = 60;
- ["AnimationTrack"] = 60;
- ["ArcHandles"] = 56;
- ["Backpack"] = 20;
- ["BillboardGui"] = 64;
- ["BindableEvent"] = 67;
- ["BindableFunction"] = 66;
- ["BlockMesh"] = 8;
- ["BodyAngularVelocity"] = 14;
- ["BodyForce"] = 14;
- ["BodyGyro"] = 14;
- ["BodyPosition"] = 14;
- ["BodyThrust"] = 14;
- ["BodyVelocity"] = 14;
- ["BoolValue"] = 4;
- ["BrickColorValue"] = 4;
- ["Camera"] = 5;
- ["CFrameValue"] = 4;
- ["CharacterMesh"] = 60;
- ["ClickDetector"] = 41;
- ["Color3Value"] = 4;
- ["Configuration"] = 58;
- ["CoreGui"] = 46;
- ["CornerWedgePart"] = 1;
- ["CustomEvent"] = 4;
- ["CustomEventReceiver"] = 4;
- ["CylinderMesh"] = 8;
- ["Debris"] = 30;
- ["Decal"] = 7;
- ["Dialog"] = 62;
- ["DialogChoice"] = 63;
- ["DoubleConstrainedValue"] = 4;
- ["Explosion"] = 36;
- ["Fire"] = 61;
- ["Flag"] = 38;
- ["FlagStand"] = 39;
- ["FloorWire"] = 4;
- ["ForceField"] = 37;
- ["Frame"] = 48;
- ["GuiButton"] = 52;
- ["GuiMain"] = 47;
- ["Handles"] = 53;
- ["Hat"] = 45;
- ["Hint"] = 33;
- ["HopperBin"] = 22;
- ["Humanoid"] = 9;
- ["ImageButton"] = 52;
- ["ImageLabel"] = 49;
- ["IntConstrainedValue"] = 4;
- ["IntValue"] = 4;
- ["JointInstance"] = 34;
- ["Keyframe"] = 60;
- ["Lighting"] = 13;
- ["LocalScript"] = 18;
- ["MarketplaceService"] = 46;
- ["Message"] = 33;
- ["Model"] = 2;
- ["NetworkClient"] = 16;
- ["NetworkReplicator"] = 29;
- ["NetworkServer"] = 15;
- ["NumberValue"] = 4;
- ["ObjectValue"] = 4;
- ["Pants"] = 44;
- ["ParallelRampPart"] = 1;
- ["Part"] = 1;
- ["PartPairLasso"] = 57;
- ["Platform"] = 35;
- ["Player"] = 12;
- ["PlayerGui"] = 46;
- ["Players"] = 21;
- ["PointLight"] = 13;
- ["Pose"] = 60;
- ["PrismPart"] = 1;
- ["PyramidPart"] = 1;
- ["RayValue"] = 4;
- ["ReplicatedStorage"] = 0;
- ["RightAngleRampPart"] = 1;
- ["RocketPropulsion"] = 14;
- ["ScreenGui"] = 47;
- ["Script"] = 6;
- ["Seat"] = 35;
- ["SelectionBox"] = 54;
- ["SelectionPartLasso"] = 57;
- ["SelectionPointLasso"] = 57;
- ["ServerScriptService"] = 0;
- ["ServerStorage"] = 0;
- ["Shirt"] = 43;
- ["ShirtGraphic"] = 40;
- ["SkateboardPlatform"] = 35;
- ["Sky"] = 28;
- ["Smoke"] = 59;
- ["Sound"] = 11;
- ["SoundService"] = 31;
- ["Sparkles"] = 42;
- ["SpawnLocation"] = 25;
- ["SpecialMesh"] = 8;
- ["SpotLight"] = 13;
- ["StarterGear"] = 20;
- ["StarterGui"] = 46;
- ["StarterPack"] = 20;
- ["Status"] = 2;
- ["StringValue"] = 4;
- ["SurfaceSelection"] = 55;
- ["Team"] = 24;
- ["Teams"] = 23;
- ["Terrain"] = 65;
- ["TestService"] = 68;
- ["TextBox"] = 51;
- ["TextButton"] = 51;
- ["TextLabel"] = 50;
- ["Texture"] = 10;
- ["TextureTrail"] = 4;
- ["Tool"] = 17;
- ["TouchTransmitter"] = 37;
- ["TrussPart"] = 1;
- ["Vector3Value"] = 4;
- ["VehicleSeat"] = 35;
- ["WedgePart"] = 1;
- ["Weld"] = 34;
- ["Workspace"] = 19;
- }
- ----------------------------------------------------------------
- ----------------------------------------------------------------
- ----------------------------------------------------------------
- ----------------------------------------------------------------
- ----------------------------------------------------------------
- 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
- -- Connects a function to an event such that it fires asynchronously
- function Connect(event,func)
- return event:connect(function(...)
- local a = {...}
- Spawn(function() func(unpack(a)) end)
- end)
- 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
- do
- local ZIndexLock = {}
- -- Sets the ZIndex of an object and its descendants. Objects are locked so
- -- that SetZIndexOnChanged doesn't spawn multiple threads that set the
- -- ZIndex of the same object.
- 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
- function SetZIndexOnChanged(object)
- return object.Changed:connect(function(p)
- if p == "ZIndex" then
- SetZIndex(object,object.ZIndex)
- end
- end)
- end
- end
- ---- 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
- ----------------------------------------------------------------
- ----------------------------------------------------------------
- ----------------------------------------------------------------
- ----------------------------------------------------------------
- ---- ScrollBar
- do
- -- AutoButtonColor doesn't always reset properly
- local function ResetButtonColor(button)
- local active = button.Active
- button.Active = not active
- button.Active = active
- end
- local 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
- 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 < self.TotalSpace
- end;
- CanScrollUp = function(self)
- return self.ScrollIndex > 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 <= t then
- if s > 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 + ScrollThumbFrame.AbsoluteSize.x then break end
- Class:ScrollTo(Class.ScrollIndex + Class.VisibleSpace)
- wait()
- end
- else
- 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 + ScrollThumbFrame.AbsoluteSize.y then break end
- Class:ScrollTo(Class.ScrollIndex + Class.VisibleSpace)
- wait()
- end
- else
- 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_pos and bar_abs_pos or 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_pos and bar_abs_pos or 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 = script.Parent
- Create(explorerPanel,{
- BackgroundColor3 = GuiColor.Field;
- BorderColor3 = GuiColor.Border;
- Active = true;
- })
- 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,1,0);
- });
- })
- SetZIndexOnChanged(explorerPanel)
- local getTextWidth do
- local text = Create('TextLabel',{
- Name = "TextWidth";
- TextXAlignment = 'Left';
- TextYAlignment = 'Center';
- Font = FONT;
- FontSize = FONT_SIZE;
- Text = "";
- Position = UDim2.new(0,0,0,0);
- Size = UDim2.new(1,0,1,0);
- Visible = false;
- Parent = explorerPanel;
- })
- function getTextWidth(s)
- text.Text = s
- return text.TextBounds.x
- end
- end
- -- Holds the game tree converted to a list.
- local TreeList = {}
- -- Matches objects to their tree node representation.
- local NodeLookup = {}
- local nodeWidth = 0
- local updateList,rawUpdateList,updateScroll,rawUpdateSize do
- local function r(t)
- for i = 1,#t do
- TreeList[#TreeList+1] = t[i]
- local w = (t[i].Depth)*(2+ENTRY_PADDING+GUI_SIZE) + 2 + ENTRY_SIZE + 4 + getTextWidth(t[i].Object.Name) + 4
- if w > nodeWidth then
- nodeWidth = w
- end
- if t[i].Expanded then
- r(t[i])
- 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[Game])
- rawUpdateSize()
- 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 = script.Parent:FindFirstChild("GetSelection")
- if not bindGetSelection then
- bindGetSelection = Create('BindableFunction',{Name = "GetSelection"})
- bindGetSelection.Parent = script.Parent
- end
- local bindSetSelection = script.Parent:FindFirstChild("SetSelection")
- if not bindSetSelection then
- bindSetSelection = Create('BindableFunction',{Name = "SetSelection"})
- bindSetSelection.Parent = script.Parent
- end
- local bindSelectionChanged = script.Parent:FindFirstChild("SelectionChanged")
- if not bindSelectionChanged then
- bindSelectionChanged = Create('BindableEvent',{Name = "SelectionChanged"})
- bindSelectionChanged.Parent = script.Parent
- end
- local SelectionList = {}
- local SelectionSet = {}
- 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()
- end
- end
- function Selection:Add(object)
- local l,s = addObject(object)
- if l then
- rawUpdateList()
- bindSelectionChanged:Fire()
- elseif s then
- scrollBar:Update()
- bindSelectionChanged:Fire()
- end
- 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()
- 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
- 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 < 0 or pos.x > size.x or pos.y < 0 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 = i<last and i or last, i>last 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[button]: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 <= size.x and pos.y >= 0 and pos.y <= size.y then
- local i = math.ceil(pos.y/ENTRY_BOUND)
- local node = TreeList[i + scrollBar.ScrollIndex]
- if node and node.Object ~= object and not object:IsAncestorOf(node.Object) then
- parentIndex = i
- local entry = listEntries[i]
- if entry then
- parentHighlight.Visible = true
- parentHighlight.Position = UDim2.new(0,1,0,entry.AbsolutePosition.y-listFrame.AbsolutePosition.y)
- parentHighlight.Size = UDim2.new(0,size.x-4,0,entry.AbsoluteSize.y)
- end
- end
- end
- dragGhost.Position = UDim2.new(0,dragPos.x+ghostOffset.x,0,dragPos.y+ghostOffset.y)
- elseif (clickPos-dragPos).magnitude > 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
- -- use raw update so the list updates instantly
- rawUpdateList()
- end
- end)
- entry.MouseButton1Down:connect(function(x,y)
- local node = TreeList[i + self.ScrollIndex]
- 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
- local node = TreeList[i + self.ScrollIndex]
- if Selection.Selected[node.Object] then
- Selection:Remove(node.Object)
- dragSelect(i+self.ScrollIndex,false,'MouseButton2Up')
- else
- Selection:Add(node.Object)
- dragSelect(i+self.ScrollIndex,true,'MouseButton2Up')
- 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
- do
- NodeLookup[Game] = {
- Object = Game;
- Parent = nil;
- Index = 0;
- Expanded = true;
- }
- Connect(Game.DescendantAdded,addObject)
- Connect(Game.DescendantRemoving,removeObject)
- 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(Game)
- scrollBar.VisibleSpace = math.ceil(listFrame.AbsoluteSize.y/ENTRY_BOUND)
- updateList()
- end
- ----------------------------------------------------------------
- ----------------------------------------------------------------
- ----------------------------------------------------------------
- ----------------------------------------------------------------
- ---- Actions
- local actionButtons do
- actionButtons = {}
- local totalActions = (4) + 1
- local currentActions = totalActions
- local function makeButton(icon,over,name)
- 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.5,-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()
- Icon(button,over)
- tipText.Visible = true
- end)
- button.MouseLeave:connect(function()
- Icon(button,icon)
- tipText.Visible = false
- end)
- currentActions = currentActions - 1
- actionButtons[#actionButtons+1] = button
- return button
- end
- local clipboard = {}
- local function delete(o)
- o.Parent = nil
- end
- -- CUT
- makeButton(ACTION_CUT,ACTION_CUT_OVER,"Cut").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
- end)
- -- COPY
- makeButton(ACTION_COPY,ACTION_COPY_OVER,"Copy").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
- end)
- -- PASTE
- makeButton(ACTION_PASTE,ACTION_PASTE_OVER,"Paste").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)
- -- DELETE
- makeButton(ACTION_DELETE,ACTION_DELETE_OVER,"Delete").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)
- -- 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].Visible = value and Option.Selectable
- end
- cancelReparentDrag()
- end;
- Selectable = function(value)
- for i = 1,#actionButtons do
- actionButtons[i].Visible = value and Option.Modifiable
- end
- cancelSelectDrag()
- Selection:Set({})
- end;
- }
- local bindSetOption = script.Parent:FindFirstChild("SetOption")
- if not bindSetOption then
- bindSetOption = Create('BindableFunction',{Name = "SetOption"})
- bindSetOption.Parent = script.Parent
- end
- bindSetOption.OnInvoke = function(optionName,value)
- if optionCallback[optionName] then
- Option[optionName] = value
- optionCallback[optionName](value)
- end
- end
- local bindGetOption = script.Parent:FindFirstChild("GetOption")
- if not bindGetOption then
- bindGetOption = Create('BindableFunction',{Name = "GetOption"})
- bindGetOption.Parent = script.Parent
- 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
- end))
- BindableEvent84.Name = "SelectionChanged"
- BindableEvent84.Parent = Frame82
- BindableFunction85.Name = "SetOption"
- BindableFunction85.Parent = Frame82
- BindableFunction86.Name = "SetSelection"
- BindableFunction86.Parent = Frame82
- BindableFunction87.Name = "GetOption"
- BindableFunction87.Parent = Frame82
- BindableFunction88.Name = "GetSelection"
- BindableFunction88.Parent = Frame82
- Frame89.Name = "OutputPanel"
- Frame89.Parent = ScreenGui0
- Frame89.Transparency = 0.10000000149012
- Frame89.Size = UDim2.new(1, -310, 0.5, -75)
- Frame89.Position = UDim2.new(0, 0, 0.5, 0)
- Frame89.Active = true
- Frame89.Visible = false
- Frame89.BackgroundColor3 = Color3.new(1, 1, 1)
- Frame89.BackgroundTransparency = 0.10000000149012
- Frame89.BorderColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- Frame90.Name = "Header"
- Frame90.Parent = Frame89
- Frame90.Size = UDim2.new(1, 0, 0, 18)
- Frame90.BackgroundColor3 = Color3.new(0.913726, 0.913726, 0.913726)
- Frame90.BorderColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- TextLabel91.Parent = Frame90
- TextLabel91.Transparency = 1
- TextLabel91.Size = UDim2.new(1, -4, 1, 0)
- TextLabel91.Text = "Output"
- TextLabel91.Position = UDim2.new(0, 4, 0, 0)
- TextLabel91.BackgroundTransparency = 1
- TextLabel91.Font = Enum.Font.SourceSans
- TextLabel91.FontSize = Enum.FontSize.Size14
- TextLabel91.TextColor3 = Color3.new(0, 0, 0)
- TextLabel91.TextXAlignment = Enum.TextXAlignment.Left
- Frame92.Name = "List"
- Frame92.Parent = Frame89
- Frame92.Transparency = 1
- Frame92.Size = UDim2.new(1, -16, 1, -18)
- Frame92.Position = UDim2.new(0, 0, 0, 18)
- Frame92.BackgroundTransparency = 1
- Frame92.ClipsDescendants = true
- TextLabel93.Name = "TextWidth"
- TextLabel93.Parent = Frame89
- TextLabel93.Size = UDim2.new(1, 0, 1, 0)
- TextLabel93.Text = "TweenService"
- TextLabel93.Visible = false
- TextLabel93.Font = Enum.Font.SourceSans
- TextLabel93.FontSize = Enum.FontSize.Size14
- TextLabel93.TextXAlignment = Enum.TextXAlignment.Left
- Frame94.Name = "ScrollFrame"
- Frame94.Parent = Frame89
- Frame94.Transparency = 1
- Frame94.Size = UDim2.new(0, 16, 1, -18)
- Frame94.Position = UDim2.new(1, -16, 0, 18)
- Frame94.Visible = false
- Frame94.BackgroundTransparency = 1
- ImageButton95.Name = "ScrollDown"
- ImageButton95.Parent = Frame94
- ImageButton95.Size = UDim2.new(0, 16, 0, 16)
- ImageButton95.Position = UDim2.new(0, 0, 1, -16)
- ImageButton95.BackgroundColor3 = Color3.new(0.866667, 0.866667, 0.866667)
- ImageButton95.BorderColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- Frame96.Name = "Arrow Graphic"
- Frame96.Parent = ImageButton95
- Frame96.Transparency = 1
- Frame96.Size = UDim2.new(0, 8, 0, 8)
- Frame96.Position = UDim2.new(0.5, -4, 0.5, -4)
- Frame96.BackgroundTransparency = 1
- Frame96.BorderSizePixel = 0
- Frame97.Name = "Graphic"
- Frame97.Parent = Frame96
- Frame97.Size = UDim2.new(0.25, 0, 0.125, 0)
- Frame97.Position = UDim2.new(0.375, 0, 0.625, 0)
- Frame97.BackgroundColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- Frame97.BorderSizePixel = 0
- Frame98.Name = "Graphic"
- Frame98.Parent = Frame96
- Frame98.Size = UDim2.new(0.5, 0, 0.125, 0)
- Frame98.Position = UDim2.new(0.25, 0, 0.5, 0)
- Frame98.BackgroundColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- Frame98.BorderSizePixel = 0
- Frame99.Name = "Graphic"
- Frame99.Parent = Frame96
- Frame99.Size = UDim2.new(0.75, 0, 0.125, 0)
- Frame99.Position = UDim2.new(0.125, 0, 0.375, 0)
- Frame99.BackgroundColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- Frame99.BorderSizePixel = 0
- Frame100.Name = "Graphic"
- Frame100.Parent = Frame96
- Frame100.Size = UDim2.new(1, 0, 0.125, 0)
- Frame100.Position = UDim2.new(0, 0, 0.25, 0)
- Frame100.BackgroundColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- Frame100.BorderSizePixel = 0
- ImageButton101.Name = "ScrollUp"
- ImageButton101.Parent = Frame94
- ImageButton101.Size = UDim2.new(0, 16, 0, 16)
- ImageButton101.Active = false
- ImageButton101.BackgroundColor3 = Color3.new(0.866667, 0.866667, 0.866667)
- ImageButton101.BorderColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- ImageButton101.AutoButtonColor = false
- Frame102.Name = "Arrow Graphic"
- Frame102.Parent = ImageButton101
- Frame102.Transparency = 1
- Frame102.Size = UDim2.new(0, 8, 0, 8)
- Frame102.Position = UDim2.new(0.5, -4, 0.5, -4)
- Frame102.BackgroundTransparency = 1
- Frame102.BorderSizePixel = 0
- Frame103.Name = "Graphic"
- Frame103.Parent = Frame102
- Frame103.Transparency = 0.69999998807907
- Frame103.Size = UDim2.new(0.25, 0, 0.125, 0)
- Frame103.Position = UDim2.new(0.375, 0, 0.25, 0)
- Frame103.BackgroundColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- Frame103.BackgroundTransparency = 0.69999998807907
- Frame103.BorderSizePixel = 0
- Frame104.Name = "Graphic"
- Frame104.Parent = Frame102
- Frame104.Transparency = 0.69999998807907
- Frame104.Size = UDim2.new(0.5, 0, 0.125, 0)
- Frame104.Position = UDim2.new(0.25, 0, 0.375, 0)
- Frame104.BackgroundColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- Frame104.BackgroundTransparency = 0.69999998807907
- Frame104.BorderSizePixel = 0
- Frame105.Name = "Graphic"
- Frame105.Parent = Frame102
- Frame105.Transparency = 0.69999998807907
- Frame105.Size = UDim2.new(0.75, 0, 0.125, 0)
- Frame105.Position = UDim2.new(0.125, 0, 0.5, 0)
- Frame105.BackgroundColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- Frame105.BackgroundTransparency = 0.69999998807907
- Frame105.BorderSizePixel = 0
- Frame106.Name = "Graphic"
- Frame106.Parent = Frame102
- Frame106.Transparency = 0.69999998807907
- Frame106.Size = UDim2.new(1, 0, 0.125, 0)
- Frame106.Position = UDim2.new(0, 0, 0.625, 0)
- Frame106.BackgroundColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- Frame106.BackgroundTransparency = 0.69999998807907
- Frame106.BorderSizePixel = 0
- ImageButton107.Name = "ScrollBar"
- ImageButton107.Parent = Frame94
- ImageButton107.Size = UDim2.new(1, 0, 1, -32)
- ImageButton107.Position = UDim2.new(0, 0, 0, 16)
- ImageButton107.BackgroundColor3 = Color3.new(0.94902, 0.94902, 0.94902)
- ImageButton107.BorderColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- ImageButton107.AutoButtonColor = false
- ImageButton108.Name = "ScrollThumb"
- ImageButton108.Parent = ImageButton107
- ImageButton108.Size = UDim2.new(0, 16, 0.283333331, 0)
- ImageButton108.BackgroundColor3 = Color3.new(0.866667, 0.866667, 0.866667)
- ImageButton108.BorderColor3 = Color3.new(0.584314, 0.584314, 0.584314)
- ImageButton108.Draggable = true
- ImageButton108.AutoButtonColor = false
- Frame109.Name = "Grip Graphic"
- Frame109.Parent = ImageButton108
- Frame109.Transparency = 1
- Frame109.Size = UDim2.new(0, 6, 0, 6)
- Frame109.Position = UDim2.new(0.5, -3, 0.5, -3)
- Frame109.BackgroundTransparency = 1
- Frame109.BorderSizePixel = 0
- Frame110.Parent = Frame109
- Frame110.Size = UDim2.new(1, 0, 0.166666672, 0)
- Frame110.BorderSizePixel = 0
- Frame111.Parent = Frame109
- Frame111.Size = UDim2.new(1, 0, 0.166666672, 0)
- Frame111.Position = UDim2.new(0, 0, 0.333333343, 0)
- Frame111.BorderSizePixel = 0
- Frame112.Parent = Frame109
- Frame112.Size = UDim2.new(1, 0, 0.166666672, 0)
- Frame112.Position = UDim2.new(0, 0, 0.666666687, 0)
- Frame112.BorderSizePixel = 0
- Frame113.Name = "property"
- Frame113.Parent = Frame89
- Frame113.Size = UDim2.new(1, 0, 0, 22)
- Frame113.Position = UDim2.new(0, 0, 0, 1)
- Frame113.Visible = false
- Frame113.BackgroundColor3 = Color3.new(0.866667, 0.866667, 0.870588)
- Frame113.BorderColor3 = Color3.new(0.686275, 0.686275, 0.686275)
- Frame114.Name = "name"
- Frame114.Parent = Frame113
- Frame114.Transparency = 1
- Frame114.Size = UDim2.new(0.5, 0, 1, -1)
- Frame114.BackgroundColor3 = Color3.new(0.992157, 0.984314, 1)
- Frame114.BackgroundTransparency = 1
- TextLabel115.Name = "unlocked"
- TextLabel115.Parent = Frame114
- TextLabel115.Transparency = 1
- TextLabel115.Size = UDim2.new(1, -10, 1, 0)
- TextLabel115.Text = ""
- TextLabel115.Position = UDim2.new(0, 5, 0, 0)
- TextLabel115.Visible = false
- TextLabel115.BackgroundTransparency = 1
- TextLabel115.Font = Enum.Font.SourceSans
- TextLabel115.FontSize = Enum.FontSize.Size14
- TextLabel115.TextColor3 = Color3.new(0.0980392, 0.0980392, 0.0980392)
- TextLabel115.TextWrapped = true
- TextLabel115.TextXAlignment = Enum.TextXAlignment.Left
- TextLabel116.Name = "locked"
- TextLabel116.Parent = Frame114
- TextLabel116.Transparency = 1
- TextLabel116.Size = UDim2.new(1, -10, 1, 0)
- TextLabel116.Text = ""
- TextLabel116.Position = UDim2.new(0, 5, 0, 0)
- TextLabel116.Visible = false
- TextLabel116.BackgroundTransparency = 1
- TextLabel116.Font = Enum.Font.SourceSans
- TextLabel116.FontSize = Enum.FontSize.Size14
- TextLabel116.TextColor3 = Color3.new(0.580392, 0.580392, 0.580392)
- TextLabel116.TextWrapped = true
- TextLabel116.TextXAlignment = Enum.TextXAlignment.Left
- Frame117.Name = "border"
- Frame117.Parent = Frame113
- Frame117.Size = UDim2.new(0, 1, 1, 0)
- Frame117.Position = UDim2.new(0.5, 0, 0, 0)
- Frame117.BackgroundColor3 = Color3.new(0.686275, 0.686275, 0.686275)
- Frame117.BorderColor3 = Color3.new(0.686275, 0.686275, 0.686275)
- Frame117.BorderSizePixel = 0
- Frame118.Name = "edit"
- Frame118.Parent = Frame113
- Frame118.Transparency = 1
- Frame118.Size = UDim2.new(0.5, 0, 1, -1)
- Frame118.Position = UDim2.new(0.5, 0, 0, 0)
- Frame118.BackgroundColor3 = Color3.new(0.992157, 0.984314, 1)
- Frame118.BackgroundTransparency = 1
- TextLabel119.Name = "locked"
- TextLabel119.Parent = Frame118
- TextLabel119.Transparency = 1
- TextLabel119.Size = UDim2.new(1, -10, 1, 0)
- TextLabel119.Text = ""
- TextLabel119.Position = UDim2.new(0, 5, 0, 0)
- TextLabel119.Visible = false
- TextLabel119.BackgroundTransparency = 1
- TextLabel119.Font = Enum.Font.SourceSans
- TextLabel119.FontSize = Enum.FontSize.Size14
- TextLabel119.TextColor3 = Color3.new(0.580392, 0.580392, 0.580392)
- TextLabel119.TextWrapped = true
- TextLabel119.TextXAlignment = Enum.TextXAlignment.Left
- TextBox120.Name = "box"
- TextBox120.Parent = Frame118
- TextBox120.Transparency = 1
- TextBox120.Size = UDim2.new(1, -10, 1, 0)
- TextBox120.Text = ""
- TextBox120.Position = UDim2.new(0, 5, 0, 0)
- TextBox120.Visible = false
- TextBox120.BackgroundTransparency = 1
- TextBox120.Font = Enum.Font.SourceSans
- TextBox120.FontSize = Enum.FontSize.Size14
- TextBox120.TextColor3 = Color3.new(0.0980392, 0.0980392, 0.0980392)
- TextBox120.TextWrapped = true
- TextBox120.TextXAlignment = Enum.TextXAlignment.Left
- ImageButton121.Name = "check"
- ImageButton121.Parent = Frame118
- ImageButton121.Size = UDim2.new(0, 12, 0, 12)
- ImageButton121.Position = UDim2.new(0, 5, 0, 5)
- ImageButton121.Visible = false
- ImageButton121.BorderSizePixel = 0
- LocalScript122.Name = "Output"
- LocalScript122.Parent = Frame89
- table.insert(cors,sandbox(LocalScript122,function()
- game:GetService"LogService".MessageOut:connect(function(message,messageType)
- script:WaitForChild("PushOutput"):Invoke(message,messageType)
- end)
- if game.PlaceId > 0 then
- script.Output.Disabled = false
- end
- local Explorer = script.Parent.Parent:WaitForChild("ExplorerPanel")
- Explorer:WaitForChild("List")
- Explorer:WaitForChild("SelectionChanged")
- local Output = script.Parent.Parent:WaitForChild("OutputPanel")
- _G.___outputgui = Output
- local Command = script.Parent
- local Properties = script.Parent.Parent:WaitForChild("CommandPanel")
- local Studio = script.Parent.Parent
- script:WaitForChild("PushOutput").OnInvoke = function(message,messageType)
- if not _G.___outputgui then return end
- local l = Instance.new("TextLabel")
- l.Size = UDim2.new(1,0,0,15)
- l.BackgroundTransparency = 1
- l.TextColor3 = Color3.new(0,0,0)
- l.Text = message
- l.Position = UDim2.new(0,0,1,-15)
- if messageType == Enum.MessageType.MessageError then
- l.TextColor3 = Color3.new(1, 0, 0)
- elseif messageType == Enum.MessageType.MessageInfo then
- l.TextColor3 = Color3.new(0.4, 0.5, 1)
- elseif messageType == Enum.MessageType.MessageWarning then
- l.TextColor3 = Color3.new(1, 0.6, 0.4)
- end
- l.TextScaled = true
- for _,v in pairs(_G.___outputgui.List:GetChildren())do
- v.Position = v.Position - UDim2.new(0,0,0,16)
- end
- l.Parent = _G.___outputgui.List
- end
- end))
- Script123.Name = "Output"
- Script123.Parent = LocalScript122
- Script123.Disabled = true
- table.insert(cors,sandbox(Script123,function()
- game:GetService"LogService".MessageOut:connect(function(message,messageType)
- script.Parent:WaitForChild("PushOutput"):Invoke(message,messageType)
- end)
- end))
- BindableFunction124.Name = "PushOutput"
- BindableFunction124.Parent = LocalScript122
- for i,v in pairs(mas:GetChildren()) do
- v.Parent = game:GetService("Players").LocalPlayer.PlayerGui
- pcall(function() v:MakeJoints() end)
- end
- mas:Destroy()
- for i,v in pairs(cors) do
- spawn(function()
- pcall(v)
- end)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement