Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Исправите код.Roblox studio

Program RES Ученик (93), на голосовании 4 недели назад
Почему-то это код не хочет выполняться 2 раз и зависает на


local killer = module.ChooseKiller()
game.ReplicatedStorage.Status.Value = "Killer is ".. killer.Name
wait(1)
(Вот здесь он зависает)
--превращаем его
module.DressUp(killer, "Skin")
killer.Team = game.Teams.Killer


 local module = require(script.RoundModule) 
local ActivateDoors = require(script.Door)
local ActivateKeys = require(script.Key)
local map = nil

local min_players = 2--минимальное количество игроков для старта игры(можно изменять)

while true do
--перерыв
module.CountDown(10, "Intermission")

if game.Players.NumPlayers > 0 then
--голосование за карту добавлю попозже
map = game.ReplicatedStorage.Maps.Map:Clone()
map.Parent = workspace
ActivateDoors(map)
ActivateKeys(map)

--выбираем случайного убийцу
local killer = module.ChooseKiller()
game.ReplicatedStorage.Status.Value = "Killer is ".. killer.Name

wait(1)
--превращаем его
module.DressUp(killer, "Skin")
killer.Team = game.Teams.Killer

for index, player in pairs(game.Players:GetPlayers()) do
if player ~= killer then
player.Team = game.Teams.Playing
player.Character:PivotTo(map.PlayerSpawn.CFrame)
else
player.Character:PivotTo(map.KillerSpawn.CFrame)
end
end

game.ReplicatedStorage.GameInProgress.Value = true

local result = module.Round(30)

game.ReplicatedStorage.GameInProgress.Value = false

for index, player in pairs(game.Players:GetPlayers()) do
if player ~= killer then
if result == "killer lose" then
player.Stats.Money.Value += 100
end
else
if result == "killer won" then
player.Stats.Money.Value += 150
end
end

player.Team = game.Teams.Lobby
player:LoadCharacter()
end
map:Destroy()

wait(1)
else
game.ReplicatedStorage.Status.Value = "not enough players!(1/2)"
wait(3)
end
end
Дополнен 1 месяц назад
Также в модуле используется вот этот скрипт

local module = {}
local status = game.ReplicatedStorage.Status

local teams = game.Teams

function module.CountDown(length:number, theme:string)
for second = length, 0, -1 do
wait(1)
status.Value = theme.. ": ".. second
end
end

function module.Round(length:number)
local result = "killer won"

for second = length, 0, -1 do
wait(1)
status.Value = "Round: ".. second

local playing = #teams.Playing:GetPlayers()
local escaped = #teams.Escaped:GetPlayers()
local killers = #teams.Killer:GetPlayers()

if escaped > 0 then
result = "killer lose"
status.Value = "Killer lose"
break
end

if killers == 0 then
result = "killer left"
status.Value = "Killer left!"
break
end

if playing == 0 then
result = "killer won"
status.Value = "Killer won!"
break
end
end

return result
end

function module.ChooseKiller()
local killer = game.Players:GetPlayers()[math.random(1, #game.Players:GetPlayers())]

return killer
end

function module.DressUp(player, name)
local char = game.ReplicatedStorage.Skins:FindFirstChild(name):Clone()

char:PivotTo(player.Character.PrimaryPart.CFrame)
char.Name = player.Name

player.Character = char
char.Parent = workspace
end

return module
Голосование за лучший ответ
Анонимус Просветленный (29194) 1 месяц назад
Ваша функция DressUp может зависать, если она пытается выполнить действия с персонажем игрока, который еще не загружен или недоступен. Убедитесь, что персонаж игрока существует и имеет PrimaryPart. Если персонаж не загружен, это может привести к ошибке или зависанию.
Если в игре недостаточно игроков, функция ChooseKiller может возвращать nil, что приводит к ошибкам в последующих строках, таких как killer.Name. Проверьте, что в игре достаточно игроков перед выбором убийцы.
Убедитесь, что объект Status в ReplicatedStorage существует и доступен для записи. Если объект не существует или недоступен, это может вызвать проблемы.
Если в вашем коде где-то происходит ошибка, и выполнение останавливается, это также может привести к зависанию. Проверьте, нет ли ошибок в других частях кода, особенно в циклах.

Общие рекомендации:
Добавьте вывод сообщений (print) перед и после ключевых операций, чтобы понять, где именно происходит зависание. Это поможет вам отследить, на каком этапе код останавливается.
Используйте pcall для обработки возможных ошибок в функции, чтобы избежать полного зависания скрипта.
Убедитесь, что у вас достаточно игроков перед началом игры. Если в вашей игре должно быть минимум 2 игрока, добавьте проверку на это перед выбором убийцы.
Похожие вопросы