BLUE引擎MagSelfFunc配置方法教程 - 技能施法实战案例
摘要:MagSelfFunc是BLUE引擎QF中施法者释放技能时触发的事件段,MagTagFunc对应被攻击者触发,两段均默认关闭需后台开启。本文说明段名与MagID对应关系、MagicFire八参数含义、-1溅射-2链式方式区别、竖线批量坐标传参方法和5乘5范围循环案例,给出三步配置流程。…
玩家放一个技能,你想让它在指定坐标额外炸出一片范围伤害,或者按技能ID区分不同触发效果,该挂在哪个段名下?很多新手写了半天技能触发脚本却不生效,问题出在两个地方:一是不知道段名要跟技能ID走,二是MagicFire命令的八个参数顺序填错了。MagSelfFunc就是BLUE引擎里管施法者释放技能时触发脚本的入口段,配合MagicFire命令可以在任意坐标复现技能特效。
下面把段名规则、MagicFire施法参数表、坐标批量生成三个部分按帮助文档原文拆开,再给一套配置流程。

MagSelfFunc和MagTagFunc的区别
BLUE引擎提供两个技能触发段:[@MagSelfFuncXX]是施法者触发,也就是放技能的那个人跑到这段脚本;[@MagTagFuncXX]是被攻击者触发,也就是挨打的那个对象跑到这段脚本。XX是技能ID,和Magic.db里的MagID对应。这两个触发默认关闭,需要在引擎后台开启后才生效。
两个段里能读到的系统参数不一样。施法者段[@MagSelfFuncXX]里,<$PARAM(1)>是目标X坐标,<$PARAM(2)>是目标Y坐标,<$PARAM(3)>是目标角色名。被攻击者段[@MagTagFuncXX]里,<$PARAM(1)>同样是目标X坐标,<$PARAM(2)>是目标Y坐标,<$PARAM(3)>变成了攻击者角色名。也就是说同一份坐标信息,一个段告诉你谁在被打,另一个段告诉你谁在打人。
做技能释放触发时,你想在施法者周围放范围技能,就写MagSelfFunc;想在被打目标身上附加效果,就写MagTagFunc。两个段可以同时存在,互不干扰。

MagicFire命令八个参数怎么填
MagicFire是配合技能触发使用的NPC命令,用来在指定坐标释放一个技能特效。帮助文档给的参数顺序如下:
MagicFire 参数1 参数2 参数3 参数4 参数5 参数6 参数7 参数8
参数1是技能ID,对应Magic.db里的MagID。参数2是技能等级,范围0到15。参数3是是否显示技能效果,0不显示、1显示。参数4是释放方式,这是最关键的一个:填-2是链式技能,填-1是溅射技能,填0是自己身上释放,填1是当前目标身上释放,填其他数字则当作自定义坐标X。
参数5在不同方式下含义不同。当参数4填-1溅射时,参数5是溅射半径;当参数4填-2链式时,参数5是链式半径;当参数4填自定义坐标X时,参数5就是对应的坐标Y。参数6是技能延迟,单位毫秒,可选。参数7是自定义坐标强显效果,0不强制、1强制显示,可选。参数8是链式和溅射方式下最多攻击几个目标,不填则由引擎按技能等级自动计算。
需要注意这个命令只支持普通魔法技能和合击技能,不包含战士技能,不支持技能触发和攻击触发的二次嵌套,也没有举手动作动画,使用时需要配套客户端资源更新。
坐标范围怎么用循环批量生成
帮助文档里给了一个典型案例:用两层循环构造一个5乘5的攻击范围方格,把24个坐标拼到两个S变量里,再一次性传给MagicFire。
[@MagSelfFunc11]
#act
Mov M97 11
goto @CustomMagic
[@CustomMagic]
#act
Mov S98 ""
Mov S99 ""
#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
#if
CompVal <$PARAM(0)> = 0
#act
MagicFire <$STR(M97)> <$MAGICLEVEL(<$STR(M97)>)> 1 <$STR(S98)> <$STR(S99)> 500 1
这段脚本的逻辑是:M0和M1分别从负2循环到正2,跳过原点(0,0),用Calc把目标坐标<$PARAM(1)>加上偏移量算成实际坐标,用Inc把坐标用竖线|拼到S98和S99两个变量里。最后MagicFire把这两组坐标一次性传进去,在每个坐标点都放一次技能效果。自定义坐标支持批量写法,多个坐标之间用竖线分隔。
英雄释放时在MagicFire前面加h.前缀,写法变成h.MagicFire,参数完全一样。

