Skip to content

Permissions & Duration

Permissions & Duration

"Self" завжди означає власне тіло гравця. Усе, що спрямоване на іншого гравця, вважається редагуванням когось іншого та вимагає однієї з налаштованих робіт або ACE.

Хто може оглядати іншого гравця

config.lua
Config.Permissions = {
    EditOthers = { 'ambulance', 'ems', 'doctor' },
    MinGrade   = 0,
    UseAce     = false,
    Ace        = 'bupa.syncstatus',
    MaxDistance = 3.0,

    LockStaffNotes       = true,
    AllowSelfRemove      = true,
    StaffCanRemoveLocked = true,
}
Опція За замовчуванням Призначення
EditOthers { 'ambulance', 'ems', 'doctor' } Роботи, яким дозволено залишати нотатки про інших гравців. Пусте значення ({}) повністю вимикає це.
MinGrade 0 Мінімальний ранг для цих робіт (0 = будь-який ранг).
UseAce false Також приймати дозвіл ACE замість роботи (для адміністраторів).
Ace bupa.syncstatus Об'єкт ACE, який перевіряється, коли UseAce увімкнено.
MaxDistance 3.0 На якій відстані ви повинні стояти, щоб оглянути когось, у метрах. 0 вимикає перевірку.

Кожна з цих умов перевіряється на сервере під час кожного читання, запису та видалення — не лише тоді, коли відкривається панель.

Заблокована медична документація

Це саме та опція, яка робить цей скрипт вартим використання.

Опція За замовчуванням Ефект
LockStaffNotes true Нотатка, яку медик залишає на іншій людині, є заблокованою. Пацієнт не може її видалити; вона зникає самостійно після закінчення таймера.
AllowSelfRemove true Чи можуть гравці видаляти нотатки, які вони залишили на собі?
StaffCanRemoveLocked true Чи можуть авторизовані роботи знімати заблоковану нотатку до закінчення її терміну дії? Вимкніть для повністю незмінної документації.

Заблокована нотатка позначається в панелі як "Заблоковано медиком". Команди Clear all та /statusclear свідомо не чіпають заблоковані нотатки: сервер видаляє лише ті рядки, які викликаючий дійсно має право видалити, та звітує, скільки саме їх було.

З параметрами LockStaffNotes = true та StaffCanRemoveLocked = false ніхто не зможе видалити нотатку медика — навіть сам медик, який її написав. Вона зникне лише тоді, коли закінчиться її таймер, тому уникайте поєднання цього налаштування з постійною тривалістю.

Тривалість

config.lua
Config.Duration = {
    Enabled         = true,
    Presets         = { 30, 60, 120, 180, 360, 720 },  -- хвилини
    Default         = 120,
    AllowPermanent  = true,
    SelfDefault     = 0,     -- хвилини; 0 = постійно
    CleanupInterval = 60,    -- секунди
}
  • Presets відображаються як окремі чіпи для кожного значення в панелі (у хвилинах). Тримайте список коротким.
  • Default — це чіп, який попередньо вибирається, коли медик робить нотатку про пацієнта. Тривалість, яку сервер не розпізнає, мовчки замінюється цим значенням, тож скомпрометований клієнт не зможе вигадати власний таймер.
  • AllowPermanent додає опцію Постійно поруч із пресетами.
  • SelfDefault використовується для нотаток, які гравці пишуть самі про себе — 0 означає постійно.
  • CleanupInterval визначає, як часто сервер очищає прострочені рядки з бази даних та стейтбегів усіх користувачів. Мінімально примусове значення становить 10 секунд.

Встановлення параметра Enabled = false робить кожну нотатку постійною, доки хтось її не видалить; вибір тривалості зникає з панелі, а потік очищення ніколи не запускається.

Обмеження

config.lua
Config.Limits = {
    MaxPerPlayer   = 4,
    MaxTextLength  = 48,
    class="hljs-literal">true,
    WriteCooldown  = 2,   -- секунди між написанням
}

Текст обрізається, очищається від символів <, > і ~, а також скорочується до MaxTextLength на сервері перед збереженням, тому ніщо з того, що введе гравець, не зможе зламати рендеринг.

Читання нотаток з іншого ресурсу

server
local list = exports['bupa-syncstatus']:GetStatuses(source)

Повертає кешований список для цього гравця: id, bodypart, text, type, severity, locked, expires та remaining. Цей самий список можна прочитати на клієнті зі стейтбега як Player(serverId).state.bupaStatuses.