LogoArcartX Doc

界面协议

自定义 Wardrobe 界面时可用的动作与数据处理器

界面协议

默认界面文件位于 plugins/Wardrobe/ui/wardrobe.yml

动作参数按顺序读取。页码从 1 开始,预设索引从 0 开始;savepay 发送的是当前预览的完整时装 ID 集合。

客户端动作

动作参数用途
pagepage请求切换到指定页面
updateshowAll, search, category, quality更新筛选条件
presetpresetIndex切换预设或请求解锁提示
unlock确认解锁下一个预设
savefashionId...校验并保存完整穿搭
payfashionId...购买缺少的时装并保存穿搭

page

Packet.send('page', targetPage)

参数需要是有限数字。服务端会先向 0 取整,再将它限制到 1..maxPage;切页后返回新的 pagemaxPagecurrentview

update

Packet.send('update', showAll, searchText, selectedCategory, selectedQuality)
参数类型说明
showAllBooleantrue 显示全部目录,false 只显示已拥有时装
searchString搜索时装 ID 或显示名;空文本或 * 表示不限
categoryString配置部位或 showType;空文本表示不限
qualityString品质完整名称;空文本表示不限

名称、ID、部位和品质匹配均不区分大小写。更新筛选后,页码会回到第 1 页。

preset

Packet.send('preset', presetIndex)

presetIndex 是从 0 开始的整数。选择已解锁预设会立即切换并刷新穿搭;选择未解锁预设时,服务端会发送 preset 弹窗,界面确认后再发送 unlock

unlock

Packet.send('unlock')

该动作不带参数。服务端根据玩家当前已解锁数量确定下一个预设,并重新读取是否允许解锁、经济提供器和费用。客户端不需要发送目标索引或价格。

save

Packet.send('save', val.model.getCostumeTags())

发送当前预览中的全部时装 ID。没有 ID 表示保存空穿搭;服务端最多处理前 6 个 ID,部位唯一和套装互斥。

如果预览中包含尚未拥有但允许购买的时装,服务端不会立即保存,而是发送 pay 确认弹窗。

pay

Packet.send('pay', val.model.getCostumeTags())

参数与 save 相同,仍是确认时的完整预览。服务端会重新检查时装、拥有状态、经济提供器和当前价格,再完成扣款与保存。

数据处理器

处理器数据用途
presetCountNumber配置允许的最大预设数量
pageNumber当前页码,从 1 开始
maxPageNumber总页数,最小为 1
currentArray<String>当前预设保存的时装 ID
viewArray<WardrobeView>当前页面的时装卡片
collectionValueNumber玩家当前有效时装的收藏值
unlockedPresetNumber玩家已解锁的预设数量
currentPresetNumber当前预设索引,从 0 开始
modelArray<WardrobeModel>当前预设的模型预览数据
popInfoString 或 Array<String>弹窗正文或分行信息
popStateString弹窗类型

界面打开前,服务端会先发送 presetCount;客户端确认界面已经打开后,再发送收藏值、预设、页面、卡片和模型数据。

WardrobeView 结构

view 中每张时装卡片包含:

字段类型说明
idStringWardrobe 时装 ID
modelIDString界面预览使用的 ArcartX 模型 ID
modeStringTRADITIONTRADITION_HIDETRADITION_SINGLE
modelTypeStringArcartX 使用的模型部位类型
metaObject时装配置中的界面展示数据
stateNumber玩家拥有状态与当前模型适用状态
displayInfoString拥有期限、购买价格或其他状态说明
showTypeString界面筛选和展示使用的部位类型

示例:

[
  {
    "id": "summer_hat",
    "modelID": "wardrobe:summer_hat",
    "mode": "TRADITION_SINGLE",
    "modelType": "HEAD",
    "meta": { "display": "夏日礼帽", "scale": 1.0 },
    "state": 1,
    "displayInfo": "永久",
    "showType": "HEAD"
  }
]

state 的值:

含义
1已拥有,并且当前玩家模型可以应用
2未拥有,但当前玩家模型可以应用
3当前玩家模型不能应用时装

state: 3 的优先级高于拥有状态。即使玩家已经拥有该时装,只要当前模型不适用,卡片仍会显示为不可应用。

部位字段

配置部位showTypemodelType
HEADHEADHEADHEAD_HIDE
BODYUPPER_BODYUPPER_BODYUPPER_BODY_HIDE
LEGSLOWER_BODYLOWER_BODYLOWER_BODY_HIDE
FEETFOOTFOOTFOOT_HIDE
DECORATIONOTHEROTHER
SUITSETOTHER

普通部位的 modeTRADITION_SINGLE。套装在 hide: false 时使用 TRADITION,在 hide: true 时使用 TRADITION_HIDE。界面应直接使用服务端返回的字段,不要从 showType 自行推算模型类型。

WardrobeModel 结构

model 用于构造当前预设的模型预览:

字段类型说明
idStringWardrobe 时装 ID
modelStringArcartX 模型 ID
modeString穿戴模式
typeString模型部位类型

modelcurrent 来自同一套已保存预设。前者用于构造预览模型,后者用于恢复卡片选中状态;玩家模型暂时不适用时,两项数据仍会保留。

弹窗类型

popState用途
preset确认解锁下一个预设
pay确认购买缺少的时装并保存
info显示成功、失败或普通提示

打开与关闭

  • 玩家执行 /wardrobe open 后,服务端先发送最大预设数,再等待客户端确认界面已经打开;
  • 玩家数据尚未加载完成时,服务端会关闭本次界面;
  • 切换预设、保存、购买、解锁、时装过期或模型状态变化后,服务端可能重复发送完整数据,界面应按最新值覆盖;
  • 修改 ui/wardrobe.yml 后,执行 /wardrobe reload 即可重新加载界面。

On this page