SHOW:
|
|
- or go back to the newest paste.
| 1 | - | --By "Paste Bin/MlgMatthew","Roblox/Vfen" |
| 1 | + | --By solidgoldbrandon (Roblox_SCRIPT_BUILD) |
| 2 | ||
| 3 | numberofrainspawned = 9999999999 --number of rains spawned, also affects duration | |
| 4 | rainspawnsaround = CFrame.new(0,250,0) --cframe position where the rain spawns around | |
| 5 | range = 201 --the max distance from the rainspawnaround point where rain spawns | |
| 6 | ||
| 7 | ||
| 8 | ---script below--- | |
| 9 | function ggwp(thingy) | |
| 10 | thingy.Touched:connect(function (hit) | |
| 11 | if thingy then | |
| 12 | p = thingy --Part which will be cut around | |
| 13 | ||
| 14 | base = hit --Part which is cut out | |
| 15 | p.CFrame = (base.CFrame - base.CFrame.p) + Vector3.new(p.Position.X, base.Position.Y, p.Position.Z) | |
| 16 | ||
| 17 | overlappingparts = {}
| |
| 18 | cutout = {}
| |
| 19 | ||
| 20 | function Get(Brick) | |
| 21 | if Brick.className == "Part" and Brick ~= p then | |
| 22 | if Brick.Anchored == true then | |
| 23 | xoverlapping = false | |
| 24 | yoverlapping = false | |
| 25 | zoverlapping = false | |
| 26 | ---x--- | |
| 27 | x1 = (p.Position.X) - (p.Size.X/2) | |
| 28 | x2 = (p.Position.X) + (p.Size.X/2) | |
| 29 | ||
| 30 | xx1 = (Brick.Position.X) - (Brick.Size.X/2) | |
| 31 | xx2 = (Brick.Position.X) + (Brick.Size.X/2) | |
| 32 | if xx1 >= x1 and xx1 <= x2 or xx2 >= x1 and xx2 <= x2 or xx1 <= x1 and xx2 >= x2 then | |
| 33 | xoverlapping = true | |
| 34 | end | |
| 35 | ------- | |
| 36 | ---y--- | |
| 37 | y1 = (p.Position.Y) - (p.Size.Y/2) | |
| 38 | y2 = (p.Position.Y) + (p.Size.Y/2) | |
| 39 | ||
| 40 | yy1 = (Brick.Position.Y) - (Brick.Size.Y/2) | |
| 41 | yy2 = (Brick.Position.Y) + (Brick.Size.Y/2) | |
| 42 | if yy1 >= y1 and yy1 <= y2 or yy2 >= y1 and yy2 <= y2 or yy1 <= y1 and yy2 >= y2 then | |
| 43 | yoverlapping = true | |
| 44 | end | |
| 45 | ------- | |
| 46 | ---z--- | |
| 47 | z1 = (p.Position.Z) - (p.Size.Z/2) | |
| 48 | z2 = (p.Position.Z) + (p.Size.Z/2) | |
| 49 | ||
| 50 | zz1 = (Brick.Position.Z) - (Brick.Size.Z/2) | |
| 51 | zz2 = (Brick.Position.Z) + (Brick.Size.Z/2) | |
| 52 | if zz1 >= z1 and zz1 <= z2 or zz2 >= z1 and zz2 <= z2 or zz1 <= z1 and zz2 >= z2 then | |
| 53 | zoverlapping = true | |
| 54 | end | |
| 55 | ------- | |
| 56 | if xoverlapping == true and yoverlapping == true and zoverlapping == true then | |
| 57 | ---overlapzone parts--- | |
| 58 | part = Instance.new("Part") --takes up the space overlapped in
| |
| 59 | part.BrickColor = BrickColor.Red() | |
| 60 | part.FormFactor = "Custom" | |
| 61 | part.Anchored = true | |
| 62 | if yy1 <= y1 and yy2 >= y2 then | |
| 63 | y = p.Size.Y | |
| 64 | yy = p.Position.Y | |
| 65 | elseif yy1 >= y1 and yy1 <= y2 and yy2 >= y1 and yy2 <= y2 then | |
| 66 | y = Brick.Size.Y | |
| 67 | yy = Brick.Position.Y | |
| 68 | elseif yy1 >= y1 and yy1 <= y2 then | |
| 69 | y = y2-yy1 | |
| 70 | yy = y2-y/2 | |
| 71 | elseif yy2 >= y1 and yy2 <= y2 then | |
| 72 | y = yy2-y1 | |
| 73 | yy = y1+y/2 | |
| 74 | end | |
| 75 | ||
| 76 | if xx1 <= x1 and xx2 >= x2 then | |
| 77 | x = p.Size.X | |
| 78 | xx = p.Position.X | |
| 79 | elseif xx1 >= x1 and xx1 <= x2 and xx2 >= x1 and xx2 <= x2 then | |
| 80 | x = Brick.Size.X | |
| 81 | xx = Brick.Position.X | |
| 82 | elseif xx1 >= x1 and xx1 <= x2 then | |
| 83 | x = x2-xx1 | |
| 84 | xx = x2-x/2 | |
| 85 | elseif xx2 >= x1 and xx2 <= x2 then | |
| 86 | x = xx2-x1 | |
| 87 | xx = x1+x/2 | |
| 88 | end | |
| 89 | ||
| 90 | if zz1 <= z1 and zz2 >= z2 then | |
| 91 | z = p.Size.Z | |
| 92 | zz = p.Position.Z | |
| 93 | elseif zz1 >= z1 and zz1 <= z2 and zz2 >= z1 and zz2 <= z2 then | |
| 94 | z = Brick.Size.Z | |
| 95 | zz = Brick.Position.Z | |
| 96 | elseif zz1 >= z1 and zz1 <= z2 then | |
| 97 | z = z2-zz1 | |
| 98 | zz = z2-z/2 | |
| 99 | elseif zz2 >= z1 and zz2 <= z2 then | |
| 100 | z = zz2-z1 | |
| 101 | zz = z1+z/2 | |
| 102 | end | |
| 103 | ||
| 104 | part.Size = Vector3.new(x,y,z) | |
| 105 | part.CFrame = p.CFrame - p.CFrame.p + Vector3.new(xx,yy,zz) --adaptational rotation | |
| 106 | ----------------------- | |
| 107 | table.insert(overlappingparts, Brick) | |
| 108 | table.insert(cutout, part) | |
| 109 | end | |
| 110 | end | |
| 111 | end | |
| 112 | end | |
| 113 | ||
| 114 | function Search(Object) | |
| 115 | coroutine.resume(coroutine.create(Get), Object) | |
| 116 | local Children = Object:GetChildren() | |
| 117 | for X = 1, #Children do | |
| 118 | Search(Children[X]) | |
| 119 | end | |
| 120 | end | |
| 121 | ||
| 122 | ||
| 123 | Search(Workspace) | |
| 124 | ||
| 125 | ||
| 126 | function MakeHole(p, base) | |
| 127 | b1 = nil | |
| 128 | b2 = nil | |
| 129 | b3 = nil | |
| 130 | b4 = nil | |
| 131 | p.CFrame = (base.CFrame - base.CFrame.p) + Vector3.new(p.Position.X, base.Position.Y, p.Position.Z) | |
| 132 | --X linings | |
| 133 | x = ((base.Size.X - p.Size.X)/ 2) - (p.Position.X - base.Position.X) | |
| 134 | y = (base.Size.Y) | |
| 135 | z = (p.Size.z) | |
| 136 | ||
| 137 | if x >= 1 and x <= base.Size.X - p.Size.X + 1 then | |
| 138 | b1 = base:Clone() | |
| 139 | b1.FormFactor = "Custom" | |
| 140 | b1.Parent = base.Parent | |
| 141 | b1.Size = Vector3.new(x, y, z) | |
| 142 | b1.CFrame = p.CFrame | |
| 143 | b1.CFrame = p.CFrame * CFrame.new(((x/2)+p.Size.X/2), 0, 0) | |
| 144 | b1.Name = "" ..base.Name .."X1" | |
| 145 | end | |
| 146 | x = ((base.Size.X - p.Size.X)/ 2) + (p.Position.X - base.Position.X) | |
| 147 | ||
| 148 | if x >= 1 and x <= base.Size.X - p.Size.X + 1 then | |
| 149 | b2 = base:Clone() | |
| 150 | b2.FormFactor = "Custom" | |
| 151 | b2.Parent = base.Parent | |
| 152 | b2.Name = "" ..base.Name .."X2" | |
| 153 | b2.Size = Vector3.new(x, y, z) | |
| 154 | b2.CFrame = p.CFrame | |
| 155 | b2.CFrame = p.CFrame * CFrame.new(-((x/2)+p.Size.X/2), 0, 0) | |
| 156 | end | |
| 157 | ||
| 158 | --Z linings | |
| 159 | x = (p.Size.X) | |
| 160 | y = (base.Size.Y) | |
| 161 | z = ((base.Size.Z - p.Size.Z)/ 2) - (p.Position.Z - base.Position.Z) | |
| 162 | if z >= 1 and z <= base.Size.Z - p.Size.Z + 1 then | |
| 163 | b3 = base:Clone() | |
| 164 | b3.FormFactor = "Custom" | |
| 165 | b3.Parent = base.Parent | |
| 166 | b3.Name = "" ..base.Name .."Z1" | |
| 167 | b3.Size = Vector3.new(x, y, z) | |
| 168 | b3.CFrame = p.CFrame | |
| 169 | b3.CFrame = p.CFrame * CFrame.new(0, 0, ((z/2)+p.Size.Z/2)) | |
| 170 | end | |
| 171 | z = ((base.Size.Z - p.Size.Z)/ 2) + (p.Position.Z - base.Position.Z) | |
| 172 | if z >= 1 and z <= base.Size.Z - p.Size.Z + 1 then | |
| 173 | b4 = base:Clone() | |
| 174 | b4.FormFactor = "Custom" | |
| 175 | b4.Parent = base.Parent | |
| 176 | b4.Name = "" ..base.Name .."Z2" | |
| 177 | b4.Size = Vector3.new(x, y, z) | |
| 178 | b4.CFrame = p.CFrame | |
| 179 | b4.CFrame = p.CFrame * CFrame.new(0, 0, -((z/2)+p.Size.Z/2)) | |
| 180 | end | |
| 181 | ---complex parts--- | |
| 182 | if b1 and b3 then | |
| 183 | q1 = b1:Clone() | |
| 184 | q1.FormFactor = "Custom" | |
| 185 | q1.Name = "" ..base.Name .. "Q1" | |
| 186 | q1.Parent = base.Parent | |
| 187 | q1.Size = Vector3.new(b1.Size.X, b1.Size.Y, b3.Size.Z) | |
| 188 | q1.CFrame = b1.CFrame | |
| 189 | q1.CFrame = b1.CFrame * CFrame.new(0,0,(b3.Size.Z/2)+b1.Size.Z/2) | |
| 190 | end | |
| 191 | if b1 and b4 then | |
| 192 | q2 = b1:Clone() | |
| 193 | q2.FormFactor = "Custom" | |
| 194 | q2.Name = "" ..base.Name .. "Q2" | |
| 195 | q2.Parent = base.Parent | |
| 196 | q2.Size = Vector3.new(b1.Size.X, b1.Size.Y, b4.Size.Z) | |
| 197 | q2.CFrame = b1.CFrame | |
| 198 | q2.CFrame = b1.CFrame * CFrame.new(0,0,-((b4.Size.Z/2)+b1.Size.Z/2)) | |
| 199 | end | |
| 200 | if b2 and b3 then | |
| 201 | q3 = b2:Clone() | |
| 202 | q3.FormFactor = "Custom" | |
| 203 | q3.Name = "" ..base.Name .. "Q3" | |
| 204 | q3.Parent = base.Parent | |
| 205 | q3.Size = Vector3.new(b2.Size.X, b2.Size.Y, b3.Size.Z) | |
| 206 | q3.CFrame = b2.CFrame | |
| 207 | q3.CFrame = b2.CFrame * CFrame.new(0,0,(b3.Size.Z/2)+b2.Size.Z/2) | |
| 208 | end | |
| 209 | if b2 and b4 then | |
| 210 | q4 = b2:Clone() | |
| 211 | q4.FormFactor = "Custom" | |
| 212 | q4.Name = "" ..base.Name .. "Q4" | |
| 213 | q4.Parent = base.Parent | |
| 214 | q4.Size = Vector3.new(b2.Size.X, b2.Size.Y, b4.Size.Z) | |
| 215 | q4.CFrame = b2.CFrame | |
| 216 | q4.CFrame = b2.CFrame * CFrame.new(0,0,-((b4.Size.Z/2)+b2.Size.Z/2)) | |
| 217 | end | |
| 218 | ------------------- | |
| 219 | ||
| 220 | base:remove() | |
| 221 | end | |
| 222 | ||
| 223 | for i=1,#overlappingparts do | |
| 224 | MakeHole(cutout[i], overlappingparts[i]) | |
| 225 | end | |
| 226 | p:remove() | |
| 227 | end end) | |
| 228 | end | |
| 229 | ||
| 230 | for i=1,numberofrainspawned do | |
| 231 | wait(math.random(1,2)/5) | |
| 232 | rain = Instance.new("Part", Workspace)
| |
| 233 | rain.Size = Vector3.new(1,1,1) | |
| 234 | rain.TopSurface = 0 | |
| 235 | rain.BottomSurface = 0 | |
| 236 | rain.Shape = "Ball" | |
| 237 | rain.BrickColor = BrickColor.new("Camo")
| |
| 238 | rain.CanCollide = false | |
| 239 | rain.Size = Vector3.new(math.random(15,25),math.random(15,25),math.random(15,25)) | |
| 240 | rain.CFrame = rainspawnsaround * CFrame.new(math.random(-range,range),math.random(-100,200),math.random(-range,range)) | |
| 241 | s = Instance.new("Sound", rain)
| |
| 242 | s.Volume = 1 | |
| 243 | s.Pitch = 1 | |
| 244 | s.SoundId = "http://www.roblox.com/asset/?version=1&id=154955269" | |
| 245 | s.PlayOnRemove = true | |
| 246 | oh = coroutine.wrap(ggwp) | |
| 247 | oh(rain) | |
| 248 | end |