Advertisement
SCP1033

Untitled

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