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


-- Script inside VehicleSeat
local seat = script.Parent
local Players = game:GetService("Players")
local TweenService = game:GetService("TweenService")

local ALLOWED = {
 wereki = true,
 derino = true,
}

-- Sound (ищем внутри VehicleSeat)
local sound = seat:FindFirstChildWhichIsA("Sound", true)

-- Все MeshParts по имени "RS"
local rsParts = {}
for _, obj in ipairs(seat:GetDescendants()) do
 if obj:IsA("MeshPart") and obj.Name == "RS" then
  table.insert(rsParts, obj)
 end
end

if #rsParts == 0 then
 warn('Не найдено MeshPart с именем "RS" внутри VehicleSeat.')
end

-- сохраним исходную прозрачность
local originalTransparency = {}
for _, p in ipairs(rsParts) do
 originalTransparency[p] = p.Transparency
end

local flashing = false
local function flashRS()
 if flashing then return end
 flashing = true

 -- светим (ставим 0), потом возвращаем оригинал
 task.spawn(function()
  for i = 1, 6 do
   for _, p in ipairs(rsParts) do
    p.Transparency = 0
   end
   task.wait(0.12)
   for _, p in ipairs(rsParts) do
    p.Transparency = originalTransparency[p] or 0
   end
   task.wait(0.08)
  end
  flashing = false
 end)
end

-- Проверка при попытке сесть / когда изменяется Occupant
local function enforce()
 local humanoid = seat.Occupant
 if not humanoid then return end

 local character = humanoid.Parent
 local player = Players:GetPlayerFromCharacter(character)
 if not player then return end

 if ALLOWED[player.Name] then
  return
 end

 -- сигнал тревоги
 if sound then
  sound:Play()
 end
 flashRS()

 -- БЕЗ вреда: просто высаживаем неразрешённого игрока
 -- (если сид будет с физикой, посадка сразу отменится)
 seat:Sit(nil)
end

seat:GetPropertyChangedSignal("Occupant"):Connect(enforce)
enforce()