战斗中的技能与事件指令说明

来自部落与弯刀Wiki

特别注意:脚本编辑时注意所有特殊符号必须为半角!!!同时在剧情和所有配置表里也要避免使用带有特殊符号的字符串,以防止和脚本配合使用时发生脚本注入错误!

战斗中的指令脚本说明

为了在战斗中实现一些特定的剧情事件或是一些复杂的战斗机制,战斗中也使用了独立的剧情事件执行系统。其工作方式和大地图上的剧情事件执行器相似,只是执行事件时不会强制暂停游戏,除非手动调用PAUSE/RESUME指令。

战斗中打开控制台,可以以"bs@"加指令内容的格式来输入脚本指令来进行调试。例如:输入 “bs@KILL_ALL*1” 可实现敌方全灭效果

战斗中的脚本指令列表

指令 说明
(空) 角色对话框

用途:以角色立绘+文字打印的方式显示一段对话文本

格式:*角色ID(@立绘显示位置)#对话段落1#对话段落2#对话段落3#...#对话段落N

NOTHING 空指令

用途:空指令,什么都不做

格式:NOTHING*1

EVENT 跳转事件

用途:跳转并执行指定的剧情事件ID

格式:EVENT*剧情事件ID#执行客户端的用户ID(如果为0则默认都执行)#跳转至目标事件的子命令行index值(从0开始)

SELECT 角色对话选择框

用途:在角色对话框的基础上,当打印完对话内容后,弹出一个选项框让用户选择并返回结果(对应剧情事件中的结果命令中的[%result_code%])

格式:SELECT*角色ID#对话内容#1:选项一*条件组一;2:选项二*条件组二;...;N:选项N*条件组N   (只有当条件组满足或者为空时才会显示,否则隐藏该选项)

SCREEN 全屏字幕

用途:全屏显示一个屏幕字幕(默认背景为黑色,可设置背景透明度)

格式:SCREEN*字幕显示文字#字幕配全屏图资源名称(空为不配图)#背景透明度(可选,默认为1)

SHAKE_SCREEN 屏幕晃动

用途:执行一个屏幕晃动效果

格式:SHAKE_SCREEN*时间(秒)#烈度 (如:SHAKE_SCREEN*0.3#3)

DELAY 延时等待

用途:延时等待一小段时间(以真实时间秒数为单位,期间不能进行任何操作)

格式:DELAY*等待时间(秒)

PAUSE 暂停当前游戏场景

用途:暂停当前战斗场景

格式:PAUSE*

RESUME 继续当前游戏场景

用途:继续当前战斗场景

格式:RESUME*

SET_WEATHER 设置当前游戏天气

用途:设置并覆盖当前的游戏天气效果

格式:SET_WEATHER*天气效果命令

信息格式见 天气效果信息格式

BB 角色头像提示对话框

用途:在屏幕指定UI区域弹出一个有角色头像的对话框,不会打扰当前的操作且不需要进行操作,对话结束后自动消失

格式:BB*角色ID#对话内容#等待额外延时(以秒为单位,按照文字长度自动停留时间再加上此项)

B_TALK 战斗人物对话泡泡

用途:在战场中的单位头上弹出气泡对话框并显示对话内容

格式:B_TALK*对象ID#随机文字段落1|随机文字段落2|随机文字段落3|...|随机文字段落N

ENEMY_REINF 敌方单位增援

用途:控制敌方按照指定的单位表增加援军

格式:ENEMY_REINF*小兵列表命令(见 小兵列表格式 )

FRIEND_REINF 我方单位增援

用途:控制我方按照指定的单位表增加援军

格式:FRIEND_REINF*小兵列表命令(见小兵列表格式)

CMD_RETREAT 下达撤退指令

用途:命令我方所有单位开始撤退

格式:CMD_RETREAT*0为我方全体1为敌方全体

BATTLE_OVER 强制结束战斗

用途:立即强制结束当前的战斗

格式:BATTLE_OVER*代码(0为胜利 1为失败)

KILL_ALL 全灭目标

用途:立即对一方所有单位造成足以秒杀此单位的巨量伤害

格式:KILL_ALL*0为我方 1:为敌方

UNDEAD_PLAYER 主角不死

用途:给玩家控制的角色增加一个不死的BUFF

格式:UNDEAD_PLAYER*1

UNDEAD_ALL 所有单位不死

用途:给场上所有的单位增加一个不死的BUFF

格式:UNDEAD_ALL*0:仅我方 1:敌我双方

STOP_ALL 所有单位停止行动

用途:命令场上所有的单位停止当前行动

格式:STOP_ALL*0:恢复 1:停

EXEC_SKILL 单位使用技能

用途:命令场上指定单位使用技能

格式:EXEC_SKILL*释放者ID#技能ID,技能等级(默认1级)#目标坐标的x,y#坐标参数1的x,y


释放者ID为目标的识别ID,可以有以下特殊值

  • PLAYER:玩家  GM_A:进攻方的预设对象 GM_B:防守方的预设对象
  • THIS:指令发起者(一般返回发射器自身)
  • EMITTER=ID:指定ID的地城发射器,可为this表示当前地城发射器
  • RND_FRIEND_UNIT:随机友方单位 RND_ENEMY_UNIT:随机敌方单位

当释放者为预设对象时,坐标参数1代表技能释放的其起始坐标

DUNGEON_SPAWN 刷新地城单位

用途:刷新战场地图上已经定义过的地城单位

格式:DUNGEON_SPAWN*控制ID#是否无视状态(当该单位已被击败时仍可刷新 0:否[默认] 1是)

SET_DUNGEON_TS 设置地城触发器状态

用途:设置地城中指定触发器的状态

格式:SET_DUNGEON_TS*控制ID#状态(0正常 -1禁用)

DUNGEON_OVER 结束本次地城战斗

用途:结束本次地城战斗并执行相应操作

