function checkExecutableSkill_Devilslash_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_DEVILSLASH); if (isUse){ obj.sq_IsEnterSkillLastKeyUnits(SKILL_SWORDMASTER_BYKK_DEVILSLASH); obj.getVar("chargeatk_devilslash").setBool(0, false); obj.getVar("isDash_devilslash").setBool(0, false); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Devilslash_bykk(obj) { if (!obj) return false; return true; } function onSetState_Devilslash_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); local aniSet = [99,100,101,102,103,756,755]; local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD), apdPath = "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath) && !skill.isSealFunction()) aniSet = [267,268,269,270,271,758,757]; obj.sq_SetCurrentAnimation(aniSet[subState]); if(subState >= 3) obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local element = 4; local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); if(AddAppendage) element = AddAppendage.getVar("elementIndex").getInt(10); local effSet = [["effect/animation/atdevilslash/"],["nothing/","nothing/","nothing/","nothing/","nothing/","fire/","ice/","dark/","light/","nothing/"],["charge_body_1.ani","charge_body_2.ani","charge_body_3.ani","charge_body_1.ani","dash_body.ani"]]; local effectSet = ["devilslashcharge1","devilslashcharge2","devilslashcharge3","devilslashdash","devilslashmultiattack","newatdevilslashnormalfinish","newatdevilslashchargefinishbody"]; changeSwordEffect_bykk(obj, effectSet[subState], SKILL_SWORDMASTER_BYKK_DEVILSLASH); if(subState <= 4){ obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation(effSet[0][0]+effSet[1][element]+effSet[2][subState]), 0, 0); } switch(subState){ case 0: obj.sq_PlaySound("SW_COUNTERSLASH"); break; case 3: obj.getVar("devilslash").setInt(10, sq_GetXPos(obj)); obj.getVar("devilslash").setInt(11, 200); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(0, 0); obj.setTimeEvent(10, delay / 5, 15, true); break; case 4: local inputConut = obj.getRapidInputFrequency(); inputConut = inputConut.tointeger(); if(inputConut > 2) obj.getVar("chargeatk_devilslash").setBool(0, true); obj.sq_PlaySound("SW_DEVILSLASH"); obj.sq_PlaySound("DEVILSLASH_LOOP",2000); local dam = 0, min = 4, max = 5; switch(obj.getVar("charge_devilslash").getInt(10)){ case 1: dam = 1; min = 6; max = 7; break; case 2: dam = 2; min = 8; max = 9; break; } local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DEVILSLASH, -1, dam, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH).tofloat() / 100.0) + 100; local hitMax = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, min); if(obj.getVar("chargeatk_devilslash").getBool(0)) hitMax = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, max); local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, 17); if(obj.getVar("charge_devilslash").getInt(10) == 2 && obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0){ totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 2, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY))) / 100; sizeRate = sizeRate * sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 13, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY)) / 100; local apdPath = "character/atswordman/1_swordmaster/heavyswordmastery/ap_heavyswordmastery.nut"; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)){ local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true); local bufftime = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 2); addAppendage.sq_SetValidTime(bufftime); addAppendage.setEnableIsBuff(true); addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY)); CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); obj.sq_SetSuperArmorUntilTime(obj, bufftime); } } local currentAni = obj.getCurrentAnimation(); local speedRate = 5000 / currentAni.getDelaySum(0, 0); obj.getVar("develslash_multi").setInt(0, totalDamage); obj.getVar("develslash_multi").setInt(1, hitMax); obj.getVar("develslash_multi").setInt(2, sizeRate); obj.getVar("develslash_multi").setInt(3, speedRate); obj.getVar("develslash_multi").setInt(4, 0); // cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_DEVILSLASH,1,totalDamage,hitMax,4,speedRate,sizeRate,0,0,0,1); break; case 5: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DEVILSLASH, -1, 3, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH).tofloat() / 100.0) + 100; if(obj.getVar("charge_devilslash").getInt(10) > 0) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DEVILSLASH, -1, 4, 1.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 71)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setWeaponMaster_attackElement(obj); // local effectSet = [["effect/animation/atdevilslash/fire/finish2_mu.ani","effect/animation/atdevilslash/fire/finish2_slash_fire.ani"],["effect/animation/atdevilslash/ice/finish2_ice.ani","effect/animation/atdevilslash/ice/finish2_slash_ice.ani"],["effect/animation/atdevilslash/dark/finish2_dark_n.ani","effect/animation/atdevilslash/dark/finish2_dark.ani","effect/animation/atdevilslash/dark/finish2_slash_dark.ani"],["effect/animation/atdevilslash/light/finish2_light.ani","effect/animation/atdevilslash/light/finish2_slash_light.ani"],["effect/animation/atdevilslash/nothing/finish2_mu.ani","effect/animation/atdevilslash/nothing/finish2_slash_mu.ani"]]; // for(local i = 0; i < effectSet[4].len(); i++){ // obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation(effectSet[4][i]), 0, 0); // } break; case 6: // local effectSet = ["effect/animation/atdevilslash/fire/napdo_body_mu.ani","effect/animation/atdevilslash/ice/napdo_body_mu.ani","effect/animation/atdevilslash/dark/napdo_body_mu.ani","effect/animation/atdevilslash/light/napdo_body_mu.ani","effect/animation/atdevilslash/nothing/napdo_body_mu.ani"]; // obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation(effectSet[4]), 0, 0); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(0, 7); local delay2 = currentAni.getDelaySum(8, 15); local delay3 = currentAni.getDelaySum(16, 19); sq_flashScreen(obj, delay, 100, delay2, 204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; } } function onEndCurrentAni_Devilslash_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: case 3: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true); break; case 2: obj.getVar("charge_devilslash").setInt(10, 2); obj.getVar("chargeatk_devilslash").setBool(0, true); obj.sq_IntVectClear(); if(obj.getVar("isDash_devilslash").getBool(0)) obj.sq_IntVectPush(4); else obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true); break; case 4: switch(obj.getVar("charge_devilslash").getInt(10)){ case 0: case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(5); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true); break; case 2: obj.sq_IntVectClear(); obj.sq_IntVectPush(6); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true); break; } break; case 5: case 6: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onChangeSkillEffect_Devilslash_bykk(obj, skillIndex, receiveData) { if(!obj || skillIndex != 136) return; } function onEnterFrame_Devilslash_bykk(obj, frameIndex) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 6: switch(frameIndex){ case 8: // obj.stopSound(2000); // obj.sq_PlaySound("SW_DEVILSLASH_FIN"); // obj.sq_PlaySound("DEVILSLASH_EXP"); // sq_SetMyShake(obj, 8, 300); // local element = 4; // local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); // if(AddAppendage) element = AddAppendage.getVar("elementIndex").getInt(10); // local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DEVILSLASH, -1, 5, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH).tofloat() / 100.0) + 100; // local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, 18); // if(obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0){ // totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 3, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY))) / 100; // sizeRate = sizeRate * sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 13, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY)) / 100; // } // // cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,100,0,20,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_DEVILSLASH,2,totalDamage,sizeRate,element,0,0,0,0,0,1); // cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,100,0,20,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_DEVILSLASH,11,totalDamage,sizeRate,0,0,0,0,0,0,1); break; } break; } } function onAttack_Devilslash_bykk(obj, damager, boundingBox, isStuck) { if(!obj) return false; } function onEndState_Devilslash_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_SWORDMASTER_BYKK_DEVILSLASH){ sq_SimpleMoveToNearMovablePos(obj,1600); obj.stopSound(2000); blademastery_buff(obj); } } function onProcCon_Devilslash_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); local stateTime = obj.sq_GetStateTimer(); local bDownKey = obj.isDownSkillLastKey(); local currentAni = obj.getCurrentAnimation(); local currentT = sq_GetCurrentTime(currentAni); switch(subState){ case 0: case 1: case 2: if(obj.getVar("isDash_devilslash").getBool(0) == 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("isDash_devilslash").setBool(0, true); } } if(!bDownKey && stateTime >= sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, 14)){ obj.getVar("charge_devilslash").setInt(10, subState); local delaySum = currentAni.getDelaySum(false); //if(currentT >= delaySum * 70 / 100) obj.getVar("chargeatk_devilslash").setBool(0, true); obj.sq_IntVectClear(); if(obj.getVar("isDash_devilslash").getBool(0)) obj.sq_IntVectPush(4); else obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true); break; } else{ if((subState == 0 && currentT >= sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, 0)) || (subState == 1 && currentT >= sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, 1))|| (subState == 2 && currentT >= sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, 2) * 430)){ if(subState == 2){ obj.getVar("charge_devilslash").setInt(10, 2); //obj.getVar("chargeatk_devilslash").setBool(0, true); obj.sq_IntVectClear(); if(obj.getVar("isDash_devilslash").getBool(0)) obj.sq_IntVectPush(4); else obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true); break; } obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true); } } sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); break; case 3: sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); break; } } function onProc_Devilslash_bykk(obj) { if(!obj) return; } function onTimeEvent_Devilslash_bykk(obj, timeEventIndex, timeEventCount) { if (!obj) return false; switch(timeEventIndex){ case 10: local v = sq_GetUniformVelocity(0, obj.getVar("devilslash").getInt(11), timeEventCount, 15); local dstX = sq_GetDistancePos(obj.getVar("devilslash").getInt(10), obj.getDirection(), v); if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); break; case 11: switch(obj.getVar("charge_devilslash").getInt(10)){ case 0: case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(5); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true); break; case 2: obj.sq_IntVectClear(); obj.sq_IntVectPush(6); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true); break; } break; } return true; } function onKeyFrameFlag_Devilslash_bykk(obj, flagIndex) { if (!obj) return false; switch(flagIndex){ case 11: sq_flashScreen(obj, 0, 30, 270, 153, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 7, 240); break; case 21: //[OFFSET] `Create Finish` 43 0 103 obj.stopSound(2000); obj.sq_PlaySound("SW_DEVILSLASH_FIN"); obj.sq_PlaySound("DEVILSLASH_EXP"); sq_SetMyShake(obj, 8, 300); // local element = 4; // local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); // if(AddAppendage) element = AddAppendage.getVar("elementIndex").getInt(10); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DEVILSLASH, -1, 5, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH).tofloat() / 100.0); local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, 18); if(obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0){ totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 3, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY))) / 100; sizeRate = sizeRate * sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 13, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY)) / 100; } local speedRate = obj.getVar("develslash_multi").getInt(3); // cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,100,0,20,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_DEVILSLASH,2,totalDamage,sizeRate,element,0,0,0,0,0,1); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,43,0,103,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_DEVILSLASH,11,totalDamage,sizeRate,speedRate,0,0,0,0,0,1); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/10_atswordman_bykk/atdevilslash/newatdevilslashchargeattackeffect_00.ani", 43, 0, 103); break; case 31: case 32: case 33: case 34: case 35: case 36: local hitCount = obj.getVar("develslash_multi").getInt(4); local totalDamage = obj.getVar("develslash_multi").getInt(0); local hitMax = obj.getVar("develslash_multi").getInt(1); print("hitCount = "+hitCount+",,hitMax = "+hitMax); if(hitCount + 1 >= hitMax){ obj.setTimeEvent(11, 100, 1, true); break; } else obj.getVar("develslash_multi").setInt(4, hitCount + 1); local sizeRate = obj.getVar("develslash_multi").getInt(2); local speedRate = obj.getVar("develslash_multi").getInt(3); local offSet = [[51,0,56],[80,0,86],[51,0,46],[100,0,85],[61,0,56],[68,0,50]]; cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,offSet[flagIndex - 31][0],offSet[flagIndex - 31][1],offSet[flagIndex - 31][2],obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_DEVILSLASH,10,totalDamage,speedRate,sizeRate,flagIndex,0,0,0,0,1); break; } return true; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Dragonupex_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_DRAGONUPEX); if (isUse){ local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX); obj.sq_IntVectClear(); if(sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX, 20) > 0 || DRAGONUPEX_STONE > 0 || sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD, 32) > 0 || skill.isSealFunction()) obj.sq_IntVectPush(3); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DRAGONUPEX, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Dragonupex_bykk(obj) { if (!obj) return false; return true; } function onSetState_Dragonupex_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); local aniSet = [111,112,113,114]; local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD), apdPath = "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath) && !skill.isSealFunction()) aniSet = [272,274,273,275]; obj.sq_SetCurrentAnimation(aniSet[subState]); local effSet = ["dragonupexcasting","dragonupexdash","dragonupexcutting","dragonupexfrontdash"]; changeSwordEffect_bykk(obj, effSet[subState], SKILL_SWORDMASTER_BYKK_DRAGONUPEX); if(subState == 1 || subState == 3){ obj.getVar("dragonupex_move").setInt(10, sq_GetXPos(obj)); local timeEventMax = 10, moveMax = 200; if(subState == 3){timeEventMax = 30, moveMax = 300;} obj.setTimeEvent(10, 10, timeEventMax, true); obj.getVar("dragonupex_move").setInt(11, moveMax); obj.getVar("dragonupex_move").setInt(12, timeEventMax); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DRAGONUPEX, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX).tofloat() / 100.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 234)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setWeaponMaster_attackElement(obj); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atdragonup/dragonupexfrontdash_dust.ani", 0, 0, 0); } if(subState == 3){ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DRAGONUPEX, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX).tofloat() / 100.0) + 100; local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DRAGONUPEX, -1, 2, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX).tofloat() / 100.0) + 100; local hitMax = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX, 0); local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX, 17) + 30; cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,75,0,75,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_DRAGONUPEX,2,totalDamage,hitMax,totalDamage2,sizeRate,0,0,0,0,1); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,75,0,15,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_DRAGONUPEX,3,0,0,0,0,0,0,0,0,0); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atdragonup/atdragonuptalismanhandeffect_00.ani", 0, 0, 0); sq_moveWithParent(obj, pooledObj); for(local i = 1; i < 7; i++){ sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atdragonup/atdragonuptalismanbody_0"+i.tostring()+".ani", 0, 0, 0); } } } function onEndCurrentAni_Dragonupex_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DRAGONUPEX, STATE_PRIORITY_IGNORE_FORCE, true); break; case 2: case 3: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Dragonupex_bykk(obj, damager, boundingBox, isStuck) { if(!obj) return false; if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ isMagicSwordUp_Attack(obj,damager,boundingBox); } local subState = obj.getSkillSubState(); if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ if(obj.isExistTimeEvent(10)) obj.stopTimeEvent(10); if(subState == 1){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DRAGONUPEX, STATE_PRIORITY_IGNORE_FORCE, true); } } } function onEnterFrame_Dragonupex_bykk(obj, frameIndex) { if(!obj) return; } function onEndState_Dragonupex_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_SWORDMASTER_BYKK_DRAGONUPEX){ blademastery_buff(obj); sq_SimpleMoveToNearMovablePos(obj,300); } } function onKeyFrameFlag_Dragonupex_bykk(obj, flagIndex) { if (!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 2: if(flagIndex == 1000){ obj.sq_PlaySound("SW_SPOUT"); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DRAGONUPEX, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX).tofloat() / 100.0) + 100; local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DRAGONUPEX, -1, 2, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX).tofloat() / 100.0) + 100; local hitMax = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX, 0); local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX, 17); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,150,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_DRAGONUPEX,1,totalDamage,hitMax,totalDamage2,sizeRate,0,0,0,0,1); } break; } } function onTimeEvent_Dragonupex_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return; switch(timeEventIndex){ case 10: local v = sq_GetUniformVelocity(0, obj.getVar("dragonupex_move").getInt(11), timeEventCount, obj.getVar("dragonupex_move").getInt(12)); local dstX = sq_GetDistancePos(obj.getVar("dragonupex_move").getInt(10), obj.getDirection(), v); sq_setCurrentAxisPos(obj, 0, dstX); if(timeEventCount >= obj.getVar("dragonupex_move").getInt(12) && obj.getVar("dragonupex_move").getInt(12) < 30){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DRAGONUPEX, STATE_PRIORITY_IGNORE_FORCE, true); } break; } } function onProcCon_Dragonupex_bykk(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() == 1) obj.sq_SetStaticMoveInfo(0, 0, 0, false); else if (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 0) obj.sq_SetStaticMoveInfo(0, 0, 0, false); if (sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 0) obj.sq_SetStaticMoveInfo(0, 3800, -1000, false); else if (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 1) obj.sq_SetStaticMoveInfo(0, 3800, -1000, false); break; } } function onProc_Dragonupex_bykk(obj) { if(!obj) return; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Excalibur_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_EXCALIBUR); if (isUse){ obj.sq_IntVectClear(); if(obj.getWeaponSubType() == 2 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY) > 0) obj.sq_IntVectPush(11); else obj.sq_IntVectPush(10); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_EXCALIBUR, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Excalibur_bykk(obj) { if (!obj) return false; return true; } function onSetState_Excalibur_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); if(subState >= 10){ switch(subState){ case 10: obj.sq_SetCurrentAnimation(750); obj.sq_AddStateLayerAnimation(1001,obj.sq_CreateCNRDAnimation("effect/animation/10_atswordman_bykk/atexcalibur/newatexcaliburbeffect_00.ani"), 0, 0); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/10_atswordman_bykk/atexcalibur/newatexcaliburbbottom_00.ani", 0, 0, 0); sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); obj.sq_SetCurrentAttackInfo(241); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_EXCALIBUR, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR).tofloat() / 100.0); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); break; case 11: obj.sq_SetCurrentAnimation(751); obj.sq_SetCurrentAttackInfo(243); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_EXCALIBUR, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR).tofloat() / 100.0); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.sq_PlaySound("SW_EXCALIBUR"); break; } return; } obj.sq_SetStaticMoveInfo(0, 20 * (3 - subState), 30 * (3 - subState), false); obj.sq_SetMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL); local aniSet = [96,97,98]; local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD), apdPath = "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath) && !skill.isSealFunction()) aniSet = [276,277,278]; local atkSet = [66,67,68]; obj.sq_SetCurrentAnimation(aniSet[subState]); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.sq_SetCurrentAttackInfo(atkSet[subState]); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_EXCALIBUR, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR).tofloat() / 100.0) + 100; sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setWeaponMaster_attackElement(obj); local effSet = [["effect/animation/atexcalibur/excalibur1_fire_slash_fire.ani","effect/animation/atexcalibur/excalibur1_ice_slash_ice.ani","effect/animation/atexcalibur/excalibur1_dark_slash_dark.ani","effect/animation/atexcalibur/excalibur1_light_slash_light.ani","effect/animation/atexcalibur/excalibur1_mu_slash_mu.ani"],["effect/animation/atexcalibur/excalibur2_fire_slash_fire.ani","effect/animation/atexcalibur/excalibur2_ice_slash_ice.ani","effect/animation/atexcalibur/excalibur2_dark_slash_dark.ani","effect/animation/atexcalibur/excalibur2_light_slash_light.ani","effect/animation/atexcalibur/excalibur2_mu_slash_mu.ani"],["effect/animation/atexcalibur/excalibur3_fire_slash_fire.ani","effect/animation/atexcalibur/excalibur3_ice_slash_ice.ani","effect/animation/atexcalibur/excalibur3_dark_slash_dark.ani","effect/animation/atexcalibur/excalibur3_light_slash_light.ani","effect/animation/atexcalibur/excalibur3_mu_slash_mu.ani"]]; local element = 4; local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); if(AddAppendage) element = AddAppendage.getVar("elementIndex").getInt(10); obj.sq_AddStateLayerAnimation(1001,obj.sq_CreateCNRDAnimation(effSet[subState][element]), 0, 0); //if(subState == 2) obj.sq_PlaySound("SW_EXCALIBUR"); } function onEndCurrentAni_Excalibur_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: case 10: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_EXCALIBUR, STATE_PRIORITY_IGNORE_FORCE, true); break; case 2: case 11: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Excalibur_bykk(obj, damager, boundingBox, isStuck) { if(!obj) return false; if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ isMagicSwordUp_Attack(obj,damager,boundingBox); } } function onEnterFrame_Excalibur_bykk(obj, frameIndex) { if(!obj) return; } function onEndState_Excalibur_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_SWORDMASTER_BYKK_EXCALIBUR){ blademastery_buff(obj); } } function onProcCon_Excalibur_bykk(obj) { if(!obj) return; if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 1) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 0)) obj.sq_SetStaticMoveInfo(0, 0, 0, false); } function onProc_Excalibur_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); } function onKeyFrameFlag_Excalibur_bykk(obj, flagIndex) { if (!obj) return; switch(flagIndex){ case 1: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_EXCALIBUR, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR).tofloat() / 100.0) + 100; local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_EXCALIBUR, -1, 2, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR).tofloat() / 100.0) + 100; local element = 4; local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); if(AddAppendage) element = AddAppendage.getVar("elementIndex").getInt(10); local baseX = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR, 2) - 50; local randomX = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR, 3), randomY = 35; local createMax = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR, 4); local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR, 9); local sub = 0, baseT = 0; if(createMax > 8) baseT = baseT * 8 / createMax; if(obj.getWeaponSubType() == 2 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY) > 0){ sub = 1 local skillLevel = sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY); randomX = randomX * (100 - sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 12, skillLevel)) / 100; randomY = randomY * (100 - sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 12, skillLevel)) / 100; sizeRate = sizeRate * sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 3, skillLevel) / 100; totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 6, skillLevel)) / 100; totalDamage2 = totalDamage2 * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 6, skillLevel)) / 100; baseT = 0; cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0 - sizeRate,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_EXCALIBUR,3,totalDamage2,sizeRate,0,0,0,0,0,0,1); } for(local i = 0; i < createMax; i++){ local x = baseX + sq_getRandom(-randomX, randomX), y = sq_getRandom(-randomY, randomY); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,x,y,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_EXCALIBUR,1,totalDamage,element,(i + 1) * baseT,totalDamage2,sub,0,0,0,1); } break; case 11: sq_SetMyShake(obj, 5, 120); break; case 12: obj.sq_SetCurrentAttackInfo(242); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_EXCALIBUR, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR).tofloat() / 100.0); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 21: sq_SetMyShake(obj, 8, 240); //[OFFSET] `create explosion` 150 0 0 local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_EXCALIBUR, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR).tofloat() / 100.0); local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR, 9); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,150,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_EXCALIBUR,10,totalDamage,sizeRate,0,0,0,0,0,0,1); break; case 22: sq_flashScreen(obj, 0, 40, 320, 153, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; } } function onTimeEvent_Excalibur_bykk(obj, timeEventIndex, timeEventCount) {} //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Halfmoon_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_HALFMOON); if (isUse){ obj.getVar("halfmoon_max").setBool(0, false); obj.getVar("halfmoon_bool").setBool(0, false); obj.getVar("halfmoon_bool").setBool(1, false); obj.sq_IsEnterSkillLastKeyUnits(SKILL_SWORDMASTER_BYKK_HALFMOON); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_HALFMOON, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Halfmoon_bykk(obj) { if (!obj) return false; return true; } function onSetState_Halfmoon_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); local aniSet = [90,92,91]; local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()) aniSet = [282,284,283]; switch(subState){ case 0: obj.sq_SetCurrentAnimation(aniSet[subState]); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athalfmoon/attack_dust.ani", 0, -1, 0); changeSwordEffect_bykk(obj, "halfmoon1", SKILL_SWORDMASTER_BYKK_HALFMOON); if(obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0) sq_SetCustomDamageType(obj, true, 1); obj.getVar("halfmoonBool").setBool(0, false); obj.getVar("halfmoonBool").setBool(1, false); break; case 1: obj.sq_SetCurrentAnimation(aniSet[subState]); changeSwordEffect_bykk(obj, "halfmoon3", SKILL_SWORDMASTER_BYKK_HALFMOON); break; case 2: obj.sq_SetCurrentAnimation(aniSet[subState]); changeSwordEffect_bykk(obj, "halfmoon2", SKILL_SWORDMASTER_BYKK_HALFMOON); obj.sq_PlaySound("HALFMOON"); obj.sq_PlaySound("SW_HALFMOON"); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_HALFMOON, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_HALFMOON).tofloat() / 100.0) + 100; local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_HALFMOON, 10); local hitMax = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_HALFMOON, 3); if(obj.getVar("halfmoon_max").getBool(0)){ totalDamage = totalDamage * (100 + sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_HALFMOON, 5)) / 100; if(obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0){ totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 1, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY))) / 100; totalDamage = totalDamage * hitMax; hitMax = 1; sizeRate = sizeRate * sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 13, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY)) / 100; local apdPath = "character/atswordman/1_swordmaster/heavyswordmastery/ap_heavyswordmastery.nut"; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)){ local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true); local bufftime = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 2); addAppendage.sq_SetValidTime(bufftime); addAppendage.setEnableIsBuff(true); addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY)); CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); obj.sq_SetSuperArmorUntilTime(obj, bufftime); } } } local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(1, 1); local speedRate = 6000 / delay; cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_HALFMOON,1,totalDamage,sizeRate,speedRate,hitMax,0,0,0,0,1); local movespeed = 500; if(obj.getVar("halfmoon_max").getBool(0)) movespeed = 600; obj.getVar("halfmoon_move").setInt(10, movespeed); if(obj.getVar("halfmoonBool").getBool(1)) break; obj.sq_SetStaticMoveInfo(0, movespeed, movespeed, false); obj.sq_SetMoveDirection(obj.getDirection() , ENUM_DIRECTION_NEUTRAL); break; } } function onEndCurrentAni_Halfmoon_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_HALFMOON, STATE_PRIORITY_IGNORE_FORCE, true); break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Halfmoon_bykk(obj, damager, boundingBox, isStuck) { if(!obj) return false; if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ isMagicSwordUp_Attack(obj,damager,boundingBox); } // local subState = obj.getSkillSubState(); // MagicswordupOccur(obj, damager, boundingBox, isStuck); // MagicSword_BasiconAttack(obj, damager, boundingBox, isStuck); } function onEnterFrame_Halfmoon_bykk(obj, frameIndex) { if(!obj) return; } function onEndState_Halfmoon_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_SWORDMASTER_BYKK_HALFMOON){ if(obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0) sq_SetCustomDamageType(obj, true, 0); blademastery_buff(obj); } } function onProcCon_Halfmoon_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: if(obj.getVar("halfmoonBool").getBool(0) == 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("halfmoonBool").setBool(0, true); obj.getVar("halfmoonBool").setBool(1, true); } } local bDownKey = obj.isDownSkillLastKey(); local stateTime = obj.sq_GetStateTimer(); local minTime = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_HALFMOON, 4); if(!bDownKey && stateTime > minTime){ local maxTime = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HALFMOON, 1, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HALFMOON)); if(subState == 1) maxTime = 0; if(stateTime > maxTime){ obj.getVar("halfmoon_max").setBool(0, true); } obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_HALFMOON, STATE_PRIORITY_IGNORE_FORCE, true); } break; } } function onProc_Halfmoon_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 2: if(obj.getVar("halfmoonBool").getBool(1)) break; if(obj.getVar("halfmoon_bool").getBool(0) == false){ if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ local movespeed = obj.getVar("halfmoon_move").getInt(10) * 2 / 5; obj.sq_SetStaticMoveInfo(1, movespeed, movespeed, false); obj.sq_SetMoveDirection(obj.getDirection() , ENUM_DIRECTION_UP); obj.getVar("halfmoon_bool").setBool(0, true); } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ local movespeed = obj.getVar("halfmoon_move").getInt(10) * 2 / 5; obj.sq_SetStaticMoveInfo(1, movespeed, movespeed, false); obj.sq_SetMoveDirection(obj.getDirection() , ENUM_DIRECTION_DOWN); obj.getVar("halfmoon_bool").setBool(0, true); } } if(obj.getVar("halfmoon_bool").getBool(1) == false){ if ((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 0) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 1)){ obj.getVar("halfmoon_bool").setBool(1, true); } else if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 1) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 0)){ local movespeed = obj.getVar("halfmoon_move").getInt(10); obj.sq_SetStaticMoveInfo(0, -movespeed, -movespeed, false); obj.sq_SetMoveDirection(obj.getDirection() , ENUM_DIRECTION_NEUTRAL); obj.getVar("halfmoon_bool").setBool(1, true); } } break; } } function onKeyFrameFlag_Halfmoon_bykk(obj, flagIndex) { if (!obj) return; } function onTimeEvent_Halfmoon_bykk(obj, timeEventIndex, timeEventCount) {} //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_fusionblade_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_FUSIONBLADE); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_FUSIONBLADE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_fusionblade_bykk(obj) { if (!obj) return false; return true; } function onSetState_fusionblade_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); local aniSet = [740,741]; obj.sq_SetCurrentAnimation(aniSet[subState]); switch(subState){ case 0:// obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/atfusionblade/atfusionbladepiercingfront_00.ani"), 0, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atfusionblade/atfusionbladehitwavefront_00.ani", 250, 0, 75); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(0, 10); obj.getVar("fusionblade").setInt(10, sq_GetXPos(obj)); obj.setTimeEvent(1, delay, 1, false); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_FUSIONBLADE, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_FUSIONBLADE).tofloat() / 100.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 235)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setWeaponMaster_attackElement(obj); sq_flashScreen(obj, 720, 600, 200, 216, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 1: local appendage = obj.getVar().getAppendage(0); if(appendage) appendage.setValid(false); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_FUSIONBLADE, -1, 2, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_FUSIONBLADE).tofloat() / 100.0) + 100; local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_FUSIONBLADE, 12); sq_SetMyShake(obj, 15, 60); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,262,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_FUSIONBLADE,1,totalDamage,sizeRate,0,0,0,0,0,0,1); break; } } function onEndCurrentAni_fusionblade_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_FUSIONBLADE, STATE_PRIORITY_IGNORE_FORCE, true); break; case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_fusionblade_bykk(obj, damager, boundingBox, isStuck) { if(!obj) return false; if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ isMagicSwordUp_Attack(obj,damager,boundingBox); } } function onEnterFrame_fusionblade_bykk(obj, frameIndex) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: switch(frameIndex){ case 4: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_FUSIONBLADE, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_FUSIONBLADE).tofloat() / 100.0) + 100; local angle = [0,-5,-10,-15]; local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(0, 10); local delay2 = currentAni.getDelaySum(11, 13); for(local i = 0; i < 4; i++){ cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,-50,0,(i+1)*50,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_FUSIONBLADE,3,i,delay,i*delay2,angle[i],totalDamage,0,0,0,1); } break; case 12: sq_SetMyShake(obj, 5, 200); local appendage = sq_AttractToMe(obj, 500, 262, 1000); obj.getVar().setAppendage(0,appendage);//设置ap break; case 14: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atfusionblade/atfusionbladestartaurafront_00.ani", 250, 0, 75); break; } break; } } function onEndState_fusionblade_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_SWORDMASTER_BYKK_FUSIONBLADE){ local appendage = obj.getVar().getAppendage(0); if(appendage) appendage.setValid(false); blademastery_buff(obj); } } function onProcCon_fusionblade_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: local frameIndex = sq_GetCurrentFrameIndex(obj); if(frameIndex < 11 && obj.getVar("fusionblade").getBool(0) == false){ 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("fusionblade").setBool(0, true); } break; } } function onProc_fusionblade_bykk(obj) { if(!obj) return; } function onKeyFrameFlag_fusionblade_bykk(obj, flagIndex) { if (!obj) return; } function onTimeEvent_fusionblade_bykk(obj, timeEventIndex, timeEventCount) { switch(timeEventIndex){ case 1: local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(11, 15); obj.setTimeEvent(2, delay / 20, 20, false); break; case 2: local moveX = 100; if(obj.getVar("fusionblade").getBool(0)) moveX = 180; local v = sq_GetUniformVelocity(0, moveX, timeEventCount, 20); local dstX = sq_GetDistancePos(obj.getVar("fusionblade").getInt(10), obj.getDirection(), v); if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); break; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Illusionblade_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Illusionblade_bykk(obj) { if (!obj) return false; return true; } function onSetState_Illusionblade_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); local aniSet = [82,83]; local effSet = ["illusionblade","illusionblade2"]; local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()) aniSet = [285,286]; obj.sq_SetCurrentAnimation(aniSet[subState]); changeSwordEffect_bykk(obj, effSet[subState], SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Illusionblade_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE).tofloat() / 100.0) + 100; local hitMax = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE, -1, 1, 1.0) + 100; local speedRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE, 1); if(obj.getWeaponSubType() == 2){ local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE, -1, 2, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE).tofloat() / 100.0) + 100; totalDamage2 = totalDamage2 * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 5, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY))) / 100; local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE, 1) * sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 2, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY)) / 100; cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE,2,totalDamage,hitMax,totalDamage2,sizeRate,speedRate,0,0,0,1); } else cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE,1,totalDamage,hitMax,speedRate,0,0,0,0,0,1); obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE, STATE_PRIORITY_IGNORE_FORCE, true); break; case 1: blademastery_buff(obj); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onTimeEvent_Illusionblade_bykk(obj, timeEventIndex, timeEventCount) {} //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Jackcatch_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_JACKCATCH); if (isUse){ obj.getVar("jackCatch_tar").clear_obj_vector(); obj.sq_IntVectClear(); if(sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_JACKCATCH, 11) > 0 || JACKCATCH_STONE > 0 || sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD, 33) > 0) obj.sq_IntVectPush(7); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_JACKCATCH, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Jackcatch_bykk(obj) { if (!obj) return false; return true; } function onSetState_Jackcatch_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); obj.sq_ZStop(); local aniSet = [133,134,128,129,130,131,132,127]; local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD), apdPath = "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath) && !skill.isSealFunction()) aniSet = [293,294,300,298,299,295,297,292]; obj.sq_SetCurrentAnimation(aniSet[subState]); local effSet = ["jackcatchcast","jackcatchslash","jackcatch_light","jackcatch_fire","jackcatch_ice","jackcatch_dark","jackcatch_finish","jackcatch"]; changeSwordEffect_bykk(obj, effSet[subState], SKILL_SWORDMASTER_BYKK_JACKCATCH); local soundSet = ["","R_REQUIEM_ATK","R_REQUIEM_ATK","R_REQUIEM_ATK","R_REQUIEM_ATK","R_REQUIEM_ATK","","SW_REQUIEM"]; if(soundSet[subState] != "") obj.sq_PlaySound(soundSet[subState]); obj.getVar("jackcatch_move").setInt(10, sq_GetXPos(obj)); obj.getVar("jackcatch_move").setInt(11, sq_GetYPos(obj)); obj.getVar("jackcatch_move").setInt(12, sq_GetZPos(obj)); if(subState > 1 && subState <= 6){ local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(0,0); local speedRate = 80.0 / delay.tofloat(); local time = (10.0 / speedRate).tointeger(); obj.setTimeEvent(1, time, 10, true); } switch(subState){ case 0: 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 delay = currentAni.getDelaySum(0,0); local speedRate = 10000 / delay; cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,250,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_JACKCATCH,1,speedRate,0,0,0,0,0,0,0,0); local baseX = [0,65,-65,0], baseY = [0,60,-60,0]; for(local i = 0; i < 4; i++){ cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,250 + baseX[i],baseY[i],0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_JACKCATCH,2,i,speedRate,0,0,0,0,0,0,0); } break; case 1: obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.5, 1.5); break; case 2: case 3: case 4: case 5: case 6: obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.75, 0.75); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_JACKCATCH, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_JACKCATCH).tofloat() / 100.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 75)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setWeaponMaster_attackElement(obj); local size = obj.getVar("jackCatch_tar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("jackCatch_tar").get_obj_vector(i); if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); } } local inputConut = obj.getRapidInputFrequency(); inputConut = inputConut.tointeger(); if(inputConut > 2){ local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(180.0); } break; case 7: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_JACKCATCH, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_JACKCATCH).tofloat() / 100.0) + 100; totalDamage = totalDamage / 2; cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,250,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_JACKCATCH,4,1600,0,0,0,0,0,0,0,0); local baseX = [0,65,-65,0], baseY = [0,60,-60,0], moveX = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 250), moveY = sq_GetYPos(obj); for(local i = 0; i < 4; i++){ cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,250,0,300,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_JACKCATCH,5,totalDamage,i,moveX,moveY,0,0,0,0,1); } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); break; } } function onEndCurrentAni_Jackcatch_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: case 2: case 3: case 4: case 5: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_JACKCATCH, STATE_PRIORITY_IGNORE_FORCE, true); break; case 6: local effectObj = obj.getVar("jackCatch_circle").get_obj_vector(0); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); colObj.addSetStatePacket(22, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); } case 7: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Jackcatch_bykk(obj, damager, boundingBox, isStuck) { if(!obj) return false; if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ isMagicSwordUp_Attack(obj,damager,boundingBox); } } function onEnterFrame_Jackcatch_bykk(obj, frameIndex) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 6: if(frameIndex == 7){ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_JACKCATCH, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_JACKCATCH).tofloat() / 100.0) + 100; local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_JACKCATCH, 3); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,1,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_JACKCATCH,3,totalDamage,sizeRate,0,0,0,0,0,0,1); sq_SetMyShake(obj, 6, 200); } break; } } function onEndState_Jackcatch_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_SWORDMASTER_BYKK_JACKCATCH){ blademastery_buff(obj); sq_SimpleMoveToNearMovablePos(obj,1600); local size = obj.getVar("jackCatch_tar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("jackCatch_tar").get_obj_vector(i); if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/1_swordmaster/jackcatch/ap_jackcatch.nut"); } } local VarName = ["jackCatch_circle_light","jackCatch_circle_fire","jackCatch_circle_ice","jackCatch_circle_dark"]; for(local i = 0; i < VarName.len(); i++){ local effectObj = obj.getVar(VarName[i]).get_obj_vector(0); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); colObj.setValid(false); } } local effectObj = obj.getVar("jackCatch_circle").get_obj_vector(0); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); colObj.addSetStatePacket(22, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); } } } function onProc_Jackcatch_bykk(obj) { if(!obj) return; } function onKeyFrameFlag_Jackcatch_bykk(obj, flagIndex) { if(!obj) return false; } function onTimeEvent_Jackcatch_bykk(obj, timeEventIndex, timeEventCount) { switch(timeEventIndex){ case 1: local baseX = obj.getVar("jackcatch_move").getInt(10), baseY = obj.getVar("jackcatch_move").getInt(11); local moveX = [0,0,480,-445,275,-110,78], moveY = [0,0,-20,40,40,-120,60], moveZ = 150; local subState = obj.getSkillSubState(); local vx = sq_GetUniformVelocity(0, moveX[subState], timeEventCount, 10); local vy = sq_GetUniformVelocity(0, moveY[subState], timeEventCount, 10); if(subState == 6) moveZ = 0; local vz = sq_GetUniformVelocity(sq_GetZPos(obj), moveZ, timeEventCount, 10); local dstX = sq_GetDistancePos(baseX, obj.getDirection(), vx); sq_setCurrentAxisPos(obj, 0, dstX); sq_setCurrentAxisPos(obj, 1, baseY + vy); sq_setCurrentAxisPos(obj, 2, vz); if(timeEventCount >= 10){ local VarName = ["","","jackCatch_circle_light","jackCatch_circle_fire","jackCatch_circle_ice","jackCatch_circle_dark"]; switch(subState){ case 2: case 3: case 4: case 5: local effectObj = obj.getVar(VarName[subState]).get_obj_vector(0); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); colObj.addSetStatePacket(22, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); } break; } } break; case 2: local vz = sq_GetUniformVelocity(obj.getVar("jackcatch_move").getInt(12), 0, timeEventCount, 10); sq_setCurrentAxisPos(obj, 2, vz); break; } } function onProcCon_Jackcatch_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: case 2: case 3: case 4: case 5: sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); break; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Laevateinn_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_LAEVATEINN); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_LAEVATEINN, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Laevateinn_bykk(obj) { if (!obj) return false; return true; } function onSetState_Laevateinn_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_PlaySound("SW_LAEVATEINN"); obj.sq_PlaySound("LAEVATEINN_CAST"); local aniSet = 144; local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD), apdPath = "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath) && !skill.isSealFunction()) aniSet = 229; obj.sq_SetCurrentAnimation(aniSet); changeSwordEffect_bykk(obj, "atlaevateinn", SKILL_SWORDMASTER_BYKK_LAEVATEINN); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.75, 0.75); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_LAEVATEINN, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_LAEVATEINN).tofloat() / 100.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 78)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setWeaponMaster_attackElement(obj); obj.sq_AddStateLayerAnimation(-10001,obj.sq_CreateCNRDAnimation("effect/animation/atlaevateinn/back_02.ani"), 0, 0); obj.getVar("Laevateinn_target").clear_obj_vector(); local objectManager = obj.getObjectManager(); local apdPath = "character/atswordman/1_swordmaster/laevateinn/ap_laevateinn.nut"; local holdTime = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_LAEVATEINN, 0) * 10; for(local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ local object = objectManager.getCollisionObject(i); if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) <= 1200 && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= 400){ if(!obj.getVar("Laevateinn_target").is_obj_vector(object)) obj.getVar("Laevateinn_target").push_obj_vector(object); local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(object, obj, -1, false, apdPath, true); sq_HoldAndDelayDie(object, obj, true, true, true, 200, 300, ENUM_DIRECTION_NEUTRAL, addAppendage); addAppendage.sq_SetValidTime(holdTime); } } sq_SendMessage(obj, 0, 1, 0); break; } } function onEndCurrentAni_Laevateinn_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Laevateinn_bykk(obj, damager, boundingBox, isStuck) { if(!obj) return false; } function onEndState_Laevateinn_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_SWORDMASTER_BYKK_LAEVATEINN){ // local flashScreenObj = obj.getVar().getObject(0); // if(flashScreenObj){ // local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); // if(pflashScreen) pflashScreen.fadeOut(); // } blademastery_buff(obj); // local apdPath = "character/atswordman/1_swordmaster/laevateinn/ap_laevateinn.nut"; // local size = obj.getVar("Laevateinn_target").get_obj_vector_size(); // if(size > 0){ // for(local i = 0; i < size; i++){ // local targetObj = obj.getVar("Laevateinn_target").get_obj_vector(i); // if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, apdPath); // } // } sq_SendMessage(obj, 0, 0, 0); } } function onEnterFrame_Laevateinn_bykk(obj, frameIndex) { if(!obj) return; local subState = obj.getSkillSubState(); switch(frameIndex){ case 0: sq_SetMyShake(obj, 2, 150); break; case 1: // `create wave` -2 0 -1 break; case 5: sq_SetMyShake(obj,2,1500); break; case 10: sq_flashScreen(obj,0,80,0,127,sq_RGB(255,255,255),GRAPHICEFFECT_NONE,ENUM_DRAWLAYER_BOTTOM); break; case 18: sq_SetMyShake(obj,10,100); break; } } function onKeyFrameFlag_Laevateinn_bykk(obj, flagIndex) { if (!obj) return; if(flagIndex == 1){ obj.sq_PlaySound("R_SW_LAEVATEINN_FIN"); obj.sq_PlaySound("LAEVATEINN"); sq_flashScreen(obj,0,100,0,255,sq_RGB(255,255,255),GRAPHICEFFECT_NONE,ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 10, 350); // `attack` 23 0 -31 local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(26,26); local speedRate = 12000 / delay; cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,-2,0,-1,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_LAEVATEINN,1,speedRate,0,0,0,0,0,0,0,0); local apdPath = "character/atswordman/1_swordmaster/laevateinn/ap_laevateinn.nut"; local size = obj.getVar("Laevateinn_target").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("Laevateinn_target").get_obj_vector(i); if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); } } } } function onTimeEvent_Laevateinn_bykk(obj, timeEventIndex, timeEventCount) {} function onProcCon_Laevateinn_bykk(obj) { if(!obj) return; } function onProc_Laevateinn_bykk(obj) { if(!obj) return; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Magicswordshoot_bykk(obj) { if(!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT); if(isUse){ if(sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 6) < 1 || MAGICSWORDSHOOT_STONE < 1) obj.sq_IsEnterSkillLastKeyUnits(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Magicswordshoot_bykk(obj) { if (!obj) return false; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) return false; return true; } function onSetState_Magicswordshoot_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); local element = 4; local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); if(addAppendage) element = addAppendage.getVar("elementIndex").getInt(10); local aniSet = [[115,116,117],[118,119,120],[121,122,123],[124,125,126]]; local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD), apdPath = "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath) && !skill.isSealFunction()) aniSet = [[306,304,305],[309,307,308],[303,301,302],[312,311,310]]; obj.sq_SetCurrentAnimation(aniSet[element][subState]); local effSet = [["magicswordshot_"],["fire","ice","dark","light"],["_start","_loop","_shoot"]]; changeSwordEffect_bykk(obj, effSet[0]+effSet[1][element]+effSet[2][subState], SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT); local effSet_front = [ ["effect/animation/atmagicswordshoot/fire/01_ready/magicswordshot_ready_fire_body.ani", "effect/animation/atmagicswordshoot/ice/01_ready/magicswordshot_ready_frozen_body.ani", "effect/animation/atmagicswordshoot/dark/01_ready/magicswordshot_ready_shadow_body.ani", "effect/animation/atmagicswordshoot/light/01_ready/magicswordshot_ready_light_body.ani"], ["effect/animation/atmagicswordshoot/fire/02_chargeloop/magicswordshot_ready_loop_fire_front.ani", "effect/animation/atmagicswordshoot/ice/02_chargeloop/magicswordshot_ready_loop_frozen_front.ani", "effect/animation/atmagicswordshoot/dark/02_chargeloop/magicswordshot_ready_loop_shadow_front.ani", "effect/animation/atmagicswordshoot/light/02_chargeloop/magicswordshot_ready_loop_light_front.ani"], ["effect/animation/atmagicswordshoot/fire/03_shoot/magicswordshot_shoot_fire.ani", "effect/animation/atmagicswordshoot/ice/03_shoot/magicswordshot_shoot_frozen.ani", "effect/animation/atmagicswordshoot/dark/03_shoot/magicswordshot_shoot_shadow.ani", "effect/animation/atmagicswordshoot/light/03_shoot/magicswordshot_shoot_light.ani"] ]; local effSet_back = ["effect/animation/atmagicswordshoot/fire/02_chargeloop/magicswordshot_ready_loop_fire_back.ani", "effect/animation/atmagicswordshoot/ice/02_chargeloop/magicswordshot_ready_loop_frozen_back.ani", "effect/animation/atmagicswordshoot/dark/02_chargeloop/magicswordshot_ready_loop_shadow_back.ani", "effect/animation/atmagicswordshoot/light/02_chargeloop/magicswordshot_ready_loop_light_back.ani"]; switch(subState){ case 0: obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation(effSet_front[subState][element]), 0, 0); break; case 1: obj.sq_AddStateLayerAnimation(1001,obj.sq_CreateCNRDAnimation(effSet_front[subState][element]), 0, 0); obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation(effSet_back[element]), 0, 0); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, -1, 2, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT).tofloat() / 100.0) + 100; local atkIndex = [116,119,125,122]; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex[element])); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setWeaponMaster_attackElement(obj); obj.setTimeEvent(1, 100, -1, false); break; case 2: obj.removeAllTimeEvent(); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation(effSet_front[subState][element]), 0, 0); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, -1, 2, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT).tofloat() / 100.0) + 100; local hitMax = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 2); local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, -1, 4, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT).tofloat() / 100.0) + 100; switch(element){ case 0: totalDamage2 = totalDamage2 + obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 5, 1.0) + 100; break; case 1: totalDamage2 = totalDamage2 + obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 1, 1.0) + 100; break; case 2: totalDamage2 = totalDamage2 + obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 0, 1.0) + 100; break; case 3: totalDamage2 = totalDamage2 + obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 10, 1.0) + 100; break; } local loadSlot = obj.sq_GetSkillLoad(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT); if(loadSlot){ local loadnumber = loadSlot.getRemainLoadNumber(); if(loadnumber > 0){ totalDamage = totalDamage * (100 + sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 1) * loadnumber) / 100; totalDamage2 = totalDamage2 * (100 + sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 1) * loadnumber) / 100; if(loadnumber < sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 0)) loadSlot.decreaseLoadCount(loadnumber); else loadSlot.decreaseLoadCount(sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 0)); } } local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(0,2); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT,1,totalDamage,element,hitMax,totalDamage2,delay,0,0,0,1); break; } } function onEndCurrentAni_Magicswordshoot_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, STATE_PRIORITY_IGNORE_FORCE, true); break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Magicswordshoot_bykk(obj, damager, boundingBox, isStuck) { if(!obj) return false; } function onEnterFrame_Magicswordshoot_bykk(obj, frameIndex) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: switch(frameIndex){ case 0: obj.sq_PlaySound("SW_SWORDSHOOT_01"); local element = 4; local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); if(addAppendage) element = addAppendage.getVar("elementIndex").getInt(10); switch(element){ case 0: obj.sq_PlaySound("SWORDSHOOT_CAST_FIRE"); break; case 1: obj.sq_PlaySound("SWORDSHOOT_CAST_ICE"); break; case 2: obj.sq_PlaySound("SWORDSHOOT_CAST_DARK"); break; case 3: obj.sq_PlaySound("SWORDSHOOT_CAST_LIGHT"); break; } break; case 1: local element = 4; local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); if(addAppendage) element = addAppendage.getVar("elementIndex").getInt(10); switch(element){ case 0: sq_flashScreen(obj,1,1,50,76,sq_RGB(255,69,0),GRAPHICEFFECT_NONE,ENUM_DRAWLAYER_BOTTOM); break; case 1: sq_flashScreen(obj,1,1,50,76,sq_RGB(65,105,225),GRAPHICEFFECT_NONE,ENUM_DRAWLAYER_BOTTOM); break; case 2: sq_flashScreen(obj,1,1,50,76,sq_RGB(192,192,192),GRAPHICEFFECT_NONE,ENUM_DRAWLAYER_BOTTOM); break; case 3: sq_flashScreen(obj,1,1,50,76,sq_RGB(255,255,224),GRAPHICEFFECT_NONE,ENUM_DRAWLAYER_BOTTOM); break; } sq_SetMyShake(obj, 2, 360); break; } break; case 1: sq_SetMyShake(obj, 2, 240) break; } } function onEndState_Magicswordshoot_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT){ blademastery_buff(obj); } } function onKeyFrameFlag_Magicswordshoot_bykk(obj, flagIndex) { if (!obj) return; if(obj.getSkillSubState() == 2 && flagIndex == 1){ obj.sq_PlaySound("SW_SWORDSHOOT_02"); obj.sq_PlaySound("SWORDSHOOT"); sq_SetMyShake(obj, 4, 200); } } function onTimeEvent_Magicswordshoot_bykk(obj, timeEventIndex, timeEventCount) { switch(timeEventIndex){ case 1: obj.resetHitObjectList(); break; } } function onProcCon_Magicswordshoot_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: if(sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 6) > 0 || MAGICSWORDSHOOT_STONE > 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT,STATE_PRIORITY_IGNORE_FORCE, true); break; } local bDownKey = obj.isDownSkillLastKey(); local currentAni = obj.getCurrentAnimation(); local currentT = sq_GetCurrentTime(currentAni); local MaxTime = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 9); if(!bDownKey || currentT >= MaxTime){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT,STATE_PRIORITY_IGNORE_FORCE, true); } break; } } function onProc_Magicswordshoot_bykk(obj) { if(!obj) return; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Overdrive_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_OVERDRIVE); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_OVERDRIVE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Overdrive_bykk(obj) { if (!obj) return false; return true; } function onSetState_Overdrive_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: local aniSet = [81]; local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD), apdPath = "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath) && !skill.isSealFunction()) aniSet = [313]; obj.sq_SetCurrentAnimation(aniSet[subState]); local effSet = ["overdrive_on_body"]; changeSwordEffect_bykk(obj, effSet[subState], SKILL_SWORDMASTER_BYKK_OVERDRIVE); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(false); sq_StartDrawCastGauge(obj, delay, true); obj.sq_PlaySound("SW_OVERDRIVE"); break; } } function onEndCurrentAni_Overdrive_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onEnterFrame_Overdrive_bykk(obj, frameIndex) { if(!obj) return; local subState = obj.getSkillSubState(); switch(frameIndex){ case 4: local bufftmime = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_OVERDRIVE, 0, sq_GetSkillLevel(obj, 146)); local apdPath = "character/atswordman/1_swordmaster/overdrive/ap_overdrive.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath); local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, false); appendage.sq_SetValidTime(bufftmime); appendage.setEnableIsBuff(true); appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_SWORDMASTER_BYKK_OVERDRIVE, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_OVERDRIVE)); CNSquirrelAppendage.sq_Append(appendage, obj, obj, true); appendage.setBuffIconImage(56); break; } } function onEndState_Overdrive_bykk(obj, newState) { if(!obj) return; } function onProcCon_Overdrive_bykk(obj) { if(!obj) return; } function onProc_Overdrive_bykk(obj) { if(!obj) return; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Thunderslash_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_THUNDERSLASH); if (isUse){ obj.getVar("thunderslash_target").clear_obj_vector(); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_SWORDMASTER_BYKK_THUNDERSLASH, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Thunderslash_bykk(obj) { if (!obj) return false; return true; } function onSetState_Thunderslash_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); obj.sq_ZStop(); local aniSet = [84,86,88,89,85,87]; local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()) aniSet = [318,322,319,323,320,321]; switch(subState){ case 0: obj.sq_SetCurrentAnimation(aniSet[subState]); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_THUNDERSLASH, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_THUNDERSLASH).tofloat() / 100.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 59)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setWeaponMaster_attackElement(obj); changeSwordEffect_bykk(obj, "thunderslash1", SKILL_SWORDMASTER_BYKK_THUNDERSLASH); obj.sq_PlaySound("THUNDERSLASH"); break; case 1: obj.sq_SetCurrentAnimation(aniSet[subState]); obj.getVar("thunderslash_move").setInt(10, sq_GetXPos(obj)); obj.getVar("thunderslash_move").setInt(11, 50); obj.setTimeEvent(10, 2, 35, false); changeSwordEffect_bykk(obj, "thunderslashjump2", SKILL_SWORDMASTER_BYKK_THUNDERSLASH); break; case 2: obj.sq_SetCurrentAnimation(aniSet[subState]); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_THUNDERSLASH, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_THUNDERSLASH).tofloat() / 100.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 59)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setWeaponMaster_attackElement(obj); local hitMax = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_THUNDERSLASH, 0); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); obj.setTimeEvent(11, delaySum / (hitMax + 1), hitMax, false); changeSwordEffect_bykk(obj, "thunderslashair3", SKILL_SWORDMASTER_BYKK_THUNDERSLASH); break; case 3: obj.sq_SetCurrentAnimation(aniSet[subState]); if(sq_GetZPos(obj) > 0) obj.setTimeEvent(12, 100 , 1, true); changeSwordEffect_bykk(obj, "thunderslash_air_finish_body", SKILL_SWORDMASTER_BYKK_THUNDERSLASH); break; case 11: obj.sq_SetCurrentAnimation(aniSet[subState - 7]); obj.setTimeEvent(15, 100, 1, false); changeSwordEffect_bykk(obj, "thunderslashdash2", SKILL_SWORDMASTER_BYKK_THUNDERSLASH); obj.sq_PlaySound("THUNDERSLASH"); break; case 12: obj.sq_SetCurrentAnimation(aniSet[subState - 7]); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_THUNDERSLASH, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_THUNDERSLASH).tofloat() / 100.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 59)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setWeaponMaster_attackElement(obj); local hitMax = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_THUNDERSLASH, 0); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); obj.setTimeEvent(11, delaySum / (hitMax + 1), hitMax, false); changeSwordEffect_bykk(obj, "thunderslashground3", SKILL_SWORDMASTER_BYKK_THUNDERSLASH); break; } } function onEndCurrentAni_Thunderslash_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: local size = obj.getVar("thunderslash_target").get_obj_vector_size(); if(size > 0){ obj.sq_IntVectClear(); if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE) > 0) obj.sq_IntVectPush(11); else obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_SWORDMASTER_BYKK_THUNDERSLASH, STATE_PRIORITY_IGNORE_FORCE, true); } else{ obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); } break; case 1: case 2: case 11: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(STATE_SWORDMASTER_BYKK_THUNDERSLASH, STATE_PRIORITY_IGNORE_FORCE, true); break; case 3: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(0); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_IGNORE_FORCE, true); break; case 12: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_THUNDERSLASH, -1, 2, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_THUNDERSLASH).tofloat() / 100.0) + 100; if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE) > 0) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_THUNDERSLASH, -1, 3, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_THUNDERSLASH).tofloat() / 100.0) + 100; local element = 4; local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); if(addAppendage) element = addAppendage.getVar("elementIndex").getInt(10); local sizeRate = 100; if(obj.getWeaponSubType() == 2 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY) > 0){ sizeRate = sizeRate * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 1, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY))) / 100; totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 4, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY))) / 100; } if(element < 4) cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,150,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_THUNDERSLASH,2,totalDamage,element,sizeRate,0,0,0,0,0,1); else cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,150,0,-sq_GetZPos(obj),obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_THUNDERSLASH,1,totalDamage,sizeRate,0,0,0,0,0,0,1); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Thunderslash_bykk(obj, damager, boundingBox, isStuck) { if(!obj) return false; if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ isMagicSwordUp_Attack(obj,damager,boundingBox); } local subState = obj.getSkillSubState(); switch(subState){ case 0: if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ local apdPath = "character/atswordman/1_swordmaster/thunderslash/ap_thunderslash.nut"; local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true); if(addAppendage){ if(damager.isObjectType(OBJECTTYPE_ACTIVE) && sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager) && !sq_IsFixture(damager)){ sq_HoldAndDelayDie(damager, obj, true, true, true, 100, 100, ENUM_DIRECTION_NEUTRAL, addAppendage); if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE) < 1) sq_MoveToAppendageForce(damager, obj, obj, 100, 0, 150, 200, true, addAppendage,true); else sq_MoveToAppendageForce(damager, obj, obj, 100, 0, 0, 200, true, addAppendage,true); if(!obj.getVar("thunderslash_target").is_obj_vector(damager)) obj.getVar("thunderslash_target").push_obj_vector(damager); } else if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE) > 0){ sq_HoldAndDelayDie(damager, obj, true, true, true, 100, 100, ENUM_DIRECTION_NEUTRAL, addAppendage); if(!obj.getVar("thunderslash_target").is_obj_vector(damager)) obj.getVar("thunderslash_target").push_obj_vector(damager); } } } break; } } function onTimeEvent_Thunderslash_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return; local subState = obj.getSkillSubState(); switch(timeEventIndex){ case 10: local baseX = obj.getVar("thunderslash_move").getInt(10); local v = sq_GetUniformVelocity(0, obj.getVar("thunderslash_move").getInt(11), timeEventCount, 35); local dstX = sq_GetDistancePos(baseX, obj.getDirection(), v); sq_setCurrentAxisPos(obj, 0, dstX); local vz = sq_GetUniformVelocity(0, 150, timeEventCount, 35); sq_setCurrentAxisPos(obj, 2, vz); if(timeEventCount >= 35) obj.setTimeEvent(15, 100, 1, true); break; case 11: local size = obj.getVar("thunderslash_target").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("thunderslash_target").get_obj_vector(i); if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); } } break; case 12: local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false) / 2; local size = obj.getVar("thunderslash_target").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("thunderslash_target").get_obj_vector(i); if(targetObj){ local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); local addAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, "character/atswordman/1_swordmaster/thunderslash/ap_thunderslash.nut"); if(addAppendage){ sq_MoveToAppendageForce(activeObj, obj, obj, 50, 0, -sq_GetZPos(obj), 30, true, addAppendage); } } } } obj.setTimeEvent(13, 30, 1, false); obj.setTimeEvent(14, 50, 1, false); break; case 13: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_THUNDERSLASH, -1, 2, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_THUNDERSLASH).tofloat() / 100.0) + 100; local sizeRate = 100; if(obj.getWeaponSubType() == 2 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY) > 0){ sizeRate = sizeRate * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 1, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY))) / 100; totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 4, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY))) / 100; } cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,50,0,-sq_GetZPos(obj),obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_THUNDERSLASH,1,totalDamage,sizeRate,0,0,0,0,0,0,1); break; case 14: local size = obj.getVar("thunderslash_target").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("thunderslash_target").get_obj_vector(i); if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/1_swordmaster/thunderslash/ap_thunderslash.nut"); } } break; case 15: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(STATE_SWORDMASTER_BYKK_THUNDERSLASH, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onEnterFrame_Thunderslash_bykk(obj, frameIndex) { if(!obj || !obj.isMyControlObject()) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(frameIndex == 3) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atthunderslash/start_thunderslash_updust.ani", 0, 1, 0); break; case 1: if(frameIndex == 0) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atthunderslash/thunderslash_dust.ani", 0, 1, 0); break; } } function onEndState_Thunderslash_bykk(obj, newState) { if(!obj) return; if(newState != STATE_SWORDMASTER_BYKK_THUNDERSLASH){ obj.sq_SetXScrollStop(0); blademastery_buff(obj); local size = obj.getVar("thunderslash_target").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("thunderslash_target").get_obj_vector(i); if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/1_swordmaster/thunderslash/ap_thunderslash.nut"); } } } } function onProcCon_Thunderslash_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 2: case 12: local pAni = obj.getCurrentAnimation(); local frameIndex = sq_GetAnimationFrameIndex(pAni); if(frameIndex >= 4){ sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(STATE_SWORDMASTER_BYKK_THUNDERSLASH, STATE_PRIORITY_IGNORE_FORCE, true); } } break; } } function onProc_Thunderslash_bykk(obj) { if(!obj) return; } function onKeyFrameFlag_Thunderslash_bykk(obj, flagIndex) { if (!obj) return; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Timeslash_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_TIMESLASH); if (isUse){ // obj.sq_IsEnterSkillLastKeyUnits(SKILL_SWORDMASTER_BYKK_TIMESLASH); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_TIMESLASH, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Timeslash_bykk(obj) { if (!obj) return false; return true; } function onSetState_Timeslash_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH) >= 3) sq_SendMessage(obj, 0, 1, 0); local aniSet = [106,108,107,109,110]; local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()) aniSet = [328,324,325,327,326]; obj.sq_SetCurrentAnimation(aniSet[subState]); local effSet = ["timeslashstart","timeslashcharge","timeslashchargeloop","timeslashslash","timeslashexp"]; changeSwordEffect_bykk(obj, effSet[subState], SKILL_SWORDMASTER_BYKK_TIMESLASH); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); switch(subState){ case 0: if(obj.isMyControlObject()) obj.sq_SetXScrollStart(200, 300); break; case 1: cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_TIMESLASH,1,0,0,0,0,0,0,0,0,0); break; case 3: local flashScreenObj = sq_flashScreen(obj,100,999999,240,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); obj.getVar("flashobj").clear_obj_vector(); obj.getVar("flashobj").push_obj_vector(flashScreenObj); break; case 4: local flashScreenObj = obj.getVar("flashobj").get_obj_vector(0); if(flashScreenObj){ local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); pflashScreen.fadeOut(); } sq_flashScreen(obj,0,1000,300,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); obj.setTimeEvent(1, 1000, 1, false); obj.setTimeEvent(2, 100, 1, true); if(obj.isMyControlObject()) obj.sq_SetXScrollStop(200); break; } } function onEndCurrentAni_Timeslash_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 3: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_TIMESLASH, STATE_PRIORITY_IGNORE_FORCE, true); break; case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_TIMESLASH, STATE_PRIORITY_IGNORE_FORCE, true); break; case 4: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Timeslash_bykk(obj, damager, boundingBox, isStuck) { if(!obj) return false; } function onEnterFrame_Timeslash_bykk(obj, frameIndex) { if(!obj) return; local subState = obj.getSkillSubState(); if(subState == 4) return; } function onEndState_Timeslash_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_SWORDMASTER_BYKK_TIMESLASH){ obj.sq_SetXScrollStop(0) blademastery_buff(obj); local flashScreenObj = obj.getVar("flashobj").getObject(0); if(flashScreenObj){ local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); if(pflashScreen) pflashScreen.fadeOut(); } sq_SendMessage(obj, 0, 0, 0); if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH) >= 6){ local addLevel = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH, 4, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH)); local time = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH, 3, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH)); // print("addLevel = "+addLevel); // print("time = "+time); addSkillLevelTime(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD, addLevel, time); } if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH) >= 9){ local bufftmime = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH, 3, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH)); local apdPath = "character/atswordman/1_swordmaster/timeslash/ap_timeslash.nut"; local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, false); appendage.sq_SetValidTime(bufftmime); appendage.setEnableIsBuff(true); appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_SWORDMASTER_BYKK_TIMESLASH, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH)); CNSquirrelAppendage.sq_Append(appendage, obj, obj, true); local change_appendage = appendage.sq_getChangeStatus("timeslash"); if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("timeslash", obj, obj, 0, 15, false, 1000); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_COOLTIME_DECLINE, true, -10.0); } } } } function onKeyFrameFlag_Timeslash_bykk(obj, flagIndex) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 3: switch(flagIndex){ case 1: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_TIMESLASH, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH).tofloat() / 100.0) + 100; cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_TIMESLASH,2,totalDamage,0,0,0,0,0,0,0,1); sq_SetMyShake(obj, 5, 200); break; } break; case 4: switch(flagIndex){ case 2: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_TIMESLASH, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH).tofloat() / 100.0) + 100; cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_TIMESLASH,3,totalDamage,0,0,0,0,0,0,0,1); sq_SetMyShake(obj, 20, 400); break; } break; } } function onTimeEvent_Timeslash_bykk(obj, timeEventIndex, timeEventCount) { switch(timeEventIndex){ case 1: local bottomObj = obj.getVar("timeslash_bottom").get_obj_vector(0); if(bottomObj) bottomObj.setValid(false); break; case 2: if(obj.isMyControlObject()){ sq_CreateParticle("character/swordman/effect/particle/timeslash_glass.ptl", obj, 0, 1, 0, true, 5, 0, 5); sq_setFullScreenEffect(obj, "character/swordman/effect/animation/attimeslash/finish_timeslash_crack.ani"); } break; } } function onProcCon_Timeslash_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); if(subState == 2){ local bDownKey = obj.isDownSkillLastKey(); local stateTime = obj.sq_GetStateTimer(); if(stateTime >= 1000 && !bDownKey){ obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_TIMESLASH, STATE_PRIORITY_IGNORE_FORCE, true); } } } function onProc_Timeslash_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Upperslash_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_UPPERSLASH); if (isUse){ //CheckUseAddloadDrawsword(obj,128,{[0] = true,[108] = true,[14] = true},0); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_UPPERSLASH, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Upperslash_bykk(obj) { if (!obj) return false; //if(obj.getZPos() > 10) return false; return true; } function onSetState_Upperslash_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); local aniSet = [77,78,80]; local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()) aniSet = [329,330,331]; switch(subState){ case 0: obj.sq_SetCurrentAnimation(aniSet[subState]); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_UPPERSLASH, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_UPPERSLASH).tofloat() / 100.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 60)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setWeaponMaster_attackElement(obj); changeSwordEffect_bykk(obj, "UpperSlash1", SKILL_SWORDMASTER_BYKK_UPPERSLASH); obj.sq_SetMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL); obj.sq_SetStaticMoveInfo(0, 400, -1000, false); obj.sq_PlaySound("SW_UPPERSLASH"); break; case 1: obj.sq_SetCurrentAnimation(aniSet[subState]); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_UPPERSLASH, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_UPPERSLASH).tofloat() / 100.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 61)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setWeaponMaster_attackElement(obj); changeSwordEffect_bykk(obj, "UpperSlash2", SKILL_SWORDMASTER_BYKK_UPPERSLASH); break; case 2://95 obj.sq_SetCurrentAnimation(aniSet[subState]); local totalDamage1 = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_UPPERSLASH, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_UPPERSLASH).tofloat() / 100.0) + 100; local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_UPPERSLASH, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_UPPERSLASH).tofloat() / 100.0) + 100; local bonusRate = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE, 1, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE)); local totalDamage = (totalDamage1 + totalDamage2) * bonusRate / 1000; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 63)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setWeaponMaster_attackElement(obj); changeSwordEffect_bykk(obj, "UpperSlash2Lv95Passive_Body", SKILL_SWORDMASTER_BYKK_UPPERSLASH); //obj.sq_PlaySound("SW_UPPERSLASH"); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Upperslash_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE) > 0) obj.sq_IntVectPush(2); else obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_UPPERSLASH, STATE_PRIORITY_IGNORE_FORCE, true); break; case 1: case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onTimeEvent_Upperslash_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return; switch(timeEventIndex){ case 0: obj.resetHitObjectList(); break; } } function onAttack_Upperslash_bykk(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return false; if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ isMagicSwordUp_Attack(obj,damager,boundingBox); } } function onEnterFrame_Upperslash_bykk(obj, frameIndex) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: switch(frameIndex){ case 1: local hitMax = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_UPPERSLASH, 3); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(1, 5); obj.setTimeEvent(0,delaySum/(hitMax + 1), hitMax, true); break; } break; } } function onEndState_Upperslash_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_SWORDMASTER_BYKK_UPPERSLASH){ blademastery_buff(obj); } } function onKeyFrameFlag_Upperslash_bykk(obj, flagIndex) { if (!obj) return; } function onProcCon_Upperslash_bykk(obj) { if(!obj) return; } function onProc_Upperslash_bykk(obj) { if(!obj) return; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Weaponcombo_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_WEAPONCOMBO); if (isUse){ obj.getVar("weaponCombo_bool").setBool(0, false); obj.getVar("weaponCombo_bool").setBool(1, false); obj.getVar("weaponCombo_bool").setBool(2, false); obj.getVar("weaponCombo_bool").setBool(3, false); if(obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0) obj.sq_IsEnterSkillLastKeyUnits(SKILL_SWORDMASTER_BYKK_WEAPONCOMBO); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_WEAPONCOMBO, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Weaponcombo_bykk(obj) { if (!obj) return false; if(obj.getZPos() > 10) return false; return true; } function onSetState_Weaponcombo_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); local weaponType = obj.getWeaponSubType(); local aniSet = [[33,34,35,36], [39,40,41], [42,43,44], [37,45,38]]; local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()) aniSet = [[341,342,343,344], [338,339,340], [332,333,334], [335,336,337]]; local atkSet = [[30,31,32,33],[24,25,26],[27,28,29],[22,23,23]]; local effSet = [["WeaponComboShortSword1","WeaponComboShortSword2","WeaponComboShortSword3","WeaponComboShortSword4"], ["WeaponComboKatana1_body","WeaponComboKatana2_body","WeaponComboKatana3_body"], ["WeaponComboClub1_body","WeaponComboClub2_body","WeaponComboClub3_body"], ["WeaponComboHeavy1_body","WeaponComboHeavy2Charge_body","WeaponComboHeavy2_body"]]; obj.sq_SetCurrentAnimation(aniSet[weaponType][subState]); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkSet[weaponType][subState])); changeSwordEffect_bykk(obj, effSet[weaponType][subState], SKILL_SWORDMASTER_BYKK_WEAPONCOMBO); setWeaponMaster_attackElement(obj); local soundSet = [["","","","R_SW_LIFTSLASH"], ["R_FENCING_SWDA","R_FENCING_SWDA","R_FENCING_SWDA"], ["FENCING_BLUNT_01","FENCING_BLUNT_02","FENCING_BLUNT_03"], ["FENCING_SWDC_01","","FENCING_SWDC_02"]]; if(soundSet[weaponType][subState] != "") obj.sq_PlaySound(soundSet[weaponType][subState]); local totalDamage = obj.sq_GetBonusRateWithPassive(174, -1, 0, 0.1) + 200; if(weaponType == 1 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY) > 0) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY, 8, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY))) / 1000; else if(weaponType == 3 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 10, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY))) / 1000; sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setWeaponMaster_attackElement(obj); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(weaponType < 3) obj.sq_SetStaticMoveInfo(0, 2 * subState, 2 * subState, false); obj.sq_SetMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL); } function onEndCurrentAni_Weaponcombo_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: case 2: case 3: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Weaponcombo_bykk(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return false; if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ isChangeSword_Attack(obj,damager,boundingBox); } if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ isMagicSwordUp_Attack(obj,damager,boundingBox); } } function onEnterFrame_Weaponcombo_bykk(obj, frameIndex) { if(!obj) return; } function onKeyFrameFlag_Weaponcombo_bykk(obj, flagIndex) { if(flagIndex != 1) return; local subState = obj.getSkillSubState(); local weaponType = obj.getWeaponSubType(); local element = 4; local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); if(AddAppendage) element = AddAppendage.getVar("elementIndex").getInt(10); local totalDamage = obj.sq_GetBonusRateWithPassive(174, -1, 0, 0.1) + 200; switch(weaponType){ case 0://短劍 totalDamage = totalDamage / 10; cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_WEAPONCOMBO,0,totalDamage,element,subState,0,0,0,0,0,1); break; case 2://鈍器 cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,150,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_WEAPONCOMBO,1,totalDamage,0,0,0,0,0,0,0,1); break; case 3://巨劍 if(subState != 2) break; local sizeRate = 100; if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0){ totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 10, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY))) / 1000; sizeRate = sizeRate * sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 13, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY)) / 100; local apdPath = "character/atswordman/1_swordmaster/heavyswordmastery/ap_heavyswordmastery.nut"; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)){ local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true); local bufftime = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 2); addAppendage.sq_SetValidTime(bufftime); addAppendage.setEnableIsBuff(true); addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY)); CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); obj.sq_SetSuperArmorUntilTime(obj, bufftime); } } cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,150,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_WEAPONCOMBO,3,totalDamage,sizeRate,0,0,0,0,0,0,1); break; } } function onProc_Weaponcombo_bykk(obj) { if(!obj) return; if(!obj.isMyControlObject()) return; if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL) && sq_IsKeyDown(OPTION_HOTKEY_JUMP, ENUM_SUBKEY_TYPE_ALL)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(1); obj.sq_IntVectPush(200); obj.sq_AddSetStatePacket(6, STATE_PRIORITY_IGNORE_FORCE, true); } local subState = obj.getSkillSubState(); local weaponType = obj.getWeaponSubType(); local subState_Max = [3,2,2,2]; local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); local stateTime = obj.sq_GetStateTimer(); if(weaponType == 3){ switch(subState){ case 0: local bDownKey = obj.isDownSkillLastKey(); if(bDownKey){ if(stateTime >= delaySum * 90 / 100){ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_WEAPONCOMBO, STATE_PRIORITY_IGNORE_FORCE, true); break; } } else{ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_WEAPONCOMBO, STATE_PRIORITY_IGNORE_FORCE, true); } break; case 1: local bDownKey = obj.isDownSkillLastKey(); if(!bDownKey || stateTime >= 1200){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_WEAPONCOMBO, STATE_PRIORITY_IGNORE_FORCE, true); break; } else{ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_WEAPONCOMBO, STATE_PRIORITY_IGNORE_FORCE, true); } break; } } if(obj.getVar("weaponCombo_bool").getBool(subState) == false && weaponType < 3){ if(subState < subState_Max[weaponType]){ obj.setSkillCommandEnable(SKILL_SWORDMASTER_BYKK_WEAPONCOMBO,true); local b_useskill = obj.sq_IsEnterSkill(SKILL_SWORDMASTER_BYKK_WEAPONCOMBO); if(b_useskill != -1) obj.getVar("weaponCombo_bool").setBool(subState, true); } } if(stateTime >= delaySum * 75 / 100 && obj.getVar("weaponCombo_bool").getBool(subState) && subState < subState_Max[weaponType] && weaponType < 3){ obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_WEAPONCOMBO, STATE_PRIORITY_IGNORE_FORCE, true); } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function onStart_appendage_Dualweapon_bykk(appendage) { local obj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); local stuckRate = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 16, sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON)); local change_appendage = appendage.sq_getChangeStatus("dualweapon"); if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("dualweapon", obj, obj, 0, 15, false, stuckRate); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK, false, -(stuckRate * 0.1).tofloat()); } appendage.getVar().setInt(10, 0); } function onStart_appendage_Threeflower_bykk(appendage) { local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); local skillLevel = sq_GetSkillLevel(parentObj, SKILL_VAGABOND_THREEFLOWER); local value1 = sq_GetLevelData(parentObj, SKILL_VAGABOND_THREEFLOWER, 0, skillLevel); local value2 = sq_GetLevelData(parentObj, SKILL_VAGABOND_THREEFLOWER, 1, skillLevel); local change_appendage = appendage.sq_getChangeStatus("threeflower"); if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("threeflower",parentObj, parentObj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value1); if(change_appendage){ change_appendage.clearParameter(); //change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (value1 * 0.1).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, (value2 * 0.1).tofloat()); } } function onStart_appendage_Budclimb_bykk(appendage) { local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); } function onStart_appendage_Ecstasy_bykk(appendage) { local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); } function onStart_appendage_Goddessofsword_bykk(appendage) { local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); } function onStart_appendage_Equiplightsword_bykk(appendage) { local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); if(parentObj.getWeaponSubType() == 0 || parentObj.getWeaponSubType() == 1 || parentObj.getWeaponSubType() == 5){ local value1 = sq_GetIntData(parentObj, SKILL_VAGABOND_EQUIPLIGHTSWORD, 0); local value2 = sq_GetIntData(parentObj, SKILL_VAGABOND_EQUIPLIGHTSWORD, 1); local change_appendage = appendage.sq_getChangeStatus("threeflower"); if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("threeflower",parentObj, parentObj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value1); if(change_appendage && parentObj.getWeaponSubType() == 5){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_COOLTIME_DECLINE, true, -(value1).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (value2).tofloat()); } } } function checkExecutableSkill_Bigjang_bykk(obj) { if (!obj) return 0; local state = obj.sq_GetState(); local minZpos = sq_GetIntData(obj, SKILL_VAGABOND_BIGJANG, 2); if(state == 6 && obj.getZPos() < minZpos) return 0; local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_BIGJANG); if(isUse){ local dis = sq_GetIntData(obj, SKILL_VAGABOND_BIGJANG, 3); if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 0) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 1)) obj.getVar("bigjang").setInt(0, dis * 75 / 100); else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) obj.getVar("bigjang").setInt(0, dis * 150 / 100); else obj.getVar("bigjang").setInt(0, dis); obj.sq_IntVectClear(); if(state == 6) obj.sq_IntVectPush(1); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_VAGABOND_BIGJANG, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function onSetState_Bigjang_bykk(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(ANIMATION_VAGABOND_BIGJANG_NORMAL_START_BODY); break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_BIGJANG_JUMP_START_BODY); break; case 2: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_BIGJANG_JUMP_THROW_BODY); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Bigjang_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_VAGABOND_BIGJANG, STATE_PRIORITY_IGNORE_FORCE, true); break; case 2: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(0); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Bigjang_bykk(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return; } function onEnterFrame_Bigjang_bykk(obj, frameIndex) { if(!obj) return; local subState = obj.getSkillSubState(); local sizerate = sq_GetIntData(obj,223, 0); switch(subState){ case 0: switch(frameIndex){ case 1: obj.sq_PlaySound("SW_FIST_HUNDRED"); break; case 2: obj.sq_PlaySound("FIST_HUNDRED_HAND"); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atbigjang/normal_start_ready.ani", 25, 0, 63); break; case 9: obj.sq_PlaySound("FIST_HUNDRED_SWISH"); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_BIGJANG, SKILL_VAGABOND_BIGJANG, 0, 1.0) + 100; local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_BIGJANG, SKILL_VAGABOND_BIGJANG, 1, 1.0) + 100; local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_BIGJANG, 0); local dis = obj.getVar("bigjang").getInt(0); local sub = sq_GetIntData(obj, SKILL_VAGABOND_BIGJANG, 16); cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 25, 0, 65, obj.getDirection(), 3, SKILL_VAGABOND_BIGJANG, 1, totalDamage, damageRate, dis, sizeRate, 0, sub, 0, 0, 1); // `EnableHermitTripleStep` 0 0 0 // `rapid step enable` 0 0 0 obj.getVar("rapid_step_enable").setBool(0, true); obj.getVar("EnableHermitTripleStep").setBool(0, true); break; } break; case 1: switch(frameIndex){ case 6: obj.sq_PlaySound("FIST_HUNDRED_HAND"); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atbigjang/jump_start_hand.ani", 8, 0, 80); break; } break; case 2: switch(frameIndex){ case 1: obj.sq_PlaySound("FIST_HUNDRED_EXP"); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_BIGJANG, SKILL_VAGABOND_BIGJANG, 0, 1.0) + 100; local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_BIGJANG, SKILL_VAGABOND_BIGJANG, 1, 1.0) + 100; local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_BIGJANG, 0) / 3 * 2; local dis = obj.getVar("bigjang").getInt(0); cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 9, 0, 81, obj.getDirection(), 3, SKILL_VAGABOND_BIGJANG, 2, totalDamage, damageRate, dis * 75 / 100, sizeRate, 0, 0, 0, 0, 1); //sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/vagabond/animation/atbigjang/jump_throw_hand.ani", 200, 0, 0); break; } break; } } function onEndState_Bigjang_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_VAGABOND_BIGJANG){ if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false); if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false); } } function onKeyFrameFlag_Bigjang_bykk(obj, flagIndex) { if (!obj) return; } function onProcCon_Bigjang_bykk(obj) { if(!obj) return; } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Blastsword_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_BLASTSWORD); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_VAGABOND_BLASTSWORD, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function onSetState_Blastsword_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(ANIMATION_VAGABOND_BLASTSWORDSELECTSWORD); obj.sq_PlaySound("SW_BLAST_SWORD"); obj.getVar("blastsword").setBool(0, false); obj.getVar("blastsword").setBool(1, false); if(sq_GetIntData(obj, SKILL_VAGABOND_BLASTSWORD, 10) > 0){ obj.getVar("blastsword").setBool(0, true); obj.getVar("blastsword").setBool(1, true); } break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_BLASTSWORDTWOHANDSTART); obj.getVar("blastsword_move").setInt(10, sq_GetXPos(obj)); if(obj.getVar("blastsword").getBool(1) == false) obj.getVar("blastsword_move").setInt(11, sq_GetIntData(obj, SKILL_VAGABOND_BLASTSWORD, 2)); break; case 2: // obj.getVar("Blastsword").setInt(1, 3); obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_BLASTSWORDTWOHANDLOOP); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_BLASTSWORD); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_BLASTSWORD, 2, skill_level); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 163)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local hitMax = sq_GetIntData(obj, SKILL_VAGABOND_BLASTSWORD, 4); local hitTime = sq_GetIntData(obj, SKILL_VAGABOND_BLASTSWORD, 6); obj.setTimeEvent(1, hitTime, hitMax, true); local lifeTime = (hitTime + 20) * (hitMax - 1); obj.getVar("blastsword_move").setInt(12, lifeTime); obj.setTimeEvent(2, lifeTime, 1, false); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atblastsword/dust_03.ani", 0, 0, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atblastsword/loop_leaf_00.ani", 0, 0, 0); break; case 3: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_BLASTSWORDTWOHANDEND); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_BLASTSWORD); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_BLASTSWORD, 0, skill_level); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 163)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.sq_PlaySound("BLAST_SWORD_EXP"); obj.sq_PlaySound("SW_BLAST_SWORD"); break; case 4: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_BLASTSWORDONEHAND); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_BLASTSWORD); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_BLASTSWORD, 0, skill_level); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 162)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onTimeEvent_Blastsword_bykk(obj, timeEventIndex, timeEventCount) { if (!obj) return; switch(timeEventIndex){ case 1: obj.resetHitObjectList(); break; case 2: obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(SKILL_VAGABOND_BLASTSWORD, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onEndCurrentAni_Blastsword_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); if(obj.getVar("blastsword").getBool(0)) obj.sq_IntVectPush(4); else obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_VAGABOND_BLASTSWORD, STATE_PRIORITY_IGNORE_FORCE, true); break; case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_VAGABOND_BLASTSWORD, STATE_PRIORITY_IGNORE_FORCE, true); break; case 3: case 4: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Blastsword_bykk(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return false; local subState = obj.getSkillSubState(); switch(subState){ case 0: break; case 1: break; } } function onEnterFrame_Blastsword_bykk(obj, frameIndex) { if(!obj || !obj.isMyControlObject()) return; local subState = obj.getSkillSubState(); if((frameIndex == 1 && subState == 3) || (frameIndex == 3 && subState == 4)){ //[OFFSET] `two hand finish` 206 0 3 //[OFFSET] `one hand finish` 237 0 5 local offsetX = 206, offsetZ = 3; if(subState == 4){offsetX = 207; offsetZ = 5;} local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_BLASTSWORD); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_BLASTSWORD, 1, skill_level); local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_BLASTSWORD, 1); cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, offsetX, 0, offsetZ, obj.getDirection(), 3, SKILL_VAGABOND_BLASTSWORD, 1, totalDamage, sizeRate, 0, 0, 0, 0, 0, 0, 1); obj.getVar("rapid_step_enable").setBool(0, true); obj.getVar("EnableHermitTripleStep").setBool(0, true); } if(frameIndex == 2 && subState == 4){ obj.sq_PlaySound("SW_BLAST_SWORD"); obj.sq_PlaySound("BLAST_SWORD_EXP"); } } function onEndState_Blastsword_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_VAGABOND_BLASTSWORD){ if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false); if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false); sq_SimpleMoveToNearMovablePos(obj,300); } } function onKeyFrameFlag_Blastsword_bykk(obj, flagIndex) { if (!obj) return; } function onProcCon_Blastsword_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(obj.getVar("blastsword").getBool(0) == false){ obj.setSkillCommandEnable(SKILL_VAGABOND_BLASTSWORD, true); if(sq_IsKeyDown(OPTION_HOTKEY_SKILL, ENUM_SUBKEY_TYPE_ALL) || obj.sq_IsEnterSkill(SKILL_VAGABOND_BLASTSWORD) != -1 || (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("blastsword").setBool(0, true); } case 1: if(obj.getVar("blastsword").getBool(1) == false){ 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) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ obj.getVar("blastsword").setBool(1, true); obj.getVar("blastsword_move").setInt(11, sq_GetIntData(obj, SKILL_VAGABOND_BLASTSWORD, 3)); } } break; case 2: local stateTime = obj.sq_GetStateTimer(); local fireT = obj.getVar("blastsword_move").getInt(12); local srcX = obj.getVar("blastsword_move").getInt(10); local MoveX = obj.getVar("blastsword_move").getInt(11); local v = sq_GetAccel(0, MoveX, stateTime, fireT, false); local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); sq_setCurrentAxisPos(obj, 0, dstX); break; } } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Coalban_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(216); if (isUse){ obj.sq_IntVectClear(); if(obj.sq_GetState() == 6) obj.sq_IntVectPush(10); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_VAGABOND_COALBAN, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function onSetState_Coalban_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: case 10: if(subState == 0) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COALBANCAST); else if(subState == 10){ obj.sq_ZStop(); obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COALBANCASTJUMP); } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.sq_PlaySound("SW_COAL_BAN"); local countMax = sq_GetIntData(obj, SKILL_VAGABOND_COALBAN, 0) * 3 / 2 - 1; obj.getVar("coalban").setInt(10, countMax); obj.getVar("coalban").setInt(11, 0); break; case 1: case 2: case 11: case 12: local pooledObj; if(subState == 11 || subState == 12) obj.sq_ZStop(); if(subState == 1){ obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COALBANLEFT); pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atcoalban/loop/left/leftleaf_00.ani", 0, 1, 0); } else if(subState == 2){ obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COALBANRIGHT); pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atcoalban/loop/right/rightleaf_00.ani", 0, 1, 0); } else if(subState == 11){ obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COALBANLEFTJUMP); pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atcoalban/loop/left/leftleafjump_00.ani", 0, 1, 0); } else if(subState == 12){ obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COALBANRIGHTJUMP); pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atcoalban/loop/right/rightleafjump_00.ani", 0, 1, 0); } local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); local interval = sq_GetIntData(obj, SKILL_VAGABOND_COALBAN, 3); local speedRate = delaySum.tofloat() / interval.tofloat() * 250.0; if(sq_GetSkillLevel(obj, SKILL_VAGABOND_GODDESSOFSWORD) > 0) speedRate = speedRate * sq_GetIntData(obj, SKILL_VAGABOND_GODDESSOFSWORD, 4).tofloat() / 100.0; currentAni.setSpeedRate(speedRate); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate); break; } } function onEndCurrentAni_Coalban_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 10: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_VAGABOND_COALBAN, STATE_PRIORITY_IGNORE_FORCE, true); break; case 1: case 2: if(obj.getVar("coalban").getInt(10) <= 0){ obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); } else{ obj.getVar("coalban").setInt(10, obj.getVar("coalban").getInt(10) - 1); obj.sq_IntVectClear(); if(subState == 1) obj.sq_IntVectPush(2); else if(subState == 2) obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_VAGABOND_COALBAN, STATE_PRIORITY_IGNORE_FORCE, true); } break; case 11: case 12: if(obj.getVar("coalban").getInt(10) <= 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(0); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(6, STATE_PRIORITY_IGNORE_FORCE, true); } else{ obj.getVar("coalban").setInt(10, obj.getVar("coalban").getInt(10) - 1); obj.sq_IntVectClear(); if(subState == 11) obj.sq_IntVectPush(12); else if(subState == 12) obj.sq_IntVectPush(11); obj.sq_AddSetStatePacket(SKILL_VAGABOND_COALBAN, STATE_PRIORITY_IGNORE_FORCE, true); } break; } } function onEnterFrame_Coalban_bykk(obj, frameIndex) { if(!obj) return; 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("coalban").setInt(11, 1); else 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("coalban").setInt(11, 2); else obj.getVar("coalban").setInt(11, 0); } function onEndState_Coalban_bykk(obj, newState) { if(!obj) return; } function onKeyFrameFlag_Coalban_bykk(obj, flagIndex) { if(!obj) return; local subState = obj.getSkillSubState(); switch(flagIndex){ case 1: local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_COALBAN); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_COALBAN, 0, skill_level); local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_COALBAN, 13); if(sq_GetSkillLevel(obj, SKILL_VAGABOND_GODDESSOFSWORD) > 0) sizeRate = sizeRate * sq_GetIntData(obj, SKILL_VAGABOND_GODDESSOFSWORD, 3) / 100; local dis = sq_GetIntData(obj, SKILL_VAGABOND_COALBAN, 1); local sub = obj.getVar("coalban").getInt(11); local offsetX = 50, offsetZ = 73, angle = 0, partl = sub * 10 + 1; if(subState == 2){offsetX = 50; offsetZ = 73; angle = 0; partl = sub * 10 + 2;} if(subState == 11){offsetX = 70; offsetZ = 45; angle = 1; partl = sub * 10 + 1;} if(subState == 12){offsetX = 70; offsetZ = 45; angle = 1; partl = sub * 10 + 2;} cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, offsetX, 0, offsetZ, obj.getDirection(), 3, SKILL_VAGABOND_COALBAN, 1, totalDamage, sizeRate, dis, partl, angle, sub, 0, 0, 1); break; case 2: local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_COALBAN); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_COALBAN, 0, skill_level); local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_COALBAN, 13); if(sq_GetSkillLevel(obj, SKILL_VAGABOND_GODDESSOFSWORD) > 0) sizeRate = sizeRate * sq_GetIntData(obj, SKILL_VAGABOND_GODDESSOFSWORD, 3) / 100; print(sizeRate); local dis = sq_GetIntData(obj, SKILL_VAGABOND_COALBAN, 1); local sub = obj.getVar("coalban").getInt(11); local offsetX = 50, offsetZ = 73, angle = 0, partl = sub * 10 + 1; if(subState == 1){offsetX = 50; offsetZ = 73; angle = 0; partl = sub * 10 + 3;} if(subState == 2){offsetX = 50; offsetZ = 73; angle = 0; partl = sub * 10 + 4;} if(subState == 11){offsetX = 70; offsetZ = 45; angle = 1; partl = sub * 10 + 3;} if(subState == 12){offsetX = 70; offsetZ = 45; angle = 1; partl = sub * 10 + 4;} cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, offsetX, 0, offsetZ, obj.getDirection(), 3, SKILL_VAGABOND_COALBAN, 1, totalDamage, sizeRate, dis, partl, angle, sub, 0, 0, 1); break; } } function onProcCon_Coalban_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: case 2: case 11: case 12: if(sq_IsKeyDown(OPTION_HOTKEY_JUMP, ENUM_SUBKEY_TYPE_ALL)){ if(subState < 10){ obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); } else{ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(0); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_IGNORE_FORCE, true); } } break; } } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////