Advertisement
SxScripting

Tree Jump Module [Script]

Jan 4th, 2024
338
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.40 KB | None | 0 0
  1. local TreeJmpingModule = {}
  2. TreeJmpingModule.__index = TreeJmpingModule
  3.  
  4. local UserInputService = game:GetService("UserInputService")
  5. local RunService = game:GetService("RunService")
  6.  
  7. function TreeJmpingModule.new(Character)
  8. local Table = {
  9. Character = Character;
  10. Humanoid = Character:WaitForChild("Humanoid");
  11. HumanoidRootPart = Character:WaitForChild("HumanoidRootPart");
  12. Camera = workspace.CurrentCamera;
  13.  
  14. SpaceHeldStartTime = 0;
  15. HoldingSpace = false;
  16. YCap = 0;
  17. Power = 10;
  18. TreeJumping = false
  19. }
  20.  
  21.  
  22. local self = setmetatable(Table,TreeJmpingModule)
  23.  
  24. self:CreateInputs()
  25. self:CreateEffects()
  26. self:CreateBodyVelocities()
  27. self:LoadAnimatons()
  28.  
  29. return self
  30. end
  31.  
  32. function TreeJmpingModule:CreateBodyVelocities()
  33. self.BodyVelocity = Instance.new("BodyVelocity")
  34. self.BodyVelocity.Parent = nil
  35. self.BodyVelocity.MaxForce = Vector3.one * math.huge
  36. self.BodyVelocity.P = 9e9
  37. self.BodyVelocity.Velocity = Vector3.new()
  38.  
  39. self.BodyGyro = Instance.new("BodyGyro")
  40. self.BodyGyro.Parent = nil
  41. self.BodyGyro.P = 9e9
  42. self.BodyGyro.MaxTorque = Vector3.one * math.huge
  43. end
  44.  
  45. function TreeJmpingModule:LoadAnimatons()
  46. repeat wait() until self.Humanoid:IsDescendantOf(workspace)
  47.  
  48. self.Animations = {}
  49.  
  50. for i,v in pairs(game.ReplicatedStorage.Animations:GetChildren()) do
  51. self.Animations[v.Name] = self.Humanoid:LoadAnimation(v)
  52. end
  53.  
  54. end
  55.  
  56. function TreeJmpingModule:SetSpaceHeldTime()
  57. self.SpaceHeldStartTime = tick()
  58. end
  59.  
  60. function TreeJmpingModule:SetHoldingSpace(Bool)
  61. self.HoldingSpace = Bool
  62. end
  63.  
  64. function TreeJmpingModule:FindFloor()
  65. local Params = RaycastParams.new()
  66. Params.FilterType = Enum.RaycastFilterType.Include
  67. Params.FilterDescendantsInstances = {workspace.Map}
  68.  
  69. local raycast = workspace:Raycast(self.HumanoidRootPart.Position,-Vector3.new(0,4,0),Params)
  70.  
  71. if raycast then
  72. return raycast.Instance
  73. end
  74. end
  75.  
  76. function TreeJmpingModule:Hold(Bool)
  77. if Bool then
  78. if not self:FindFloor() then
  79. return
  80. end
  81.  
  82. if self:FindFloor().Parent ~= workspace.Map.Trees then
  83. return
  84. end
  85.  
  86. if self.TreeJumping then
  87. return
  88. end
  89.  
  90. self.Humanoid.JumpPower = 0
  91. self.Humanoid.AutoRotate = false
  92. self.BodyGyro.CFrame = CFrame.new(self.HumanoidRootPart.Position,self.HumanoidRootPart.Position + Vector3.new(self.Camera.CFrame.LookVector.X,0,self.Camera.CFrame.LookVector.Z))
  93. self.Power = 0
  94.  
  95. self.Animations.Hold:Play()
  96.  
  97. self:SetHoldingSpace(true)
  98. self:SetSpaceHeldTime()
  99. else
  100. if not self.HoldingSpace then
  101. return
  102. end
  103.  
  104. self.Power = math.clamp((.1+(tick() - self.SpaceHeldStartTime))*50,50,150)
  105. self.YCap = 1
  106. self.TreeJumping = true
  107. self.CanLand = false
  108. self:SetHoldingSpace(false)
  109.  
  110. self.Animations.Hold:Stop()
  111.  
  112. repeat wait() until (not self:FindFloor()) and self.Humanoid.FloorMaterial ~= Enum.Material.Air
  113.  
  114. self.CanLand = true
  115. end
  116. end
  117.  
  118. function TreeJmpingModule:CreateEffects()
  119. self.EffectRender = RunService.RenderStepped:Connect(function(Delta)
  120. self.BodyVelocity.Parent = (self.TreeJumping or self.HoldingSpace) and self.HumanoidRootPart or nil
  121. self.BodyGyro.Parent = self.BodyVelocity.Parent
  122.  
  123. if self.HoldingSpace then
  124. self.BodyGyro.CFrame = self.BodyGyro.CFrame:Lerp(CFrame.new(Vector3.zero,Vector3.new(self.Camera.CFrame.LookVector.X,0,self.Camera.CFrame.LookVector.Z)),Delta * 8 )
  125. self.BodyVelocity.Velocity = Vector3.new()
  126.  
  127.  
  128. else
  129. self.BodyGyro.CFrame = self.BodyGyro.CFrame:Lerp(CFrame.new(Vector3.zero,Vector3.new(self.Camera.CFrame.LookVector.X,math.min(self.Camera.CFrame.LookVector.Y,self.YCap),self.Camera.CFrame.LookVector.Z)),Delta * 12 )
  130. self.BodyVelocity.Velocity = self.BodyGyro.CFrame.LookVector * self.Power
  131. self.YCap = math.clamp(self.YCap-Delta/2,-1,1)
  132. end
  133.  
  134. if self.CanLand and self:FindFloor() then
  135. self.TreeJumping = false
  136. self.CanLand = false
  137. self.Power = 0
  138. self.YCap = 1
  139. self.Humanoid.AutoRotate = true
  140. end
  141. end)
  142. end
  143.  
  144. function TreeJmpingModule:CreateInputs()
  145. self.InputBegan = UserInputService.InputBegan:Connect(function(Key,Typing)
  146. if Typing then
  147. return
  148. end
  149.  
  150. if Key.KeyCode == Enum.KeyCode.Space then
  151. self:Hold(true)
  152. end
  153. end)
  154.  
  155. self.InputEnded = UserInputService.InputEnded:Connect(function(Key,Typing)
  156. if Typing then
  157. return
  158. end
  159.  
  160. if Key.KeyCode == Enum.KeyCode.Space then
  161. self:Hold(false)
  162. end
  163. end)
  164. end
  165.  
  166. return TreeJmpingModule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement