null nil true true 0 0 -0.5 0 0 1 1 0 0 0 1 0 DeleteTool http://www.roblox.com/asset?id=73241901 Delete false -0.5 0.5 0 0 -0.5 0.5 0 0 199 -12.0932655 73.4979095 -10.9329929 0.815435171 0.578847528 -0.000649310299 0.000796274282 -3.93885717e-021 0.999999642 0.578847408 -0.81543535 -0.000460921437 true 0.5 0.300000012 -0.5 0.5 0 0 -0.5 0.5 0 0 true 256 Handle 0.400000006 -0.5 0.5 0 0 0 0 0 -0.5 0.5 0 0 0 0 0 0 2 1 1 0.800000012 3 2 2 http://www.roblox.com/asset/?id=16198309 5 Mesh 0 0 0 1.20000005 1.20000005 1.20000005 http://www.roblox.com/asset/?id=16198294 1 1 1 false Sound 1 false http://www.roblox.com/Asset/?ID=12135982 0.699999988 false DeleteScript -- basic functions function waitForChild(instance, name) while not instance:FindFirstChild(name) do instance.ChildAdded:wait() end end function waitForProperty(instance, name) while not instance[name] do instance.Changed:wait() end end -- locals local RbxStamper = LoadLibrary("RbxStamper") if not RbxStamper then print("Error: RbxStamper Library Load Fail! Returning") return nil end local Tool = script.Parent enabled = true game:GetService("ContentProvider"):Preload("rbxasset://icons/delete_sel.png") local cluster = nil local selectionBox local currentSelection local currentSelectionColors = {} local selectionLasso local player = nil local highlight = false local megaClusterSelectionBox = Instance.new("Part") megaClusterSelectionBox.FormFactor = "Custom" megaClusterSelectionBox.Size = Vector3.new(4, 4, 4) -- a little thicker than 4x4x4 unit clusterpart; just so selection box is more easily seen megaClusterSelectionBox.Transparency = 1 megaClusterSelectionBox.Anchored = true megaClusterSelectionBox.CanCollide = false megaClusterSelectionBox.Parent = nil waitForProperty(game,"PlaceId") local isRestricted = (game.PlaceId == 41324860 or game.PlaceId == 129686177) local stampRegion = nil local modelToStampIn = nil waitForChild(Tool, "AutoWedgeClusterParts") local autoWedgeClusterParts = Tool.AutoWedgeClusterParts.Value waitForChild(Tool, "PlayerOwner") local playerOwner = Tool.PlayerOwner -- functions function canDeleteObject(part) -- let them delete anything that they created *or* anything on their baseplate return part and not (part.Locked) and part:IsA("BasePart") and (isChildOfMyModel(part) or inBounds(part)) end -- For Restricting Stamper Tool (isRestricted) function inBounds(partOrModel) if not stampRegion then return true end if not partOrModel then return true end return RbxStamper.CanEditRegion(partOrModel, stampRegion) end function findModel(part) if isRestricted then while part ~= nil do if part.className == "Model" and part.Name ~= modelToStampIn.Name and part.Name ~= "GarbageParts" then return part elseif part.Name == modelToStampIn.Name or part.Name == "GarbageParts" then return nil end part = part.Parent end return nil else while part ~= game.Workspace do if part:FindFirstChild("RobloxModel") then return part end if part:IsA("Model") then return part end part = part.Parent end return nil end end function cleanOrphanedModel(parent) if not parent then return end if parent.className == "Model" then local children = parent:GetChildren() if #children == 0 and parent.Name ~= "GarbageParts" then local oldParent = parent.Parent parent:Remove() cleanOrphanedModel(oldParent) end end end function isChildOfMyModel(part) if not modelToStampIn then return true end if modelToStampIn:IsAncestorOf(part) then return true else return false end end function on3dButton1Down(mouse) local part = mouse.Target if part == nil then return elseif part:IsA("Terrain") and not isRestricted then if cluster ~= nil then local cellPos = cluster:WorldToCellPreferSolid(Vector3.new(mouse.Hit.x, mouse.Hit.y, mouse.Hit.z)) local autoWedgeCell = cluster.AutowedgeCell local x = cellPos.x local y = cellPos.y local z = cellPos.z cluster:SetCell(x, y, z, 0, 0, 0) if (autoWedgeClusterParts) then for i = x - 1, x + 1 do for j = y - 1, y + 1 do for k = z - 1, z + 1 do autoWedgeCell(cluster,i,j,k) end end end end clearSelection() on3dMouseMove(mouse) end elseif canDeleteObject(part) then local model = findModel(part) local oldParent if model then if currentSelection == model then currentSelection = nil clearSelection() end oldParent = model.Parent model:Remove() else if currentSelection == part then currentSelection = nil clearSelection() end oldParent = part.Parent part:Remove() end if isRestricted then if oldParent and oldParent ~= modelToStampIn then cleanOrphanedModel(oldParent) end else cleanOrphanedModel(oldParent) end end end function saveSelectionColor(instance) if instance:IsA("BasePart") then currentSelectionColors[instance] = instance.BrickColor if instance.BrickColor == BrickColor.Red() then instance.BrickColor = BrickColor.new("Really red") else instance.BrickColor = BrickColor.Red() end end end function setSelection(partOrModel) if partOrModel ~= currentSelection then clearSelection() currentSelection = partOrModel selectionBox.Adornee = currentSelection end end function clearSelection() if currentSelection ~= nil then for part, color in pairs(currentSelectionColors) do part.BrickColor = color end selectionBox.Adornee = nil end currentSelectionColors = {} if currentSelection then currentSelection = nil end if selectionBox then selectionBox.Adornee = nil end megaClusterSelectionBox.Parent = nil end function on3dMouseMove(mouse) local part = mouse.Target if not part then clearSelection() return elseif part:IsA("Terrain") and not isRestricted then if not cluster then cluster = game.Workspace.Terrain end local hitCell = cluster:WorldToCellPreferSolid(mouse.Hit.p) if cluster:GetCell(hitCell.x, hitCell.y, hitCell.z).Value > 0 then megaClusterSelectionBox.CFrame = CFrame.new(cluster:CellCenterToWorld(hitCell.x, hitCell.y, hitCell.z)) if isRestricted then megaClusterSelectionBox.Parent = game.Workspace.BaseplateBumpers else megaClusterSelectionBox.Parent = game.Workspace end selectionBox.Adornee = megaClusterSelectionBox currentSelection = nil -- necessary so selection box can transition between terrain and non-terrain smoothly else clearSelection() return end elseif canDeleteObject(part) then local model = findModel(part) if model then selectionBox.Color = BrickColor.Red() setSelection(model) else selectionBox.Color = BrickColor.Red() setSelection(part) end else clearSelection() end end local equipCount = 0 function onEquippedLocal(mouse) equipCount = equipCount + 1 local val = equipCount if isRestricted then waitForChild(game.Workspace, "BuildingAreas") if val ~= equipCount then return end end mouse.TargetFilter = megaClusterSelectionBox local character = script.Parent.Parent player = game.Players:GetPlayerFromCharacter(character) if not player then return end if playerOwner.Value and playerOwner.Value ~= player then return end playerOwner.Value = player guiMain = Instance.new("ScreenGui") guiMain.Parent = player.PlayerGui mouse.Button1Down:connect(function() on3dButton1Down(mouse) end) mouse.Move:connect(function() on3dMouseMove(mouse) end) mouse.Icon = "http://www.roblox.com/asset?id=72539748" selectionBox = Instance.new("SelectionBox") selectionBox.Name = "Model Delete Selection" selectionBox.Color = BrickColor.Red() selectionBox.Adornee = nil selectionBox.Parent = player.PlayerGui selectionLasso = Instance.new("SelectionPartLasso") selectionLasso.Name = "Model Delete Lasso" selectionLasso.Humanoid = character.Humanoid selectionLasso.archivable = false selectionLasso.Visible = true selectionLasso.Parent = game.workspace selectionLasso.Color = BrickColor.Red() highlight = true end function onUnequippedLocal() highlight = false if selectionBox then clearSelection() selectionBox:Remove() end if selectionLasso then selectionLasso:Remove() end end ---------------------------------------------------------------------------------------- if isRestricted then -- setup our variables waitForChild(game,"Workspace") waitForChild(game.Workspace, "BuildingAreas") waitForChild(game.Workspace.BuildingAreas, "Area1") waitForChild(game.Workspace.BuildingAreas, "Area9") -- all areas loaded while not modelToStampIn do -- check for build area until we find one local buildAreas = game.Workspace.BuildingAreas:GetChildren() for i = 1, #buildAreas do if buildAreas[i]:IsA("Model") then waitForChild(buildAreas[i],"Player") if buildAreas[i].Player.Value == game.Players.LocalPlayer.Name then waitForChild(buildAreas[i],"PlayerArea") modelToStampIn = buildAreas[i].PlayerArea break end end end if not modelToStampIn then wait(0.5) end end local lowPos = modelToStampIn.Parent:FindFirstChild("LowPos") local highPos = modelToStampIn.Parent:FindFirstChild("HighPos") if not lowPos or highPos then wait(0.5) lowPos = modelToStampIn.Parent:FindFirstChild("LowPos") highPos = modelToStampIn.Parent:FindFirstChild("HighPos") end while lowPos.Value == Vector3.new(0,0,0) or highPos.Value == Vector3.new(0,0,0) do wait(0.5) end -- tool doesn't work until these are defined stampRegion = Region3.new(lowPos.Value, highPos.Value) -- this is where we can stamp end Tool.Equipped:connect(onEquippedLocal) Tool.Unequipped:connect(onUnequippedLocal) AutoWedgeClusterParts false PlayerOwner null