coding_giants

lesson 5 PetsClient

Apr 6th, 2023
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. local runService = game:GetService("RunService")
  2.  
  3.  
  4. local playersFolder = workspace:WaitForChild("Players")
  5.  
  6.  
  7. local petsPerRow = 5
  8.  
  9.  
  10. local offsetX = 4
  11. local offsetZ = 5
  12. local offsetPlayer = 6
  13.  
  14.  
  15.  
  16.  
  17. local function positionPets(character, playerFolder, deltaTime, sin, cos)
  18. local petCount = #playerFolder:GetChildren()
  19. local rows = math.ceil(petCount / petsPerRow)
  20.  
  21.  
  22.  
  23.  
  24. for i, pet in pairs(playerFolder:GetChildren()) do
  25. local row = math.floor( (i - 1) / petsPerRow)
  26. local col = (i - 1) % petsPerRow
  27.  
  28.  
  29. local characterSize = character:GetExtentsSize()
  30. local petSize = pet:GetExtentsSize()
  31. local petsInRow = math.min(petCount - row * petsPerRow, petsPerRow)
  32.  
  33.  
  34. local x = (col - petsInRow/2 + 0.5) * offsetX
  35. local y = petSize.Y/2 - characterSize.Y/2
  36. local z = (row * offsetZ) + offsetPlayer
  37.  
  38.  
  39. if pet:FindFirstChild("Attack").Value ~= nil then
  40. if pet:FindFirstChild("Walks") then
  41. local position = (pet:FindFirstChild("Attack").Value.CFrame * CFrame.new(x, 0, z)).p
  42. local lookAt = pet:FindFirstChild("Attack").Value.Position
  43. pet:SetPrimaryPartCFrame(pet.PrimaryPart.CFrame:Lerp(CFrame.new(position, lookAt) * CFrame.new(0, 1 + sin, 0) * CFrame.fromEulerAnglesXYZ(0,0,cos),0.1))
  44. else
  45. local position = (pet:FindFirstChild("Attack").Value.PrimaryPart.CFrame * CFrame.new(x, 0, z)).p
  46. local lookAt = pet:FindFirstChild("Attack").Value.PrimaryPart.Position
  47. pet:SetPrimaryPartCFrame(pet.PrimaryPart.CFrame:Lerp(CFrame.new(position, lookAt) * CFrame.new(0, 3 + math.sin(time()*7)/2, 0) * CFrame.fromEulerAnglesXYZ(cos,0,0) ,0.1))
  48. end
  49. else
  50. if character.Humanoid.MoveDirection.Magnitude > 0 then
  51. if pet:FindFirstChild("Walks") then
  52. pet:SetPrimaryPartCFrame(pet.PrimaryPart.CFrame:Lerp(
  53. character.PrimaryPart.CFrame * CFrame.new(x, y + sin, z) * CFrame.fromEulerAnglesXYZ(0,0,cos),0.1))
  54. elseif pet:FindFirstChild("Flying") then
  55. pet:SetPrimaryPartCFrame(pet.PrimaryPart.CFrame:Lerp(
  56. character.PrimaryPart.CFrame * CFrame.new(x, y / 2 +math.sin(time()*3)+1, z), 0.1))
  57. end
  58. else
  59. if pet:FindFirstChild("Walks") then
  60. pet:SetPrimaryPartCFrame(pet.PrimaryPart.CFrame:Lerp(
  61. character.PrimaryPart.CFrame * CFrame.new(x, y, z) ,0.1))
  62. elseif pet:FindFirstChild("Flying") then
  63. pet:SetPrimaryPartCFrame(pet.PrimaryPart.CFrame:Lerp(
  64. character.PrimaryPart.CFrame * CFrame.new(x, y / 2 + math.sin(time()*3)+1, z) , 0.1))
  65. end
  66. end
  67. end
  68. end
  69. end
  70.  
  71.  
  72.  
  73.  
  74. runService.RenderStepped:Connect(function(deltaTime)
  75. local sin = (math.sin(15 * time() + 1.6)/.5)+1
  76. local cos = math.cos(7 * time() + 1) / 4
  77.  
  78.  
  79.  
  80.  
  81. for i, playerFolder in pairs(playersFolder:GetChildren()) do
  82. local player = game.Players:FindFirstChild(playerFolder.Name)
  83. if player ~= nil then
  84. local character = player.Character or nil
  85. if character ~= nil then
  86. positionPets(character, playerFolder, deltaTime, sin, cos)
  87. end
  88. end
  89. end
  90. end)
  91.  
Add Comment
Please, Sign In to add comment