返回列表 发布新帖
查看: 10|回复: 0

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

1

听众

176

主题

3494

积分

名望
106
贡献
1071
学分
943

活跃会员

学不进去发表于 2024-8-19 19:46:38 | 查看全部 |阅读模式
以男法师的windStrike(魔法旋风)为例
打开wind_strike.nut文件,可以看到几个以function开头的语句,下面分别介绍几个function的作用。
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被执行
5. function onKeyFrameFlag_WindStrike(obj,flagIndex)
人物做出的动作是分帧数的(ani文件),某些帧数可以在ani内设置为关键帧,当人物动作进行到关键帧时,此函数被执行。
了解每个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);//获取第二个静态数据
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);
}

学无止境社区免责声明
1 本社区名称:学无止境
2 永久网址: bbs.chaobaindnf.cn
3 本社区提供的一切软件、教程和内容信息仅限用于学习和研究目的;
4 不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。
5 本社区信息来自网络收集整理,版权争议与本站无关。
6 通过使用本站内容随之而来的风险与本站无关,您必须在下载后的24个小时之内,从您的电脑/手机中彻底删除上述内容。
7 本如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。
8 我们非常重视版权问题,如有侵权请与我们联系删除。敬请谅解!联系邮箱:849991827@qq.com或者QQ:849991827

名望值排行榜:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

投诉/建议联系

admin@chaobaindnf.cn

未经授权禁止转载,复制和建立镜像,
如有违反,追究法律责任
  • 加入Q群
  • 添加微信客服
Copyright © 2001-2024 学无止境技术分享 版权所有 All Rights Reserved. 皖ICP备2024057715号
Copyright 2024 bbs.chaobaindnf.cn 版权所有 作者:学无止境技术分享 皖ICP备2024057715号|皖ICP备2024057715号
关灯 在本版发帖
扫一扫添加微信客服
返回顶部
快速回复 返回顶部 返回列表