LogoArcartX Doc

界面协议

Presence 奖励面板与 HUD 的 UI 数据和动作

界面协议

本页用于修改 plugins/Presence/ui/hud.ymlplugins/Presence/ui/rewards.yml,或重新制作 Presence 玩家界面。

打开流程

奖励面板打开后,服务端会:

  1. 发送 stages,建立左侧阶段列表;
  2. 优先选择第一份可领取奖励,否则选择下一份未解锁奖励;
  3. 发送所选阶段的 stage_detail
  4. 在玩家选择其他阶段后,发送该阶段的新详情。

UI → 服务端

动作参数均为字符串:

动作参数用途
selectstageId查看指定阶段
claimstageId领取当前所选阶段
Packet.send('select', 'online-30m')
Packet.send('claim', 'online-30m')

阶段 ID 必须符合 [a-z0-9][a-z0-9_.-]{0,63}claim 回传的 ID 必须与当前详情一致;界面未打开、参数错误或操作过快时,服务端会忽略动作。

HUD:state

字段类型可空含义
cycleKeyString当前日期标识,例如 d:2026-08-21
serverEpochMillisLong发送数据时的服务器时间戳
onlineMillisLong发送时的累计在线时长
previousThresholdMillisLong上一阶段所需在线时长
stageIdString下一阶段 ID
stageNameString下一阶段名称
thresholdMillisLong下一阶段所需在线时长
claimAtEpochMillisLong预计达到下一阶段的时间戳
allUnlockedBoolean是否已经达到全部启用阶段

HUD 应在本地计算倒计时与进度:

clockOffset = serverEpochMillis - Time.currentTime()
now = Time.currentTime() + clockOffset
elapsed = Math.max(0, now - serverEpochMillis)
estimatedOnline = onlineMillis + elapsed
remaining = Math.max(0, claimAtEpochMillis - now)
progress = Math.max(0, Math.min(1,
  (estimatedOnline - previousThresholdMillis) /
  Math.max(1, thresholdMillis - previousThresholdMillis)
))

新的 state 会在玩家加入、资源加载完成、HUD 同步、阶段解锁、阶段修改或每日重置时发送;界面无需持续向服务端请求剩余时间。

阶段列表:stages

字段类型含义
cycleKeyString当前日期标识
cycleEndsAtEpochMillisLong当前日期结束时间
serverEpochMillisLong服务器时间戳
onlineMillisLong当前累计在线时长
selectedStageIdString / null默认选中的阶段 ID
stagesArray全部启用阶段的摘要

每个 stages[] 包含:

字段类型含义
idString阶段 ID,点击后原样回传
nameString奖励名称
thresholdMillisLong所需在线时长
stateString当前领取状态

阶段详情:stage_detail

该处理器包含 cycleKeyserverEpochMillisonlineMillisstagestage 字段如下:

字段类型含义
idString阶段 ID
nameString奖励名称
descriptionString奖励介绍
thresholdMillisLong所需在线时长
stateString当前领取状态
rewardCountNumber奖励项数量
rewardsArray当前阶段的奖励内容

每个 rewards[] 包含:

字段类型含义
idString当前奖励项的稳定 ID
typeStringitemecocommand
nameString奖励显示名称
contentString仅物品奖励提供的完整物品数据
iconString货币或命令奖励的资源路径,可为空

物品使用 Slot 与 setItemIcon 展示 content;货币和命令奖励使用 icon

领取状态:

含义
locked尚未达到在线时长
claimable可以领取
pending奖励投递中
claimed已领取
failed自动投递已暂停

领取结果:claim_result

{
  "code": "delivered",
  "success": true,
  "message": "领取成功,请前往系统邮箱查看。",
  "stageId": "online-30m"
}
字段类型可空含义
codeString领取结果代码
successBoolean本次领取是否成立
messageString可以直接展示给玩家的文字
stageIdString对应的阶段 ID
code含义
delivered奖励邮件已经送达
accepted_pending已记录领取,等待投递
already_reserved已领取,正在投递
stage_not_found阶段不存在
stage_disabled阶段未启用
not_unlocked在线时长不足
already_claimed已领取
delivery_failed暂未发放,需要管理员处理
internal_error本次操作未完成

收到 claim_result 后直接显示 message。Presence 随后会重新发送 stages 与当前阶段的 stage_detail

On this page