1254 lines
41 KiB
C
1254 lines
41 KiB
C
|
||
|
||
//超真空弹 : 切利
|
||
function checkExecutableSkill_Chelli(obj)
|
||
{
|
||
if (!obj) return false;
|
||
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CHELLI);
|
||
if (isUse){
|
||
obj.sq_IntVectClear();
|
||
if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(1);
|
||
else obj.sq_IntVectPush(0);
|
||
obj.sq_AddSetStatePacket(STATE_BYKK_CHELLI, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
function checkCommandEnable_Chelli(obj)
|
||
{
|
||
if (!obj) return false;
|
||
local state = obj.getState();
|
||
if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){
|
||
if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){
|
||
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR);
|
||
if(loadSlot){
|
||
local loadNumber = loadSlot.getRemainLoadNumber();
|
||
if(loadNumber > 0) return true;
|
||
else return false;
|
||
}
|
||
else return false;
|
||
}
|
||
else return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
function onSetState_Chelli(obj, state, datas, isResetTimer)
|
||
{
|
||
if(!obj) return;
|
||
local subState = obj.sq_GetVectorData(datas, 0);
|
||
obj.setSkillSubState(subState);
|
||
obj.sq_StopMove();
|
||
obj.sq_ZStop();
|
||
switch(subState){
|
||
case 0:
|
||
obj.sq_SetCurrentAnimation(ATANI_BYKK_ATCHELLIGROUND_BODY);
|
||
obj.sq_PlaySound("R_FG_CHELLI");
|
||
obj.sq_PlaySound("CHELLI_01");
|
||
break;
|
||
case 1:
|
||
obj.sq_SetCurrentAnimation(ATANI_BYKK_ATCHELLIAIR_BODY);
|
||
obj.sq_PlaySound("R_FG_CHELLI");
|
||
obj.sq_PlaySound("CHELLI_02");
|
||
break;
|
||
}
|
||
local size = obj.getVar("chelliObj").get_obj_vector_size();
|
||
if(size > 0){
|
||
for(local i = 0; i < size; i++){
|
||
local chelliObj = obj.getVar("chelliObj").get_obj_vector(i);
|
||
if(chelliObj){
|
||
local colObj = sq_GetCNRDObjectToCollisionObject(chelliObj);
|
||
local subtype = colObj.getVar("subtype").getInt(0);
|
||
if(subtype == 2) colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");
|
||
else colObj.setTimeEvent(5, 1000, 1, true);
|
||
}
|
||
}
|
||
}
|
||
obj.getVar("chelliObj").clear_obj_vector();
|
||
obj.getVar("chelliTarget").clear_obj_vector();
|
||
}
|
||
|
||
function onEndCurrentAni_Chelli(obj)
|
||
{
|
||
if(!obj) return;
|
||
local subState = obj.getSkillSubState();
|
||
switch(subState){
|
||
case 0:
|
||
obj.sq_IntVectClear();
|
||
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
||
break;
|
||
case 1:
|
||
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){
|
||
obj.sq_IntVectClear();
|
||
obj.sq_IntVectPush(3);
|
||
obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true);
|
||
return;
|
||
}
|
||
local zPos = sq_GetZPos(obj) + 30;
|
||
// if(zPos > 200) zPos = 0;
|
||
// else zPos = zPos + 50;
|
||
obj.sq_IntVectClear();
|
||
obj.sq_IntVectPush(1);
|
||
obj.sq_IntVectPush(0);
|
||
obj.sq_IntVectPush(zPos);
|
||
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true);
|
||
break;
|
||
}
|
||
}
|
||
|
||
function onProcCon_Chelli(obj)
|
||
{
|
||
if(!obj) return;
|
||
}
|
||
|
||
function onKeyFrameFlag_Chelli(obj, flagIndex)
|
||
{
|
||
if(!obj) return false;
|
||
switch(flagIndex){
|
||
case 1://45 0 75
|
||
case 2://50 0 65
|
||
local offsetX = 105, offsetY = 0, offsetZ = 75;
|
||
if(flagIndex == 2) {offsetX = 45; offsetY = 0; offsetZ = 65;}
|
||
local totalDamage_phase1 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CHELLI, -1, 1, 1.0);
|
||
local hitMax_phase1 = sq_GetIntData(obj, SKILL_BYKK_CHELLI, 12);
|
||
local totalDamage_phase2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CHELLI, -1, 2, 1.0);
|
||
local hitMax_phase2 = sq_GetIntData(obj, SKILL_BYKK_CHELLI, 14);
|
||
local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CHELLI, -1, 0, 1.0);
|
||
local grenadeMax = sq_GetIntData(obj, SKILL_BYKK_CHELLI, 15);
|
||
local grenadeAddRate = sq_GetIntData(obj, SKILL_BYKK_CHELLI, 8);
|
||
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,offsetY,offsetZ,sq_GetDirection(obj),4,SKILL_BYKK_CHELLI,1,totalDamage_phase1,hitMax_phase1,totalDamage_phase2,hitMax_phase2,totalDamageExp,grenadeMax,grenadeAddRate,0);
|
||
break;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
function onTimeEvent_Chelli(obj, timeEventIndex, timeEventCount)
|
||
{
|
||
if(!obj) return false;
|
||
}
|
||
|
||
function onEndState_Chelli(obj, new_state)
|
||
{
|
||
if(!obj) return;
|
||
}
|
||
|
||
|
||
//开火
|
||
function checkExecutableSkill_OpenFire(obj)
|
||
{
|
||
if (!obj) return false;
|
||
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_OPENFIRE);
|
||
if (isUse){
|
||
obj.sq_IntVectClear();
|
||
obj.sq_IntVectPush(0);
|
||
obj.sq_AddSetStatePacket(STATE_BYKK_OPENFIRE, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
function checkCommandEnable_OpenFire(obj)
|
||
{
|
||
if (!obj) return false;
|
||
local state = obj.getState();
|
||
if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){
|
||
if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){
|
||
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR);
|
||
if(loadSlot){
|
||
local loadNumber = loadSlot.getRemainLoadNumber();
|
||
if(loadNumber > 0) return true;
|
||
else return false;
|
||
}
|
||
else return false;
|
||
}
|
||
else return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
function onSetState_OpenFire(obj, state, datas, isResetTimer)
|
||
{
|
||
if(!obj) return;
|
||
local subState = obj.sq_GetVectorData(datas, 0);
|
||
obj.setSkillSubState(subState);
|
||
obj.sq_StopMove();
|
||
obj.sq_ZStop();
|
||
switch(subState){
|
||
case 0:
|
||
obj.sq_SetCurrentAnimation(ATANI_BYKK_ATOPENFIRECASTING_BODY);
|
||
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
if(sq_GetZPos(obj) == 0){
|
||
local currentAni = obj.getCurrentAnimation();
|
||
local delay = currentAni.getDelaySum(0, 2);
|
||
obj.setTimeEvent(1, delay / 20, 20, true);
|
||
}
|
||
else{
|
||
determineNitromotor_bykk(obj, STATE_BYKK_OPENFIRE);
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
function onEndCurrentAni_OpenFire(obj)
|
||
{
|
||
if(!obj) return;
|
||
local subState = obj.getSkillSubState();
|
||
switch(subState){
|
||
case 0:
|
||
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){
|
||
obj.sq_IntVectClear();
|
||
obj.sq_IntVectPush(3);
|
||
obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true);
|
||
return;
|
||
}
|
||
local zPos = sq_GetZPos(obj) + 30;
|
||
// if(zPos > 200) zPos = 0;
|
||
// else zPos = zPos + 50;
|
||
obj.sq_IntVectClear();
|
||
obj.sq_IntVectPush(1);
|
||
obj.sq_IntVectPush(0);
|
||
obj.sq_IntVectPush(zPos);
|
||
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true);
|
||
break;
|
||
}
|
||
}
|
||
|
||
function onProcCon_OpenFire(obj)
|
||
{
|
||
if(!obj) return;
|
||
}
|
||
|
||
function onKeyFrameFlag_OpenFire(obj, flagIndex)
|
||
{
|
||
if(!obj) return false;
|
||
switch(flagIndex){
|
||
case 1:
|
||
local createMax = sq_GetIntData(obj, SKILL_BYKK_OPENFIRE, 7);
|
||
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_OPENFIRE, -1, 0, 1.0);
|
||
for(local i = 0; i < createMax; i++){
|
||
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,35 + sq_getRandom(-5,5),0,65 + sq_getRandom(-5,5),sq_GetDirection(obj),4,SKILL_BYKK_OPENFIRE,sq_getRandom(2,4),0,0,0,0,0,0,0,0);
|
||
}
|
||
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,300,0,-sq_GetZPos(obj),sq_GetDirection(obj),4,SKILL_BYKK_OPENFIRE,1,totalDamage,createMax,0,0,0,0,0,0);
|
||
break;
|
||
case 2:
|
||
local createMax = sq_GetIntData(obj, SKILL_BYKK_OPENFIRE, 7);
|
||
for(local i = 0; i < createMax; i++){
|
||
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,35 + sq_getRandom(-5,5),0,65 + sq_getRandom(-5,5),sq_GetDirection(obj),4,SKILL_BYKK_OPENFIRE,sq_getRandom(2,4),0,0,0,0,0,0,0,0);
|
||
}
|
||
break;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
function onTimeEvent_OpenFire(obj, timeEventIndex, timeEventCount)
|
||
{
|
||
if(!obj) return false;
|
||
switch(timeEventIndex){
|
||
case 1:
|
||
local vz = sq_GetUniformVelocity(0, 150, timeEventCount, 20);
|
||
sq_setCurrentAxisPos(obj, 2, vz);
|
||
break;
|
||
}
|
||
}
|
||
|
||
function onEndState_OpenFire(obj, new_state)
|
||
{
|
||
if(!obj) return;
|
||
}
|
||
|
||
|
||
//光子霰雷发射器
|
||
function checkExecutableSkill_PhotoBilizer(obj)
|
||
{
|
||
if (!obj) return false;
|
||
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PHOTOBILIZER);
|
||
if (isUse){
|
||
obj.sq_IntVectClear();
|
||
obj.sq_IntVectPush(0);
|
||
obj.sq_AddSetStatePacket(STATE_BYKK_PHOTOBILIZER, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
function checkCommandEnable_PhotoBilizer(obj)
|
||
{
|
||
if (!obj) return false;
|
||
local state = obj.getState();
|
||
if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){
|
||
if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){
|
||
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR);
|
||
if(loadSlot){
|
||
local loadNumber = loadSlot.getRemainLoadNumber();
|
||
if(loadNumber > 0) return true;
|
||
else return false;
|
||
}
|
||
else return false;
|
||
}
|
||
else return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
function onSetState_PhotoBilizer(obj, state, datas, isResetTimer)
|
||
{
|
||
if(!obj) return;
|
||
local subState = obj.sq_GetVectorData(datas, 0);
|
||
obj.setSkillSubState(subState);
|
||
obj.sq_StopMove();
|
||
obj.sq_ZStop();
|
||
switch(subState){
|
||
case 0:
|
||
obj.sq_SetCurrentAnimation(ATANI_BYKK_ATPHOTOBILIZER_BODY);
|
||
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
if(sq_GetZPos(obj) == 0){
|
||
local currentAni = obj.getCurrentAnimation();
|
||
local delay = currentAni.getDelaySum(0, 0);
|
||
obj.setTimeEvent(1, delay / 5, 5, true);
|
||
sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/4_spitfire/atphotobilizer/atphotobilizershoteffect_00.ani", 0, 0, 0);
|
||
}
|
||
else determineNitromotor_bykk(obj, 0);
|
||
obj.sq_PlaySound("RG_FG_PHOTOBILIZER_01");
|
||
obj.sq_PlaySound("PHOTOBILIZER_READY");
|
||
break;
|
||
}
|
||
}
|
||
|
||
function onEndCurrentAni_PhotoBilizer(obj)
|
||
{
|
||
if(!obj) return;
|
||
local subState = obj.getSkillSubState();
|
||
switch(subState){
|
||
case 0:
|
||
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){
|
||
obj.sq_IntVectClear();
|
||
obj.sq_IntVectPush(3);
|
||
obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true);
|
||
return;
|
||
}
|
||
local zPos = sq_GetZPos(obj) + 30;
|
||
// if(zPos > 200) zPos = 0;
|
||
// else zPos = zPos + 50;
|
||
obj.sq_IntVectClear();
|
||
obj.sq_IntVectPush(1);
|
||
obj.sq_IntVectPush(0);
|
||
obj.sq_IntVectPush(zPos);
|
||
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true);
|
||
break;
|
||
}
|
||
}
|
||
|
||
function onProcCon_PhotoBilizer(obj)
|
||
{
|
||
if(!obj) return;
|
||
}
|
||
|
||
function onKeyFrameFlag_PhotoBilizer(obj, flagIndex)
|
||
{
|
||
if(!obj) return false;
|
||
switch(flagIndex){
|
||
case 1:
|
||
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PHOTOBILIZER, -1, 0, 1.0);
|
||
local hitMax = sq_GetIntData(obj, SKILL_BYKK_PHOTOBILIZER, 16);
|
||
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,35,0,65,sq_GetDirection(obj),4,SKILL_BYKK_PHOTOBILIZER,1,totalDamage,hitMax,0,0,0,0,0,0);
|
||
local sqrxPos = sq_GetXPos(obj);
|
||
local sqryPos = sq_GetYPos(obj);
|
||
local tarxPos = sq_GetDistancePos(sqrxPos, sq_GetDirection(obj), 200);
|
||
local taryPos = sqryPos;
|
||
local createMax = 10;
|
||
local baseAngle = 100;
|
||
if(sq_GetDirection(obj) == ENUM_DIRECTION_LEFT) baseAngle = -80;
|
||
for(local i = 0; i < createMax; i++){
|
||
local angle = 180 / createMax * i + baseAngle;
|
||
local basexPos = (sq_Cos(sq_ToRadian(angle.tofloat())) * 5.0).tointeger();
|
||
local baseyPos = (sq_Sin(sq_ToRadian(angle.tofloat())) * 5.0).tointeger();
|
||
local movexPos = (sq_Cos(sq_ToRadian(angle.tofloat())) * 75.0).tointeger() + sqrxPos;
|
||
local moveyPos = (sq_Sin(sq_ToRadian(angle.tofloat())) * 45.0).tointeger() + sqryPos;
|
||
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,basexPos,baseyPos,65,sq_GetDirection(obj),4,SKILL_BYKK_PHOTOBILIZER,4,movexPos,moveyPos,tarxPos,taryPos,0,0,0,0);
|
||
}
|
||
break;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
function onTimeEvent_PhotoBilizer(obj, timeEventIndex, timeEventCount)
|
||
{
|
||
if(!obj) return false;
|
||
switch(timeEventIndex){
|
||
case 1:
|
||
local vz = sq_GetUniformVelocity(0, 150, timeEventCount, 5);
|
||
sq_setCurrentAxisPos(obj, 2, vz);
|
||
break;
|
||
}
|
||
}
|
||
|
||
function onEndState_PhotoBilizer(obj, new_state)
|
||
{
|
||
if(!obj) return;
|
||
}
|
||
|
||
|
||
//EMP磁暴
|
||
function checkExecutableSkill_EmpStorm(obj)
|
||
{
|
||
if (!obj) return false;
|
||
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_EMPSTORM);
|
||
if (isUse){
|
||
obj.sq_IntVectClear();
|
||
if(sq_GetZPos(obj) > 0){
|
||
obj.sq_IntVectPush(2);
|
||
}
|
||
else{
|
||
obj.sq_IntVectPush(0);
|
||
obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_EMPSTORM);
|
||
}
|
||
obj.sq_AddSetStatePacket(STATE_BYKK_EMPSTORM, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
function checkCommandEnable_EmpStorm(obj)
|
||
{
|
||
if (!obj) return false;
|
||
local state = obj.getState();
|
||
if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){
|
||
if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){
|
||
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR);
|
||
if(loadSlot){
|
||
local loadNumber = loadSlot.getRemainLoadNumber();
|
||
if(loadNumber > 0) return true;
|
||
else return false;
|
||
}
|
||
else return false;
|
||
}
|
||
else return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
function onSetState_EmpStorm(obj, state, datas, isResetTimer)
|
||
{
|
||
if(!obj) return;
|
||
local subState = obj.sq_GetVectorData(datas, 0);
|
||
obj.setSkillSubState(subState);
|
||
obj.sq_StopMove();
|
||
obj.sq_ZStop();
|
||
switch(subState){
|
||
case 0:
|
||
local Ani = obj.sq_GetThrowChargeAni(1);
|
||
obj.setCurrentAnimation(Ani);
|
||
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
local currentAni = obj.getCurrentAnimation();
|
||
local delay = currentAni.getDelaySum(false);
|
||
sq_StartDrawCastGauge(obj, delay, true);
|
||
obj.sq_PlaySound("FG_EMPSTORM");
|
||
break;
|
||
case 1:
|
||
local Ani = obj.sq_GetThrowShootAni(1);
|
||
obj.setCurrentAnimation(Ani);
|
||
sq_EndDrawCastGauge(obj);
|
||
break;
|
||
case 2:
|
||
obj.sq_SetCurrentAnimation(ATANI_BYKK_EMPSTORMAIR);
|
||
obj.sq_PlaySound("FG_EMPSTORM");
|
||
break;
|
||
}
|
||
}
|
||
|
||
function onEndCurrentAni_EmpStorm(obj)
|
||
{
|
||
if(!obj) return;
|
||
local subState = obj.getSkillSubState();
|
||
switch(subState){
|
||
case 0:
|
||
local posX = obj.getXPos();
|
||
local posY = obj.getYPos();
|
||
local posZ = obj.getZPos();
|
||
|
||
local offsetX = 130;
|
||
offsetX = obj.sq_GetDistancePos(posX, obj.sq_GetDirection(), offsetX);
|
||
|
||
local vX = 800;
|
||
local vY = 300;
|
||
|
||
obj.sq_AddAimPointMark(offsetX, posY, vX, vY);
|
||
obj.getVar("empStromBool").setBool(0, true);
|
||
obj.sq_IntVectClear();
|
||
obj.sq_IntVectPush(1);
|
||
obj.sq_AddSetStatePacket(STATE_BYKK_EMPSTORM, STATE_PRIORITY_AUTO, true);
|
||
break;
|
||
case 1:
|
||
// obj.sq_IntVectClear();
|
||
// obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
||
break;
|
||
case 2:
|
||
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){
|
||
obj.sq_IntVectClear();
|
||
obj.sq_IntVectPush(3);
|
||
obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true);
|
||
return;
|
||
}
|
||
local zPos = sq_GetZPos(obj) + 30;
|
||
// if(zPos > 200) zPos = 0;
|
||
// else zPos = zPos + 50;
|
||
obj.sq_IntVectClear();
|
||
obj.sq_IntVectPush(1);
|
||
obj.sq_IntVectPush(0);
|
||
obj.sq_IntVectPush(zPos);
|
||
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true);
|
||
break;
|
||
}
|
||
}
|
||
|
||
function onProcCon_EmpStorm(obj)
|
||
{
|
||
if(!obj) return;
|
||
local subState = obj.getSkillSubState();
|
||
switch(subState){
|
||
case 1:
|
||
local stateTime = obj.sq_GetStateTimer();
|
||
local bDownKey = obj.isDownSkillLastKey();
|
||
|
||
local posX = obj.getXPos();
|
||
local posY = obj.getYPos();
|
||
if((!bDownKey || (bDownKey && stateTime >= 600))){
|
||
if(obj.getVar("empStromBool").getBool(0)){
|
||
obj.getVar("empStromBool").setBool(0, false);
|
||
obj.getVar("empStromObj").clear_obj_vector();
|
||
local aimPosX = obj.sq_GetAimPosX(posX, posY, false);
|
||
local aimPosY = obj.sq_GetAimPosY(posX, posY, false);
|
||
|
||
local ani = sq_CreateAnimation("","passiveobject/actionobject/monster/cartelcommand/animation/gunneraimpointmark2.ani");
|
||
local pooledObj = sq_CreatePooledObject(ani,true);//创建绘画对象 参数2:应该是ani结束时true 就销毁反之false不销毁
|
||
sq_SetCurrentDirection(pooledObj, obj.getDirection());//设置方向
|
||
pooledObj.setCurrentPos(aimPosX,aimPosY,0);//设置pos
|
||
pooledObj = sq_SetEnumDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM);//设置图层
|
||
sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false);//增加对象
|
||
|
||
local totalDamage_drop = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_EMPSTORM, -1, 3, 1.0);
|
||
local totalDamage_phase1 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_EMPSTORM, -1, 0, 1.0);
|
||
local totalDamage_phase2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_EMPSTORM, -1, 1, 1.0);
|
||
local hitMax_phase2 = sq_GetIntData(obj, SKILL_BYKK_EMPSTORM, 18);
|
||
local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_EMPSTORM, -1, 2, 1.0);
|
||
sq_BinaryStartWrite();
|
||
sq_BinaryWriteDword(4);
|
||
sq_BinaryWriteDword(SKILL_BYKK_EMPSTORM);
|
||
sq_BinaryWriteDword(1);
|
||
sq_BinaryWriteDword(totalDamage_drop);
|
||
sq_BinaryWriteDword(totalDamage_phase1);
|
||
sq_BinaryWriteDword(totalDamage_phase2);
|
||
sq_BinaryWriteDword(hitMax_phase2);
|
||
sq_BinaryWriteDword(totalDamageExp);
|
||
sq_BinaryWriteDword(0);
|
||
sq_BinaryWriteDword(0);
|
||
sq_BinaryWriteDword(0);
|
||
sq_SendCreatePassiveObjectPacketPos(obj, PASSIVEOBJ_BYKK_ATGUNNER, 0, aimPosX, aimPosY, 300);
|
||
|
||
sq_BinaryStartWrite();
|
||
sq_BinaryWriteDword(4);
|
||
sq_BinaryWriteDword(SKILL_BYKK_EMPSTORM);
|
||
sq_BinaryWriteDword(3);
|
||
sq_BinaryWriteDword(0);
|
||
sq_BinaryWriteDword(0);
|
||
sq_BinaryWriteDword(0);
|
||
sq_BinaryWriteDword(0);
|
||
sq_BinaryWriteDword(0);
|
||
sq_BinaryWriteDword(0);
|
||
sq_BinaryWriteDword(0);
|
||
sq_BinaryWriteDword(0);
|
||
sq_SendCreatePassiveObjectPacketPos(obj, PASSIVEOBJ_BYKK_ATGUNNER, 0, aimPosX, aimPosY + 1, 300);
|
||
|
||
sq_BinaryStartWrite();
|
||
sq_BinaryWriteDword(4);
|
||
sq_BinaryWriteDword(SKILL_BYKK_EMPSTORM);
|
||
sq_BinaryWriteDword(4);
|
||
sq_BinaryWriteDword(0);
|
||
sq_BinaryWriteDword(0);
|
||
sq_BinaryWriteDword(0);
|
||
sq_BinaryWriteDword(0);
|
||
sq_BinaryWriteDword(0);
|
||
sq_BinaryWriteDword(0);
|
||
sq_BinaryWriteDword(0);
|
||
sq_BinaryWriteDword(0);
|
||
sq_SendCreatePassiveObjectPacketPos(obj, PASSIVEOBJ_BYKK_ATGUNNER, 0, aimPosX, aimPosY - 3, 300);
|
||
|
||
obj.sq_IntVectClear();
|
||
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
function onKeyFrameFlag_EmpStorm(obj, flagIndex)
|
||
{
|
||
if(!obj) return false;
|
||
switch(flagIndex){
|
||
case 0:
|
||
local totalDamage_drop = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_EMPSTORM, -1, 3, 1.0);
|
||
local totalDamage_phase1 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_EMPSTORM, -1, 0, 1.0);
|
||
local totalDamage_phase2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_EMPSTORM, -1, 1, 1.0);
|
||
local hitMax_phase2 = sq_GetIntData(obj, SKILL_BYKK_EMPSTORM, 18);
|
||
local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_EMPSTORM, -1, 2, 1.0);
|
||
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,200,0,300-sq_GetZPos(obj),sq_GetDirection(obj),4,SKILL_BYKK_EMPSTORM,1,totalDamage_drop,totalDamage_phase1,totalDamage_phase2,hitMax_phase2,totalDamageExp,0,0,0);
|
||
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,200,1,300-sq_GetZPos(obj),sq_GetDirection(obj),4,SKILL_BYKK_EMPSTORM,3,0,0,0,0,0,0,0,0);
|
||
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,200,-3,300-sq_GetZPos(obj),sq_GetDirection(obj),4,SKILL_BYKK_EMPSTORM,4,0,0,0,0,0,0,0,0);
|
||
break
|
||
}
|
||
return true;
|
||
}
|
||
|
||
function onTimeEvent_EmpStorm(obj, timeEventIndex, timeEventCount)
|
||
{
|
||
if(!obj) return false;
|
||
}
|
||
|
||
function onEndState_EmpStorm(obj, new_state)
|
||
{
|
||
if(!obj) return;
|
||
if(new_state != STATE_BYKK_EMPSTORM){
|
||
obj.sq_RemoveAimPointMark();
|
||
}
|
||
}
|
||
|
||
|
||
//决战之日
|
||
function checkExecutableSkill_Dday(obj)
|
||
{
|
||
if (!obj) return false;
|
||
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DDAY);
|
||
if (isUse){
|
||
obj.sq_IntVectClear();
|
||
if(sq_GetZPos(obj)) obj.sq_IntVectPush(2);
|
||
else obj.sq_IntVectPush(0);
|
||
obj.sq_AddSetStatePacket(STATE_BYKK_DDAY, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
function checkCommandEnable_Dday(obj)
|
||
{
|
||
if (!obj) return false;
|
||
local state = obj.getState();
|
||
if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){
|
||
if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){
|
||
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR);
|
||
if(loadSlot){
|
||
local loadNumber = loadSlot.getRemainLoadNumber();
|
||
if(loadNumber > 0) return true;
|
||
else return false;
|
||
}
|
||
else return false;
|
||
}
|
||
else return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
function onSetState_Dday(obj, state, datas, isResetTimer)
|
||
{
|
||
if(!obj) return;
|
||
local subState = obj.sq_GetVectorData(datas, 0);
|
||
obj.setSkillSubState(subState);
|
||
obj.sq_StopMove();
|
||
obj.sq_ZStop();
|
||
switch(subState){
|
||
case 0:
|
||
local Ani = obj.sq_GetThrowChargeAni(2);
|
||
obj.setCurrentAnimation(Ani);
|
||
break;
|
||
case 1:
|
||
local Ani = obj.sq_GetThrowShootAni(2);
|
||
obj.setCurrentAnimation(Ani);
|
||
obj.sq_PlaySound("FG_D_DAY");
|
||
break;
|
||
case 2:
|
||
obj.sq_SetCurrentAnimation(ATANI_BYKK_GRENADEAIR);
|
||
determineNitromotor_bykk(obj, 0);
|
||
obj.sq_PlaySound("FG_D_DAY");
|
||
break;
|
||
}
|
||
}
|
||
|
||
function onEndCurrentAni_Dday(obj)
|
||
{
|
||
if(!obj) return;
|
||
local subState = obj.getSkillSubState();
|
||
switch(subState){
|
||
case 0:
|
||
obj.sq_IntVectClear();
|
||
obj.sq_IntVectPush(1);
|
||
obj.sq_AddSetStatePacket(STATE_BYKK_DDAY, STATE_PRIORITY_AUTO, true);
|
||
break;
|
||
case 1:
|
||
obj.sq_IntVectClear();
|
||
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
||
break;
|
||
case 2:
|
||
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){
|
||
obj.sq_IntVectClear();
|
||
obj.sq_IntVectPush(3);
|
||
obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true);
|
||
return;
|
||
}
|
||
local zpos = sq_GetZPos(obj) + 30;
|
||
// if(zpos > 200) zpos = 0;
|
||
obj.sq_IntVectClear();
|
||
obj.sq_IntVectPush(1);
|
||
obj.sq_IntVectPush(0);
|
||
obj.sq_IntVectPush(zpos);
|
||
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true);
|
||
break;
|
||
}
|
||
}
|
||
|
||
function onProcCon_Dday(obj)
|
||
{
|
||
if(!obj) return;
|
||
}
|
||
|
||
function onKeyFrameFlag_Dday(obj, flagIndex)
|
||
{
|
||
if(!obj) return false;
|
||
switch(flagIndex){
|
||
case 0:
|
||
case 1:
|
||
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DDAY, -1, 0, 1.0);
|
||
local hitMax = 40;
|
||
if(flagIndex == 0) createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,35,0,75,sq_GetDirection(obj),4,SKILL_BYKK_DDAY,1,totalDamage,hitMax,0,0,0,0,0,0);
|
||
else createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,35,0,65,sq_GetDirection(obj),4,SKILL_BYKK_DDAY,1,totalDamage,hitMax,3,0,0,0,0,0);
|
||
break;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
function onTimeEvent_Dday(obj, timeEventIndex, timeEventCount)
|
||
{
|
||
if(!obj) return false;
|
||
}
|
||
|
||
function onEndState_Dday(obj, new_state)
|
||
{
|
||
if(!obj) return;
|
||
}
|
||
|
||
|
||
//空袭战略
|
||
function checkExecutableSkill_StandByReady(obj)
|
||
{
|
||
if (!obj) return false;
|
||
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_STANDBYREADY);
|
||
if (isUse){
|
||
obj.getVar("standbyready").setBool(0, true);
|
||
obj.sq_IntVectClear();
|
||
if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(4);
|
||
else obj.sq_IntVectPush(0);
|
||
obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
function checkCommandEnable_StandByReady(obj)
|
||
{
|
||
if (!obj) return false;
|
||
return true;
|
||
}
|
||
|
||
function onSetState_StandByReady(obj, state, datas, isResetTimer)
|
||
{
|
||
if(!obj) return;
|
||
local subState = obj.sq_GetVectorData(datas, 0);
|
||
obj.setSkillSubState(subState);
|
||
obj.sq_StopMove();
|
||
obj.sq_ZStop();
|
||
switch(subState){
|
||
case 0:
|
||
obj.sq_SetCurrentAnimation(ATANI_BYKK_STANDBY_READYJUMP_BODY);
|
||
// obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/skl95_bykk/atstandby-ready/smokestartfront_00.ani", 0, 0, 0);
|
||
sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/skl95_bykk/atstandby-ready/smokestartback_00.ani", 0, -2, 0);
|
||
local currentAni = obj.getCurrentAnimation();
|
||
local delay = currentAni.getDelaySum(1, 1);
|
||
obj.setTimeEvent(1, delay / 10, 10, true);
|
||
obj.sq_PlaySound("RG_SBR_01");
|
||
break;
|
||
case 1:
|
||
obj.sq_SetCurrentAnimation(ATANI_BYKK_STANDBY_READYLOOP_BODY);
|
||
local apdPath = "character/atgunner/4_spitfire_bykk/ap_standbyready.nut";
|
||
if(obj.getVar("standbyready").getBool(0)){
|
||
obj.getVar("standbyready").setBool(0, false);
|
||
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath);
|
||
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_STANDBYREADY, false, apdPath, true);
|
||
local time = sq_GetIntData(obj, SKILL_BYKK_STANDBYREADY, 1);
|
||
AddAppendage.sq_SetValidTime(time);
|
||
AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_STANDBYREADY, sq_GetSkillLevel(obj, SKILL_BYKK_STANDBYREADY));
|
||
CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true);
|
||
}
|
||
break;
|
||
case 2:
|
||
obj.sq_SetCurrentAnimation(ATANI_BYKK_STANDBY_READYEND_BODY);
|
||
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
break;
|
||
case 3:
|
||
obj.sq_SetCurrentAnimation(ATANI_BYKK_STANDBY_READYRELOOP_BODY);
|
||
break;
|
||
case 4:
|
||
obj.sq_SetCurrentAnimation(ATANI_BYKK_ATM18CLAYMORE_AIR_NO2X_BODY);
|
||
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
obj.sq_PlaySound("RG_SBR_02");
|
||
break;
|
||
case 100:
|
||
local ani = obj.sq_GetStayAni();
|
||
obj.setCurrentAnimation(ani);
|
||
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0));
|
||
|
||
local attackInfo = sq_GetCurrentAttackInfo(obj);
|
||
if(attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) obj.getVar("element_kk").setInt(0, 100);
|
||
else obj.getVar("element_kk").setInt(0, 0);
|
||
if(attackInfo.isValidElement(ENUM_ELEMENT_WATER)) obj.getVar("element_kk").setInt(1, 100);
|
||
else obj.getVar("element_kk").setInt(1, 0);
|
||
if(attackInfo.isValidElement(ENUM_ELEMENT_DARK)) obj.getVar("element_kk").setInt(2, 100);
|
||
else obj.getVar("element_kk").setInt(2, 0);
|
||
if(attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) obj.getVar("element_kk").setInt(3, 100);
|
||
else obj.getVar("element_kk").setInt(3, 0);
|
||
obj.setTimeEvent(10, 50, 1, false);
|
||
print("getatkelement_success");
|
||
break;
|
||
}
|
||
}
|
||
|
||
function onEndCurrentAni_StandByReady(obj)
|
||
{
|
||
if(!obj) return;
|
||
local subState = obj.getSkillSubState();
|
||
switch(subState){
|
||
case 0:
|
||
case 3:
|
||
case 4:
|
||
obj.sq_IntVectClear();
|
||
obj.sq_IntVectPush(1);
|
||
obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true);
|
||
break;
|
||
case 2:
|
||
obj.sq_IntVectClear();
|
||
obj.sq_IntVectPush(1);
|
||
obj.sq_IntVectPush(0);
|
||
obj.sq_IntVectPush(sq_GetZPos(obj));
|
||
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true);
|
||
break;
|
||
}
|
||
}
|
||
|
||
function onProcCon_StandByReady(obj)
|
||
{
|
||
if(!obj) return;
|
||
local subState = obj.getSkillSubState();
|
||
switch(subState){
|
||
case 1:
|
||
case 3:
|
||
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){
|
||
obj.sq_IntVectClear();
|
||
obj.sq_IntVectPush(2);
|
||
obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true);
|
||
break;
|
||
}
|
||
obj.setSkillCommandEnable(SKILL_BYKK_STANDBYREADY,true);
|
||
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_STANDBYREADY);
|
||
if(b_useskill != -1){
|
||
obj.sq_IntVectClear();
|
||
obj.sq_IntVectPush(2);
|
||
obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true);
|
||
break;
|
||
}
|
||
nitroMotor_bykk(obj);
|
||
break;
|
||
}
|
||
}
|
||
|
||
function onKeyFrameFlag_StandByReady(obj, flagIndex)
|
||
{
|
||
if(!obj) return false;
|
||
switch(flagIndex){
|
||
case 1:
|
||
print("flagIndex = "+flagIndex);
|
||
if(obj.getSkillSubState() == 2){
|
||
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STANDBYREADY, -1, 3, 1.0);
|
||
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,55,0,65,sq_GetDirection(obj),4,SKILL_BYKK_STANDBYREADY,1,totalDamage,0,0,0,0,0,0,0);
|
||
}
|
||
break;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
function onTimeEvent_StandByReady(obj, timeEventIndex, timeEventCount)
|
||
{
|
||
if(!obj) return false;
|
||
switch(timeEventIndex){
|
||
case 1:
|
||
local vz = sq_GetUniformVelocity(0, 165, timeEventCount, 10);
|
||
sq_setCurrentAxisPos(obj, 2, vz);
|
||
break;
|
||
case 10:
|
||
obj.sq_IntVectClear();
|
||
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
||
break;
|
||
}
|
||
}
|
||
|
||
function onEndState_StandByReady(obj, new_state)
|
||
{
|
||
if(!obj) return;
|
||
}
|
||
|
||
function onEnd_appendage_at_standbyready(appendage)
|
||
{
|
||
if(!appendage) return;
|
||
local parentObj = appendage.getParent();
|
||
if(parentObj && parentObj.getState() != STATE_DIE){
|
||
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
||
local state = obj.getState();
|
||
if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){
|
||
obj.sq_IntVectClear();
|
||
obj.sq_IntVectPush(2);
|
||
obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true);
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
function onStart_appendage_at_bulletexplosive(appendage)
|
||
{
|
||
if(!appendage) return;
|
||
}
|
||
|
||
function onStart_appendage_at_bulletpenetrate(appendage)
|
||
{
|
||
if(!appendage) return;
|
||
}
|
||
|
||
function onStart_appendage_at_bulletspecific(appendage)
|
||
{
|
||
if(!appendage) return;
|
||
}
|
||
|
||
function onStart_appendage_at_overcharge(appendage)
|
||
{
|
||
if(!appendage) return;
|
||
local parentObj = appendage.getParent();
|
||
if(!parentObj || parentObj.getState() == STATE_DIE) return;
|
||
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
||
local elementSelect = appendage.getVar("element").getInt(0);
|
||
if(elementSelect == 4 && sq_GetSkillLevel(obj, 31) > 0){
|
||
local change_appendage = appendage.sq_getChangeStatus("at_overcharge");
|
||
local attackSpeed = sq_GetLevelData(obj, 31, 9, sq_GetSkillLevel(obj, 31));
|
||
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("at_overcharge",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
||
if(change_appendage){
|
||
change_appendage.clearParameter();
|
||
change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, attackSpeed.tofloat());
|
||
}
|
||
}
|
||
setSkillBonusRate_At4SpitFire_bykk(obj);
|
||
}
|
||
|
||
function setSkillBonusRate_At4SpitFire_bykk(obj)
|
||
{
|
||
local bonusRate = 1000;
|
||
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_OVERCHARGE, 0, sq_GetSkillLevel(obj, SKILL_BYKK_OVERCHARGE))) / 1000;
|
||
print("bonusRate1 = "+bonusRate);
|
||
if(sq_GetSkillLevel(obj, 31) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, 31, 7, sq_GetSkillLevel(obj, 31))) / 1000;
|
||
print("bonusRate2 = "+bonusRate);
|
||
if(sq_GetSkillLevel(obj, SKILL_BYKK_KEYOFPROOF) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_KEYOFPROOF, 0, sq_GetSkillLevel(obj, SKILL_BYKK_KEYOFPROOF)).tofloat()) / 1000;
|
||
print("bonusRate3 = "+bonusRate);
|
||
if(sq_GetSkillLevel(obj, SKILL_BYKK_N_02X) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_N_02X, 0, sq_GetSkillLevel(obj, SKILL_BYKK_N_02X))) / 1000;
|
||
print("bonusRate4 = "+bonusRate);
|
||
obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger());
|
||
//sq_SetSkillAttackBonus(obj, bonusRate);
|
||
}
|
||
|
||
function onStart_appendage_at_nitromotor(appendage)
|
||
{
|
||
if(!appendage) return;
|
||
local parentObj = appendage.getParent();
|
||
if(!parentObj || parentObj.getState() == STATE_DIE) {
|
||
appendage.setValid(false);
|
||
return;
|
||
}
|
||
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
||
local bulletreinforceLevel = sq_GetSkillLevel(obj, 31);
|
||
// print("bulletreinforceLevel = "+bulletreinforceLevel);
|
||
local weaponexpertLevel = sq_GetSkillLevel(obj, SKILL_BYKK_WEAPONEXPERT);
|
||
// print("weaponexpertLevel = "+weaponexpertLevel);
|
||
local weaponreinforceLevel = sq_GetSkillLevel(obj, SKILL_BYKK_WEAPONREINFORCE);
|
||
// print("weaponreinforceLevel = "+weaponreinforceLevel);
|
||
local criticalHitRate = 0, criticalDamageRate = 0, attackSpeed = 0, attackRate = 0;
|
||
if(bulletreinforceLevel > 0){
|
||
criticalHitRate = sq_GetIntData(obj, 31, 2);
|
||
criticalDamageRate = sq_GetLevelData(obj, 31, 8, bulletreinforceLevel);
|
||
// print("set criticalHitRate = "+criticalHitRate);
|
||
// print("set criticalDamageRate = "+criticalDamageRate);
|
||
}
|
||
if(weaponexpertLevel > 0){
|
||
attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_WEAPONEXPERT, 0, weaponexpertLevel);
|
||
attackRate = sq_GetLevelData(obj, SKILL_BYKK_WEAPONEXPERT, 1, weaponexpertLevel);
|
||
// print("set attackSpeed = "+attackSpeed);
|
||
// print("set attackRate = "+attackRate);
|
||
}
|
||
if(weaponreinforceLevel > 0){
|
||
appendage.getVar("atkBool").setBool(0, true);
|
||
local addDamageRate = sq_GetLevelData(obj, SKILL_BYKK_WEAPONREINFORCE, 0, weaponreinforceLevel);
|
||
local time = sq_GetLevelData(obj, SKILL_BYKK_WEAPONREINFORCE, 1, weaponreinforceLevel);
|
||
appendage.getVar("custom").setInt(0, addDamageRate);
|
||
appendage.getVar("custom").setInt(1, time);
|
||
// print("set addDamageRate = "+addDamageRate);
|
||
// print("set time = "+time);
|
||
}
|
||
else appendage.getVar("atkBool").setBool(0, false);
|
||
local change_appendage = appendage.sq_getChangeStatus("at_nitromotor");
|
||
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("at_nitromotor",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
||
if(change_appendage){
|
||
change_appendage.clearParameter();
|
||
if(bulletreinforceLevel > 0){
|
||
change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_DAMAGE_RATE, false, criticalDamageRate.tofloat() * 0.1 / 0.667);
|
||
change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_DAMAGE_RATE, false, criticalDamageRate.tofloat() * 0.1 / 0.667);
|
||
change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, (criticalHitRate * 0.1).tofloat());
|
||
change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_HIT_RATE, false, (criticalHitRate * 0.1).tofloat());
|
||
}
|
||
if(weaponexpertLevel > 0){
|
||
change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, attackSpeed.tofloat());
|
||
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (attackRate * 0.1).tofloat());
|
||
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (attackRate * 0.1).tofloat());
|
||
change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_PHYSICAL_GENUINE_ATTACK, true, (attackRate * 0.1).tofloat());
|
||
change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_MAGICAL_GENUINE_ATTACK, true, (attackRate * 0.1).tofloat());
|
||
}
|
||
}
|
||
}
|
||
|
||
function onAttackParent_appendage_at_nitromotor(appendage, realAttacker, damager, boundingBox, isStuck)
|
||
{
|
||
if(!appendage) return;
|
||
if(appendage.getVar("atkBool").getBool(0) == false) return;
|
||
local parentObj = appendage.getParent();
|
||
if(!parentObj || parentObj.getState() == STATE_DIE) {
|
||
appendage.setValid(false);
|
||
return;
|
||
}
|
||
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
|
||
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
||
local activeObj = sq_GetCNRDObjectToActiveObject(damager);
|
||
local apdPath = "character/atgunner/4_spitfire_bykk/passiveskill/ap_weaponreinforce_debuff.nut";
|
||
if(!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, apdPath)){
|
||
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, apdPath, true);
|
||
AddAppendage.getVar("custom").setInt(0, appendage.getVar("custom").getInt(0));
|
||
local time = appendage.getVar("custom").getInt(1);
|
||
print("setApTime = "+time);
|
||
AddAppendage.sq_SetValidTime(time);
|
||
AddAppendage.getVar("sqr").clear_obj_vector();
|
||
AddAppendage.getVar("sqr").push_obj_vector(obj);
|
||
}
|
||
}
|
||
}
|
||
|
||
function getImmuneTypeDamageRate_appendage_weaponreinforce_debuff(appendage, damageRate, attacker)
|
||
{
|
||
if(!appendage) return damageRate;
|
||
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqr").get_obj_vector(0));
|
||
if(!sqrChr || sqrChr.getState() == STATE_DIE) return damageRate;
|
||
if(isSameObject(attacker, sqrChr)){
|
||
local adddamageRate = appendage.getVar("custom").getInt(0) / 10;
|
||
return damageRate + adddamageRate;
|
||
}
|
||
if(attacker.isObjectType(OBJECTTYPE_PASSIVE)){
|
||
local colObj = sq_GetCNRDObjectToCollisionObject(attacker);
|
||
local passiveIndex = colObj.getCollisionObjectIndex();
|
||
if(passiveIndex == 24396){
|
||
local job = colObj.getVar("job").getInt(0);
|
||
if(job == 4){
|
||
local adddamageRate = appendage.getVar("custom").getInt(0) / 10;
|
||
return damageRate + adddamageRate;
|
||
}
|
||
}
|
||
}
|
||
return damageRate;
|
||
}
|
||
|
||
function drawAppend_appendage_weaponreinforce_debuff(appendage, isOver, x, y, isFlip)
|
||
{
|
||
if(!appendage) return;
|
||
local obj = appendage.getParent();
|
||
if (!obj) {
|
||
appendage.setValid(false);
|
||
return;
|
||
}
|
||
local var = appendage.getVar();
|
||
local Ani = var.GetAnimationMap("emp_lightning", "character/gunner/effect/animation/empstorm/effect_emp_lightning.ani");
|
||
sq_AnimationProc(Ani);
|
||
sq_drawCurrentFrame(Ani, x, y, isFlip);
|
||
}
|
||
|
||
function onDamageParent_appendage_weaponreinforce_debuff(appendage ,attacker, boundingBox, isStuck)
|
||
{
|
||
if(!appendage) return;
|
||
local parentObj = appendage.getParent();
|
||
if(!parentObj || parentObj.getState() == STATE_DIE) return;
|
||
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqr").get_obj_vector(0));
|
||
if(!sqrChr || sqrChr.getState() == STATE_DIE) return;
|
||
if(isSameObject(attacker, sqrChr)){
|
||
sq_AddDrawOnlyAniFromParent(parentObj, "character/gunner/effect/animation/empstorm/effect_emp_lightning_hit.ani", 0, 0, sq_GetCenterZPos(boundingBox));
|
||
}
|
||
if(attacker.isObjectType(OBJECTTYPE_PASSIVE)){
|
||
local colObj = sq_GetCNRDObjectToCollisionObject(attacker);
|
||
local passiveIndex = colObj.getCollisionObjectIndex();
|
||
if(passiveIndex == 24396){
|
||
local job = colObj.getVar("job").getInt(0);
|
||
if(job == 4){
|
||
sq_AddDrawOnlyAniFromParent(parentObj, "character/gunner/effect/animation/empstorm/effect_emp_lightning_hit.ani", 0, 0, sq_GetCenterZPos(boundingBox));
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
function startSkillCoolTime_atgunner_4spitfire_bykk(obj, skillIndex, skillLevel, currentCoolTime)
|
||
{
|
||
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_WEAPONEXPERT);
|
||
if(skillLevel > 0){
|
||
if(skillIndex == 33){
|
||
if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){
|
||
return 5000;
|
||
}
|
||
}
|
||
else{
|
||
local coolTimeRate = sq_GetLevelData(obj, SKILL_BYKK_WEAPONEXPERT, 4, skillLevel) / 10;
|
||
print("coolTimeRate = "+coolTimeRate);
|
||
local newCoolTime = currentCoolTime * (100 - coolTimeRate) / 100;
|
||
return newCoolTime;
|
||
}
|
||
}
|
||
else return currentCoolTime;
|
||
}
|
||
|
||
|
||
//3---------------------------------------------------
|
||
|
||
//超时空光耀加农炮
|
||
function checkExecutableSkill_HyperFlare(obj)
|
||
{
|
||
if (!obj) return false;
|
||
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HYPERFLARE);
|
||
if (isUse){
|
||
obj.sq_IntVectClear();
|
||
obj.sq_IntVectPush(0);
|
||
obj.sq_AddSetStatePacket(STATE_BYKK_HYPERFLARE, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
function checkCommandEnable_HyperFlare(obj)
|
||
{
|
||
if (!obj) return false;
|
||
return true;
|
||
}
|
||
|
||
function onSetState_HyperFlare(obj, state, datas, isResetTimer)
|
||
{
|
||
if(!obj) return;
|
||
local subState = obj.sq_GetVectorData(datas, 0);
|
||
obj.setSkillSubState(subState);
|
||
obj.sq_StopMove();
|
||
switch(subState){
|
||
case 0:
|
||
obj.sq_SetCurrentAnimation(ATANI_BYKK_HYPERFLARE1ATTACK_BODY);
|
||
obj.getVar("hyperFlareObj").clear_obj_vector();
|
||
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HYPERFLARE, -1, 0, 1.0);
|
||
local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HYPERFLARE, -1, 1, 1.0);
|
||
local hitMax = sq_GetIntData(obj, SKILL_BYKK_HYPERFLARE, 0);
|
||
local hitMax2 = sq_GetIntData(obj, SKILL_BYKK_HYPERFLARE, 2);
|
||
local hitTime = sq_GetIntData(obj, SKILL_BYKK_HYPERFLARE, 1);
|
||
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,-1,0,obj.getDirection(),3,SKILL_BYKK_HYPERFLARE,0,0,0,0,0,0,0,0,0);
|
||
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,1,0,obj.getDirection(),3,SKILL_BYKK_HYPERFLARE,1,0,0,0,0,0,0,0,0);
|
||
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,1,0,obj.getDirection(),3,SKILL_BYKK_HYPERFLARE,2,totalDamage,hitMax,hitTime,0,0,0,0,0);
|
||
if(sq_getRandom(1, 100) > 50) obj.sq_PlaySound("FG_HYPERFLARE_A_1");
|
||
else obj.sq_PlaySound("FG_HYPERFLARE_B_1");
|
||
obj.sq_SetXScrollStart(350, 300);
|
||
break;
|
||
case 1:
|
||
obj.sq_SetCurrentAnimation(ATANI_BYKK_HYPERFLARE2ATTACK_BODY);
|
||
break;
|
||
}
|
||
}
|
||
|
||
function onEndCurrentAni_HyperFlare(obj)
|
||
{
|
||
if(!obj) return;
|
||
local subState = obj.getSkillSubState();
|
||
switch(subState){
|
||
case 0:
|
||
obj.sq_IntVectClear();
|
||
obj.sq_IntVectPush(subState + 1);
|
||
obj.sq_AddSetStatePacket(STATE_BYKK_HYPERFLARE, STATE_PRIORITY_AUTO, true);
|
||
break;
|
||
case 1:
|
||
obj.sq_IntVectClear();
|
||
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
||
break;
|
||
}
|
||
}
|
||
|
||
function onKeyFrameFlag_HyperFlare(obj, flagIndex)
|
||
{
|
||
if(!obj) return false;
|
||
switch(flagIndex){
|
||
case 1:
|
||
sq_SetMyShake(obj, 8, 300);
|
||
break;
|
||
case 2:
|
||
obj.sq_PlaySound("HYPERFLARE_CAST");
|
||
local size = obj.getVar("hyperFlareObj").get_obj_vector_size();
|
||
if(size > 0){
|
||
for(local i = 0; i < size; i++){
|
||
local effectObj = obj.getVar("hyperFlareObj").get_obj_vector(i);
|
||
if(effectObj){
|
||
local colObj = sq_GetCNRDObjectToCollisionObject(effectObj);
|
||
colObj.setTimeEvent(1, 1000, 1, true);
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case 21: obj.sq_PlaySound("FG_HYPERFLARE_B_2_01"); break;
|
||
case 3:
|
||
//`secondAttack` 0 -25 0
|
||
obj.sq_PlaySound("FG_HYPERFLARE_A_2");
|
||
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HYPERFLARE, -1, 1, 1.0);
|
||
local hitMax = sq_GetIntData(obj, SKILL_BYKK_HYPERFLARE, 2);
|
||
local hitTime = sq_GetIntData(obj, SKILL_BYKK_HYPERFLARE, 3);
|
||
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,-25,0,obj.getDirection(),3,SKILL_BYKK_HYPERFLARE,3,totalDamage,hitMax,hitTime,0,0,0,0,0);
|
||
break;
|
||
case 4:
|
||
obj.sq_PlaySound("HYPERFLARE_SHOT");
|
||
sq_SetMyShake(obj, 15, 300);
|
||
break;
|
||
case 5:
|
||
sq_SetMyShake(obj, 2, 150);
|
||
break;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
function onEndState_HyperFlare(obj, new_state)
|
||
{
|
||
if(!obj) return;
|
||
if(new_state != STATE_BYKK_HYPERFLARE){
|
||
obj.sq_SetXScrollStop(0);
|
||
}
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
print("set all"); |