格式:DUNGEON_OVER*结果代码(0:退出 1:胜利 2:失败)

SET_AREA 设置障碍区域状态

用途:启用或禁用指定的障碍区域

格式:SET_AREA*控制ID#状态(0正常 -1禁用)

SET_WIDGET 设置装饰物件状态

用途:启用或禁用指定的地图装饰物件

格式:SET_WIDGET*控制ID#状态(0正常 -1隐藏)

SET_TP 设置地城传送器状态

用途:设置地城中的传送器及其关联模型的状态

格式:SET_TP*控制ID#状态(0正常 -1禁用)

SET_EMITTER 设置发射器状态

用途:设置指定发射器的状态

格式:SET_EMITTER*控制ID#状态(0正常 -1禁用)

SET_PLAYER_MODEL 设置玩家角色模型

用途:设置玩家角色的模型

格式:SET_PLAYER_MODEL*单位模型描述信息

SET_PLAYER_SKILL 设置玩家当前技能

用途:设置玩家角色当前的技能

格式:SET_PLAYER_SKILL*技能ID1,等级|技能ID2,等级|...|技能ID n,等级 (最多4个技能)

SKILL_CMD 执行技能指令

用途:直接执行技能指令

格式:SKILL_CMD*技能指令内容

SET_DG_INTVAR 设置战斗中的自定义整形字段

用途:设置战斗中的自定义整形字段

格式:SET_DG_INTVAR*字段ID#设置值#设置模式(可选 1为增加模式(原值加上设置值) 其他为直接赋值模式)#监视信息(可选,当存在时在变量监视界面上显示变量监视信息)

SET_DG_STRVAR 设置战斗中的自定义字符串字段

用途:设置战斗中的自定义字符串字段

格式:SET_DG_STRVAR*字段ID#设置值

SET_CAMERA 设置镜头模式

用途:设置战斗中的镜头跟随模式

格式:SET_CAMERA*跟随模式#参数


目前支持的镜头跟随模式及参数含义

  • 0:跟随主角,无参数(默认)
  • 1:跟随指定目标,参数为目标单位的对象ID
  • 2:战场坐标位置,参数为坐标X,Y
ATTACK 命令攻击

用途:强制命令一个单位开始攻击另外一个单位

格式:ATTACK*攻击发起者对象ID#攻击目标对象ID

CMD_QUEUE 单位控制命令序列

用途:为一个单位指定控制命令队列,该单位会强制优先按照此命令队列进行执行

格式:CMD_QUEUE*目标对象ID#命令脚本的事件ID(将命令队列的内容填写至该战斗中事件当中来执行)


命令队列的格式为(时间参数表示该秒数后执行下一条):

指令类型1[,时间参数]:指令参数

指令类型2[,时间参数]:指令参数

...


当前支持的队列指令类型有:

  • skill_cmd:执行技能指令:参数为一行技能指令
  • use_skill:使用技能:技能ID,技能等级#目标单位对象参数#目标位置参数
  • event:执行战斗事件:战斗中事件ID#执行条件(可选)
  • move_to:移动至指定点:目标坐标参数#速度参数(该指令中时间参数无效,只有当单位正确到达目标后执行下一条)
  • set_dir:设置单位方向:参数为方向
  • keep_act:保持一个动作:动作ID(为空时表示待机动作)#循环次数(小于等于0为无限循环 默认1)#单次动作时间(<=0为始终保持 默认0)  注:此命令中时间参数无效,需等待动作循环执行结束为止,当无限循环时只有对该单位下达新指令方可结束动作保持

注意,以上命令中所有的坐标参数当为2参数时表示目标位置的x,y地图坐标,当3参数时第三个参数表示位置类型(0:地图坐标 1:战场坐标)


SET_POLICY 设置单位的战斗策略

用途:为一个单位设置当前战斗策略

格式:SET_POLICY*目标对象ID#主策略类型#参数1#位置参数#单位TAG筛选标记(仅当目标对象ID为空时生效)#目标单位ID(主要用于跟随等策略指定目标)


当前支持的主策略类型有:

  • 0:强攻(参数为唤醒半径,小于等于0为无限距离)
  • 1:固守(参数为守卫半径)  
  • 2:跟随(参数为跟随半径)
  • 3:攻略目标点
SET_UNIT_TIMER 设置单位挂载计时器

用途:为一个单位设置一个具有触发功能的计时器并完成特定的触发事件

格式:SET_UNIT_TIMER*目标对象ID#计时器ID#时间参数(<=0时为关闭 只有当单位身上挂有”on_timer”触发器事件时有效)

FINISH_CAST 立即释放吟唱中的技能

用途:立即释放出单位当前正在吟唱中的技能(只有当目标正在吟唱该技能时生效)

段1,值1|字段2.,值2|...)

REPLACE_SKILLS 替换单位技能

用途:替换单位当前的技能

格式:REPLACE_SKILLS*目标对象ID#技能ID1,等级|技能ID2,等级|...|技能ID n,等级 (一次最多4个技能,当等级为0时表示移除该技能)

REPLACE_DGSKILL 替换单位地城技能

用途:替换单位当前的地城技能

格式:REPLACE_DGSKILL*目标对象ID#地城技能ID,等级(技能ID为空或者null表示关闭该角色地城技能)

BATTLE_MSG 播放战场消息

用途:播放一条战场消息

格式:BATTLE_MSG*消息内容#消息类型(0:普通 1:警告)

SET_BATTLE_CHECKER 设置战斗结束检查器工作状态

用途: 设置战斗结束检查器工作状态

格式:SET_BATTLE_CHECKER*工作状态(0:关闭 1:开启)

SHOW_BATTLEOVER_BTN 显示手动结束战斗按钮

用途: 显示手动结束战斗按钮

格式:SHOW_BATTLEOVER_BTN*1

