清单画面
传送选 单、服务器导览、活动列表这类「分类 → 一页几行 → 选中看详情 → 点了执行指令」的画面,只要在画面文件里写 list: 资料,再用 grid 排出标签与清单行即可,不用写代码。默认的 teleport.yml 就是范例。
资料
list:
tabs-grid: tabs # 放分类标签的 grid 元素 ID(选填,没有分类就不写)
rows-grid: rows # 放清单行的 grid 元素 ID(必填)
rows: 4 # 每页几行(要和 rows 格子的数量一致)
tabs:
area: # 分类 ID
name: 地区传送 # 分类的栏位,名称可自取
accent: '#8FD8EA'
entries:
spawn: # 项目 ID
name: 回城
icon: 'vanilla:PAPER'
desc: 回到主城的出生点
commands: ['spawn'] # 以玩家身份执行
lake:
name: 森语湖畔
icon: 'vanilla:PAPER'
desc: 静谧的湖畔,适合垂钓
console: ['tp {player} 147 116 -41'] # 以控制台执行
dungeon:
name: 副本传送
accent: '#E9A66B'
entries:
fort:
name: 山寨
lv: 建议等级 1
desc: 山中的一处寨子
console: ['tp {player} 10000 50 10000']
- 分类与项目底下除了
entries、commands、console以外的栏位都可以自己取名(name、desc、lv…),画面上用键名读出来。 - 执行项目时先关闭选单,再依序执行
commands(玩家身份)与console(控制台),{player}换成玩家名称。
画面上的键名
清单行(rows-grid 的格子里)
在清单行的 cell 里直接写栏位名称,每一格会自动对应到该页的第 N 个项目:
| 键名 | 内容 |
|---|---|
{name}、{desc}… | 这一行项目的栏位;项目没有这个栏位时用所在分类的同名栏位 |
{state} | 这一格没有项目时是 empty(配合 states: {empty: ''} 隐藏底图) |
{hit} | 这一格没有项目时是 hidden |
{has-栏位} | 该栏位空白或是 0 时是 hidden,用在 visible: 或 state: |
item: '{icon}' | 项目的图示(栏位里写物品写法) |
选中的项目
游标移到某一行就会选中它(不必点),用来显示右侧的详情:
| 键名 | 内容 |
|---|---|
{sel.栏位} | 选中项目的栏位,例如 {sel.name}、{sel.desc};item: '{sel.icon}' 显示它的图示 |
{sel.tab} | 选中项目所在分类的 name |
还没选中时显示本页第一个项目。
分类与页码
| 键名 | 内容 |
|---|---|
{tab.栏位} | 目前分类的栏位,例如 {tab.name}、{tab.accent}(可以当 tint 或 color) |
{page} / {pages} | 目前页数 / 总页数 |
{prev} / {next} | 没有上一页 / 下一页时是 hidden,用在翻页按钮的 state: |
分类标签(tabs-grid 的格子里):
| 键名 | 内容 |
|---|---|
{name}、{accent}… | 这一格分类的栏位 |
{state} | 目前分类是 active,其他是空白 |
{mark} | 目前分类是空白,其他是 hidden(选中标记) |
{namecolor} | 目前分类是它的 accent,其他是 #E2EEF4 |
{count} | 这个分类有几个项目 |
按钮动作
清单画面用这几个 custom 动作:
| 动作 | 放在哪 | 作用 |
|---|---|---|
custom: tab | 分类标签格子的按钮 | 切换到这一格的分类(回到第 1 页) |
custom: prev / custom: next | 翻页按钮 | 上一页 / 下一页 |
custom: row | 清单行格子的按钮 | 执行这一行的项目 |
custom: go | 详情区的「前往」按钮 | 执行选中的项目 |
tabs:
type: grid
x: 120
y: 200
columns: 2
step: [260, 0]
cell:
tab:
type: button
image: list/tab.png
hover: list/tab_hover.png
state: '{state}'
states: {active: list/tab_active.png}
hit: [0, 0, 240, 60]
click:
left: ['custom: tab']
label:
type: text
text: '{name}'
color: '{namecolor}'
x: 120
y: 18
align: center