当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

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

热度:
给力引擎里实现装备武器后攻击概率触发技能,核心就三个文件: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
SetSkillTrigger1

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

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

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

先写一个基础框架:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#IF
CHECKCURRTARGETRACE=0
CheckItemW嗜魂法杖1
random15
#ACT
M.ReleaseMagic冰咆哮
SENDMSG6嗜魂触发冰咆哮
break

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

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

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

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

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

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

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

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

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

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

[@Attack]
#IF
CheckItemW嗜魂法杖1
random15
#ACT
M.ReleaseMagic雷电术
CHANGEDURABILITY11武器持久减1点
SENDMSG6雷电术触发,武器持久减1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#IF
CheckItemW嗜魂法杖1
#ACT
movN21
SENDMSG6嗜魂法杖已激活触发能力

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

#IF
CheckItemW嗜魂法杖1
#ACT
movN20

;攻击触发
[@Attack]
#IF
CHECKCURRTARGETRACE=0
CheckItemW裁决之杖1
equalN11
random10
#ACT
M.ReleaseMagic火墙
SENDMSG6火墙触发成功
break

#IF
CHECKCURRTARGETRACE=0
CheckItemW嗜魂法杖1
equalN21
random15
CheckCoolDownN320
#ACT
M.ReleaseMagic冰咆哮
SetCoolDownN320
SENDMSG6冰咆哮触发成功
break

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