Changelog

0524-18

引入脚本循环/区间选择/正则匹配,支持自定义物品描述和装备属性,扩展MagicFire批量施法

功能调整

脚本流程控制

  • 增加NPC脚本循环支持:#for 和 #~for 配对使用,循环内部支持完整的 #if、#act、#elseact 流程
  • 配套循环游标变量 <$LoopCursor>,获取效率比自定义游标变量稍高
  • 配套中断循环命令:BreakLoop,仅中断当前循环层;整个字段中断仍使用 Break
  • 支持多层次循环嵌套,可用于自定义技能范围攻击等场景
  • 增加NPC脚本区间选择支持:#case 和 #~case 配对使用,内部支持完整的 #if、#act、#elseact 流程
  • #case 支持单数字选择、区间选择(如 #1~9:)、多数字区间组合(如 #86,88,91~93:)和默认选择 #def:
  • 注意:#case 内不允许执行 #for 循环,但 #for 内可包含 #case;数字区间禁止重叠

正则与字符串处理

  • 增加正则匹配检测NPC命令:RegExMatch 源字符 匹配表达式
  • 增加正则替换字符NPC命令:RegExReplace S1 查找表达式 替换字符 替换次数
  • 增加正则分解捕获NPC命令:RegExSplitCapture 源字符 查找表达式,匹配结果通过 <$STR(S_MATCHED_STRS[n])> 获取,剩余部分通过 <$STR(S_SPLIT_STRS[n])> 获取

物品描述与属性系统

  • 物品 RareItem 字段包含128时支持设置物品描述,出产时触发QF的 [@ProduceItem]
  • 增加设置物品描述NPC命令:SetItemDesc 物品ID 描述 0前缀/1中间/2后缀,描述为空时删除对应描述
  • 增加设置物品属性NPC命令:SetEquipProp 物品ID 属性类型(1~31) 属性值 过期秒数 @过期触发
  • 支持自定义物品附加描述,配套引擎更新;物品描述的图片支持更多选项
  • 物品描述支持颜色和图片标签:<字符串|c=clRed> 颜色、<u~magic5|I=0 N=8 X=70 Y=90 W=60 H=140 F=160> 图片

技能与攻击系统

  • 增加释放魔法NPC命令:MagicFire 技能ID 等级 显示效果(0/1) 方式 坐标Y 技能延迟(毫秒) 强显效果(0/1)
  • MagicFire 方式4:-2链式、-1溅射(参数5为半径)、0自己、1当前目标、自定义坐标X/Y
  • 支持批量坐标方式:MagicFire 的X和Y支持批量写法如 11|22|33 44|55|56
  • 支持普通魔法技能和合击技能,无举手动作,需配套客户端更新
  • MagicFire 增加参数8,用于设定链式/溅射方式下的最多目标数
  • 攻击触发增加攻击类型变量:$ATTINFO_HITTYPE(0普通/1暴击)
  • 攻击触发里增加目标坐标变量:$TARINFO_CX、$TARINFO_CY
  • 技能触发 [@MagSelfFuncXX] 中 $PARAM(1) 是目标X坐标,$PARAM(2) 是目标Y坐标

修复与优化

  • 首次自动扩展 monster.db 出错问题(多次运行可完成自动扩展)
  • 修正部分技能不进行攻击触发问题(如疾光电影)
  • 大幅度减少生物对消息的响应时间,提高游戏体验
  • 飞行类魔法伤害生效时间更准确

配套工具

  • 合区工具支持基于Hash命令保存的物品ID数据文件
  • 合区工具日志搜索改用简单实用的表达式方式
  • 合区工具调整UI
  • 控制台清理支持csv、ini、json等扩展名
  • 此次更新需要重新上传远程脚本数据,远程脚本数据和之前版本不兼容

使用示例

#for 循环示例

[@loopex]
#act
RegExSplitCapture 一1二2三3四4五5六6七7八8九 [0-9]+
#for (D99 = 0, D99 < M_SPLIT_CNT, D99 + 1)
#act
SendMsg 5 S_SPLIT_STRS步进1:<$STR(S_SPLIT_STRS[<$STR(D99)>])>
#~for
; 倒退循环
#for (D99 = M_SPLIT_CNT - 1, D99 ? 0, D99 - 1)
#act
SendMsg 7 S_SPLIT_STRS步退1:<$STR(S_SPLIT_STRS[<$LoopCursor>])>
#~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之间
#86,88,91~93:
#if
#act
SendMsg 5 <$STR(M99)>在86,88,91~93之间
#def:
#if
#act
SendMsg 5 <$STR(M99)>其他数字,默认执行此选择
#~case

MagicFire 批量施法示例

[@CustomMagic]
#act
Mov S98 ""
Mov S99 ""
; 5x5 范围方格
#for (M0 = -2, M0 < 3, M0 + 1)
#for (M1 = -2, M1 < 3, M1 + 1)
#if(1)
CompVal <$STR(M0)> ! 0
CompVal <$STR(M1)> ! 0
#act
Calc "<$PARAM(1)>+0<$STR(M0)>" M98
Calc "<$PARAM(2)>+0<$STR(M1)>" M99
Inc S98 <$STR(M98)>|
Inc S99 <$STR(M99)>|
#~for
#~for
MagicFire <$STR(M97)> <$MAGICLEVEL(<$STR(M97)>)> 1 <$STR(S98)> <$STR(S99)> 500 1

SetItemDesc 物品描述示例

[@ProduceItem]
#act
; 装备名称下加星星
SetItemDesc <$PARAM(1)> "<u~|I=754><u~|I=754><u~|I=754>" 0
; 设置来源描述
FormatStr "来源:<%s|c=clRed>\\地图:<%s|c=$4AD663>\\产者:<%s|c=$E9A000>\\物主:<%s|c=$5CF4FF>\\时间:%s|c=clLime>" <$PARAM(0)> <$PARAM(4)> <$PARAM(5)> <$PARAM(6)> <$PARAM(2)>
SetItemDesc <$PARAM(1)> <$CALCRESULT> 2

适用场景

  • 需要复杂脚本逻辑控制(循环/区间选择)的版本
  • 需要自定义物品描述和临时装备属性的版本
  • 需要利用MagicFire实现自定义范围技能效果的版本
  • 需要正则匹配/替换进行字符串处理的脚本开发者
  • 此次更新为脚本系统重大升级,建议所有使用NPC脚本的版本跟进