SHOW_DEBUG_INFO 显示调试信息

用途: 显示调试信息

格式:SHOW_DEBUG_INFO*状态代码(0:关闭 1:开启主角身上BUFF状态显示)

OPENSTORE 打开交易界面

用途:打开与指定商人的交易界面

格式:OPENSTORE*商人ID

RESET_STORE 刷新商人所持商品表

用途:根据配置刷新商人所持的商品表

格式:RESET_STORE*商人ID

SET_TIMER 设置全局定时器

用途:设置一个定时器来延时执行一些脚本

格式:SET_TIMER*计时器ID#时间参数(秒 <=0为关闭)#定时器结束时执行的事件ID#监视字段信息(可选,如果存在则在变量监视UI中显示剩余时间)

AREA_SPAWN 区域刷新出单位

用途:在指定的刷新区域批量刷新出指定的单位

格式:AREA_SPAWN*目标区域控制ID#英雄列表#单位表(格式同ENEMY_REINF指令)#所属阵营索引#默认策略(格式为:策略代码:策略参数 同SET_POLICY指令)#刷新出单位的Tag标记(可选)#单位附加属性表(可选)

GETITEMS 主角获得道具或资源

用途:主角直接获得指定的道具列表(注意:游戏中的金钱、经验等资源都可以通过此方法来获得,只要传入正确的映射ID即可)

格式:GETITEMS*道具列表信息

REMOVE_ITEMS 移除指定道具或资源

用途:根据指定的道具数量从主角道具表中移除指定数量的道具

格式:REMOVE_ITEMS*道具列表

LOOT 执行掉落判定

用途:按照列表执行一次掉落检定(LOOT格式见 物品掉落信息格式)

格式:LOOT*Loot列表

ADD_EXP 指定英雄获取经验

用途:对一个指定的英雄角色增加经验值

格式:ADD_EXP*经验#目标英雄ID(可选,默认为主角)

SETSKILL 对指定英雄设置技能

用途:对一个指定的英雄角色设置技能,根据操作对象可实现增加、替换、移除操作

格式:SETSKILL*角色ID(可选,默认为主角)#需要添加的技能信息表(格式为"技能ID1,等级|技能ID2,等级|...")#需要移除的技能表(可选 多个技能以"|"分隔)

CALL_LUAFUNC 执行LUA函数

用途:执行当前加载的LUA脚本中的指定函数名

格式:CALL_LUAFUNC*脚本中的函数名

ADD_INTER_OBJECT 添加一个战斗内可交互对象

用途:向当前的战斗中添加一个可交互对象

格式:ADD_INTER_OBJECT*交互说明信息#地图位置坐标#普通状态模型ID(定义在D大地图单位模型表)#可见不可交互状态模型ID#粒子效果信息(仅普通状态可见,格式为:粒子效果文件名(位于映射路径:Asset\BuildSource\map_res\Particles\),偏移x,偏移y)#初始状态(0:普通 1:可见不可交互 2:隐藏)#控制ID(用来进行控制定位)#内含物品道具信息列表(可为空)#交互时触发的事件ID(可选)#交互后行为(可选,默认为0 0:移除消失 1:隐藏待自动刷新或手动刷新 2:可见不可交互并待刷新 3:不进行操作在脚本中手动处理)#自动刷新时间(可选,仅当前一个参数不为0时生效 默认0, 当<=0时为手动刷新)#自动刷新事件ID(当自动刷新时触发的事件ID)

REMOVE_INTER_OBJECT 移除战斗内可交互对象

用途:按照控制ID移除指定的可交互对象

格式:REMOVE_INTER_OBJECT#控制ID(当交互脚本事件中可用“THIS”内置ID表示自身对象)

SET_INTER_OBJECT 修改可交互对象的状态

用途:按照控制ID修改指定可交互对象的状态

格式:SET_INTER_OBJECT*控制ID(当交互脚本事件中可用“THIS”内置ID表示自身对象)#新的状态值(0:普通 1:可见不可交互 2:隐藏)

TELEPORT 传送至其他副本地图

用途:将当前的所有玩家角色都传送到指定的副本地图位置

格式:TELEPORT*副本地图ID(需定义在“F副本地图信息表”中):地图坐标X,地图坐标Y

REMOTE_EVENT 远程请求执行事件

用途:本地请求所有客户端执行一个事件

格式:REMOTE_EVENT*事件ID

SELECTION_VIEW 全屏特殊剧情选择

用途:打开一个全屏特殊剧情选择界面

格式:SELECTION_VIEW*剧情图片文件名#剧情内容(支持“\n”表示换行)#选择项(参考SELECT*)

VOICE_OVER 旁白

用途:展现一句旁白界面

格式:VOICE_OVER*旁白内容

SETINTVAR 设置全局自定义整形变量

用途:设置一个整形的自定义变量(整数,会被存档所记录),其中一部分变量字段可对游戏中的一些逻辑参数进行关联(已在程序内部定义并关联的整形自定义变量见《自定义变量参数表》),并可通过内置查询参数进行查询([%int_val:ID%])

格式:SETINTVAR*变量ID#当前整数值

SETSTRVAR 设置全局自定义字符串变量

用途:设置一个字符串的自定义变量(文本,会被存档所记录)

格式:SETSTRVAR*变量ID#当前字符串值

SETFLOATVAR 设置全局自定义浮点变量

用途:设置一个浮点型的自定义变量(小数,会被存档所记录)

格式:SETFLOATVAR*变量ID#当前浮点值



专门用于战斗场景中条件查询方法

