Advertisement
Guest User

hard dragger

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