View difference between Paste ID: CxLv9nur and mPJNuTay
SHOW: | | - or go back to the newest paste.
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
            local position = (pet:FindFirstChild("Attack").Value.CFrame * CFrame.new(x, 0, z)).p
41
            local lookAt = pet:FindFirstChild("Attack").Value.Position
42
            if pet:FindFirstChild("Walks") then
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
                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))
46
            end
47
        else
48
            if character.Humanoid.MoveDirection.Magnitude > 0 then
49
                if pet:FindFirstChild("Walks") then
50
                    pet:SetPrimaryPartCFrame(pet.PrimaryPart.CFrame:Lerp(
51
                        character.PrimaryPart.CFrame * CFrame.new(x, y + sin, z) * CFrame.fromEulerAnglesXYZ(0,0,cos),0.1))
52
                elseif pet:FindFirstChild("Flying") then
53
                    pet:SetPrimaryPartCFrame(pet.PrimaryPart.CFrame:Lerp(
54
                        character.PrimaryPart.CFrame * CFrame.new(x, y / 2 +math.sin(time()*3)+1, z), 0.1))
55
                end
56
            else
57
                if pet:FindFirstChild("Walks") then
58
                    pet:SetPrimaryPartCFrame(pet.PrimaryPart.CFrame:Lerp(
59
                        character.PrimaryPart.CFrame * CFrame.new(x, y, z) ,0.1))
60
                elseif pet:FindFirstChild("Flying") then
61
                    pet:SetPrimaryPartCFrame(pet.PrimaryPart.CFrame:Lerp(
62
                        character.PrimaryPart.CFrame * CFrame.new(x, y / 2 + math.sin(time()*3)+1, z) , 0.1))
63
                end
64
            end
65
        end
66
    end
67
end
68
69
70
71
72
runService.RenderStepped:Connect(function(deltaTime)
73
    local sin = (math.sin(15 * time() + 1.6)/.5)+1
74
    local cos = math.cos(7 * time() + 1) / 4
75
76
77
78
79
    for i, playerFolder in pairs(playersFolder:GetChildren()) do
80
        local player = game.Players:FindFirstChild(playerFolder.Name)
81
        if player ~= nil then
82
            local character = player.Character or nil
83
            if character ~= nil then
84
                positionPets(character, playerFolder, deltaTime, sin, cos)
85
            end
86
        end
87
    end
88
end)
89