查询指令 说明
[%result_code%] 战斗中各种事件脚本的查询结果(如:选择框的结果)
[%bs_time%] 当前战斗进行的时间(整秒数)
[%rnd:A,B%] 返回一个每次都不相同的大于等于A小于等于B的随机值
[%last_rnd%] 返回上一次[%rnd:A,B%]查询到的结果
[%const_rnd%] 返回一个执行周期内相同的0-100的随机值
[%last_rnd_pos_x%] 返回上一个随机位置结果的X
[%last_rnd_pos_y%] 返回上一个随机位置结果的Y
[%last_rnd_pos%] 返回上一个随机位置坐标
[%last_skill%] 当前查询源对象上一个使用技能的ID
[%this_type%] 当前查询源对象的类型 0英雄 1小兵
[%aim_type%] 当前查询目标对象的类型 0英雄 1小兵
[%this_level%] 当前查询源对象的等级
[%aim_level%] 当前查询目标对象的等级
[%this_hp_pct%] 当前查询源对象的HP百分比
[%aim_hp_pct%] 当前查询目标对象的HP百分比
[%this_mp_pct%] 当前查询源对象的MP百分比
[%aim_mp_pct%] 当前查询目标对象的MP百分比
[%this_hp%] 当前查询源对象的HP当前值
[%aim_hp%] 当前查询目标对象的HP当前值
[%this_mp%] 当前查询源对象的MP当前值
[%aim_mp%] 当前查询目标对象的MP当前值
[%friends_num%] 我方剩余人数
[%enemy_num%] 敌方剩余人数
[%hit_enemy%] 判断当前命中的目标是否caster的敌人。敌方1 非敌方0
[%battle_res%] 当前当前战斗结果
[%skill_lv:SKILL_ID%] 查询当前source对象指定技能ID的等级,无则返回0
[%inner_cd:ID%] 查询当前source对象内部CD的值,默认返回0
[%aim_inner_cd:ID%] 查询当前target对象内部CD的值,默认返回0
[%base_atk%] 当前技能等级所对应的基础物理攻击力
[%base_magic_atk%] 当前技能等级所对应的基础魔法攻击力
[%standard_magic_atk%] 当前技能等级所对应的魔法最终攻击力
[%this_buff:BUFF_ID%] 查询当前source对象指定BUFF_ID的当前层数
[%aim_buff:BUFF_ID%] 查询当前target对象指定BUFF_ID的当前层数
[%stat:STAT_FIELD%] 查询当前source指定属性字段的当前数值
[%aim_stat:STAT_FIELD%] 查询当前target对象指定属性字段的当前数值
[%stat_raw:STAT_FIELD%] 查询当前source指定属性字段的基础数值(不包含Buff,只包含装备与技能被动加成的角色属性值)
[%aim_stat_raw:STAT_FIELD%] 查询当前target对象指定属性字段的基础数值(不包含Buff,只包含装备与技能被动加成的角色属性值)
[%this_weapon%] 当前查询source对象的武器类型
[%aim_weapon%] 当前查询target对象的武器类型
[%charge_val%] 本次伤害的蓄力值(0~100)
[%cmd_argval%] 当前命令行的参数值
[%cmd_argval_next%] 返回当前命令行参数值后立即加1
[%rpt_index%] 当前命令行所在循环的INDEX值
[%find_tag:TAGINFO%] 执行一次目标单位查找,TAGINFO为目标单位信息,参数格式见 技能对象格式说明,当查询到合适目标时返回1否则返回0
[%add_find_tag:TAGINFO%] 从已查找单位列表中增加目标单位,始终返回1,TAGINFO同上
[%rm_find_tag:TAGINFO%] 从已查找单位列表中排除目标单位,始终返回1,TAGINFO同上
[%reset_find_list%] 重置当前查找列表,始终返回1
[%rnd_enum:PROB_A,RES_A:PROB_B,RES_B:PROB_C,RES_C[:...]%] 随机枚举值,根据所有项的概率分布返回其中一个项的RES值。

比如:[%rnd_enum:25,1:40,2:35,3%]表示有25%的概率返回”1”,40%的概率返回”2”,35%的概率返回”3”

