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] = 右