nut修改实例4:特效真伤,附完成血爆-第二部分

  1. 百分比伤害

①atk文件部分:

atk文件需要有图中语句,才能为百分比伤害。

nut修改实例4:特效真伤,附完成血爆-第二部分

 

②nut部分:

//获取百分比伤害

local attackBonusRate = obj.sq_GetBonusRateWithPassive(技能编号 , 主动技能state, 动态数据编号, 1.0);

 

注:动态数据即为skl内的[level info]下的数据

nut修改实例4:特效真伤,附完成血爆-第二部分

(动态数据编号只需要填一个编号)

 

 

 

//开始写入数据

obj.sq_StartWrite();

//写入百分比伤害数值 (格式代码必要流程)

obj.sq_WriteDword(attackBonusRate);

//创建特效

obj.sq_SendCreatePassiveObjectPacket(24201, 0, 120, 1, 0);   (数字分别代表 特效  X Y Z 轴坐标位置)

 

特效nut部分:

function setCustomData_po_特效名称(obj, receiveData) //ReceiveData为上面写入的数据

{

if(!obj)

return;

//获取写入的百分比伤害数据

local attackBonusRate = receiveData.readDword();

//获取特效的atk文件

local attackInfo = sq_GetCurrentAttackInfo(obj);

//atk设置百分比伤害

sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate);

}

 

nut百分比伤害就是设置atk中的

nut修改实例4:特效真伤,附完成血爆-第二部分

 

  1. 固定伤害

//获取固伤数据

local attackPower = obj.sq_GetPowerWithPassive(技能编号, 主动技能state, 动态数据编号, -1, 1.0);

//开始写入数据 (格式代码必要流程)

obj.sq_StartWrite();

//写入固伤伤害数值

obj.sq_WriteDword(attackPower);

//创建特效

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

 

特效nut部分:

function setCustomData_po_特效名称(obj, receiveData)  //ReceiveData为上面写入的数据(代表//获取的百分比伤害 attackBonusRate)

{

if(!obj)

return;

//获取写入的固伤伤害数据

local attackPower = receiveData.readDword();

//获取特效的atk文件

local attackInfo = sq_GetCurrentAttackInfo(obj);

//atk设置固伤伤害

sq_SetCurrentAttackBonusRate(attackInfo, attackPower);

}

 

nut设置固伤伤害就是设置atk中的

nut修改实例4:特效真伤,附完成血爆-第二部分

 

  1. 百分比+固定伤害

//获取百分比伤害

local attackBonusRate = obj.sq_GetBonusRateWithPassive(技能编号 , 主动技能state, 动态数据编号, 1.0);

//获取固伤

local attackPower = obj.sq_GetPowerWithPassive(技能编号, 主动技能state, 动态数据编号, -1, 1.0);

//开始写入数据

obj.sq_StartWrite();

//写入百分比伤害数值(receiveData中的第一个数据)

obj.sq_WriteDword(attackBonusRate);

//写入固伤数值(receiveData中的第二个数据)

obj.sq_WriteDword(attackPower);

//创建特效

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

 

特效nut部分:

function setCustomData_po_特效名称(obj, receiveData)

{

if(!obj)

return;

//获取百分比伤害数据(receiveData中的第一个数据)

local attackBonusRate = receiveData.readDword();

//获取固伤数据(receiveData中的第二个数据)

local power = receiveData.readDword();

 

//获取特效的atk文件

local attackInfo = sq_GetCurrentAttackInfo(obj);

//atk设置百分比伤害

sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate);

//atk设置固伤伤害

sq_SetCurrentAttackPower(attackInfo, power);

}

 

附:血爆真伤

能挂载nut的特效编号要在24300到24400之间,所以首先要改一下血爆特效的编号(改编号不用重跑服务端)

nut修改实例4:特效真伤,附完成血爆-第二部分

 

改完编号后,给特效挂载一个nut脚本,仍然是增加并注册一个脚本。

nut修改实例4:特效真伤,附完成血爆-第二部分

 

然后就是完成脚本,参考写法如下:

人物脚本修改:

function onKeyFrameFlag_BloodBoom(obj,flagIndex)

{

if(!obj)

return false;

 

if (flagIndex == 10001)

{

obj.sq_SendCreatePassiveObjectPacket(2020011001, 0, 0, 0, 0);  (创建编号2020011001的特效)

 

//获取固伤数据

local power = obj.sq_GetPowerWithPassive(SKILL_BLOOD_BOOM, STATE_BLOOD_BOOM, 0, -1, 1.0);

local z = obj.getObjectHeight()/2;

//开始写入数据

obj.sq_StartWrite();

//写入固伤数值

obj.sq_WriteDword(power);

//创建特效

obj.sq_SendCreatePassiveObjectPacket(24358, 0, 0, 0, z);

}

return true;

}

 

特效脚本部分:

//凡是写入了数据的特效(要求编号在24300到24400),均会执行此函数

function setCustomData_po_bloodboomfinish(obj, receiveData)//此后缀名为特效的名称,注意大小写要一致nut修改实例4:特效真伤,附完成血爆-第二部分

{

if(!obj)

return;

//获取固伤数值

local damage = receiveData.readDword();

//获取特效atk

local attackInfo = sq_GetCurrentAttackInfo(obj);

//设置固伤

sq_SetCurrentAttackPower(attackInfo, damage);

}

 

function onEndCurrentAni_po_bloodboomfinish(obj)//同人物的onEndCurrentAni函数一样,特效的这个函数也是在特效动画结束时执行

{

if(!obj)

return;

//特效动画结束时销毁特效

sq_SendDestroyPacketPassiveObject(obj);

}

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

请登录后发表评论

    暂无评论内容