[%dg_sp_state:ID%] 返回当前战斗地图中ControlID为ID的刷新单位的当前状态 0:未刷新 1:已刷新 -1:已击败
[%dg_unitnum:TAG%] 返回当前战斗地图中剩余未击败并且Tag为TAG的刷新单位的个数
[%fd_sum%] 当前查询source对象的友军倒下计数器值
[%ed_sum%] 当前查询source对象的敌军倒下计数器值
[%fd_mod:MOD_VAL%] 当前查询source对象的友军倒下计数器值与MOD_VAL取余后的值
[%ed_mod:MOD_VAL%] 当前查询source对象的敌军倒下计数器值与MOD_VAL取余后的值
[%dg_int_val:KEY%] 返回指定KEY的自定义地城整形字段的值
[%dg_str_val:KEY%] 返回指定KEY的自定义地城字符串字段的值
[%emitter_pos:ID,MIN-MAX%] 返回指定指定ID的发射器中心位置,距其中心MIN至MAX的一个随机位置,并记录入last_rnd_pos
[%unit_timer:UNIT_ID,TIMER_ID%] 返回指定UNIT_ID单位身上所附加的ID为TIMER_ID的计时器剩余时间
[%this_intvar:ID%] 返回当前查询source对象身上的自定义整形数值(技能指令set_unit_intvar设置)
[%aim_intvar:ID%] 返回当前查询target对象身上的自定义整形数值(技能指令set_unit_intvar设置)
[%defeat_hit%] 查询当前命令是否是在击杀单位指令中执行的并且目标单位已被击杀(0:否 1:是) 注意:只能在技能中的命中命令指令中生效
[%eft_count:TAG%] 查询当前场上指定TAG的特效体数量 注意:仅支持查询由caster本单位创建的特效体
[%this_id%] 当前查询对象的单位ID
[%aim_id%] 当前查询目标对象的单位ID
[%hit_dmg_val%] 查询当前施法中对目标造成的实际伤害或治疗的实际数值 注意:只能在命中指令中生效
[%stealth_hit%] 查询当前技能或伤害是否是在隐身状态下进行的 0否1是
[%hit_count%] 查询当前技能命中判定生效的次数
以下指令需要客户端版本高于0.7.4.2
[%this_skills%] 返回当前查询source对象当前的技能列表
[%aim_skills%] 返回当前查询target对象当前的技能列表
以下指令需要客户端版本高于0.8.0.1
[%this_userid%] 返回当前查询source对象当前的客户端ID
[%aim_userid%] 返回当前查询target对象当前的客户端ID
[%player_money%] 玩家身上的金钱数
[%item_number:物品key%] 返回背包中某种物品(或者资源)的数目
以下指令需要客户端版本高于0.8.2.1
[%battle_place:INFO%] 查询当前战场(攻城战)所在地点的信息字段,参数说明见《通用剧情事件指令说明》中[$tagplace:INFO:ID$]字段的说明
[%unit_num:TAG%] 查询当前场上所有活跃单位为指定TAG的单位总数量
[%this_tier%] 返回本单位的单位等阶 英雄为9
[%aim_tier%] 返回目标单位的单位等阶 英雄为9
[%this_armor%] 返回本单位的护甲类型
[%aim_armor%] 返回目标单位的护甲类型
[%get_dis:posA:posB%] 返回位置A和位置B之间的距离,位置参数参考add_eft指令中的说明
以下指令需要客户端版本高于1.0.3.3
[%expr:key:id%] 使用技能表中预设的表达式进行计算,key为表达式键,id为技能id,省略则默认为当前技能
[%expr_desc:key:id%] 将技能表中预设的表达式转换为文字描述,仅用于技能描述,用法同expr
[%this_atk_rat%] 返回本单位的实际攻击速率(根据s_攻速计算,范围从0.33~2.5)
[%this_atk_rat_r%] 返回本单位的实际攻击速率的倒数(用于时间计算,范围从0.4~3.0)
[%aim_atk_rat%] 返回目标单位的实际攻击速率(根据s_攻速计算,范围从0.33~2.5)
[%aim_atk_rat_r%] 返回目标单位的实际攻击速率的倒数(用于时间计算,范围从0.4~3.0)

伤害表达式格式

游戏战斗中,所有形式的攻击、技能、特效、指令等对单位造成的伤害,结算时都是通过一个统一的接口来实现的。该接口的主要传入参数是一个数据结构,此数据结构可在各种脚本里通过伤害值表达式的形式来指定。一般伤害值表达式的格式如下:

key1:value1;key2:value2;...;keyN:valueN

伤害值表达式可以嵌入到一些数值表里(如BUFF列表的状态值等),或者直接嵌入到数值计算公式([&expression&]格式中);

目前可支持的伤害表达式键值有:

  • type 伤害类型:0:普通近战攻击 1:普通远程攻击 2:技能伤害 3:治疗 4:回蓝
  • dmg 物理伤害数值,值为伤害值公式
  • t_dmg 真实伤害数值(所有治疗效果都为此值),值为伤害值公式
  • hit 命中参数(-1000~1000) 当不能闪避时为-1000
  • blk 被招架参数(-1000~1000) 当不能被招架时为-1000
  • cri 暴击参数(-1000~1000) 当不能暴击时为-1000
  • act 是否播放受击动作 1是 0否
  • eft 受击特效ID
  • trig 是否触发伤害效果(如反伤等)
  • attack_type 指定伤害的武器攻击类型
  • buff 受到该伤害时附带的BUFF效果, 格式为 BuffID,[time],[overlay],两个参数为可选参数,分别表示时间及层数


伤害值公式仅支持标准数学公式,包含以下运算符号:+-*/^%(),可嵌入一些预定义字段,所有预定义字段写在形如[%cmd%]的格式内,目前支持的预定义字段有:

  • [%rnd:min_val,max_val%]:随机一个大于等于min_val,小于等于max_val的整数
  • [%field%]:field表示任意一个定义在角色属性字段中的数值


技能指令编辑说明

技能指令是用来在战斗中实现各种技能效果的基础元素。在战斗中,所有单位执行技能时都会将该技能中的技能指令放入战斗技能指令执行队列中,根据各自的运行环境依次执行。

在技能配置表中技能命令条目以”\n”换行符分隔,每条由延迟时间*[条件表达式(可选)]#命令内容组成,参考格式如下:

0*条件表达式1#技能命令1
0.2#技能命令2
……

当条件表达式不为空时,根据条件表达式判定结果执行。

条件语句中可以使用一些内置命令来实现一些例如重复之类的特殊效果,例如

*REPEAT_START:9
语句1
语句2
[@0.01*[%rpt_index%]@]#技能命令
...
语句N
*REPEAT_END

表示将REPEAT_START行与REPEAT_END之间的所有行重复9遍,期间可以通过[%rpt_index%]来查询当前语句处于第几次循环

*SELECT_UNITS:[目标筛选条件表达式](注意,次数查询cast_info中的target为当前单位)
语句1
语句2
...
语句N
*SELECT_END

表示对SELECT_UNITS行与SELECT_END之间所有的命令行,对SELECT_UNITS:后所有满足指定条件表达式的对象使用,并以该对象作为caster对象

其中,嵌入到[@...@]中的语句为保留两位小数的结果运算取值,此类查询仅在技能命令中有效。

目前支持的技能命令有:

技能指令 说明
stop_act 立即停止当前所有技能动作并按照之前指令行动


stop_act#1
add_eft 向战场中添加一个预定义的特效体


add_eft#特效体ID#初始位置#运动参数#修改伤检对象(可选,为空时为默认)#附带伤害表达式(可选,为空时按照特效表中定义的伤害表达式计算,格式见6.4节)#目标参数(见7.4节说明)#特效体TAG(用于replace_eft指令查询)

