SHOW:
|
|
- or go back to the newest paste.
1 | - | local player = game.Players.Zororion |
1 | + | local player = game.Players.TheOfficalNoob4788 |
2 | local char = player.Character | |
3 | ||
4 | -- Body parts | |
5 | local torso = char.Torso | |
6 | ||
7 | -- Tool declarations | |
8 | local mouseDown = false | |
9 | local keysDown = {} | |
10 | ||
11 | -- Earth bending declarations | |
12 | local raisingEarth = false | |
13 | local raisingTower = false | |
14 | local wall = false | |
15 | local groundAttack = false | |
16 | local lastTower = nil | |
17 | local disabled = {} | |
18 | local frames = {} | |
19 | local parts = {} | |
20 | local Taunts = {"Foolish.", "Take that!", "Heh.", "You have no hope.", "Grow up.", "DIE!", "EARTH, SHOOT!", "GOOD LUCK STAYING ALIVE!", "You pitiful being."} | |
21 | local raisechats = {"Earth, raise!", "Get Ready to DIE!", "Heheh..", "Time to die.","Fool.", "Worthless.","Muhahah.","Good Luck, You'll Need it.","TROLLFAIC"} | |
22 | ||
23 | -- Main | |
24 | function main(mouse) | |
25 | while true do wait(1/30) | |
26 | local look = CFrame.new(torso.Position, torso.Position + mouse.Hit.lookVector) | |
27 | ||
28 | -- Reset parts | |
29 | parts = {} | |
30 | ||
31 | -- Get parts | |
32 | for x = -20, 20, 10 do | |
33 | for y = -20, 20, 10 do | |
34 | for z = -30, -10, 10 do | |
35 | local pos = look * Vector3.new(x, y, z) | |
36 | getPartsInRegion3( | |
37 | Region3.new( | |
38 | pos + Vector3.new(1,1,1)*-9, | |
39 | pos + Vector3.new(1,1,1)* 9 | |
40 | ), | |
41 | parts | |
42 | ) | |
43 | end | |
44 | end | |
45 | end | |
46 | ||
47 | -- Mouse down | |
48 | if mouseDown then | |
49 | -- Create dif and bodies | |
50 | for _, part in pairs(parts) do | |
51 | if part.Name == "Earth" and not disabled[part] then | |
52 | if not frames[part] and part ~= lastTower then | |
53 | frames[part] = look:toObjectSpace(part.CFrame) | |
54 | ||
55 | part:ClearAllChildren() | |
56 | part.Anchored = false | |
57 | ||
58 | -- Create bodies | |
59 | createBody("Position", part) | |
60 | createBody("Gyro", part) | |
61 | end | |
62 | end | |
63 | end | |
64 | ||
65 | -- Move bodies | |
66 | for part in pairs(frames) do | |
67 | local bodyPos = part:FindFirstChild("BodyPosition") | |
68 | local bodyGyr = part:FindFirstChild("BodyGyro") | |
69 | ||
70 | -- Bodies exist | |
71 | if bodyPos and bodyGyr then | |
72 | local dif = look * frames[part] | |
73 | ||
74 | bodyPos.position = dif.p | |
75 | bodyGyr.cframe = dif | |
76 | else | |
77 | frames[part] = nil | |
78 | end | |
79 | end | |
80 | else | |
81 | for part in pairs(frames) do | |
82 | if part.Name == "Earth" then | |
83 | frames[part] = nil | |
84 | ||
85 | part:ClearAllChildren() | |
86 | end | |
87 | end | |
88 | end | |
89 | end | |
90 | end | |
91 | ||
92 | -- On key change | |
93 | function onKeyChange(mouse, key, state) | |
94 | -- Raise earth | |
95 | if key == "e" and state and not raisingEarth then | |
96 | game:GetService("Chat"):Chat(char.Head, raisechats[math.random(1,#raisechats)], Enum.ChatColor.Red) | |
97 | raisingEarth = true | |
98 | while keysDown[key] do | |
99 | local torsoY = torso.Position.y + 3 | |
100 | local pos = planeY(torso.Position, 0.4 - 4/2) | |
101 | local dir = planeY(mouse.Hit.lookVector).unit | |
102 | local frame = CFrame.new(pos, pos + dir) * CFrame.new(r(-10, 10), 0, r(-20, -5)) | |
103 | ||
104 | -- Create earth part | |
105 | local part = createEarth(workspace) | |
106 | part.Anchored = true | |
107 | part.Size = Vector3.new(4, 4, 4) | |
108 | disabled[part] = true | |
109 | ||
110 | -- Raise earth | |
111 | for i = 1, 4 do i = i/4 | |
112 | part.CFrame = frame * CFrame.new(0, (torsoY - frame.y)*i, 0) | |
113 | wait(1/10000000) | |
114 | if not part.Anchored then | |
115 | break | |
116 | end | |
117 | end | |
118 | ||
119 | disabled[part] = nil | |
120 | part.Anchored = false | |
121 | ||
122 | wait(1/100) | |
123 | end | |
124 | raisingEarth = false | |
125 | ||
126 | ||
127 | ||
128 | ||
129 | ||
130 | elseif key == "c" and state and not raisingEarth then | |
131 | game:GetService("Chat"):Chat(char.Head, raisechats[math.random(1,#raisechats)], Enum.ChatColor.Red) | |
132 | raisingEarth = true | |
133 | while keysDown[key] do | |
134 | local torsoY = torso.Position.y + 3 | |
135 | local pos = planeY(torso.Position, 0.4 - 4/2) | |
136 | local dir = planeY(mouse.Hit.lookVector).unit | |
137 | local frame = CFrame.new(pos, pos + dir) * CFrame.new(r(-10, 10), 0, r(-20, -5)) | |
138 | ||
139 | -- Create earth part | |
140 | local part = createEarth(workspace) | |
141 | part.Anchored = true | |
142 | part.Size = Vector3.new(2, 2, 2) | |
143 | disabled[part] = true | |
144 | ||
145 | -- Raise earth | |
146 | for i = 1, 4 do i = i/4 | |
147 | part.CFrame = frame * CFrame.new(0, (torsoY - frame.y)*i, 0) | |
148 | wait(1/10000000) | |
149 | if not part.Anchored then | |
150 | break | |
151 | end | |
152 | end | |
153 | ||
154 | disabled[part] = nil | |
155 | part.Anchored = false | |
156 | ||
157 | wait(1/100) | |
158 | end | |
159 | raisingEarth = false | |
160 | ||
161 | ||
162 | ||
163 | -- Push earth | |
164 | elseif key == "f" and state then | |
165 | game:GetService("Chat"):Chat(char.Head, Taunts[math.random(1,#Taunts)], Enum.ChatColor.Red) | |
166 | for _, part in pairs(parts) do | |
167 | if part.Name == "Earth" and part ~= lastTower then | |
168 | part:ClearAllChildren() | |
169 | part.Anchored = false | |
170 | ||
171 | -- Add force | |
172 | local bodyForce = createBody("Force", part) | |
173 | bodyForce.force = mouse.Hit.lookVector*1.5e4 * part:GetMass() | |
174 | ||
175 | game.Debris:AddItem(bodyForce, 1/30) | |
176 | ||
177 | -- Disable part | |
178 | disabled[part] = true | |
179 | delay(1, function() | |
180 | disabled[part] = nil | |
181 | end) | |
182 | end | |
183 | end | |
184 | ||
185 | -- Break earth | |
186 | elseif key == "b" and state then | |
187 | game:GetService("Chat"):Chat(char.Head, "Earth, BREAK!", Enum.ChatColor.Red) | |
188 | for part in pairs(frames) do | |
189 | if part.Size == Vector3.new(4, 4, 4) then | |
190 | for x = -1, 2, 2 do | |
191 | for y = -1, 2, 2 do | |
192 | for z = -1, 1, 2 do | |
193 | local oPart = createEarth(workspace) | |
194 | oPart.Size = Vector3.new(2, 2, 2) | |
195 | oPart.CFrame = part.CFrame * CFrame.new(x*1.1, y*1.1, z*1.1) | |
196 | end | |
197 | end | |
198 | end | |
199 | part:Destroy() | |
200 | end | |
201 | ||
202 | end | |
203 | ||
204 | for part in pairs(frames) do | |
205 | if part.Size == Vector3.new(25, 15, 25) then | |
206 | for x = -3, 2, 2 do | |
207 | for y = -3, 2, 2 do | |
208 | for z = -3, 1, 2 do | |
209 | local oPart = createEarth(workspace) | |
210 | oPart.Size = Vector3.new(2, 2, 2) | |
211 | oPart.CFrame = part.CFrame * CFrame.new(x*1.1, y*1.1, z*1.1) | |
212 | end | |
213 | end | |
214 | end | |
215 | part:Destroy() | |
216 | end | |
217 | ||
218 | end | |
219 | ||
220 | for part in pairs(frames) do | |
221 | if part.Size == Vector3.new(2, 2, 2) then | |
222 | for x = -0.5, 2, 2 do | |
223 | for y = -0.5, 2, 2 do | |
224 | for z = -0.5, 1, 2 do | |
225 | local oPart = createEarth(workspace) | |
226 | oPart.Size = Vector3.new(1, 1, 1) | |
227 | oPart.CFrame = part.CFrame * CFrame.new(x*1.1, y*1.1, z*1.1) | |
228 | end | |
229 | end | |
230 | end | |
231 | part:Destroy() | |
232 | end | |
233 | ||
234 | end | |
235 | ||
236 | ||
237 | ||
238 | ||
239 | -- Raise tower | |
240 | elseif key == "r" and state and not raisingTower then | |
241 | game:GetService("Chat"):Chat(char.Head, raisechats[math.random(1,#raisechats)], Enum.ChatColor.Red) | |
242 | raisingTower = true | |
243 | lastTower = nil | |
244 | if torso.Position.y - 5/2 < 20.4 then | |
245 | local part = createEarth(workspace) | |
246 | part.Anchored = true | |
247 | disabled[part] = true | |
248 | ||
249 | for i = 0, 20, 4 do | |
250 | part.Size = Vector3.new(5, i, 5) | |
251 | part.CFrame = CFrame.new(torso.Position.x, 0.4 + part.Size.y/2, torso.Position.z) | |
252 | torso.CFrame = (torso.CFrame - torso.CFrame.p) + Vector3.new(torso.Position.x, part.Position.y + part.Size.y/2 + 5/2, torso.Position.z) | |
253 | wait(1/30) | |
254 | end | |
255 | ||
256 | lastTower = part | |
257 | ||
258 | disabled[part] = nil | |
259 | part.Anchored = false | |
260 | end | |
261 | raisingTower = false | |
262 | ||
263 | ||
264 | -- Raise wall | |
265 | elseif key == "t" and state and not wall then | |
266 | game:GetService("Chat"):Chat(char.Head, raisechats[math.random(1,#raisechats)], Enum.ChatColor.Red) | |
267 | wall = true | |
268 | lastWall = nil | |
269 | if torso.Position.y - 5/2 < 20.4 then | |
270 | local part = createEarth(workspace) | |
271 | part.Anchored = true | |
272 | disabled[part] = true | |
273 | ||
274 | for i = 0, 1, 20 do | |
275 | part.Size = Vector3.new(25, 15, 25) | |
276 | part.CFrame = CFrame.new(torso.Position.x, 0.4 + part.Size.y/2, torso.Position.z) | |
277 | torso.CFrame = (torso.CFrame - torso.CFrame.p) + Vector3.new(torso.Position.x, part.Position.y + part.Size.y/2 + 5/2, torso.Position.z) | |
278 | wait(1/30) | |
279 | end | |
280 | ||
281 | lastWall = part | |
282 | ||
283 | disabled[part] = nil | |
284 | part.Anchored = false | |
285 | end | |
286 | wall = false | |
287 | ||
288 | -- Ground attack | |
289 | elseif key == "g" and state and not groundAttack then | |
290 | game:GetService("Chat"):Chat(char.Head, Taunts[math.random(1,#Taunts)], Enum.ChatColor.Red) | |
291 | groundAttack = true | |
292 | delay(1, function() | |
293 | groundAttack = false | |
294 | end) | |
295 | ||
296 | local dir = planeY(mouse.Hit.p - torso.Position).unit | |
297 | local pos = planeY(torso.Position, 0.4 + 1) + dir*5 | |
298 | ||
299 | local ground = {} | |
300 | ||
301 | delay(5, function() | |
302 | for i = 1, 20 do | |
303 | for _, part in pairs(ground) do | |
304 | if part.Anchored then | |
305 | part.CFrame = part.CFrame + Vector3.new(0, -1/7, 0) | |
306 | end | |
307 | end | |
308 | wait(1/30) | |
309 | end | |
310 | for _, part in pairs(ground) do | |
311 | if part.Anchored then | |
312 | part:Destroy() | |
313 | end | |
314 | end | |
315 | end) | |
316 | ||
317 | for i = 1, 10 do | |
318 | local hit, pos2 = rayCast(pos, dir*5, {char}) | |
319 | ||
320 | local part = createEarth(workspace) | |
321 | part.Anchored = true | |
322 | part.Size = Vector3.new(4, 4, 4) | |
323 | part.CFrame = CFrame.new(pos2, pos2 + dir) * CFrame.Angles(math.rad(-50), 0, 0) + Vector3.new(0, -0, 0) | |
324 | ||
325 | ground[#ground + 1] = part | |
326 | ||
327 | -- Add force | |
328 | if hit then | |
329 | local mass = hit:GetMass() | |
330 | ||
331 | -- Hit player | |
332 | for _, oPlayer in pairs(game.Players:GetPlayers()) do | |
333 | if oPlayer.Character and oPlayer.Character:FindFirstChild("Torso") and hit:IsDescendantOf(oPlayer.Character) then | |
334 | hit = oPlayer.Character.Torso | |
335 | mass = 20 | |
336 | end | |
337 | end | |
338 | ||
339 | if hit.Name ~= "Torso" then | |
340 | hit:ClearAllChildren() | |
341 | end | |
342 | hit.Anchored = false | |
343 | ||
344 | -- Add force | |
345 | local bodyForce = createBody("Force", hit) | |
346 | bodyForce.force = (dir + Vector3.new(0, 0.2, 0)).unit*1e4 * mass | |
347 | ||
348 | game.Debris:AddItem(bodyForce, 1/30) | |
349 | break | |
350 | end | |
351 | ||
352 | pos = pos2 | |
353 | wait(1/20) | |
354 | end | |
355 | end | |
356 | end | |
357 | ||
358 | --- CORE CODE BELOW --- CORE CODE BELOW --- CORE CODE BELOW --- | |
359 | --- CORE CODE BELOW --- CORE CODE BELOW --- CORE CODE BELOW --- | |
360 | --- CORE CODE BELOW --- CORE CODE BELOW --- CORE CODE BELOW --- | |
361 | ||
362 | -- Clear old tool | |
363 | player.Backpack:ClearAllChildren() | |
364 | ||
365 | -- Create tool | |
366 | local tool = Instance.new("HopperBin") | |
367 | tool.Parent = player.Backpack | |
368 | tool.Name = "Dark Bending" | |
369 | ||
370 | -- Tool selected | |
371 | tool.Selected:connect(function(mouse) | |
372 | mouse.Icon = "rbxasset://textures\\GunCursor.png" | |
373 | ||
374 | -- Mouse events | |
375 | mouse.Button1Down:connect(function() | |
376 | mouseDown = true | |
377 | end) | |
378 | mouse.Button1Up:connect(function() | |
379 | mouseDown = false | |
380 | end) | |
381 | mouse.KeyDown:connect(function(key) | |
382 | keysDown[key:lower()] = true | |
383 | onKeyChange(mouse, key:lower(), true) | |
384 | end) | |
385 | mouse.KeyUp:connect(function(key) | |
386 | keysDown[key:lower()] = false | |
387 | onKeyChange(mouse, key:lower(), false) | |
388 | end) | |
389 | ||
390 | -- Call main | |
391 | main(mouse) | |
392 | end) | |
393 | ||
394 | --- LIBRARY BELOW --- LIBRARY BELOW --- LIBRARY BELOW --- | |
395 | --- LIBRARY BELOW --- LIBRARY BELOW --- LIBRARY BELOW --- | |
396 | --- LIBRARY BELOW --- LIBRARY BELOW --- LIBRARY BELOW --- | |
397 | ||
398 | -- Ray cast | |
399 | function rayCast(pos, dir, ignore) | |
400 | return workspace:FindPartOnRayWithIgnoreList(Ray.new(pos, dir), ignore) | |
401 | end | |
402 | ||
403 | -- Create body | |
404 | function createBody(type, path) | |
405 | local body = Instance.new("Body" .. type) | |
406 | if type == "Gyro" then | |
407 | body.maxTorque = Vector3.new(math.huge, math.huge, math.huge) | |
408 | elseif type ~= "Force" then | |
409 | body.maxForce = Vector3.new(math.huge, math.huge, math.huge) | |
410 | end | |
411 | body.Parent = path | |
412 | return body | |
413 | end | |
414 | ||
415 | -- Get parts in region 3 | |
416 | function getPartsInRegion3(region, parts) | |
417 | repeat | |
418 | local regParts = workspace:FindPartsInRegion3WithIgnoreList(region, parts, 100) | |
419 | for i, part in pairs(regParts) do | |
420 | parts[#parts + 1] = part | |
421 | end | |
422 | until #regParts < 100 | |
423 | end | |
424 | ||
425 | -- Random | |
426 | function r(min, max) | |
427 | return math.random()*(max - min) + min | |
428 | end | |
429 | ||
430 | -- Plane y | |
431 | function planeY(v, y) | |
432 | return Vector3.new(v.x, y or 0, v.z) | |
433 | end | |
434 | ||
435 | -- Create earth | |
436 | function createEarth(path) | |
437 | local part = createPart("Earth", path) | |
438 | part.BrickColor = BrickColor.new("Really black") | |
439 | part.Material = "Slate" | |
440 | m = Instance.new("Fire",part) | |
441 | m.Heat = 10 | |
442 | part.Parent = path | |
443 | return part | |
444 | end | |
445 | ||
446 | -- Create part | |
447 | function createPart(name, path) | |
448 | local part = Instance.new("Part") | |
449 | part.FormFactor = "Symmetric" | |
450 | part.BottomSurface = "Smooth" | |
451 | part.TopSurface = "Smooth" | |
452 | part.Size = Vector3.new(1, 1, 1) | |
453 | part.Name = name | |
454 | part.Parent = path | |
455 | return part | |
456 | end |