Skip to content

Permissões e Duração

Permissões e Duração

"Self" refere-se sempre ao próprio corpo do jogador. Qualquer ação direcionada a outro jogador é tratada como a edição de outra pessoa e requer um dos cargos configurados ou ACE.

Quem pode examinar outro jogador

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ção Padrão Propósito
EditOthers { 'ambulance', 'ems', 'doctor' } Cargos permitidos para anotar outros jogadores. Vazio ({}) desativa completamente.
MinGrade 0 Nível mínimo do cargo para essas funções (0 = qualquer nível).
UseAce false Também aceita uma permissão ACE em vez de um cargo, para administradores.
Ace bupa.syncstatus O objeto ACE verificado quando UseAce está ativo.
MaxDistance 3.0 Quão perto você deve ficar para examinar alguém, em metros. 0 desativa a verificação.

Cada uma destas regras é aplicada no servidor, em cada leitura, gravação e remoção — não apenas quando o painel é aberto.

Documentação médica bloqueada

Esta é a opção que faz este script valer a pena.

Opção Padrão Efeito
LockStaffNotes true Uma anotação que um médico coloca em outra pessoa fica bloqueada. O paciente não pode apagá-la; ela desaparece sozinha quando o temporizador termina.
AllowSelfRemove true Os jogadores podem remover anotações que colocaram em si mesmos?
StaffCanRemoveLocked true Os cargos autorizados podem remover uma nota bloqueada antes que ela expire? Desative para documentação totalmente imutável.

Uma anotação bloqueada é sinalizada no painel como "Bloqueado pelo médico". Clear all e /statusclear mantêm intencionalmente as notas bloqueadas: o servidor apenas elimina as linhas que quem chama tem realmente permissão para remover, e reporta quantas foram.

Com LockStaffNotes = true e StaffCanRemoveLocked = false, ninguém pode remover a nota de um médico — nem mesmo o médico que a escreveu. Ela só desaparecerá quando o temporizador expirar, por isso evite combinar isto com durações permanentes.

Duração

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 são renderizados como um chip por entrada no painel, em minutos. Mantenha a lista curta.
  • Default é o chip pré-selecionado quando um médico anota um paciente. Uma duração que o servidor não reconhece é substituída silenciosamente por este valor, para que um cliente adulterado não possa inventar o seu próprio temporizador.
  • AllowPermanent adiciona uma opção Permanente ao lado das predefinições.
  • SelfDefault é utilizado para notas que os jogadores escrevem sobre si mesmos — 0 significa permanente.
  • CleanupInterval é a frequência com que o servidor limpa as linhas expiradas da base de dados e do statebag de todos. O valor mínimo aplicado é de 10 segundos.

Definir Enabled = false torna cada anotação permanente até que alguém a remova; o seletor de duração desaparece do painel e a thread de limpeza nunca é iniciada.

Limites

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

O texto é cortado, limpo de <, > e ~, e encurtado para MaxTextLength no servidor antes de ser armazenado, para que nada do que um jogador digite possa quebrar a renderização.

Ler anotações de outro recurso

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

Retorna a lista em cache para esse jogador: id, bodypart, text, type, severity, locked, expires e remaining. A mesma lista pode ser lida no lado do cliente a partir do statebag como Player(serverId).state.bupaStatuses.