local TweenService = game:GetService("TweenService")
local prompt = script.Parent
-- Теперь скрипт понимает, что мы работаем с целой Моделью, а не одним блоком
local doorModel = prompt.Parent
local isOpen = false
-- Получаем текущую позицию ВСЕЙ модели (её центральную точку)
local closedCFrame = doorModel:GetPivot()
-- Задаем сдвиг. CFrame.new(4, 0, 0) сдвинет дверь по оси X на 4 стада (метра).
-- Если дверь отъезжает не туда, попробуй поменять цифры, например: (-4, 0, 0) или (0, 0, 4)
local openCFrame = closedCFrame * CFrame.new(4, 0, 0)
-- СОЗДАЕМ ВИРТУАЛЬНУЮ ТОЧКУ (CFrameValue)
-- TweenService не умеет плавно двигать модели напрямую, поэтому мы будем
-- плавно двигать это невидимое значение, а модель будет просто следовать за ним.
local cframeValue = Instance.new("CFrameValue")
cframeValue.Value = closedCFrame
-- Этот кусок кода срабатывает каждый миллисекунду, пока идет анимация
cframeValue.Changed:Connect(function(newPosition)
-- Переносим всю модель целиком со всеми прутьями в новую позицию
doorModel:PivotTo(newPosition)
end)
-- Настраиваем анимацию
local tweenInfo = TweenInfo.new(1, Enum.EasingStyle.Sine, Enum.EasingDirection.Out)
local openTween = TweenService:Create(cframeValue, tweenInfo, {Value = openCFrame})
local closeTween = TweenService:Create(cframeValue, tweenInfo, {Value = closedCFrame})
-- Логика взлома осталась прежней
prompt.Triggered:Connect(function(player)
if not isOpen then
isOpen = true
prompt.Enabled = false
openTween:Play() -- Запускаем открытие
task.wait(5) -- Ждем 5 секунд
closeTween:Play() -- Запускаем закрытие
task.wait(1)
isOpen = false
prompt.Enabled = true
end
end)