Скрипт: дверь по ключу и дверь с кнопкой
Серверный скрипт открывает дверь, если у игрока в инвентаре есть предмет-ключ, и закрывает её через несколько секунд. Решение принимает сервер — на клиенте дверь не открывается никак.
Куда положить
ServerScriptService, тип объекта Script
Что должно быть в проекте
- В Workspace деталь с именем Door (Anchored включён)
- Предмет-ключ в Backpack игрока с именем Key — его выдаёт другая механика игры
Код
local door = workspace:WaitForChild("Door")local OPEN_TIME = 4local KEY_NAME = "Key"local isOpen = falselocal function setOpen(open: boolean)isOpen = opendoor.CanCollide = not opendoor.Transparency = open and 0.7 or 0enddoor.Touched:Connect(function(hit)if isOpen thenreturnendlocal character = hit.Parentlocal humanoid = character and character:FindFirstChildOfClass("Humanoid")if not humanoid thenreturnendlocal player = game:GetService("Players"):GetPlayerFromCharacter(character)if not player thenreturnendlocal backpack = player:FindFirstChild("Backpack")local hasKey = character:FindFirstChild(KEY_NAME)or (backpack and backpack:FindFirstChild(KEY_NAME))if not hasKey thenreturnendsetOpen(true)task.delay(OPEN_TIME, function()setOpen(false)end)end)
Проверка ключа идёт и в руках персонажа, и в рюкзаке — предмет может быть в любом из них.
На что обратить внимание
- Имя ключа и время открытия вынесены в начало — их и меняют под свою игру
- Для двери на петлях вместо прозрачности используй HingeConstraint
- Touched срабатывает часто, поэтому первым делом стоит проверка isOpen