初始位置格式为:位置类型,偏移x,偏移y,偏移z(偏移量为相对于初始方向的偏移)

支持的位置类型有:

  • cast_pos:技能施放动作的预设位置
  • tag_pos:技能施放目标单位或者目标坐标的位置
  • hit_pos:技能命中目标单位当前的位置
  • unit_pos:技能施放单位当前的位置
  • start_pos:技能释放时的开始位置
  • rnd_pos:技能释放单位周围一个任意的位置
  • dim_pos:通过set_dimpos命令定义的预设位置
  • reinf_pos:施法者阵营方的增援位置
  • emitter_pos=EMITTER_ID:ID为EMITTER_ID的发射器发射点位置
  • unit_round=DIR:LEN:距离施法者正方向偏移DIR角度,距离为LEN的位置
  • rnd_round=RAD[-MIN_RAD]:施法者半径RAD范围内的随机位置,可选参数MIN_RAD表示随机范围距中心的最小距离,默认为0
  • eft_pos=TAG:返回查询到的第一个指定特效体TAG的特效体位置,如不存在则返回caster的当前位置 注意:仅支持查询由caster本单位创建的特效体
  • ……

运动参数格式为:运动类型:运动参数(形如:参数1,参数2,参数3.....)

支持的运动类型有:

  • 0:不运动 无参数
  • 1:运动至技能目标点 偏移x,偏移y,偏移z
  • 2:运动至技能目标单位 无参数(当目标参数不为空时使用目标参数指定的目标,否则按照技能释放目标)
  • 3:向指定方向运动 偏移角度,移动距离(最大不超过战场宽度)
  • 4:向指定方向往返运动 偏移角度,移动距离(最大不超过战场宽度)
  • 5:跟随目标运动 跟随类型(0固定相对位置,1发射点位置),偏移x,偏移y,偏移z,持续时间(-1为永久),环绕半径,环绕速度(绕一圈的时间,<0时为逆时针运动,默认为0),初始偏转方向角度
  • 6:运动至dim_pos 偏移x,偏移y,偏移z
  • 7:环绕目标位置运动 偏移x,偏移y,偏移z,环绕半径,持续时间(-1为永久),环绕速度(绕一圈的时间,<0时为逆时针运动),初始偏转方向角度

例:7:0,0,0,500,5,2.5,90 为 围绕`(0,0,0)`,进行半径 `500` 每`2.5秒`旋转一周,总共`旋转5秒`,偏转90度

  • 8:进行贝塞尔曲线运动 旋转角度,运动时间(运动完轨迹所需的时间:秒),曲线顶点数,坐标1x,坐标1y,坐标1z,坐标2x,坐标2y,坐标2z,[...],坐标Nx,坐标Ny,坐标Nz

(表内坐标均为相对于目标方向上的坐标偏移) 例:8:0,3,0,0,0,100,100,0,0,200,0 为 旋转角度`0` 沿着曲线点`(0,0,0)` `(100,100,0)` `0,200,0`进行运动


dmg_check 进行伤害判定


dmg_check#判断类型#伤害值表达式#目标对象参数#判断参数表(“,”分隔)#是否过滤掉重复检定对象(可选,默认关闭)#触发条件(当条件满足时执行后一参数填写的技能)#触发执行技能ID,执行延时(秒,默认为0)

支持的判断类型有:

  • 0:单体判断(目标对象参数为目标单位见下一小节,为空表示技能目标)
  • 1:半径范围判断 目标对象参数为目标类型(0:敌方 1:我方 2:双方) 参数表中参数1为参考位置类型(见add_eft命令的位置类型) 参数2,3,4,5分别为偏移坐标的x,y,z及半径
  • 2:多边形范围判断 目标对象参数同上 参数表中参数1同上 参数2为旋转角度 参数3为多边形顶点数,参数4以后为以参考点坐标为(0,0)的多边形坐标信息


add_buff 对目标施加BUFF
add_buff#buff ID#BUFF目标参数#持续时间(如不指定则采用BUFF默认持续时间)#叠加层数(默认为1)#上限层数(默认为配置表中的数值,只有大于0时生效)#是否保护(开启保护后此BUFF无法被remove_buff移除,只能时间到后主动移除 0否,1是)


可支持的内置目标参数有:

  • caster:技能释放者
  • target:目标单位(指向性技能的目标或技能命中的目标)
  • roleid,ROLEID:查询单位绑定人物ID为ROLEID的一个目标对象
  • buffgiver,BUFFID:查询当前caster身上一个ID为BUFFID的BUFF给与者
  • find_tag_res:查询指定目标的结果单位(必须先执行一次[%find_tag:TAGINFO%]查询才可调用)
  • tag_next_fu,距离D:当前命中目标的下一个小于距离D的友方单位
  • caster_next_fu,距离D:施法者的下一个小于距离D的友方目标
  • caster_next_eu,距离D:施法者的下一个小于距离D的敌方目标


remove_buff 移除目标的BUFF
remove_buff#移除目标(同上)#移除方式#参数1,参数2,参数3...

目前支持的移除方式如下

  • 0:全部移除
  • 1:移除指定BUFF 参数1为BUFF ID,参数2为移除层数(默认-1为全部移除)
  • 2:移除有害BUFF 参数1为移除数量(默认-1全部移除),参数2为BUFF子类型(默认-1不限)
  • 3:移除有益BUFF 参数1为移除数量(默认-1全部移除),参数2为BUFF子类型(默认-1不限)


dart_move 突进类移动
dart_move#动作ID#移动类型#速度参数#冲撞质量#绑定特效#运动结束承接技能,技能等级(默认1级)[可为空],时间偏移(秒,在运动结束前开始执行承接技能向前的时间偏移量>=0)[可为空]#操作对象(可选,默认为caster)#修正目标位置(可选,参数格式见节2)#是否强制(默认0  为1时强制移动)

