Advertisement
Pastebloxian

lumber tycoon hard drag

Mar 2nd, 2019
1,046
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.93 KB | None | 0 0
  1. local player = game.Players.LocalPlayer
  2. local Character = player.Character or player.CharacterAdded:wait()
  3. local Humanoid = Character:WaitForChild("Humanoid")
  4. local walkSpeed = Humanoid.WalkSpeed
  5. game.Players.LocalPlayer.PlayerGui.ItemDraggingGUI.Dragger.Disabled = true
  6. _G.dragRangeMin = 5
  7. fivefour = coroutine.wrap(function()
  8. EKey = false
  9. QKey = false
  10. player:GetMouse().KeyDown:connect(function(key)
  11. if string.lower(key) == "e" then
  12. EKey = true
  13. elseif string.lower(key) == "q" then
  14. QKey = true
  15. end
  16. end)
  17. player:GetMouse().KeyUp:connect(function(key)
  18. if string.lower(key) == "e" then
  19. EKey = false
  20. elseif string.lower(key) == "q" then
  21. QKey = false
  22. end
  23. end)
  24. while wait(0.1) do
  25. if EKey then
  26. F = FVal
  27. FVal = FVal + 1000
  28. ChangeForce(F+1000)
  29. print(F)
  30. end
  31. if QKey then
  32. F = FVal
  33. FVal = FVal - 1000
  34. ChangeForce(F-1000)
  35. print(F)
  36. end
  37. end
  38.  
  39. end)
  40. fivefour()
  41. local dragPart = Instance.new("Part",game.Players.LocalPlayer.PlayerGui)--game.Players.LocalPlayer.PlayerGui.ItemDraggingGUI.Dragger.Dragger
  42. dragPart.Size = Vector3.new(0.2,0.2,0.2)
  43. dragPart.BrickColor = BrickColor.new("Really red")
  44. player.CharacterAdded:connect(function()
  45. Character = player.Character
  46. Humanoid = Character:WaitForChild("Humanoid")
  47. Humanoid.Died:connect(function()
  48. dragPart.Parent = nil
  49. end)
  50. end)
  51.  
  52. wait(1)
  53. local dragRangeMax = 10000
  54. local dragRangeMin = _G.dragRangeMin
  55.  
  56. local camera = workspace.CurrentCamera
  57. local mouse = player:GetMouse()
  58.  
  59. local button1Down = false
  60. local dragRange = dragRangeMax
  61. FVal = 80000
  62. local bodyPosition = Instance.new("BodyPosition", dragPart)
  63. bodyPosition.maxForce = Vector3.new(1, 1, 1) * FVal
  64. bodyPosition.D = 1000
  65. bodyPosition.P = 4000
  66. function ChangeForce(F)
  67. if F > 0 then
  68. F = bodyPosition.maxForce.X+F
  69. bodyPosition.maxForce = Vector3.new(1, 1, 1) * F
  70. else
  71. F = bodyPosition.maxForce.X-F
  72. bodyPosition.maxForce = Vector3.new(1, 1, 1) * F
  73. end
  74. end
  75.  
  76. local bodyGyro = Instance.new("BodyGyro", dragPart)
  77. dragPart.Anchored = false
  78. dragPart:BreakJoints()
  79. bodyGyro.maxTorque = Vector3.new(1, 1, 1) * 200 --4000 -- * 0.000012
  80. bodyGyro.P = 1200
  81. bodyGyro.D = 140 --15
  82.  
  83. --bodyPosition.P = bodyPosition.P * 1/19
  84. --bodyPosition.D = bodyPosition.D * 1/19
  85. --bodyGyro.P = bodyGyro.P * 1/19
  86. --bodyGyro.D = bodyGyro.D * 1/19
  87.  
  88. local rotateCFrame = CFrame.new()
  89.  
  90. local weld = Instance.new("Weld", dragPart)
  91.  
  92. --local interactPermission = require(game.ReplicatedStorage.Interaction.InteractionPermission)
  93. local clientIsDragging = game.ReplicatedStorage.Interaction.ClientIsDragging
  94.  
  95. local carryAnimationTrack
  96.  
  97.  
  98. --------------------------------[[ Drag Main ]]------------------------------------
  99.  
  100. local draggingPart = false
  101.  
  102. function click()
  103. button1Down = true
  104.  
  105. local targetObject = game.Players.LocalPlayer:GetMouse().Target
  106. if not canDrag(targetObject) then
  107. return
  108. end
  109.  
  110. local mouseHit = game.Players.LocalPlayer:GetMouse().Hit.p
  111. if (mouseHit - Character.Head.Position).magnitude > dragRangeMax then
  112. return
  113. end
  114.  
  115. initializeDrag(targetObject, mouseHit)
  116. rotateCFrame = CFrame.new()
  117.  
  118. carryAnimationTrack:Play(0.1, 1, 1)
  119.  
  120. local dragIsFailing = 0
  121. local dragTime = 0
  122.  
  123.  
  124. while button1Down and canDrag(targetObject) do
  125. local desiredPos = Character.Head.Position + (game.Players.LocalPlayer:GetMouse().Hit.p - Character.Head.Position).unit * dragRange
  126.  
  127. local dragRay = Ray.new(Character.Head.Position, desiredPos - Character.Head.Position)
  128. local part, pos = workspace:FindPartOnRayWithIgnoreList(dragRay, {Character, dragPart, targetObject.Parent})
  129.  
  130. if part then
  131. desiredPos = pos
  132. end
  133.  
  134. if (camera.CoordinateFrame.p - Character.Head.Position).magnitude > 2 then
  135. desiredPos = desiredPos + Vector3.new(0, 1.8, 0)
  136. end
  137.  
  138. moveDrag(desiredPos)
  139. bodyGyro.cframe = CFrame.new(dragPart.Position, camera.CoordinateFrame.p) * rotateCFrame
  140.  
  141. local targParent = findHighestParent(targetObject) or targetObject
  142.  
  143. local attemptingToSurf = false
  144. for _, check in pairs({{Ray = Ray.new((Character.HumanoidRootPart.CFrame * CFrame.new(0.7, -2.8, 0)).p, Vector3.new(0, -2, 0))},
  145. {Ray = Ray.new((Character.HumanoidRootPart.CFrame * CFrame.new(0.35, -2.8, 0)).p, Vector3.new(0, -2, 0))},
  146. {Ray = Ray.new((Character.HumanoidRootPart.CFrame * CFrame.new(0, -2.8, 0)).p, Vector3.new(0, -2, 0))},
  147. {Ray = Ray.new((Character.HumanoidRootPart.CFrame * CFrame.new(0.35, -2.8, 0)).p, Vector3.new(0, -2, 0))},
  148. {Ray = Ray.new((Character.HumanoidRootPart.CFrame * CFrame.new(-0.7, -2.8, 0)).p, Vector3.new(0, -2, 0))},
  149.  
  150. {Ray = Ray.new((Character.HumanoidRootPart.CFrame * CFrame.new(0.35, -2.8, 0.6)).p, Vector3.new(0, -2, 0))},
  151. {Ray = Ray.new((Character.HumanoidRootPart.CFrame * CFrame.new(0, -2.8, 0.6)).p, Vector3.new(0, -2, 0))},
  152. {Ray = Ray.new((Character.HumanoidRootPart.CFrame * CFrame.new(0.35, -2.8, 0.6)).p, Vector3.new(0, -2, 0))},
  153.  
  154. {Ray = Ray.new((Character.HumanoidRootPart.CFrame * CFrame.new(0.35, -2.8, -0.6)).p, Vector3.new(0, -2, 0))},
  155. {Ray = Ray.new((Character.HumanoidRootPart.CFrame * CFrame.new(0, -2.8, -0.6)).p, Vector3.new(0, -2, 0))},
  156. {Ray = Ray.new((Character.HumanoidRootPart.CFrame * CFrame.new(0.35, -2.8, -0.6)).p, Vector3.new(0, -2, 0))},
  157.  
  158. {Ray = Ray.new((Character.HumanoidRootPart.CFrame * CFrame.new(0.5, -0.8, 0)).p, Character.HumanoidRootPart.CFrame.lookVector), State = Enum.HumanoidStateType.Climbing},
  159. {Ray = Ray.new((Character.HumanoidRootPart.CFrame * CFrame.new(-0.5, -0.8, 0)).p, Character.HumanoidRootPart.CFrame.lookVector), State = Enum.HumanoidStateType.Climbing},
  160. {Ray = Ray.new((Character.HumanoidRootPart.CFrame * CFrame.new(0.5, -1.3, 0)).p, Character.HumanoidRootPart.CFrame.lookVector), State = Enum.HumanoidStateType.Climbing},
  161. {Ray = Ray.new((Character.HumanoidRootPart.CFrame * CFrame.new(-0.5, -1.3, 0)).p, Character.HumanoidRootPart.CFrame.lookVector), State = Enum.HumanoidStateType.Climbing}
  162.  
  163. }) do
  164.  
  165. local ray = check.Ray
  166. local part, _ = workspace:FindPartOnRayWithIgnoreList(ray, {Character})
  167. local op = part
  168. part = part and findHighestParent(part)
  169.  
  170. if part and (not check.State or Humanoid:GetState() == check.State) then
  171. if part == targParent then
  172. attemptingToSurf = true
  173. else
  174. for _, connectedPart in pairs(op:GetConnectedParts(true)) do
  175.  
  176. if connectedPart == targetObject--[[targParent]] then
  177. attemptingToSurf = true
  178. break
  179. end
  180. end
  181. end
  182.  
  183. if attemptingToSurf then
  184. break
  185. end
  186. end
  187. end
  188.  
  189.  
  190.  
  191.  
  192.  
  193. local falling = Humanoid:GetState() == Enum.HumanoidStateType.Freefall or Humanoid:GetState() == Enum.HumanoidStateType.FallingDown--not part1 and not part2
  194.  
  195.  
  196. if attemptingToSurf then
  197. dragIsFailing = 0
  198. elseif falling then
  199. dragIsFailing = 0
  200. elseif (dragPart.Position - desiredPos).magnitude > 5 then
  201. dragIsFailing = 0
  202. else
  203. dragIsFailing = 0
  204. end
  205. if dragIsFailing > 16 then
  206. break
  207. end
  208.  
  209.  
  210. if dragTime % 10 == 0 and targParent.Parent:FindFirstChild("BedInfo") and targParent.Parent:FindFirstChild("Main") then
  211. game.Players.LocalPlayer.PlayerGui.ItemDraggingGUI.Parent.Scripts.VehicleControl.SetVehicleOwnership:Fire(targParent.Parent.Main)
  212. end
  213.  
  214. clientIsDragging:FireServer(targParent.Parent)
  215.  
  216. wait()
  217. dragTime = 0
  218. end
  219.  
  220. carryAnimationTrack:Stop()
  221.  
  222. endDrag()
  223. end
  224.  
  225.  
  226. function findHighestParent(child)
  227. if not child or not child.Parent or child.Parent == workspace then
  228. return nil
  229. end
  230.  
  231. local ret = child.Parent:FindFirstChild("Owner") and child
  232. return findHighestParent(child.Parent) or ret
  233. end
  234.  
  235.  
  236.  
  237. function clickEnded()
  238. button1Down = false
  239. end
  240.  
  241. function holdDistanceChanged()
  242. dragRange = dragRangeMax--[[_G.dragRangeMin + (1 - dist) * (dragRangeMax - _G.dragRangeMin)]]
  243. end
  244.  
  245.  
  246. function canDrag(targetObject)
  247.  
  248.  
  249. if not (targetObject and not targetObject.Anchored and targetObject.Parent and Humanoid.Health > 0) then -- General conditions
  250. return false
  251. end
  252.  
  253. if targetObject.Name == "LeafPart" then
  254. return false
  255. end
  256.  
  257. local originTargetObject = targetObject
  258. targetObject = findHighestParent(targetObject) or targetObject
  259.  
  260. bodyGyro.Parent = dragPart
  261.  
  262.  
  263. --[[if not (targetObject.Parent:FindFirstChild("Owner") or targetObject.Parent.Parent:FindFirstChild("Owner")) then
  264. return otherDraggable(targetObject, originTargetObject)
  265. end]]
  266.  
  267. if targetObject.Parent:FindFirstChild("Owner") or targetObject.Parent.Parent:FindFirstChild("Owner") then
  268. return true
  269. end
  270.  
  271. if targetObject.Parent:FindFirstChild("TreeClass") then -- Wood class
  272. return true
  273. end
  274. if targetObject.Parent:FindFirstChild("BoxItemName") then -- Shop items
  275. return true
  276. end
  277. if targetObject.Parent:FindFirstChild("PurchasedBoxItemName") then -- Purchased box items
  278. return true
  279. end
  280. if targetObject.Parent:FindFirstChild("Handle") then -- Tool items
  281. return true
  282. end
  283.  
  284. return otherDraggable(targetObject, originTargetObject)
  285. end
  286.  
  287. function otherDraggable(targetObject, originTargetObject)
  288. local draggable = targetObject and targetObject.Parent and targetObject.Parent:FindFirstChild("DraggableItem") or originTargetObject and originTargetObject.Parent and originTargetObject.Parent:FindFirstChild("DraggableItem")
  289. if draggable then -- Other stuff
  290. if draggable:FindFirstChild("NoRotate") then
  291. bodyGyro.Parent = nil
  292. end
  293. return true
  294. end
  295. end
  296.  
  297. function initializeDrag(targetObject,mouseHit)
  298. draggingPart = true
  299. mouse.TargetFilter = targetObject and findHighestParent(targetObject) and findHighestParent(targetObject).Parent or targetObject
  300.  
  301. dragPart.CFrame = CFrame.new(mouseHit, camera.CoordinateFrame.p)
  302.  
  303. weld.Part0 = dragPart
  304. weld.Part1 = targetObject
  305. weld.C0 = CFrame.new(mouseHit,camera.CoordinateFrame.p):inverse() * targetObject.CFrame
  306. weld.Parent = dragPart
  307.  
  308. dragPart.Parent = workspace
  309. end
  310.  
  311. function endDrag()
  312. mouse.TargetFilter = nil
  313. dragPart.Parent = nil
  314. draggingPart = false
  315. end
  316.  
  317. --------------------------------[[ Do Prompt ]]------------------------------------
  318.  
  319.  
  320. local dragGuiState = ""
  321. function interactLoop()
  322. while true do
  323. wait()
  324.  
  325. local newState = ""
  326.  
  327. local mouseHit = game.Players.LocalPlayer:GetMouse().Hit.p
  328. local targetObject = game.Players.LocalPlayer:GetMouse().Target
  329.  
  330.  
  331. if draggingPart then
  332. newState = "Dragging"
  333. elseif canDrag(targetObject) and not button1Down and (mouseHit - Character.Head.Position).magnitude < dragRangeMax then
  334. newState = "Mouseover"
  335. end
  336.  
  337. if true then-- not (newState == dragGuiState) then
  338. dragGuiState = newState
  339. setPlatformControls()
  340.  
  341. if dragGuiState == "" then
  342. game.Players.LocalPlayer.PlayerGui.ItemDraggingGUI.CanDrag.Visible = false
  343. game.Players.LocalPlayer.PlayerGui.ItemDraggingGUI.CanRotate.Visible = false
  344. elseif dragGuiState == "Mouseover" then
  345. game.Players.LocalPlayer.PlayerGui.ItemDraggingGUI.CanDrag.Visible = true
  346. game.Players.LocalPlayer.PlayerGui.ItemDraggingGUI.CanRotate.Visible = false
  347. elseif dragGuiState == "Dragging" then
  348. game.Players.LocalPlayer.PlayerGui.ItemDraggingGUI.CanDrag.Visible = false
  349. game.Players.LocalPlayer.PlayerGui.ItemDraggingGUI.CanRotate.Visible = not (bodyGyro.Parent == nil) and (not player:FindFirstChild("IsChatting") or player.IsChatting.Value < 1)
  350. end
  351. end
  352.  
  353. end
  354. end
  355.  
  356.  
  357. --------------------------------[[ Drag Moving ]]------------------------------------
  358.  
  359.  
  360. function moveDrag(pos)
  361. bodyPosition.position = pos
  362. end
  363. local rotateSpeedReduce = 0.036
  364.  
  365. local lastRotateTick
  366. function crotate(amount, speed)
  367.  
  368. if not draggingPart then
  369. if not player:FindFirstChild("IsChatting") or player.IsChatting.Value < 2 then
  370. Humanoid.WalkSpeed = walkSpeed
  371. end
  372. return
  373. end
  374.  
  375. if Humanoid.WalkSpeed > 1 then
  376. walkSpeed = Humanoid.WalkSpeed
  377. Humanoid.WalkSpeed = 0
  378. end
  379.  
  380. lastRotateTick = tick()
  381. local thisRotateTick = lastRotateTick
  382.  
  383. while draggingPart and amount.magnitude > 0 and lastRotateTick == thisRotateTick do
  384. rotateCFrame = CFrame.Angles(0, -amount.X * rotateSpeedReduce, 0) * CFrame.Angles(amount.Y * rotateSpeedReduce, 0, 0) * rotateCFrame
  385. wait()
  386. end
  387.  
  388. if amount.magnitude == 0 then
  389. if not player:FindFirstChild("IsChatting") or player.IsChatting.Value < 2 then
  390. Humanoid.WalkSpeed = walkSpeed
  391. end
  392. end
  393. end
  394.  
  395. --------------------------------[[ User Input ]]------------------------------------
  396.  
  397. wait(1)
  398.  
  399. carryAnimationTrack = Humanoid:LoadAnimation(game.Players.LocalPlayer.PlayerGui.ItemDraggingGUI.Dragger:WaitForChild("CarryItem"))
  400.  
  401. --input = require(game.Players.LocalPlayer.PlayerGui.ItemDraggingGUI.Parent:WaitForChild("Scripts"):WaitForChild("UserInput"))
  402.  
  403. game.Players.LocalPlayer:GetMouse().Button1Down:connect(function()
  404. click()
  405. holdDistanceChanged()
  406. end)
  407. game.Players.LocalPlayer:GetMouse().Button1Up:connect(function()
  408. clickEnded()
  409. end)
  410. --input.ClickBegan(click, holdDistanceChanged)
  411. --input.ClickEnded(clickEnded)
  412.  
  413. --input.Rotate(crotate)
  414.  
  415.  
  416. function setPlatformControls()
  417. game.Players.LocalPlayer.PlayerGui.ItemDraggingGUI.CanDrag.PlatformButton.Image = game.Players.LocalPlayer.PlayerGui.ItemDraggingGUI.CanDrag.PlatformButton.PC.Value
  418. game.Players.LocalPlayer.PlayerGui.ItemDraggingGUI.CanDrag.PlatformButton.KeyLabel.Text = "CLICK"
  419. game.Players.LocalPlayer.PlayerGui.ItemDraggingGUI.CanRotate.PlatformButton.Image = game.Players.LocalPlayer.PlayerGui.ItemDraggingGUI.CanRotate.PlatformButton.PC.Value
  420. game.Players.LocalPlayer.PlayerGui.ItemDraggingGUI.CanRotate.PlatformButton.KeyLabel.Text = "SHIFT + WASD"
  421. end
  422.  
  423.  
  424. interactLoop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement