战斗脚本补充说明
战斗脚本用于在战斗中组织剧情事件、技能效果、伤害结算和单位附加脚本。战斗剧情指令、战斗查询和技能指令已有独立索引,本页补充它们共享的规则和格式。
战斗中的事件执行
Section titled “战斗中的事件执行”战斗中使用独立的剧情事件执行系统。它与大地图剧情事件执行器类似,但执行事件时不会强制暂停战斗;需要暂停或继续战斗时,可以在事件中使用 PAUSE、RESUME 等战斗剧情指令。
战斗中打开控制台时,可以用 bs@ 加指令内容的格式输入战斗脚本指令进行调试。
bs@KILL_ALL*1角色属性字段触发方式
Section titled “角色属性字段触发方式”部分角色属性字段不只是数值,也可以在战斗中触发命令。触发方式决定字段何时检查、条件参数如何填写,以及命令作用在哪类对象上。
| 触发方式 | 条件参数 | 说明 |
|---|---|---|
| by_code | 由游戏内部逻辑处理,或没有默认实现的属性字段。 | |
| halo | 对象类型#距离 | 光环效果,每帧对光环内目标执行触发命令。对象类型:0 友方,1 敌方,2 双方,3 共鸣。 |
| hit_chance | 攻击类型列表;可附加 指令*条件 | 命中目标时以字段值为概率触发。攻击类型:0 近战,1 远程,2 技能。可用 swallow_dmg 清除本次伤害并终止后续判定。 |
| do_crit | 攻击类型列表 | 暴击时触发。 |
| every_5hits | 每 5 次攻击时,以字段值为概率触发。 | |
| hit_by | 攻击方式 | 被攻击时触发。0 所有,1 近战,2 远程。 |
| on_crit | 攻击方式 | 被暴击时触发。0 所有,1 近战,2 远程。 |
| on_dodge | 攻击方式 | 闪避时触发。0 所有,1 近战,2 远程。 |
| on_block | 攻击方式 | 格挡时触发。0 所有,1 近战,2 远程。 |
| on_dead | 指令*条件 | 死亡时触发。可用 stop 终止该次死亡判定。 |
| on_skill | 技能系 | 角色使用技能时触发;不指定时表示所有技能。 |
| in_abnormal | 异常状态类型 | 角色进入异常状态时触发。0 所有,1 昏迷,2 定身,3 嘲讽,4 沉默,5 平静,6 恐惧,7 隐身,8 控制或混乱。 |
| out_abnormal | 异常状态类型 | 角色摆脱异常状态时触发。异常状态类型同 in_abnormal。 |
| buff_weaken | 目标 Buff ID | 对拥有指定 Buff 的目标提升伤害效果;提升百分比为 Buff 层数 * 字段数值 / 100。 |
| buff_dmgadd | Buff ID | 自身拥有指定 Buff 时提升受到伤害效果;提升百分比为 Buff 层数 * 字段数值 / 100。 |
| defeat_tag | 击败敌人时触发。 | |
| on_frienddown | 友军被击倒时触发。 | |
| on_enemydown | 敌军被击倒时触发。 | |
| polymorph | 模型ID#模型动作ID#变身特效ID#恢复特效#动态模型信息 | 单位变身效果。模型 ID、动作 ID 或动态模型信息填 RAW 时使用原模型信息。 |
| global_add_stat | 条件表达式组 | 战斗前根据条件为指定对象范围增加属性。 |
| week_getitem | 物品ID | 每周获得指定物品;多个物品 ID 使用 # 分割,仅主角生效。 |
| name_prefix | 颜色代码#名称文本大小 | 为名称增加前缀。颜色使用 16 进制代码,文本大小可省略。 |
伤害表达式格式
Section titled “伤害表达式格式”攻击、技能、特效和指令对单位造成伤害时,通常通过伤害表达式描述结算参数。伤害表达式由多个键值对组成,并使用分号分隔。
key1:value1;key2:value2;...;keyN:valueN| 键 | 说明 |
|---|---|
| type | 伤害类型。0 普通近战,1 普通远程,2 技能伤害,3 治疗,4 回蓝,5 空判定。 |
| dmg | 物理伤害数值,值为伤害值公式。 |
| t_dmg | 真实伤害数值;治疗效果也使用此值。 |
| hit | 命中参数,范围 -1000 到 1000;不能闪避时填 1000。 |
| blk | 被招架参数,范围 -1000 到 1000;不能被招架时填 -1000。 |
| cri | 暴击参数,范围 -1000 到 1000;不能暴击时填 -1000。 |
| act | 是否播放受击动作。1 是,0 否。 |
| eft | 受击特效 ID。 |
| trig | 是否触发伤害效果,例如反伤。 |
| attack_type | 指定伤害的武器攻击类型;类型 900 为巫术攻击,对应巫术防御。 |
| buff | 受到该伤害时附带的 Buff。格式:BuffID,[time],[overlay],时间和层数为可选参数。 |
伤害值公式支持 +、-、*、/、^、%、括号,并可嵌入 [%cmd%] 形式的预定义字段。
| 字段 | 说明 |
|---|---|
| [%rnd:min_val,max_val%] | 随机一个大于等于 min_val、小于等于 max_val 的整数。 |
| [%field%] | field 可替换为任意角色属性字段,返回该字段的数值。 |
战斗中的特殊对象 ID
Section titled “战斗中的特殊对象 ID”战斗指令中需要定位目标单位时,除了填写角色 ID,也可以使用以下内置对象 ID。
| 特殊 ID | 说明 |
|---|---|
| PLAYER | 玩家单位。 |
| GM_A | A 方固定内置单位,用于实现无特定施法者的技能指令。 |
| GM_B | B 方固定内置单位,用于实现无特定施法者的技能指令。 |
| THIS | 当前执行指令的单位自身,常用于单位挂载脚本。 |
| RND_ENEMY_UNIT | 随机敌方小兵单位,敌方相对于当前 PLAYER 一方。 |
| RND_FRIEND_UNIT | 随机友方小兵单位,友方相对于当前 PLAYER 一方。 |
| EMITTER={EMITTER_ID} | 指定 ID 为 EMITTER_ID 的发射器单位。 |
单位对象附加触发脚本
Section titled “单位对象附加触发脚本”地城单位对象可以在触发命令中定义附加触发脚本。角色表中的角色也可以通过 TAG 字段 attached_script 指定脚本事件 ID,为该角色挂载附加触发脚本。每个对象可以挂载多个触发器。
[CMD_BEGIN]#触发类型1#触发条件(可选)#触发参数(可选)命令行1命令行2...[CMD_END][CMD_BEGIN]#触发类型2#触发条件(可选)#触发参数(可选)命令行1命令行2...[CMD_END]| 触发类型 | 说明 |
|---|---|
| on_spawn | 单位刷新出来时触发。 |
| enter_combat | 进入战斗时触发。 |
| get_hurt | 单位受到伤害时触发。 |
| dead | 单位死亡时触发。 |
| on_timer | 单位身上的计时器到时时触发,计时器由 SET_UNIT_TIMER 设置。 |
| on_skill | 单位开始释放技能时触发;触发参数为技能 ID。 |
| hp_pct | 单位血线第一次低于目标百分比时触发;触发参数为目标血线百分比。 |
| interactive | 具有战斗内可交互对象的单位进行交互行为时触发。 |
[CMD_BEGIN]#enter_combat#B_TALK*THIS#关门,放狗![CMD_END][CMD_BEGIN]#get_hurt#[%this_hp_pct%][<=]5&[%dg_int_val:测试计数器1%][<=]0SET_DG_INTVAR*测试计数器1#1#1SKILL_CMD*THIS#THIS#0#add_buff#中立#casterB_TALK*THIS#别打了!别打了!我认输,什么都给你!CMD_RETREAT*1[CMD_END]