Skip to content

Permissions & Duration

Uprawnienia i Czas Trwania

"Self" oznacza zawsze ciało samego gracza. Wszystko skierowane w stronę innego gracza jest traktowane jako edycja kogoś innego i wymaga jednej z skonfigurowanych prac lub uprawnienia ACE.

Kto może badać innego gracza

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

    LockStaffNotes       = true,
    AllowSelfRemove      = true,
    StaffCanRemoveLocked = true,
}
Opcja Domyślnie Przeznaczenie
EditOthers { 'ambulance', 'ems', 'doctor' } Prace mogące dodawać adnotacje innym graczom. Puste ({}) całkowicie to wyłącza.
MinGrade 0 Minimalny stopień dla tych prac (0 = dowolny stopień).
UseAce false Akceptuj również uprawnienia ACE zamiast pracy, dla administratorów.
Ace bupa.syncstatus Obiekt ACE sprawdzany, gdy UseAce jest włączone.
MaxDistance 3.0 Jak blisko musisz stać, aby zbadać kogoś, w metrach. 0 wyłącza sprawdzanie.

Każda z tych opcji jest egzekwowana po stronie serwera, przy każdym odczycie, zapisie i usunięciu — a nie tylko podczas otwierania panelu.

Zablokowana dokumentacja medyczna

To jest opcja, dzięki której ten skrypt jest wart użycia.

Opcja Domyślnie Efekt
LockStaffNotes true Adnotacja umieszczona przez medyka na kimś innym jest zablokowana. Pacjent nie może jej usunąć; znika sama po upływie czasu.
AllowSelfRemove true Czy gracze mogą usuwać adnotacje, które umieścili na sobie?
StaffCanRemoveLocked true Czy autoryzowane prace mogą zdjąć zablokowaną notatkę przed jej wygaśnięciem? Wyłącz dla w pełni niezmieniadlanej dokumentacji.

Zablokowana adnotacja jest oznaczona w panelu jako "Locked by medic". Clear all oraz /statusclear celowo zachowują zablokowane notatki: serwer usuwa tylko te wiersze, które wywołujący faktycznie może usunąć, i raportuje, ile ich było.

Przy LockStaffNotes = true i StaffCanRemoveLocked = false nikt nie może usunąć notatki medyka — nawet sam medyk, który ją napisał. Zniknie ona dopiero po wygaśnięciu czasu, więc unikaj łączenia tego z trwałymi czasami trwania.

Czas trwania

config.lua
Config.Duration = {
    Enabled         = true,
    Presets         = { 30, 60, 120, 180, 360, 720 },  -- minutes
    Default         = 120,
    AllowPermanent  = true,
    SelfDefault     = 0,     -- minutes; 0 = permanent
    CleanupInterval = 60,    -- seconds
}
  • Presets są wyświetlane jako jeden przycisk na wpis w panelu, w minutach. Utrzymuj listę krótką.
  • Default to wstępnie zaznaczony przycisk, gdy medyk adnotuje pacjenta. Czas trwania nierozpoznany przez serwer jest po cichu zastępowany tą wartością, więc zmodyfikowany klient nie może wymyślić własnego timera.
  • AllowPermanent dodaje opcję Permanent obok presetów.
  • SelfDefault jest używany do notatek, które gracze piszą na sobie — 0 oznacza na stałe.
  • CleanupInterval określa, jak często serwer usuwa wygasłe wiersze z bazy danych oraz ze statebagów wszystkich graczy. Minimalna wymuszona wartość to 10 sekund.

Ustawienie Enabled = false sprawia, że każda adnotacja jest stała, dopóki ktoś jej nie usunie; selektor czasu trwania znika z panelu, a wątek czyszczenia nigdy się nie uruchamia.

Limity

config.lua
Config.Limits = {
    MaxPerPlayer   = 4,
    MaxTextLength  = 48,
    class="hljs-literal">true,
    WriteCooldown  = 2,   -- seconds between writes
}

Tekst jest przycinany, pozbawiany znaków <, > i ~ oraz skracany do MaxTextLength na serwerze przed zapisaniem, więc nic, co wpisze gracz, nie zepsuje renderowania.

Odczyt adnotacji z innego zasobu

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

Zwraca buforowaną listę dla tego gracza: id, bodypart, text, type, severity, locked, expires oraz remaining. Tę samą listę można odczytać po stronie klienta ze statebaga jako Player(serverId).state.bupaStatuses.