Skip to content

Permissions & Duration

Permissions & Duration

"Self" bedeutet immer den eigenen Körper des Spielers. Alles, was auf einen anderen Spieler abzielt, wird als Bearbeitung von jemand anderem behandelt und erfordert einen der konfigurierten Jobs oder ein ACE.

Wer einen anderen Spieler untersuchen darf

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

    LockStaffNotes       = true,
    AllowSelfRemove      = true,
    StaffCanRemoveLocked = true,
}
Option Standard Zweck
EditOthers { 'ambulance', 'ems', 'doctor' } Jobs, die Notizen bei anderen Spielern hinterlassen dürfen. Leer ({}) deaktiviert dies vollständig.
MinGrade 0 Mindest-Jobrang für diese Jobs (0 = jeder Rang).
UseAce false Akzeptiert für Admins zusätzlich eine ACE-Berechtigung anstelle eines Jobs.
Ace bupa.syncstatus Das ACE-Objekt, das überprüft wird, wenn UseAce aktiv ist.
MaxDistance 3.0 Wie nah man an jemandem stehen muss, um ihn zu untersuchen, in Metern. 0 deaktiviert die Prüfung.

Jede einzelne dieser Regeln wird serverseitig bei jedem einzelnen Lese-, Schreib- und Löschvorgang durchgesetzt – nicht nur beim Öffnen des Panels.

Gesperrte Sanitäter-Dokumentation

Dies ist die Option, die das Script wirklich wertvoll macht.

Option Standard Effekt
LockStaffNotes true Eine Notiz, die ein Sanitäter bei jemand anderem hinterlässt, ist gesperrt. Der Patient kann sie nicht löschen; sie verschwindet von selbst, wenn der Timer abläuft.
AllowSelfRemove true Dürfen Spieler Notizen entfernen, die sie bei sich selbst hinterlassen haben?
StaffCanRemoveLocked true Dürfen autorisierte Jobs eine gesperrte Notiz vor ihrem Ablauf entfernen? Für absolut unveränderliche Dokumentation deaktivieren.

Eine gesperrte Notiz wird im Panel als "Gesperrt von Sanitäter" markiert. Clear all und /statusclear behalten gesperrte Notizen absichtlich bei: Der Server löscht nur Zeilen, die der Aufrufende tatsächlich entfernen darf, und gibt aus, wie viele das waren.

Mit LockStaffNotes = true und StaffCanRemoveLocked = false kann niemand die Notiz eines Sanitäters entfernen – nicht einmal der Sanitäter, der sie geschrieben hat. Sie verschwindet erst, wenn ihr Timer abläuft. Vermeide daher diese Kombination mit permanenten Laufzeiten.

Dauer

config.lua
Config.Duration = {
    Enabled         = true,
    Presets         = { 30, 60, 120, 180, 360, 720 },  -- Minuten
    Default         = 120,
    AllowPermanent  = true,
    SelfDefault     = 0,     -- Minuten; 0 = permanent
    CleanupInterval = 60,    -- Sekunden
}
  • Presets werden im Panel als ein Chip pro Eintrag in Minuten angezeigt. Halte die Liste kurz.
  • Default ist der vorausgewählte Chip, wenn ein Sanitäter einen Patienten dokumentiert. Eine Dauer, die der Server nicht erkennt, wird stillschweigend durch diesen Wert ersetzt, sodass ein manipulierter Client sich keinen eigenen Timer ausdenken kann.
  • AllowPermanent fügt eine Permanente Option neben den Presets hinzu.
  • SelfDefault wird für Notizen verwendet, die Spieler über sich selbst schreiben – 0 bedeutet permanent.
  • CleanupInterval legt fest, wie oft der Server abgelaufene Zeilen aus der Datenbank und aus den Statebags aller Spieler bereinigt. Der minimal erzwungene Wert beträgt 10 Sekunden.

Das Setzen von Enabled = false macht jede Notiz permanent, bis sie jemand entfernt; die Zeitauswahl verschwindet aus dem Panel und der Bereinigungs-Thread startet nie.

Limits

config.lua
Config.Limits = {
    MaxPerPlayer   = 4,
    MaxTextLength  = 48,
    class="hljs-literal">true,
    WriteCooldown  = 2,   -- Sekunden zwischen Schreibvorgängen
}

Text wird getrimmt, von <, > und ~ bereinigt und serverseitig vor dem Speichern auf MaxTextLength gekürzt, sodass nichts, was ein Spieler eingibt, das Rendering beschädigen kann.

Notizen aus einer anderen Resource auslesen

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

Gibt die zwischengespeicherte Liste für diesen Spieler zurück: id, bodypart, text, type, severity, locked, expires und remaining. Dieselbe Liste ist clientseitig über das Statebag als Player(serverId).state.bupaStatuses lesbar.