技能触发脚本配置步骤
第一步,在引擎后台确认MagSelfFunc和MagTagFunc开关已打开,默认是关闭状态,不开段名写了也不跑。
第二步,打开Market_Def目录下的QFunction-0.txt,按[@MagSelfFunc技能ID]格式写段名,技能ID填Magic.db里对应技能的MagID,段里用<$PARAM(1)>和<$PARAM(2)>读目标坐标。
第三步,在段里调用MagicFire命令,按参数1到参数8的顺序填好技能ID、等级、是否显示效果、释放方式和坐标,保存后重载QFunction脚本,进游戏释放对应技能观察是否在目标坐标炸出特效。
常见疑问
1. 问:放技能触发的段名到底怎么写?
施法者触发写[@MagSelfFunc技能ID],被攻击者触发写[@MagTagFunc技能ID],后面的数字就是Magic.db里该技能的MagID。比如法师的魔法盾MagID是11,段名就写[@MagSelfFunc11]。两个段默认关闭,需要在引擎后台打开开关才会触发。触发后用<$PARAM(1)>读目标X坐标、<$PARAM(2)>读目标Y坐标、<$PARAM(3)>读目标角色名。(本条问题整理自百度知道真实提问:放技能触发段名怎么写2018-03)
2. 问:改了Power为什么技能伤害没变化?
Power是Magic.db里技能的基础伤害下限,实际打出去的伤害还受角色自身魔法力和引擎威力倍数影响。光改Power可能感觉不明显,先把Power和MaxPower同时调大测试,再去M2控制台看技能威力倍数设置。MagSelfFunc这段脚本管的是在技能触发时额外放特效,不改技能本身的伤害数值,伤害还是Magic.db里的Power系字段决定。(本条问题整理自百度知道真实提问:改了Power为什么技能伤害没变化2018-03)
3. 问:怎么给战士加一本新技能书?
复制Magic.db里一行现有战士技能记录,job保持0代表战士,MagID用一个空号,StdItem.db里做一本技能书把书的Anicount填成和MagID一样的数字。MagSelfFunc触发段里的XX也是填这个MagID,这样玩家用书学会技能后,释放该技能才会跑到对应的MagSelfFunc段里。注意MagSelfFunc官方说明不包含战士技能,战士技能走这个触发可能不生效。(本条问题整理自百度知道真实提问:怎么给战士加一本新技能书2015-04)
4. 问:MagicFire的参数4填-1和-2有什么区别?
参数4填-1是溅射方式,参数5填溅射半径,技能在目标周围一圈范围内炸开;参数4填-2是链式方式,参数5填链式半径,技能从目标开始像闪电一样在多个目标间跳跃。两种方式下参数8都可以控制最多打几个目标,不填就由引擎按技能等级自动算。填0是在自己身上放,填1是在当前目标身上放。
5. 问:自定义坐标怎么一次传多个点?
MagicFire的参数4填自定义坐标X后,参数5填对应Y坐标。如果要一次传多个坐标,用竖线|把多个X坐标拼起来传给参数4,多个Y坐标拼起来传给参数5,比如参数4传11|22|33、参数5传44|55|66,引擎就会在这三个坐标点依次放技能。帮助文档里5乘5范围案例就是用两层循环算出24个坐标后拼成这种批量格式。
6. 问:英雄放技能怎么触发脚本?
英雄触发段名和人物一样用[@MagSelfFunc技能ID],触发后脚本里判断<$PARAM(0)>是不是0来区分人物还是英雄。执行MagicFire时英雄前面加h.前缀,写成h.MagicFire,参数和人物版完全一致。帮助文档案例里用CompVal <$PARAM(0)> = 0判断是人物就调MagicFire,否则调h.MagicFire。
7. 问:MagSelfFunc支持战士技能吗?
帮助文档明确写了MagicFire支持普通魔法技能和合击技能,不包含战士技能。战士的物理攻击走的是另外的触发体系,不能用MagSelfFunc。如果你想给战士技能加范围特效,需要换其他触发段,或者在法师技能的MagSelfFunc里实现。这个限制是引擎层面的,改脚本参数绕不过去。
以上MagSelfFunc施法触发段名规则和MagicFire八参数用法,均在本地BLUE引擎环境对照QFunction-0.txt实测验证过;该技能触发体系和MagicFire命令仅适配BLUE引擎,换到其他引擎时段名前缀和参数顺序可能不同,需自行对照修改。MagSelfFunc管施法者触发,MagTagFunc管受击者触发,开关打开是前提。仅供单机本地学习调试。
扫描二维码推送至手机访问。
本文章M2GM发布,如需转载请注明出处。如有侵权请联系站长删除。
本文内容仅供个人单机学习研究、功能调试、玩法逻辑测试使用,不涉及任何公网搭建、商业运营、资源交易行为,仅用于个人学习与实操体验。





