- 作者
- 17Artist
- 前置
- ArcartX
ArcartX-Chronos 隶属于 ArcartX 生态系统。它是一个高级玩家动作状态控制器,用于实现类似动作游戏中的连击系统、战斗技能派生、状态机控制等功能。
文档地址:点我
1. 状态控制器
为每个玩家配置独立的状态控制器
每个控制器包含多个状态 (State),如攻击、防御、闪避等
状态之间可以进行派生 (Derive) 和 取消 (Cancel) 转换
支持控制器继承,子控制器可以继承父控制器的状态配置
2. 连招链
配置复杂的连击派生路径
支持预输入 - 玩家可在当前动作结束前输入下一个动作
支持窗口期机制 - 包括派生窗口、取消窗口、霸体窗口、无敌窗口
配置衔接时间点来控制动作之间的衔接节奏
3. 输入
支持键盘按键(可自定义绑定)
支持鼠标操作 - 区分点击 (Click) 和长按 (Hold)
4. Glimmer 脚本
集成了 Glimmer 脚本系统,深度定制每一步的效果
5. 机制
每个状态可配置进入条件
支持冷却时间 (Cooldown) 控制
支持蓄力机制 (Charge)
支持无敌窗口格挡成功通过条件派生完美闪避反击/处决
等我有空了再录制效果视频
YAML:
# 控制器基础设置
setting:
# 客户端控制器ID
client_controller_id: "xxx"
# 继承某个控制器的所有状态(可选)支持多层继承
extends: ""
# 设为该控制器后设置玩家模型,如果不需要则留空或者删除该项
# 不过请注意,这个留空并非是不启用模型,而是不进行任何操作,如果你之前设置过模型,这里留空将不会移除之前的模型
model: ""
model_scale: 1.0
# 启用原版左右键效果[不建议开启,这个开了将允许原版左键攻击和右键交互]
enable_use: false
# 输入缓冲设置
input_buffer:
# 是否启用输入缓冲
enabled: true
# 最大缓冲数量
max_size: 3
# 输入有效期(ms),超过此时间的输入将被丢弃
lifetime: 300
# 触发器
action:
# 初始化 (这里顺便讲一下,每个玩家设置新的控制器会新建一个独立的上下文,你可以存储各种状态来辅助上下文条件判断等)
init: |-
var.attackTag = false
# 状态声明
state:
# 注意这个名字不要重复,后续作为状态ID
近战1段:
# 客户端控制器对应的子控制器名称
controller: "main"
# 客户端子控制器下的状态名称
stateName: "attack1"
# 播放速度 支持Glimmer
speed: "1"
# 持续时间[ms] 支持Glimmer
duration: "500"
# 缓冲释放衔接时间点[ms],-1表示在派生窗口内立即衔接(默认),>=0表示存储预输入并在到达该时间点时衔接
# 例如: buffer_at 400 表示在400ms时如果有预输入则衔接,这样可以实现"预输入"效果
buffer_at: -1
# 状态所属分组
group: "攻击"
# 是否开启蓄力 开启后动作结束将对玩家上下文赋值蓄力时间[ms] 通过self.getChargeTime() 获取
charge: false
# 状态进入条件
conditions:
# Glimmer 表达式 返回布尔类型
expression: "true"
# 如果处于以下组的状态时,无法进入该状态
blocked_group:
- "受控"
- "特殊运动"
# 冷却设置
cooldown:
# 是否开启冷却
enable: false
# 冷却时间 支持Glimmer
time: "0"
# 冷却组
group: "-"
# 窗口阶段【如果不需要哪个窗口阶段,直接删除对应阶段的配置项】
windows:
# 取消窗口期 【比如重击前摇 此时可以通过发起其它连招链的输入来取消】
cancel:
# 开始时间[ms](对于该状态生命周期)
start: 0
# 结束时间[ms] 同上,这个开始结束时间,会结合运算上方设置的speed的结果,比如设置的速度是2,那么此时这个窗口期是0-50毫秒
end: 100
# 派生状态窗口期【此时状态会接收下一步输入,来判断下一步转换为哪个状态】
derive:
start: 300
end: 450
# 无敌帧【这个时间内是无敌的,用于闪避】
invincible:
# 如果你希望某个窗口有多个时间节点,可以使用以下写法
ranges:
- start: 0
end: 100
- start: 400
end: 500
# 成功规避伤害标签持续时间,用于做完美闪避反击动作,当无敌窗口期成功阻止伤害,会对玩家添加该持续时间的标签,使 self.isInvincibleTag() 的返回值为true
invincible_tag_duration: 1000
# 霸体【这个期间不会进入受控状态】
super_armor:
start: 0
end: 50
# 执行设置
execute:
# 这里可以设置多个步骤 会按照设置的at(开始时间)顺序执行
默认:
# 开始时间
at: 6
# 执行表达式 Glimmer
expression: ""
# 连招链设置
combo:
# ================================
# 输入类型说明
# ================================
# type 可选值:
# - MOUSE_CLICK: 鼠标点击 (输入值 LEFT RIGHT)
# - MOUSE_HOLD: 鼠标长按 (输入值 LEFT RIGHT)
# - MOUSE_HOLD_RELEASE: 鼠标长按释放 (输入值 LEFT RIGHT)
# - KEY_PRESS: 按键点击 (输入值 按键设定中对应的按键名)
# - KEY_HOLD: 按键长按 (输入值 按键设定中对应的按键名)
# - KEY_HOLD_RELEASE: 按键长按释放 (输入值 按键设定中对应的按键名)
# - ACTION: 玩家动作 (输入值 JUMP SPRINT SPRINT_LEFT SPRINT_RIGHT SPRINT_BACK SNEAK)
# - 这个ACTION详细讲解下,分别是玩家进行下蹲输入、跳跃输入、冲刺输入(分别是前后左右,对于第三人称相机自由模式或者转向锁定期间,只会触发向前)
# - AUTO: 自动衔接 (无输入值) (上一个状态结束后进行衔接,比如蓄力动作结束后玩家没抬起鼠标则可以AUTO进行直接衔接)
#
# 模式:
# - AND: 所有输入必须同时满足 (用于组合键,所有输入需同时按下)
# - OR: 任一输入满足即可 (用于多种触发方式)
# - SEQUENCE: 按顺序在时间窗口内完成 (用于搓招)
# ================================
# 这个名字对应上面的状态ID
近战1段:
# 简单输入的写法 单一按键模式
input:
type: MOUSE_CLICK
value: LEFT
derive:
近战2段:
input:
type: MOUSE_CLICK
value: LEFT
derive:
近战3段:
input:
type: MOUSE_CLICK
value: LEFT
近战重击:
input:
type: MOUSE_CLICK
value: RIGHT
# 闪避 - 示例使用 OR 组合 (多种触发方式)
闪避:
input:
# 使用 OR 模式: 比如下方示例前冲/左闪/右闪/后退 都可以触发
mode: OR
# 这里设定多个输入
inputs:
- type: ACTION
value: SPRINT
- type: ACTION
value: SPRINT_LEFT
- type: ACTION
value: SPRINT_RIGHT
- type: ACTION
value: SPRINT_BACK
derive:
完美闪避反击:
input:
type: MOUSE_CLICK
value: LEFT
闪避反击:
input:
type: MOUSE_CLICK
value: LEFT