Skip to content

Permissions & Duration

Permissions & Duration

"Self" always means the player's own body. Anything aimed at another player is treated as editing somebody else, and needs one of the configured jobs or the ACE.

Who may examine another player

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 Default Purpose
EditOthers { 'ambulance', 'ems', 'doctor' } 允许对其他玩家添加批注的职业。留空 ({}) 则完全禁用。
MinGrade 0 这些职业的最低职级要求(0 = 任意职级)。
UseAce true 是否允许使用 ACE 权限替代职业(适用于管理员)。
Ace bupa.syncstatus UseAce 开启时检查的 ACE 对象。
MaxDistance 3.0 检查他人所需的最近距离(单位:米)。设置为 0 则禁用此检查。

每一项权限都在服务器端进行强制验证——涵盖每一次读取、写入和移除操作,而不仅仅是在打开面板时。

Locked medic documentation

This is the option that makes the script worth running.

Option Default Effect
LockStaffNotes true 医护人员对他人添加的批注将被锁定。患者无法自行删除,只能等待计时结束自动消失。
AllowSelfRemove true 玩家是否可以移除自己对自己添加的批注?
StaffCanRemoveLocked true 拥有权限的职业是否可以在锁定的批注过期前将其移除?若需绝对不可篡改的医疗记录,请将其关闭。

锁定的批注在面板中会显示为 "Locked by medic"Clear all/statusclear 命令会刻意保留锁定的批注:服务器只会删除调用者实际有权移除的记录,并返回删除了多少条。

LockStaffNotes = trueStaffCanRemoveLocked = false 时,任何人都无法移除医护人员的批注——甚至连编写该批注的医护人员也不行。它只能在计时结束后消失,因此请避免将此配置与永久持续时间搭配使用。

Duration

config.lua
Config.Duration = {
    Enabled         = true,
    Presets         = { 30, 60, 120, 180, 360, 720 },  -- minutes
    Default         = 120,
    AllowPermanent  = true,
    SelfDefault     = 0,     -- minutes; 0 = permanent
    CleanupInterval = 60,    -- seconds
}
  • Presets 在面板中以每个条目一个选项卡的形式渲染(单位:分钟)。建议保持列表简短。
  • Default 是医护人员为患者添加批注时默认预选的选项卡。若客户端传入服务器无法识别的时长,将被静默替换为该默认值,因此篡改客户端也无法自定义计时器。
  • AllowPermanent 会在预设旁边添加一个永久选项。
  • SelfDefault 用于玩家给自己写批注时的默认时长——0 表示永久。
  • CleanupInterval 是服务器清理数据库及所有玩家 statebag 中过期记录的扫描频率。强制的最低值为 10 秒。

Enabled = false 设置为关闭后,所有批注将变为永久生效,直到有人手动移除;面板中的时长选择器会消失,清理线程也永远不会启动。

Limits

config.lua
Config.Limits = {
    MaxPerPlayer   = 4,
    MaxTextLength  = 48,
    class="hljs-literal">true,
    WriteCooldown  = 2,   -- seconds between writes
}

文本在存储前会在服务器端进行修剪、过滤掉 <, >~ 符号,并截断至 MaxTextLength 长度,因此玩家输入的任何内容都不会破坏渲染效果。

Reading annotations from another resource

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

返回该玩家的缓存列表:idbodyparttexttypeseveritylockedexpiresremaining。在客户端也可以通过 statebag 读取相同的列表,即 Player(serverId).state.bupaStatuses