①atk文件部分:
atk文件需要有图中语句,才能为百分比伤害。
②nut部分:
//获取百分比伤害
local attackBonusRate = obj.sq_GetBonusRateWithPassive(技能编号 , 主动技能state, 动态数据编号, 1.0);
注:动态数据即为skl内的[level info]下的数据
(动态数据编号只需要填一个编号)
//开始写入数据
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中的
//获取固伤数据
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中的
//获取百分比伤害
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脚本,仍然是增加并注册一个脚本。
然后就是完成脚本,参考写法如下:
人物脚本修改:
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)//此后缀名为特效的名称,注意大小写要一致 {
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);
}