Changelog
0524-17
新增NPC脚本#for循环和#case选择,支持Calc运算和正则表达式
功能调整
- 优化安全区识别,优化封包系统性能
- 防止角色下线收摊可能出错问题
CheckItemW支持使用位置检测是否穿戴了装备,例:CheckItemW 0~16- 优化劈星斩、雷霆一击打击感
- 调整人物运行逻辑,防止出现下线后死亡情况
- 添加获取普通技能等级变量:
<$MAGICLEVEL(1~255)>,括号内是技能ID,返回-1表示技能未学习或其他错误 - 添加获取地图怪物数量变量:
<$MapMonCnt(地图名.怪物名)>,地图无效返回-1,怪物无效或不参与数量统计返回-2,注意只有怪物表的StatMask包含1才会统计该怪物的数量 - 增加算术运算NPC命令:
Calc "算术表达式" 返回结果的变量(默认整数/后缀+1四舍五入/后缀+2浮点数),支持+ - * / % ()运算 - 扩展
DelayCall命令,支持5个上下文参数传输,防止参数被覆盖,通过$STR(S_CONTEXT[0~4])获取 - 优化行会成员列表
- 修正在14版后GM命令
ClearMon清理指定怪物失效问题 StatusRate命令支持小数倍数写法,倍率支持小数如1.1、1.5,时间单位为秒- 刺杀时非刺杀位的伤害等同于普攻
- 增加英雄的怒气值变量
$H.UnityEnergy - 修正掉线一段时间后游戏无声问题
- 优化劈星斩、雷霆一击打击感
- 输入框支持键盘组合键:
Ctrl+[Back/Delete/Left/Right] - 重构声音系统,略微调大合击声音
- 修正编辑框光标定位问题
- 修正快捷键控件文字居中问题
- 增加NPC脚本的循环支持:
#for和#~for配对使用,循环内部支持完整的#if/#act/#elseact流程 - 配套NPC变量
<$LoopCursor>,为当前循环游标变量,获取效率比自定义的游标变量稍高 - 配套NPC执行命令:
BreakLoop,用于中断当前的循环层(非整个字段中断,整个字段中断使用Break) - 支持多层次的循环嵌套
- 增加NPC脚本的区间选择支持:
#case和#~case配对使用,内部支持#if/#act/#elseact流程,仅单层 - 攻击触发里增加目标坐标变量:
<$TARINFO_CX>,<$TARINFO_CY> - 技能触发
[@MagSelfFuncXX]时,$PARAM(1)是目标X坐标,$PARAM(2)是目标Y坐标 - 增加释放魔法NPC命令:
MagicFire 1技能ID 2等级(0~15) 3显示技能效果(0/1) 4方式 5自定义坐标Y[可选] 6技能延迟(毫秒)[可选] 7自定义坐标强显效果(0/1)- 方式:
-2链式,-1溅射,0自己,1当前目标,自定义坐标X - 当使用自定义坐标时,X和Y支持批量方式,如:
11|22|33 44|55|56 - 当自定义坐标有效且参数7不为0时,将不检测目标有效性,强制显示技能效果
- 方式:
- 增加正则匹配检测NPC命令:
RegExMatch 源字符 匹配表达式 - 增加正则替换字符NPC命令:
RegExReplace S1 查找表达式 替换字符 替换次数(默认1次) - 增加正则分解捕获NPC命令:
RegExSplitCapture 源字符 查找表达式- 匹配的字符串数量:
<$STR(M_MATCHED_CNT)> - 匹配的字符串:
<$STR(S_MATCHED_STRS[n])> - 分解后剩余的字符串数量:
<$STR(M_SPLIT_CNT)> - 分解后剩余的字符串:
<$STR(S_SPLIT_STRS[n])>
- 匹配的字符串数量:
item数据表中的物品,RareItem字段包含128才可以设置物品描述,在出产时将触发QF的[@ProduceItem]- 增加设置物品描述NPC命令:
SetItemDesc 物品ID 描述 0前缀/1中间/2后缀 - 增加设置物品属性NPC命令:
SetEquipProp 物品ID 属性类型(1~31) 属性值 过期秒数(可选,默认-1永久) @过期触发(可选) - 支持自定义物品附加描述,配套引擎更新
- 物品描述的图片支持更多选项
- 合区工具支持基于Hash命令保存的物品ID数据文件
- 合区工具日志搜索改用简单实用的表达式方式
- 合区工具调整UI
- 控制台清理支持csv、ini、json等扩展名
适用场景
- 需要脚本循环处理批量数据的复杂脚本场景(批量发奖、批量检测等)
- 需要通过
#case实现多分支选择逻辑的脚本 - 需要数学运算(浮点运算、四则运算)的脚本
- 需要正则表达式进行字符串匹配、替换、分解的场景
- 需要自定义技能释放效果(链式/溅射/批量坐标)的版本
- 需要物品自定义描述和动态属性的版本(装备来源、临时属性等)
使用示例
; #for循环示例
[@loopex]
#act
RegExSplitCapture 一1二2三3四4五5六6七7八8九 [0-9]+
; 循环游标D99从0初始化,至M_SPLIT_CNT - 1,每次步进1
#for (D99 = 0, D99 < M_SPLIT_CNT, D99 + 1)
#if
#act
SendMsg 5 S_SPLIT_STRS步进1:<$STR(S_SPLIT_STRS[<$STR(D99)>])>
#~for
; 倒退循环
#for (D99 = M_SPLIT_CNT - 1, D99 ? 0, D99 - 1)
#if
CompVal <$LoopCursor> = 6
#act
BreakLoop ; 中断当前循环层
#~for
; #case选择示例
[@TestCase]
#act
SetRandomNO 100
Mov M99 <$RANDOMNO>
#case (M99)
#0:
#if
#act
SendMsg 5 命中:<$STR(M99)>
#1~9:
#if
#act
SendMsg 5 <$STR(M99)>在1~9之间
#10~89:
#if
#act
SendMsg 5 <$STR(M99)>在10~99之间
#def:
#if
#act
SendMsg 5 <$STR(M99)>其他数字,默认执行此选择
#~case
; Calc运算示例
#act
Calc "(0.3 + (0.4 + 88 * 77) / 1.5 / 3.3 + 11.6 % 1000) * 2.1" S_结果
SendMsg 7 默认整数:<$STR(S_结果)>,四舍五入整数:<$STR(S_结果1)>,浮点数:<$STR(S_结果2)>
; DelayCall传参示例
DelayCall 1000 @delayCall <$STR(S_暂存参数0)> 参数1 参数2 参数3 参数4
[@delayCall]
#act
MapMove <$STR(S_CONTEXT[0])>
; RegExSplitCapture示例
#act
RegExSplitCapture 左123中456右 [0-9]+
; M_MATCHED_CNT = 2
; S_MATCHED_STRS[0] = 123
; S_MATCHED_STRS[1] = 456
; M_SPLIT_CNT = 3
; S_SPLIT_STRS[0] = 左
; S_SPLIT_STRS[1] = 中
; S_SPLIT_STRS[2] = 右
