-- Pobranie usługi RunService local runService = game:GetService("RunService") -- Pobranie folderu Players z przestrzeni roboczej local playersFolder = workspace:WaitForChild("Players") -- Ustawienie ilości zwierząt w rzędzie local petsPerRow = 5 -- Ustawienie wartości przesunięć w osi X, Z i odsunięcia od gracza local offsetX = 4 local offsetZ = 5 local offsetPlayer = 6 -- Funkcja, która ustawia pozycje zwierząt względem gracza local function positionPets(character, playerFolder, deltaTime, sin, cos) -- Liczba zwierząt w folderze gracza local petCount = #playerFolder:GetChildren() -- Liczba rzędów potrzebna do wyświetlenia wszystkich zwierząt local rows = math.ceil(petCount / petsPerRow) -- Pętla, która ustawia pozycję każdego zwierzęcia for i, pet in pairs(playerFolder:GetChildren()) do -- Numer rzędu, w którym znajduje się zwierzę local row = math.floor((i - 1) / petsPerRow) -- Numer kolumny, w której znajduje się zwierzę local col = (i - 1) % petsPerRow -- Pobranie rozmiaru postaci i zwierzęcia local characterSize = character:GetExtentsSize() local petSize = pet:GetExtentsSize() -- Liczba zwierząt w rzędzie local petsInRow = math.min(petCount - row * petsPerRow, petsPerRow) -- Obliczenie pozycji zwierzęcia w osi X, Y i Z local x = (col - petsInRow/2 + 0.5) * offsetX local y = petSize.Y/2 - characterSize.Y/2 local z = (row * offsetZ) + offsetPlayer -- Sprawdzenie czy postać porusza się if character.Humanoid.MoveDirection.Magnitude > 0 then -- Jeżeli zwierzę zawiera w sobie element o nazwie Walks to będzie chodziło if pet:FindFirstChild("Walks") then pet:SetPrimaryPartCFrame(pet.PrimaryPart.CFrame:Lerp( character.PrimaryPart.CFrame * CFrame.new(x, y + sin, z) * CFrame.fromEulerAnglesXYZ(0,0,cos),0.1)) -- Jeżeli zwierzę zawiera w sobie element o nazwie Flying to będzie latało elseif pet:FindFirstChild("Flying") then pet:SetPrimaryPartCFrame(pet.PrimaryPart.CFrame:Lerp( character.PrimaryPart.CFrame * CFrame.new(x, y / 2 +math.sin(time()*3)+1, z), 0.1)) end else -- Jeżeli zwierzę zawiera w sobie element o nazwie Walks to będzie stać w miejscu jeżeli postać się nie rusza if pet:FindFirstChild("Walks") then pet:SetPrimaryPartCFrame(pet.PrimaryPart.CFrame:Lerp( character.PrimaryPart.CFrame * CFrame.new(x, y, z) ,0.1)) -- Jeżeli zwierzę zawiera w sobie element o nazwie Flying to będzie lewitować w miejscu jeżeli postać się nie rusza elseif pet:FindFirstChild("Flying") then pet:SetPrimaryPartCFrame(pet.PrimaryPart.CFrame:Lerp( character.PrimaryPart.CFrame * CFrame.new(x, y / 2 + math.sin(time()*3)+1, z) , 0.1)) end end end end -- Przypisanie funkcji do zdarzenia RenderStepped w RunService runService.RenderStepped:Connect(function(deltaTime) local sin = (math.sin(15 * time() + 1.6)/.5)+1 local cos = math.cos(7 * time() + 1) / 4 -- Pętla po folderach graczy w folderze Players for i, playerFolder in pairs(playersFolder:GetChildren()) do -- Pobranie gracza o takim samym nicku jak nazwa folderu local player = game.Players:FindFirstChild(playerFolder.Name) if player ~= nil then -- pobranie modelu gracza lub ustawienie wartości nil local character = player.Character or nil -- sprawdzenie czy model gracza istnieje if character ~= nil then -- Wywołanie funkcji positionPets, która ustawia pozycję zwierząt względem gracza positionPets(character, playerFolder, deltaTime, sin, cos) end end end end)