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


-- Script внутри VehicleSeat
local seat = script.Parent
local Players = game:GetService("Players")

local ALLOWED = {
 AS = true,
 QP = true
}

-- Sound (должен быть внутри VehicleSeat или workspace — укажите корректно)
local sound = seat:FindFirstChildWhichIsA("Sound")
if not sound then
 warn("Добавьте Sound внутрь VehicleSeat.")
end

-- Все MeshParts с именем "RK" в дереве VehicleSeat/родителей
local rkParts = {}
for _, obj in ipairs(seat:GetDescendants()) do
 if obj:IsA("MeshPart") and obj.Name == "RK" then
  table.insert(rkParts, obj)
 end
end

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

local function setRKVisible(alphaTimeOn, flashes)
 -- мигание через Transparency
 for _, p in ipairs(rkParts) do
  p:SetAttribute("RK_OrigTrans", p.Transparency)
 end

 for i = 1, flashes do
  task.wait(alphaTimeOn)
  for _, p in ipairs(rkParts) do
   local orig = p:GetAttribute("RK_OrigTrans")
   p.Transparency = 0 -- показываем
  end
  task.wait(alphaTimeOn)
  for _, p in ipairs(rkParts) do
   local orig = p:GetAttribute("RK_OrigTrans")
   p.Transparency = orig or 0
  end
 end
end

local function onOccupantChanged()
 local humanoid = seat.Occupant
 if not humanoid then return end

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

 if ALLOWED[player.Name] then
  return
 end

 -- Неразрешённый игрок: сигнализацию включаем
 if sound then
  sound:Play()
 end

 task.spawn(function()
  setRKVisible(0.15, 4) -- время/кол-во миганий подберите
 end)

 -- ВАЖНО: вместо “откидывания”/вреда можно сделать “мягкий блок”:
 -- 1) не давать удерживать сиденье (например, посадить в ту же игру, но без физического насилия),
 -- 2) или телепортировать в SafeSpawn (если скажете куда).
end

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