#roblox
#roblox
Вопрос:
У меня есть скрипт, работающий для игры на основе раундов. Игра начинается с лобби и таймера перерыва на 30 секунд. Затем телепортирует игроков на выбранную карту в пределах определенного мной региона. Во время раунда идет обратный отсчет и раунд заканчивается либо через 180 секунд, либо если остался 1 игрок. Игроки, которые были убиты (или остались в конце 180 секунд), телепортируются обратно в лобби, и цикл продолжается. Я использовал приведенный ниже скрипт, и он работает хорошо. Я хотел бы использовать таблицу / массив из этого скрипта для идентификации игроков, которые находятся в регионе, и отключить / сделать невидимым графический интерфейс для просмотра, который я хотел бы сделать видимым только для игроков в лобби (т. Е. НЕ в том регионе, который я определил, который охватывает различные круглые карты). Но мне трудно понять, как изменить этот скрипт. Любая помощь будет высоко оценена! Спасибо. КОД ниже:
»’
while true do -- repeats forever and calls the functions
wait(2)
intermissionTimer()
chooseMap()
loadMap()
wait(2)
teleportPlayers()
wait(2)
local time = roundLength
while wait(1) do
partsInRegion = workspace:FindPartsInRegion3(region, game.ServerStorage.Maps,3000) -- this returns a table
playersFound = {} -- table players found
for i, part in pairs (partsInRegion) do
if part.Parent:FindFirstChild("Humanoid") ~= nil then
playersFound[part.Parent.Name] = part.Parent -- add players character to table
winner = playersFound[part.Parent.Name].Name
print (winner)
print (i, part) -- 0
end
end
function Length(playersFound)
local counter = 0
for _, v in pairs(playersFound) do
counter =counter 1
end
return counter
end
if time == 0 then
Status.Value = "Round over!"
workspace.SoundLibrary.Nowinner:Play()
break
elseif Length(playersFound)== 1 then
workspace.SoundLibrary.Winner:Play()
Status.Value = winner.. " wins!"
wait(5)
break
else
Status.Value = time .." seconds left"
time = time - 1
end
end
wait (2)
teleportBack()
deleteMap()
конец
»’
Ответ №1:
В конце вашего цикла for у вас есть таблица, полная игроков, которые все еще в игре. Вы можете получить список всех игроков в игре, используя сервис игроков. Каждый объект игрока хранится там как дочерний, и вы можете сравнить имена ваших выживших игроков с именами всех игроков, чтобы найти, кто мертв.
local partsInRegion = workspace:FindPartsInRegion3(region, game.ServerStorage.Maps,3000)
local playersFound = {}
-- find all the players still alive
for k, part in pairs(partsInRegion) do
if part.Parent:FindFirstChild("Humanoid") ~= nil then
playersFound[part.Parent.Name] = part.Parent
end
end
-- figure out who is dead
local allPlayers = game.Players:GetChildren()
for i, player in ipairs(allPlayers) do
-- if they are not still in the game, they must be dead
if playersFound[player.Name] == nil then
-- get the Spectate gui, replace this line with your actual gui
local gui = ReplicatedStorage.SpectateGui:Clone()
-- give the dead player the spectate gui, if they don't already have it
if player.PlayerGui[gui.Name] == nil then
gui.Parent = player.PlayerGui
end
end
end