nut修改实例1:主动技能基本结构

以男法师的windStrike(魔法旋风)为例

 

打开wind_strike.nut文件,可以看到几个以function开头的语句,下面分别介绍几个function的作用。

nut修改实例1:主动技能基本结构

 

1.function checkExecutableSkill_WindStrike(obj)

在使用技能的瞬间,此function被执行。设置人物的状态(状态相当于nut的编号,设置状态即调用nut)

 

2. function checkCommandEnable_WindStrike(obj)

在图中此function一直在被执行,其作用为灰/亮技能

 

3. function onSetState_WindStrike(obj, state, datas, isResetTimer)

设置状态时,此function被执行

 

4. function onEndCurrentAni_WindStrike(obj)

人物释放主动技能时,会做出动作。当这个动作结束时,此function被执行

nut修改实例1:主动技能基本结构

 

5. function onKeyFrameFlag_WindStrike(obj,flagIndex)

人物做出的动作是分帧数的(ani文件),某些帧数可以在ani内设置为关键帧,当人物动作进行到关键帧时,此函数被执行。

nut修改实例1:主动技能基本结构

 

了解每个function的作用后,再来整体看一遍脚本

1.进图后,亮技能

function checkCommandEnable_WindStrike(obj)

{

if (!obj) return false;

//获取人物当前状态

local state = obj.sq_GetState();

//如果人物状态为站立

if (state == STATE_STAND)

return true;//此行代码表示亮技能

//如果人物状态为普通攻击

if(state == STATE_ATTACK)

{

return obj.sq_IsCommandEnable(SKILL_WIND_STRIKE);//此代码表示根据技能是否可强制来判断是否亮技能(可强制则亮技能,不可强制则不亮技能)

}

return true;

}

 

2.按下技能键使用技能

function checkExecutableSkill_WindStrike(obj)

{

if (!obj) return false;

local isUse = obj.sq_IsUseSkill(SKILL_WIND_STRIKE);//判断人物是否使用了技能

//如果使用了技能

if (isUse)

{

//设置人物状态为STATE_WIND_STRIKE

obj.sq_AddSetStatePacket(STATE_WIND_STRIKE , STATE_PRIORITY_USER, false);

return true;

}

return false;

}

 

3.设置状态时执行此function

function onSetState_WindStrike(obj, state, datas, isResetTimer)

{

if(!obj) return;

//停止人物的运动(方向键不能再控制移动)

obj.sq_StopMove();

//设置人物动作(ani)

obj.sq_SetCurrentAnimation(CUSTOM_ANI_WIND_STRIKE);

//技能动作吃攻速

obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);

}

 

4.动作进行到关键帧时,创建特效

function onKeyFrameFlag_WindStrike(obj,flagIndex)

{

if(!obj)

return false;

local isMyControlObject = obj.sq_IsMyControlObject();

// flagIndex为关键帧编号,在此动作中关键帧编号被设置为1

if (isMyControlObject && flagIndex == 1)

{

local xPosMin = obj.sq_GetIntData(SKILL_WIND_STRIKE, 0);//获取第一个静态数据

local xPosMax = obj.sq_GetIntData(SKILL_WIND_STRIKE, 1);//获取第二个静态数据

nut修改实例1:主动技能基本结构

 

local attackBonusRate = obj.sq_GetBonusRateWithPassive(SKILL_WIND_STRIKE, STATE_WIND_STRIKE, SKL_LVL_COLUMN_IDX_0, 1.0);//获取百分比伤害

local power = obj.sq_GetPowerWithPassive(SKILL_WIND_STRIKE, STATE_WIND_STRIKE, SKL_LVL_COLUMN_IDX_1, SKL_LVL_COLUMN_IDX_0, 1.0);//获取固伤

local upForce = obj.sq_GetLevelData(2);//获取浮空力

 

//这几行代码的意义将在后面讲解

obj.sq_StartWrite();

obj.sq_WriteDword(attackBonusRate);

obj.sq_WriteDword(power);

obj.sq_WriteWord(upForce);

//创建特效。第一个24201为特效编号;后面的120,0,0为创建的特效距人物的距离(分别为x轴,y轴,z轴)

obj.sq_SendCreatePassiveObjectPacket(24201, 0, 120, 1, 0);

}

return true;

}

 

5.人物动作结束

function onEndCurrentAni_WindStrike(obj)

{

//设置人物状态为站立状态

obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);

}

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

请登录后发表评论

    暂无评论内容