-- Tworzy nową instancję klasy Random local rnd = Random.new() -- Określa minimalny i maksymalny czas pomiędzy dropami local minTimePerDrop = 2 local maxTimePerDrop = 6 -- Określa minimalną i maksymalną prędkość upadku skrzynek local minFallVelocity = -5 local maxFallVelocity = -15 -- Pobiera wszystkie narzędzia z magazynu zreplikowanych gry local tools = game.ReplicatedStorage.Tools:GetChildren() -- Nieskończona pętla generująca dropy while true do -- Czeka losowy czas między dropami task.wait(rnd:NextNumber(minTimePerDrop, maxTimePerDrop)) -- Klonuje obiekt "Drop" local drop = script:WaitForChild("Drop"):Clone() -- Ustala losową pozycję dla dropu local randomPos = Vector3.new(rnd:NextNumber(-512, 512), 200, rnd:NextNumber(-512, 512)) -- Tworzy nowy układ współrzędnych (CFrame) dla dropu local newCF = CFrame.new(randomPos) * CFrame.Angles(0, rnd:NextNumber(0, 2*math.pi), 0) -- Przemieszcza drop do nowego układu współrzędnych drop:PivotTo(newCF) -- Tworzy nowe załączniki (attachments) dla dropu local atch0 = Instance.new("Attachment") atch0.Name = "Attachment0" atch0.Parent = drop.Crate -- Ustala prędkość liniową dropu local lv = Instance.new("LinearVelocity") lv.MaxForce = math.huge lv.RelativeTo = Enum.ActuatorRelativeTo.World lv.VelocityConstraintMode = Enum.VelocityConstraintMode.Vector lv.VectorVelocity = Vector3.new(rnd:NextNumber(-5, 5), rnd:NextNumber(maxFallVelocity, minFallVelocity), rnd:NextNumber(-5, 5)) lv.Attachment0 = atch0 lv.Parent = drop.Crate -- Ustala prędkość kątową dropu local av = Instance.new("AngularVelocity") av.MaxTorque = math.huge av.RelativeTo = Enum.ActuatorRelativeTo.Attachment0 av.AngularVelocity = Vector3.new(0, rnd:NextNumber(-1, 1), 0) av.Attachment0 = atch0 av.Parent = drop.Crate -- Po zetknięciu się dropu z graczem, drop jest niszczony, a gracz otrzymuje losowe narzędzie drop.Crate.Touched:Connect(function(hit) local plr = game.Players:GetPlayerFromCharacter(hit.Parent) if plr and hit.Parent.Humanoid.Health > 0 then drop:Destroy() -- # oznacza długość (ilość elementów) local random = math.random(1, #tools) local newTool = tools[random]:Clone() newTool.Parent = plr.Backpack end end) -- Umieszcza drop w przestrzeni roboczej (workspace) drop.Parent = workspace -- Po zakończeniu upadku, niszczy drop i wszystko, co z nim związane task.spawn(function() repeat task.wait(1) until not drop or drop.Parent ~= workspace or drop.Crate.AssemblyLinearVelocity.Y > minFallVelocity if drop and drop.Parent == workspace then lv:Destroy() av:Destroy() atch0:Destroy() drop.Crate.Parachute:Destroy() drop.Parachute.CanCollide = false game:GetService("Debris"):AddItem(drop.Parachute, 5) end end) end