Advertisement
SxScripting

Grip and Carry [Server Script]

Dec 15th, 2022
6,454
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.38 KB | None | 0 0
  1. local RS = game:GetService("ReplicatedStorage")
  2. local CS = game:GetService("CollectionService")
  3. local RunService = game:GetService("RunService")
  4.  
  5. local Params = OverlapParams.new()
  6. Params.FilterType = Enum.RaycastFilterType.Blacklist
  7.  
  8. local Toggle = {}
  9. local Health = {}
  10. local Trash = {}
  11. local MainEvent = {}
  12. local IsCarried = {};
  13. local EnemyVar = {}
  14. local EnemyAnim = {};
  15. local Weld = {}
  16. local stopService = {}
  17. local v1 = {};
  18. local v2 = {};
  19.  
  20. local Health_Limit = 6
  21. local WaitKnockUp = 5
  22.  
  23. local function characterAdded(Player)
  24. local Character = Player.Character or Player.CharacterAdded:Wait()
  25. local Humanoid = Character.Humanoid
  26. Humanoid:GetPropertyChangedSignal("Health"):Connect(function()
  27. if stopService[Player] then return end
  28. if CS:HasTag(Character, "Ragdoll") then return end
  29. if Health_Limit >= Humanoid.Health then
  30. Humanoid.Health = Health_Limit
  31. CS:AddTag(Character, "Ragdoll")
  32. end
  33. end)
  34.  
  35. local Event = nil
  36. Humanoid.HealthChanged:Connect(function()
  37. if stopService[Player] then return end
  38. if not CS:HasTag(Character, "Ragdoll") then return end
  39. if Event then return end
  40. local Start = tick()
  41. Event = RunService.Heartbeat:Connect(function()
  42. if not CS:HasTag(Character, "Ragdoll") then
  43. Event:Disconnect()
  44. Event = nil
  45. end
  46. if tick() - Start >= WaitKnockUp then
  47. print(v1[Player], v2[Player])
  48. if v1[Player.Character] then
  49. v1[Player.Character]:Destroy()
  50. v1[Player.Character] = nil
  51. end
  52.  
  53. if v2[Player.Character] then
  54. v2[Player.Character]:Destroy()
  55. v2[Player.Character] = nil
  56. end
  57. --Player:WaitForChild("TrueNum").Value = true
  58. Character.Humanoid.PlatformStand = false;
  59. CS:RemoveTag(Character, "Ragdoll")
  60. Event:Disconnect()
  61. Event = nil
  62. end
  63. end)
  64. end)
  65. end
  66.  
  67. game.Players.PlayerAdded:Connect(function(Player)
  68. local IsGripping = Instance.new("BoolValue", Player)
  69. IsGripping.Name = "IsGripping";
  70. IsGripping.Value = false;
  71.  
  72. local IsCarried = Instance.new("BoolValue", Player)
  73. IsCarried.Name = "IsCarried"
  74. IsCarried.Value = false;
  75.  
  76. --local TrueNum = Instance.new("BoolValue", Player);
  77. --TrueNum.Name = "TrueNum";
  78. --TrueNum.Value = false;
  79.  
  80. characterAdded(Player)
  81. Player.CharacterAdded:Connect(function()
  82. characterAdded(Player)
  83. end)
  84. end)
  85.  
  86. local function Movement(Humanoid, WalkSpeed, JumpPower) -- Adjust Movement
  87. Humanoid.WalkSpeed = WalkSpeed;
  88. Humanoid.JumpPower = JumpPower;
  89. end
  90.  
  91. local function isTrash(Character)
  92. for i,v in pairs(Trash) do
  93. if v == Character then
  94. return true
  95. end
  96. end
  97. return false
  98. end
  99.  
  100. -- [ Checks For Any Player Within a certain radius and check if they are not ragdolled ]
  101.  
  102. local function findEnemyWithInRadius(Radius: number, Player: Player)
  103. local Character = Player.Character or Player.CharacterAdded:Wait();
  104. local HRP = Character.HumanoidRootPart
  105. local ENECHAR = nil
  106. local ENEPLR = nil
  107.  
  108. Params.FilterDescendantsInstances = {Character} -- Ignore whatever is in table
  109.  
  110. for Index, Value in pairs(workspace:GetPartBoundsInRadius(HRP.Position, Radius, Params)) do
  111. local Humanoid = Value.Parent:FindFirstChild("Humanoid")
  112. if Humanoid and Humanoid.Health > 0 and not isTrash(Value.Parent) then
  113. local EnemyCharacter = Value.Parent -- Enemy Character
  114. ENEPLR = game.Players:GetPlayerFromCharacter(EnemyCharacter);
  115. local ENECHAR = EnemyCharacter
  116. if CS:HasTag(EnemyCharacter, "Ragdoll") then
  117. return true, ENEPLR, EnemyCharacter; -- they are ragdolled return, true, the player and char
  118. end
  119. end
  120. end
  121. return false, ENEPLR, ENECHAR
  122. end
  123.  
  124. function massChecker(Player:Player, EnemyCharacter:Model)
  125. local massv1 = Instance.new("BoolValue")
  126. for i,v in pairs(Player.Character:GetChildren()) do
  127. if not v:IsA("Part") then continue end
  128. massv1.Value = v.Massless
  129. end
  130.  
  131. massv1.Changed:Connect(function()
  132. if Weld[Player] then
  133. massv1.Value = true
  134. else
  135. massv1.Value = false
  136. end
  137. end)
  138. end
  139.  
  140. function connectPlayers(EnemyCharacter, Player) -- Welds them, positions them, and plays animation
  141. Trash[Player] = EnemyCharacter
  142. local Character = Player.Character
  143. if v1[EnemyCharacter] then
  144. v1[EnemyCharacter]:Destroy()
  145. v1[EnemyCharacter] = nil
  146. end
  147.  
  148. if v2[EnemyCharacter] then
  149. v2[EnemyCharacter]:Destroy()
  150. v2[EnemyCharacter] = nil
  151. end
  152.  
  153. local weldCon = Instance.new("WeldConstraint", Character.HumanoidRootPart);
  154. weldCon.Name = "weldConTemp"
  155.  
  156. local EHRP = EnemyCharacter.HumanoidRootPart
  157. local HRP = Character.HumanoidRootPart
  158.  
  159. EHRP.CFrame = HRP.CFrame * CFrame.new(-1.5,1.2,0) * CFrame.Angles(math.rad(270),0,0) -- (-1.5,.4,-1.5)
  160. weldCon.Part0 = HRP;
  161. weldCon.Part1 = EHRP
  162.  
  163. for i,v in pairs(EnemyCharacter:GetDescendants()) do
  164. if not v:IsA("BasePart") then continue end
  165. v.Massless = true
  166. end
  167.  
  168. Weld[Player] = weldCon
  169. CS:RemoveTag(EnemyCharacter, "Ragdoll")
  170.  
  171. EnemyCharacter.Humanoid.PlatformStand = true;
  172. end
  173.  
  174. function disconnectPlayer(EnemyCharacter, Player)
  175. Trash[Player] = nil
  176. Weld[Player]:Destroy()
  177. Weld[Player] = nil
  178.  
  179. for i,v in pairs(EnemyCharacter:GetDescendants()) do
  180. if not v:IsA("BasePart") then continue end
  181. v.Massless = false
  182. end
  183.  
  184. local floorPart = Instance.new("Part",workspace)
  185. floorPart.Name = "floorPart"
  186. floorPart.Anchored = true;
  187. floorPart.CanCollide = false;
  188. floorPart.Transparency = 1;
  189.  
  190. EnemyCharacter.HumanoidRootPart.CFrame = Player.Character.HumanoidRootPart.CFrame * CFrame.new(0,0,-3)
  191. floorPart.CFrame = EnemyCharacter.HumanoidRootPart.CFrame * CFrame.new(0,-2.3,0);
  192.  
  193. local weldToFloor = Instance.new("Weld",EnemyCharacter.HumanoidRootPart)
  194. weldToFloor.Name = "weldToFloor"
  195. weldToFloor.Part0 = EnemyCharacter.HumanoidRootPart
  196. weldToFloor.Part1 = floorPart
  197.  
  198. v1[EnemyCharacter] = floorPart;
  199. v2[EnemyCharacter] = weldToFloor
  200.  
  201. CS:AddTag(EnemyCharacter, "Ragdoll")
  202. EnemyCharacter.Humanoid.PlatformStand = false;
  203. end
  204.  
  205. game.Players.PlayerAdded:Connect(function(Player)
  206. Player.CharacterAdded:Connect(function()
  207. stopService[Player] = false;
  208.  
  209. if CS:HasTag(Player.Character,"Ragdoll") then
  210. CS:RemoveTag(Player.Character,"Ragdoll")
  211. end
  212. end)
  213. end)
  214.  
  215. RS.KillEvent.OnServerEvent:Connect(function(Player)
  216. print(IsCarried[Player])
  217. if IsCarried[Player] then return end
  218. local Start = tick();
  219. local IsGrippin = Player:WaitForChild("IsGripping");
  220.  
  221. local GripDuration = 2; -- Gripuration
  222.  
  223. local InArea, EnemyPlayer, EnemyCharacter = findEnemyWithInRadius(7, Player)
  224. if InArea and not Toggle[Player] then
  225. local gripAni = Player.Character.Humanoid:LoadAnimation(game.ReplicatedStorage.Animation.GripAnimation);
  226. gripAni:Play()
  227. Player.Character.HumanoidRootPart.CFrame = Player.Character.HumanoidRootPart.CFrame * CFrame.Angles(0,math.pi,0)
  228. Toggle[Player] = true --Now gripping
  229. IsGrippin.Value = true
  230. Trash[Player] = EnemyCharacter
  231. Movement(Player.Character:WaitForChild("Humanoid"),0,0)
  232. print("Grip")
  233. MainEvent[Player] = RunService.Heartbeat:Connect(function()
  234. if (tick() - Start >= GripDuration) then-- wait until tick() - start is greater than gripduration
  235. print("Ungrip")
  236. stopService[Player] = true
  237. EnemyCharacter.Humanoid.Health = 0; -- When the grip is done player dies
  238. Toggle[Player] = nil -- resets toggle
  239. IsGrippin.Value = false; -- resets to false
  240. MainEvent[Player]:Disconnect();
  241. MainEvent[Player] = nil
  242. Trash[Player] = nil
  243. Movement(Player.Character:WaitForChild("Humanoid"),16,50)
  244. end
  245.  
  246. end)
  247. return
  248. end
  249.  
  250. if Toggle[Player] then
  251. print("Canceled Grip")
  252. Movement(Player.Character:WaitForChild("Humanoid"),16,50)
  253. if (MainEvent[Player]) then
  254. MainEvent[Player]:Disconnect();
  255. MainEvent[Player] = nil
  256. end
  257. Trash[Player] = nil
  258. Toggle[Player] = nil
  259. IsGrippin.Value = false
  260. end
  261.  
  262. end)
  263.  
  264. RS.CarryEvent.OnServerEvent:Connect(function(Player)
  265. if Toggle[Player] then return end
  266. if IsCarried[Player] then
  267. disconnectPlayer(EnemyVar[Player], Player)
  268. massChecker(Player,EnemyVar[Player])
  269. IsCarried[Player] = nil
  270. EnemyAnim[Player]:Stop()
  271. print("Remove Massless")
  272. return
  273. end
  274. local InArea, EnemyPlayer, EnemyCharacter = findEnemyWithInRadius(7, Player)
  275. if not InArea then return end
  276. EnemyVar[Player] = EnemyCharacter
  277. EnemyAnim[Player] = EnemyVar[Player]:WaitForChild("Humanoid"):LoadAnimation(RS.Animation.CarryAnimation)
  278.  
  279. connectPlayers(EnemyCharacter, Player)
  280. massChecker(Player,EnemyCharacter)
  281. print("Added Massless")
  282. IsCarried[Player] = true
  283. EnemyAnim[Player]:Play()
  284. end)
  285.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement