View difference between Paste ID: dvSvhsZh and b22dh8iD
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