今天讲一下buff技能的写法。
首先添加一个技能
技能添加并且注册之后,需要上传服务端跑五国
我先跑个五国
五国跑完,我们把技能添加到技能树内,还是添加到狂战士的技能树
接下来开始nut部分
Nut部分已经写好了,我们先测试一下技能是否可以使用,然后再进行下一步
技能是可以使用的
在开始下一步之前,先了解一下buff技能
暴走就是一个buff技能,使用后在一段时间内人物的属性会变化(增加或减少)
使用buff技能后左下部分还会显示出提示
我们要写的buff技能大致也要做到这些
Buff技能的属性我们先写成增加1000点力量
Buff技能的关键就在于这个ap文件,把ap文件附加到人物身上就能做到在规定时间内改变人物属性,附加ap文件的语句可以参考男法师的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对应显示的技能等级
第三行代码
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是技能等级
写完这些后我们上线测试一下
可以看到显示的时间不太对,5000毫秒应该显示成5秒,这个原因在于
箭头所指的1.0意为按数据*1.0的结果来显示
我们把这个1.0改成0.001,让它显示数据*0.001
显示正常了
可以看到,一级的buff持续5秒,三级的buff持续15秒,目前持续时间是受skl数据控制的
接下来我们写加力量的代码
红框内就是增加人物属性的写法,这个写法相对固定,可以直接套用
可改变的属性可以在箭头所指的文件内找到,其中
CHANGE_STATUS_TYPE_PHYSICAL_ATTACK是力量
CHANGE_STATUS_TYPE_MAGICAL_ATTACK是智力
我们先写增加力量
可以看到释放buff后力量增加了1000点
Buff结束后力量又回到了266点
我们下面写增加两个属性,力量和智力
增加多个属性只需要在下面的那个位置添加代码就好了,上面的不需要动
效果已经实现了
最后我们要把这两个数据也写进skl文件,让它受skl文件的控制
这部分代码是存储数据
其中第一行
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);
意义与第二行代码相同
这两行代码是获取数据
其中第一行代码
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就是第二个数据
我们现在上线测试一下效果
可以看到力量和智力都增加了150点
Buff技能的教程就到这里
相关文件下载地址:链接: https://pan.baidu.com/s/13DqiaQfDgjZiNiUomD5kLQ?pwd=kp2b 提取码: kp2b 复制这段内容后打开百度网盘手机App,操作更方便哦
–来自百度网盘超级会员v2的分享
暂无评论内容