Rindro-Sqr/user/114.66.51.249/1_atgunner_6.c

1254 lines
41 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//超真空弹 : 切利
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");