Skip to content

Permisiuni și Durată

Permisiuni și Durată

"Self" înseamnă întotdeauna propriul corp al jucătorului. Orice acțiune îndreptată către un alt jucător este tratată ca o modificare adusă altcuiva și necesită unul dintre joburile configurate sau permisiunea ACE.

Cine poate examina un alt jucător

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

    LockStaffNotes       = true,
    AllowSelfRemove      = true,
    StaffCanRemoveLocked = true,
}
Opțiune Valoare implicită Scop
EditOthers { 'ambulance', 'ems', 'doctor' } Joburile care au permisiunea de a adnota alți jucători. O listă goală ({}) dezactivează complet această funcție.
MinGrade 0 Gradul minim necesar pentru acele joburi (0 = orice grad).
UseAce false Acceptă și o permisiune ACE în loc de un job, util pentru admini.
Ace bupa.syncstatus Obiectul ACE verificat atunci când UseAce este activat.
MaxDistance 3.0 Distanța maximă în metri la care trebuie să te afli pentru a examina pe cineva. 0 dezactivează verificarea.

Fiecare dintre acestea este aplicată la nivel de server, la fiecare citire, scriere și ștergere — nu doar atunci când panoul este deschis.

Documentație medicală blocată

Aceasta este opțiunea care face ca acest script să merite folosit.

Opțiune Valoare implicită Efect
LockStaffNotes true O notă plasată de un medic pe altcineva este blocată. Pacientul nu o poate șterge; aceasta dispare singură când expiră cronometrul.
AllowSelfRemove true Au voie jucătorii să elimine notele pe care și le-au pus singuri?
StaffCanRemoveLocked true Au voie joburile autorizate să scoată o notă blocată înainte ca aceasta să expire? Dezactivează pentru o documentație cu adevărat imutabilă.

O notă blocată este marcată în panou ca "Locked by medic". Comenzile Clear all și /statusclear păstrează în mod deliberat notele blocate: serverul șterge doar rândurile pe care cel care apelează comanda are efectiv permisiunea să le elimine și raportează câte au fost șterse.

Cu LockStaffNotes = true și StaffCanRemoveLocked = false, nimeni nu poate elimina nota unui medic — nici măcar medicul care a scris-o. Aceasta va dispărea doar când cronometrul său ajunge la sfârșit, așa că evitați să combinați această setare cu durate permanente.

Durată

config.lua
Config.Duration = {
    Enabled         = true,
    Presets         = { 30, 60, 120, 180, 360, 720 },  -- minute
    Default         = 120,
    AllowPermanent  = true,
    SelfDefault     = 0,     -- minute; 0 = permanent
    CleanupInterval = 60,    -- secunde
}
  • Presets sunt afișate sub formă de cipuri (câte unul pentru fiecare intrare) în panou, exprimate în minute. Păstrați lista scurtă.
  • Default este cipul preselectat atunci când un medic adnotează un pacient. O durată pe care serverul nu o recunoaște este înlocuită silențios cu această valoare, astfel încât un client modificat nu își poate inventa propriul cronometru.
  • AllowPermanent adaugă o opțiune Permanent lângă seturile prestabilite.
  • SelfDefault este folosit pentru notele pe care jucătorii și le scriu singuri — 0 înseamnă permanent.
  • CleanupInterval reprezintă frecvența cu care serverul curăță rândurile expirate din baza de date și din statebag-ul tuturor. Valoarea minimă impusă este de 10 secunde.

Setarea Enabled = false face ca fiecare notă să fie permanentă până când cineva o elimină; selectorul de durată dispare din panou și procesul de curățare nu pornește niciodată.

Limite

config.lua
Config.Limits = {
    MaxPerPlayer   = 4,
    MaxTextLength  = 48,
    class="hljs-literal">true,
    WriteCooldown  = 2,   -- secunde între scrieri
}

Textul este curățat de spații, i se elimină caracterele <, > și ~, și este tăiat la dimensiunea MaxTextLength pe server înainte de a fi stocat, astfel încât nimic din ce tastează un jucător să nu poată afecta randarea.

Citirea adnotărilor dintr-o altă resursă

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

Returnează lista cache-uită pentru acel jucător: id, bodypart, text, type, severity, locked, expires și remaining. Aceeași listă poate fi citită din partea de client (client-side) din statebag ca Player(serverId).state.bupaStatuses.