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脚本的版本跟进
