Skip to content

Permessi e Durata

Permessi e Durata

"Self" si riferisce sempre al corpo del giocatore stesso. Qualsiasi cosa mirata a un altro giocatore viene trattata come la modifica di qualcun altro, e richiede uno dei lavori configurati o l'ACE.

Chi può esaminare un altro giocatore

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

    LockStaffNotes       = true,
    AllowSelfRemove      = true,
    StaffCanRemoveLocked = true,
}
Opzione Predefinito Scopo
EditOthers { 'ambulance', 'ems', 'doctor' } Lavori autorizzati ad annotare altri giocatori. Vuoto ({}) lo disabilita del tutto.
MinGrade 0 Grado minimo di lavoro per quei lavori (0 = qualsiasi grado).
UseAce false Accetta anche un permesso ACE invece di un lavoro, per gli admin.
Ace bupa.syncstatus L'oggetto ACE controllato quando UseAce è attivo.
MaxDistance 3.0 Quanto vicino devi trovarti per esaminare qualcuno, in metri. 0 disabilita il controllo.

Ognuna di queste opzioni viene applicata sul server, a ogni singola operazione di lettura, scrittura e rimozione — non solo quando si apre il pannello.

Documentazione medica bloccata

Questa è l'opzione che rende lo script degno di essere utilizzato.

Opzione Predefinito Effetto
LockStaffNotes true Un'annotazione che un medico posiziona su qualcun altro è bloccata. Il paziente non può eliminarla; scompare da sola quando il timer scade.
AllowSelfRemove true I giocatori possono rimuovere le annotazioni che hanno posizionato su se stessi?
StaffCanRemoveLocked true I lavori autorizzati possono rimuovere una nota bloccata prima che scada? Disattiva per una documentazione veramente immutabile.

Un'annotazione bloccata è contrassegnata nel pannello come "Bloccata dal medico". Clear all e /statusclear mantengono deliberatamente le note bloccate: il server elimina solo le righe che il chiamante è effettivamente autorizzato a rimuovere, e segnala quante erano.

Con LockStaffNotes = true e StaffCanRemoveLocked = false, nessuno può rimuovere la nota di un medico — nemmeno il medico che l'ha scritta. Svanirà solo quando il suo timer sarà scaduto, quindi evita di abbinarlo a durate permanenti.

Durata

config.lua
Config.Duration = {
    Enabled         = true,
    Presets         = { 30, 60, 120, 180, 360, 720 },  -- minuti
    Default         = 120,
    AllowPermanent  = true,
    SelfDefault     = 0,     -- minuti; 0 = permanente
    CleanupInterval = 60,    -- secondi
}
  • Presets sono resi come un chip per voce nel pannello, in minuti. Mantieni la lista corta.
  • Default è il chip pre-selezionato quando un medico annota un paziente. Una durata che il server non riconosce viene silenziosamente sostituita con questo valore, in modo che un client manomesso non possa inventarsi il proprio timer.
  • AllowPermanent aggiunge un'opzione Permanente accanto ai preset.
  • SelfDefault viene usato per le note che i giocatori scrivono su se stessi — 0 significa permanente.
  • CleanupInterval indica la frequenza con cui il server pulisce le righe scadute dal database e dallo statebag di chiunque. Il valore minimo applicato è 10 secondi.

Impostare Enabled = false rende ogni annotazione permanente finché qualcuno non la rimuove; il selettore di durata scompare dal pannello e il thread di pulizia non si avvia mai.

Limiti

config.lua
Config.Limits = {
    MaxPerPlayer   = 4,
    MaxTextLength  = 48,
    class="hljs-literal">true,
    WriteCooldown  = 2,   -- secondi tra una scrittura e l'altra
}

Il testo viene rifinito, ripulito da <, > e ~, e tagliato a MaxTextLength sul server prima di essere memorizzato, in modo che nulla di ciò che un giocatore digita possa interrompere il rendering.

Lettura delle annotazioni da un'altra risorsa

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

Restituisce la lista memorizzata nella cache per quel giocatore: id, bodypart, text, type, severity, locked, expires e remaining. La stessa lista è leggibile lato client dallo statebag come Player(serverId).state.bupaStatuses.