传奇给力引擎装备武器攻击触发技能脚本完整写法

来源: 作者: 点击:
给力引擎里实现装备武器后攻击概率触发技能,核心就三个文件:QFunction-0.txt、QManage.txt和物品数据库。逻辑链条是:玩家带上武器触发QF里的穿戴检测,然后给武器打上一个标记。攻击时触发QF里的攻击触发段,检测到标记和触发几率,执行释放技能的命令。下面一步步拆开写清楚。

**一、数据库设置武器的触发字段**

先在M2里打开物品数据库,找到你要做触发的那把武器。给力引擎的武器想触发技能,关键在几个字段的设置:

AniCount:这个字段写190或者191,代表武器带触发功能。190和191的区别是触发显示的样式,一般用190就行。
Reserved:写触发几率,数字范围1到100。比如填10就是10%几率触发。
NeedIdentify:设置为1,代表武器需要认主或者绑定,有些版本用这个字段做触发开关。不绑定可以填0。

这三个字段配好,武器本身就有了触发基础。但这只是告诉引擎“这把武器能触发”,具体触发什么技能,还要在QF里写。

**二、QManage.txt注册触发标签**

打开QManage.txt,这是登录脚本,人物上线时执行。你要在这里面把攻击触发功能注册上,否则M2不知道你要用攻击触发。

在[@Login]段下面加一行:

#ACT
SetS killTrigger 1

这行命令的意思是开启攻击触发功能。不同引擎版本命令略有不同,给力引擎有些版本用SetS killTrigger,有些用SetOnTrigger,具体看你手里的M2支持哪个。拿不准的话在M2的命令帮助里搜Trigger。

**三、QF里写攻击触发段**

核心逻辑全在QFunction-0.txt里。打开这个文件,找到[@Attack]段,这是每次攻击都会执行的段。没有的话自己新建一个。

先写一个基础框架:

[@Attack]
#IF
CHECKCURRTARGETRACE = 0 检测目标是怪物不是人
CheckItemW 裁决之杖 1 检测手上是否拿着裁决之杖
random 10 10%几率触发
#ACT
M.ReleaseMagic 火墙 让怪物脚下释放火墙
SENDMSG 6 火墙触发成功
break

这个例子的意思是:拿着裁决之杖打怪时,每次攻击有10%几率对怪物释放火墙。M.ReleaseMagic是让目标位置施法,适合火墙、冰咆哮这类范围技能。

想触发单体技能比如雷电术,用这个:

[@Attack]
#IF
CHECKCURRTARGETRACE = 0
CheckItemW 嗜魂法杖 1
random 15
#ACT
M.ReleaseMagic 雷电术
SENDMSG 6 雷电术触发

**四、触发穿戴和卸下的处理**

上面的写法有个问题:只要武器在身上就一直生效。如果想更精细一点,比如武器需要“激活”或者“认主”之后才触发,就要加变量控制。

在QF里找到[@TakeOnX]和[@TakeOffX]段,X是装备位置编号,武器位置一般是1。在这两个段里设置变量。

[@TakeOn1]
#IF
CheckItemW 裁决之杖 1
#ACT
mov N1 1 穿上武器时设置变量N1为1

[@TakeOff1]
#IF
CheckItemW 裁决之杖 1
#ACT
mov N1 0 脱下武器时设置变量N1为0

然后在攻击段里加一条检测:

[@Attack]
#IF
CHECKCURRTARGETRACE = 0
CheckItemW 裁决之杖 1
equal N1 1 检测变量N1是不是1
random 10
#ACT
M.ReleaseMagic 火墙
SENDMSG 6 火墙触发成功

这样就能确保只有装备状态下且N1为1时才触发。

**五、多个武器不同触发技能的写法**

如果多把武器想触发不同技能,可以在攻击段里做多重判断。

[@Attack]
#IF
CHECKCURRTARGETRACE = 0
CheckItemW 裁决之杖 1
random 10
#ACT
M.ReleaseMagic 火墙
SENDMSG 6 裁决触发火墙
break

#IF
CHECKCURRTARGETRACE = 0
CheckItemW 嗜魂法杖 1
random 15
#ACT
M.ReleaseMagic 冰咆哮
SENDMSG 6 嗜魂触发冰咆哮
break

#IF
CHECKCURRTARGETRACE = 0
CheckItemW 龙纹剑 1
random 8
#ACT
M.ReleaseMagic 召唤神兽 给目标位置召宝宝
SENDMSG 6 龙纹召唤神兽
break

