Давайте полностью переработаем систему управления состоянием и взаимодействием с GUI. Вот финальное решение: ```lua -- ServerScriptService/DeathPlatform.lua local ServerScriptService = game:GetService("ServerScriptService") local Players = game:GetService("Players") -- Создание платформы local platform = Instance.new("Part") platform.Name = "DeathPlatform" platform.Size = Vector3.new(10, 1, 10) platform.Position = Vector3.new(0, 5, 0) platform.Anchored = true platform.BrickColor = BrickColor.new("Really red") platform.CanCollide = true platform.Parent = workspace -- GUI для таймера local gui = Instance.new("BillboardGui") gui.Name = "TimerGui" gui.AlwaysOnTop = true gui.Size = UDim2.new(5, 0, 2, 0) gui.StudsOffset = Vector3.new(0, 3, 0) local textLabel = Instance.new("TextLabel") textLabel.Size = UDim2.new(1, 0, 1, 0) textLabel.TextScaled = true textLabel.BackgroundTransparency = 1 textLabel.TextColor3 = Color3.new(1, 1, 1) textLabel.Font = Enum.Font.SourceSansBold textLabel.Text = "SAFE" textLabel.Parent = gui gui.Parent = platform local COOLDOWN = 10 local activeTimer = nil local touchCounts = {} local connections = {} -- Полная очистка состояния local function resetSystem() activeTimer = nil touchCounts = {} textLabel.Text = "SAFE" textLabel.TextColor3 = Color3.new(1, 1, 1) end -- Улучшенное убийство игроков local function killPlayers() local toKill = {} for player in pairs(touchCounts) do if player and player.Character then table.insert(toKill, player) end end for _, player in ipairs(toKill) do local character = player.Character if character then local humanoid = character:FindFirstChild("Humanoid") if humanoid then humanoid.Health = 0 end end end resetSystem() end -- Новый таймер с защитой от пересечений local function startTimer() if activeTimer then return end activeTimer = true local startTime = os.time() local lastUpdate = startTime while true do local currentTime = os.time() local elapsed = currentTime - startTime local timeLeft = COOLDOWN - elapsed -- Обновляем GUI только при изменении секунды if currentTime ~= lastUpdate then textLabel.Text = tostring(math.max(0, timeLeft)) lastUpdate = currentTime end -- Условия выхода if timeLeft <= 0 then killPlayers() break end if next(touchCounts) == nil then resetSystem() break end task.wait(0.1) end activeTimer = nil end -- Оптимизированные обработчики касаний local function onTouch(hit) local player = Players:GetPlayerFromCharacter(hit.Parent) if not player then return end -- Проверка живой ли персонаж local humanoid = hit.Parent:FindFirstChild("Humanoid") if not humanoid or humanoid.Health <= 0 then return end -- Регистрация касания touchCounts[player] = (touchCounts[player] or 0) + 1 if touchCounts[player] == 1 then if not activeTimer then task.spawn(startTimer) end end end local function onTouchEnd(hit) local player = Players:GetPlayerFromCharacter(hit.Parent) if not player or not touchCounts[player] then return end touchCounts[player] = math.max(0, touchCounts[player] - 1) if touchCounts[player] == 0 then touchCounts[player] = nil end end -- Система очистки при респавне local function onCharacterAdded(character) local player = Players:GetPlayerFromCharacter(character) if player and touchCounts[player] then touchCounts[player] = nil end end -- Обработчик подключения игроков local function onPlayerAdded(player) local conn conn = player.CharacterAdded:Connect(function(character) onCharacterAdded(character) -- Новая проверка для мертвых тел character:WaitForChild("Humanoid").Died:Connect(function() if touchCounts[player] then touchCounts[player] = nil end end) end) table.insert(connections, conn) end -- Инициализация for _, player in ipairs(Players:GetPlayers()) do onPlayerAdded(player) end Players.PlayerAdded:Connect(onPlayerAdded) platform.Touched:Connect(onTouch) platform.TouchEnded:Connect(onTouchEnd) -- Очистка при удалении game:BindToClose(function() resetSystem() for _, conn in ipairs(connections) do conn:Disconnect() end end) ``` **Основные улучшения:** 1. **Новая система времени:** - Используем `os.time()` вместо последовательных `task.wait(1)` - Точно отслеживаем реальное время - Избегаем накопления ошибок при задержках 2. **Глобальная очистка состояния:** - Функция `resetSystem()` полностью обнуляет все параметры - Гарантированный сброс при убийстве игроков 3. **Улучшенная обработка GUI:** - Обновление только при изменении секунды - Защита от наложения текста - Явный сброс цвета и текста 4. **Дополнительные проверки:** - Отслеживание смерти через `Humanoid.Died` - Автоматическая отписка от событий - Проверка состояния персонажа перед добавлением 5. **Оптимизация производительности:** - Уменьшен интервал проверки до 0.1 секунды - Использование таблицы соединений для очистки - Безопасное управление памятью **Как проверить исправление:** 1. Зайдите на платформу с несколькими игроками 2. Убедитесь, что после смерти игроки не остаются в системе 3. Проверьте повторные циклы с разными комбинациями игроков 4. Протестируйте выход всех игроков до окончания таймера 5. Убедитесь в корректной работе GUI без наложений **Если проблема сохраняется:** 1. Проверьте нет ли других скриптов, влияющих на платформу 2. Убедитесь что скрипт находится в ServerScriptService 3. Проверьте нет ли ошибок в Output-окне 4. Попробуйте увеличить размер платформы для тестирования