移动类型分为:

  • 0:匀速运动
  • 1:跳跃
  • 2:击退运动
  • 3:击飞运动 (当为击飞运动时,速度参数为击飞的滞空时间)

速度参数为角色移动时的水平速度(当速度小于等于0时为闪现至目标)

冲撞质量在匀速运动时表示刚体质量,0为无视碰撞 (当为跳跃运动时该参数代表跳跃高度)——由于不使用物理引擎了,目前暂时无用了,参数还必须要填写。

绑定特效为运动时附加在单位上的特效ID

运动结束承接技能为执行运动结束后立即执行的技能ID


stop_dartmove 停止当前突进运动
stop_dartmove#1


explode 在目标位置进行一次爆破物理效果
explode#初始位置(见 技能位置查询参数格式说明)#爆破半径#力度参数


add_force 对目标单位进行一次击退效果
add_force#力度参数#目标单位(可省略,默认target)


play_sound 播放一个指定音效
play_sound#音效ID#音效位置(同第一节解释)


unit_sound_dic 单位根据模型配置播放指定音效字典中的字段对应音效
unit_sound_dic#音效字典KEY值#单位目标参数


cast_sound 播放一个指定音效(在施法者处)
cast_sound#音效ID


chain_eft_to 播放一个链式特效
chain_eft_to#释放单位#目标单位#特效预制体#传播速度(-1为瞬间)#维持时间#命中目标的伤害值表达式

释放目标的参数见 技能 指令目标参数说明

taunt 嘲讽效果,让目标立即攻击释放者
taunt#释放者#目标单位


use_skill 立即触发一个不需要吟唱时间的单体目标技能(可以是当前施法者没有的技能)
use_skill#技能ID,技能等级(默认1级)#释放者#目标单位#目标位置参数


set_cmd_val 操作当前命令行参数
set_cmd_val#操作方式#操作值D

操作方式:0:设置为值D  1:增加值D 2:减少值D


注意:与其他缓冲后依次执行的指令不同,该指令不会进入执行队列,将立即执行生效。这是为了在一些需要在执行语句上下文中使用临时变量进行信息中继所设计的结构。


set_dimpos 设置预设位置参数
set_dimpos#操作方式#操作参数[#偏移参数(仅在查询单位位置时生效)]

操作方式:

  • 0:我方增援出兵位置 操作参数分别为 x,y,z的偏移
  • 1:查询目标单位位置 操作参数为查询指令(见第4小节)
  • 2:查询技能参数位置 操作参数为查询指令(见第2小节位置信息)


play_sk_act 播放一个已定义的技能动作
play_sk_act#目标单位#技能动作ID名称#播放速度系数(默认1)#是否停止移动(默认否)


summon_unit 召唤一个单位
summon_unit#召唤方式#对象参数[,血量百分比(可选参数,默认为100)]#初始位置参数#持续时间#附加状态表#附加特效参数#单位阵营参考目标参数(可选参数,默认为caster)#替换角色技能(可选参数,为空为不替换)#默认策略参数

召唤方式:0:对象的镜像  1:通过人物ID召唤  2:通过小兵ID召唤

对象参数: 当召唤方式为0时表示对象单位(参考本章4节);当召唤方式为1时表示人物模版ID,等级;当召唤方式为2时表示兵种单位ID

初始位置参数见本章2节

持续时间小于等于0时表示本次战斗永久持续,大于0时表示持续秒数

附加状态为该单位的附加属性表,如: s_生命,-[&[%stat:s_生命%]*0.5&]|s_攻击,-[&[%stat:s_攻击%]*0.5&]   表示召唤出的单位生命与攻击力均为原单位的一半

附加特效参数:默认为0 当为1时显示半透明影子效果

单位阵营参考目标参数:以指定的目标当前的阵营作为召唤单位当前的阵营,默认为施法者所在的阵营

替换角色技能参数:格式为普通角色技能表信息,如: 技能1,1|技能2,1|... 如果需要复制角色技能,可使用[%this_skills%]或[%aim_skills%]来复制施法者或者目标的技能

默认策略参数:格式为:策略类型,策略参数(默认为“0,0“,支持的策略类型参考SET_POLICY指令,但是不支持攻略地点类型3。例如:参数“2,500”,表示在半径500范围内进行跟随)

set_unitpos 强制改变目标单位的当前位置
set_unitpos#操作对象(同4节)#位置信息(同2节)


set_active 设置目标单位的激活状态
set_active#操作对象参数(同4节)#是否激活(1是0否),是否隐藏(1是0否,仅在非激活时有效)


kill_unit 目标立即被击倒(无视无敌属性)
kill_unit#操作对象参数(同4节)


down_unit 目标主动倒下
down_unit#操作对象参数(同4节)


b_talk 在目标头上弹出一个对话气泡
b_talk#操作对象#对话内容#持续时间(秒数,可省略)


yell 目标呼喊出几个字(多为技能)
yell#操作对象#喊话内容


warning_area 播放一个圆形战场警告区域
warning_area#目标位置信息#半径#持续时间(秒)


timeline 播放一个TimeLine技能对象
播放Timeline动作并执行对应的技能指令文件(.txt)
timeline#指定的TimeLine ID#播放速度(默认1)#timeline是否可被移动打断(0不行,1可以,默认0)


timeline_anim 播放一个TimeLine技能的动作部分
只播放Timeline动作,不执行对应的技能指令文件(.txt)
timeline_anim#指定的TimeLine ID#播放速度(默认1)#timeline是否可被移动打断(0不行,1可以,默认0)


block_act 设置当前施法者的动作锁定状态
block_act#状态类型(见下表)#是否可打断该状态(0否 1仅自身可打断 2不可打断)#锁定时间(单位:秒 Timeline里编辑时可不指定该时间,以再度调用 block_act#0#0#0的时间差为准)