注意每个触发后面都要加break,否则第一个触发成功后还会继续往下检测。

**六、技能释放的精准控制**

给力引擎里释放技能有几个不同命令,效果不一样:

M.ReleaseMagic 技能名:对当前目标施放单体技能,目标必须是怪物或玩家。
M.ReleaseMagicEx 技能名 等级:指定技能等级释放,等级0到3。
M.ReleaseMagicRange 技能名 范围:对目标周围释放技能。
M.ReleaseMagicMap 地图号 X Y 技能名 范围:在指定坐标放技能。

如果想触发群体技能又不想打到自己人,可以这么写:

[@Attack]
#IF
CheckItemW 碧海天王 1
random 20
#ACT
M.ReleaseMagicRange 冰咆哮 3
SENDMSG 6 触发群体冰咆哮

M.ReleaseMagicRange会让技能以目标为中心覆盖周围3格。

**七、触发时消耗耐久或物品**

有些武器想做“触发技能消耗一点持久”的效果,在ACT里加命令就行。

[@Attack]
#IF
CheckItemW 嗜魂法杖 1
random 15
#ACT
M.ReleaseMagic 雷电术
CHANGEDURABILITY 1 1 武器持久减1点
SENDMSG 6 雷电术触发,武器持久减1

CHANGEDURABILITY后面两个参数,第一个是装备位置,第二个是减多少。武器位置是1,减1就是掉1点持久。

**八、触发时播放特效和声音**

想让触发看起来更炫,可以加特效命令。

[@Attack]
#IF
CheckItemW 屠龙 1
random 5
#ACT
M.ReleaseMagic 烈火剑法
ADDSKILLEFFECT 目标 3 给目标加烈火特效
PLAYSOUND 效果.wav 播放音效
SENDMSG 6 烈火触发

ADDSKILLEFFECT命令参数:第一个是目标类型(目标、自己、坐标),第二个是特效编号。特效编号要去M2的素材编辑器里查。

**九、防止频繁触发的冷却机制**

如果触发几率高,连续触发太变态,要加冷却控制。用变量记录上次触发时间。

[@Attack]
#IF
CheckItemW 裁决之杖 1
random 10
CheckCoolDown N1 30 检测N1记录的冷却时间是否超过30秒
#ACT
M.ReleaseMagic 火墙
SetCoolDown N1 30 设置N1冷却时间为30秒
SENDMSG 6 火墙触发成功

[@Attack]
#IF
CheckItemW 裁决之杖 1
random 10
large N1 0 如果N1大于0说明还在冷却
#ELSESAY
技能还在冷却中

CheckCoolDown和SetCoolDown是给力引擎的冷却命令,没有的话可以用时间变量自己写:

#ACT
GetTime 秒数 N2 获取当前时间秒数存入N2
large N2 <$STR(N1)> 检测当前时间是否大于上次记录时间+30
SetCoolDown N1 <$STR(N2)>

**十、完整示例脚本**

最后给一个完整的武器触发脚本,包含穿戴检测、攻击触发、多个武器判断、冷却控制:

;=========QFunction-0.txt=========

;穿戴武器
[@TakeOn1]
#IF
CheckItemW 裁决之杖 1
#ACT
mov N1 1
SENDMSG 6 裁决之杖已激活触发能力

#IF
CheckItemW 嗜魂法杖 1
#ACT
mov N2 1
SENDMSG 6 嗜魂法杖已激活触发能力

;脱下武器
[@TakeOff1]
#IF
CheckItemW 裁决之杖 1
#ACT
mov N1 0

#IF
CheckItemW 嗜魂法杖 1
#ACT
mov N2 0

;攻击触发
[@Attack]
#IF
CHECKCURRTARGETRACE = 0
CheckItemW 裁决之杖 1
equal N1 1
random 10
#ACT
M.ReleaseMagic 火墙
SENDMSG 6 火墙触发成功
break

#IF
CHECKCURRTARGETRACE = 0
CheckItemW 嗜魂法杖 1
equal N2 1
random 15
CheckCoolDown N3 20
#ACT
M.ReleaseMagic 冰咆哮
SetCoolDown N3 20
SENDMSG 6 冰咆哮触发成功
break

这个脚本写完保存,在M2上重新加载QF脚本,戴上武器去打怪试试。触发几率、冷却时间、技能效果都可以自己调整参数。给力引擎的命令细节不同版本有出入,遇到不生效的命令在M2的帮助里搜一下具体写法。