///普通攻击 function onAfterSetState_Fighter_Attack(obj, state, datas, isResetTimer) { if(!obj) return; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return; local attackIndex = obj.getAttackIndex(); switch(attackIndex){ case 0: //obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/poisonsnake/attack01_b_boom02_normal_02.ani"), 0, 0); sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/3_streetfighter_bykk/poisonsnake/attack01_b_boom02_normal_02.ani", 0, 0, 0); break; case 1: // obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/poisonsnake/attack02_b_boom02_normal_02.ani"), 0, 0); sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/3_streetfighter_bykk/poisonsnake/attack02_b_boom02_normal_02.ani", 0, 0, 0); break; case 2: // obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/poisonsnake/attack03_b_boom02_normal_02.ani"), 0, 0); sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/3_streetfighter_bykk/poisonsnake/attack03_b_boom02_normal_02.ani", 0, 0, 0); break; case 3: // obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/poisonsnake/attack04_b_boom02_normal_02.ani"), 0, 0); sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/3_streetfighter_bykk/poisonsnake/attack04_b_boom02_normal_02.ani", 0, 0, 0); break; case 4: // local currentAni = obj.getCurrentAnimation(); // print("delaySum = "+currentAni.getDelaySum(0, 3)); // print("delaySum2 = "+currentAni.getDelaySum(false)); // obj.setTimeEvent(1, currentAni.getDelaySum(0, 3) / 22, 22, true); obj.getVar("fwAttackSet").setInt(0, sq_GetXPos(obj)); obj.getVar("fwAttackBool").setBool(0, false); obj.getVar("fwAttackBool").setBool(1, false); // obj.setTimeEvent(2, currentAni.getDelaySum(false) / 55, 55, true); break; } } function onProcCon_Fighter_Attack(obj) { if(!obj) return; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return; if(obj.getVar("fwAttackBool").getBool(1) == false){ 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("fwAttackBool").setBool(0, 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){ obj.getVar("fwAttackBool").setBool(0, true); obj.getVar("fwAttackBool").setBool(1, true); } } local attackIndex = obj.getAttackIndex(); switch(attackIndex){ case 4: local currentAni = obj.getCurrentAnimation(); local frameIndex = sq_GetCurrentFrameIndex(obj); local stateTime = obj.sq_GetStateTimer(); if(obj.getVar("fwAttackBool").getBool(0)) return; if(obj.getVar("fwAttackBool").getBool(0) == false && frameIndex <= 7){ local fullTime = currentAni.getDelaySum(0, 7); local offset = 120; if(obj.getVar("fwAttackBool").getBool(1)) offset = 180; local v = sq_GetUniformVelocity(0, 120, stateTime, fullTime); local dstX = sq_GetDistancePos(obj.getVar("fwAttackSet").getInt(0), sq_GetDirection(obj), v); if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); else obj.getVar("fwAttackBool").setBool(0, true); } break; } } function onProc_Fighter_Attack(obj) { if(!obj) return; local growType = sq_getGrowType(obj); switch(growType){ case 3: if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return; local attackIndex = obj.getAttackIndex(); switch(attackIndex){ case 4: local currentAni = obj.getCurrentAnimation(); local frameIndex = sq_GetCurrentFrameIndex(obj); local jumpTime = currentAni.getDelaySum(0, 3); local stateTime = obj.sq_GetStateTimer(); if(frameIndex <= 3){ local v = sq_GetAccel(0, 60, stateTime, jumpTime, true); sq_setCurrentAxisPos(obj, 2, v); } else{ local jumpTime = currentAni.getDelaySum(4, 6); local stateTime = obj.sq_GetStateTimer(); local v = sq_GetAccel(60, 0, stateTime - jumpTime, jumpTime, false); sq_setCurrentAxisPos(obj, 2, v); } break; } break; } } function onTimeEvent_Fighter_Attack(obj, timeEventIndex, timeEventCount) { if(!obj) return true; } function onKeyFrameFlag_Fighter_Attack(obj, flagIndex) { if(!obj) return false; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return false; switch(flagIndex){ case 1: local attackIndex = obj.getAttackIndex(); if(attackIndex == 4) sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/3_streetfighter_bykk/poisonsnake/attack05_b_boom03_normal_01.ani", 0, 0, 0); break; } return true; } function onAttack_Fighter_Attack(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return; if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ENCHANTPOISON)) return; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)){ if(damager.getVar("SFPoison").get_obj_vector_size() > 0){ local poisonObj = damager.getVar("SFPoison").get_obj_vector(0); if(poisonObj){ local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj); local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_ENCHANTPOISON); local damage = sq_GetLevelData(obj, SKILL_FWBYKK_ENCHANTPOISON, 9, skillLevel); print("damageAddSet = "+damage); local baseDamage = colObj.getVar("damage").getInt(0); colObj.getVar("damage").setInt(0, baseDamage + damage); } } return; } if(damager.getVar("SFPoison").get_obj_vector_size() > 0){ local poisonObj = damager.getVar("SFPoison").get_obj_vector(0); if(poisonObj){ local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj); local attackIndex = obj.getAttackIndex(); local bonusRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; local damage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONSNAKE, -1, 17 + attackIndex, bonusRate.tofloat() / 1000.0) + 100; print("damageAddSet = "+damage); local baseDamage = colObj.getVar("damage").getInt(0); colObj.getVar("damage").setInt(0, baseDamage + damage); } } } function getAttackCancelStartFrameSize_Fighter(obj) { local maxAttackNumber = obj.sq_GetAttackCancelStartFrameSize(); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) maxAttackNumber = 4; return maxAttackNumber; } function getAttackCancelStartFrame_Fighter(obj, index) { if(!obj) return null; local frm = 0; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)){ switch(index){ case 0:frm = 3; break; case 1:frm = 3; break; case 2:frm = 3; break; case 3:frm = 3; break; } } else frm = obj.sq_GetAttackCancelStartFrame(index); return frm; } function getAttackAni_Fighter(obj, index) { if(!obj) return null; local animation = obj.sq_GetAttackAni(index); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) animation = obj.sq_GetCustomAni(ANI_FWBYKK_POISONSNAKEATTACK01_BODY + index); return animation; } function getDefaultAttackInfo_Fighter(obj, index) { if(!obj) return null; // print("index = "+index); local attackInfo = obj.sq_GetDefaultAttackInfo(index); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)){ attackInfo = sq_GetCustomAttackInfo(obj, ATK_FWBYKK_POISONSNAKECOMBO1 + index); local bonusRate = 1.0;// + sq_GetLevelData(obj, 174, 0, sq_GetSkillLevel(obj, 174)).tofloat() / 1000.0; sq_SetCurrentAttackBonusRate(attackInfo, obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONSNAKE, -1, 3 + index, bonusRate)); } return attackInfo; } ///前冲攻击 function onAfterSetState_Fighter_DashAttack(obj, state, datas, isResetTimer) { if(!obj) return; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return; obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/poisonsnake/dashbody_effect.ani"), 0, 0);//effect/animation/3_streetfighter_bykk/poisonsnake/dash_body_effect.ani obj.getVar("fwDashAttackSet").setInt(0, sq_GetXPos(obj)); obj.getVar("fwDashAttackBool").setBool(0, false); } function onProcCon_Fighter_DashAttack(obj) { if(!obj) return; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return; if(obj.getVar("fwDashAttackBool").getBool(1) == false){ 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("fwDashAttackBool").setBool(0, true); } } else return; local currentAni = obj.getCurrentAnimation(); local frameIndex = sq_GetCurrentFrameIndex(obj); local stateTime = obj.sq_GetStateTimer(); if(obj.getVar("fwDashAttackBool").getBool(0) == false){ local fullTime = currentAni.getDelaySum(0, 3); local v = sq_GetUniformVelocity(0, 125, stateTime, fullTime); local dstX = sq_GetDistancePos(obj.getVar("fwDashAttackSet").getInt(0), sq_GetDirection(obj), v); if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); else obj.getVar("fwDashAttackBool").setBool(0, true); } } function onAttack_Fighter_DashAttack(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return; if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ENCHANTPOISON)) return; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return; if(damager.getVar("SFPoison").get_obj_vector_size() > 0){ local poisonObj = damager.getVar("SFPoison").get_obj_vector(0); if(poisonObj){ local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj); local attackIndex = obj.getAttackIndex(); local bonusRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; local damage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONSNAKE, -1, 22, bonusRate.tofloat() / 1000.0) + 100; print("damageAddSet = "+damage); local baseDamage = colObj.getVar("damage").getInt(0); colObj.getVar("damage").setInt(0, baseDamage + damage); } } } function getDashAttackAni_Fighter(obj) { if(!obj) return null; local animation = obj.sq_GetDashAttackAni(); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) animation = sq_GetCustomAni(obj, ANI_FWBYKK_POISONSNAKEDASH_BODY); return animation; } function getDashAttackInfo_Fighter(obj) { if(!obj) return null; local attackInfo = obj.sq_GetDashAttackInfo(); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)){ attackInfo = sq_GetCustomAttackInfo(obj, ATK_FWBYKK_POISONSNAKEDASHATTACK); local bonusRate = 1.0;// + sq_GetLevelData(obj, 174, 1, sq_GetSkillLevel(obj, 174)).tofloat() / 1000.0; // print("bonus : "+obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONSNAKE, -1, 8, bonusRate)); sq_SetCurrentAttackBonusRate(attackInfo, obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONSNAKE, -1, 8, bonusRate)); } return attackInfo; } //跳跃攻击 function onAfterSetState_Fighter_JumpAttack(obj, state, datas, isResetTimer) { if(!obj) return; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return; obj.sq_AddStateLayerAnimation(10003,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/poisonsnake/jump_a_glow_red.ani"), 0, 0); obj.sq_AddStateLayerAnimation(10002,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/poisonsnake/jump_a_attack_dodge.ani"), 0, 0); obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/poisonsnake/jump_a_attack_normal.ani"), 0, 0); } function onKeyFrameFlag_Fighter_JumpAttack(obj, flagIndex) { if(!obj) return false; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return false; switch(flagIndex){ case 1: sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/3_streetfighter_bykk/poisonsnake/jump_b_boom01_normal_01.ani", 0, 0, 0); break; } return true; } function onAttack_Fighter_JumpAttack(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return; if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ENCHANTPOISON)) return; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return; if(damager.getVar("SFPoison").get_obj_vector_size() > 0){ local poisonObj = damager.getVar("SFPoison").get_obj_vector(0); if(poisonObj){ local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj); local attackIndex = obj.getAttackIndex(); local bonusRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100; local damage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONSNAKE, -1, 23, bonusRate.tofloat() / 1000.0) + 100; print("damageAddSet = "+damage); local baseDamage = colObj.getVar("damage").getInt(0); colObj.getVar("damage").setInt(0, baseDamage + damage); } } } function getJumpAttackAni_Fighter(obj) { if(!obj) return null; local animation = obj.sq_GetJumpAttackAni(); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) animation = sq_GetCustomAni(obj, ANI_FWBYKK_POISONSNAKEJUMP_BODY); return animation; } function getJumpAttackInfo_Fighter(obj) { if(!obj) return null; local attackInfo = obj.sq_GetJumpAttackInfo(); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)){ attackInfo = sq_GetCustomAttackInfo(obj, CUSTOM_ATTACK_FIGHTER_POISONSNAKEJUMPATTACK); local bonusRate = 1.0;// + sq_GetLevelData(obj, 174, 2, sq_GetSkillLevel(obj, 174)).tofloat() / 1000.0; sq_SetCurrentAttackBonusRate(attackInfo, obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONSNAKE, -1, 9, bonusRate)); } return attackInfo; } ///////////////////////////////////////////////////////////////////////////女散打 //雷霆之舞 function checkExecutableSkill_LightningShift(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_LIGHTNINGSHIFT); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_LIGHTNINGSHIFT, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_LightningShift(obj) { if (!obj) return false; return true; } function onSetState_LightningShift(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); print("subState = "+subState); obj.sq_StopMove(); switch(subState){ case 0: obj.sq_SetCurrentAnimation(ANI_FWBYKK_LIGHTNINGSHIFTATTACK01_BODY); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.75, 0.75); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(0, 0); local speedRate = delaySum * 100 / 49; obj.getVar("LightningShiftSet").setInt(6, speedRate); obj.getVar("LightningShiftTar").clear_obj_vector(); obj.getVar("LightningShiftTar_Boss").clear_obj_vector(); obj.getVar("LightningShiftTar_Named").clear_obj_vector(); obj.getVar("LightningShiftTar_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_GetYPos(obj) - sq_GetYPos(targetObj)) <= 300){ local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); if(sq_IsBoss(activeObj)) obj.getVar("LightningShiftTar_Boss").push_obj_vector(activeObj); else if(sq_IsNamed(activeObj)) obj.getVar("LightningShiftTar_Named").push_obj_vector(activeObj); else obj.getVar("LightningShiftTar_Normal").push_obj_vector(activeObj); } } local bossNum = obj.getVar("LightningShiftTar_Boss").get_obj_vector_size(); local namedNum = obj.getVar("LightningShiftTar_Named").get_obj_vector_size(); local normalNum = obj.getVar("LightningShiftTar_Normal").get_obj_vector_size(); if(bossNum> 0){ for(local i = 0; i < bossNum; i++){ local targetObj = obj.getVar("LightningShiftTar_Boss").get_obj_vector(i); if(targetObj){ obj.getVar("LightningShiftTar").push_obj_vector(targetObj); } } } if(namedNum> 0){ for(local i = 0; i < namedNum; i++){ local targetObj = obj.getVar("LightningShiftTar_Named").get_obj_vector(i); if(targetObj){ obj.getVar("LightningShiftTar").push_obj_vector(targetObj); } } } if(normalNum> 0){ for(local i = 0; i < normalNum; i++){ local targetObj = obj.getVar("LightningShiftTar_Normal").get_obj_vector(i); if(targetObj){ obj.getVar("LightningShiftTar").push_obj_vector(targetObj); } } } local targetNum = obj.getVar("LightningShiftTar").get_obj_vector_size(); if(targetNum > 0){ local randomNum = 0; if(targetNum > 1) randomNum = sq_getRandom(0, targetNum); obj.getVar("LightningShiftSet").setInt(0, randomNum); obj.getVar("LightningShiftSet").setInt(1, sq_GetXPos(obj)); obj.getVar("LightningShiftSet").setInt(2, sq_GetYPos(obj)); obj.getVar("LightningShiftSet").setInt(3, sq_GetZPos(obj)); local timeEventMax = (3000 / speedRate).tointeger(); obj.getVar("LightningShiftSet").setInt(4, timeEventMax); obj.setTimeEvent(1, 2, timeEventMax, true); } //sq_SetMyShake(obj, 10, 120); break; case 1: obj.sq_SetCurrentAnimation(ANI_FWBYKK_LIGHTNINGSHIFTATTACK02_BODY); break; case 2: obj.sq_SetCurrentAnimation(ANI_FWBYKK_LIGHTNINGSHIFTATTACK03_BODY); break; case 3: obj.sq_SetCurrentAnimation(ANI_FWBYKK_LIGHTNINGSHIFTATTACK04_BODY); obj.getVar("LightningShiftSet").setInt(1, sq_GetXPos(obj)); obj.setTimeEvent(2, 5, 28, true); break; case 4: obj.sq_SetCurrentAnimation(ANI_FWBYKK_LIGHTNINGSHIFTATTACK05_BODY); obj.getVar("LightningShiftSet").setInt(1, sq_GetXPos(obj)); obj.setTimeEvent(2, 5, 28, true); break; case 5: obj.sq_SetCurrentAnimation(ANI_FWBYKK_LIGHTNINGSHIFTATTACK06_BODY); break; case 6: obj.sq_SetCurrentAnimation(ANI_FWBYKK_LIGHTNINGSHIFTATTACK07_BODY); break; case 7: obj.sq_SetCurrentAnimation(ANI_FWBYKK_LIGHTNINGSHIFTATTACK08_BODY); // obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/skl95_bykk/lightningshift/lightningshiftattack08effect_00.ani"), 0, 0); sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/2_striker_bykk/lightningshift/lightningshiftattack08effect_00.ani", 0, 1, 0); break; } obj.getVar("LightningShiftBool").setBool(subState, true); if(subState <= 6){ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LIGHTNINGSHIFT, -1, 0, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_LIGHTNINGSHIFT01 + subState)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/2_striker_bykk/lightningshift/lightningshiftdasheffect01_00.ani", 0, 1, 0); } else { local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LIGHTNINGSHIFT, -1, 7, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_LIGHTNINGSHIFTFINISH)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); } if(subState == 4 || subState == 5){// || subState == 6 local targetNum = obj.getVar("LightningShiftTar").get_obj_vector_size(); if(targetNum > 0){ local randomNum = 0; if(targetNum > 1) randomNum = sq_getRandom(0, targetNum); if(subState == 6) randomNum = 0; if(randomNum != 0 && randomNum == obj.getVar("LightningShiftSet").getInt(0)) obj.getVar("LightningShiftSet").setInt(0, randomNum); obj.getVar("LightningShiftSet").setInt(1, sq_GetXPos(obj)); obj.getVar("LightningShiftSet").setInt(2, sq_GetYPos(obj)); obj.getVar("LightningShiftSet").setInt(3, sq_GetZPos(obj)); local timeEventMax = [14,14,14,14,15,20,20]; obj.getVar("LightningShiftSet").setInt(4, timeEventMax[subState]); local delaySum = [140,140,140,140,150,100,200]; local delay = delaySum[subState] * obj.getVar("LightningShiftSet").getInt(6) / 100; obj.setTimeEvent(1, delay.tointeger() / timeEventMax[subState], timeEventMax[subState], true); local targetObj = obj.getVar("LightningShiftTar").get_obj_vector(randomNum); local x1 = sq_GetXPos(obj), x2 = sq_GetXPos(targetObj), direction = sq_GetDirection(obj); if((x1 > x2 && direction == ENUM_DIRECTION_RIGHT) || (x1 < x2 && direction == ENUM_DIRECTION_LEFT)) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(direction)); } else{ 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); } } // local currentAni = obj.getCurrentAnimation(); //currentAni.setSpeedRate(50.0);//速度率 if(subState > 0){ if(subState < 7) obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.75, 0.75); else obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.5, 1.5); } } function onEndCurrentAni_LightningShift(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(obj.getVar("LightningShiftTar").get_obj_vector_size() < 1){ obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); return; } case 1: case 2: case 3: case 4: case 5: case 6: if(subState == 1 || subState == 3 || subState == 5){ sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); } obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(STATE_BYKK_LIGHTNINGSHIFT, STATE_PRIORITY_AUTO, true); break; case 7: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_LightningShift(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ if(sq_GetZPos(obj) > 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_IntVectPush(0); obj.sq_IntVectPush(sq_GetZPos(obj)); obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); } else{ obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); } } break; } } function onKeyFrameFlag_LightningShift(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 102: local direction = sq_GetDirection(obj); if(direction == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, 100.0); else sq_SetVelocity(obj, 0, -100.0); break; case 103: // if(subState == 2){ // } break; case 101: // case 103: // case 104: // case 105: // case 106: local targetNum = obj.getVar("LightningShiftTar").get_obj_vector_size(); if(targetNum > 0){ local randomNum = 0; if(targetNum > 1) randomNum = sq_getRandom(0, targetNum); if(flagIndex == 106) randomNum = 0; obj.getVar("LightningShiftSet").setInt(0, randomNum); obj.getVar("LightningShiftSet").setInt(1, sq_GetXPos(obj)); obj.getVar("LightningShiftSet").setInt(2, sq_GetYPos(obj)); obj.getVar("LightningShiftSet").setInt(3, sq_GetZPos(obj)); local timeEventMax = [14,20,14,14,15,20,20]; obj.getVar("LightningShiftSet").setInt(4, timeEventMax[flagIndex - 101]); local delaySum = [140,100,140,140,150,100,200]; local delay = delaySum[flagIndex - 101] * obj.getVar("LightningShiftSet").getInt(6) / 100; obj.setTimeEvent(1, delay.tointeger() / timeEventMax[flagIndex - 101], timeEventMax[flagIndex - 101], true); local targetObj = obj.getVar("LightningShiftTar").get_obj_vector(randomNum); local x1 = sq_GetXPos(obj), x2 = sq_GetXPos(targetObj), direction = sq_GetDirection(obj); if((x1 > x2 && direction == ENUM_DIRECTION_RIGHT) || (x1 < x2 && direction == ENUM_DIRECTION_LEFT)) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(direction)); } else{ obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); } break; case 201: sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/2_striker_bykk/lightningshift/lightningshiftattack06smoke_00.ani", 0, 1, 0); break; } return true; } function onTimeEvent_LightningShift(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: local readjustPos01 = 0, readjustPos02 = 0, offsetX = 0; if(obj.getSkillSubState() == 4 || obj.getSkillSubState() == 5) readjustPos01 = 50; else if(obj.getSkillSubState() == 0) offsetX = -60; else if(obj.getSkillSubState() == 6) readjustPos02 = 50; local tarNum = obj.getVar("LightningShiftSet").getInt(0); local timeEventMax = obj.getVar("LightningShiftSet").getInt(4); local targetObj = obj.getVar("LightningShiftTar").get_obj_vector(tarNum); if(targetObj){// && targetObj.getState() != STATE_DIE local direction = sq_GetDirection(obj); local vx = sq_GetUniformVelocity(obj.getVar("LightningShiftSet").getInt(1), sq_GetDistancePos(sq_GetXPos(targetObj), direction, 30 + offsetX), timeEventCount, timeEventMax); local vy = sq_GetUniformVelocity(obj.getVar("LightningShiftSet").getInt(2), sq_GetYPos(targetObj), timeEventCount, timeEventMax); local vz = sq_GetUniformVelocity(obj.getVar("LightningShiftSet").getInt(3) + readjustPos02, sq_GetZPos(targetObj) + readjustPos01, timeEventCount, timeEventMax); sq_setCurrentAxisPos(obj, 0, vx); sq_setCurrentAxisPos(obj, 1, vy); sq_setCurrentAxisPos(obj, 2, vz); } break; case 2: local v = sq_GetUniformVelocity(0, 100, timeEventCount, 28); local dstX = sq_GetDistancePos(obj.getVar("LightningShiftSet").getInt(1), sq_GetDirection(obj), v); sq_setCurrentAxisPos(obj, 0, dstX); break; } } function onEndState_LightningShift(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_LIGHTNINGSHIFT) sq_SimpleMoveToNearMovablePos(obj,200); } function onAttack_LightningShift(obj, damager, boundingBox, isStuck) { if(isStuck) return; if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; local subState = obj.getSkillSubState(); if(obj.getVar("LightningShiftBool").getBool(subState)){ obj.getVar("LightningShiftBool").setBool(subState, false); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LIGHTNINGSHIFT, -1, 8, 1.0), subtype = 1; if(subState == 7){totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LIGHTNINGSHIFT, -1, 15, 1.0);subtype = 2;} // sq_BinaryStartWrite(); // sq_BinaryWriteDword(subState); // sq_BinaryWriteDword(totalDamage); // sq_SendCreatePassiveObjectPacket(obj, passiveObjNum, 0, 0, 0, sq_GetCenterZPos(boundingBox), sq_GetDirection(obj)); createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,0,sq_GetCenterZPos(boundingBox),sq_GetDirection(obj),2,SKILL_BYKK_LIGHTNINGSHIFT,subtype,subState,totalDamage,0,0,0,0,0,0); sq_AddDrawOnlyAniFromParent(damager, "character/fighter/effect/animation/2_striker_bykk/lightningshift/lightningshifthiteffect01_00.ani", 0, 1, sq_GetCenterZPos(boundingBox)); } } ///////////////////////////////////////////////////////////////////////////女气功 //天雷分身步 function checkExecutableSkill_SkyThunderStep(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SKYTHUNDERSTEP); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_SKYTHUNDERSTEP, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_SkyThunderStep(obj) { if (!obj) return false; return true; } function onSetState_SkyThunderStep(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); print("subState = "+subState); obj.sq_StopMove(); obj.sq_ZStop(); switch(subState){ case 0: obj.sq_SetCurrentAnimation(ANI_FWBYKK_SKYTHUNDERSTEP_START_BODY); // obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_nenmaster_bykk/skythunderstep/start/skythunderstep_start_ki_fx01.ani"), 0, 0); break; case 1: obj.sq_SetCurrentAnimation(ANI_FWBYKK_SKYTHUNDERSTEP_START_RUSH_BODY); obj.getVar("skyThunderStepMove").setInt(0, sq_GetXPos(obj)); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SKYTHUNDERSTEP, -1, 0, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_SKYTHUNDERSTEPDASH)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.getVar("skyThunderStepBool").setBool(0, true); obj.sq_PlaySound("R_FT_SKY_THUNDER_STEP_01"); obj.sq_PlaySound("SKY_THUNDER_STEP_1CAST"); break; case 2: obj.sq_SetCurrentAnimation(ANI_FWBYKK_SKYTHUNDERSTEP_LOOP_BODY_MAIN); sq_flashScreen(obj,50,1200,0,76, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SKYTHUNDERSTEP, -1, 1, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_SKYTHUNDERSTEPSWEEP)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(false); obj.setTimeEvent(1, delay / 10, 9, false); sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/1_nenmaster_bykk/skythunderstep/loop/skythunderstep_loop5_front_fx02.ani", 0, -1, 0); break; case 3: obj.sq_SetCurrentAnimation(ANI_FWBYKK_SKYTHUNDERSTEP_LOOP_BODY_AFTERIMAGE); break; case 4: obj.sq_SetCurrentAnimation(ANI_FWBYKK_SKYTHUNDERSTEP_ATTRACTION_ENERGY_BODY_MAIN); sq_SetMyShake(obj, 5, 300); //`createBallEffect` 0 -1 0 //`createBallBackEffect` 0 -1 0 sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/1_nenmaster_bykk/skythunderstep/loopeffect/skythunderstep_loop_5_back_fx02.ani", 0, -1, 0); break; case 5: obj.sq_SetCurrentAnimation(ANI_FWBYKK_SKYTHUNDERSTEP_END_FT_BODY_END); // sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/1_nenmaster_bykk/skythunderstep/end/skythunderstep_end_body_shadow_normal.ani", 0, -1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/1_nenmaster_bykk/skythunderstep/end/skythunderstep_ft_shadow_end_01.ani", 0, -1, -sq_GetZPos(obj)); break; } } function onEndCurrentAni_SkyThunderStep(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: case 3: case 4: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(STATE_BYKK_SKYTHUNDERSTEP, STATE_PRIORITY_AUTO, true); break; case 5: sq_setCurrentAxisPos(obj, 2, 0); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; case 2: obj.sq_IntVectClear(); obj.sq_IntVectPush(4); obj.sq_AddSetStatePacket(STATE_BYKK_SKYTHUNDERSTEP, STATE_PRIORITY_AUTO, true); break; } } function onProc_SkyThunderStep(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: local currentAni = obj.getCurrentAnimation(); local fireT = currentAni.getDelaySum(0, 3); local stateTime = obj.sq_GetStateTimer(); local v = sq_GetAccel(0, 250, stateTime, fireT, false); local dstX = sq_GetDistancePos(obj.getVar("skyThunderStepMove").getInt(0), sq_GetDirection(obj), v); sq_setCurrentAxisPos(obj, 0, dstX); if(stateTime >= fireT && obj.getVar("skyThunderStepBool").getBool(0)){ obj.getVar("skyThunderStepBool").setBool(0, false); sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/1_nenmaster_bykk/skythunderstep/start/skythunderstep_start_windblow.ani", 0, 0, 50); } break; case 4: local currentAni = obj.getCurrentAnimation(); local fireT = currentAni.getDelaySum(0, 1); local stateTime = obj.sq_GetStateTimer(); local vz = sq_GetAccel(0, 220, stateTime, fireT, true); sq_setCurrentAxisPos(obj, 2, vz); break; case 5: local frameIndex = sq_GetCurrentFrameIndex(obj); if(frameIndex < 8) break; local currentAni = obj.getCurrentAnimation(); local fireT = currentAni.getDelaySum(0, 10); local stateTime = obj.sq_GetStateTimer(); if(frameIndex > 10){ fireT = currentAni.getDelaySum(0, 12); local vz = sq_GetAccel(30, 0, stateTime, fireT, false); sq_setCurrentAxisPos(obj, 2, vz); } else{ local vz = sq_GetAccel(220, 30, stateTime, fireT, false); sq_setCurrentAxisPos(obj, 2, vz); } break; } } function onKeyFrameFlag_SkyThunderStep(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 101: //`createStartEffect` 0 0 0 obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_nenmaster_bykk/skythunderstep/start/skythunderstep_start_ki_fx01.ani"), 0, 0); break; case 102: sq_flashScreen(obj,80,2000,0,76, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 200: //`dashToExplosion` 0 0 0 break; case 201: sq_flashScreen(obj,0,10,0,127, sq_RGB(255,255,255), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 20, 10); //`createWindEffect` 0 0 50 break; case 303: sq_SetMyShake(obj, 10, 100); //`loop1 sub Effect` 0 -1 0 sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/1_nenmaster_bykk/skythunderstep/loop/skythunderstep_loop1_shadow_fx01.ani", 0, -1, 0); obj.sq_PlaySound("SKY_THUNDER_STEP_2PUNCHING"); break; case 306: //`create sweep Illusion Object` 0 0 0 break; case 310: sq_SetMyShake(obj, 10, 100); break; case 312: //`loop2 sub Effect` 0 -1 0 sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/1_nenmaster_bykk/skythunderstep/loop/skythunderstep_loop2_shadow_fx07.ani", 0, -1, 0); obj.sq_PlaySound("SKY_THUNDER_STEP_2PUNCHING"); break; case 314: sq_SetMyShake(obj, 10, 100); break; case 320: //`loop3 sub Effect` 0 -1 0 sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/1_nenmaster_bykk/skythunderstep/loop/skythunderstep_loop3_shadow_fx13.ani", 0, -1, 0); obj.sq_PlaySound("SKY_THUNDER_STEP_2PUNCHING"); break; case 325: sq_SetMyShake(obj, 10, 100); break; case 326: //`loop4 sub Effect` 0 -1 0 sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/1_nenmaster_bykk/skythunderstep/loop/skythunderstep_loop4_shadow_fx07.ani", 0, -1, 0); obj.sq_PlaySound("SKY_THUNDER_STEP_2PUNCHING"); break; case 502: //`Sphere Effect` 0 -1 60 sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/1_nenmaster_bykk/skythunderstep/loop/skythunderstep_attraction_energy.ani", 0, -1, 60); break; case 504: sq_flashScreen(obj,300,700,0,178, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 509: //`stop sound` break; case 608: //`createExplosion` 0 0 0 break; case 610: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SKYTHUNDERSTEP, -1, 2, 1.0); createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,1,0,sq_GetDirection(obj),1,SKILL_BYKK_SKYTHUNDERSTEP,1,totalDamage,0,0,0,0,0,0,0); sq_flashScreen(obj,50,250,50,204, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 20, 500); break; } return true; } function onTimeEvent_SkyThunderStep(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: obj.resetHitObjectList(); break; case 2: sq_setCurrentAxisPos(obj, 2, 0); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onEndState_SkyThunderStep(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_SKYTHUNDERSTEP) sq_SimpleMoveToNearMovablePos(obj,200); } function onAttack_SkyThunderStep(obj, damager, boundingBox, isStuck) { if(isStuck) return; if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; } ///////////////////////////////////////////////////////////////////////////女柔道 //送葬舞步 function checkExecutableSkill_ShiningWingsFlap(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SHININGWINGSFLAP); if (isUse){ obj.sq_IntVectClear(); if(obj.getState() == 6) obj.sq_IntVectPush(10); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_SHININGWINGSFLAP, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_ShiningWingsFlap(obj) { if (!obj) return false; return true; } function onSetState_ShiningWingsFlap(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); print("subState = "+subState); obj.sq_StopMove(); obj.sq_ZStop(); switch(subState){ case 0: obj.sq_SetCurrentAnimation(ANI_FWBYKK_SHININGWINGSFLAPTRY); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_SHININGWINGSFLAPTRY)); obj.getVar("shiningWingsFlapTarget").clear_obj_vector(); obj.getVar("shiningWingsFlapTargetFixture").clear_obj_vector(); obj.sq_PlaySound("FT_BACK"); obj.sq_PlaySound("FT_HOLD"); break; case 10: obj.sq_SetCurrentAnimation(ANI_FWBYKK_SHININGWINGSFLAPTRYAIR); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_SHININGWINGSFLAPTRY)); obj.getVar("shiningWingsFlapTarget").clear_obj_vector(); obj.getVar("shiningWingsFlapTargetFixture").clear_obj_vector(); local speed = 1000.0; if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); else sq_SetVelocity(obj, 0, -speed); sq_SetZVelocity(obj,-300,-800); break; case 1://抓轰炮 obj.sq_SetCurrentAnimation(ANI_FWBYKK_SHININGWINGSFLAPATTACKSTART04_BODY); break; case 2://普攻形态 obj.sq_SetCurrentAnimation(ANI_FWBYKK_SHININGWINGSFLAPATTACKSTART01_BODY); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(0, 2); local size = obj.getVar("shiningWingsFlapTarget").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("shiningWingsFlapTarget").get_obj_vector(i); if(targetObj){ local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/fighter/4_grappler_bykk/ap_shiningwingsflap_hold.nut"); sq_MoveToAppendageForce(targetObj, obj, obj, -45, 0, 30, delay, true, addAppendage); } } } obj.setTimeEvent(1, delay, 1, false); break; case 11://空中形态 obj.sq_SetCurrentAnimation(ANI_FWBYKK_SHININGWINGSFLAPATTACKSTART03_BODY); break; case 12://空中形态 obj.sq_SetCurrentAnimation(ANI_FWBYKK_SHININGWINGSFLAPATTACKSTART03END_BODY); break; } } function onEndCurrentAni_ShiningWingsFlap(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(obj.getVar("shiningWingsFlapTargetFixture").get_obj_vector_size() > 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_SHININGWINGSFLAP, STATE_PRIORITY_AUTO, true); break; } if(obj.getVar("shiningWingsFlapTarget").get_obj_vector_size() > 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(STATE_BYKK_SHININGWINGSFLAP, STATE_PRIORITY_AUTO, true); break; } obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; case 10: if(obj.getVar("shiningWingsFlapTargetFixture").get_obj_vector_size() > 0 || obj.getVar("shiningWingsFlapTarget").get_obj_vector_size() > 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(11); obj.sq_AddSetStatePacket(STATE_BYKK_SHININGWINGSFLAP, STATE_PRIORITY_AUTO, true); break; } 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 1: case 2: case 11: case 12: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; // case 11: // obj.sq_IntVectClear(); // obj.sq_IntVectPush(subState + 1); // obj.sq_AddSetStatePacket(STATE_BYKK_SHININGWINGSFLAP, STATE_PRIORITY_AUTO, true); // break; } } function onProc_ShiningWingsFlap(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 10: if(sq_GetZPos(obj) <= 5){ obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); } break; } } function onProcCon_ShiningWingsFlap(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 2: if(obj.getVar("shiningWingsFlapBool").getBool(0) == false){ if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ obj.getVar("shiningWingsFlapBool").setBool(0, true); } } break; } } function onKeyFrameFlag_ShiningWingsFlap(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 104://普通 sq_AddDrawOnlyAniFromParent(obj, "passiveobject/1_fighter_bykk/4_grappler_bykk/animation/shiningwingsflap/shiningwingsflapattackeffect03a_07.ani", -89, 1, 0); sq_AddDrawOnlyAniFromParent(obj, "passiveobject/1_fighter_bykk/4_grappler_bykk/animation/shiningwingsflap/shiningwingsflapattackeffect03b_02.ani", -89, -2, 0); sq_flashScreen(obj,10,100,40,76,sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHININGWINGSFLAP, -1, 0, 1.0); createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,-89,0,2,sq_GetDirection(obj),4,SKILL_BYKK_SHININGWINGSFLAP,10,totalDamage,0,0,0,0,0,0,0); break; case 105: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHININGWINGSFLAP, -1, 1, 1.0); local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHININGWINGSFLAP, -1, 2, 1.0); local sub2 = 0; if(obj.getVar("shiningWingsFlapBool").getBool(0)){ obj.getVar("shiningWingsFlapBool").setBool(0, false); sub2 = 1; } createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,-125,1,0,sq_GetDirection(obj),4,SKILL_BYKK_SHININGWINGSFLAP,2,totalDamage,totalDamage2,1,sub2,0,0,0,0); break; case 110: sq_SetMyShake(obj, 3, 60); break; case 201://空中 break; case 204: sq_setCurrentAxisPos(obj, 2, 0); sq_AddDrawOnlyAniFromParent(obj, "passiveobject/1_fighter_bykk/4_grappler_bykk/animation/shiningwingsflap/shiningwingsflapattackeffect03a_07.ani", 25, 1, 0); sq_AddDrawOnlyAniFromParent(obj, "passiveobject/1_fighter_bykk/4_grappler_bykk/animation/shiningwingsflap/shiningwingsflapattackeffect03b_02.ani", 25, -2, 0); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHININGWINGSFLAP, -1, 3, 1.0); createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,25,0,2,sq_GetDirection(obj),4,SKILL_BYKK_SHININGWINGSFLAP,10,totalDamage,0,0,0,0,0,0,0); break; case 213: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHININGWINGSFLAP, -1, 4, 1.0); local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHININGWINGSFLAP, -1, 5, 1.0); createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,25,1,0,sq_GetDirection(obj),4,SKILL_BYKK_SHININGWINGSFLAP,2,totalDamage,totalDamage2,0,0,0,0,0,0); break; case 219: break; case 302://抓轰炮 break; case 305: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHININGWINGSFLAP, -1, 3, 1.0); createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,1,0,sq_GetDirection(obj),4,SKILL_BYKK_SHININGWINGSFLAP,1,totalDamage,0,0,0,0,0,0,0); break; case 309: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHININGWINGSFLAP, -1, 4, 1.0); local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHININGWINGSFLAP, -1, 5, 1.0); createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,125,1,0,sq_GetDirection(obj),4,SKILL_BYKK_SHININGWINGSFLAP,2,totalDamage,totalDamage2,0,0,0,0,0,0); break; } return true; } function onTimeEvent_ShiningWingsFlap(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(2, 3); local size = obj.getVar("shiningWingsFlapTarget").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("shiningWingsFlapTarget").get_obj_vector(i); if(targetObj){ local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/fighter/4_grappler_bykk/ap_shiningwingsflap_hold.nut"); sq_MoveToAppendageForce(targetObj, obj, obj, -89, 0, 0, delay, true, addAppendage); } } } break; } } function onEndState_ShiningWingsFlap(obj, new_state) { if(!obj) return; local subState = obj.getSkillSubState(); if(subState == 2 || subState == 0) return; if(new_state != STATE_BYKK_SKYTHUNDERSTEP){ local size = obj.getVar("shiningWingsFlapTargetFixture").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("shiningWingsFlapTargetFixture").get_obj_vector(i); if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/fighter/4_grappler_bykk/ap_shiningwingsflap_hold.nut"); } } size = obj.getVar("shiningWingsFlapTarget").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("shiningWingsFlapTarget").get_obj_vector(i); if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/fighter/4_grappler_bykk/ap_shiningwingsflap_hold.nut"); } } } } function onAttack_ShiningWingsFlap(obj, damager, boundingBox, isStuck) { if(isStuck) return; if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 10: if(sq_IsFixture(damager)) obj.getVar("shiningWingsFlapTargetFixture").push_obj_vector(damager); else if(sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager)){ obj.getVar("shiningWingsFlapTarget").push_obj_vector(damager); } local apdPath = "character/fighter/4_grappler_bykk/ap_shiningwingsflap_hold.nut"; if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, apdPath)){ 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_IsFixture(damager) && subState == 0) sq_MoveToAppendageForce(damager, obj, obj, 80, 0, damager.getZPos(), 100, true, AddAppendage); } if(subState == 10){ obj.sq_IntVectClear(); obj.sq_IntVectPush(11); obj.sq_AddSetStatePacket(STATE_BYKK_SHININGWINGSFLAP, STATE_PRIORITY_AUTO, true); } break; } }