可用的锁定状态

  • 0:不锁定
  • 1:锁定攻击及移动
  • 2:仅锁定攻击


camera_shake 镜头抖动
camera_shake#时长(秒)#幅度


rotate 控制角色进行旋转
rotate#目标单位参数#起始偏转角度(相对于当前方向)#共计旋转角度数(负数为反转)#持续时间(秒)

持续时间大于0秒时会在持续时间内朝目标方向转身 持续时间等于0秒则会按照角色的转身速度朝起始角度转身 持续时间小于0秒时为瞬间转身

replace_eft 查找并用指定的特效体在当前位置替换目标特效体
replace_eft#指定的特效体TAG#匹配数量(≤0时为匹配全部,>0为匹配生成时间最早的有限几个)#用于替换的特效体ID(可为空表示直接停止目标特效)#初始位置(默认空或hit_pos表达式(同add_eft)#运动参数(可选,同add_eft)#修改伤检对象(可选,为空时为默认)#附带伤害表达式(可选,同add_eft)#目标参数(同add_eft)#特效体TAG(用于replace_eft指令查询)#原特效体创建者的对象参数(可选,用于查询时筛选,默认为所有人)


hitstop 角色顿帧
hitstop#操作对象#曲线起点降速幅度(倍率)#曲线终点降速幅度(倍率)#时长(秒)

(结束后角色动作速度恢复为1倍)

global_hitstop 全局顿帧
global_hitstop#曲线起点降速幅度(倍率)#曲线终点降速幅度(倍率)#时长(秒)

(结束后全局速度恢复为1倍)


set_skill_cd 更改施法者的指定技能CD
set_skill_cd#技能ID表(为空或者为ALL表示单位的所有技能,多个技能ID以”|”分隔)#操作方式(0:减少 1:直接赋新值)#操作值(单位:秒)


set_inner_cd 更改目标的内部计时CD
set_skill_cd#计时ID#操作值(单位:秒)#操作对象,默认施法者


get_items 战斗中立即获得道具或资源(增加的道具只对主角自己使用时有效)
get_items#道具列表(道具表格式同剧情指令中的GETITEMS指令)#获得道具的对象目标参数


get_items_bycamp 战斗中立即为指定阵营方获得道具或资源(增加的道具只对主角自己使用时有效)
get_items#道具列表(道具表格式同剧情指令中的GETITEMS指令)#是否敌对方(0:我方 1:敌方)


set_unit_intvar 为此单位设置一个自定义的整形变量值
set_unit_intvar#变量ID#操作方式(0:±改变 1:直接赋值)#操作值#操作对象目标参数(可选,默认为施法者)


call_battle_event 执行一个指定的战斗事件
call_battle_event#事件ID#执行者的目标参数(可选,事件脚本中THIS对象的默认值)


change_skill 替换施法者单位的当前技能列表
change_skill#技能列表信息


revert_skill 还原施法者的当前技能列表
revert_skill#1


change_dungeon_skill 替换施法者的地城技能
change_dungeon_skill#技能ID,等级


revert_dungeon_skill 还原施法者的地城技能
revert_dungeon_skill#1


replace_tag_skill 将一个单位的指定技能暂时替换为其他技能
replace_tag_skill#原技能ID#替换为新的技能ID,等级(如需还原该技能则为空)#替换时长(≤0时为永久,>0为持续指定秒数)#对象单位目标参数


change_mp 改变一个单位当前的MP值
change_mp#对象单位目标参数#改变值(可以是公式)#是否播放数字特效(0:否 1:是)#播放受击特效ID(可选,为空不播放)


待增加指令:
cancel_all_cmd 取消执行当前指令队列中的所有后续技能指令
cancel_all_cmd#操作对象


stop_stealth 取消目标的隐身
移除目标所有带bf_隐身的Buff
stop_stealth#操作对象


change_hit_val 修改伤害数值
修改本次伤害判定的伤害数值
change_hit_val#操作对象#变化值(正数增加,负数减少)

仅在特定的角色属性字段(hit_chance、do_crit、hit_by、on_crit)的触发时命令中有效

操作对象为需要修改该次伤害数值的对象,hit_chance、do_crit为Target,hit_by、on_crit为Caster

set_hit_val 设置伤害数值
设置本次伤害判定的伤害数值
set_hit_val#操作对象#目标值

说明同change_hit_val


战斗中的特殊对象ID

战斗指令中经常需要进行一些目标单位的查询,通常是通过角色ID来查找,但是可以通过以下内置ID返回特定的查询对象:

特殊内置ID 说明
PLAYER 玩家单位
GM_A A方的固定内置单位(用于实现一些无特定施法者的技能指令)
GM_B B方的固定内置单位(用于实现一些无特定施法者的技能指令)
THIS 当前执行指令单位自身(一般用于单位挂载脚本中)
RND_ENEMY_UNIT 随机的敌方小兵单位(非当前PLAYER一方)
RND_FRIEND_UNIT 随机的友方小兵单位(非当前PLAYER一方)
EMITTER={EMITER_ID} 指定ID为EMITER_ID的发射器单位


单位对象附加触发脚本编辑说明

通过在地城单位对象中的触发命令中定义,可对该单位附加若干触发器脚本。角色表中角色也可以通过在TAG中指定attached_script字段为一个脚本事件ID来给该角色附加触发脚本。定义格式为:

[CMD_BEGIN]#触发类型1#触发条件(可选)#触发参数(可选)
命令行1
命令行2
...
命令行N
[CMD_END]
[CMD_BEGIN]#触发类型2#触发条件(可选)#触发参数(可选)
命令行1
命令行2
...
命令行N
[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%][<=]0
SET_DG_INTVAR*测试计数器1#1#1
SKILL_CMD*THIS#THIS#0#add_buff#中立#caster B_TALK*THIS#别打了!别打了!我认输,什么都给你!
CMD_RETREAT*1
[CMD_END]