LogoArcartX Doc
Aria 脚本

概述

Aria 脚本引擎在 Chronos 里的用法与写法

Aria 是什么

Aria 是 Chronos 与 ArcartX 共用的脚本引擎。 在 Chronos 里,凡是需要「根据玩家的实时状态动态计算」的地方,填的都是一段 Aria 表达式:想让攻速加成缩放动作播放速度、想让蓄力越久收招越慢、想让饥饿值不足时进不了某个状态、想在动作播放到第 100 毫秒时打出一次伤害判定——这些都靠 Aria 完成。

在 Chronos 的 Aria 表达式上下文中,self 始终指向当前玩家。围绕 self,你可以读取它的血量、朝向、蓄力时长,也可以让它冲刺、放技能、进入另一个状态。

  • 本章只收录 Chronos 插件自己提供的语句(实体选择器、蓄力信息、朝向吸附、状态控制)。你在配置里还会用到大量通用语句(如 getFood、dash、castMythicMobSkill、teleport 等)——它们由 ArcartX 本体提供,请查阅本体文档的 服务端 Aria。
  • 此外,Chronos 注册的全是 服务端 Aria 脚本,而非客户端 Aria 脚本,请注意不要混淆。

Aria 在 Chronos 中的一些说明

Aria 表达式散落在服务端控制器(controllers/<控制器ID>.yml)的多个字段里。不同字段对「表达式算出来是什么」有不同要求:

配置位置期望结果典型用途
state.<状态>.speed数字缩放动作播放速度、状态时长、窗口及 STATE 时间域的 execute;REAL 循环不随它缩放
state.<状态>.duration数字(毫秒)动态设置状态持续时间
state.<状态>.conditions.expression布尔能否进入这个状态的门槛
state.<状态>.cooldown.time数字(毫秒)动态冷却时间
state.<状态>.execute.<步骤>.expression语句到达某个时间点时执行的动作
setting.action语句触发器

speed 与 duration 期望的是数字,conditions.expression 期望的是布尔(true/false),别把类型写反。这些字段在 YAML 里都写成字符串,例如 speed: "1 + var.attackSpeedBonus"。


关于 Aria 的一些使用说明

  • 本文不会讲解过于深入的 Aria 语法问题。关于 Aria 的详细语法,建议系统阅读 Aria 文档,它是 ArcartX 生态中嵌入最深的脚本语言,也是深度使用 ArcartX 生态插件的关键要素。
  • 这里只讲解一些与 Chronos 联动 Aria 的简单说明。

self:当前玩家

  • self 就是正在运行这段脚本的玩家对象。Chronos 的绝大多数语句都是在它身上调用的:
  • 一些例子
self.getFood()        # 读饥饿值(本体语句)
self.isOnGround()     # 是否踩在地面(本体语句)
self.getChargeTime()  # 读本次蓄力时长(Chronos 语句)

var.:当前控制器内的自定义变量

用 var. 前缀可以存取自定义变量。每名玩家的当前控制器都有自己的脚本上下文,变量可以跨状态保持;更换、移除控制器或重载时通常会重新初始化。临时控制器覆盖结束时是否恢复保存的变量,取决于恢复策略。常见做法是在 setting.action.init 里初始化,再在各个状态里读写:

setting:
  # 设置控制器时执行一次,先把变量准备好
  action:
    init: |-
      var.comboCounter = 0
      var.attackTag = false
 
state:
  攻击1段:
    execute:
      记连击:
        at: 100
        expression: "var.comboCounter = 1"

状态配置示例:蓄力斩

以下展示蓄力和释放两个状态;还需在连招链中用长按和松开输入把它们连接起来。

state:
  # 第一段:蓄力(charge:true 从进入开始实时计时)
  蓄力开始:
    controller: main
    state_name: charge_hold
    duration: "3000"
    charge: true
    buffer_at: 200
    conditions:
      expression: "self.getFood() >= 3 && self.isOnGround()"
    windows:
      derive:
        start: 0
        end: 3000
 
  # 第二段:释放(松开左键派生到此)
  蓄力释放:
    controller: main
    state_name: charge_release
    charge: false
    # 蓄得越久,收招时间越长(duration 用 Aria 动态算)
    duration: "400 + self.getChargeTime() * 0.2"
    execute:
      结算伤害:
        at: 80
        expression: |-
          var.power = self.getChargeTime() / 1000     # 毫秒转秒,当作威力倍率
          self.turnToNearby(6.0, 0.6)                 # 出手前吸附朝向最近目标
          self.castMythicMobSkill("charge_slash", var.power)

示例中的 charge_slash 需要在 MythicMobs 中定义,目标范围由该 MythicMobs 技能配置决定;这里以玩家为施法者调用一次。

self.getChargeTime() 在蓄力状态中返回实时蓄力时长,离开后返回冻结的时长(毫秒)。本例在释放状态读到的是上一段蓄力结果,详见 玩家信息 与控制器文档的蓄力小节。

On this page