В предыдущем посте было описание моего первого мультиплейерного тренажёра. Так вот, нечаянно (ага, конечно) выяснилось, что нужно восстанавливать пространства не только для повтора упражнения, но и когда игрок выходит.
И вот тут на помощь пришло срабатывания события PlayerRemoving. По сути своей это всего лишь полная противоположность PlayerAdded. Оно срабатывает когда игрок покидает сервер. Про оба события описано на одной странице:
https://developer.roblox.com/en-us/api-reference/event/Players/PlayerRemoving/index.html
Т.е. нам остаётся только выяснить куда привязан был игрок, удалить его место и поместить туда клон базового пространства. Скрипт этого действа ниже:
game.Players.PlayerRemoving:Connect(function(player) print("A player has left: " .. player.Name) local original = game.ReplicatedStorage.Main -- Сохраняем в переменную оригинальный объект local copy = original:Clone() -- создаём копию объекта -- ищем место где вышел и копируем туда пустышку local children = workspace:GetChildren() -- ищем детей Workspace for i, child in ipairs(children) do -- перебираем if child.ClassName == "Model" then -- ищем что это модель if child:FindFirstChild("Rocket") ~= nil then -- и это модель пространства игрока (содержит внутри ракету) if child.Owner.Value == player.Name then -- занято нашим игроком -- поместить на его место клон local par=child.Parent -- сохраняем привязку local pos=child:GetPrimaryPartCFrame() -- сохраняем положение local nam=child.Name -- сохраняем название зоны copy.Parent = par -- указываем значение родителя у копии copy.Name = nam -- сохраняем имя зоны copy:SetPrimaryPartCFrame(pos)-- восстанавливаем положение -- уничтожаем найденного child:Destroy() end end end end end)
Если же игрок не был никуда привязан, то скрипт просто завершит свою работу.
Был вопрос — как выглядит игра в разработке? Скриншот пространства приложен ниже:
Ну и как обычно, опробовать в действии можно по ссылке ниже:
https://www.roblox.com/games/4789977549/Math-Rocket