Загрузка данных


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)