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

1254 lines
41 KiB
C
Raw Normal View History

2025-11-08 12:21:06 +08:00
//超真空弹 : 切利
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");