Skip to content

全局配置 ​

可以使用 game 块用于设定游戏全局参数。

翻译系统会将所有 .adv 的 game 块汇总,之后放置在 game.config.ts 中。

配置项格式 ​

在 Adv Script 中,所有的配置项都会写作:

<配置项> = <值>;

的形式,其中分号可省略。

对于值的类型为代码块的配置项,需要将等号省略,即:

<配置项> {
    // 一些代码
}

基础配置 ​

属性类型描述默认值
namestring游戏标题必填
mainScene[scene]id游戏入口必填
judgementMode"d20" / "percent" 游戏模式"d20"
menu.<panel>boolean控制菜单是否展示 paneltrue
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:MM
  • showDate = 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>]状态的取值范围,超过最大值或低于最小值都会被设为最大值或最小值。其类型会在下面详细描述。此属性只在数字属性生效。[..]
colorstring属性主题颜色black
display类型在下面详解控制属性的显示方法hide

status 与 item、enemy 等定义可在 game 内任意交错书写。

range 取值范围(数字型状态的上下限):

语法为 [a..b]:

  • a:下限,默认 0
  • b:上限,默认无限(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>
summarystring该物品的一句话描述""
descstring该物品的详细描述""
lorestring该物品的背景介绍""
defaultnumber默认拥有的数量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>
descstring该人物的描述""
impressionstring[]对该人物的影响,可以在故事进行中逐渐丰富[]
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 直接填写一个对象时,表示只需要这一组材料。例如:

    typescript
    need: { Water: 2, Herb: 1 }

    表示合成需要消耗背包中的 2 个 Water 和 1 个 Herb。

  • 多个需求组:当需要提供多种可选的合成配方时,可以将 need 填写为一个数组。玩家只需满足其中任意一组需求即可合成。例如:

    typescript
    need: [{ Gold: 50 }, { Wood: 15, Stone: 10 }];

    表示可以用 50 金币购买,或者用 15 木材 + 10 石头来兑换。

  • 带有 id 的需求组:当需要辨识哪一个需求组时,可以为需求组添加一个 id 属性,例如:

    typescript
    need: [{ 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
    }
}