//多重爆头 function checkExecutableSkill_MultiHeadShot(obj) { if (!obj) return false; if(obj.getWeaponSubType() == 3) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_MULTIHEADSHOT); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_MULTIHEADSHOT, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_MultiHeadShot(obj) { if (!obj) return false; if(obj.getWeaponSubType() == 3) return false; return true; } function onSetState_MultiHeadShot_bykk(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_MULTIHEADSHOTREADY); obj.sq_PlaySound("FG_MULTIHEAD_READY"); obj.getVar("MultiHeadShotSet").setInt(0, 2); obj.getVar("MultiHeadShotCount").setInt(0, 0); break; case 1: obj.sq_SetCurrentAnimation(ATANI_BYKK_MULTIHEADSHOTSHOOT1); break;//左 case 2: obj.sq_SetCurrentAnimation(ATANI_BYKK_MULTIHEADSHOTSHOOT2); break;//右 case 3: obj.sq_SetCurrentAnimation(ATANI_BYKK_MULTIHEADSHOTSHOOT3); break;//上 case 4: obj.sq_SetCurrentAnimation(ATANI_BYKK_MULTIHEADSHOTSHOOT4); break;//下 case 5: obj.sq_SetCurrentAnimation(ATANI_BYKK_MULTIHEADSHOTFINISH);obj.sq_PlaySound("FG_MULTIHEAD_FIN"); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 2.0, 2.0); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_MULTIHEADSHOT, -1, 0, 1.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_MULTIHEADSHOTEXKICK)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); // local rateDamager = sq_GetAttackInfoHitDelayRateDamager(attackInfo); local rateDamager = (obj.sq_GetBonusRateWithPassive(SKILL_BYKK_MULTIHEADSHOT, -1, 2, 1.0) + 100).tofloat() / 100.0; sq_SetAttackInfoHitDelayRateDamager(attackInfo, rateDamager); sq_SetCurrentAttacknUpForce(attackInfo, 10); local aniPath = "character/gunner/effect/animation/multiheadshot/shoot.ani"; local sizeRate = sq_GetIntData(obj, SKILL_BYKK_MULTIHEADSHOT, 1); local direction = sq_GetDirection(obj), yPos = sq_GetYPos(obj); switch(subState){ case 1: local offsetX = sq_GetDistancePos(sq_GetXPos(obj), direction, -80); local pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,direction,offsetX,yPos,90,ENUM_DRAWLAYER_NORMAL); sq_SetCustomRotate(pooledObj, sq_ToRadian(180.0)); createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,direction,1,SKILL_BYKK_MULTIHEADSHOT,1,subState,sizeRate,0,0,0,0,0,0); break;//左 case 2: local offsetX = sq_GetDistancePos(sq_GetXPos(obj), direction, 75); local pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,direction,offsetX,yPos,100,ENUM_DRAWLAYER_NORMAL); offsetX = sq_GetDistancePos(sq_GetXPos(obj), direction, 80); pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,direction,offsetX,yPos,80,ENUM_DRAWLAYER_NORMAL); createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,direction,1,SKILL_BYKK_MULTIHEADSHOT,1,subState,sizeRate,0,0,0,0,0,0); break;//右 case 3: local offsetX = sq_GetDistancePos(sq_GetXPos(obj), direction, -50); local pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,direction,offsetX,yPos,125,ENUM_DRAWLAYER_NORMAL); sq_SetCustomRotate(pooledObj, sq_ToRadian(155.0)); createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,direction,1,SKILL_BYKK_MULTIHEADSHOT,1,subState,sizeRate,0,0,0,0,0,0); break;//上 case 4: local offsetX = sq_GetDistancePos(sq_GetXPos(obj), direction, 42); local pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,direction,offsetX,yPos,48,ENUM_DRAWLAYER_NORMAL); sq_SetCustomRotate(pooledObj, sq_ToRadian(-45.0)); createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,direction,1,SKILL_BYKK_MULTIHEADSHOT,1,subState,sizeRate,0,0,0,0,0,0); break;//下 } } function onEndCurrentAni_MultiHeadShot(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: local sub = obj.getVar("MultiHeadShotSet").getInt(0); obj.sq_PlaySound("R_FG_MULTIHEAD"); obj.sq_IntVectClear(); obj.sq_IntVectPush(sub); obj.sq_AddSetStatePacket(STATE_BYKK_MULTIHEADSHOT, STATE_PRIORITY_AUTO, true); break; case 1: case 2: case 3: case 4: obj.getVar("MultiHeadShotCount").setInt(0, obj.getVar("MultiHeadShotCount").getInt(0) + 1); local sub = obj.getVar("MultiHeadShotSet").getInt(0); local count = obj.getVar("MultiHeadShotCount").getInt(0); local hitMax = sq_GetIntData(obj, SKILL_BYKK_MULTIHEADSHOT, 4); obj.sq_IntVectClear(); if(count >= hitMax) obj.sq_IntVectPush(5); else obj.sq_IntVectPush(sub); obj.sq_AddSetStatePacket(STATE_BYKK_MULTIHEADSHOT, STATE_PRIORITY_AUTO, true); break; case 5: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_MultiHeadShot(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: case 2: case 3: case 4: 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); break; } case 0: local direction = sq_GetDirection(obj); if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_LEFT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_RIGHT)){ obj.getVar("MultiHeadShotSet").setInt(0, 2); if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ obj.getVar("MultiHeadShotSet").setInt(0, 3); } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ obj.getVar("MultiHeadShotSet").setInt(0, 4); } } else if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_LEFT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_RIGHT)){ obj.getVar("MultiHeadShotSet").setInt(0, 1); if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ obj.getVar("MultiHeadShotSet").setInt(0, 3); } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ obj.getVar("MultiHeadShotSet").setInt(0, 4); } } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ obj.getVar("MultiHeadShotSet").setInt(0, 3); } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ obj.getVar("MultiHeadShotSet").setInt(0, 4); } break; } if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj); } function onKeyFrameFlag_MultiHeadShot(obj, flagIndex) { if(!obj) return false; // print("flagIndex = "+flagIndex); sq_SetMyShake(obj, 2, 120); local attackInfo = sq_GetCurrentAttackInfo(obj); local weaponSubType = obj.getWeaponSubType(); local loadSlot = obj.sq_GetSkillLoad(30); if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ loadSlot.decreaseLoadCount(1); attackInfo.setElement(ENUM_ELEMENT_LIGHT); local totalDamage = obj.sq_GetBonusRateWithPassive(30, -1, 1, 1.0) + 100; obj.getVar("MultiHeadShot").setInt(0, totalDamage); obj.sq_PlaySound("R_SILVER_SHOT"); } else{ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_MULTIHEADSHOT, -1, 0, 1.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_MULTIHEADSHOTEXKICK)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); 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;//手弩 } obj.getVar("MultiHeadShot").setInt(0, 0); } local range = sq_GetIntData(obj, SKILL_BYKK_MULTIHEADSHOT, 1) / 2; local subState = obj.getSkillSubState(); local direction = sq_GetDirection(obj); local minDegree = 0, maxDegree = 0; switch(flagIndex){ case 102: minDegree = 135; maxDegree = -135; break; case 202: minDegree = 45; maxDegree = -45; break; case 302: minDegree = -45; maxDegree = -135; break; case 402: minDegree = 45; maxDegree = 135; break; } local objectManager = obj.getObjectManager(); local objectNumber = objectManager.getCollisionObjectNumber(); for (local i = 0; i < objectNumber; i++){ local object = objectManager.getCollisionObject(i); if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj)){ local activeObj = sq_GetCNRDObjectToActiveObject(object); local disX = sq_GetXPos(activeObj) - sq_GetXPos(obj); local disY = sq_GetYPos(activeObj) - sq_GetYPos(obj); switch(subState){//1左2右3上4下 case 1: if(((direction == ENUM_DIRECTION_RIGHT && disX < 0) || (direction == ENUM_DIRECTION_LEFT && disX > 0)) && sq_Abs(disX) <= range && sq_Abs(disY) <= range / 2 && sq_Abs(disY) <= sq_Abs(disX) / 2) sq_SendHitObjectPacket(obj,activeObj,0,0,sq_GetObjectHeight(activeObj) / 2);//print("disX = "+disX+",disY = "+disY+",test1"); break; case 2: if(((direction == ENUM_DIRECTION_RIGHT && disX > 0) || (direction == ENUM_DIRECTION_LEFT && disX < 0)) && sq_Abs(disX) <= range && sq_Abs(disY) <= range / 2 && sq_Abs(disY) <= sq_Abs(disX) / 2) sq_SendHitObjectPacket(obj,activeObj,0,0,sq_GetObjectHeight(activeObj) / 2);//print("disX = "+disX+",disY = "+disY+",test2"); break; case 3: if(disY < 0 && sq_Abs(disX) <= range && sq_Abs(disY) <= range / 2 && sq_Abs(disX) <= sq_Abs(disY) * 2) sq_SendHitObjectPacket(obj,activeObj,0,0,sq_GetObjectHeight(activeObj) / 2);//print("test3"); break; case 4: if(disY > 0 && sq_Abs(disX) <= range && sq_Abs(disY) <= range / 2 && sq_Abs(disX) <= sq_Abs(disY) * 2) sq_SendHitObjectPacket(obj,activeObj,0,0,sq_GetObjectHeight(activeObj) / 2);//print("test4"); break; } local isSilver = obj.getVar("MultiHeadShot").getInt(0); if(isSilver > 0){ local group = sq_GetGroup(activeObj); local uniqueId = sq_GetUniqueId(activeObj); createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_HEADSHOT,3,isSilver,group,uniqueId,0,0,0,0,0); } } } return true; } function onTimeEvent_MultiHeadShot(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_MultiHeadShot(obj, new_state) { if(!obj) return; } function onAttack_MultiHeadShot(obj, damager, boundingBox, isStuck) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: case 2: case 3: case 4: if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ local aniPath = "character/gunner/effect/animation/headshotmonsterdown.ani"; createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(damager),sq_GetYPos(damager),sq_GetCenterZPos(boundingBox),ENUM_DRAWLAYER_NORMAL); } break; } } //双鹰回旋 function checkExecutableSkill_DoubleGunhawk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DOUBLEGUNHAWK); if (isUse){ obj.getVar("DoubleGunhawk_Phase").setInt(0, 1); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_DOUBLEGUNHAWK, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_DoubleGunhawk(obj) { if (!obj) return false; return true; } function onSetState_DoubleGunhawk(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.removeAllTimeEvent(); obj.sq_SetCurrentAnimation(ATANI_BYKK_DOUBLEGUNHAWKTHROW); switch(obj.getVar("DoubleGunhawk_Phase").getInt(0)){ case 1: obj.sq_PlaySound("FG_DGUNHAWK_FIRST"); break; case 2: obj.sq_PlaySound("FG_DGUNHAWK_SEC"); break; case 3: obj.sq_PlaySound("FG_DGUNHAWK_THIRD"); break; } if(sq_GetSkillLevel(obj, SKILL_BYKK_SAWBLADE) > 0){ switch(obj.getVar("DoubleGunhawk_Phase").getInt(0)){ case 1: obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/gunhawk1.ani"), 0, 0); break; case 2: obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/gunhawk1.ani"), 0, 0); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/gunhawk2.ani"), 0, 0); break; case 3: obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/gunhawk1.ani"), 0, 0); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/gunhawk2.ani"), 0, 0); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/gunhawk3.ani"), 0, 0); break; } } sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/doublegunhawk/throw.ani", 0, 0, -35); break; case 1: obj.sq_SetCurrentAnimation(ATANI_BYKK_DOUBLEGUNHAWKCATCH); obj.getVar("DoubleGunhawk_Bool").setBool(0, true); if(obj.isMyControlObject()) sq_flashScreen(obj,80,30,50,205, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); obj.setTimeEvent(1, 80, 1, false); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_DoubleGunhawk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_DoubleGunhawk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: if(obj.getVar("DoubleGunhawk_Bool").getBool(0)){ if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT ||sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT){ obj.getVar("DoubleGunhawk_Bool").setBool(0, false); sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); } } obj.setSkillCommandEnable(SKILL_BYKK_DOUBLEGUNHAWK, true); sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_DOUBLEGUNHAWK); if(b_useskill != -1 || sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_DOUBLEGUNHAWK, STATE_PRIORITY_IGNORE_FORCE, true); break; } break; } if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj); } function onKeyFrameFlag_DoubleGunhawk(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 101: obj.sq_PlaySound("GUNHAWK_SHOT"); obj.sq_PlaySound("GUNHAWK_GUN"); local phase = obj.getVar("DoubleGunhawk_Phase").getInt(0); local isSaw = 0; if(sq_GetSkillLevel(obj, SKILL_BYKK_SAWBLADE) > 0){ isSaw = 1; switch(phase){ case 1: obj.sq_PlaySound("CHAIN_POWDER_DGUNHAWK_01");obj.sq_PlaySound("GUNHAWK_12"); break; case 2: obj.sq_PlaySound("CHAIN_POWDER_DGUNHAWK_02");obj.sq_PlaySound("GUNHAWK_12"); break; case 3: obj.sq_PlaySound("CHAIN_POWDER_DGUNHAWK_03");obj.sq_PlaySound("GUNHAWK_3"); break; } } local sub = 0; if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) sub = 1; else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) sub = 2; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DOUBLEGUNHAWK, -1, 0, 1.0) + 100; if(phase == 1){totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DOUBLEGUNHAWK, -1, 1, 1.0) + 100;} else if(phase == 2){totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DOUBLEGUNHAWK, -1, 2, 1.0) + 100;} local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DOUBLEGUNHAWK, -1, 4, 1.0) + 100; createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,70,10,105,sq_GetDirection(obj),1,SKILL_BYKK_DOUBLEGUNHAWK,1,totalDamage,sizeRate,sub,isSaw,phase,0,0,0); createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,70,-10,85,sq_GetDirection(obj),1,SKILL_BYKK_DOUBLEGUNHAWK,1,totalDamage,sizeRate,sub,isSaw,phase,1,0,0); break; } return true; } function onTimeEvent_DoubleGunhawk(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: obj.getVar("move").setInt(0, sq_GetXPos(obj)); obj.setTimeEvent(2, 10, 10, true); sq_SetMyShake(obj, 10, 100); break; case 2: local v = sq_GetAccel(0, 10, timeEventCount, 10, true); local dstX = sq_GetDistancePos(obj.getVar("move").getInt(0), obj.getDirection(), -v); sq_setCurrentAxisPos(obj, 0, dstX); break; } } function onEndState_DoubleGunhawk(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_DOUBLEGUNHAWK){ sq_SimpleMoveToNearMovablePos(obj,200); } } //血腥狂欢 function checkExecutableSkill_BloodyCarnival(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BLOODYCARNIVAL); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_BLOODYCARNIVAL, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_BloodyCarnival(obj) { if (!obj) return false; return true; } function onSetState_BloodyCarnival(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(91); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishstart1.ani"), 0, 0); obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishstart2.ani"), 0, 0); 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_BLOODYCARNIVAL); local minCount = sq_GetLevelData(obj, SKILL_BYKK_BLOODYCARNIVAL, 3, skillLevel); local maxCount = sq_GetLevelData(obj, SKILL_BYKK_BLOODYCARNIVAL, 4, skillLevel); local hitMax = sq_GetLevelData(obj, SKILL_BYKK_BLOODYCARNIVAL, 5, skillLevel); obj.getVar("BloodyCarnival").setInt(0, minCount); obj.getVar("BloodyCarnival").setInt(1, maxCount); obj.getVar("BloodyCarnival").setInt(2, hitMax); obj.getVar("BloodyCarnival").setInt(3, 0); obj.getVar("BloodyCarnival").setInt(4, sq_GetXPos(obj)); obj.getVar("BloodyCarnival_Bool").setBool(0, true); obj.getVar("BloodyCarnival_Bool").setBool(1, false); if(sq_GetSkillLevel(obj, SKILL_BYKK_BLOODYCARNIVAL) >= 9) sq_SendMessage(obj, 0, 1, 0); break; case 1: obj.sq_SetCurrentAnimation(92); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishrapid1.ani"), 0, 0); obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishrapid2.ani"), 0, 0); obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishrapid3.ani"), 0, 0); obj.sq_AddStateLayerAnimation(4,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishrapid4.ani"), 0, 0); obj.sq_AddStateLayerAnimation(5,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishrapid5.ani"), 0, 0); obj.sq_AddStateLayerAnimation(6,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishrapideffect1.ani"), 100, -150); obj.sq_AddStateLayerAnimation(7,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishrapideffect2.ani"), 100, -150); obj.sq_AddStateLayerAnimation(8,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishrapideffect3.ani"), 100, -150); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local bonusRate = 1.0; if(sq_GetSkillLevel(obj, SKILL_BYKK_BLOODYCARNIVAL) >= 3) bonusRate = bonusRate + 0.1; if(sq_GetSkillLevel(obj, SKILL_BYKK_BLOODYCARNIVAL) >= 9) bonusRate = bonusRate + 0.1; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLOODYCARNIVAL, -1, 0, bonusRate); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_TWINGUNBLADEFINISHRAPID)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(false); obj.setTimeEvent(0, delay / (obj.getVar("BloodyCarnival").getInt(2) + 1), obj.getVar("BloodyCarnival").getInt(2), true); sq_SetMyShake(obj, 1, delay); break; case 2: obj.sq_SetCurrentAnimation(93); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishfinal1.ani"), 0, 0); obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishfinal2.ani"), 0, 0); obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishfinal3.ani"), 0, 0); obj.sq_AddStateLayerAnimation(4,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishfinal4.ani"), 0, 0); obj.sq_AddStateLayerAnimation(5,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishfinal5.ani"), 0, 0); local currentAni = obj.getCurrentAnimation(); sq_SetFrameDelayTime(currentAni, 6, 20); sq_SetFrameDelayTime(currentAni, 7, 20); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); sq_flashScreen(obj,20,150,120,150, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); local bonusRate = 1.0; if(sq_GetSkillLevel(obj, SKILL_BYKK_BLOODYCARNIVAL) >= 6) bonusRate = bonusRate + 0.1; if(sq_GetSkillLevel(obj, SKILL_BYKK_BLOODYCARNIVAL) >= 9) bonusRate = bonusRate + 0.1; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLOODYCARNIVAL, -1, 1, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_TWINGUNBLADEFINISHFINAL)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(0, 0); obj.setTimeEvent(1, delay, 1, false); obj.stopSound(2000); obj.stopSound(2001); obj.sq_PlaySound("FG_TWINGUN_SWORD_FIN"); break; } } function onEndCurrentAni_BloodyCarnival(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_PlaySound("R_FG_TWINGUN_SWORD", 2000); obj.sq_PlaySound("TWINGUN_SWORD", 2001); obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_BLOODYCARNIVAL, STATE_PRIORITY_AUTO, true); break; case 1: if(obj.getRapidInputFrequency() > 0){ if(obj.getVar("BloodyCarnival").getInt(3) + 1 >= obj.getVar("BloodyCarnival").getInt(2)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(STATE_BYKK_BLOODYCARNIVAL, STATE_PRIORITY_AUTO, true); break; } else{ obj.getVar("BloodyCarnival").setInt(3, obj.getVar("BloodyCarnival").getInt(3) + 1); obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_BLOODYCARNIVAL, STATE_PRIORITY_AUTO, true); break; } } else{ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(STATE_BYKK_BLOODYCARNIVAL, STATE_PRIORITY_AUTO, true); break; } break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_BloodyCarnival(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: if(obj.getVar("BloodyCarnival_Bool").getBool(0)){ if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT){ obj.getVar("BloodyCarnival_Bool").setBool(0, false); obj.getVar("BloodyCarnival_Bool").setBool(1, true); } } sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); break; } if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj); } function onKeyFrameFlag_BloodyCarnival(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 301: local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(1, 2); obj.getVar("BloodyCarnival").setInt(4, sq_GetXPos(obj)); obj.setTimeEvent(1, delay / 10, 10, true); break; } return true; } function onTimeEvent_BloodyCarnival(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: obj.resetHitObjectList(); break; case 1: sq_SetMyShake(obj, 10, 300); local aniPath = "character/gunner/effect/animation/attwingunblade/finishfinaleffect.ani"; local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj); createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath,true,direction,xPos,yPos,75,ENUM_DRAWLAYER_COVER,130,130); createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath,true,direction,xPos,yPos,75,ENUM_DRAWLAYER_COVER,-130,130); createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath,true,direction,xPos,yPos,75,ENUM_DRAWLAYER_COVER,130,-130); createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath,true,direction,xPos,yPos,75,ENUM_DRAWLAYER_COVER,-130,-130); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(1, 3); obj.setTimeEvent(2, delay / 10, 10, true); break; case 2: local MoveX = 50; if(obj.getVar("BloodyCarnival_Bool").getBool(1)) MoveX = 150; local v = sq_GetAccel(0, MoveX, timeEventCount, 10, true); local dstX = sq_GetDistancePos(obj.getVar("BloodyCarnival").getInt(4), obj.getDirection(), v); if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); break; } } function onEndState_BloodyCarnival(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_BLOODYCARNIVAL){ sq_SendMessage(obj, 0, 0, 0); } } //鲜血劫击 function checkExecutableSkill_AirRaidEx(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_AIRRAIDEX); if (isUse){ 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 true; } return false; } function checkCommandEnable_AirRaidEx(obj) { if (!obj) return false; return true; } function onSetState_AirRaidEx(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); obj.sq_ZStop(); switch(subState){ case 0: obj.sq_SetCurrentAnimation(ATANI_BYKK_BLOODYSPIKEUP); break;//225 100 case 1: obj.sq_SetCurrentAnimation(ATANI_BYKK_BLOODYSPIKEDOWN); break; case 10: obj.sq_SetCurrentAnimation(ATANI_BYKK_BLOODYSPIKEBACKSTEP_TALISMAN);obj.sq_PlaySound("R_FG_SONIC_SPIKE"); break; case 11: obj.sq_SetCurrentAnimation(ATANI_BYKK_BLOODYSPIKEDOWN_TALISMAN); break; case 12: obj.sq_SetCurrentAnimation(ATANI_BYKK_BLOODYSPIKELANDING_TALISMAN); break; } local speed = 1.0; if(subState >= 10) speed = 1.5; obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); switch(subState){ case 0: obj.getVar("AirRaidEx_Bool").setBool(0, false); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(false); obj.getVar("airRaidEx_move").setInt(0, sq_GetXPos(obj)); obj.getVar("airRaidEx_move").setInt(1, sq_GetZPos(obj)); obj.setTimeEvent(1, delay / 50, 35, true); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AIRRAIDEX, -1, 2, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_AIRRAIDEX)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 1: local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(0, 7); obj.getVar("airRaidEx_move").setInt(1, sq_GetZPos(obj)); obj.setTimeEvent(2, delay / 50, 35, true); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AIRRAIDEX, -1, 12, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_ATAIRRAID)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 10: local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(false); obj.getVar("airRaidEx_move").setInt(0, sq_GetXPos(obj)); obj.getVar("airRaidEx_move").setInt(1, sq_GetZPos(obj)); obj.setTimeEvent(3, delay / 20, 20, true); obj.sq_SetXScroll(0, delay, 0, 0); break; case 11: local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(false); obj.getVar("airRaidEx_move").setInt(0, sq_GetXPos(obj)); obj.getVar("airRaidEx_move").setInt(1, sq_GetZPos(obj)); obj.setTimeEvent(4, delay / 35, 35, true); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AIRRAIDEX, -1, 2, 2.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_ATAIRRAID)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; } } function onEndCurrentAni_AirRaidEx(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(obj.getVar("AirRaidEx_Bool").getBool(0)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(STATE_BYKK_AIRRAIDEX, STATE_PRIORITY_AUTO, true); break; } sq_SimpleMoveToNearMovablePos(obj, 225); 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 10: case 11: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(STATE_BYKK_AIRRAIDEX, STATE_PRIORITY_AUTO, true); break; case 1: case 12: sq_SimpleMoveToNearMovablePos(obj, 225); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_AirRaidEx(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(obj.getVar("AirRaidEx_Bool").getBool(0)) break; obj.setSkillCommandEnable(SKILL_BYKK_AIRRAIDEX, true); sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_AIRRAIDEX); if(b_useskill != -1 || sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){ obj.getVar("AirRaidEx_Bool").setBool(0, true); } break; } if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0 && sq_GetZPos(obj) <= 0) proc_atStylish_bykk(obj); } function onKeyFrameFlag_AirRaidEx(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_AirRaidEx(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: local vx = sq_GetAccel(0, 225, timeEventCount, 35, true); local vz = sq_GetAccel(0, 100, timeEventCount, 35, true); local dstX = sq_GetDistancePos(obj.getVar("airRaidEx_move").getInt(0), obj.getDirection(), vx); sq_setCurrentAxisPos(obj, 0, dstX); sq_setCurrentAxisPos(obj, 2, obj.getVar("airRaidEx_move").getInt(1) + vz); break; case 2: local vz = sq_GetAccel(obj.getVar("airRaidEx_move").getInt(1), 0, timeEventCount, 35, false); sq_setCurrentAxisPos(obj, 2, vz); break; case 3: local vx = sq_GetUniformVelocity(0, -75, timeEventCount, 15); local vz = sq_GetUniformVelocity(0, 100, timeEventCount, 15); local dstX = sq_GetDistancePos(obj.getVar("airRaidEx_move").getInt(0), obj.getDirection(), vx); sq_setCurrentAxisPos(obj, 0, dstX); sq_setCurrentAxisPos(obj, 2, obj.getVar("airRaidEx_move").getInt(1) + vz); break; case 4: local vx = sq_GetUniformVelocity(0, 75 + 100, timeEventCount, 30); local vz = sq_GetUniformVelocity(obj.getVar("airRaidEx_move").getInt(1), 0, timeEventCount, 30); local dstX = sq_GetDistancePos(obj.getVar("airRaidEx_move").getInt(0), obj.getDirection(), vx); sq_setCurrentAxisPos(obj, 0, dstX); sq_setCurrentAxisPos(obj, 2, vz); break; } } function onEndState_AirRaidEx(obj, new_state) { if(!obj) return; } //压制射击 function checkExecutableSkill_SuppressingFire(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SUPPRESSINGFIRE); if (isUse){ obj.getVar("SuppressingFireTar").clear_obj_vector(); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_SUPPRESSINGFIRE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_SuppressingFire(obj) { if (!obj) return false; return true; } function onSetState_SuppressingFire(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_ATSUPPRESSINGFIRE_START_BODY);obj.sq_PlaySound("R_FG_SPGUN"); break; case 1: obj.sq_SetCurrentAnimation(ATANI_BYKK_ATSUPPRESSINGFIRE_LOOP_BODY); break; case 2: obj.sq_SetCurrentAnimation(ATANI_BYKK_ATSUPPRESSINGFIRE_FINISH_BODY); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(subState == 0){ local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 0); obj.getVar("SuppressingFireSet").setInt(0, speedRate); } else if(subState == 1){ local sizeRate = sq_GetIntData(obj, SKILL_BYKK_SUPPRESSINGFIRE, 7); local hitTime_min = sq_GetIntData(obj, SKILL_BYKK_SUPPRESSINGFIRE, 2) * 100 / obj.getVar("SuppressingFireSet").getInt(0); local hitTime_max = sq_GetIntData(obj, SKILL_BYKK_SUPPRESSINGFIRE, 3) * 100 / obj.getVar("SuppressingFireSet").getInt(0); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SUPPRESSINGFIRE, -1, 0, 1.0) + 100; local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 0); local istalisman = 0; if(sq_GetIntData(obj, SKILL_BYKK_SUPPRESSINGFIRE, 14) > 0){ istalisman = 1; local damage = totalDamage * 37 / 100; local hitMax = 10; sizeRate = sizeRate * 130 / 100; createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_SUPPRESSINGFIRE,3,totalDamage,sizeRate,hitTime_min,hitTime_max,speedRate,hitMax,0,0); local appendage = sq_AttractToMe(obj, 250, 350 * speedRate / 100, 100); obj.getVar("SuppressingFire").setAppendage(0,appendage); } print("totalDamage = "+totalDamage); createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_SUPPRESSINGFIRE,1,totalDamage,sizeRate,hitTime_min,hitTime_max,speedRate,0,0,0); } else if(subState == 2){ local speedRate = obj.getVar("SuppressingFireSet").getInt(0); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_SUPPRESSINGFIRE, 7); local aniPath = ["character/gunner/effect/animation/1_ranger/atsuppressingfire/03_finish/front/suppressingfire_finish_front.ani", "character/gunner/effect/animation/1_ranger/atsuppressingfire/03_finish/back/suppressingfire_finish_back.ani", "character/gunner/effect/animation/1_ranger/atsuppressingfire/03_finish/dust/suppressingfire_finish_dust01.ani"]; local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj) + 1, zPos = -30; if(sizeRate > 100) zPos = 100 - sizeRate * 120 / 100; local pooledObj1 = createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath[0],true,direction,xPos,yPos,zPos,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); local pooledObj2 = createOnlyDrawObject_ATGunner_bykk(obj,aniPath[1],true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL); local pooledObj3 = createOnlyDrawObject_ATGunner_bykk(obj,aniPath[2],true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL); local pooledObj = [pooledObj1,pooledObj2,pooledObj3]; for(local i = 0; i < 3; i++){ local pAni = pooledObj[i].getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); } } } function onEndCurrentAni_SuppressingFire(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_SUPPRESSINGFIRE, STATE_PRIORITY_AUTO, true); break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_SuppressingFire(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: local stateTime = obj.sq_GetStateTimer(); local lifeTime = sq_GetIntData(obj, SKILL_BYKK_SUPPRESSINGFIRE, 1) * 100 / obj.getVar("SuppressingFireSet").getInt(0); if(stateTime >= lifeTime){ print("stateTime = "+stateTime+",,lifeTime = "+lifeTime); obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(STATE_BYKK_SUPPRESSINGFIRE, STATE_PRIORITY_AUTO, true); } 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); break; } obj.setSkillCommandEnable(SKILL_BYKK_SUPPRESSINGFIRE, true); local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_SUPPRESSINGFIRE); sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND) || b_useskill != -1) obj.addRapidInput(); break; } if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj); } function onKeyFrameFlag_SuppressingFire(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 101: sq_SetMyShake(obj, 5, 200); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SUPPRESSINGFIRE, -1, 1, 1.0) + 100; local sizeRate = sq_GetIntData(obj, SKILL_BYKK_SUPPRESSINGFIRE, 7); if(sq_GetIntData(obj, SKILL_BYKK_SUPPRESSINGFIRE, 14) > 0){ sizeRate = sizeRate * 130 / 100; totalDamage = totalDamage * 130 / 100; } createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_SUPPRESSINGFIRE,2,totalDamage,sizeRate,0,0,0,0,0,0); } return true; } function onTimeEvent_SuppressingFire(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_SuppressingFire(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_SUPPRESSINGFIRE){ local appendage = obj.getVar("SuppressingFire").getAppendage(0); if(appendage) appendage.setValid(false); } } //死亡锁链 function checkExecutableSkill_KillPoint(obj) { if (!obj) return false; if(obj.getVar("KillPoint_Bool").getBool(0)){ obj.getVar("KillPoint_Bool").setBool(0, false); obj.sq_IntVectClear(); if(obj.getWeaponSubType() == 0) obj.sq_IntVectPush(2); else obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_KILLPOINT, STATE_PRIORITY_IGNORE_FORCE, true); return false; } local isUse = obj.sq_IsUseSkill(SKILL_BYKK_KILLPOINT); if (isUse){ 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 true; } return false; } function checkCommandEnable_KillPoint(obj) { if (!obj) return false; return true; } function onSetState_KillPoint(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_KILLPOINTREADY_BODY); obj.getVar("KillPoint_Bool").setBool(0, false); obj.sq_PlaySound("FG_KILL_POINT_01"); obj.sq_PlaySound("KILL_POINT_BLADE_THROW"); break; case 1: obj.sq_SetCurrentAnimation(ATANI_BYKK_KILLPOINTFINISHE_BODY);obj.sq_PlaySound("FG_KILL_POINT_03"); break; case 2: obj.sq_SetCurrentAnimation(ATANI_BYKK_KILLPOINTFINISHD_BODY);obj.sq_PlaySound("FG_KILL_POINT_03"); break; case 10: local weaponSubType = obj.getWeaponSubType(); if(weaponSubType == 0) obj.sq_SetCurrentAnimation(ATANI_BYKK_KILLPOINTTALISMANREADY_REVOLER_BODY); else obj.sq_SetCurrentAnimation(ATANI_BYKK_KILLPOINTTALISMANREADY_NON_REVOLER_BODY); break; case 11: obj.sq_SetCurrentAnimation(ATANI_BYKK_KILLPOINTTALISMANFINISH_BODY); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(subState == 0 || subState == 10){ obj.getVar("KillPointTar_boss").clear_obj_vector(); obj.getVar("KillPointTar_named").clear_obj_vector(); obj.getVar("KillPointTar_normal").clear_obj_vector(); obj.getVar("KillPointTar").clear_obj_vector(); obj.getVar("KillPointTar_Shoot").clear_obj_vector(); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_KILLPOINT, 14); local rangeX = 400 * sizeRate / 100, rangeY = 150 * sizeRate / 100; local objectManager = obj.getObjectManager();//得到對象管理器 for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ local object = objectManager.getCollisionObject(i);//得到控制類對象 if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj) && IsFrontOf(obj,object) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) <= rangeX && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= rangeY){ local activeObj = sq_GetCNRDObjectToActiveObject(object); if(sq_IsBoss(activeObj)){ obj.getVar("KillPointTar_boss").push_obj_vector(activeObj); continue; } else if(sq_IsNamed(activeObj)){ obj.getVar("KillPointTar_named").push_obj_vector(activeObj); continue; } else{ obj.getVar("KillPointTar_normal").push_obj_vector(activeObj); continue; } } } local bossSize = obj.getVar("KillPointTar_boss").get_obj_vector_size(); local namedSize = obj.getVar("KillPointTar_named").get_obj_vector_size(); local normalSize = obj.getVar("KillPointTar_normal").get_obj_vector_size(); if(bossSize > 0){ for(local i = 0; i < bossSize; i++){ local targetObj = obj.getVar("KillPointTar_boss").get_obj_vector(i); if(targetObj) obj.getVar("KillPointTar").push_obj_vector(targetObj); } } if(namedSize > 0){ for(local i = 0; i < namedSize; i++){ local targetObj = obj.getVar("KillPointTar_named").get_obj_vector(i); if(targetObj) obj.getVar("KillPointTar").push_obj_vector(targetObj); } } if(normalSize > 0){ for(local i = 0; i < normalSize; i++){ local targetObj = obj.getVar("KillPointTar_normal").get_obj_vector(i); if(targetObj) obj.getVar("KillPointTar").push_obj_vector(targetObj); } } } else{ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_KILLPOINT, -1, 7, 1.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_KILLPOINTFINISH)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); if(subState < 10) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_ranger/atkillpoint/finish/killpointfinishd_bullet_c.ani"), 0, 0); else obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_ranger/atkillpoint/talisman/killpointtalismanfinish_bullet_c.ani"), 0, 0); } } function onEndCurrentAni_KillPoint(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 10: obj.sq_IntVectClear(); obj.sq_IntVectPush(11); obj.sq_AddSetStatePacket(STATE_BYKK_KILLPOINT, STATE_PRIORITY_AUTO, true); break; case 0: case 1: case 2: case 11: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_KillPoint(obj) { if(!obj) return; if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj); } function onKeyFrameFlag_KillPoint(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 106: case 1011: //`throw chain` 49 0 83 local createMax = sq_GetIntData(obj, SKILL_BYKK_KILLPOINT, 1); local holdTime = sq_GetIntData(obj, SKILL_BYKK_KILLPOINT, 2); local direction = sq_GetDirection(obj); local size = obj.getVar("KillPointTar").get_obj_vector_size(); if(size < createMax) createMax = size; for(local i = 0; i < createMax; i++){ local targetObj = obj.getVar("KillPointTar").get_obj_vector(i); if(targetObj && targetObj.getState() != STATE_DIE){ local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); obj.getVar("KillPointTar_Shoot").push_obj_vector(activeObj); local group = sq_GetGroup(activeObj); local uniqueId = sq_GetUniqueId(activeObj); createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,49,0,83,direction,1,SKILL_BYKK_KILLPOINT,1,group,uniqueId,holdTime,0,0,0,0,0); } } break; case 205: case 2000: //`attack` local createMax = sq_GetIntData(obj, SKILL_BYKK_KILLPOINT, 1); local size = obj.getVar("KillPointTar").get_obj_vector_size(); if(size < createMax) createMax = size; for(local i = 0; i < createMax; i++){ local targetObj = obj.getVar("KillPointTar").get_obj_vector(i); if(targetObj && targetObj.getState() != STATE_DIE){ sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); sq_AddDrawOnlyAniFromParent(targetObj, "character/gunner/effect/animation/1_ranger/atkillpoint/hiteffect/hiteffect_1.ani", 0, 0, sq_GetObjectHeight(targetObj) / 2); } } break; case 224: //`finish Last Attack` local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_KILLPOINT, -1, 8, 1.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_KILLPOINTFINISHLASTSHOT)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); //`release Finish hold` local apdPath = "character/atgunner/1_ranger_bykk/ap_killpoint.nut"; local createMax = sq_GetIntData(obj, SKILL_BYKK_KILLPOINT, 1); local size = obj.getVar("KillPointTar").get_obj_vector_size(); if(size < createMax) createMax = size; for(local i = 0; i < createMax; i++){ local targetObj = obj.getVar("KillPointTar").get_obj_vector(i); if(targetObj && targetObj.getState() != STATE_DIE){ sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); CNSquirrelAppendage.sq_RemoveAppendage(targetObj, apdPath); } } break; case 1000: obj.sq_PlaySound("FG_KILL_POINT_02"); obj.sq_PlaySound("KILL_POINT_BULLET"); break; case 1005: obj.sq_PlaySound("FG_KILL_POINT_01"); obj.sq_PlaySound("KILL_POINT_BLADE_THROW"); break; case 2021: //`finish Last Attack` local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_KILLPOINT, -1, 8, 1.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_KILLPOINTFINISHLASTSHOT)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); //`release Finish hold` local createMax = sq_GetIntData(obj, SKILL_BYKK_KILLPOINT, 1); local size = obj.getVar("KillPointTar").get_obj_vector_size(); if(size < createMax) createMax = size; for(local i = 0; i < createMax; i++){ local targetObj = obj.getVar("KillPointTar").get_obj_vector(i); if(targetObj && targetObj.getState() != STATE_DIE){ sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); } } break; } return true; } function onTimeEvent_KillPoint(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_KillPoint(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_KILLPOINT){ if(obj.getSkillSubState() >= 10) obj.getVar("KillPoint_Bool").setBool(0, false); } } //锁链切割 function checkExecutableSkill_ChainDevider(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CHAINDEVIDER); if (isUse){ 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 true; } return false; } function checkCommandEnable_ChainDevider(obj) { if (!obj) return false; return true; } function onSetState_ChainDevider(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); local attackIndex = 0; switch(subState){ case 0: obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINDEVIDER01_BODY);attackIndex = ATATK_BYKK_CHAINDEVIDER1; break; case 1: obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINDEVIDER02_BODY);attackIndex = ATATK_BYKK_CHAINDEVIDER2; break; case 2: obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINDEVIDER03_BODY);attackIndex = ATATK_BYKK_CHAINDEVIDER3; break; case 10: obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINDEVIDER01_BODY);attackIndex = ATATK_BYKK_CHAINDEVIDERTALISMAN1; break; case 11: obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINDEVIDER02_BODY);attackIndex = ATATK_BYKK_CHAINDEVIDERTALISMAN2; break; case 12: obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINDEVIDER03_BODY);attackIndex = ATATK_BYKK_CHAINDEVIDERTALISMAN3; break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local bonus = subState; if(subState >= 10) bonus = subState - 10; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CHAINDEVIDER, -1, bonus, 1.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); } function onEndCurrentAni_ChainDevider(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: case 10: case 11: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(STATE_BYKK_CHAINDEVIDER, STATE_PRIORITY_AUTO, true); break; case 2: case 12: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_ChainDevider(obj) { if(!obj) return; if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj); } function onKeyFrameFlag_ChainDevider(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 101: obj.sq_PlaySound("CHAINDEVIDER_03"); obj.sq_PlaySound("FG_TWINGUN_SWORD_03"); sq_flashScreen(obj,0,0,400,178, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 6, 100); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(2, 8); obj.setTimeEvent(1, delay / 10, 10, true); break; } return true; } function onTimeEvent_ChainDevider(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: local size = obj.getVar("ChainDeviderTar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("ChainDeviderTar").get_obj_vector(i); if(targetObj && targetObj.getState() != STATE_DIE){ local baseY = sq_GetYPos(obj), tarY = sq_GetYPos(targetObj); if(baseY < tarY) sq_setCurrentAxisPos(targetObj, 1, tarY - sq_Abs(baseY - tarY) / 10 - 1); else sq_setCurrentAxisPos(targetObj, 1, tarY + sq_Abs(baseY - tarY) / 10 + 1); } } } break; } } function onEndState_ChainDevider(obj, new_state) { if(!obj) return; } function onAttack_ChainDevider(obj, damager, boundingBox, isStuck) { if(!obj) return; local subState = obj.getSkillSubState(); if(subState >= 10){ if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ if(!obj.getVar("ChainDeviderTar").is_obj_vector(damager)) obj.getVar("ChainDeviderTar").push_obj_vector(damager); } } } //血舞祭 function checkExecutableSkill_BloodnChain(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BLOODNCHAIN); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_BLOODNCHAIN, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_BloodnChain(obj) { if (!obj) return false; return true; } function onSetState_BloodnChain(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_BLOODNCHAIN_BODY); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_BLOODNCHAINHOLDATTACK)); obj.getVar("BloodnChainTar").clear_obj_vector(); local currentAni = obj.getCurrentAnimation(); obj.sq_SetXScrollStart(400, currentAni.getDelaySum(0,5)); break; } } function onEndCurrentAni_BloodnChain(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_BloodnChain(obj) { if(!obj) return; if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj); } function onKeyFrameFlag_BloodnChain(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 103: sq_SetMyShake(obj, 2, 100); break; case 105: sq_SetMyShake(obj, 7, 200); break; case 114: obj.sq_PlaySound("FG_BLOODCHAIN_02"); obj.sq_PlaySound("BLOODCHAIN_DASH_01"); break; case 116: sq_flashScreen(obj,50,100,150,178, sq_RGB(128,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 5, 300); break; case 118: sq_SetMyShake(obj, 2, 100); //`hold pos pass` 150 0 0 break; case 119: //`hold gather pos pass` 265 -20 0 local size = obj.getVar("BloodnChainTar").get_obj_vector_size(); if(size > 0){ local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(19, 20); for(local i = 0; i < size; i++){ local targetObj = obj.getVar("BloodnChainTar").get_obj_vector(i); if(targetObj && targetObj.getState() != STATE_DIE && !sq_IsFixture(targetObj)){ local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/atgunner/1_ranger_bykk/ap_bloodnchain.nut"); if(addAppendage) sq_MoveToAppendageForce(targetObj, obj, obj, 265, -20, targetObj.getZPos(), delay, true, addAppendage); } } } break; case 123: sq_SetMyShake(obj, 10, 200); break; case 124: //`hold pos pull` 355 -20 0 local size = obj.getVar("BloodnChainTar").get_obj_vector_size(); if(size > 0){ local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(24, 24); for(local i = 0; i < size; i++){ local targetObj = obj.getVar("BloodnChainTar").get_obj_vector(i); if(targetObj && targetObj.getState() != STATE_DIE && !sq_IsFixture(targetObj)){ local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/atgunner/1_ranger_bykk/ap_bloodnchain.nut"); if(addAppendage) sq_MoveToAppendageForce(targetObj, obj, obj, 355, -20, targetObj.getZPos(), delay, true, addAppendage); } } } break; case 126: local size = obj.getVar("BloodnChainTar").get_obj_vector_size(); if(size > 0){ local direction = sq_GetDirection(obj); for(local i = 0; i < size; i++){ local targetObj = obj.getVar("BloodnChainTar").get_obj_vector(i); if(targetObj && targetObj.getState() != STATE_DIE && sq_IsFixture(targetObj)){ sq_SetCurrentDirection(targetObj, direction); } } } break; case 127: sq_flashScreen(obj,50,100,50,178, sq_RGB(128,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 3, 150); break; case 130: sq_SetMyShake(obj, 5, 50); //`turn pos pull` 150 -10 0 local size = obj.getVar("BloodnChainTar").get_obj_vector_size(); if(size > 0){ local direction = sq_GetDirection(obj); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(30, 31); for(local i = 0; i < size; i++){ local targetObj = obj.getVar("BloodnChainTar").get_obj_vector(i); if(targetObj && targetObj.getState() != STATE_DIE && !sq_IsFixture(targetObj)){ sq_SetCurrentDirection(targetObj, sq_GetOppositeDirection(direction)); local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/atgunner/1_ranger_bykk/ap_bloodnchain.nut"); if(addAppendage) sq_MoveToAppendageForce(targetObj, obj, obj, 150, -10, targetObj.getZPos(), delay, true, addAppendage); } } } break; case 133: sq_flashScreen(obj,500,500,1000,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 136: sq_flashScreen(obj,50,50,150,178, sq_RGB(128,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 20, 500); obj.sq_SetXScrollStop(500); //`finish` 106 0 91 local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLOODNCHAIN, -1, 1, 1.0) + 100; createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,106,0,91,sq_GetDirection(obj),1,SKILL_BYKK_BLOODNCHAIN,1,totalDamage,0,0,0,0,0,0,0); local size = obj.getVar("BloodnChainTar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("BloodnChainTar").get_obj_vector(i); if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atgunner/1_ranger_bykk/ap_bloodnchain.nut"); } } break; } return true; } function onTimeEvent_BloodnChain(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_BloodnChain(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_BLOODNCHAIN){ local size = obj.getVar("BloodnChainTar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("BloodnChainTar").get_obj_vector(i); if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atgunner/1_ranger_bykk/ap_bloodnchain.nut"); } } obj.sq_SetXScrollStop(0); } } function onAttack_BloodnChain(obj, damager, boundingBox, isStuck) { if(!obj) return; local apdPath = "character/atgunner/1_ranger_bykk/ap_bloodnchain.nut"; if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ if(!obj.getVar("BloodnChainTar").is_obj_vector(damager)){ obj.getVar("BloodnChainTar").push_obj_vector(damager); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true); sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); } if(sq_GetCurrentFrameIndex(obj) >= 36) sq_AddDrawOnlyAniFromParent(damager, "character/gunner/effect/animation/1_ranger/atbloodnchain/hit/bloodfinishhitattach_1.ani", 0, 0, sq_GetCenterZPos(boundingBox)); else sq_AddDrawOnlyAniFromParent(damager, "character/gunner/effect/animation/1_ranger/atbloodnchain/hit/bloodhitattach_1.ani", 0, 0, sq_GetCenterZPos(boundingBox)); } } //毁灭风暴 function checkExecutableSkill_RuinationArea(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_RUINATIONAREA); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_RUINATIONAREA, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_RuinationArea(obj) { if (!obj) return false; return true; } function onSetState_RuinationArea(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_RUINATIONAREAST2_BODY);obj.sq_PlaySound("RUINATION_AREA_GUNBLADE_02"); break; case 1: obj.sq_SetCurrentAnimation(ATANI_BYKK_RUINATIONAREAST3_BODY);obj.sq_PlaySound("RUINATION_AREA_GUNBLADE_03"); break; case 2: obj.sq_SetCurrentAnimation(ATANI_BYKK_RUINATIONAREAST1_BODY);obj.sq_PlaySound("RUINATION_AREA_GUNBLADE_01"); break; case 3: obj.sq_SetCurrentAnimation(ATANI_BYKK_RUINATIONAREAST2_BODY);obj.sq_PlaySound("RUINATION_AREA_GUNBLADE_02"); break; case 4: obj.sq_SetCurrentAnimation(ATANI_BYKK_RUINATIONAREAST3_BODY);obj.sq_PlaySound("RUINATION_AREA_GUNBLADE_03"); break; case 5: obj.sq_SetCurrentAnimation(ATANI_BYKK_RUINATIONAREAST4_BODY); break; } local speed = 1.0; if(obj.getRapidInputFrequency() > 0) speed = 1.2; obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); local currentAni = obj.getCurrentAnimation(); switch(subState){ case 0: obj.sq_PlaySound("R_FG_RUINATION_AREA_01"); if(obj.isMyControlObject()) sq_flashScreen(obj,40,0,40,10, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 1, 100); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_RUINATIONAREA, -1, 0, 1.03) + 100; local hitMax = sq_GetIntData(obj, SKILL_BYKK_RUINATIONAREA, 6); local speedRate = 3400 / currentAni.getDelaySum(0, 0); createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_RUINATIONAREA,1,totalDamage,hitMax,speedRate,0,0,0,0,0); break; case 1: if(obj.isMyControlObject()) sq_flashScreen(obj,50,0,50,10, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 4, 100); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_RUINATIONAREA, -1, 0, 1.06) + 100; local hitMax = sq_GetIntData(obj, SKILL_BYKK_RUINATIONAREA, 8); local speedRate = 2700 / currentAni.getDelaySum(0, 0); createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_RUINATIONAREA,2,totalDamage,hitMax,speedRate,0,0,0,0,0); break; case 2: if(obj.isMyControlObject()) sq_flashScreen(obj,60,0,60,10, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 7, 100); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_RUINATIONAREA, -1, 0, 1.09) + 100; local hitMax = sq_GetIntData(obj, SKILL_BYKK_RUINATIONAREA, 4); local speedRate = 4000 / currentAni.getDelaySum(0, 0); createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_RUINATIONAREA,3,totalDamage,hitMax,speedRate,0,0,0,0,0); break; case 3: if(obj.isMyControlObject()) sq_flashScreen(obj,40,0,40,10, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 1, 100); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_RUINATIONAREA, -1, 0, 1.12) + 100; local hitMax = sq_GetIntData(obj, SKILL_BYKK_RUINATIONAREA, 6); local speedRate = 3400 / currentAni.getDelaySum(0, 0); createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_RUINATIONAREA,4,totalDamage,hitMax,speedRate,0,0,0,0,0); break; case 4: if(obj.isMyControlObject()) sq_flashScreen(obj,50,0,50,10, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 4, 100); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_RUINATIONAREA, -1, 0, 1.15) + 100; local hitMax = sq_GetIntData(obj, SKILL_BYKK_RUINATIONAREA, 8); local speedRate = 2700 / currentAni.getDelaySum(0, 0); createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_RUINATIONAREA,5,totalDamage,hitMax,speedRate,0,0,0,0,0); break; case 5: local speedRate = 5000 / currentAni.getDelaySum(0, 0); local delay1 = 30000 / speedRate, delay2 = 50000 / speedRate, delay3 = 40000 / speedRate; obj.sq_PlaySound("R_FG_RUINATION_AREA_02"); obj.sq_PlaySound("RUINATION_AREA_EXP"); sq_flashScreen(obj,0,delay1,delay2,255, sq_RGB(139,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 15, delay3); local totalDamage_Exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_RUINATIONAREA, -1, 1, 1.0) + 100; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_RUINATIONAREA, -1, 2, 1.0) + 100; local hitMax = sq_GetIntData(obj, SKILL_BYKK_RUINATIONAREA, 10); createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_RUINATIONAREA,6,totalDamage_Exp,speedRate,0,0,0,0,0,0); createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_RUINATIONAREA,7,totalDamage,hitMax,speedRate,0,0,0,0,0); break; } } function onEndCurrentAni_RuinationArea(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: case 2: case 3: case 4: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(STATE_BYKK_RUINATIONAREA, STATE_PRIORITY_AUTO, true); break; case 5: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_RuinationArea(obj) { if(!obj) return; obj.setSkillCommandEnable(SKILL_BYKK_RUINATIONAREA,true); local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_RUINATIONAREA); sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(b_useskill != -1 || sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj); } function onKeyFrameFlag_RuinationArea(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_RuinationArea(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_RuinationArea(obj, new_state) { if(!obj) return; } ///////////////////////////////////////////////////////////////4spitfire function isApplyConversionSkillPassiveObject_ATGunner(passiveObjectIndex) { if(passiveObjectIndex == 24396){ return true; } return false; } function proc_appendage_common_debuff(appendage) { if(!appendage) return; } function onStartDungeon_4SpitFire_bykk(obj) { local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADENONE); if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_GRENADENONE); local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADEWATER); if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_GRENADEWATER); local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADELIGHT); if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_GRENADELIGHT); local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_NITROMOTOR); for(local i = 0; i < 3; i++){ local timer = obj.getVar("grenade"+i.tostring()).get_ct_vector(0); if(!timer){ obj.getVar("grenade"+i.tostring()).clear_ct_vector(); obj.getVar("grenade"+i.tostring()).push_ct_vector(); timer = obj.getVar("grenade"+i.tostring()).get_ct_vector(0); timer.Reset(); timer.Start(10000,0); } } if(sq_GetSkillLevel(obj, SKILL_BYKK_STRAYBULLETMASTERY) > 0){ if(sq_GetSkillLevel(obj, SKILL_BYKK_N_02X) > 0){ obj.getVar("grenadeExSet").setInt(SKILL_BYKK_GRENADENONE, 0); obj.getVar("grenadeExSet").setInt(SKILL_BYKK_GRENADELIGHT, 0); obj.getVar("grenadeExSet").setInt(SKILL_BYKK_GRENADEWATER, 0); obj.getVar("grenadeUiBool").setBool(SKILL_BYKK_GRENADENONE, false); obj.getVar("grenadeUiBool").setBool(SKILL_BYKK_GRENADELIGHT, false); obj.getVar("grenadeUiBool").setBool(SKILL_BYKK_GRENADEWATER, false); } } setSkillBonusRate_At4SpitFire_bykk(obj); obj.sq_IntVectClear(); obj.sq_IntVectPush(100); obj.sq_AddSetStatePacket(STATE_BYKK_GRENADENONE, STATE_PRIORITY_USER, true); } function reset_atSpitFire_bykk(obj) { local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADENONE); if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_GRENADENONE); local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADEWATER); if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_GRENADEWATER); local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADELIGHT); if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_GRENADELIGHT); local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_NITROMOTOR); for(local i = 0; i < 3; i++){ local timer = obj.getVar("grenade"+i.tostring()).get_ct_vector(0); if(!timer){ obj.getVar("grenade"+i.tostring()).clear_ct_vector(); obj.getVar("grenade"+i.tostring()).push_ct_vector(); timer = obj.getVar("grenade"+i.tostring()).get_ct_vector(0); timer.Reset(); timer.Start(10000,0); } else{ timer.Reset(); timer.Start(10000,0); } } if(sq_GetSkillLevel(obj, SKILL_BYKK_STRAYBULLETMASTERY) > 0){ if(sq_GetSkillLevel(obj, SKILL_BYKK_N_02X) > 0){ obj.getVar("grenadeExSet").setInt(SKILL_BYKK_GRENADENONE, 0); obj.getVar("grenadeExSet").setInt(SKILL_BYKK_GRENADELIGHT, 0); obj.getVar("grenadeExSet").setInt(SKILL_BYKK_GRENADEWATER, 0); obj.getVar("grenadeUiBool").setBool(SKILL_BYKK_GRENADENONE, false); obj.getVar("grenadeUiBool").setBool(SKILL_BYKK_GRENADELIGHT, false); obj.getVar("grenadeUiBool").setBool(SKILL_BYKK_GRENADEWATER, false); } } setSkillBonusRate_At4SpitFire_bykk(obj); } function ProcPassiveSkill_ATGunner_SpitFire(obj, skill_index, skill_level) { switch(skill_index){ case SKILL_BYKK_NITROMOTOR: if(skill_level > 0){ local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_ATSPITFIRE_NITROMOTOR, true); } break; } } function procSkill_ATGunner_4SpitFire_bykk(obj)//2 4 { if(!obj) return; if(!sq_IsMyControlObject(obj)) return; local skillIndex = [SKILL_BYKK_GRENADENONE,SKILL_BYKK_GRENADEWATER,SKILL_BYKK_GRENADELIGHT]; local iconIndex = [0,2,4]; local coolTime = [1000, 2000, 1200]; local adjust = sq_GetIntData(obj, SKILL_BYKK_GRENADENONE, 16); local airCoolTime = 500 * (100 - adjust) / 100; for(local i = 0; i < 3; i++){ if(sq_GetSkillLevel(obj, skillIndex[i]) > 0){ local timer = obj.getVar("grenade"+(i).tostring()).get_ct_vector(0); local currentT = timer.Get(); // if(i == 0) print("currentT = "+currentT); local loadSlot = obj.sq_GetSkillLoad(skillIndex[i]); if(loadSlot){ obj.setSkillCommandEnable(skillIndex[i], false); local loadNumber = loadSlot.getRemainLoadNumber(); if(!loadSlot.isCooling()){ local loadMax = sq_GetIntData(obj, skillIndex[i], 0); if(loadNumber < loadMax){ loadSlot.increaseLoadCount(1); if(loadNumber + 1 != loadMax) loadSlot.setStartCool(); } } if(loadNumber > 0){ local sqrState = obj.getState(); if(sqrState == 0 || sqrState == 8 || sqrState == 14 || sqrState == 6 || sqrState == 7 || sqrState == STATE_BYKK_GRENADELIGHT || sqrState == STATE_BYKK_STANDBYREADY){ local loadSlotNit = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); if(loadSlotNit && loadSlotNit.getRemainLoadNumber() == 0) return; if((sq_GetZPos(obj) < 1 && currentT >= 3000) || (sq_GetZPos(obj) > 0 && currentT >= airCoolTime)){ obj.setSkillCommandEnable(skillIndex[i],true); local b_useskill = obj.sq_IsEnterSkill(skillIndex[i]); if(b_useskill != -1){ obj.sq_IntVectClear(); if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(2); else obj.sq_IntVectPush(0); obj.sq_IntVectPush(skillIndex[i]); obj.sq_AddSetStatePacket(STATE_BYKK_GRENADENONE, STATE_PRIORITY_IGNORE_FORCE, true); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){ if(loadNumber > 1) loadSlot.decreaseLoadCount(1); if(loadNumber == 3) loadSlot.setStartCool(); } else{ loadSlot.decreaseLoadCount(1); if(loadNumber == 3) loadSlot.setStartCool(); timer.Reset(); timer.Start(10000,0); } } } } } } else{ local loadMax = sq_GetIntData(obj, skillIndex[i], 0); obj.sq_AddSkillLoad(skillIndex[i], iconIndex[i], loadMax, coolTime[i]); //print("skillIndex = "+skillIndex[i]); } } } ////////单兵推进器 icon = 80 if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){ 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; obj.sq_AddSkillLoad(SKILL_BYKK_NITROMOTOR, 80, loadMax, 0); } } local state = obj.getState(); local stateLst = [STATE_SIT, STATE_DAMAGE, STATE_DOWN, STATE_HOLD];//STATE_SIT_FOREVER for(local i = 0; i < stateLst.len(); i++){ if(state == stateLst[i]){ local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ obj.sq_IntVectClear(); if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ obj.sq_IntVectPush(1); if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); } else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_GRENADELIGHT, STATE_PRIORITY_AUTO, true); if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")) loadSlot.decreaseLoadCount(1); return; } } } } } function drawCustomUI_ATGunner_4SpitFire(obj) { if(!obj || sq_isPVPMode()) return; if(!obj.sq_IsMyControlObject()) return; if(obj.getVar("grenadeUiBool").getBool(SKILL_BYKK_GRENADENONE)){ local sq_var = obj.getVar(); local uiAni = sq_var.GetAnimationMap("grenadeNoneUi", "character/gunner/effect/animation/4_spitfire/atchelli/standbyreadyui_00.ani"); sq_AnimationProc(uiAni); sq_drawCurrentFrame(uiAni, 78, 477, false); } if(obj.getVar("grenadeUiBool").getBool(SKILL_BYKK_GRENADELIGHT)){ local sq_var = obj.getVar(); local uiAni = sq_var.GetAnimationMap("grenadeLightUi", "character/gunner/effect/animation/4_spitfire/atchelli/standbyreadyui_00.ani"); sq_AnimationProc(uiAni); local offsetX = 78; if(sq_GetSkillLevel(obj, SKILL_BYKK_GRENADENONE) > 0) offsetX = 135; sq_drawCurrentFrame(uiAni, offsetX, 477, false); } if(obj.getVar("grenadeUiBool").getBool(SKILL_BYKK_GRENADEWATER)){ local sq_var = obj.getVar(); local uiAni = sq_var.GetAnimationMap("grenadeWaterUi", "character/gunner/effect/animation/4_spitfire/atchelli/standbyreadyui_00.ani"); sq_AnimationProc(uiAni); local offsetX = 78; if(sq_GetSkillLevel(obj, SKILL_BYKK_GRENADENONE) > 0) offsetX = 135; if(sq_GetSkillLevel(obj, SKILL_BYKK_GRENADELIGHT) > 0) offsetX = 194; sq_drawCurrentFrame(uiAni, offsetX, 477, false); } if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){ local sq_var = obj.getVar(); local uiAni = sq_var.GetAnimationMap("standbyreadyUi", "character/gunner/effect/animation/4_spitfire/atchelli/standbyreadyui_00.ani"); sq_AnimationProc(uiAni); local offsetX = 78; if(sq_GetSkillLevel(obj, SKILL_BYKK_GRENADENONE) > 0) offsetX = 135; if(sq_GetSkillLevel(obj, SKILL_BYKK_GRENADELIGHT) > 0) offsetX = 194; if(sq_GetSkillLevel(obj, SKILL_BYKK_GRENADEWATER) > 0) offsetX = 252; sq_drawCurrentFrame(uiAni, offsetX, 477, false); } } function determineNitromotor_bykk(obj, state)//判断单兵推进器滞空 { local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); if(loadSlot){ local loadNumber = loadSlot.getRemainLoadNumber(); if(loadNumber > 0){ if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut") && ((state == SKILL_BYKK_GRENADENONE || state == SKILL_BYKK_GRENADELIGHT || state == SKILL_BYKK_GRENADEWATER) && sq_GetIntData(obj, SKILL_BYKK_GRENADENONE, 17) < 1)) loadSlot.decreaseLoadCount(1); obj.getVar("determineNitromotor").setBool(0, true); if(state == STATE_BYKK_OPENFIRE) return true; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")) { obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("Effect/Animation/skl95_bykk/ATStandby-Ready/Standby-Ready_00.ani"), 0, 0); obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("Effect/Animation/skl95_bykk/ATStandby-Ready/Standby-Ready_01.ani"), 0, 0); obj.sq_AddStateLayerAnimation(10002,obj.sq_CreateCNRDAnimation("Effect/Animation/skl95_bykk/ATStandby-Ready/Standby-Ready_02.ani"), 0, 0); } else obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atnitromotor/up_nitromotor_dodge1.ani"), 0, 0); return true; } else return false; } else return false; } function nitroMotor_bykk(obj) { local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); if(loadSlot){ local loadNumber = loadSlot.getRemainLoadNumber(); if(loadNumber > 0){ sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ obj.sq_IntVectClear(); if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ obj.sq_IntVectPush(1); if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); } else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_GRENADELIGHT, STATE_PRIORITY_AUTO, true); if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")) loadSlot.decreaseLoadCount(1); return; } } if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")) return; sq_SetKeyxEnable(obj, E_BUFF_COMMAND, true); if(sq_IsEnterCommand(obj, E_BUFF_COMMAND)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(STATE_BYKK_GRENADELIGHT, STATE_PRIORITY_AUTO, true); return; } } } //超负荷装填 function checkExecutableSkill_OverCharge(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_OVERCHARGE); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_IntVectPush(0); obj.sq_IntVectPush(SKILL_BYKK_OVERCHARGE); obj.sq_IntVectPush(sq_GetCastTime(obj, SKILL_BYKK_OVERCHARGE, sq_GetSkillLevel(obj, SKILL_BYKK_OVERCHARGE))); obj.sq_IntVectPush(500); obj.sq_IntVectPush(1); obj.sq_IntVectPush(4); obj.sq_IntVectPush(4); obj.sq_IntVectPush(1000); obj.sq_IntVectPush(1000); obj.sq_IntVectPush(-1); obj.sq_AddSetStatePacket(STATE_THROW, STATE_PRIORITY_USER, true); return true; } return false; } function checkCommandEnable_OverCharge(obj) { if (!obj) return false; return true; } function onSetState_OverCharge(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); switch(subState){ case 0: local Ani = obj.sq_GetThrowShootAni(1); obj.setCurrentAnimation(Ani); obj.sq_PlaySound("OVERCHARGE_READY"); obj.sq_PlaySound("FG_DB_REVOLVER_02"); local elementSelect = obj.sq_GetVectorData(datas, 1);//0fire 1water 2dark 3light // print("elementSelect = "+elementSelect); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_ATSPITFIRE_OVERCHARGE, true); AddAppendage.setBuffIconImage(116); AddAppendage.getVar("element").setInt(0, elementSelect); AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_OVERCHARGE, sq_GetSkillLevel(obj, SKILL_BYKK_OVERCHARGE)); CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); break; } } function onEndCurrentAni_OverCharge(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_OverCharge(obj) { if(!obj) return; } function onKeyFrameFlag_OverCharge(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_OverCharge(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_OverCharge(obj, new_state) { if(!obj) return; } function onProcCon_atgunner_throw(obj) { if(!obj) return; local skillIndex = obj.getThrowIndex(); local substate = obj.getSkillSubState(); obj.setSkillSubState(substate) if(skillIndex == SKILL_BYKK_OVERCHARGE){ switch(substate){ case 0: sq_SetKeyxEnable(obj, E_BUFF_COMMAND, true);//设置其他按键 if(sq_IsEnterCommand(obj, E_BUFF_COMMAND)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_IntVectPush(4); obj.sq_AddSetStatePacket(STATE_BYKK_OVERCHARGE, STATE_PRIORITY_IGNORE_FORCE, true); break; } break; } } } function onAfterSetState_OverChargeThrow(obj, state, datas, isResetTimer) { if(!obj.isMyControlObject()) return; local skillIndex = obj.getThrowIndex(); if(skillIndex == SKILL_BYKK_OVERCHARGE){ local throwState = obj.getThrowState(); switch(throwState){ case 0: obj.setIsCustomSelectSkill(true); break; case 1: local element = obj.getThrowElement(); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_IntVectPush(element); obj.sq_AddSetStatePacket(STATE_BYKK_OVERCHARGE, STATE_PRIORITY_IGNORE_FORCE, true); break; } } } //特性弹 function checkExecutableSkill_BulletSpecific(obj) { if (!obj) return false; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BULLETSPECIFIC); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_IntVectPush(SKILL_BYKK_BULLETSPECIFIC); obj.sq_AddSetStatePacket(STATE_BYKK_BULLETPENETRATE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_BulletSpecific(obj) { if (!obj) return false; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)) return false; return true; } function onSetState_BulletSpecific(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(0); break; } } function onEndCurrentAni_BulletSpecific(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_BulletSpecific(obj) { if(!obj) return; } function onKeyFrameFlag_BulletSpecific(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_BulletSpecific(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_BulletSpecific(obj, new_state) { if(!obj) return; } //爆裂弹 function checkExecutableSkill_BulletExplosive(obj) { if (!obj) return false; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BULLETEXPLOSIVE); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_IntVectPush(SKILL_BYKK_BULLETEXPLOSIVE); obj.sq_AddSetStatePacket(STATE_BYKK_BULLETPENETRATE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_BulletExplosive(obj) { if (!obj) return false; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)) return false; return true; } function onSetState_BulletExplosive(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(0); break; } } function onEndCurrentAni_BulletExplosive(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_BulletExplosive(obj) { if(!obj) return; } function onKeyFrameFlag_BulletExplosive(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_BulletExplosive(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_BulletExplosive(obj, new_state) { if(!obj) return; } //贯穿弹 function checkExecutableSkill_BulletPenetrate(obj) { if (!obj) return false; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BULLETPENETRATE); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_IntVectPush(SKILL_BYKK_BULLETPENETRATE); obj.sq_AddSetStatePacket(STATE_BYKK_BULLETPENETRATE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_BulletPenetrate(obj) { if (!obj) return false; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)) return false; return true; } function onSetState_BulletPenetrate(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); switch(subState){ case 0: local Ani = obj.sq_GetThrowChargeAni(1); obj.setCurrentAnimation(Ani); local skillIndex = obj.sq_GetVectorData(datas, 1); obj.getVar("bulletSet").setInt(0, skillIndex); local skill_level = sq_GetSkillLevel(obj, skillIndex); local castTime = sq_GetCastTime(obj, skillIndex, skill_level); sq_StartDrawCastGauge(obj, castTime, true); local currentAni = obj.getCurrentAnimation(); if(castTime > 180) castTime = castTime - 180; sq_SetFrameDelayTime(currentAni, 2, castTime); break; case 1: local Ani = obj.sq_GetThrowShootAni(1); obj.setCurrentAnimation(Ani); local skillIndex = obj.sq_GetVectorData(datas, 1); local apdPath = APDPATH_ATSPITFIRE_BULLETPENETRATE; if(skillIndex == SKILL_BYKK_BULLETEXPLOSIVE) apdPath = APDPATH_ATSPITFIRE_BULLETEXPLOSIVE; else if(skillIndex == SKILL_BYKK_BULLETSPECIFIC) apdPath = APDPATH_ATSPITFIRE_BULLETSPECIFIC; local buffIcon = 118; if(skillIndex == SKILL_BYKK_BULLETEXPLOSIVE) buffIcon = 119; else if(skillIndex == SKILL_BYKK_BULLETSPECIFIC) buffIcon = 117; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true); AddAppendage.setBuffIconImage(buffIcon); AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), skillIndex, sq_GetSkillLevel(obj, skillIndex)); CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); switch(skillIndex){ case SKILL_BYKK_BULLETEXPLOSIVE: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_BULLETPENETRATE)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_ATSPITFIRE_BULLETPENETRATE); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_BULLETSPECIFIC)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_ATSPITFIRE_BULLETSPECIFIC); break; case SKILL_BYKK_BULLETPENETRATE: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_BULLETEXPLOSIVE)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_ATSPITFIRE_BULLETEXPLOSIVE); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_BULLETSPECIFIC)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_ATSPITFIRE_BULLETSPECIFIC); break; case SKILL_BYKK_BULLETSPECIFIC: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_BULLETPENETRATE)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_ATSPITFIRE_BULLETPENETRATE); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_BULLETEXPLOSIVE)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_ATSPITFIRE_BULLETEXPLOSIVE); break; } break; } } function onEndCurrentAni_BulletPenetrate(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(obj.getVar("bulletSet").getInt(0)); obj.sq_AddSetStatePacket(STATE_BYKK_BULLETPENETRATE, STATE_PRIORITY_AUTO, true); break; case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_BulletPenetrate(obj) { if(!obj) return; } function onKeyFrameFlag_BulletPenetrate(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_BulletPenetrate(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_BulletPenetrate(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_BULLETPENETRATE){ sq_EndDrawCastGauge(obj); } } //交叉射击 function checkExecutableSkill_CrossShoot(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CROSSSHOOT); if (isUse){ obj.sq_IntVectClear(); if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(1); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_CROSSSHOOT, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_CrossShoot(obj) { if (!obj) return false; local state = obj.getState(); if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){ if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){ local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); if(loadSlot){ local loadNumber = loadSlot.getRemainLoadNumber(); if(loadNumber > 0) return true; else return false; } else return false; } else return false; } return true; } function onSetState_CrossShoot(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); obj.sq_ZStop(); switch(subState){ case 0: obj.sq_SetCurrentAnimation(ATANI_BYKK_CROSSSHOOT); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/crossshoot/atbody.ani"), 0, 0); obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/crossshoot/gun.ani"), 0, 25); obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/crossshoot/gunbreak.ani"), 0, 25); obj.sq_AddStateLayerAnimation(4,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/crossshoot/shoot.ani"), 0, 25); break; case 1: obj.sq_SetCurrentAnimation(ATANI_BYKK_CROSSSHOOTAIR); obj.sq_PlaySound("R_FG_CROSSM"); // obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/crossshoot/atbodyair.ani"), -50, -50); obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/crossshoot/gunair.ani"), 0, 0); obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/crossshoot/gunbreakair.ani"), 0, 0); obj.sq_AddStateLayerAnimation(4,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/crossshoot/shootair.ani"), 0, 0); break; } } function onEndCurrentAni_CrossShoot(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; case 1: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true); return; } obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(0); obj.sq_IntVectPush(sq_GetZPos(obj)); obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_CrossShoot(obj) { if(!obj) return; } function onKeyFrameFlag_CrossShoot(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 0: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CROSSSHOOT, -1, 0, 1.0); local hitMax = sq_GetIntData(obj, SKILL_BYKK_CROSSSHOOT, 3); local hitStunRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CROSSSHOOT, -1, 1, 1.0) + 100; local sizeRate = sq_GetIntData(obj, SKILL_BYKK_CROSSSHOOT, 5); local elementSelect = 4; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)){ local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE); elementSelect = addAppendage.getVar("element").getInt(0); } local isAir = 0, offsetX = 55, offsetY = 0, offsetZ = 85; if(obj.getSkillSubState() == 1){ isAir = 1; offsetX = 55; offsetY = 0; offsetZ = 45;} else{ switch(elementSelect){ case 0: obj.sq_PlaySound("CROSS_SHOT_FIRE"); break; case 1: obj.sq_PlaySound("CROSS_SHOT_ICE"); break; case 2: obj.sq_PlaySound("CROSS_SHOT"); break; case 3: obj.sq_PlaySound("CROSS_SHOT_LIGHT"); break; case 4: obj.sq_PlaySound("CROSS_SHOT"); break; } } createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,offsetY,offsetZ,sq_GetDirection(obj),4,SKILL_BYKK_CROSSSHOOT,1,elementSelect,totalDamage,hitMax,hitStunRate,sizeRate,isAir,0,0); local aniPath = ["character/gunner/effect/animation/4_spitfire/crossshootrenewal/floor_fire.ani","character/gunner/effect/animation/4_spitfire/crossshootrenewal/floor_ice.ani","character/gunner/effect/animation/4_spitfire/crossshootrenewal/floor_mu.ani","character/gunner/effect/animation/4_spitfire/crossshootrenewal/floor_light.ani","character/gunner/effect/animation/4_spitfire/crossshootrenewal/floor_mu.ani"]; local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath[elementSelect], 0, 0, 0); if(elementSelect == 2){ local pAni = pooledObj.getCurrentAnimation(); pAni.setRGBA(50, 50, 50, 155); } sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); break; } return true; } function onTimeEvent_CrossShoot(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_CrossShoot(obj, new_state) { if(!obj) return; } //聚合弹 function checkExecutableSkill_ChargeBuster(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CHARGEBUSTER); if (isUse){ obj.sq_IntVectClear(); if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(10); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_CHARGEBUSTER, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_ChargeBuster(obj) { if (!obj) return false; local state = obj.getState(); if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){ if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){ local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); if(loadSlot){ local loadNumber = loadSlot.getRemainLoadNumber(); if(loadNumber > 0) return true; else return false; } else return false; } else return false; } return true; } function onSetState_ChargeBuster(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); obj.sq_ZStop(); switch(subState){ case 0: obj.sq_SetCurrentAnimation(ATANI_BYKK_CHARGEBUSTERCHARGE); obj.getVar("ChargeBusterBool").setBool(0, true); obj.getVar("ChargeBusterSet").setInt(0, 0); obj.sq_AddStateLayerAnimation(-2,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/1_spin_back_dodge1.ani"), 0, 0); obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/1_spin_back_dodge2.ani"), 0, 0); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/3_spin_front_dodge1.ani"), 0, 0); obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/3_spin_front_dodge2.ani"), 0, 0); obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/2_gg_body_dodge1.ani"), 0, 0); break; case 1: local isDown = obj.getVar("ChargeBusterSet").getInt(0); if(isDown > 0){ obj.sq_SetCurrentAnimation(ATANI_BYKK_CHARGEBUSTERSHOOTDOWN); obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/2_gg_body_dodge2_down.ani"), 0, 0); obj.sq_AddStateLayerAnimation(4,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/4_charge_dodge_down.ani"), 0, 0); obj.sq_AddStateLayerAnimation(5,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/5_shot_normal.ani"), 0, 0); obj.sq_AddStateLayerAnimation(6,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/6_shot_dodge_down.ani"), 0, 0); } else{ obj.sq_SetCurrentAnimation(ATANI_BYKK_CHARGEBUSTERSHOOT); obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/2_gg_body_dodge2.ani"), 0, 0); obj.sq_AddStateLayerAnimation(4,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/4_charge_dodge.ani"), 0, 0); obj.sq_AddStateLayerAnimation(5,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/5_shot_normal_down.ani"), 0, 0); obj.sq_AddStateLayerAnimation(6,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/6_shot_dodge.ani"), 0, 0); } break; case 10: obj.sq_SetCurrentAnimation(ATANI_BYKK_CHARGEBUSTERSHOOTAIR); obj.sq_AddStateLayerAnimation(5,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/5_shot_normal_air.ani"), 0, 0); obj.sq_AddStateLayerAnimation(6,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/6_shot_dodge_air.ani"), 0, 0); break; } } function onEndCurrentAni_ChargeBuster(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_CHARGEBUSTER, STATE_PRIORITY_AUTO, true); break; case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; case 10: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true); return; } obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(0); obj.sq_IntVectPush(sq_GetZPos(obj)); obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_ChargeBuster(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(obj.getVar("ChargeBusterBool").getBool(0)){ if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ obj.getVar("ChargeBusterBool").setBool(0, false); obj.getVar("ChargeBusterSet").setInt(0, 1); } } break; } } function onKeyFrameFlag_ChargeBuster(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 0: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CHARGEBUSTER, -1, 0, 1.0); local elementSelect = 4; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)){ local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE); elementSelect = addAppendage.getVar("element").getInt(0); } local isAir = 0, offsetX = 105, offsetY = 0, offsetZ = 85, isDown = 0; if(obj.getVar("ChargeBusterSet").getInt(0) > 0){ offsetX = 115; offsetY = 0; offsetZ = 55;isDown = 1; } if(obj.getSkillSubState() == 10){ isAir = 1; offsetX = 55; offsetY = 0; offsetZ = 35; } switch(elementSelect){ case 0: obj.sq_PlaySound("REVENGE_SHOT_FIRE_CHARGEBUSTER"); break; case 1: obj.sq_PlaySound("REVENGE_SHOT_ICE_CHARGEBUSTER"); break; case 2: obj.sq_PlaySound("REVENGE_SHOT_CHARGEBUSTER"); break; case 3: obj.sq_PlaySound("REVENGE_SHOT_LIGHT_CHARGEBUSTER"); break; case 4: obj.sq_PlaySound("REVENGE_SHOT_NONE_CHARGEBUSTER"); break; } createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,offsetY,offsetZ,sq_GetDirection(obj),4,SKILL_BYKK_CHARGEBUSTER,1,elementSelect,totalDamage,isAir,isDown,0,0,0,0); obj.sq_PlaySound("KILL_POINT_SHOOT_03"); break; } return true; } function onTimeEvent_ChargeBuster(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_ChargeBuster(obj, new_state) { if(!obj) return; } //凝固汽油弹 function checkExecutableSkill_NapalmBomb(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_NAPALMBOMB); if (isUse){ obj.sq_IntVectClear(); if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(1); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_NAPALMBOMB, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_NapalmBomb(obj) { if (!obj) return false; local state = obj.getState(); if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){ if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){ local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); if(loadSlot){ local loadNumber = loadSlot.getRemainLoadNumber(); if(loadNumber > 0) return true; else return false; } else return false; } else return false; } return true; } function onSetState_NapalmBomb(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); obj.sq_ZStop(); switch(subState){ case 0: obj.sq_SetCurrentAnimation(ATANI_BYKK_CHARGEBUSTERSHOOTDOWN); break; case 1: obj.sq_SetCurrentAnimation(ATANI_BYKK_NAPALMBOMBSHOOTAIR); break; } } function onEndCurrentAni_NapalmBomb(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; case 1: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true); return; } obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(0); obj.sq_IntVectPush(sq_GetZPos(obj)); obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_NapalmBomb(obj) { if(!obj) return; } function onKeyFrameFlag_NapalmBomb(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 0: obj.sq_PlaySound("FG_LIGHTSHOT"); local subState = obj.getSkillSubState(); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_NAPALMBOMB, -1, 0, 1.0); local lifeTime = sq_GetIntData(obj, SKILL_BYKK_NAPALMBOMB, 1); local hitTime = sq_GetIntData(obj, SKILL_BYKK_NAPALMBOMB, 0); local totalDamageGround = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_NAPALMBOMB, -1, 1, 1.0); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_NAPALMBOMB, 2); if(sq_GetIntData(obj, SKILL_BYKK_NAPALMBOMB, 6) > 0){ totalDamage = totalDamage * 140 / 100; sizeRate = sizeRate * 120 / 100; lifeTime = 0; } local elementSelect = 4; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)){ local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE); elementSelect = addAppendage.getVar("element").getInt(0); } local isAir = 0, offsetX = 105, offsetY = 0, offsetZ = 65, isDown = 0; if(subState == 1){ isAir = 1; offsetX = 55; offsetY = 0; offsetZ = 35;} createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,offsetY,offsetZ,sq_GetDirection(obj),4,SKILL_BYKK_NAPALMBOMB,1,elementSelect,totalDamage,lifeTime,hitTime,totalDamageGround,sizeRate,0,0); break; } return true; } function onTimeEvent_NapalmBomb(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_NapalmBomb(obj, new_state) { if(!obj) return; } //C4飞弹 function checkExecutableSkill_C4(obj) { if (!obj) return false; local size = obj.getVar("C4AtkObj").get_obj_vector_size(); if(size > 0 && obj.getVar("C4Bool").getBool(0)){ obj.getVar("C4Bool").setBool(0, false); for(local i = 0; i < size; i++){ local atkObj = obj.getVar("C4AtkObj").get_obj_vector(i); local colObj = sq_GetCNRDObjectToCollisionObject(atkObj); if(colObj.isExistTimeEvent(2)){ colObj.stopTimeEvent(2); colObj.setTimeEvent(2, 100, 1, true); } } return false; } local isUse = obj.sq_IsUseSkill(SKILL_BYKK_C4); if (isUse){ obj.sq_IntVectClear(); if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(1); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_C4, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_C4(obj) { if (!obj) return false; local state = obj.getState(); if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){ if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){ local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); if(loadSlot){ local loadNumber = loadSlot.getRemainLoadNumber(); if(loadNumber > 0) return true; else return false; } else return false; } else return false; } return true; } function onSetState_C4(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); obj.sq_ZStop(); switch(subState){ case 0: obj.sq_SetCurrentAnimation(ATANI_BYKK_C4REMOTEEXTHROW); break; case 1: obj.sq_SetCurrentAnimation(ATANI_BYKK_C4REMOTEEX_AIR); break; } } function onEndCurrentAni_C4(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; case 1: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){ obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true); return; } obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(0); obj.sq_IntVectPush(sq_GetZPos(obj)); obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_C4(obj) { if(!obj) return; } function onKeyFrameFlag_C4(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: local range = 600; obj.getVar("C4AtkObj").clear_obj_vector(); obj.getVar("C4Tar").clear_obj_vector(); obj.getVar("C4Tar_Boss").clear_obj_vector(); obj.getVar("C4Tar_Named").clear_obj_vector(); obj.getVar("C4Tar_Normal").clear_obj_vector(); local objectManager = obj.getObjectManager(); local objectNumber = objectManager.getCollisionObjectNumber(); for(local i = 0; i < objectNumber; i++){ local targetObj = objectManager.getCollisionObject(i); if(targetObj && targetObj.isObjectType(OBJECTTYPE_ACTIVE) && targetObj.isEnemy(obj) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(targetObj)) <= range && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(targetObj)) <= range && IsFrontOf(obj,targetObj)){ local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); if(sq_IsBoss(activeObj)) obj.getVar("C4Tar_Boss").push_obj_vector(activeObj); else if(sq_IsNamed(activeObj)) obj.getVar("C4Tar_Named").push_obj_vector(activeObj); else obj.getVar("C4Tar_Normal").push_obj_vector(activeObj); } } local bossNum = obj.getVar("C4Tar_Boss").get_obj_vector_size(); local namedNum = obj.getVar("C4Tar_Named").get_obj_vector_size(); local normalNum = obj.getVar("C4Tar_Normal").get_obj_vector_size(); if(bossNum> 0){ for(local i = 0; i < bossNum; i++){ local targetObj = obj.getVar("C4Tar_Boss").get_obj_vector(i); if(targetObj){ obj.getVar("C4Tar").push_obj_vector(targetObj); } } } if(namedNum> 0){ for(local i = 0; i < namedNum; i++){ local targetObj = obj.getVar("C4Tar_Named").get_obj_vector(i); if(targetObj){ obj.getVar("C4Tar").push_obj_vector(targetObj); } } } if(normalNum> 0){ for(local i = 0; i < normalNum; i++){ local targetObj = obj.getVar("C4Tar_Normal").get_obj_vector(i); if(targetObj){ obj.getVar("C4Tar").push_obj_vector(targetObj); } } } local targetNum = obj.getVar("C4Tar").get_obj_vector_size(); if(targetNum > 0){ obj.getVar("C4Bool").setBool(0, true); local createMax = sq_GetIntData(obj, SKILL_BYKK_C4, 2); if(targetNum < createMax) createMax = targetNum; local offsetX = 65, offsetY = 0, offsetZ = 80, subState = obj.getSkillSubState(); if(subState == 1){offsetX = 30; offsetY = 0; offsetZ = 55;} local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_C4, -1, 3, 1.0); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_C4); local speedRate = sq_GetLevelData(obj, SKILL_BYKK_C4, 2, skillLevel); local lifeTime = sq_GetIntData(obj, SKILL_BYKK_C4, 1); for(local i = 0; i < createMax; i++){ createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,offsetY,offsetZ,sq_GetDirection(obj),4,SKILL_BYKK_C4,1,totalDamage,i,lifeTime,speedRate,subState,0,0,0); } } break; } return true; } function onTimeEvent_C4(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_C4(obj, new_state) { if(!obj) return; } //G-14手雷 function checkExecutableSkill_GrenadeNone(obj) { if (!obj) return false; local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADENONE); if(loadSlot) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_GRENADENONE); if (isUse){ obj.sq_IntVectClear(); if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(2); else obj.sq_IntVectPush(0); obj.sq_IntVectPush(SKILL_BYKK_GRENADENONE); obj.sq_AddSetStatePacket(STATE_BYKK_GRENADENONE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_GrenadeNone(obj) { if (!obj) return false; local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADENONE); if(loadSlot && loadSlot.getRemainLoadNumber() < 1) return false; return true; } function onSetState_GrenadeNone(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); obj.sq_ZStop(); switch(subState){ case 0: local Ani = obj.sq_GetThrowChargeAni(2); obj.setCurrentAnimation(Ani); local grenadeSkillIndex = obj.sq_GetVectorData(datas, 1); obj.getVar("grenadeSkillIndex").setInt(0, grenadeSkillIndex); obj.getVar("grenadeSet").setInt(0, 0); obj.getVar("grenadeBool").setBool(0, true); if(grenadeSkillIndex == SKILL_BYKK_LOCKONSUPPORT) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/lockonsupport/lockonsupport_atmomentarythrow1_lockon01.ani"), 0, 0); break; case 1: local Ani = obj.sq_GetThrowShootAni(2); obj.setCurrentAnimation(Ani); if(obj.getVar("grenadeSkillIndex").getInt(0) == SKILL_BYKK_LOCKONSUPPORT) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/lockonsupport/lockonsupport_atmomentarythrow2_lockon01.ani"), 0, 0); break; case 2: obj.sq_SetCurrentAnimation(ATANI_BYKK_GRENADEAIR); local grenadeSkillIndex = obj.sq_GetVectorData(datas, 1); determineNitromotor_bykk(obj, grenadeSkillIndex); obj.getVar("grenadeSkillIndex").setInt(0, grenadeSkillIndex); if(grenadeSkillIndex == SKILL_BYKK_LOCKONSUPPORT) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/lockonsupport/lockonsupport_atgrenadeair_lockon01.ani"), 0, 0); break; case 100: local ani = obj.sq_GetStayAni(); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0)); local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) obj.getVar("element_kk").setInt(0, 100); else obj.getVar("element_kk").setInt(0, 0); if(attackInfo.isValidElement(ENUM_ELEMENT_WATER)) obj.getVar("element_kk").setInt(1, 100); else obj.getVar("element_kk").setInt(1, 0); if(attackInfo.isValidElement(ENUM_ELEMENT_DARK)) obj.getVar("element_kk").setInt(2, 100); else obj.getVar("element_kk").setInt(2, 0); if(attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) obj.getVar("element_kk").setInt(3, 100); else obj.getVar("element_kk").setInt(3, 0); obj.setTimeEvent(1, 50, 1, false); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_GrenadeNone(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_GRENADENONE, STATE_PRIORITY_AUTO, true); break; case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; case 2: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){ obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true); return; } local zpos = sq_GetZPos(obj) + 30; // if(zpos > 200) zpos = 0; obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(0); obj.sq_IntVectPush(zpos); obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_GrenadeNone(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: if(obj.getVar("grenadeBool").getBool(0) == false) break; if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ obj.getVar("grenadeSet").setInt(0, 2); obj.getVar("grenadeBool").setBool(0, false); } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ obj.getVar("grenadeSet").setInt(0, 1); obj.getVar("grenadeBool").setBool(0, false); } break; } } function onKeyFrameFlag_GrenadeNone(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 0://35 0 75 case 1://35 0 65 local skillIndex = obj.getVar("grenadeSkillIndex").getInt(0); print("skillIndex = "+skillIndex); local bonusRate = 100; if(sq_GetSkillLevel(obj, SKILL_BYKK_STRAYBULLETMASTERY) > 0){ bonusRate = bonusRate * (100 + sq_GetLevelData(obj, SKILL_BYKK_STRAYBULLETMASTERY, 0, sq_GetSkillLevel(obj, SKILL_BYKK_STRAYBULLETMASTERY))) / 100; print("bonusRate22 = "+bonusRate); } local exLevel = sq_GetSkillLevel(obj, SKILL_BYKK_GRENADEEX); if(exLevel > 0) bonusRate = bonusRate * (100 + 10*exLevel) / 100; if(sq_GetSkillLevel(obj, SKILL_BYKK_N_02X) > 0) bonusRate = bonusRate * (100 + sq_GetIntData(obj, SKILL_BYKK_N_02X, 10) / 10) / 100; print("bonusRate = "+bonusRate); bonusRate = bonusRate.tofloat() / 100.0; local totalDamage = obj.sq_GetBonusRateWithPassive(skillIndex, -1, 0, bonusRate); print("totalDamageGrenade = "+totalDamage); local sizeRate = obj.sq_GetBonusRateWithPassive(skillIndex, -1, 1, 1.0) + 100; if(exLevel > 0) sizeRate = sizeRate * (100 + 5*exLevel) / 100; print("sizeRate = "+sizeRate); local prob = 0, time = 0, level = 0; if(skillIndex == SKILL_BYKK_GRENADELIGHT){ prob = 100; level = sq_GetSkillLevel(obj, 174) + 15; time = sq_GetLevelData(obj, skillIndex, 4, sq_GetSkillLevel(obj, skillIndex)); } else if(skillIndex == SKILL_BYKK_GRENADEWATER){ prob = sq_GetLevelData(obj, skillIndex, 2, sq_GetSkillLevel(obj, skillIndex)) / 10; level = sq_GetSkillLevel(obj, 174) + 15; time = sq_GetLevelData(obj, skillIndex, 4, sq_GetSkillLevel(obj, skillIndex)); } local isEx = 0; if(sq_GetSkillLevel(obj, SKILL_BYKK_N_02X) > 0 && sq_GetSkillLevel(obj, SKILL_BYKK_STRAYBULLETMASTERY) > 0){ local nowSaveNum = obj.getVar("grenadeExSet").getInt(skillIndex); if(nowSaveNum < 2){ obj.getVar("grenadeExSet").setInt(skillIndex, nowSaveNum + 1); if(nowSaveNum + 1 == 2) obj.getVar("grenadeUiBool").setBool(skillIndex, true); } else{ isEx = 1; sizeRate = 300; obj.getVar("grenadeExSet").setInt(skillIndex, 0); obj.getVar("grenadeUiBool").setBool(skillIndex, false); totalDamage = totalDamage * sq_GetIntData(obj, SKILL_BYKK_N_02X, 9) / 100; } } local ptlSelect = obj.getVar("grenadeSet").getInt(0); local offsetZ = 75; if(flagIndex == 1){offsetZ = 65;ptlSelect = 3;} if(skillIndex == SKILL_BYKK_LOCKONSUPPORT){ totalDamage = obj.sq_GetBonusRateWithPassive(skillIndex, -1, 0, 1.0); local hitMax = sq_GetIntData(obj, skillIndex, 0); local sizeRate = sq_GetIntData(obj, skillIndex, 1); local prob = obj.sq_GetBonusRateWithPassive(skillIndex, -1, 1, 1.0) + 100; local time = obj.sq_GetBonusRateWithPassive(skillIndex, -1, 3, 1.0) + 100; if(ptlSelect == 1) ptlSelect = 0; createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,35,0,offsetZ,sq_GetDirection(obj),4,skillIndex,1,totalDamage,sizeRate,hitMax,ptlSelect,prob,time,0,0); break; } else if(skillIndex == SKILL_BYKK_GRAVITYGRENADE){ totalDamage = obj.sq_GetBonusRateWithPassive(skillIndex, -1, 2, 1.0); local totalDamageExp = obj.sq_GetBonusRateWithPassive(skillIndex, -1, 3, 1.0); local lifeTime = obj.sq_GetBonusRateWithPassive(skillIndex, -1, 0, 1.0) + 100; local hitTime = obj.sq_GetBonusRateWithPassive(skillIndex, -1, 1, 1.0) + 100; local sizeRate = sq_GetIntData(obj, skillIndex, 1); if(ptlSelect == 1) ptlSelect = 0; //print("lifeTime = "+lifeTime); //print("hitTime = "+hitTime); createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,35,0,offsetZ,sq_GetDirection(obj),4,skillIndex,1,totalDamage,totalDamageExp,lifeTime,hitTime,ptlSelect,sizeRate,0,0); break; } createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,35,0,offsetZ,sq_GetDirection(obj),4,skillIndex,1,totalDamage,sizeRate,isEx,ptlSelect,prob,time,level,0); if(isEx > 0){ if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){ switch(skillIndex){ case SKILL_BYKK_GRENADENONE: obj.sq_PlaySound("R_FG_SBR_FIRE"); break; case SKILL_BYKK_GRENADELIGHT: obj.sq_PlaySound("R_FG_SBR_FLASH"); break; case SKILL_BYKK_GRENADEWATER: obj.sq_PlaySound("R_FG_SBR_ICE"); break; } print("test"); } } else obj.sq_PlaySound("FG_GRENADE"); break; } return true; } function onTimeEvent_GrenadeNone(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0 && sq_GetSkillLevel(obj, 33) > 0){ sq_clearSkillData(); sq_setLevelData(obj, 33, 0, 999999, 0); obj.sq_IntVectClear(); obj.sq_IntVectPush(33); obj.sq_AddSetStatePacket(17, STATE_PRIORITY_USER, true); } else{ obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); } break; } } function onEndState_GrenadeNone(obj, new_state) { if(!obj) return; } //M18阔剑地雷 function checkExecutableSkill_M18Claymore(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_M18CLAYMORE); if (isUse){ obj.sq_IntVectClear(); if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(1); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_M18CLAYMORE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_M18Claymore(obj) { if (!obj) return false; local state = obj.getState(); if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){ if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){ local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); if(loadSlot){ local loadNumber = loadSlot.getRemainLoadNumber(); if(loadNumber > 0) return true; else return false; } else return false; } else return false; } return true; } function onSetState_M18Claymore(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: if(sq_GetSkillLevel(obj, SKILL_BYKK_N_02X) > 0){ obj.sq_SetCurrentAnimation(ATANI_BYKK_ATM18CLAYMORE_GROUND_NO2X_BODY); obj.getVar("grenadeBool").setBool(0, false); obj.getVar("grenadeSet").setInt(0, 0); } else obj.sq_SetCurrentAnimation(ATANI_BYKK_ATM18CLAYMORE_START_BODY); break; case 1: if(sq_GetSkillLevel(obj, SKILL_BYKK_N_02X) > 0) obj.sq_SetCurrentAnimation(ATANI_BYKK_ATM18CLAYMORE_AIR_NO2X_BODY); else obj.sq_SetCurrentAnimation(ATANI_BYKK_ATM18CLAYMORE_AIRSTART_BODY); determineNitromotor_bykk(obj, 0); break; } obj.getVar("M18ClayMoreObj").clear_obj_vector(); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_M18Claymore(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; case 1: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){ obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true); return; } local zpos = sq_GetZPos(obj) + 30; // if(zpos > 200) zpos = 0; obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(0); obj.sq_IntVectPush(zpos); obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_M18Claymore(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(obj.getVar("grenadeBool").getBool(0) == false){ if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ obj.getVar("grenadeSet").setInt(0, 2); obj.getVar("grenadeBool").setBool(0, true); } } break; } } function onKeyFrameFlag_M18Claymore(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 101: case 201: case 102: case 202: //print("flagIndex = "+flagIndex); obj.sq_PlaySound("R_NEO_GRENADE_THROW"); obj.sq_PlaySound("NEO_M18_DROP"); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_M18CLAYMORE, -1, 0, 1.0); local hitMax = sq_GetIntData(obj, SKILL_BYKK_M18CLAYMORE, 3); local lifeTime = sq_GetIntData(obj, SKILL_BYKK_M18CLAYMORE, 7); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_M18CLAYMORE, 15); local prob = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_M18CLAYMORE, -1, 2, 1.0) + 100; local time = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_M18CLAYMORE, -1, 3, 1.0) + 100; local ptlSelect = obj.getVar("grenadeSet").getInt(0); local offsetX = 50, offsetZ = 0, subtype = 1; if(flagIndex == 201){offsetX = 35; offsetZ = 35;} if(flagIndex > 200) { switch(flagIndex){ case 201: offsetX = 35; offsetZ = 80; break; case 202: offsetX = 35; offsetZ = 35; break; } subtype = 3; } createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,0,offsetZ,sq_GetDirection(obj),4,SKILL_BYKK_M18CLAYMORE,subtype,totalDamage,hitMax,lifeTime,sizeRate,prob,time,flagIndex,ptlSelect); break; } return true; } function onTimeEvent_M18Claymore(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_M18Claymore(obj, new_state) { if(!obj) return; } //G-35L感电手雷 function checkExecutableSkill_GrenadeLight(obj) { if (!obj) return false; local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADELIGHT); if(loadSlot) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CRUXOFSHAPIEL); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_CRUXOFSHAPIEL, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_GrenadeLight(obj) { if (!obj) return false; local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADELIGHT); if(loadSlot && loadSlot.getRemainLoadNumber() < 1) return false; return true; } function onSetState_GrenadeLight(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); obj.sq_ZStop(); switch(subState){ case 0: obj.sq_SetCurrentAnimation(ATANI_BYKK_NITROMOTORJUMP); obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atnitromotor/up_nitromotor_dodge1.ani"), 0, 0); local zPos = sq_GetZPos(obj); local speed = 300; if(zPos > 100) speed = 200; if(zPos > 120) speed = 130; if(zPos > 160) speed = 80; if(zPos > 220) speed = 30; sq_SetZVelocity(obj,speed,0); break; case 1: obj.sq_SetCurrentAnimation(ATANI_BYKK_NITROMOTORJUMP); obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atnitromotor/side_nitromotor_dodge1.ani"), 0, 0); local zPos = sq_GetZPos(obj); local speed = 300; if(zPos > 100) speed = 200; if(zPos > 120) speed = 130; if(zPos > 160) speed = 80; if(zPos > 220) speed = 30; sq_SetZVelocity(obj,speed,0); local speed = 400.0; if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); else sq_SetVelocity(obj, 0, -speed); break; case 2: obj.sq_SetCurrentAnimation(ATANI_BYKK_NITROMOTORDOWN); obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atnitromotor/down_nitromotor_dodge3.ani"), 0, 0); sq_SetZVelocity(obj,-1500,0); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_GrenadeLight(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true); return; } obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(0); obj.sq_IntVectPush(sq_GetZPos(obj)); obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_GrenadeLight(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT){ sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true); return; } obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(0); obj.sq_IntVectPush(sq_GetZPos(obj)); obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT){ local speed = 600.0; if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); else sq_SetVelocity(obj, 0, -speed); } else{ local speed = 400.0; if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); else sq_SetVelocity(obj, 0, -speed); } case 0: sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){ obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_JUMP_ATTACK, STATE_PRIORITY_AUTO, true); } break; case 2: if(sq_GetZPos(obj) <= 0){ obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); } break; } } function onKeyFrameFlag_GrenadeLight(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_GrenadeLight(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_GrenadeLight(obj, new_state) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 2: if(new_state == STATE_STAND){ 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; } } //G-18C冰冻手雷 function checkExecutableSkill_GrenadeWater(obj) { if (!obj) return false; local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADELIGHT); if(loadSlot) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CRUXOFSHAPIEL); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_CRUXOFSHAPIEL, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_GrenadeWater(obj) { if (!obj) return false; local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADEWATER); if(loadSlot && loadSlot.getRemainLoadNumber() < 1) return false; return true; } function onSetState_GrenadeWater(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(0); break; } } function onEndCurrentAni_GrenadeWater(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_GrenadeWater(obj) { if(!obj) return; } function onKeyFrameFlag_GrenadeWater(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_GrenadeWater(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_GrenadeWater(obj, new_state) { if(!obj) return; } //镭射狙击 function checkExecutableSkill_LockOnSupport(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_LOCKONSUPPORT); if (isUse){ obj.sq_IntVectClear(); if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(2); else obj.sq_IntVectPush(0); obj.sq_IntVectPush(SKILL_BYKK_LOCKONSUPPORT); obj.sq_AddSetStatePacket(STATE_BYKK_GRENADENONE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_LockOnSupport(obj) { if (!obj) return false; local state = obj.getState(); if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){ if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){ local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); if(loadSlot){ local loadNumber = loadSlot.getRemainLoadNumber(); if(loadNumber > 0) return true; else return false; } else return false; } else return false; } return true; } function onSetState_LockOnSupport(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(0); break; } } function onEndCurrentAni_LockOnSupport(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_LockOnSupport(obj) { if(!obj) return; } function onKeyFrameFlag_LockOnSupport(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_LockOnSupport(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_LockOnSupport(obj, new_state) { if(!obj) return; } //G-61重力手雷 function checkExecutableSkill_GravityGrenade(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_GRAVITYGRENADE); if (isUse){ obj.sq_IntVectClear(); if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(2); else obj.sq_IntVectPush(0); obj.sq_IntVectPush(SKILL_BYKK_GRAVITYGRENADE); obj.sq_AddSetStatePacket(STATE_BYKK_GRENADENONE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_GravityGrenade(obj) { if (!obj) return false; local state = obj.getState(); if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){ if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){ local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR); if(loadSlot){ local loadNumber = loadSlot.getRemainLoadNumber(); if(loadNumber > 0) return true; else return false; } else return false; } else return false; } return true; } function onSetState_GravityGrenade(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(0); break; } } function onEndCurrentAni_GravityGrenade(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_GravityGrenade(obj) { if(!obj) return; } function onKeyFrameFlag_GravityGrenade(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_GravityGrenade(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_GravityGrenade(obj, new_state) { if(!obj) return; }