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

3524 lines
139 KiB
C
Raw Normal View History

2025-11-08 12:21:06 +08:00
function procAppend_po_atgunner_bykk(obj)
{
if(!obj) return;
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter());
local job = obj.getVar("job").getInt(0);
local skillIndex = obj.getVar("skillIndex").getInt(0);
local subtype = obj.getVar("subtype").getInt(0);
local state = obj.getVar("state").getInt(0);
switch(job){
case 0:
break;
case 1:
switch(skillIndex){
case SKILL_BYKK_HEADSHOT:
switch(subtype){
case 40:
case 41:
case 42:
case 43:
case 44:
if(sq_GetZPos(obj) <= 5 && obj.getVar("Bool").getBool(0) == false){
obj.getVar("Bool").setBool(0, true);
local totalDamage = obj.getVar("custom").getInt(5);
local isDown = obj.getVar("custom").getInt(0);
local isAir = obj.getVar("custom").getInt(7);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,-sq_GetZPos(obj),sq_GetDirection(obj),1,SKILL_BYKK_HEADSHOT,4,totalDamage,subtype - 40,isDown,isAir,1,0,0,0);
}
break;
}
break;
}
break;
case 2:
switch(skillIndex){
case SKILL_BYKK_CANNONBALL:
switch(subtype){
case 1:
if(obj.getVar("custom").getInt(11) > 0){
if(sq_GetZPos(obj) <= 10){
obj.sq_RemoveMoveParticle();
if(obj.getVar("custom").getInt(12) > 0){
local totalDamage = obj.getVar("custom").getInt(10);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),2,SKILL_BYKK_CANNONBALL,2,totalDamage,0,0,0,0,0,0,0);
}
sq_SendDestroyPacketPassiveObject(obj);
}
}
break;
}
break;
case SKILL_BYKK_FM31:
switch(subtype){
case 1:
if(sq_GetZPos(obj) <= 30 && obj.getVar().getBool(0) == false){
obj.getVar().setBool(0, true);
local totalDamage = obj.getVar("custom").getInt(10);
local sizeRate = obj.getVar("custom").getInt(11);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),2,SKILL_BYKK_FM31,2,totalDamage,sizeRate,0,0,0,0,0,0);
sq_SendDestroyPacketPassiveObject(obj);
}
break;
}
break;
case SKILL_BYKK_STINGER:
switch(subtype){
case 2:
switch(state){
case 20:
if(sq_GetZPos(obj) <= 0) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
break;
}
break;
}
break;
case SKILL_BYKK_URANIUMBOMB:
switch(subtype){
case 1:
if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){
obj.getVar().setBool(0, true);
obj.setTimeEvent(1, 200, 1, false);
local totalDamage = obj.getVar("custom").getInt(11);
local sizeRate = obj.getVar("custom").getInt(12);
local prob = obj.getVar("custom").getInt(13);
local time = obj.getVar("custom").getInt(14);
local damage = obj.getVar("custom").getInt(15);
local level = obj.getVar("custom").getInt(16);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),2,SKILL_BYKK_URANIUMBOMB,2,totalDamage,sizeRate,prob,time,damage,level,0,0);
local aniPath = "passiveobject/atgunner_bykk/2_blaster/animation/uraniumbomb/biguraniumbomb/middle_exp.ani";
local pooledObj = createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL,sizeRate / 2,sizeRate / 2);
local pAni = pooledObj.getCurrentAnimation();
pAni.setSpeedRate(200.0);
sq_SetShake(obj, 10, 300);
obj.sq_PlaySound("BOMB_06");
obj.sq_RemoveMoveParticle();
}
break;
case 5:
if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){
obj.getVar().setBool(0, true);
obj.setTimeEvent(1, 100, 1, false);
obj.setTimeEvent(2, 200, 1, true);
local sizeRate = obj.getVar("custom").getInt(12);
local aniPath = "passiveobject/atgunner_bykk/2_blaster/animation/uraniumbomb/biguraniumbomb/middle_exp.ani";
local pooledObj = createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL,sizeRate / 2,sizeRate / 2);
local pAni = pooledObj.getCurrentAnimation();
pAni.setSpeedRate(200.0);
sq_SetShake(obj, 3, 200);
obj.sq_PlaySound("BOMB_06");
obj.sq_RemoveMoveParticle();
}
break;
}
break;
case SKILL_BYKK_STINGEREX:
switch(subtype){
case 2:
switch(state){
case 20:
if(sq_GetZPos(obj) <= 0){
obj.sq_RemoveMoveParticle();
obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
}
break;
}
break;
}
break;
case SKILL_BYKK_OPERATIONRAZE:
switch(subtype){
case 5:
case 6:
switch(state){
case 20:
if(sq_GetZPos(obj) <= 0){
obj.sq_RemoveMoveParticle();
obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
}
break;
}
break;
}
break;
}
break;
case 3:
break;
case 4:
switch(skillIndex){
case SKILL_BYKK_OVERCHARGE:
switch(subtype){
case 40:
case 41:
case 42:
case 43:
case 44:
if(sq_GetZPos(obj) <= 5 && obj.getVar("Bool").getBool(0) == false){
obj.getVar("Bool").setBool(0, true);
local totalDamage = obj.getVar("custom").getInt(5);
local isDown = obj.getVar("custom").getInt(0);
local isAir = obj.getVar("custom").getInt(7);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,-sq_GetZPos(obj),sq_GetDirection(obj),1,SKILL_BYKK_HEADSHOT,4,totalDamage,subtype - 40,isDown,isAir,1,0,0,0);
}
break;
}
break;
case SKILL_BYKK_NAPALMBOMB:
switch(subtype){
case 1:
if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){
obj.getVar().setBool(0, true);
local elementSelect = obj.getVar("custom").getInt(0);
local totalDamage = obj.getVar("custom").getInt(1);
local lifeTime = obj.getVar("custom").getInt(2);
local hitTime = obj.getVar("custom").getInt(3);
local totalDamageGround = obj.getVar("custom").getInt(4);
local sizeRate = obj.getVar("custom").getInt(5);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,SKILL_BYKK_NAPALMBOMB,2,elementSelect,totalDamage,sizeRate,0,0,0,0,0);
if(lifeTime > 0){
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,SKILL_BYKK_NAPALMBOMB,3,elementSelect,totalDamageGround,lifeTime,hitTime,sizeRate,0,0,0);
}
sq_SendDestroyPacketPassiveObject(obj);
}
break;
}
break;
case SKILL_BYKK_GRENADENONE:
case SKILL_BYKK_GRENADELIGHT:
case SKILL_BYKK_GRENADEWATER:
switch(subtype){
case 1:
local time = sq_GetObjectTime(obj);
if(obj.getVar().getBool(1) == false){
local angle = sq_GetUniformVelocity(0, 1800, time, 500);
sq_SetCustomRotate(obj, sq_ToRadian(angle.tofloat()));
}
if(obj.getVar("flytochelli").getBool(0)){
local chelliObj = obj.getVar("flytarget").get_obj_vector(0);
if(chelliObj){
local colObj = sq_GetCNRDObjectToCollisionObject(chelliObj);
local vx = sq_GetUniformVelocity(obj.getVar("move").getInt(0), sq_GetXPos(colObj), time, 400);
local vy = sq_GetUniformVelocity(obj.getVar("move").getInt(1), sq_GetYPos(colObj), time, 400);
local vz = sq_GetUniformVelocity(obj.getVar("move").getInt(2), sq_GetZPos(colObj), time, 400);
sq_setCurrentAxisPos(obj, 0, vx);
sq_setCurrentAxisPos(obj, 1, vy);
sq_setCurrentAxisPos(obj, 2, vz);
if(time >= 400 && obj.getVar().getBool(2) == false){
obj.getVar().setBool(2, true);
local totalDamage = obj.getVar("move").getInt(3);
local grenadeAddRate = colObj.getVar("custom").getInt(6);
local grenadeSave = colObj.getVar("custom").getInt(7);
local grenadeDamageSave = colObj.getVar("custom").getInt(8);
//print("before :"+ grenadeDamageSave+",totaldamage = "+totalDamage);
totalDamage = (totalDamage + 100) * (100 + grenadeAddRate) / 100;
colObj.getVar("custom").setInt(7, grenadeSave + 1);
colObj.getVar("custom").setInt(8, grenadeDamageSave + totalDamage);
//print("after :"+ colObj.getVar("custom").getInt(8));
switch(skillIndex){
case SKILL_BYKK_GRENADENONE:
if(colObj.getVar("grenadeNone").getBool(0) == false) colObj.getVar("grenadeNone").setBool(0, true);
if(colObj.getVar("grenadeLight").getBool(0) == true) colObj.getVar("grenadeLight").setBool(0, false);
if(colObj.getVar("grenadeWater").getBool(0) == true) colObj.getVar("grenadeWater").setBool(0, false);
break;
case SKILL_BYKK_GRENADELIGHT:
if(colObj.getVar("grenadeNone").getBool(0) == true) colObj.getVar("grenadeNone").setBool(0, false);
if(colObj.getVar("grenadeLight").getBool(0) == false) colObj.getVar("grenadeLight").setBool(0, true);
if(colObj.getVar("grenadeWater").getBool(0) == true) colObj.getVar("grenadeWater").setBool(0, false);
break;
case SKILL_BYKK_GRENADEWATER:
if(colObj.getVar("grenadeNone").getBool(0) == true) colObj.getVar("grenadeNone").setBool(0, false);
if(colObj.getVar("grenadeLight").getBool(0) == true) colObj.getVar("grenadeLight").setBool(0, false);
if(colObj.getVar("grenadeWater").getBool(0) == false) colObj.getVar("grenadeWater").setBool(0, true);
break;
}
sq_SendDestroyPacketPassiveObject(obj);
}
}
return;
}
if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(1) == false){
obj.getVar().setBool(1, true);
obj.sq_RemoveMoveParticle();
local aniPath = ["passiveobject/atgunner_bykk/4_spitfire/animation/grenadenonerolling.ani", "passiveobject/atgunner_bykk/4_spitfire/animation/grenadelightrolling.ani", "passiveobject/atgunner_bykk/4_spitfire/animation/grenadewaterrolling.ani"];
local ani = sq_CreateAnimation("", aniPath[skillIndex - 56]);
obj.setCurrentAnimation(ani);
local speed = obj.getVar("custom").getInt(3) / 2;
if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed.tofloat());
else sq_SetVelocity(obj, 0, -speed.tofloat());
}
if(time <= 400) break;
if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){
obj.getVar().setBool(0, true);
local totalDamage = obj.getVar("custom").getInt(0);
local sizeRate = obj.getVar("custom").getInt(1);
local isEx = obj.getVar("custom").getInt(2);
local prob = obj.getVar("custom").getInt(4);
local time = obj.getVar("custom").getInt(5);
local level = obj.getVar("custom").getInt(6);
local exSelect = 2;
if(isEx > 0) exSelect = 3;
else{
switch(skillIndex){
case SKILL_BYKK_GRENADENONE: obj.sq_PlaySound("GRENADENONE_BOMB_01"); break;
case SKILL_BYKK_GRENADELIGHT: obj.sq_PlaySound("GRENADELIGHT_LIGHT_BOMB_01"); break;
case SKILL_BYKK_GRENADEWATER: obj.sq_PlaySound("GRENADELIGHT_ICE_BOMB_01"); break;
}
}
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,skillIndex,exSelect,totalDamage,sizeRate,0,prob,time,level,0,0);
if(skillIndex == SKILL_BYKK_GRENADELIGHT && isEx > 0) createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,skillIndex,4,totalDamage,sizeRate,0,0,0,0,0,0);
sq_SendDestroyPacketPassiveObject(obj);
}
break;
}
break;
case SKILL_BYKK_M18CLAYMORE:
switch(subtype){
case 3:
switch(state){
case 20:
if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){
obj.getVar().setBool(0, true);
obj.sq_RemoveMoveParticle();
obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
}
break;
case 21:
if(sqrChr && sqrChr.getState() != STATE_DIE){
sqrChr.setSkillCommandEnable(SKILL_BYKK_M18CLAYMORE, true);
if(sqrChr.sq_IsEnterSkill(SKILL_BYKK_M18CLAYMORE) != -1){
obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
}
}
break;
}
break;
}
break;
case SKILL_BYKK_LOCKONSUPPORT:
switch(subtype){
case 1:
local time = sq_GetObjectTime(obj);
if(obj.getVar().getBool(1) == false){
local angle = sq_GetUniformVelocity(0, 1800, time, 500);
sq_SetCustomRotate(obj, sq_ToRadian(angle.tofloat()));
}
if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(1) == false){
obj.getVar().setBool(1, true);
obj.sq_RemoveMoveParticle();
local speed = 75;
if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed.tofloat());
else sq_SetVelocity(obj, 0, -speed.tofloat());
}
if(time <= 400) break;
if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){
obj.getVar().setBool(0, true);
local totalDamage = obj.getVar("custom").getInt(0);
local sizeRate = obj.getVar("custom").getInt(1);
local hitMax = obj.getVar("custom").getInt(2);
local prob = obj.getVar("custom").getInt(3);
local time = obj.getVar("custom").getInt(4);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,skillIndex,2,totalDamage,sizeRate,hitMax,prob,time,0,0,0);
sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/lockonsupport/lockonsupport_readyb_eff01.ani", 0, 0, 0);
sq_SendDestroyPacketPassiveObject(obj);
}
break;
case 4:
local time = sq_GetObjectTime(obj);
if(time >= 3000) sq_SendDestroyPacketPassiveObject(obj);
break;
}
break;
case SKILL_BYKK_GRAVITYGRENADE:
switch(subtype){
case 1:
local time = sq_GetObjectTime(obj);
if(obj.getVar().getBool(1) == false){
local angle = sq_GetUniformVelocity(0, 1800, time, 500);
sq_SetCustomRotate(obj, sq_ToRadian(angle.tofloat()));
}
if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(1) == false){
obj.getVar().setBool(1, true);
obj.sq_RemoveMoveParticle();
local speed = 75;
if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed.tofloat());
else sq_SetVelocity(obj, 0, -speed.tofloat());
}
if(time <= 400) break;
if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){
obj.getVar().setBool(0, true);
local totalDamage = obj.getVar("custom").getInt(0);
local totalDamageExp = obj.getVar("custom").getInt(1);
local lifeTime = obj.getVar("custom").getInt(2);
local hitTime = obj.getVar("custom").getInt(3);
local sizeRate = obj.getVar("custom").getInt(4);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,skillIndex,2,totalDamage,totalDamageExp,lifeTime,hitTime,sizeRate,0,0,0);
sq_SendDestroyPacketPassiveObject(obj);
}
break;
}
break;
case SKILL_BYKK_OPENFIRE:
switch(subtype){
case 2:
case 3:
case 4:
local time = sq_GetObjectTime(obj);
if(obj.getVar().getBool(1) == false){
local angle = sq_GetUniformVelocity(0, 1800, time, obj.getVar("custom").getInt(0));
sq_SetCustomRotate(obj, sq_ToRadian(angle.tofloat()));
}
if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(1) == false){
obj.getVar().setBool(1, true);
obj.sq_RemoveMoveParticle();
local aniPath = ["passiveobject/atgunner_bykk/4_spitfire/animation/grenadenonerolling.ani", "passiveobject/atgunner_bykk/4_spitfire/animation/grenadelightrolling.ani", "passiveobject/atgunner_bykk/4_spitfire/animation/grenadewaterrolling.ani"];
local ani = sq_CreateAnimation("", aniPath[subtype - 2]);
obj.setCurrentAnimation(ani);
local speed = sq_getRandom(60, 120);
if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed.tofloat());
else sq_SetVelocity(obj, 0, -speed.tofloat());
}
if(time <= obj.getVar("custom").getInt(0)) break;
if(obj.getVar().getBool(0) == false){
sq_SendDestroyPacketPassiveObject(obj);
}
break;
}
break;
case SKILL_BYKK_PHOTOBILIZER:
switch(subtype){
case 1:
if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(1) == false){
obj.getVar().setBool(1, true);
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/atphotobilizer/atphotobilizershoteffectbottom_00.ani", 0, 0, 0);
sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM);
local totalDamage = obj.getVar("custom").getInt(0);
local hitMax = obj.getVar("custom").getInt(1);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,skillIndex,2,totalDamage,hitMax,0,0,0,0,0,0);
sq_SendDestroyPacketPassiveObject(obj);
}
break;
}
break;
case SKILL_BYKK_CHELLI:
switch(subtype){
case 1:
if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(1) == false){
obj.getVar().setBool(1, true);
local totalDamage_phase1 = obj.getVar("custom").getInt(0);
local hitMax_phase1 = obj.getVar("custom").getInt(1);
local totalDamage_phase2 = obj.getVar("custom").getInt(2);
local hitMax_phase2 = obj.getVar("custom").getInt(3);
local totalDamageExp = obj.getVar("custom").getInt(4);
local grenadeMax = obj.getVar("custom").getInt(5);
local grenadeAddRate = obj.getVar("custom").getInt(6);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,skillIndex,2,totalDamage_phase1,hitMax_phase1,totalDamage_phase2,hitMax_phase2,totalDamageExp,grenadeMax,grenadeAddRate,0);
sq_SendDestroyPacketPassiveObject(obj);
}
break;
}
break;
case SKILL_BYKK_STANDBYREADY:
switch(subtype){
case 1:
if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){
obj.getVar().setBool(0, true);
obj.sq_RemoveMoveParticle();
local totalDamage = obj.getVar("custom").getInt(0);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,skillIndex,2,totalDamage,0,0,0,0,0,0,0);
sq_SendDestroyPacketPassiveObject(obj);
}
break;
}
break;
case SKILL_BYKK_EMPSTORM:
switch(subtype){
case 1:
if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){
obj.getVar().setBool(0, true);
obj.sq_PlaySound("EMPSTORM_START");
obj.sq_RemoveMoveParticle();
sq_setCurrentAxisPos(obj, 2, 0);
for(local i = 1; i < 5; i++){
sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/appearsmoke"+i.tostring()+".ani", 0, 0, 0);
}
sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/empstorm/exp_dodge_light.ani", 0 , 2, 50);
local group = sq_GetGroup(obj);
local uniqueId = sq_GetUniqueId(obj);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,1,1,sq_GetDirection(obj),4,SKILL_BYKK_EMPSTORM,6,0,0,0,0,0,0,0,0);//石头
local totalDamage = obj.getVar("custom").getInt(0);
local totalDamage_phase1 = obj.getVar("custom").getInt(1);
local totalDamage_phase2 = obj.getVar("custom").getInt(2);
local hitMax_phase2 = obj.getVar("custom").getInt(3);
local totalDamageExp = obj.getVar("custom").getInt(4);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),4,SKILL_BYKK_EMPSTORM,2,totalDamage,totalDamage_phase1,totalDamage_phase2,hitMax_phase2,totalDamageExp,0,0,0);//底部
sq_SetShake(obj, 15, 200);
}
local time = sq_GetObjectTime(obj);
if(time >= 5800){
if(obj.getVar().getBool(1) == false){
obj.getVar().setBool(1, true);
local size = sqrChr.getVar("empTar").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = sqrChr.getVar("empTar").get_obj_vector(i);
if(targetObj && targetObj.getState() != STATE_DIE && CNSquirrelAppendage.sq_IsAppendAppendage(targetObj, "character/atgunner/4_spitfire_bykk/ap_empstorm.nut")) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atgunner/4_spitfire_bykk/ap_empstorm.nut");
}
}
}
sq_SendDestroyPacketPassiveObject(obj);
}
break;
case 2:
local time = sq_GetObjectTime(obj);
if(time >= 4500){
sq_SendDestroyPacketPassiveObject(obj);
}
break;
case 4:
case 6:
local time = sq_GetObjectTime(obj);
if(time >= 5500) sq_SendDestroyPacketPassiveObject(obj);
break;
case 5:
case 7:
local time = sq_GetObjectTime(obj);
// if(subtype == 2) print("time = "+time);
if(time >= 3300) sq_SendDestroyPacketPassiveObject(obj);
break;
case 3://顶部
if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){
obj.getVar().setBool(0, true);
obj.sq_RemoveMoveParticle();
sq_setCurrentAxisPos(obj, 2, 1);
obj.setTimeEvent(10, 1000, 1, false);
obj.setTimeEvent(2, 300, 1, false);//创建闪光
obj.setTimeEvent(3, 300, 4, false);//创建闪电
}
local time = sq_GetObjectTime(obj);
// print("time = "+time);
if(time >= 5800) sq_SendDestroyPacketPassiveObject(obj);
break;
}
break;
case SKILL_BYKK_DDAY:
switch(subtype){
case 1:
local time = sq_GetObjectTime(obj);
if(obj.getVar().getBool(1) == false){
local angle = sq_GetUniformVelocity(0, 1800, time, 500);
sq_SetCustomRotate(obj, sq_ToRadian(angle.tofloat()));
}
if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){
obj.getVar().setBool(0, true);
obj.sq_RemoveMoveParticle();
sq_SetCustomRotate(obj, sq_ToRadian(0.0));
local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atdday/flare/ddayready_hg_normal.ani");
obj.sq_PlaySound("D_DAY_READY");
obj.setCurrentAnimation(ani);
obj.setTimeEvent(1, 300, 1, false);
}
break;
case 4:
if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){
obj.getVar().setBool(0, true);
obj.sq_RemoveMoveParticle();
local ani = sq_CreateAnimation("", "passiveobject/atgunner_bykk/4_spitfire/animation/atdday/bombbard/ddaymissileatk_01.ani");
obj.setCurrentAnimation(ani);
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/atdday/bombbard/ddaymissileatkfloor_dangergroundnormal.ani", 0, 0, 0);
sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM);
}
break;
case 9:
if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){
obj.getVar().setBool(0, true);
obj.sq_RemoveMoveParticle();
sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/4_spitfire/animation/atdday/bullet/ddayhandgrenade_normal.ani", 0, 0, 30);
obj.stopSound(2345);
obj.sq_PlaySound("GRENADENONE_BOMB_02", 2345);
sq_SendDestroyPacketPassiveObject(obj);
}
break;
}
break;
}
break;
}
}
function onAttackParent_appendage_at_stingerex(appendage, realAttacker, damager, boundingBox, isStuck)
{
if(isStuck) return;
if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return;
local parentObj = appendage.getParent();
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
if(!obj || obj.getState() == STATE_DIE) return;
local timer = appendage.getVar().get_ct_vector(0);
if(!timer){
appendage.getVar().clear_ct_vector();
appendage.getVar().push_ct_vector();
timer = appendage.getVar().get_ct_vector(0);
timer.Reset();
timer.Start(10000,0);
}
local currentT = timer.Get();
if(currentT <= 500) return;
timer.Reset();
timer.Start(10000,0);
local proc = appendage.getVar("custom").getInt(0);
print("proc = "+proc);
if(sq_getRandom(1,100) <= proc){
local totalDamage = appendage.getVar("custom").getInt(1);
local hitMax = appendage.getVar("custom").getInt(2);
local sizeRate = appendage.getVar("custom").getInt(3);
createSkillPassive_ATGunner_bykk(obj,damager,PASSIVEOBJ_BYKK_ATGUNNER,-650,0,500,obj.getDirection(),2,SKILL_BYKK_STINGEREX,2,totalDamage,hitMax,sizeRate,0,0,0,0,0);
}
}
//////////////////////////////////女枪手通用
function onAfterSetState_ATGunner_Stand(obj, state, datas, isResetTimer)
{
if(!obj) return;
if(sq_getGrowType(obj) == 4){
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR);
if(loadSlot){
local loadMax = sq_GetIntData(obj, SKILL_BYKK_NITROMOTOR, 0);
if(sq_GetSkillLevel(obj, SKILL_BYKK_N_02X) > 0) loadMax = loadMax + 1;
local loadNumber = loadSlot.getRemainLoadNumber();
if(loadMax == loadNumber) return;
loadSlot.increaseLoadCount(loadMax - loadNumber);
}
}
}
function onProcCon_ATGunner_Stand(obj)
{
if(!obj) return;
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_TWINGUNBLADE);
if(skillLevel < 1) return;
local coolTime = sq_GetLevelData(obj, SKILL_BYKK_TWINGUNBLADE, 5, skillLevel);
local timer = obj.getVar("twingunBlade_stand").get_ct_vector(0);
if(!timer){
obj.getVar("twingunBlade_stand").clear_ct_vector();
obj.getVar("twingunBlade_stand").push_ct_vector();
timer = obj.getVar("twingunBlade_stand").get_ct_vector(0);
timer.Reset();
timer.Start(10000,0);
obj.getVar("twingunBlade_stand").setBool(0, false);
}
local currentT = timer.Get();//得到时间
if(currentT >= coolTime || obj.getVar("twingunBlade_stand").getBool(0) == false){
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){
obj.getVar("twingunBlade_stand").setBool(1, true);
}
}
}
function getDashAni_ATGunner(obj)
{
if(!obj) return null;
local ani = obj.sq_GetDashAni();
if(sq_GetSkillLevel(obj, SKILL_BYKK_TWINGUNBLADE) > 0){
ani = sq_GetCustomAni(obj, 67);
return ani;
}
return ani;
}
function onAfterSetState_ATGunner_Dash(obj, state, datas, isResetTimer)
{
if(!obj) return;
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
if(sq_GetSkillLevel(obj, SKILL_BYKK_TWINGUNBLADE) > 0){
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/dash.ani"), 0, 0);
}
break;
}
}
function onProcCon_ATGunner_Dash(obj)
{
if(!obj) return;
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_TWINGUNBLADE);
if(skillLevel < 1) return;
local coolTime = sq_GetLevelData(obj, SKILL_BYKK_TWINGUNBLADE, 5, skillLevel);
local timer = obj.getVar("twingunBlade_stand").get_ct_vector(0);
if(!timer){
obj.getVar("twingunBlade_stand").clear_ct_vector();
obj.getVar("twingunBlade_stand").push_ct_vector();
timer = obj.getVar("twingunBlade_stand").get_ct_vector(0);
timer.Reset();
timer.Start(10000,0);
obj.getVar("twingunBlade_stand").setBool(0, false);
}
local currentT = timer.Get();//得到时间
if(currentT >= coolTime || obj.getVar("twingunBlade_stand").getBool(0) == false){
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){
obj.getVar("twingunBlade_stand").setBool(1, true);
}
}
break;
}
}
function onProcCon_ATGunner_DashAttack(obj)
{
if(!obj) return;
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_TWINGUNBLADE);
if(skillLevel < 1) return;
local coolTime = sq_GetLevelData(obj, SKILL_BYKK_TWINGUNBLADE, 6, skillLevel);
local timer = obj.getVar("twingunBlade_dash").get_ct_vector(0);
if(!timer){
obj.getVar("twingunBlade_dash").clear_ct_vector();
obj.getVar("twingunBlade_dash").push_ct_vector();
timer = obj.getVar("twingunBlade_dash").get_ct_vector(0);
timer.Reset();
timer.Start(10000,0);
obj.getVar("twingunBlade_dash").setBool(0, false);
}
local currentT = timer.Get();//得到时间
if(currentT >= coolTime || obj.getVar("twingunBlade_dash").getBool(0) == false){
sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true);
if(sq_IsEnterCommand(obj, E_SKILL_COMMAND)){
obj.getVar("twingunBlade_dash").setBool(0, true);
timer.Reset();
timer.Start(10000,0);
obj.sq_IntVectClear();
obj.sq_IntVectPush(10);
obj.sq_AddSetStatePacket(STATE_BYKK_WINDMILL, STATE_PRIORITY_AUTO, true);
}
}
break;
}
}
function onAfterSetState_ATGunner_Jump(obj, state, datas, isResetTimer)
{
if(!obj) return;
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
if(obj.getVar("twingunBlade_jumpmove").getBool(0)){
obj.getVar("twingunBlade_jumpmove").setBool(0, false);
if(obj.getDirection() == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, 200.0);
else sq_SetVelocity(obj, 0, -200.0);
}
break;
case 4:
// local isNitroMotor = obj.sq_GetVectorData(datas, 3);
// switch(isNitroMotor){
// case 1:
// obj.sq_SetCurrentAnimation(ATANI_BYKK_NITROMOTORJUMP);
// obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atnitromotor/up_nitromotor_dodge1.ani"), 0, 0);
// break;
// }
break;
}
}
function onProcCon_ATGunner_Jump(obj)
{
if(!obj) return;
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
if(obj.getVar("twingunBlade_stand").getBool(1) == true){
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){
obj.getVar("twingunBlade_stand").setBool(0, true);
obj.getVar("twingunBlade_stand").setBool(1, false);
local timer = obj.getVar("twingunBlade_stand").get_ct_vector(0);
timer.Reset();
timer.Start(10000,0);
obj.sq_IntVectClear();
obj.sq_IntVectPush(30);
obj.sq_AddSetStatePacket(STATE_BYKK_WINDMILL, STATE_PRIORITY_AUTO, true);
return;
}
}
if(sq_GetSkillLevel(obj, SKILL_BYKK_AIRRAIDEX) > 0 && !sq_GetSkill(obj, SKILL_BYKK_AIRRAIDEX).isInCoolTime()){
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){
obj.startSkillCoolTime(SKILL_BYKK_AIRRAIDEX, sq_GetSkillLevel(obj, SKILL_BYKK_AIRRAIDEX), -1);
obj.sq_IntVectClear();
if(sq_GetIntData(obj, SKILL_BYKK_AIRRAIDEX, 6) > 0){
if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(11);
else obj.sq_IntVectPush(10);
}
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_AIRRAIDEX, STATE_PRIORITY_IGNORE_FORCE, true);
return;
}
}
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_TWINGUNBLADE);
if(skillLevel < 1) return;
local coolTime = sq_GetLevelData(obj, SKILL_BYKK_TWINGUNBLADE, 4, skillLevel);
local timer = obj.getVar("twingunBlade_jump").get_ct_vector(0);
if(!timer){
obj.getVar("twingunBlade_jump").clear_ct_vector();
obj.getVar("twingunBlade_jump").push_ct_vector();
timer = obj.getVar("twingunBlade_jump").get_ct_vector(0);
timer.Reset();
timer.Start(10000,0);
obj.getVar("twingunBlade_jump").setBool(0, false);
}
local currentT = timer.Get();//得到时间
if(currentT >= coolTime || obj.getVar("twingunBlade_jump").getBool(0) == false){
sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true);
if(sq_IsEnterCommand(obj, E_SKILL_COMMAND)){
obj.getVar("twingunBlade_jump").setBool(0, true);
timer.Reset();
timer.Start(10000,0);
obj.sq_IntVectClear();
obj.sq_IntVectPush(20);
obj.sq_AddSetStatePacket(STATE_BYKK_WINDMILL, STATE_PRIORITY_AUTO, true);
return;
}
}
break;
case 4:
nitroMotor_bykk(obj);
break;
}
}
function onEndState_ATGunner_Jump(obj, new_state)
{
if(!obj) return;
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
obj.getVar("twingunBlade_jump").setBool(0, false);
break;
case 4:
if(sq_GetIntData(obj, SKILL_BYKK_GRENADENONE, 18) > 0){
if(new_state == STATE_STAND){
local skillIndex = [SKILL_BYKK_GRENADENONE,SKILL_BYKK_GRENADEWATER,SKILL_BYKK_GRENADELIGHT];
for(local i = 0; i < 3; i++){
if(sq_GetSkillLevel(obj, skillIndex[i]) > 0){
local loadSlot = obj.sq_GetSkillLoad(skillIndex[i]);
if(loadSlot){
local loadNumber = loadSlot.getRemainLoadNumber();
local loadMax = sq_GetIntData(obj, skillIndex[i], 0);
if(loadNumber < loadMax){
loadSlot.increaseLoadCount(loadMax - loadNumber);
// print("test"+i+" : "+loadSlot.getRemainLoadNumber());
}
}
}
}
}
}
break;
}
}
function onAfterSetState_ATGunner_Attack(obj, state, datas, isResetTimer)
{
if(!obj) return;
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
case 4:
if(sq_GetVectorData(datas, 2) == 11) return;
if(sq_GetSkillLevel(obj, SKILL_BYKK_FASTSHOOT) > 0){
local attackIndex = obj.getAttackIndex();
switch(attackIndex){
case 0:
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/fastshoot/atnormaldown.ani"), 0, 0);
else obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/fastshoot/atnormalup.ani"), 0, 0);
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) obj.getVar("isDown_fast").setBool(0, true);
else obj.getVar("isDown_fast").setBool(0, false);
break;
case 1:
obj.getVar("AttackCount").setInt(0, 0);
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/fastshoot/atfinishdown.ani"), 0, 0);
else obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/fastshoot/atfinishup.ani"), 0, 0);
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) obj.getVar("isDown_fast").setBool(0, true);
else obj.getVar("isDown_fast").setBool(0, false);
break;
}
local currentAni = obj.getCurrentAnimation();
local speedRate = 10000.0 / currentAni.getDelaySum(0, 0);
speedRate = speedRate * (1000.0 + sq_GetLevelData(obj, SKILL_BYKK_FASTSHOOT, 0, sq_GetSkillLevel(obj, SKILL_BYKK_FASTSHOOT))) / 1000.0;
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_REDUCEREVOLVERDELAY);
if(skillLevel > 0) speedRate = speedRate * (100.0 + sq_GetLevelData(obj, SKILL_BYKK_REDUCEREVOLVERDELAY, 6, skillLevel)) / 100.0;
currentAni.setSpeedRate(speedRate);
obj.getVar("fastShoot").setFloat(0, speedRate);
}
break;
}
}
function onEndCurrentAni_ATGunner_Attack(obj)
{
if(!obj) return;
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
}
function onProcCon_ATGunner_Attack(obj)
{
if(!obj) return;
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
case 4:
if(obj.getVar("Attack_Bool").getBool(0) == false){
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);//设置其他按键
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){
obj.getVar("Attack_Bool").setBool(0, true);
}
}
break;
}
}
function onKeyFrameFlag_ATGunner_Attack(obj, flagIndex)
{
if(!obj) return false;
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
case 4:
switch(flagIndex){
case 101:
case 1001:
case 201:
case 2001:
obj.getVar("AttackCount").setInt(0, obj.getVar("AttackCount").getInt(0) + 1);
case 301:
local currentAni = obj.getCurrentAnimation();
local speedRate = 7500.0 / currentAni.getDelaySum(0, 0);
if(flagIndex != 301) speedRate = 5000.0 / currentAni.getDelaySum(0, 0);
local speedRateSet = obj.getVar("fastShoot").getFloat(0);
if(flagIndex != 301){
if(speedRate <= speedRateSet) currentAni.setSpeedRate(speedRateSet);
}
else{
if(speedRate <= speedRateSet){
speedRate = speedRateSet * (100 + sq_GetLevelData(obj, SKILL_BYKK_REDUCEREVOLVERDELAY, 6, sq_GetSkillLevel(obj, SKILL_BYKK_REDUCEREVOLVERDELAY))).tofloat() / 100.0;
//print("speedRateA = "+speedRate);
currentAni.setSpeedRate(speedRateSet);
}
else{
speedRate = speedRate * (100 + sq_GetLevelData(obj, SKILL_BYKK_REDUCEREVOLVERDELAY, 6, sq_GetSkillLevel(obj, SKILL_BYKK_REDUCEREVOLVERDELAY))).tofloat() / 100.0;
currentAni.setSpeedRate(speedRateSet);
}
}
if(flagIndex == 301) break;
local offsetX = 125, offsetZ = 105;
local isDown = 0;
if(flagIndex == 101 || flagIndex == 201){
isDown = 1;offsetX = 100; offsetZ = 65;
}
local weaponSubType = obj.getWeaponSubType();
local totalDamage = 100 + sq_GetLevelData(obj, 174, 0, sq_GetSkillLevel(obj, 174)) / 10;
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_FASTSHOOT);
if(skillLevel > 0){
local bonusRate = sq_GetLevelData(obj, SKILL_BYKK_FASTSHOOT, 1, skillLevel);
totalDamage = totalDamage * (1000 + bonusRate) / 1000;
}
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)){
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE);
local elementSelect = addAppendage.getVar("element").getInt(0);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_BULLETSPECIFIC)){
totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BULLETSPECIFIC, -1, 12, 1.0);
local prob = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BULLETSPECIFIC, -1, 0, 1.0) + 100;
local activestatusSet = 9, statusTime = 0;
if(sq_getRandom(1, 100) > prob){
statusTime = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BULLETSPECIFIC, -1, 1, 1.0) + 100;
switch(elementSelect){
case 1: activestatusSet = 1; break;
case 2: activestatusSet = 5; break;
case 3: activestatusSet = 6; break;
case 4: activestatusSet = 3; break;
}
}
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,0,offsetZ,sq_GetDirection(obj),4,SKILL_BYKK_OVERCHARGE,20+elementSelect,totalDamage,weaponSubType,isDown,1,0,activestatusSet,statusTime,0);
}
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_BULLETEXPLOSIVE)){
local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BULLETEXPLOSIVE, -1, 0, 1.0);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,0,offsetZ,sq_GetDirection(obj),4,SKILL_BYKK_OVERCHARGE,40+elementSelect,totalDamage,weaponSubType,isDown,1,0,totalDamageExp,0,0);
}
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_BULLETPENETRATE)){
totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BULLETPENETRATE, -1, 0, 1.0);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,0,offsetZ,sq_GetDirection(obj),4,SKILL_BYKK_OVERCHARGE,30+elementSelect,totalDamage,weaponSubType,isDown,1,0,0,0,0);
}
else createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,0,offsetZ,sq_GetDirection(obj),4,SKILL_BYKK_OVERCHARGE,10+elementSelect,totalDamage,weaponSubType,isDown,1,0,0,0,0);
break;
}
local setskillIndex = SKILL_BYKK_HEADSHOT;
if(growType == 4) setskillIndex = SKILL_BYKK_OVERCHARGE;
local loadSlot = obj.sq_GetSkillLoad(30);
if(loadSlot){
local loadnumber = loadSlot.getRemainLoadNumber();
if(loadnumber > 0){
loadSlot.decreaseLoadCount(1);
obj.sq_PlaySound("R_SILVER_SHOT");
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,0,offsetZ,sq_GetDirection(obj),growType,setskillIndex,2,totalDamage,weaponSubType,isDown,1,0,0,0,0);
}
}
else createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,0,offsetZ,sq_GetDirection(obj),growType,setskillIndex,1,totalDamage,weaponSubType,isDown,1,0,0,0,0);
break;
case 401:
local hitMax = 3;
if(sq_GetSkillLevel(obj, SKILL_BYKK_REDUCEREVOLVERDELAY) > 0) hitMax = hitMax + sq_GetLevelData(obj, SKILL_BYKK_REDUCEREVOLVERDELAY, 11, sq_GetSkillLevel(obj, SKILL_BYKK_REDUCEREVOLVERDELAY));
// print("hitMax = "+hitMax);
local hitCount = obj.getVar("AttackCount").getInt(0);
// print("hitCount = "+hitCount);
if(hitCount >= 3 && hitCount < hitMax){
if(obj.getVar("Attack_Bool").getBool(0)){
obj.getVar("Attack_Bool").setBool(0, false);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(8, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
break;
case 202:
case 2002:
local speedRateSet = obj.getVar("fastShoot").getFloat(0);
local delay = (100000.0 / speedRateSet).tointeger();
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_WEAPONEXPERT);
if(skillLevel > 0) delay = delay * (100 - sq_GetIntData(obj, SKILL_BYKK_WEAPONEXPERT, 0)) / 100;
obj.setTimeEvent(1, delay, 1, false);
break;
}
break;
}
return true;
}
function onTimeEvent_ATGunner_Attack(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onEndState_ATGunner_Attack(obj, new_state)
{
if(!obj) return;
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
case 4:
local attackIndex = obj.getAttackIndex();
if(new_state != 8){
obj.getVar("AttackCount").setInt(0, 0);
}
break;
}
}
function onCreateObject_ATGunner_Attack(obj, createObject)
{
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
case 4:
if(createObject.isObjectType(OBJECTTYPE_PASSIVE)){
local colObj = sq_GetCNRDObjectToCollisionObject(createObject);
local passiveObjId = colObj.getCollisionObjectIndex();
// print("passiveObjId = "+passiveObjId);
if(passiveObjId >= 22001 && passiveObjId <= 22015){
colObj.setValid(false);
}
}
break;
}
}
function onKeyFrameFlag_ATGunner_JumpAttack(obj, flagIndex)
{
if(!obj) return false;
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
case 4:
switch(flagIndex){
case 101:
local totalDamage = 100 + sq_GetLevelData(obj, 174, 0, sq_GetSkillLevel(obj, 174)) / 10;
local weaponSubType = obj.getWeaponSubType();
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)){
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE);
local elementSelect = addAppendage.getVar("element").getInt(0);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_BULLETSPECIFIC)){
totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BULLETSPECIFIC, -1, 12, 1.0);
local prob = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BULLETSPECIFIC, -1, 0, 1.0) + 100;
local activestatusSet = 9, statusTime = 0;
if(sq_getRandom(1, 100) > prob){
statusTime = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BULLETSPECIFIC, -1, 1, 1.0) + 100;
switch(elementSelect){
case 1: activestatusSet = 1; break;
case 2: activestatusSet = 5; break;
case 3: activestatusSet = 6; break;
case 4: activestatusSet = 3; break;
}
}
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,45,0,65,sq_GetDirection(obj),4,SKILL_BYKK_OVERCHARGE,20+elementSelect,totalDamage,weaponSubType,1,1,1,activestatusSet,statusTime,0);
}
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_BULLETEXPLOSIVE)){
local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BULLETEXPLOSIVE, -1, 0, 1.0);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,45,0,65,sq_GetDirection(obj),4,SKILL_BYKK_OVERCHARGE,40+elementSelect,totalDamage,weaponSubType,1,1,1,totalDamageExp,0,0);
}
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_BULLETPENETRATE)){
totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BULLETPENETRATE, -1, 0, 1.0);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,45,0,65,sq_GetDirection(obj),4,SKILL_BYKK_OVERCHARGE,30+elementSelect,totalDamage,weaponSubType,1,1,1,0,0,0);
}
else createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,45,0,65,sq_GetDirection(obj),4,SKILL_BYKK_OVERCHARGE,10+elementSelect,totalDamage,weaponSubType,1,1,1,0,0,0);
break;
}
local setskillIndex = SKILL_BYKK_HEADSHOT;
if(growType == 4) setskillIndex = SKILL_BYKK_OVERCHARGE;
local loadSlot = obj.sq_GetSkillLoad(30);
if(loadSlot){
local loadnumber = loadSlot.getRemainLoadNumber();
if(loadnumber > 0){
loadSlot.decreaseLoadCount(1);
obj.sq_PlaySound("R_SILVER_SHOT");
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,45,0,65,sq_GetDirection(obj),growType,setskillIndex,2,totalDamage,weaponSubType,1,1,1,0,0,0);
}
}
else createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,45,0,65,sq_GetDirection(obj),growType,setskillIndex,1,totalDamage,weaponSubType,1,1,1,0,0,0);
break;
}
break;
}
return true;
}
function onProcCon_ATGunner_JumpAttack(obj)
{
local growType = sq_getGrowType(obj);
switch(growType){
case 4:
nitroMotor_bykk(obj);
break;
}
}
function onEndState_ATGunner_JumpAttack(obj, new_state)
{
if(!obj) return;
if(sq_getGrowType(obj) != 1) return;
}
function onCreateObject_ATGunner_JumpAttack(obj, createObject)
{
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
case 4:
if(createObject.isObjectType(OBJECTTYPE_PASSIVE)){
local colObj = sq_GetCNRDObjectToCollisionObject(createObject);
local passiveObjId = colObj.getCollisionObjectIndex();
// print("passiveObjId = "+passiveObjId);
if(passiveObjId >= 22001 && passiveObjId <= 22015){
colObj.setValid(false);
}
}
break;
}
}
//////////////////////////////////女漫游被动
function ProcPassiveSkill_ATGunner_Ranger(obj, skill_index, skill_level)
{
switch(skill_index){
case SKILL_BYKK_FASTSHOOT:
if(skill_level > 0){
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/atgunner/1_ranger_bykk/passiveskill/ap_atfastshoot.nut", true);
}
break;
case SKILL_BYKK_REDUCEREVOLVERDELAY:
if(skill_level > 0){
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/atgunner/1_ranger_bykk/passiveskill/ap_atreducerevolverdelayfastshoot.nut", true);
}
break;
case SKILL_BYKK_VEILEDCUT:
if(skill_level > 0){
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/atgunner/1_ranger_bykk/passiveskill/ap_atvriledcut.nut", true);
local prob = sq_GetLevelData(obj, skill_index, 0, skill_level);
local level = sq_GetSkillLevel(obj, 174) + 10;
local time = sq_GetLevelData(obj, skill_index, 2, skill_level);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SAWBLADE);
if(skillLevel > 0) time = time + sq_GetLevelData(obj, SKILL_BYKK_SAWBLADE, 1, skillLevel);
// print("Set:prob = "+prob+", level = "+level+", time = "+time);
appendage.getVar("custom").setInt(0, prob);
appendage.getVar("custom").setInt(1, level);
appendage.getVar("custom").setInt(2, time);
}
break;
}
}
function onStart_appendage_ATFastShoot(appendage)
{
if(!appendage) return;
local parentObj = appendage.getParent();
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_FASTSHOOT);
local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_FASTSHOOT, 2, skillLevel);
// print("attackSpeed = "+attackSpeed);
local change_appendage = appendage.sq_getChangeStatus("ATFastShoot");
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("ATFastShoot",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 * 1.0).tofloat());
}
}
function onStart_appendage_ATReducerevolverdelayfastshoot(appendage)
{
if(!appendage) return;
local parentObj = appendage.getParent();
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
local weaponSubType = obj.getWeaponSubType();
if(weaponSubType != 0) return;
local loadMax = sq_GetLevelData(obj, 30, 0, sq_GetSkillLevel(obj, 30));
local loadSlot = obj.sq_GetSkillLoad(30);
if(loadSlot){
if(loadSlot.getRemainLoadNumber() > loadMax) obj.sq_RemoveSkillLoad(30);
}
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_REDUCEREVOLVERDELAY);
local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_REDUCEREVOLVERDELAY, 9, skillLevel);
local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_REDUCEREVOLVERDELAY, 10, skillLevel);
local attackRate = sq_GetLevelData(obj, SKILL_BYKK_REDUCEREVOLVERDELAY, 4, skillLevel);
local criticalRate = sq_GetLevelData(obj, SKILL_BYKK_REDUCEREVOLVERDELAY, 8, skillLevel);
// print("attackRate22 = "+attackRate);
local change_appendage = appendage.sq_getChangeStatus("ATReducerevolverdelayfastshoot");
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("ATReducerevolverdelayfastshoot",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 * 1.0).tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed * 1.0).tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (attackRate * 1.0).tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, (criticalRate * 0.1).tofloat());
}
}
function onAttackParent_appendage_ATVeiledcut(appendage, realAttacker, damager, boundingBox, isStuck)
{
if(!appendage) return;
local parentObj = appendage.getParent();
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
if(!obj || obj.getState() == STATE_DIE) return;
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
local prob = appendage.getVar("custom").getInt(0);
local level = appendage.getVar("custom").getInt(1);
local time = appendage.getVar("custom").getInt(2);
// print("prob = "+prob+", level = "+level+", time = "+time);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLEEDING, (prob * 0.1).tofloat(), level, false, time);
}
}
function onStart_appendage_at_revolvercriticaldamageup(appendage)
{
if(!appendage) return;
local parentObj = appendage.getParent();
if(!parentObj || parentObj.getState() == STATE_DIE) {
appendage.setValid(false);
return;
}
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_REVOLVERCRITICALDAMAGEUP);
local criticalHitRate = sq_GetLevelData(obj, SKILL_BYKK_REVOLVERCRITICALDAMAGEUP, 1, skillLevel);
// print("attackRate22 = "+attackRate);
local change_appendage = appendage.sq_getChangeStatus("at_revolvercriticaldamageup");
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("at_revolvercriticaldamageup",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
if(change_appendage){
change_appendage.clearParameter();
change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_DAMAGE_RATE, false, criticalHitRate.tofloat() * 0.1 / 0.667);
}
}
function onStart_appendage_ATStylish(appendage)
{
if(!appendage) return;
local parentObj = appendage.getParent();
if(!parentObj || parentObj.getState() == STATE_DIE) {
appendage.setValid(false);
return;
}
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH);
local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_STYLISH, 5, skillLevel);
// print("attackRate22 = "+attackRate);
local change_appendage = appendage.sq_getChangeStatus("at_revolvercriticaldamageup");
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("at_revolvercriticaldamageup",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 * 1.0).tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (attackSpeed * 1.0).tofloat());
}
setSkillBonusRate_AtRanger_bykk(obj);
}
function onEnd_appendage_ATStylish(appendage)
{
if(!appendage) return;
local parentObj = appendage.getParent();
if(!parentObj || parentObj.getState() == STATE_DIE) {
appendage.setValid(false);
return;
}
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
setSkillBonusRate_AtRanger_bykk(obj);
}
function onAttackParent_appendage_at_revolvercriticaldamageup(appendage, realAttacker, damager, boundingBox, isStuck)
{
if(!appendage) return;
local parentObj = appendage.getParent();
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
if(!obj || obj.getState() == STATE_DIE){
appendage.setValid(false);
return;
}
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
sq_AddDrawOnlyAniFromParent(damager, "character/gunner/effect/animation/revolvercriticaldamageup.ani", 0, 0, sq_GetCenterZPos(boundingBox));
}
}
//////////////////////////////////女漫游
function onStartMap_ATGunner_Ranger_bykk(obj)
{
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_WALKSHOOT);
if(loadSlot){
if(loadSlot.isCooling()){
if(obj.getState() != STATE_BYKK_WALKSHOOT){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_WALKSHOOT, STATE_PRIORITY_IGNORE_FORCE, true);
return;
}
}
}
}
function procSkill_ATGunner_1ranger_bykk(obj)
{
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_WALKSHOOT);
if(loadSlot){
if(!loadSlot.isCooling() || loadSlot.getRemainLoadNumber() <= 0){
obj.sq_RemoveSkillLoad(SKILL_BYKK_WALKSHOOT);
if(!sq_GetSkill(obj, SKILL_BYKK_WALKSHOOT).isInCoolTime()) obj.startSkillCoolTime(SKILL_BYKK_WALKSHOOT, sq_GetSkillLevel(obj, SKILL_BYKK_WALKSHOOT), -1);
if(obj.getState() == STATE_BYKK_WALKSHOOT){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
return;
}
}
}
local loadSlot = obj.sq_GetSkillLoad(30);
if(loadSlot){
if(loadSlot.getRemainLoadNumber() <= 0) obj.sq_RemoveSkillLoad(30);
}
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_STYLISH);
if(loadSlot){
if(!loadSlot.isCooling()){
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH);
local loadMax = sq_GetLevelData(obj, SKILL_BYKK_STYLISH, 2, skillLevel);
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAINENLIGHTEN) > 0) loadMax = loadMax + sq_GetIntData(obj, SKILL_BYKK_CHAINENLIGHTEN, 17);
local loadnumber = loadSlot.getRemainLoadNumber();
if(loadnumber < loadMax) loadSlot.increaseLoadCount(1);
}
}
else{
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH);
local loadMax = sq_GetLevelData(obj, SKILL_BYKK_STYLISH, 2, skillLevel);
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAINENLIGHTEN) > 0) loadMax = loadMax + sq_GetIntData(obj, SKILL_BYKK_CHAINENLIGHTEN, 17);
local coolTime = sq_GetLevelData(obj, SKILL_BYKK_STYLISH, 3, skillLevel);
obj.sq_AddSkillLoad(SKILL_BYKK_STYLISH, 83, loadMax, coolTime);
}
if(obj.getState() == 20) proc_atStylish_bykk(obj);
}
function proc_atStylish_bykk(obj)
{
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_STYLISH);
if(loadSlot){
local loadnumber = loadSlot.getRemainLoadNumber();
if(loadnumber > 0){
local state = obj.getState();
for(local i = 0; i < ATSTYLISH_SKILL_LIST.len(); i++){
if(state != ATSTYLISH_STATE_LIST[i] && !sq_GetSkill(obj, ATSTYLISH_SKILL_LIST[i]).isInCoolTime()){
obj.setSkillCommandEnable(ATSTYLISH_SKILL_LIST[i], true);
local b_useskill = obj.sq_IsEnterSkill(ATSTYLISH_SKILL_LIST[i]);
if(b_useskill != -1){
loadSlot.decreaseLoadCount(1);
if(!loadSlot.isCooling()) loadSlot.setStartCool();
setStylishAppendage(obj);
obj.startSkillCoolTime(ATSTYLISH_SKILL_LIST[i], sq_GetSkillLevel(obj, ATSTYLISH_SKILL_LIST[i]), -1);
if(state == STATE_BYKK_WALKSHOOT){
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_WALKSHOOT);
if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_WALKSHOOT);
if(!sq_GetSkill(obj, SKILL_BYKK_WALKSHOOT).isInCoolTime()) obj.startSkillCoolTime(SKILL_BYKK_WALKSHOOT, sq_GetSkillLevel(obj, SKILL_BYKK_WALKSHOOT), -1);
}
switch(ATSTYLISH_SKILL_LIST[i]){
case SKILL_BYKK_WINDMILL:
obj.getVar("windmill_count").setInt(0, 0);
obj.getVar("windmill_Bool").setBool(0, false);
break;
case SKILL_BYKK_HEADSHOT:
case SKILL_BYKK_TURNINGSHOOT:
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) obj.getVar("headShot_Bool").setBool(0, true);
else obj.getVar("headShot_Bool").setBool(0, false);
break;
case SKILL_BYKK_CHAINSNATCH:
obj.getVar("ChainSnatchTar").clear_obj_vector();
obj.getVar("ChainSnatchBool").setBool(0, false);
obj.getVar("ChainSnatchBool").setBool(1, false);
obj.sq_IntVectClear();
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAINENLIGHTEN) > 0) obj.sq_IntVectPush(10);
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_CHAINSNATCH, STATE_PRIORITY_IGNORE_FORCE, true);
return;
break;
case SKILL_BYKK_RANDOMSHOOT:
obj.getVar("randomShootBool").setBool(0, true);
obj.getVar("randomShootBool").setBool(1, true);
obj.getVar("randomShootObj").clear_obj_vector();
break;
case SKILL_BYKK_WALKSHOOT:
obj.getVar("walkShootWeaponType").setInt(0, obj.getWeaponSubType());
obj.getVar("WalkShootBool").setBool(3, true);
obj.getVar("walkShootEffect").clear_obj_vector();
break;
case SKILL_BYKK_MULTIHEADSHOT:
obj.getVar("MultiHeadShotSet").setInt(0, 2);
obj.getVar("MultiHeadShotCount").setInt(0, 0);
break;
case SKILL_BYKK_DOUBLEGUNHAWK:
obj.getVar("DoubleGunhawk_Phase").setInt(0, 1);
break;
case SKILL_BYKK_AIRRAIDEX:
obj.sq_IntVectClear();
if(sq_GetIntData(obj, SKILL_BYKK_AIRRAIDEX, 6) > 0){
if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(11);
else obj.sq_IntVectPush(10);
}
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_AIRRAIDEX, STATE_PRIORITY_IGNORE_FORCE, true);
return;
break;
case SKILL_BYKK_SUPPRESSINGFIRE:
obj.getVar("SuppressingFireTar").clear_obj_vector();
break;
case SKILL_BYKK_KILLPOINT:
obj.sq_IntVectClear();
if(sq_GetIntData(obj, SKILL_BYKK_KILLPOINT, 13) > 0) obj.sq_IntVectPush(10);
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_KILLPOINT, STATE_PRIORITY_IGNORE_FORCE, true);
return;
break;
case SKILL_BYKK_CHAINDEVIDER:
obj.sq_IntVectClear();
if(sq_GetIntData(obj, SKILL_BYKK_CHAINDEVIDER, 3) > 0){
obj.getVar("ChainDeviderTar").clear_obj_vector();
obj.sq_IntVectPush(10);
}
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_CHAINDEVIDER, STATE_PRIORITY_IGNORE_FORCE, true);
return;
break;
}
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(ATSTYLISH_STATE_LIST[i], STATE_PRIORITY_IGNORE_FORCE, true);
}
}
}
}
}
}
function onStartDungeon_ATRanger_bykk(obj)
{
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_STYLISH);
if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_STYLISH);
local loadSlot = obj.sq_GetSkillLoad(30);
if(loadSlot) obj.sq_RemoveSkillLoad(30);
setSkillBonusRate_AtRanger_bykk(obj);
}
function reset_atRanger_bykk(obj)
{
setSkillBonusRate_AtRanger_bykk(obj);
}
function setStylishAppendage(obj)
{
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atgunner/1_ranger_bykk/passiveskill/ap_atstylish.nut");
if(!addAppendage){
addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/atgunner/1_ranger_bykk/passiveskill/ap_atstylish.nut", true);
}
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH);
local buffTime = sq_GetLevelData(obj, SKILL_BYKK_STYLISH, 6, skillLevel);
addAppendage.sq_SetValidTime(buffTime);
addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_STYLISH, skillLevel);
CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true);
}
function setSkillBonusRate_AtRanger_bykk(obj)
{
local bonusRate = 1000;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/1_ranger_bykk/passiveskill/ap_atstylish.nut")) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_STYLISH, 4, sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH))) / 1000;
print("bonusRate0 = "+bonusRate);
if(sq_GetSkillLevel(obj, SKILL_BYKK_VEILEDCUT) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_VEILEDCUT, 6, sq_GetSkillLevel(obj, SKILL_BYKK_VEILEDCUT))) / 1000;
print("bonusRate1 = "+bonusRate);
if(sq_GetSkillLevel(obj, SKILL_BYKK_SAWBLADE) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_SAWBLADE, 0, sq_GetSkillLevel(obj, SKILL_BYKK_SAWBLADE))) / 1000;
print("bonusRate2 = "+bonusRate);
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAINENLIGHTEN) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_CHAINENLIGHTEN, 0, sq_GetSkillLevel(obj, SKILL_BYKK_CHAINENLIGHTEN))) / 1000;
print("bonusRate3 = "+bonusRate);
obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger());
//sq_SetSkillAttackBonus(obj, bonusRate);
}
//银弹
function checkExecutableSkill_SilverBullet(obj)
{
if (!obj) return false;
if(sq_getGrowType(obj) != 1) return false;
local isUse = obj.sq_IsUseSkill(30);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(143, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_SilverBullet(obj)
{
if (!obj) return false;
return true;
}
function onSetState_SilverBullet(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_PlaySound("FG_SSHOT");
local Ani = obj.sq_GetThrowChargeAni(1);
obj.setCurrentAnimation(Ani);
local castTime = sq_GetCastTime(obj, 30, sq_GetSkillLevel(obj, 30));
sq_StartDrawCastGauge(obj, castTime, true);
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(false);
local speedRate = delaySum.tofloat() * 100.0 / castTime.tofloat();
currentAni.setSpeedRate(speedRate);
break;
case 1:
sq_EndDrawCastGauge(obj);
local Ani = obj.sq_GetThrowShootAni(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 skillLevel = sq_GetSkillLevel(obj, 30);
local countMax = sq_GetLevelData(obj, 30, 0, skillLevel);
local loadSlot = obj.sq_GetSkillLoad(30);
if(!loadSlot) obj.sq_AddSkillLoad(30, 42, countMax, 0);
else{
local loadnumber = loadSlot.getRemainLoadNumber();
print("loadnumber = "+loadnumber);
if(loadnumber < countMax) loadSlot.increaseLoadCount(countMax - loadnumber);
}
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "appendage/character/ap_common_suck.nut", true);
AddAppendage.sq_SetValidTime(1000);
AddAppendage.setBuffIconImage(15);
break;
}
}
function onEndCurrentAni_SilverBullet(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(143, STATE_PRIORITY_AUTO, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_SilverBullet(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_SilverBullet(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_SilverBullet(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_SilverBullet(obj, new_state)
{
if(!obj) return;
if(new_state != 143){
sq_EndDrawCastGauge(obj);
}
}
//上旋踢
function checkExecutableSkill_Windmill(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_WINDMILL);
if (isUse){
obj.getVar("windmill_count").setInt(0, 0);
obj.getVar("windmill_Bool").setBool(0, false);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_WINDMILL, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Windmill(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Windmill(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:
case 1:
obj.sq_SetCurrentAnimation(ATANI_BYKK_WINDMILLROLL);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_ranger/windmilldodgeat.ani"), 0, 0);
local aniPath = "character/gunner/effect/animation/1_ranger/windmilldust1.ani";
if(subState == 1){
aniPath = "character/gunner/effect/animation/1_ranger/windmilldust2.ani";
local aniPath2 = "character/gunner/effect/animation/1_ranger/windmilldust3.ani";
createOnlyDrawObject_ATGunner_bykk(obj,aniPath2,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL);
}
local pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM);
sq_moveWithParent(obj, pooledObj);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_WINDMILL);
local addSpeedRate = sq_GetLevelData(obj, SKILL_BYKK_WINDMILL, 2, skillLevel);
local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_WINDMILL, 3, skillLevel);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_WINDMILL));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local speedRate = 1.0 + addSpeedRate.tofloat() / 100.0;
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate);
break;
case 2:
obj.sq_SetCurrentAnimation(ATANI_BYKK_WINDMILLSTAND);
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(86);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/sumersault1.ani"), 0, 0);
break;
case 4:
obj.sq_SetCurrentAnimation(87);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/sumersault2.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/sumersault3.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/sumersault4.ani"), 0, 0);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_WINDMILL, -1, 3, 1.2) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_TWINGUNBLADESUMERSAULT));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(false);
obj.setTimeEvent(1, delay / 10, 5, true);
break;
case 10://枪刃冲击character/gunner/atanimation/twingunbladedashattackknife.ani72
obj.sq_SetCurrentAnimation(72);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/dashattackknife1.ani"), 0, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/attwingunblade/dashattackknife2.ani", 0, 0, 0);
local totalDamage = obj.sq_GetBonusRateWithPassive(174, -1, 1, 1.0) + 200;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 15));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(false);
obj.getVar("twingunblade_move").setInt(0, sq_GetXPos(obj));
obj.setTimeEvent(2, delay / 20, 20, true);
break;
case 20://银光飞刃character/gunner/atanimation/twingunbladejumpattackknife.ani73
obj.sq_SetCurrentAnimation(73);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local totalDamage = obj.sq_GetBonusRateWithPassive(174, -1, 2, 1.0) + 200;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 16));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local currentAni = obj.getCurrentAnimation();
local speedRate = 1000000 / currentAni.getDelaySum(0, 0);
local speed = 800.0 * speedRate.tofloat() / 100.0;
if(obj.getDirection() == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed);
else sq_SetVelocity(obj, 0, -speed);
sq_SetVelocity(obj, 2, -speed);
local aniPath = ["character/gunner/effect/animation/attwingunblade/jumpattackknife1.ani", "character/gunner/effect/animation/attwingunblade/jumpattackknife3.ani"];
local direction = obj.getDirection(), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj), zPos = sq_GetZPos(obj);
obj.getVar("twingunblade_effect").clear_obj_vector();
local pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath[0],false,direction,xPos,yPos,zPos,ENUM_DRAWLAYER_NORMAL);
sq_moveWithParent(obj, pooledObj);
obj.getVar("twingunblade_effect").push_obj_vector(pooledObj);
pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath[1],true,direction,xPos,yPos + 1,zPos,ENUM_DRAWLAYER_NORMAL);
sq_moveWithParent(obj, pooledObj);
obj.getVar("twingunblade_effect").push_obj_vector(pooledObj);
break;
case 30://飞旋射击character/gunner/atanimation/twingunbladedashattackgun.ani84
obj.sq_SetCurrentAnimation(84);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/dashattackgun.ani"), 0, 0);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.2, 1.2);
if(obj.getDirection() == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, 600.0);
else sq_SetVelocity(obj, 0, -600.0);
sq_SetVelocity(obj, 2, 300.0);
break;
}
}
function onEndCurrentAni_Windmill(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_WINDMILL);
local hitMax = sq_GetLevelData(obj, SKILL_BYKK_WINDMILL, 1, skillLevel);
obj.sq_IntVectClear();
if(obj.getVar("windmill_count").getInt(0) + 1 >= hitMax) obj.sq_IntVectPush(2);
else{
obj.getVar("windmill_count").setInt(0, obj.getVar("windmill_count").getInt(0) + 1);
if(subState == 0) obj.sq_IntVectPush(1);
else obj.sq_IntVectPush(0);
}
obj.sq_AddSetStatePacket(STATE_BYKK_WINDMILL, STATE_PRIORITY_AUTO, true);
break;
case 2:
case 10:
case 20:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
case 3:
obj.sq_IntVectClear();
obj.sq_IntVectPush(4);
obj.sq_AddSetStatePacket(STATE_BYKK_WINDMILL, STATE_PRIORITY_AUTO, true);
break;
case 4:
case 30:
if(subState == 30) obj.getVar("twingunBlade_jumpmove").setBool(0, true);
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(200);
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_Windmill(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
case 2:
if(obj.getVar("windmill_Bool").getBool(0) && !sq_GetSkill(obj, SKILL_BYKK_AIRRAID).isInCoolTime()){
obj.setSkillCommandEnable(SKILL_BYKK_AIRRAID,true);
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_AIRRAID);
if(b_useskill != -1 || sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){
obj.startSkillCoolTime(SKILL_BYKK_AIRRAID, sq_GetSkillLevel(obj, SKILL_BYKK_AIRRAID), -1);
obj.sq_IntVectClear();
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAINENLIGHTEN) > 0) obj.sq_IntVectPush(1);
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_AIRRAID, STATE_PRIORITY_AUTO, true);
break;
}
}
if(!sq_GetSkill(obj, SKILL_BYKK_AIRRAIDEX).isInCoolTime()){
obj.setSkillCommandEnable(SKILL_BYKK_AIRRAIDEX,true);
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_AIRRAIDEX);
if(b_useskill != -1 || sq_IsEnterCommand(obj, E_JUMP_COMMAND)){
obj.startSkillCoolTime(SKILL_BYKK_AIRRAIDEX, sq_GetSkillLevel(obj, SKILL_BYKK_AIRRAIDEX), -1);
obj.sq_IntVectClear();
if(sq_GetIntData(obj, SKILL_BYKK_AIRRAIDEX, 6) > 0){
if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(11);
else obj.sq_IntVectPush(10);
}
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_AIRRAIDEX, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
if(!sq_GetSkill(obj, SKILL_BYKK_FASTKNEE).isInCoolTime()){
obj.setSkillCommandEnable(SKILL_BYKK_FASTKNEE,true);
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_FASTKNEE);
if(b_useskill != -1){
setStylishAppendage(obj);
obj.startSkillCoolTime(SKILL_BYKK_FASTKNEE, sq_GetSkillLevel(obj, SKILL_BYKK_FASTKNEE), -1);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_FASTKNEE, STATE_PRIORITY_AUTO, true);
break;
}
}
case 10:
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_TWINGUNBLADE);
if(skillLevel > 0){
local coolTime = sq_GetLevelData(obj, SKILL_BYKK_TWINGUNBLADE, 7, skillLevel);
local timer = obj.getVar("twingunBlade_windmill").get_ct_vector(0);
if(!timer){
obj.getVar("twingunBlade_windmill").clear_ct_vector();
obj.getVar("twingunBlade_windmill").push_ct_vector();
timer = obj.getVar("twingunBlade_windmill").get_ct_vector(0);
timer.Reset();
timer.Start(10000,0);
obj.getVar("twingunBlade_windmill").setBool(0, false);
}
local currentT = timer.Get();//得到时间
if(currentT >= coolTime || obj.getVar("twingunBlade_windmill").getBool(0) == false){
sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true);
if(sq_IsEnterCommand(obj, E_SKILL_COMMAND)){
obj.getVar("twingunBlade_windmill").setBool(0, true);
timer.Reset();
timer.Start(10000,0);
obj.sq_IntVectClear();
obj.sq_IntVectPush(3);
obj.sq_AddSetStatePacket(STATE_BYKK_WINDMILL, STATE_PRIORITY_AUTO, true);
}
}
}
break;
}
if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0 && sq_GetZPos(obj) <= 0) proc_atStylish_bykk(obj);
}
function onProc_Windmill(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
case 3:
case 4:
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH);
if(skillLevel > 0){
local speed_X = sq_GetLevelData(obj, SKILL_BYKK_STYLISH, 0, skillLevel);
local speed_Y = sq_GetLevelData(obj, SKILL_BYKK_STYLISH, 1, skillLevel);
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){
sq_SetVelocity(obj, 0, speed_X.tofloat() * -1);
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) sq_SetVelocity(obj, 1, speed_Y.tofloat() * -1);
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) sq_SetVelocity(obj, 1, speed_Y.tofloat());
}
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
sq_SetVelocity(obj, 0, speed_X.tofloat());
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) sq_SetVelocity(obj, 1, speed_Y.tofloat() * -1);
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) sq_SetVelocity(obj, 1, speed_Y.tofloat());
}
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) sq_SetVelocity(obj, 1, speed_Y.tofloat() * -1);
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) sq_SetVelocity(obj, 1, speed_Y.tofloat());
}
break;
case 20:
if(sq_GetCurrentFrameIndex(obj) == 0){
if(sq_GetZPos(obj) <= 0){
sq_SetVelocity(obj, 0, 0.0);
sq_SetVelocity(obj, 2, 0.0);
local pooledObj = obj.getVar("twingunblade_effect").get_obj_vector(0);
if(pooledObj){
pooledObj.setValid(false);
}
local pooledObj2 = obj.getVar("twingunblade_effect").get_obj_vector(1);
if(pooledObj2){
local pAni = pooledObj2.getCurrentAnimation();
pAni.setCurrentFrameWithChildLayer(1);
}
local currentAni = obj.getCurrentAnimation();
currentAni.setCurrentFrameWithChildLayer(1);
}
}
break;
}
}
function onKeyFrameFlag_Windmill(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 501:
case 502:
case 504:
obj.sq_PlaySound("R_TWINGUN_GUN");
local totalDamage = obj.sq_GetBonusRateWithPassive(174, -1, 0, 1.0) + 200;
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,-10,obj.getDirection(),1,SKILL_BYKK_TWINGUNBLADE,1,totalDamage,0,0,0,0,0,0,0);
local angle = -60.0, offsetX = {
[501] = [30, 70],
[502] = [-10,15],
[504] = [10,30]};
if(flagIndex == 502) angle = -90.0;
else if(flagIndex == 504) angle = -120.0;
for(local i = 0; i < 2; i++){
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/character/gunner/animation/twingunblade/gunshoot.ani", offsetX[flagIndex][i], 0, 0);
sq_SetCustomRotate(pooledObj, sq_ToRadian(angle));
}
break;
}
return true;
}
function onTimeEvent_Windmill(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 0: obj.resetHitObjectList(); break;
case 1:
local vz = sq_GetUniformVelocity(0, 100, timeEventCount, 5);
sq_setCurrentAxisPos(obj, 2, vz);
break;
case 2:
local vx = sq_GetUniformVelocity(0, 300, timeEventCount, 20);
local dstX = sq_GetDistancePos(obj.getVar("twingunblade_move").getInt(0), obj.getDirection(), vx);
if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);
break;
}
}
function onEndState_Windmill(obj, new_state)
{
if(!obj) return;
}
function onAttack_Windmill(obj, damager, boundingBox, isStuck)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
if(sq_GetSkillLevel(obj, SKILL_BYKK_AIRRAID) < 1) break;
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
if(obj.getVar("windmill_Bool").getBool(0) == false) obj.getVar("windmill_Bool").setBool(0, true);
}
break;
}
}
//爆头一击
function checkExecutableSkill_HeadShot(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HEADSHOT);
if (isUse){
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) obj.getVar("headShot_Bool").setBool(0, true);
else obj.getVar("headShot_Bool").setBool(0, false);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_HEADSHOT, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_HeadShot(obj)
{
if (!obj) return false;
return true;
}
function onSetState_HeadShot(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_ATTACK2);
obj.sq_PlaySound("R_FG_HSHOT");
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
break;
case 1:
if(obj.getVar("headShot_Bool").getBool(0)) obj.sq_SetCurrentAnimation(ATANI_BYKK_ATTACK2SHOOTDOWN);
else obj.sq_SetCurrentAnimation(ATANI_BYKK_ATTACK2SHOOTUP);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
break;
case 2:
obj.sq_SetCurrentAnimation(ATANI_BYKK_RELOAD);
local weaponSubType = obj.getWeaponSubType();
switch(weaponSubType){
case 0://左轮
sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/reducerevolverreload_at.ani", 0, 0, 0);
break;
case 1://自动
break;
case 2://步枪
break;
case 3://手炮
break;
case 4://手弩
break;
}
local speedRate = 1.0 + sq_GetLevelData(obj, SKILL_BYKK_REDUCEREVOLVERDELAY, 5, sq_GetSkillLevel(obj, SKILL_BYKK_REDUCEREVOLVERDELAY)).tofloat() / 100.0;
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate);
break;
}
}
function onEndCurrentAni_HeadShot(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_HEADSHOT, STATE_PRIORITY_AUTO, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(STATE_BYKK_HEADSHOT, STATE_PRIORITY_AUTO, true);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_HeadShot(obj)
{
if(!obj) return;
if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj);
}
function onKeyFrameFlag_HeadShot(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 100:
local currentAni = obj.getCurrentAnimation();
currentAni.setCurrentFrameWithChildLayer(2);
break;
case 101:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_HEADSHOT, STATE_PRIORITY_AUTO, true);
break;
case 102:
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(1, 1) * 50 / 50;
obj.setTimeEvent(1, delay, 1, false);
break;
case 103:
sq_SetMyShake(obj, 3, 120);
if(obj.getVar("headShot_Bool").getBool(0)) sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/headshotdown.ani", 100, 0, 75);
else sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/headshotup.ani", 125, 0, 100);
local effcetAniPath0 = "character/gunner/effect/animation/1_ranger/";
local effectAniPath = [["shooteffect/uppistol.ani", "shooteffect/downpistol.ani"],
["shooteffect/uppistol.ani", "shooteffect/downpistol.ani"],
["shooteffect/upmusket.ani", "shooteffect/downmusket.ani"],
["shooteffect/uphandcannon.ani", "shooteffect/downhandcannon.ani"],
["shooteffect/upbowgun.ani", "shooteffect/downbowgun.ani"]
];
local loadSlot = obj.sq_GetSkillLoad(30);
if(loadSlot && loadSlot.getRemainLoadNumber() > 0){
effectAniPath = [["silverbullet/uppistol.ani", "silverbullet/downpistol.ani"],
["silverbullet/uppistol.ani", "silverbullet/downpistol.ani"],
["silverbullet/upmusket.ani", "silverbullet/downmusket.ani"],
["silverbullet/uphandcannon.ani", "silverbullet/downhandcannon.ani"],
["silverbullet/upbowgun.ani", "silverbullet/downbowgun.ani"]];
loadSlot.decreaseLoadCount(1);
}
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HEADSHOT, -1, 0, 1.0) + 100;
print("totalDamage_headshot = "+totalDamage);
local weaponSubType = obj.getWeaponSubType();
if(loadSlot && loadSlot.getRemainLoadNumber() > 0) obj.sq_PlaySound("R_SILVER_SHOT");
else{
switch(weaponSubType){
case 0: obj.sq_PlaySound("G_WREVOLVERA"); break;//左轮
case 1: obj.sq_PlaySound("G_SMALLGUNA"); break;//自动
case 2: obj.sq_PlaySound("G_MUSKETA"); break;//步枪
case 3: obj.sq_PlaySound("G_HCANNONA"); break;//手炮
case 4: obj.sq_PlaySound("G_BOWGUNA"); break;//手弩
}
}
if(obj.getVar("headShot_Bool").getBool(0)) sq_AddDrawOnlyAniFromParent(obj, effcetAniPath0 + effectAniPath[weaponSubType][1], 100, 0, 75);
else sq_AddDrawOnlyAniFromParent(obj, effcetAniPath0 + effectAniPath[weaponSubType][0], 125, 0, 100);
if(obj.getVar("headShot_Bool").getBool(0)){
if(loadSlot && loadSlot.getRemainLoadNumber() > 0) createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,100,0,75,obj.getDirection(),1,SKILL_BYKK_HEADSHOT,2,totalDamage,weaponSubType,1,0,0,0,0,0);
else createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,100,0,75,obj.getDirection(),1,SKILL_BYKK_HEADSHOT,1,totalDamage,weaponSubType,1,0,0,0,0,0);
}
else {
if(loadSlot && loadSlot.getRemainLoadNumber() > 0) createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,125,0,100,obj.getDirection(),1,SKILL_BYKK_HEADSHOT,2,totalDamage,weaponSubType,0,0,0,0,0,0);
else createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,125,0,100,obj.getDirection(),1,SKILL_BYKK_HEADSHOT,1,totalDamage,weaponSubType,0,0,0,0,0,0);
}
sq_SetMyShake(obj, 3, 100);
break;
case 104:
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(STATE_BYKK_HEADSHOT, STATE_PRIORITY_AUTO, true);
break;
}
return true;
}
function onTimeEvent_HeadShot(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 1:
local currentAni = obj.getCurrentAnimation();
currentAni.setCurrentFrameWithChildLayer(1);
break;
}
}
function onEndState_HeadShot(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_BYKK_HEADSHOT) obj.getVar("headShot_Bool").setBool(0, false);
}
//回头一击
function checkExecutableSkill_TurningShoot(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_TURNINGSHOOT);
if (isUse){
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) obj.getVar("headShot_Bool").setBool(0, true);
else obj.getVar("headShot_Bool").setBool(0, false);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_TURNINGSHOOT, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_TurningShoot(obj)
{
if (!obj) return false;
return true;
}
function onSetState_TurningShoot(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_ATTACK2);
obj.sq_PlaySound("R_FG_HSHOT");
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
break;
case 1:
if(obj.getVar("headShot_Bool").getBool(0)) obj.sq_SetCurrentAnimation(ATANI_BYKK_ATTACK2SHOOTDOWN);
else obj.sq_SetCurrentAnimation(ATANI_BYKK_ATTACK2SHOOTUP);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
break;
case 2:
obj.sq_SetCurrentAnimation(ATANI_BYKK_RELOAD);
local weaponSubType = obj.getWeaponSubType();
switch(weaponSubType){
case 0://左轮
sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/reducerevolverreload_at.ani", 0, 0, 0);
break;
case 1://自动
break;
case 2://步枪
break;
case 3://手炮
break;
case 4://手弩
break;
}
local speedRate = 1.0 + sq_GetLevelData(obj, SKILL_BYKK_REDUCEREVOLVERDELAY, 5, sq_GetSkillLevel(obj, SKILL_BYKK_REDUCEREVOLVERDELAY)).tofloat() / 100.0;
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate);
break;
}
}
function onEndCurrentAni_TurningShoot(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_TURNINGSHOOT, STATE_PRIORITY_AUTO, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(STATE_BYKK_TURNINGSHOOT, STATE_PRIORITY_AUTO, true);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_TurningShoot(obj)
{
if(!obj) return;
if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj);
}
function onKeyFrameFlag_TurningShoot(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 100:
local currentAni = obj.getCurrentAnimation();
currentAni.setCurrentFrameWithChildLayer(3);
sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/turningshootbody.ani", 0, 0, 0);
local aniPath = "character/gunner/effect/animation/turningshoot.ani";
createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,sq_GetOppositeDirection(obj.getDirection()),sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), -5),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL);
obj.setTimeEvent(2, currentAni.getDelaySum(3, 3), 1, false);
break;
case 101:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_TURNINGSHOOT, STATE_PRIORITY_AUTO, true);
break;
case 102:
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(1, 1) * 50 / 50;
obj.setTimeEvent(1, delay, 1, false);
break;
case 103:
sq_SetMyShake(obj, 3, 120);
if(obj.getVar("headShot_Bool").getBool(0)) sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/headshotdown.ani", 100, 0, 75);
else sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/headshotup.ani", 125, 0, 100);
local effcetAniPath0 = "character/gunner/effect/animation/1_ranger/";
local effectAniPath = [["shooteffect/uppistol.ani", "shooteffect/downpistol.ani"],
["shooteffect/uppistol.ani", "shooteffect/downpistol.ani"],
["shooteffect/upmusket.ani", "shooteffect/downmusket.ani"],
["shooteffect/uphandcannon.ani", "shooteffect/downhandcannon.ani"],
["shooteffect/upbowgun.ani", "shooteffect/downbowgun.ani"]
];
local loadSlot = obj.sq_GetSkillLoad(30);
if(loadSlot && loadSlot.getRemainLoadNumber() > 0){
effectAniPath = [["silverbullet/uppistol.ani", "silverbullet/downpistol.ani"],
["silverbullet/uppistol.ani", "silverbullet/downpistol.ani"],
["silverbullet/upmusket.ani", "silverbullet/downmusket.ani"],
["silverbullet/uphandcannon.ani", "silverbullet/downhandcannon.ani"],
["silverbullet/upbowgun.ani", "silverbullet/downbowgun.ani"]];
loadSlot.decreaseLoadCount(1);
}
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HEADSHOT, -1, 0, 1.0) + 100;
totalDamage = totalDamage * (obj.sq_GetBonusRateWithPassive(SKILL_BYKK_TURNINGSHOOT, -1, 0, 1.0) + 100) / 100;
print("totalDamage_turningshot = "+totalDamage);
local weaponSubType = obj.getWeaponSubType();
if(loadSlot && loadSlot.getRemainLoadNumber() > 0) obj.sq_PlaySound("R_SILVER_SHOT");
else{
switch(weaponSubType){
case 0: obj.sq_PlaySound("G_WREVOLVERA"); break;//左轮
case 1: obj.sq_PlaySound("G_SMALLGUNA"); break;//自动
case 2: obj.sq_PlaySound("G_MUSKETA"); break;//步枪
case 3: obj.sq_PlaySound("G_HCANNONA"); break;//手炮
case 4: obj.sq_PlaySound("G_BOWGUNA"); break;//手弩
}
}
if(obj.getVar("headShot_Bool").getBool(0)) sq_AddDrawOnlyAniFromParent(obj, effcetAniPath0 + effectAniPath[weaponSubType][1], 100, 0, 75);
else sq_AddDrawOnlyAniFromParent(obj, effcetAniPath0 + effectAniPath[weaponSubType][0], 125, 0, 100);
if(obj.getVar("headShot_Bool").getBool(0)){
if(loadSlot && loadSlot.getRemainLoadNumber() > 0) createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,100,0,75,obj.getDirection(),1,SKILL_BYKK_HEADSHOT,2,totalDamage,weaponSubType,1,0,0,0,0,0);
else createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,100,0,75,obj.getDirection(),1,SKILL_BYKK_HEADSHOT,1,totalDamage,weaponSubType,1,0,0,0,0,0);
}
else {
if(loadSlot && loadSlot.getRemainLoadNumber() > 0) createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,125,0,100,obj.getDirection(),1,SKILL_BYKK_HEADSHOT,2,totalDamage,weaponSubType,0,0,0,0,0,0);
else createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,125,0,100,obj.getDirection(),1,SKILL_BYKK_HEADSHOT,1,totalDamage,weaponSubType,0,0,0,0,0,0);
}
sq_SetMyShake(obj, 3, 100);
break;
case 104:
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(STATE_BYKK_TURNINGSHOOT, STATE_PRIORITY_AUTO, true);
break;
}
return true;
}
function onTimeEvent_TurningShoot(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 1:
local currentAni = obj.getCurrentAnimation();
currentAni.setCurrentFrameWithChildLayer(1);
break;
case 2:
sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj)));
break;
}
}
function onEndState_TurningShoot(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_BYKK_TURNINGSHOOT) obj.getVar("headShot_Bool").setBool(0, false);
}
//刺踢
function checkExecutableSkill_FastKnee(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_FASTKNEE);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_FASTKNEE, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_FastKnee(obj)
{
if (!obj) return false;
return true;
}
function onSetState_FastKnee(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(14);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/atfastknee.ani"), 0, 0);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FASTKNEE, -1, 6, 1.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 3));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local attackInfo = sq_GetCurrentAttackInfo(obj);
local backForce = 50;
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_FASTKNEE);
local backForceRate = sq_GetLevelData(obj, SKILL_BYKK_FASTKNEE, 5, skillLevel).tofloat() * 1.11;
// print("backForceRate = "+backForceRate);
backForce = backForce * backForceRate / 100.0;
sq_SetCurrentAttacknBackForce(attackInfo, backForce.tointeger());
local prob = sq_GetLevelData(obj, SKILL_BYKK_FASTKNEE, 2, skillLevel) / 10;
local time = sq_GetLevelData(obj, SKILL_BYKK_FASTKNEE, 4, skillLevel);
local level = sq_GetSkillLevel(obj, 174) + 5;
sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_STUN, prob, level, time);
break;
}
local addRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FASTKNEE, -1, 1, 1.0) + 100;
local speedRate = 1.0 + addRate.tofloat() / 100.0;
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate);
}
function onEndCurrentAni_FastKnee(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;
}
}
function onProcCon_FastKnee(obj)
{
if(!obj) return;
if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj);
}
function onKeyFrameFlag_FastKnee(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_FastKnee(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_FastKnee(obj, new_state)
{
if(!obj) return;
}
//烟尘弹
function checkExecutableSkill_ATDustShoot(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(0);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_ATDustShoot(obj)
{
if (!obj) return false;
return true;
}
function onSetState_ATDustShoot(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(120);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_ATDustShoot(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;
}
}
function onProcCon_ATDustShoot(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_ATDustShoot(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_ATDustShoot(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_ATDustShoot(obj, new_state)
{
if(!obj) return;
}
//锁链截击
function checkExecutableSkill_ChainSnatch(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CHAINSNATCH);
if (isUse){
obj.getVar("ChainSnatchTar").clear_obj_vector();
obj.getVar("ChainSnatchBool").setBool(0, false);
obj.getVar("ChainSnatchBool").setBool(1, false);
obj.sq_IntVectClear();
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAINENLIGHTEN) > 0) obj.sq_IntVectPush(10);
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_CHAINSNATCH, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_ChainSnatch(obj)
{
if (!obj) return false;
return true;
}
function onSetState_ChainSnatch(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_CHAINSNATCH_ABODY);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CHAINSNATCH, -1, 0, 1.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_CHAINSNATCHSPIN));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local delay = sq_GetIntData(obj, SKILL_BYKK_CHAINSNATCH, 0);
obj.setTimeEvent(0, delay, 1, false);
break;
case 1:
obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINSNATCH_BBODY);
obj.stopTimeEvent(1);
break;
case 2:
obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINSNATCH_CBODY);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CHAINSNATCH, -1, 1, 1.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_CHAINSNATCHTHROW));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
case 3:
obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINSNATCH_DBODY);
break;
case 4:
obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINSNATCH_EBODY);
sq_SetMyShake(obj, 2, 100);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CHAINSNATCH, -1, 2, 1.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_CHAINSNATCHPULL));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
case 10:
obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINSNATCH_ENLIGHTEN_ATTACK1_BODY_00);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CHAINSNATCH, -1, 0, 1.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_CHAINSNATCHSPIN));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
case 11:
obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINSNATCH_ENLIGHTEN_ATTACK2_BODY_00);
sq_SetMyShake(obj, 2, 100);
break;
case 12:
obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINSNATCH_ENLIGHTEN_ATTACK3_BODY_00);
break;
case 13:
obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINSNATCH_ENLIGHTEN_ATTACK2_BODY_FAIL);
break;
}
local speedRate = 1.0;
if(subState >= 10) speedRate = 1.2;
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate);
switch(subState){
case 0:
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(0, 0);
local hitTime = sq_GetIntData(obj, SKILL_BYKK_CHAINSNATCH, 1) * delaySum / 60;
obj.setTimeEvent(1, hitTime, -1, false);
local appendage = sq_AttractToMe(obj, 150, 150, 300);
obj.getVar("ChainSnatch").setAppendage(0,appendage);
break;
case 2:
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(false);
local appendage = obj.getVar("ChainSnatch").getAppendage(0);
if(appendage) appendage.setValid(false);
local size = obj.getVar("ChainSnatchTar").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("ChainSnatchTar").get_obj_vector(i);
if(targetObj && !sq_IsFixture(targetObj)){
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, APDPATH_ATRANGER_CHAINSNATCH);
sq_MoveToAppendageForce(targetObj, obj, obj, 300, 0, targetObj.getZPos(), delaySum, true, addAppendage);
}
}
}
break;
case 4:
case 11:
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(false) / 2;
local size = obj.getVar("ChainSnatchTar").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("ChainSnatchTar").get_obj_vector(i);
if(targetObj && !sq_IsFixture(targetObj)){
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, APDPATH_ATRANGER_CHAINSNATCH);
sq_MoveToAppendageForce(targetObj, obj, obj, 150, 0, targetObj.getZPos(), delaySum, true, addAppendage);
}
}
}
break;
}
}
function onEndCurrentAni_ChainSnatch(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 2:
case 11:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(STATE_BYKK_CHAINSNATCH, STATE_PRIORITY_AUTO, true);
break;
case 1:
case 3:
case 4:
case 12:
case 13:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
case 10:
obj.sq_IntVectClear();
if(obj.getVar("ChainSnatchBool").getBool(0)){
obj.sq_IntVectPush(11);
}
else obj.sq_IntVectPush(13);
obj.sq_AddSetStatePacket(STATE_BYKK_CHAINSNATCH, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_ChainSnatch(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.setSkillCommandEnable(SKILL_BYKK_CHAINSNATCH, true);
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_CHAINSNATCH);
if(b_useskill != -1){
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(STATE_BYKK_CHAINSNATCH, STATE_PRIORITY_AUTO, true);
break;
}
break;
case 2:
case 3:
if(obj.getVar("ChainSnatchBool").getBool(1)){
obj.setSkillCommandEnable(SKILL_BYKK_CHAINSNATCH, true);
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_CHAINSNATCH);
if(b_useskill != -1){
obj.getVar("ChainSnatchBool").setBool(1, false);
obj.sq_IntVectClear();
obj.sq_IntVectPush(4);
obj.sq_AddSetStatePacket(STATE_BYKK_CHAINSNATCH, STATE_PRIORITY_AUTO, true);
break;
}
}
break;
}
if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj);
}
function onKeyFrameFlag_ChainSnatch(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 201: sq_SetMyShake(obj, 1, 100); break;
case 203: obj.getVar("ChainSnatchBool").setBool(1, true);print("test"); break;
case 1001: sq_SetMyShake(obj, 1, 100); break;
case 1033:
local isSilver = 0;
local loadSlot = obj.sq_GetSkillLoad(30);
if(loadSlot && loadSlot.getRemainLoadNumber() > 0){
loadSlot.decreaseLoadCount(1);
isSilver = 1;
obj.sq_PlaySound("R_SILVER_SHOT");
}
local bonusRate = sq_GetIntData(obj, SKILL_BYKK_CHAINENLIGHTEN, 7) / 1000.0;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CHAINSNATCH, -1, 0, bonusRate) + 100;
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),1,SKILL_BYKK_CHAINSNATCH,1,totalDamage,isSilver,0,0,0,0,0,0);
break;
case 1037:
if(obj.isMyControlObject()) sq_flashScreen(obj,20,20,10,25, sq_RGB(255,128,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 3, 120);
break;
}
return true;
}
function onTimeEvent_ChainSnatch(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 0:
local subState = obj.getSkillSubState();
if(subState != 0) break;
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_CHAINSNATCH, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 1: obj.resetHitObjectList(); break;
}
}
function onEndState_ChainSnatch(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_BYKK_CHAINSNATCH){
local appendage = obj.getVar("ChainSnatch").getAppendage(0);
if(appendage) appendage.setValid(false);
local size = obj.getVar("ChainSnatchTar").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("ChainSnatchTar").get_obj_vector(i);
if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, APDPATH_ATRANGER_CHAINSNATCH);
}
}
}
}
function onAttack_ChainSnatch(obj, damager, boundingBox, isStuck)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
if(!obj.getVar("ChainSnatchTar").is_obj_vector(damager)){
obj.getVar("ChainSnatchTar").push_obj_vector(damager)
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATRANGER_CHAINSNATCH)){
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, APDPATH_ATRANGER_CHAINSNATCH, true);
sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage);
}
}
}
break;
case 10:
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
if(obj.getVar("ChainSnatchBool").getBool(0) == false) obj.getVar("ChainSnatchBool").setBool(0, true);
if(!obj.getVar("ChainSnatchTar").is_obj_vector(damager)){
obj.getVar("ChainSnatchTar").push_obj_vector(damager)
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATRANGER_CHAINSNATCH)){
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, APDPATH_ATRANGER_CHAINSNATCH, true);
sq_HoldAndDelayDie(damager, obj, false, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage);
}
}
}
break;
}
}
//枪舞
function checkExecutableSkill_RandomShoot(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_RANDOMSHOOT);
if (isUse){
obj.getVar("randomShootBool").setBool(0, true);
obj.getVar("randomShootBool").setBool(1, true);
obj.getVar("randomShootObj").clear_obj_vector();
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMSHOOT, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_RandomShoot(obj)
{
if (!obj) return false;
return true;
}
function onSetState_RandomShoot(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_RANDOMSHOOT_1); break;
case 1: obj.sq_SetCurrentAnimation(ATANI_BYKK_RANDOMSHOOT_2); break;
case 2: obj.sq_SetCurrentAnimation(ATANI_BYKK_RANDOMSHOOT_3); break;
case 3: obj.sq_SetCurrentAnimation(ATANI_BYKK_RANDOMSHOOT_4); break;
}
obj.sq_PlaySound("R_CHAIN_POWDER_RANDOMSHOT");
obj.sq_PlaySound("G_WREVOLVERB");
local speedRate = 1.5;
if(obj.getRapidInputFrequency() >= 1) speedRate = 2.0;
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate);
local currentAni = obj.getCurrentAnimation();
local speedRate = 15000 / currentAni.getDelaySum(0, 0);
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_RANDOMSHOOT, 8);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,1,1,obj.getDirection(),1,SKILL_BYKK_RANDOMSHOOT,1,speedRate,subState,sizeRate,0,0,0,0,0);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,1,1,obj.getDirection(),1,SKILL_BYKK_RANDOMSHOOT,2,speedRate,subState,sizeRate,0,0,0,0,0);
local aniPath = "character/gunner/effect/animation/1_ranger/shooteffect/atrandomshootfire.ani";
local direction = obj.getDirection(), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj);
switch(subState){
case 0:
local offset_x = sq_GetDistancePos(xPos, direction, 66)
local pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,direction,offset_x,yPos,91,ENUM_DRAWLAYER_NORMAL);
offset_x = sq_GetDistancePos(xPos, direction, 57)
local pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,direction,offset_x,yPos,101,ENUM_DRAWLAYER_NORMAL);
break;
case 1:
local offset_x = sq_GetDistancePos(xPos, direction, 76)
local pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,direction,offset_x,yPos,86,ENUM_DRAWLAYER_NORMAL);
offset_x = sq_GetDistancePos(xPos, direction, -76)
pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,sq_GetOppositeDirection(direction),offset_x,yPos,86,ENUM_DRAWLAYER_NORMAL);
break;
case 2:
local offset_x = sq_GetDistancePos(xPos, direction, 28)
local pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,direction,offset_x,yPos,75,ENUM_DRAWLAYER_NORMAL);
sq_SetCustomRotate(pooledObj, sq_ToRadian(-45.0));
offset_x = sq_GetDistancePos(xPos, direction, -40)
pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,sq_GetOppositeDirection(direction),offset_x,yPos,104,ENUM_DRAWLAYER_NORMAL);
sq_SetCustomRotate(pooledObj, sq_ToRadian(45.0));
break;
case 3:
local offset_x = sq_GetDistancePos(xPos, direction, -28)
local pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,direction,offset_x,yPos,75,ENUM_DRAWLAYER_NORMAL);
sq_SetCustomRotate(pooledObj, sq_ToRadian(-135.0));
offset_x = sq_GetDistancePos(xPos, direction, 47)
pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,sq_GetOppositeDirection(direction),offset_x,yPos,100,ENUM_DRAWLAYER_NORMAL);
sq_SetCustomRotate(pooledObj, sq_ToRadian(135.0));
break;
}
if(obj.getVar("randomShootBool").getBool(0)){
obj.getVar("randomShootBool").setBool(0, false);
obj.sq_PlaySound("R_FG_RANDOMSHOT");
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_RANDOMSHOOT, -1, 0, 1.0) + 100;
local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_RANDOMSHOOT, -1, 3, 1.0) + 100;
local hitMax = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_RANDOMSHOOT, -1, 1, 1.0) + 100;
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),1,SKILL_BYKK_RANDOMSHOOT,3,totalDamage,hitMax,200,sizeRate,0,0,0,0);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),1,SKILL_BYKK_RANDOMSHOOT,4,totalDamage2,hitMax,200,sizeRate,0,0,0,0);
}
}
function onEndCurrentAni_RandomShoot(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
case 2:
case 3:
for(local i = 0; i < 5; i++){
local randomState = sq_getRandom(0, 3);
if(randomState != subState){
obj.sq_IntVectClear();
obj.sq_IntVectPush(randomState);
obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMSHOOT, STATE_PRIORITY_AUTO, true);
break;
}
}
break;
}
}
function onProcCon_RandomShoot(obj)
{
if(!obj) return;
if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj);
}
function onProc_RandomShoot(obj)
{
if(!obj) return;
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput();
if(obj.getRapidInputFrequency() >= 1 && obj.getVar("randomShootBool").getBool(1)){
local hitMax = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_RANDOMSHOOT, -1, 2, 1.0) + 100;
local size = obj.getVar("randomShootObj").get_obj_vector_size();
if(size > 0){
local currentAni = obj.getCurrentAnimation();
local speed = currentAni.getDelaySum(0, 0) * 200 / 200 ;
// print("speed = "+speed);
for(local i = 0; i < size; i++){
local attackObj = obj.getVar("randomShootObj").get_obj_vector(i);
if(attackObj){
local colObj = sq_GetCNRDObjectToCollisionObject(attackObj);
if(colObj.getVar("custom").getInt(0) != hitMax){
colObj.stopTimeEvent(0);
colObj.setTimeEvent(0, speed, -1, false);
colObj.getVar("custom").setInt(0, hitMax);
}
}
}
obj.getVar("randomShootBool").setBool(1, false);
}
}
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
}
}
function onKeyFrameFlag_RandomShoot(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_RandomShoot(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_RandomShoot(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_BYKK_RANDOMSHOOT){
local size = obj.getVar("randomShootObj").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local attackObj = obj.getVar("randomShootObj").get_obj_vector(i);
if(attackObj){
local colObj = sq_GetCNRDObjectToCollisionObject(attackObj);
colObj.setTimeEvent(1, 1000, 1, true);
}
}
}
}
}
//移动射击
function checkExecutableSkill_WalkShoot(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_WALKSHOOT);
if (isUse){
obj.getVar("walkShootWeaponType").setInt(0, obj.getWeaponSubType());
obj.getVar("WalkShootBool").setBool(3, true);
obj.getVar("walkShootEffect").clear_obj_vector();
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_WALKSHOOT, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_WalkShoot(obj)
{
if (!obj) return false;
return true;
}
function onSetState_WalkShoot(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_WALKSHOOTREADYSTAY); break;
case 1: obj.sq_SetCurrentAnimation(ATANI_BYKK_WALKSHOOTREADYFRONT); break;
case 2: obj.sq_SetCurrentAnimation(ATANI_BYKK_WALKSHOOTREADYBACK); break;
case 3: obj.sq_SetCurrentAnimation(ATANI_BYKK_WALKSHOOTRIGHTSTAY); break;
case 4: obj.sq_SetCurrentAnimation(ATANI_BYKK_WALKSHOOTRIGHTFRONT); break;
case 5: obj.sq_SetCurrentAnimation(ATANI_BYKK_WALKSHOOTRIGHTBACK); break;
case 6: obj.sq_SetCurrentAnimation(ATANI_BYKK_WALKSHOOTLEFTSTAY); break;
case 7: obj.sq_SetCurrentAnimation(ATANI_BYKK_WALKSHOOTLEFTFRONT); break;
case 8: obj.sq_SetCurrentAnimation(ATANI_BYKK_WALKSHOOTLEFTBACK); break;
}
local sawAni = ["effect/animation/attwingunblade/attackgunreadystay.ani", "effect/animation/attwingunblade/attackgunreadyfront.ani", "effect/animation/attwingunblade/attackgunreadyback.ani", "effect/animation/attwingunblade/attackgunrightstay.ani", "effect/animation/attwingunblade/attackgunrightfront.ani", "effect/animation/attwingunblade/attackgunrightback.ani", "effect/animation/attwingunblade/attackgunleftstay.ani", "effect/animation/attwingunblade/attackgunleftfront.ani", "effect/animation/attwingunblade/attackgunleftback.ani"];
if(sq_GetSkillLevel(obj, SKILL_BYKK_SAWBLADE) > 0) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation(sawAni[subState]), 0, 0);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
if(subState == 0 && obj.getVar("WalkShootBool").getBool(3)){
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),1,SKILL_BYKK_WALKSHOOT,3,0,0,0,0,0,0,0,0);
obj.getVar("WalkShootBool").setBool(3, false);
local currentAni = obj.getCurrentAnimation();
local weaponSubType = obj.getWeaponSubType();
local baseSpeed = 120;
if(weaponSubType == 1 || weaponSubType == 4) baseSpeed = 100;
else if(weaponSubType == 2) baseSpeed = 180;
else if(weaponSubType == 3) baseSpeed = 300;
local speed = currentAni.getDelaySum(0, 0) * baseSpeed / 100;
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_WALKSHOOTEX);
if(skillLevel > 0) speed = speed * 100 / (100 + 10 * skillLevel);
obj.getVar("WalkShoot_T").clear_ct_vector();
obj.getVar("WalkShoot_T").push_ct_vector();
local timer = obj.getVar("WalkShoot_T").get_ct_vector(0);
timer.Reset();
timer.Start(10000,0);
obj.getVar("walkShootSet").setInt(0, speed);
obj.getVar("walkShootSet").setInt(1, 1);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_WALKSHOOT);
local lifeTime = sq_GetLevelData(obj, SKILL_BYKK_WALKSHOOT, 2, skillLevel);
local loadCount = sq_GetLevelData(obj, SKILL_BYKK_WALKSHOOT, 3 + obj.getWeaponSubType(), skillLevel);
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_WALKSHOOT);
if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_WALKSHOOT);
obj.sq_AddSkillLoad(SKILL_BYKK_WALKSHOOT, 22, loadCount, lifeTime);
loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_WALKSHOOT);
loadSlot.setStartCool();
}
}
function onEndCurrentAni_WalkShoot(obj)
{
if(!obj) return;
}
function onProcCon_WalkShoot(obj)
{
if(!obj) return;
if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj);
}
function onProc_WalkShoot(obj)
{
if(!obj) return;
local direction = obj.getDirection();
local subState = obj.getSkillSubState();
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
if(sq_IsEnterCommand(obj, E_JUMP_COMMAND) || obj.getVar("walkShootWeaponType").getInt(0) != obj.getWeaponSubType()){
obj.startSkillCoolTime(SKILL_BYKK_WALKSHOOT, sq_GetSkillLevel(obj, SKILL_BYKK_WALKSHOOT), -1);
obj.sq_RemoveSkillLoad(SKILL_BYKK_WALKSHOOT);
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
return;
}
sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true);
if(sq_IsEnterCommand(obj, E_SKILL_COMMAND)){
sq_SetCurrentDirection(obj, sq_GetOppositeDirection(direction));
obj.sq_IntVectClear();
if(direction = ENUM_DIRECTION_RIGHT) obj.sq_IntVectPush(6);
else obj.sq_IntVectPush(3);
obj.sq_AddSetStatePacket(STATE_BYKK_WALKSHOOT, STATE_PRIORITY_AUTO, true);
}
switch(subState){
case 0:
case 3:
case 6:
if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_RIGHT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_LEFT) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(STATE_BYKK_WALKSHOOT, STATE_PRIORITY_AUTO, true);
break;
}
else if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_RIGHT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_LEFT) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 2);
obj.sq_AddSetStatePacket(STATE_BYKK_WALKSHOOT, STATE_PRIORITY_AUTO, true);
break;
}
break;
case 1:
case 2:
case 4:
case 5:
case 7:
case 8:
if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_RIGHT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_LEFT)){
local speed = 300.0 * (1000.0 + sq_GetLevelData(obj, SKILL_BYKK_WALKSHOOT, 1, sq_GetSkillLevel(obj, SKILL_BYKK_WALKSHOOT))) / 1000.0;
if(direction == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, -speed);
else sq_SetVelocity(obj, 0, speed);
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){
local speed = 150.0 * (1000.0 + sq_GetLevelData(obj, SKILL_BYKK_WALKSHOOT, 1, sq_GetSkillLevel(obj, SKILL_BYKK_WALKSHOOT))) / 1000.0;
sq_SetVelocity(obj, 1, -speed);
}
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){
local speed = 150.0 * (1000.0 + sq_GetLevelData(obj, SKILL_BYKK_WALKSHOOT, 1, sq_GetSkillLevel(obj, SKILL_BYKK_WALKSHOOT))) / 1000.0;
sq_SetVelocity(obj, 1, speed);
}
}
else if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_RIGHT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_LEFT)){
local speed = 300.0 * (1000.0 + sq_GetLevelData(obj, SKILL_BYKK_WALKSHOOT, 1, sq_GetSkillLevel(obj, SKILL_BYKK_WALKSHOOT))) / 1000.0;
if(direction == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed);
else sq_SetVelocity(obj, 0, -speed);
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){
local speed = 150.0 * (1000.0 + sq_GetLevelData(obj, SKILL_BYKK_WALKSHOOT, 1, sq_GetSkillLevel(obj, SKILL_BYKK_WALKSHOOT))) / 1000.0;
sq_SetVelocity(obj, 1, -speed);
}
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){
local speed = 150.0 * (1000.0 + sq_GetLevelData(obj, SKILL_BYKK_WALKSHOOT, 1, sq_GetSkillLevel(obj, SKILL_BYKK_WALKSHOOT))) / 1000.0;
sq_SetVelocity(obj, 1, speed);
}
}
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){
local speed = 150.0 * (1000.0 + sq_GetLevelData(obj, SKILL_BYKK_WALKSHOOT, 1, sq_GetSkillLevel(obj, SKILL_BYKK_WALKSHOOT))) / 1000.0;
sq_SetVelocity(obj, 1, -speed);
}
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){
local speed = 150.0 * (1000.0 + sq_GetLevelData(obj, SKILL_BYKK_WALKSHOOT, 1, sq_GetSkillLevel(obj, SKILL_BYKK_WALKSHOOT))) / 1000.0;
sq_SetVelocity(obj, 1, speed);
}
else{
obj.sq_StopMove();
obj.sq_IntVectClear();
if(subState == 2 || subState == 5 || subState == 8) obj.sq_IntVectPush(subState - 2);
else obj.sq_IntVectPush(subState - 1);
obj.sq_AddSetStatePacket(STATE_BYKK_WALKSHOOT, STATE_PRIORITY_AUTO, true);
break;
}
break;
}
local timer = obj.getVar("WalkShoot_T").get_ct_vector(0);
if(timer){
local currentT = timer.Get();//得到时间
if(currentT >= obj.getVar("walkShootSet").getInt(0)){
obj.setSkillCommandEnable(SKILL_BYKK_WALKSHOOT,true);
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_WALKSHOOT);
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND) || b_useskill != -1){
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_WALKSHOOT);
if(loadSlot){
if(loadSlot.getRemainLoadNumber() > 0){
loadSlot.decreaseLoadCount(1);
timer.Reset();
timer.Start(10000,0);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_WALKSHOOT, -1, 0, 1.0) + 100;
local weaponSubType = obj.getVar("walkShootWeaponType").getInt(0);
if(sq_GetSkillLevel(obj, SKILL_BYKK_WALKSHOOTEX) > 0 && weaponSubType <= 1){
local offsetX = 50;
switch(weaponSubType){
case 0: offsetX = 50; break;
case 1: offsetX = 40; break;
case 2: offsetX = 70; break;
case 3: offsetX = 50; break;
}
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_WALKSHOOT, 15);
if(sizeRate <= 100) sizeRate = 100;
local isSilver = 0;
local loadSlot = obj.sq_GetSkillLoad(30);
if(loadSlot && loadSlot.getRemainLoadNumber() > 0){
loadSlot.decreaseLoadCount(1);
isSilver = 1;
obj.sq_PlaySound("R_SILVER_SHOT");
}
if(obj.getVar("walkShootSet").getInt(1) % 2 == 0) createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,0,90,obj.getDirection(),1,SKILL_BYKK_WALKSHOOT,2,totalDamage,weaponSubType,sizeRate,0,isSilver,0,0,0);
else createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX - 5,0,110,obj.getDirection(),1,SKILL_BYKK_WALKSHOOT,2,totalDamage,weaponSubType,sizeRate,0,isSilver,0,0,0);
}
else{
local subType = 1;
local effcetAniPath0 = "character/gunner/effect/animation/1_ranger/";
local effectAniPath = [["shooteffect/uppistol.ani", "shooteffect/downpistol.ani"],
["shooteffect/uppistol.ani", "shooteffect/downpistol.ani"],
["shooteffect/upmusket.ani", "shooteffect/downmusket.ani"],
["shooteffect/uphandcannon.ani", "shooteffect/downhandcannon.ani"],
["shooteffect/upbowgun.ani", "shooteffect/downbowgun.ani"]
];
local loadSlot = obj.sq_GetSkillLoad(30);
if(loadSlot && loadSlot.getRemainLoadNumber() > 0){
effectAniPath = [["silverbullet/uppistol.ani", "silverbullet/downpistol.ani"],
["silverbullet/uppistol.ani", "silverbullet/downpistol.ani"],
["silverbullet/upmusket.ani", "silverbullet/downmusket.ani"],
["silverbullet/uphandcannon.ani", "silverbullet/downhandcannon.ani"],
["silverbullet/upbowgun.ani", "silverbullet/downbowgun.ani"]];
loadSlot.decreaseLoadCount(1);
subType = 10;
obj.sq_PlaySound("R_SILVER_SHOT");
}
else{
switch(weaponSubType){
case 0: obj.sq_PlaySound("G_WREVOLVERA"); break;//左轮
case 1: obj.sq_PlaySound("G_SMALLGUNA"); break;//自动
case 2: obj.sq_PlaySound("G_MUSKETA"); break;//步枪
case 3: obj.sq_PlaySound("G_HCANNONA"); break;//手炮
case 4: obj.sq_PlaySound("G_BOWGUNA"); break;//手弩
}
}
switch(weaponSubType){
case 0:
if(obj.getVar("walkShootSet").getInt(1) % 2 == 0){
sq_AddDrawOnlyAniFromParent(obj, effcetAniPath0 + effectAniPath[weaponSubType][0], 53, 0, 90);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,63,0,90,obj.getDirection(),1,SKILL_BYKK_WALKSHOOT,subType,totalDamage,weaponSubType,0,0,0,0,0,0);
}
else{
sq_AddDrawOnlyAniFromParent(obj, effcetAniPath0 + effectAniPath[weaponSubType][0], 50, 0, 110);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,60,0,110,obj.getDirection(),1,SKILL_BYKK_WALKSHOOT,subType,totalDamage,weaponSubType,0,0,0,0,0,0);
}
break;
case 1:
if(obj.getVar("walkShootSet").getInt(1) % 2 == 0){
sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/walkshoot/shoot1.ani", 38, 0, 90);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,48,0,90,obj.getDirection(),1,SKILL_BYKK_WALKSHOOT,subType,totalDamage,weaponSubType,0,0,0,0,0,0);
}
else{
sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/walkshoot/shoot2.ani", 35, 0, 110);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,35,0,110,obj.getDirection(),1,SKILL_BYKK_WALKSHOOT,subType,totalDamage,weaponSubType,0,0,0,0,0,0);
}
break;
case 2:
if(obj.getVar("walkShootSet").getInt(1) % 2 == 0){
sq_AddDrawOnlyAniFromParent(obj, effcetAniPath0 + effectAniPath[weaponSubType][0], 52, 0, 90);
sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/musketdust/musketdustsmall1.ani", 20, 1, 90);
sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/musketdust/musketdustlarge.ani", -30, -1, 100);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,52,0,90,obj.getDirection(),1,SKILL_BYKK_WALKSHOOT,subType,totalDamage,weaponSubType,0,0,0,0,0,0);
}
else{
sq_AddDrawOnlyAniFromParent(obj, effcetAniPath0 + effectAniPath[weaponSubType][0], 52, 0, 110);
sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/musketdust/musketdustsmall1.ani", 20, 0, 100);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,52,0,110,obj.getDirection(),1,SKILL_BYKK_WALKSHOOT,subType,totalDamage,weaponSubType,0,0,0,0,0,0);
}
break;
case 3:
if(obj.getVar("walkShootSet").getInt(1) % 2 == 0){
sq_AddDrawOnlyAniFromParent(obj, effcetAniPath0 + effectAniPath[weaponSubType][0], 55, 0, 95);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,55,0,90,obj.getDirection(),1,SKILL_BYKK_WALKSHOOT,subType,totalDamage,weaponSubType,0,0,0,0,0,0);
}
else{
sq_AddDrawOnlyAniFromParent(obj, effcetAniPath0 + effectAniPath[weaponSubType][0], 55, 0, 115);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,55,0,110,obj.getDirection(),1,SKILL_BYKK_WALKSHOOT,subType,totalDamage,weaponSubType,0,0,0,0,0,0);
}
break;
case 4:
if(obj.getVar("walkShootSet").getInt(1) % 2 == 0) createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,71,0,90,obj.getDirection(),1,SKILL_BYKK_WALKSHOOT,subType,totalDamage,weaponSubType,0,0,0,0,0,0);
else createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,65,0,110,obj.getDirection(),1,SKILL_BYKK_WALKSHOOT,subType,totalDamage,weaponSubType,0,0,0,0,0,0);
break;
}
}
obj.getVar("walkShootSet").setInt(1, obj.getVar("walkShootSet").getInt(1) + 1);
}
}
local effectObj = obj.getVar("walkShootEffect").get_obj_vector(0);
if(effectObj){
local colObj = sq_GetCNRDObjectToCollisionObject(effectObj);
local subState = obj.getSkillSubState();
local state = colObj.getState();
local frameIndex = sq_GetCurrentFrameIndex(obj);
local currentAni = obj.getCurrentAnimation();
local speedRate = 12000.0 / currentAni.getDelaySum(0, 0).tofloat();
if(subState == 0 || subState == 3 || subState == 6) speedRate = 10000.0 / currentAni.getDelaySum(0, 0).tofloat();
colObj.getVar("custom").setInt(0, frameIndex);
colObj.getVar("custom").setFloat(10, speedRate);
sq_SetCurrentDirection(colObj, direction);
colObj.addSetStatePacket(20 + subState, null, STATE_PRIORITY_AUTO, false, "");
}
}
else{
local effectObj = obj.getVar("walkShootEffect").get_obj_vector(0);
if(effectObj){
local colObj = sq_GetCNRDObjectToCollisionObject(effectObj);
sq_SetCurrentDirection(colObj, direction);
if(colObj.getState() != 30) colObj.addSetStatePacket(30, null, STATE_PRIORITY_AUTO, false, "");
}
}
}
}
}
function onKeyFrameFlag_WalkShoot(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_WalkShoot(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_WalkShoot(obj, new_state)
{
if(!obj) return;
if(new_state >= 1 && new_state <= 9){
obj.sq_RemoveSkillLoad(SKILL_BYKK_WALKSHOOT);
if(!sq_GetSkill(obj, SKILL_BYKK_WALKSHOOT).isInCoolTime()) obj.startSkillCoolTime(SKILL_BYKK_WALKSHOOT, sq_GetSkillLevel(obj, SKILL_BYKK_WALKSHOOT), -1);
}
}
//音速劫击
function checkExecutableSkill_AirRaid(obj)
{
if (!obj) return false;
return false;
}
function checkCommandEnable_AirRaid(obj)
{
if (!obj) return false;
return true;
}
function onSetState_AirRaid(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
case 1:
if(subState == 0) obj.sq_SetCurrentAnimation(ATANI_BYKK_AIRRAID);
else obj.sq_SetCurrentAnimation(ATANI_BYKK_SONIC_CHAINENLIGHTEN_ATTACK1_BODY);
if(subState == 0) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_ranger/atairraid.ani"), 0, 0);
else obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_ranger/atairraid/atchainenlighten/chainenlighten_attack1_01.ani"), 0, 0);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.2, 1.2);
sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/1_ranger/atairraiddust.ani", -5, 0, 0);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AIRRAID, -1, 2, 1.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_AIRRAID));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(false);
print("delay = "+delay);
local hitMax = sq_GetIntData(obj, SKILL_BYKK_AIRRAID, 0);
obj.getVar("airRaid_move").setInt(0, sq_GetXPos(obj));
obj.getVar("airRaid_move").setInt(1, sq_GetZPos(obj));
if(subState == 0) obj.setTimeEvent(1, delay / 40, 35, true);
else obj.setTimeEvent(2, delay / 40, 35, true);
obj.setTimeEvent(0, delay / (hitMax + 1), hitMax, true);
obj.sq_PlaySound("FG_AIRRAID");
if(subState == 1){
obj.sq_PlaySound("FG_SONIC_SPIKE");
obj.sq_PlaySound("RG_FG_AIR_RAID_ENLIGHTEN_01");
}
break;
case 2:
obj.sq_SetCurrentAnimation(ATANI_BYKK_SONIC_CHAINENLIGHTEN_ATTACK2_BODY);
obj.sq_PlaySound("RG_FG_AIR_RAID_ENLIGHTEN_02");
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.2, 1.2);
break;
}
}
function onEndCurrentAni_AirRaid(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(200);
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true);
break;
case 1:
break;
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_AirRaid(obj)
{
if(!obj) return;
if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0 && sq_GetZPos(obj) <= 0) proc_atStylish_bykk(obj);
}
function onKeyFrameFlag_AirRaid(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 100:
local aniPath = "character/gunner/effect/animation/1_ranger/atairraid/atchainenlighten/chainenlighten_dust_front1_10.ani";
local direction = obj.getDirection(), xPos = sq_GetDistancePos(sq_GetXPos(obj), direction, -5), yPos = sq_GetYPos(obj);
createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,sq_GetOppositeDirection(direction),xPos,yPos,0,ENUM_DRAWLAYER_NORMAL);
break;
case 101: obj.sq_PlaySound("R_FG_AIR_RAID_ENLIGHTEN"); break;
case 102:
local isSilver = 0;
local loadSlot = obj.sq_GetSkillLoad(30);
if(loadSlot && loadSlot.getRemainLoadNumber() > 0){
loadSlot.decreaseLoadCount(1);
isSilver = 1;
obj.sq_PlaySound("R_SILVER_SHOT");
}
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAINENLIGHTEN);
local bonusRate = sq_GetLevelData(obj, SKILL_BYKK_CHAINENLIGHTEN, 1, skillLevel) * 1000 / (1000 + sq_GetLevelData(obj, SKILL_BYKK_CHAINENLIGHTEN, 0, skillLevel));
bonusRate = bonusRate.tofloat() / 1000.0;
// print("AirRaid-bonusRate = "+bonusRate);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AIRRAID, -1, 2, bonusRate) + 100;
// print("AirRaid-totalDamage = "+totalDamage);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),1,SKILL_BYKK_AIRRAID,1,totalDamage,isSilver,0,0,0,0,0,0);
break;
case 103:
if(obj.isMyControlObject()) sq_flashScreen(obj,20,70,120,60,sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
break;
case 104: sq_SetMyShake(obj, 6, 120); break;
case 105:
local aniPath = "character/gunner/effect/animation/1_ranger/atairraid/atchainenlighten/chainenlighten_dust_front2_01.ani";
local direction = obj.getDirection(), xPos = sq_GetDistancePos(sq_GetXPos(obj), direction, 370), yPos = sq_GetYPos(obj) - 25;
createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL);
break;
}
return true;
}
function onTimeEvent_AirRaid(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 0: obj.resetHitObjectList(); break;
case 1:
local vx = sq_GetAccel(0, 300, timeEventCount, 35, true);
local vz = sq_GetAccel(0, 100, timeEventCount, 35, true);
local dstX = sq_GetDistancePos(obj.getVar("airRaid_move").getInt(0), obj.getDirection(), vx);
sq_setCurrentAxisPos(obj, 0, dstX);
sq_setCurrentAxisPos(obj, 2, obj.getVar("airRaid_move").getInt(1) + vz);
break;
case 2:
local vx = sq_GetAccel(0, 300, timeEventCount, 35, true);
local dstX = sq_GetDistancePos(obj.getVar("airRaid_move").getInt(0), obj.getDirection(), vx);
sq_setCurrentAxisPos(obj, 0, dstX);
if(timeEventCount >= 35){
sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj)));
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(STATE_BYKK_AIRRAID, STATE_PRIORITY_AUTO, true);
}
break;
}
}
function onEndState_AirRaid(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_BYKK_AIRRAID){
sq_SimpleMoveToNearMovablePos(obj, 300);
}
}
//死亡左轮
function checkExecutableSkill_RevolverCriticalDamageUp(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_REVOLVERCRITICALDAMAGEUP);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_REVOLVERCRITICALDAMAGEUP, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_RevolverCriticalDamageUp(obj)
{
if (!obj) return false;
return true;
}
function onSetState_RevolverCriticalDamageUp(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_PlaySound("R_FG_DB_REVOLVER");
local Ani = obj.sq_GetThrowChargeAni(1);
obj.setCurrentAnimation(Ani);
local castTime = sq_GetCastTime(obj, SKILL_BYKK_REVOLVERCRITICALDAMAGEUP, sq_GetSkillLevel(obj, SKILL_BYKK_REVOLVERCRITICALDAMAGEUP));
sq_StartDrawCastGauge(obj, castTime, true);
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(false);
local speedRate = delaySum.tofloat() * 100.0 / castTime.tofloat();
currentAni.setSpeedRate(speedRate);
break;
case 1:
sq_EndDrawCastGauge(obj);
local Ani = obj.sq_GetThrowShootAni(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 skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_REVOLVERCRITICALDAMAGEUP);
local lifeTime = sq_GetLevelData(obj, SKILL_BYKK_REVOLVERCRITICALDAMAGEUP, 0, skillLevel);
local apdPath = "character/atgunner/1_ranger_bykk/ap_revolvercriticaldamageup.nut";
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath);
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_REVOLVERCRITICALDAMAGEUP, false, apdPath, true);
if(lifeTime > 0) AddAppendage.sq_SetValidTime(lifeTime);
AddAppendage.setBuffIconImage(35);
AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_REVOLVERCRITICALDAMAGEUP, skillLevel);
CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true);
AddAppendage.sq_DeleteEffectFront();
AddAppendage.sq_AddEffectFront("character/gunner/effect/animation/revolvercriticaldamageup/revolver_critical_damage_up1.ani");
AddAppendage.sq_AddEffectFront("character/gunner/effect/animation/revolvercriticaldamageup/revolver_critical_damage_up2.ani");
break;
}
}
function onEndCurrentAni_RevolverCriticalDamageUp(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_REVOLVERCRITICALDAMAGEUP, STATE_PRIORITY_AUTO, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_RevolverCriticalDamageUp(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_RevolverCriticalDamageUp(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_RevolverCriticalDamageUp(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_RevolverCriticalDamageUp(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_BYKK_REVOLVERCRITICALDAMAGEUP){
sq_EndDrawCastGauge(obj);
}
}