全局配置
可以使用 game 块用于设定游戏全局参数。
翻译系统会将所有 .adv 的 game 块汇总,之后放置在 game.config.ts 中。
配置项格式
在 Adv Script 中,所有的配置项都会写作:
<配置项> = <值>;的形式,其中分号可省略。
对于值的类型为代码块的配置项,需要将等号省略,即:
<配置项> {
// 一些代码
}基础配置
| 属性 | 类型 | 描述 | 默认值 |
|---|---|---|---|
name | string | 游戏标题 | 必填 |
mainScene | [scene]id | 游戏入口 | 必填 |
judgementMode | "d20" / "percent" | 游戏模式 | "d20" |
menu.<panel> | boolean | 控制菜单是否展示 panel | true |
game {
name = "游戏标题" // 必填
mainScene = startScene // 必填,游戏入口点(场景标识符)
judgmentMode = d20 // 可选,d20(默认)或 percent
menu { // 可选,菜单显示控制
bag = true
attu = true
shop = true
save = true
story = true
}
}时间系统
你可以通过配置 time 属性来配置时间。
game {
time {
start = "1925-09-12 08:00" // 必填,格式 YYYY-MM-DD HH:mm
showDate = false // 可选,默认 false
}
}showDate = true:显示MM-DD HH:MMshowDate = false:仅显示HH:MM- 若不配置
time表示禁用时间功能,此项完全隐藏
状态定义
你可以通过关键词 status 来定义一个状态组。
其定义语法如下:
status <group_id>[: "<group_name>"] {
<status_id>: "<status_name>" {
// props
}
// 可以填写属于这个组的更多属性
}其属性有:
| 属性 | 类型 | 描述 | 默认值 |
|---|---|---|---|
<group_id> | string | 属性组的 id | 必填 |
<group_name> | string | 属性组的显示名称 | <group_id> |
<status_id> | string | 属性的 id | 必填 |
<status_name> | string | 属性的显示名称 | <status_id> |
range | [<a>..<b>] | 状态的取值范围,超过最大值或低于最小值都会被设为最大值或最小值。其类型会在下面详细描述。此属性只在数字属性生效。 | [..] |
color | string | 属性主题颜色 | black |
display | 类型在下面详解 | 控制属性的显示方法 | hide |
status 与 item、enemy 等定义可在 game 内任意交错书写。
range 取值范围(数字型状态的上下限):
语法为 [a..b]:
a:下限,默认0b:上限,默认无限(Infinity)
示例:range = [0..100]、range = [..50](下限默认 0)、range = [0..](上限无限)、range = [..](全默认)。
display 取值:
| 值 | 效果 |
|---|---|
text | 顶部状态栏靠右显示数字/文字 |
process | 顶部状态栏靠左显示进度条 |
hide | 顶部隐藏,菜单中可见 |
none | 完全隐藏 |
示例:
game {
status base: "基础属性" { // 组 ID : 组显示名
hp: "生命值" { // 状态 ID : 状态显示名
range = [0..100] // 取值范围,[下限..上限]
value = 100
color = "#d32f2f"
display = process
}
}
status info: "个人信息" {
title: "称号" { // 字符串类型
value = "新手冒险者"
display = text
}
faction: "阵营" {
value = "中立"
display = hide
}
}
}物品定义
使用关键词 item 定义一个物品。其语法为:
item <id>[: "<name>"] {
// props
}属性
| 属性 | 类型 | 描述 | 默认值 |
|---|---|---|---|
<id> | string | 该物品的 id | 必填 |
<name> | string | 该物品的显示名称 | <id> |
summary | string | 该物品的一句话描述 | "" |
desc | string | 该物品的详细描述 | "" |
lore | string | 该物品的背景介绍 | "" |
default | number | 默认拥有的数量 | 0 |
事件
onUse
- 描述:物品被使用时触发的函数。
- 触发时机:当物品被使用。
- 参数
num:使用了多少个该物品。
- 返回值:
void - 默认值:
null
若为 null,则表示不允许被使用。
onDiscard
- 描述:物品被丢弃时触发的函数。
- 触发时机:当物品被丢弃。
- 参数
num:丢弃了多少个该物品。
- 返回值:
void - 默认值:
() => {}(请注意,这和 onUse 不一样。)
若为 null,则表示不允许被丢弃。
示例:
game {
item Water: "水" {
summary = "一瓶清澈透明的清水"
desc = "饮用后恢复 <b>15</b> 点生命值"
lore = "水是万物之源..."
default = 1
onUse (num) => { Adv.status.hp += 15 * num; }
onDiscard = null // null=禁止丢弃
}
item Gold: "金币" {
default = 0
}
}敌人模板
你可以通过关键词 enemy 来定义一个敌人模板。其语法为:
enemy <id>[: "<name>"] {
// props
}敌人模板可以在战斗中使用,极其快捷地配置敌人。
其属性完全兼容组件格式,其属性详情可参考第五章 战斗组件。
game {
enemy goblin: "哥布林" {
hp = 30
maxhp = 30 // 可选,默认等于 hp
atk = 8
def = 2
dex = 10
skill = [ // 可选
{
name = "爪击"
desc = "用利爪攻击"
targetNum = 1
onUse { targets[0].hp -= 5; }
}
]
move { // 必填
Adv.status.hp -= 5;
Adv.print("哥布林攻击!");
}
}
}角色定义
使用关键词 char 定义一个角色。其语法为:
char <id>[: "<name>"] {
// props
}属性
| 属性 | 类型 | 描述 | 默认值 |
|---|---|---|---|
<id> | string | 该角色的 id | 必填 |
<name> | string | 该角色的显示名称 | <id> |
desc | string | 该人物的描述 | "" |
impression | string[] | 对该人物的影响,可以在故事进行中逐渐丰富 | [] |
game {
char oldHunter: "老猎人" {
desc = "隐居在森林深处的神秘猎人"
impression = ["他说话时总是不自觉地抚摸那把旧弓。"]
}
char forestSpirit: "森林妖精" {
desc = "守护森林的小精灵"
impression = []
}
}线索专题
使用关键词 clue 定义一个线索专题。其语法为:
clue <id>[: "<name>"];属性
| 属性 | 类型 | 描述 | 默认值 |
|---|---|---|---|
<id> | string | 该线索的 id | 必填 |
<name> | string | 该线索的显示名称 | <id> |
game {
clue main: "主线线索";
clue side: "支线线索";
clue character: "人物线索";
}商店配方
使用关键词 rec 定义一个角色。其语法为:
rec <id>[: "<name>"] {
// props
}属性
| 属性 | 类型 | 描述 | 默认值 |
|---|---|---|---|
<id> | string | 该线索的 id | 必填 |
<name> | string | 该线索的显示名称 | <id> |
need
need 定义了合成该商品时必须消耗的原材料及其数量。配置项必须不为空,否则框架会报错。
请注意,原材料和产物必须在 items 中声明。
单个需求组:当
need直接填写一个对象时,表示只需要这一组材料。例如:typescriptneed: { Water: 2, Herb: 1 }表示合成需要消耗背包中的 2 个 Water 和 1 个 Herb。
多个需求组:当需要提供多种可选的合成配方时,可以将
need填写为一个数组。玩家只需满足其中任意一组需求即可合成。例如:typescriptneed: [{ Gold: 50 }, { Wood: 15, Stone: 10 }];表示可以用 50 金币购买,或者用 15 木材 + 10 石头来兑换。
带有 id 的需求组:当需要辨识哪一个需求组时,可以为需求组添加一个 id 属性,例如:
typescriptneed: [{ Gold: 50, id: 'MainRecipe' }];
default
类型:number,默认值为 Infinity。
default 表示该商品在游戏中的默认总库存数量。每当玩家成功合成一次,库存就会减少 1。当库存归零时,该配方将无法继续使用。
game {
rec Water {
need = { Herb: 2 }
default = 10
}
rec MagicSword {
need = [
{ Gold: 50, id: gold_recipe },
{ Wood: 15, Stone: 10, id: craft_recipe }
]
default = 1
}
}