nut修改实例7:buff技能

今天讲一下buff技能的写法。

首先添加一个技能

技能添加并且注册之后,需要上传服务端跑五国

我先跑个五国

五国跑完,我们把技能添加到技能树内,还是添加到狂战士的技能树

接下来开始nut部分

Nut部分已经写好了,我们先测试一下技能是否可以使用,然后再进行下一步

技能是可以使用的

在开始下一步之前,先了解一下buff技能

nut修改实例7:buff技能

暴走就是一个buff技能,使用后在一段时间内人物的属性会变化(增加或减少)

nut修改实例7:buff技能

使用buff技能后左下部分还会显示出提示

我们要写的buff技能大致也要做到这些

Buff技能的属性我们先写成增加1000点力量

nut修改实例7:buff技能

Buff技能的关键就在于这个ap文件,把ap文件附加到人物身上就能做到在规定时间内改变人物属性,附加ap文件的语句可以参考男法师的buff技能

nut修改实例7:buff技能

这一段就是附加ap的写法了

其中第一行

local appendage = CNSquirrelAppendage.sq_AppendAppendage(parentObj, sourceObj, SKILL_MAGIC_SHIELD, false, “Character/ATMage/MagicShield/ap_MagicShield.nut”, false);

第一个参数parentObj指的是附加ap的对象,这个对象可以在ap内用local obj = appendage.getParent();来获取

第二个参数sourceObj指的是ap来源的对象,这个对象可以在ap内用local obj = appendage.getSource();来获取

举个例子来说明这两个对象之间的关系:

怪物A附加给人物A一个ap,那么怪物A就是ap的来源,人物A就是ap附加的对象

第三个参数SKILL_MAGIC_SHIELD指的是ap对应的技能编号

第四个参数的意义是ap效果是否可叠加,填false则不可叠加,填true则可叠加。比如ap内容是增加100点力量,如果ap可以叠加那么再次附加ap之后增加的力量就是200点,如果ap不能叠加那么再次附加ap之后增加的力量还是100点。

第五个参数”Character/ATMage/MagicShield/ap_MagicShield.nut”指定的是ap文件路径。

第六个参数指的是ap是否自动附加,填false则不自动附加,需要在执行下面的代码后才附加CNSquirrelAppendage.sq_Append(appendage, obj, obj);填true则自动附加。在被动技能章节会用到这个参数。

 

 

 

 

第二行代码

appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL,sq_getJob(obj),SKILL_SWORDMAN8,skillLevel);

其功能就是实现左下角图标,SKILL_SWORDMAN8这个参数对应显示的技能,skillLevel对应显示的技能等级

nut修改实例7:buff技能

 

第三行代码

appendage.sq_SetValidTime(Time);

其作用是设定ap的持续时间,Time单位是毫秒

 

第四行代码

CNSquirrelAppendage.sq_Append(appendage, obj, obj);

其作用刚刚已经提到,就是附加ap

 

这些都了解之后我们开始写具体内容

 

obj.sq_GetSkillLevel(SKILL_BUFF_SAMPLE);此代码的作用是获取SKILL_BUFF_SAMPLE当前的等级

我们先把buff技能的持续时间写入skl文件

 

local time = obj.sq_GetLevelData(SKILL_BUFF_SAMPLE, 0, skillLevel);此代码的作用是从skl获取数据

第一个参数SKILL_BUFF_SAMPLE是技能编号

第二个参数0是数据的位置

第三个参数skillLevel是技能等级

 

写完这些后我们上线测试一下

 

nut修改实例7:buff技能

可以看到显示的时间不太对,5000毫秒应该显示成5秒,这个原因在于

nut修改实例7:buff技能

箭头所指的1.0意为按数据*1.0的结果来显示

我们把这个1.0改成0.001,让它显示数据*0.001

 

nut修改实例7:buff技能

显示正常了

 

可以看到,一级的buff持续5秒,三级的buff持续15秒,目前持续时间是受skl数据控制的

 

接下来我们写加力量的代码

nut修改实例7:buff技能

红框内就是增加人物属性的写法,这个写法相对固定,可以直接套用

nut修改实例7:buff技能

可改变的属性可以在箭头所指的文件内找到,其中

CHANGE_STATUS_TYPE_PHYSICAL_ATTACK是力量

CHANGE_STATUS_TYPE_MAGICAL_ATTACK是智力

我们先写增加力量

 

nut修改实例7:buff技能

nut修改实例7:buff技能

可以看到释放buff后力量增加了1000点

nut修改实例7:buff技能

Buff结束后力量又回到了266点

 

我们下面写增加两个属性,力量和智力

nut修改实例7:buff技能

增加多个属性只需要在下面的那个位置添加代码就好了,上面的不需要动

 

nut修改实例7:buff技能

nut修改实例7:buff技能

效果已经实现了

 

最后我们要把这两个数据也写进skl文件,让它受skl文件的控制

nut修改实例7:buff技能

这部分代码是存储数据

其中第一行

appendage.getVar(“buffSampleSkillData”).clear_vector();

其作用为清空vector,buffSampleSkillData是此vector的名称,appendage是此vector的对象

第二行代码

appendage.getVar(“buffSampleSkillData”).push_vector(physicalAttack);

意义为在appendage对象的名为buffSampleSkillData的vector内储存一个数据

第三行代码

appendage.getVar(“buffSampleSkillData”).push_vector(magicalAttack);

意义与第二行代码相同

 

nut修改实例7:buff技能

这两行代码是获取数据

其中第一行代码

local physicalAttack = appendage.getVar(“buffSampleSkillData”).get_vector(0);

是获取appendage对象的名为buffSampleSkillData的vector内的第一个数据

第二行代码

local magicalAttack = appendage.getVar(“buffSampleSkillData”).get_vector(1);

是获取第二个数据

 

数据的顺序与代码的前后顺序有关

appendage.getVar(“buffSampleSkillData”).clear_vector();

appendage.getVar(“buffSampleSkillData”).push_vector(physicalAttack);

appendage.getVar(“buffSampleSkillData”).push_vector(magicalAttack);

此处代码是先存入physicalAttack,后存入magicalAttack

所以physicalAttack就是第一个数据,magicalAttack就是第二个数据

 

我们现在上线测试一下效果

nut修改实例7:buff技能

nut修改实例7:buff技能

可以看到力量和智力都增加了150点

 

Buff技能的教程就到这里

 

相关文件下载地址:链接: https://pan.baidu.com/s/13DqiaQfDgjZiNiUomD5kLQ?pwd=kp2b 提取码: kp2b 复制这段内容后打开百度网盘手机App,操作更方便哦
–来自百度网盘超级会员v2的分享

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容