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); } }