Advertisement
basbas1234

Sample | CustomNPC

Oct 27th, 2019
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.77 KB | None | 0 0
  1. -->> Sample-Animations
  2. --|| Made by basbas1234;
  3.  
  4. Players = game:GetService('Players')
  5. ServerStorage = game:GetService('ServerStorage');
  6. RunService = game:GetService('RunService');
  7. TweenService = game:GetService('TweenService');
  8. Debris = game:GetService('Debris');
  9. Terrain = workspace.Terrain;
  10. Camera = workspace.CurrentCamera;
  11.  
  12. local Character = script.Parent
  13. local Humanoid = Character:WaitForChild('Humanoid')
  14. local HumanoidRootPart = Character:WaitForChild('HumanoidRootPart')
  15. local Head = Character:WaitForChild('Head')
  16. local Torso = Character:WaitForChild('Torso')
  17. local RightArm = Character:WaitForChild('Right Arm')
  18. local LeftArm = Character:WaitForChild('Left Arm')
  19. local RightLeg = Character:WaitForChild('Right Leg')
  20. local LeftLeg = Character:WaitForChild('Left Leg')
  21. local RootJoint = HumanoidRootPart:WaitForChild('RootJoint')
  22. local Neck = Torso:WaitForChild('Neck')
  23.  
  24. NeckCFrame = CFrame.new(0, 1.5, 0)
  25. RootCFrame = CFrame.fromEulerAnglesXYZ(-1.57, 0, 3.14)
  26.  
  27. Connections = {}
  28. Networks = {}
  29.  
  30. local Wrap = coroutine.wrap
  31. local NewCFrame = CFrame.new
  32. local NewAngles = CFrame.Angles
  33. local NewRad = math.rad
  34. local NewSin = math.sin
  35. local NewCos = math.cos
  36.  
  37. --[ Frame Systems ];
  38. TimeFrame = 0
  39. FrameRate = 1 / 60
  40. TimeFrameLoss = false
  41. FrameRateLoss = false
  42. LastFrame = tick()
  43. local Heartbeat = Instance.new('BindableEvent')
  44. Heartbeat.Name = 'Heartbeat'
  45. Heartbeat.Parent = script
  46. script:WaitForChild('Heartbeat')
  47. Heartbeat:Fire()
  48. RunService.Heartbeat:Connect(function(Step)
  49.     TimeFrame = TimeFrame + Step
  50.     if TimeFrame >= FrameRate then
  51.         if FrameRateLoss then
  52.             Heartbeat:Fire()
  53.             LastFrame = tick()
  54.         else
  55.             for i = 1, math.floor(TimeFrame / FrameRate) do
  56.                 Heartbeat:Fire()
  57.             end
  58.         LastFrame = tick()
  59.         end
  60.         if TimeFrameLoss then
  61.             TimeFrame = 0
  62.         else
  63.             TimeFrame = TimeFrame - FrameRate * math.floor(TimeFrame / FrameRate)
  64.         end
  65.     end
  66. end)
  67.  
  68. --\\
  69. -->> Functions;
  70. --//
  71.  
  72. function Swait(Numbers)
  73.     if (Numbers == 0 or Numbers == nil) then
  74.         Heartbeat.Event:Wait()
  75.     else
  76.         for Index = 0, Numbers do
  77.             Heartbeat.Event:Wait()
  78.         end
  79.     end
  80. end
  81.  
  82. function HeartbeatWait()
  83.     return RunService.Heartbeat:Wait()
  84. end
  85.  
  86. function CLerp(Start, End, TimeToNewCFrame)
  87.     return Start:Lerp(End, TimeToNewCFrame)
  88. end
  89.  
  90. function CreateWeld(Parent, Part0, Part1, C0, C1)
  91.     local Weld = Instance.new('Weld')
  92.     Weld.Parent = Parent
  93.     Weld.Part0 = Part0
  94.     Weld.Part1 = Part1
  95.     Weld.C0 = C0 or NewCFrame(0, 0, 0) * NewAngles(0, 0, 0)
  96.     Weld.C1 = C1 or NewCFrame(0, 0, 0) * NewAngles(0, 0, 0)
  97.     return Weld
  98. end
  99.  
  100. --\\
  101. -->> Animate;
  102. --//
  103.  
  104. Animpose = 'Standing'
  105. Walk = 0
  106. Walked = false
  107. Change = 1
  108. Sine = 0
  109.  
  110. RW = Torso:FindFirstChild("Weld Right Shoulder") or Instance.new("Weld",Torso)
  111. LW = Torso:FindFirstChild("Weld Left Shoulder") or Instance.new("Weld",Torso)
  112. RH = Torso:FindFirstChild("Weld Right Hip") or Instance.new("Weld",Torso)
  113. LH = Torso:FindFirstChild("Weld Left Hip") or Instance.new("Weld",Torso)
  114. HW = Torso:FindFirstChild("Weld Neck") or Instance.new("Weld",Torso)
  115.  
  116. pcall(function() Character.Neck:Destroy() end)
  117.  
  118. RW.Name = "Weld Right Shoulder"
  119. RW.Part0 = Torso
  120. RW.Part1 = RightArm
  121. RW.C0 = NewCFrame(1.5, 0.5, 0)
  122. RW.C1 = NewCFrame(0, 0.5, 0)
  123.  
  124. LW.Name = "Weld Left Shoulder"
  125. LW.Part0 = Torso
  126. LW.Part1 = LeftArm
  127. LW.C0 = NewCFrame(-1.5, 0.5, 0)
  128. LW.C1 = NewCFrame(0, 0.5, 0)
  129.  
  130. RH.Name = "Weld Right Hip"
  131. RH.Part0 = Torso
  132. RH.Part1 = RightLeg
  133. RH.C0 = NewCFrame(0.5, -2, 0)
  134. RH.C1 = NewCFrame(0, 0, 0)
  135.  
  136. LH.Name = "Weld Left Hip"
  137. LH.Part0 = Torso
  138. LH.Part1 = LeftLeg
  139. LH.C0 = NewCFrame(-0.5, -2, 0)
  140. LH.C1 = NewCFrame(0, 0, 0)
  141.  
  142. HW.Name = "Weld Neck"
  143. HW.Part0 = Torso
  144. HW.Part1 = Head
  145. HW.C0 = NewCFrame(0, 1.5, 0)
  146. HW.C1 = NewCFrame(0, 0, 0)
  147.  
  148. Humanoid.Running:Connect(function(Speed)
  149.     Walk = Speed
  150.     Walked = true
  151. end)
  152.  
  153. Wrap(function()
  154.     while true do
  155.         Swait()
  156.         Sine = Sine + Change
  157.         Walk = Walked and Walk or 0 -- or this method : if not (Walked and Walk) then Walk = 0 end
  158.         local Jump = HumanoidRootPart.Velocity.Y
  159.         local HitFloor = (Humanoid.FloorMaterial ~= Enum.Material.Air and true)
  160.         HitFloor = HitFloor or nil
  161.         if Walk >= 20 and HitFloor ~= nil then
  162.             Animpose = "Running"
  163.             Change = Walk * 0.2
  164.             RootJoint.C0 = CLerp(RootJoint.C0, RootCFrame * NewCFrame(0, 0, 0-0.1*NewCos(Sine/15)) * NewAngles(NewRad(20-2.5*NewCos(Sine/30)), NewRad(0), NewRad(5*NewCos(Sine/30))), 0.3)
  165.             HW.C0 = CLerp(HW.C0, NeckCFrame * NewAngles(NewRad(-2.5), NewRad(5*NewCos(Sine/30)), NewRad(0)), 0.2)
  166.             RW.C0 = CLerp(RW.C0, NewCFrame(1.5, 0.5, 0) * NewAngles(NewRad(-60*NewCos(Sine/30)), NewRad(0), NewRad(10+2.5*NewCos(Sine/30))), 0.25)
  167.             LW.C0 = CLerp(LW.C0, NewCFrame(-1.5, 0.5, 0) * NewAngles(NewRad(60*NewCos(Sine/30)), NewRad(0), NewRad(-10-2.5*NewCos(Sine/30))), 0.25)
  168.             RH.C0 = CLerp(RH.C0, NewCFrame(0.5, -1.9-0.1*NewCos(Sine/30), -0.05-0.85*NewCos(Sine/30)) * NewAngles(NewRad(20*NewCos(Sine/30)-RightLeg.RotVelocity.Y/25+-NewSin(Sine/30)/2.5), NewRad(0), NewRad(0)) * NewAngles(NewRad(0+30*NewCos(Sine/30)), NewRad(0), NewRad(0)), 0.25)
  169.             LH.C0 = CLerp(LH.C0, NewCFrame(-0.5, -1.9-0.1*NewCos(Sine/30), 0.05+0.85*NewCos(Sine/30)) * NewAngles(NewRad(-20*NewCos(Sine/30)+LeftLeg.RotVelocity.Y/25-NewSin(Sine/30)/2.5), NewRad(0), NewRad(0)) * NewAngles(NewRad(0+-30*NewCos(Sine/30)), NewRad(0), NewRad(0)), 0.25)
  170.         end
  171.         if Jump > 0  and HitFloor == nil then
  172.             Animpose = "Jumping"
  173.             Change = 2
  174.             RootJoint.C0 = CLerp(RootJoint.C0, RootCFrame * NewCFrame(0, 0, 0)  * NewAngles(NewRad(0), NewRad(0), NewRad(0)), 0.25)
  175.             HW.C0 = CLerp(HW.C0, NeckCFrame * NewCFrame(0, 0, -0.05) * NewAngles(NewRad(10+2*NewSin(Sine/30)), NewRad(0), NewRad(0)), 0.5)
  176.             RW.C0 = CLerp(RW.C0, NewCFrame(1.5, 0.5, 0) * NewAngles(NewRad(-20), NewRad(0), NewRad(30)), 0.25)
  177.             LW.C0 = CLerp(LW.C0, NewCFrame(-1.5, 0.5, 0) * NewAngles(NewRad(-20), NewRad(0), NewRad(-30)), 0.25)
  178.             RH.C0 = CLerp(RH.C0, NewCFrame(0.55, -1.95-0.075*NewCos(Sine/15), -0.05) * NewAngles(NewRad(0), NewRad(-10), NewRad(2.5)), 0.25)
  179.             LH.C0 = CLerp(LH.C0, NewCFrame(-0.55, -1.95-0.075*NewCos(Sine/15), -0.05) * NewAngles(NewRad(0), NewRad(9), NewRad(-2.5)), 0.25)
  180.         end
  181.         if Walk == 0 and HitFloor ~= nil then
  182.             Animpose = "Standing"
  183.             Change = 1
  184.             RootJoint.C0 = CLerp(RootJoint.C0, RootCFrame * NewCFrame(0, 0, -0.1 + 0.1*NewCos(Sine/15)) * NewAngles(NewRad(0), NewRad(0), NewRad(0)), 0.05)
  185.             HW.C0 = CLerp(HW.C0, NeckCFrame * NewCFrame(0, 0, -0.1-0.05*NewSin(Sine/15)) * NewAngles(NewRad(-10-4.5*NewSin(Sine/15)), NewRad(0), NewRad(0)), 0.05)
  186.             RW.C0 = CLerp(RW.C0, NewCFrame(1.425, 0.625+0.1*NewCos(Sine/15), 0) * NewAngles(NewRad(0), NewRad(0), NewRad(15+3*NewCos(Sine/15))), 0.05)
  187.             LW.C0 = CLerp(LW.C0, NewCFrame(-1.425, 0.625+0.1*NewCos(Sine/15), 0) * NewAngles(NewRad(0), NewRad(0), NewRad(-12-3*NewCos(Sine/15))), 0.05)
  188.             RH.C0 = CLerp(RH.C0, NewCFrame(0.55, -1.95-0.075*NewCos(Sine/15), -0.025) * NewAngles(NewRad(0), NewRad(-10), NewRad(2.5)), 0.05)
  189.             LH.C0 = CLerp(LH.C0, NewCFrame(-0.55, -1.95-0.075*NewCos(Sine/15), -0.025)  * NewAngles(NewRad(0), NewRad(9), NewRad(-2.5)), 0.05)
  190.         end
  191.         if Jump < 0 and HitFloor == nil then
  192.             Animpose = "Freefalling"
  193.             Change = 2
  194.             RootJoint.C0 = CLerp(RootJoint.C0, RootCFrame * NewCFrame(0, 0, 0) * NewAngles(NewRad(0), NewRad(0), NewRad(0)), 0.25)
  195.             HW.C0 = CLerp(HW.C0, NeckCFrame * NewCFrame(0, 0, -0.05) * NewAngles(NewRad(-10), NewRad(0), NewRad(0)), 0.1)
  196.             RW.C0 = CLerp(RW.C0, NewCFrame(1.5, 0.5, 0) * NewAngles(NewRad(-30), NewRad(0), NewRad(50)), 0.25)
  197.             LW.C0 = CLerp(LW.C0, NewCFrame(-1.5, 0.5, 0) * NewAngles(NewRad(-30), NewRad(0), NewRad(-50)), 0.25)
  198.             RH.C0 = CLerp(RH.C0, NewCFrame(0.55, -1.95-0.075*NewCos(Sine/(15)), -0.05) * NewAngles(NewRad(0), NewRad(-10), NewRad(2.5)), 0.25)
  199.             LH.C0 = CLerp(LH.C0, NewCFrame(-0.55, -1.95-0.075*NewCos(Sine/(15)), -0.05) * NewAngles(NewRad(0), NewRad(9), NewRad(-2.5)), 0.25)
  200.         end
  201.         if Walk > 0 and Walk < 20 and HitFloor ~= nil then
  202.             Animpose = "Walking"
  203.             Change = Walk * 0.15
  204.             RootJoint.C0 = CLerp(RootJoint.C0, RootCFrame * NewCFrame(0, 0, -0.1-0.1*NewCos(Sine/15)) * NewAngles(NewRad(0), NewRad(0), NewRad(0-2.5*NewCos(Sine/30))), 0.15)
  205.             HW.C0 = CLerp(HW.C0, NeckCFrame * NewCFrame(0, 0, -0.05) * NewAngles(NewRad(-5), NewRad(0), NewRad(-1*NewCos(Sine/30))), 0.05)
  206.             RW.C0 = CLerp(RW.C0, NewCFrame(1.5, 0.5, 0) * NewAngles(NewRad(0+40*NewCos(Sine/30)), NewRad(0), NewRad(5+2.5*NewCos(Sine/30))), 0.15)
  207.             LW.C0 = CLerp(LW.C0, NewCFrame(-1.5, 0.5, 0) * NewAngles(NewRad(0-40*NewCos(Sine/30)), NewRad(0), NewRad(-5-2.5*NewCos(Sine/30))), 0.15)
  208.             RH.C0 = CLerp(RH.C0, NewCFrame(0.5, -1.925+0.15*NewCos(Sine/30)/2, 0.25+0.75*NewCos(Sine/30)) * NewAngles(NewRad(-15-35*NewCos(Sine/30)), NewRad(0), NewRad(0)), 0.15)
  209.             LH.C0 = CLerp(LH.C0, NewCFrame(-0.5, -1.925+-0.15*NewCos(Sine/30)/2,  0.25+-0.75*NewCos(Sine/30)) * NewAngles(NewRad(-15+35*NewCos(Sine/30)), NewRad(0), NewRad(0)), 0.15)
  210.         end
  211.     end
  212. end)()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement