Skip to content

Permisos y Duración

Permisos y Duración

"Self" siempre se refiere al propio cuerpo del jugador. Cualquier acción dirigida a otro jugador se trata como una modificación a alguien más, y requiere uno de los trabajos configurados o el ACE.

Quién puede examinar a otro jugador

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

    LockStaffNotes       = true,
    AllowSelfRemove      = true,
    StaffCanRemoveLocked = true,
}
Opción Predeterminado Propósito
EditOthers { 'ambulance', 'ems', 'doctor' } Trabajos permitidos para anotar a otros jugadores. Vacío ({}) lo desactiva por completo.
MinGrade 0 Rango mínimo de trabajo para esos puestos (0 = cualquier rango).
UseAce false Aceptar también un permiso ACE en lugar de un trabajo, para administradores.
Ace bupa.syncstatus El objeto ACE que se comprueba cuando UseAce está activado.
MaxDistance 3.0 Qué tan cerca debes pararte para examinar a alguien, en metros. 0 desactiva la comprobación.

Cada una de estas reglas se aplica en el servidor, en cada lectura, escritura y eliminación, no solo cuando se abre el panel.

Documentación médica bloqueada

Esta es la opción que hace que valga la pena utilizar este script.

Opción Predeterminado Efecto
LockStaffNotes true Una anotación que un médico coloca en otra persona queda bloqueada. El paciente no puede borrarla; desaparece por sí sola cuando el temporizador finaliza.
AllowSelfRemove true ¿Pueden los jugadores eliminar las anotaciones que se pusieron a sí mismos?
StaffCanRemoveLocked true ¿Pueden los trabajos autorizados quitar una nota bloqueada antes de que expire? Desactívalo para documentación verdaderamente inmutable.

Una anotación bloqueada se marca en el panel como "Bloqueado por médico". Clear all y /statusclear conservan deliberadamente las notas bloqueadas: el servidor solo borra las filas que el usuario realmente tiene permiso para eliminar, e informa cuántas fueron.

Con LockStaffNotes = true y StaffCanRemoveLocked = false, nadie puede eliminar la nota de un médico, ni siquiera el médico que la escribió. Solo desaparecerá cuando su temporizador llegue a cero, así que evita combinar esto con duraciones permanentes.

Duración

config.lua
Config.Duration = {
    Enabled         = true,
    Presets         = { 30, 60, 120, 180, 360, 720 },  -- minutos
    Default         = 120,
    AllowPermanent  = true,
    SelfDefault     = 0,     -- minutos; 0 = permanente
    CleanupInterval = 60,    -- segundos
}
  • Presets se muestran como un chip por cada entrada en el panel, en minutos. Mantén la lista corta.
  • Default es el chip preseleccionado cuando un médico anota a un paciente. Una duración que el servidor no reconozca se reemplaza silenciosamente por este valor, por lo que un cliente modificado no puede inventar su propio temporizador.
  • AllowPermanent añade una opción Permanente junto a los ajustes preestablecidos.
  • SelfDefault se utiliza para las notas que los jugadores escriben sobre sí mismos: 0 significa permanente.
  • CleanupInterval es la frecuencia con la que el servidor limpia las filas expiradas de la base de datos y del statebag de todos. El valor mínimo aplicado es de 10 segundos.

Configurar Enabled = false hace que cada anotación sea permanente hasta que alguien laelimine; el selector de duración desaparece del panel y el hilo de limpieza nunca se inicia.

Límites

config.lua
Config.Limits = {
    MaxPerPlayer   = 4,
    MaxTextLength  = 48,
    class="hljs-literal">true,
    WriteCooldown  = 2,   -- segundos entre escrituras
}

El texto se recorta, se le eliminan <, > y ~, y se corta a MaxTextLength en el servidor antes de ser almacenado, por lo que nada de lo que escriba un jugador puede romper el renderizado.

Lectura de anotaciones desde otro recurso

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

Devuelve la lista en caché para ese jugador: id, bodypart, text, type, severity, locked, expires y remaining. La misma lista se puede leer del lado del cliente desde el statebag como Player(serverId).state.bupaStatuses.