战斗中的技能与事件指令说明
特别注意:脚本编辑时注意所有特殊符号必须为半角!!!同时在剧情和所有配置表里也要避免使用带有特殊符号的字符串,以防止和脚本配合使用时发生脚本注入错误!
目录
战斗中的指令脚本说明
为了在战斗中实现一些特定的剧情事件或是一些复杂的战斗机制,战斗中也使用了独立的剧情事件执行系统。其工作方式和大地图上的剧情事件执行器相似,只是执行事件时不会强制暂停游戏,除非手动调用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:敌我双方 |
| |
EXEC_SKILL | 单位使用技能
用途:命令场上指定单位使用技能 格式:EXEC_SKILL*释放者ID#技能ID,技能等级(默认1级)#目标坐标的x,y#坐标参数1的x,y
当释放者为预设对象时,坐标参数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*跟随模式#参数
|
ATTACK | 命令攻击
用途:强制命令一个单位开始攻击另外一个单位 格式:ATTACK*攻击发起者对象ID#攻击目标对象ID |
CMD_QUEUE | 单位控制命令序列
用途:为一个单位指定控制命令队列,该单位会强制优先按照此命令队列进行执行 格式:CMD_QUEUE*目标对象ID#命令脚本的事件ID(将命令队列的内容填写至该战斗中事件当中来执行)
指令类型1[,时间参数]:指令参数 指令类型2[,时间参数]:指令参数 ...
注意,以上命令中所有的坐标参数当为2参数时表示目标位置的x,y地图坐标,当3参数时第三个参数表示位置类型(0:地图坐标 1:战场坐标)
|
SET_POLICY | 设置单位的战斗策略
用途:为一个单位设置当前战斗策略 格式:SET_POLICY*目标对象ID#主策略类型#参数1#位置参数#单位TAG筛选标记(仅当目标对象ID为空时生效)#目标单位ID(主要用于跟随等策略指定目标)
|
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#当前浮点值 |
角色属性字段触发方式
触发方式 | 条件参数 | 对象参数 | 说明 |
---|---|---|---|
by_code | 由内部代码实现或者没有默认实现的属性字段 | ||
halo | 对象类型#距离
对象类型分为 0:友方 1:敌方 2:双方 3:共鸣方式 |
光环效果,每帧更新一次,对光环内的目标执行触发时命令。 | |
hit_chance | 限定的攻击类型,为空为不限制,否则以“,”分隔
攻击类型分为 0:普通近战攻击 1:普通远程攻击 2:技能攻击 |
命中目标时以该字段值为触发概率进行触发 | |
do_crit | 限定的攻击类型,为空为不限制,否则以“,”分隔
攻击类型分为 0:普通近战攻击 1:普通远程攻击 2:技能攻击 |
暴击时触发 | |
every_5hits | 每5次攻击时以字段值为概率进行触发判断 | ||
hit_by | 攻击方式
0:所有类型 1:近战攻击 2:远程攻击 |
被攻击时触发 | |
on_crit | 攻击方式
0:所有类型 1:近战攻击 2:远程攻击 |
被暴击时触发 | |
on_dodge | 攻击方式
0:所有类型 1:近战攻击 2:远程攻击 |
闪避时触发 | |
on_dead | 指令*条件
指令类型有: stop:终止该次死亡判定 |
死亡时触发 |
专门用于战斗场景中条件查询方法
查询指令 | 说明 |
---|---|
[%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当前值 |
[%this_hp_max%] | 当前查询源对象的HP最大值 |
[%aim_hp_max%] | 当前查询目标对象的HP最大值 |
[%this_mp_max%] | 当前查询源对象的MP最大值 |
[%aim_mp_max%] | 当前查询目标对象的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(偏移量为相对于初始方向的偏移) 支持的位置类型有:
运动参数格式为:运动类型:运动参数(形如:参数1,参数2,参数3.....) 支持的运动类型有:
例:7:0,0,0,500,5,2.5,90 为 围绕`(0,0,0)`,进行半径 `500` 每`2.5秒`旋转一周,总共`旋转5秒`,偏转90度
(表内坐标均为相对于目标方向上的坐标偏移) 例: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) 支持的判断类型有:
|
add_buff | 对目标施加BUFFadd_buff#buff ID#BUFF目标参数#持续时间(如不指定则采用BUFF默认持续时间)#叠加层数(默认为1)#上限层数(默认为配置表中的数值,只有大于0时生效)#是否保护(开启保护后此BUFF无法被remove_buff移除,只能时间到后主动移除 0否,1是)
|
remove_buff | 移除目标的BUFFremove_buff#移除目标(同上)#移除方式#参数1,参数2,参数3... 目前支持的移除方式如下
|
dart_move | 突进类移动dart_move#动作ID#移动类型#速度参数#冲撞质量#绑定特效#运动结束承接技能,技能等级(默认1级)[可为空],时间偏移(秒,在运动结束前开始执行承接技能向前的时间偏移量>=0)[可为空]#操作对象(可选,默认为caster)#修正目标位置(可选,参数格式见节2)#是否强制(默认0 为1时强制移动) 移动类型分为:
速度参数为角色移动时的水平速度(当速度小于等于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#操作方式#操作参数[#偏移参数(仅在查询单位位置时生效)] 操作方式:
|
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的时间差为准) 可用的锁定状态
|
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 | 更改施法者的指定技能CDset_skill_cd#技能ID表(为空或者为ALL表示单位的所有技能,多个技能ID以”|”分隔)#操作方式(0:减少 1:直接赋新值)#操作值(单位:秒)
|
set_inner_cd | 更改目标的内部计时CDset_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]