function checkExecutableSkill_Cometblade_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_COMETBLADE); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_VAGABOND_COMETBLADE, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function onSetState_Cometblade_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_COMETBLADE03ATKB_BODY); obj.getVar("cometblade_move").setInt(10, sq_GetXPos(obj));//baseX obj.getVar("cometblade_move").setInt(11, sq_GetZPos(obj));//baseZ obj.getVar("cometblade_move").setInt(12, 400);//moveX obj.getVar("cometblade_move").setInt(13, 0);//moveZ obj.getVar("cometblade").setBool(0, false); obj.sq_PlaySound("COMET_BLADE_DASH"); local currentAni = obj.getCurrentAnimation(); sq_ClearAttackBox(currentAni); local delay = currentAni.getDelaySum(0, 0); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_COMETBLADE); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_COMETBLADE, 1, skill_level); local sizeRate = 100; local isStone = sq_GetIntData(obj, SKILL_VAGABOND_COMETBLADE, 9); if((isStone > 0 && isStone != 50) || COMETBLADE_STONE > 0){ totalDamage = totalDamage * 2; sizeRate = 125; if(sq_GetIntData(obj, SKILL_VAGABOND_COMETBLADE, 9) > 50) sizeRate = 188; } cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, 0, obj.getDirection(), 3, SKILL_VAGABOND_COMETBLADE, 1, totalDamage, sizeRate, delay, 0, 0, 0, 0, 0, 1); break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COMETBLADE04ATKLIFT_BODY); obj.sq_PlaySound("COMET_BLADE_SWISH"); obj.getVar("cometblade_move").setInt(10, sq_GetXPos(obj));//baseX obj.getVar("cometblade_move").setInt(11, sq_GetZPos(obj));//baseZ obj.getVar("cometblade_move").setInt(12, -150);//moveX obj.getVar("cometblade_move").setInt(13, 250);//moveZ obj.getVar("cometblade").setBool(1, false); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_COMETBLADE); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_COMETBLADE, 2, skill_level); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 167)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 2: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COMETBLADE04ATKFIXSWORD_BODY); obj.getVar("cometblade_move").setInt(10, sq_GetXPos(obj));//baseX obj.getVar("cometblade_move").setInt(11, sq_GetZPos(obj));//baseZ obj.getVar("cometblade_move").setInt(12, -50);//moveX obj.getVar("cometblade_move").setInt(13, -180);//moveZ obj.getVar("cometblade").setBool(2, false); obj.sq_PlaySound("COMET_BLADE_INDENT"); obj.resetHitObjectList(); break; case 3: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COMETBLADE04ATKREADYSMASH_BODY); obj.getVar("cometblade_move").setInt(10, sq_GetXPos(obj));//baseX obj.getVar("cometblade_move").setInt(11, sq_GetZPos(obj));//baseZ obj.getVar("cometblade_move").setInt(12, -200);//moveX obj.getVar("cometblade_move").setInt(13, 180);//moveZ obj.sq_PlaySound("COMET_BLADE_FLY"); break; case 4: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COMETBLADE04ATKSMASH_BODY); obj.getVar("cometblade_move").setInt(10, sq_GetXPos(obj));//baseX obj.getVar("cometblade_move").setInt(11, sq_GetZPos(obj));//baseZ obj.getVar("cometblade_move").setInt(12, 0);//moveX obj.getVar("cometblade_move").setInt(13, -sq_GetZPos(obj));//moveZ local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atcometblade/liftattackeffect.ani", 2, 0, -1); sq_moveWithParent(obj, pooledObj); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_COMETBLADE); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_COMETBLADE, 3, skill_level); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 168)); 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 onEnterFrame_Cometblade_bykk(obj, frameIndex) { if(!obj || !obj.isMyControlObject()) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(frameIndex == 1){ sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atcometblade/cutsmoke.ani", 0, 0, 0); sq_flashScreen(obj, 50, 200, 400, 204, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 10, 200); } else if(frameIndex == 14 && obj.getVar("cometblade").getBool(0) == true){ if(sq_GetIntData(obj, SKILL_VAGABOND_COMETBLADE, 9) > 0 || COMETBLADE_STONE > 0) break; obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_VAGABOND_COMETBLADE, STATE_PRIORITY_IGNORE_FORCE, true); } if(frameIndex == 14 && (sq_GetIntData(obj, SKILL_VAGABOND_COMETBLADE, 9) > 0 || COMETBLADE_STONE > 0)){ local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(166.67); } break; case 2: if(frameIndex == 2){ sq_flashScreen(obj, 30, 150, 200, 154, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 10, 200); local aniPath = "character/swordman/effect/animation/atcometblade/finishfloor_00.ani" local aniPath2 = "character/swordman/effect/animation/atcometblade/finishfixsword.ani" createOnlyDrawObject_AtSwordMan_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); createOnlyDrawObject_AtSwordMan_bykk(obj,aniPath2,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL); } break; case 4: switch(frameIndex){ case 1: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atcometblade/finishfixsword_eff2_a.ani", 188, 0, -sq_GetZPos(obj)); break; case 2: obj.sq_PlaySound("COMET_BLADE_FINISH"); sq_flashScreen(obj, 30, 150, 250, 205, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 20, 200); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atcometblade/finishsmokesmash.ani", 188, 0, 0); obj.getVar("rapid_step_enable").setBool(0, true); obj.getVar("EnableHermitTripleStep").setBool(0, true); break; case 10: // sq_CreateParticle("character/swordman/effect/particle/atcometbladefinishleaf.ptl", obj, 0, 5, 0, true, 10, 0, 3); // sq_CreateParticle("character/swordman/effect/particle/atcometbladefinishmiddleleaf.ptl", obj, 0, 5, 0, true, 10, 0, 5); // sq_CreateParticle("character/swordman/effect/particle/atcometbladefinishsmallleaf.ptl", obj, 0, 5, 0, true, 1, 0, 10); //local sizeRate = sq_getRandom(15, 90), rotateSet = sq_getRandom(0, 360); cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, 0, obj.getDirection(), 3, SKILL_VAGABOND_COMETBLADE, 2, 1, 15, 90, 0, 360, 15, 2, 0, 0); cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, 0, obj.getDirection(), 3, SKILL_VAGABOND_COMETBLADE, 2, 2, 20, 50, 0, 360, 15, 3, 0, 0); cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, 0, obj.getDirection(), 3, SKILL_VAGABOND_COMETBLADE, 2, 3, 2, 20, 0, 360, 20, 3, 0, 0); break; } break; } } function onChangeSkillEffect_Cometblade(obj, skillIndex, receiveData) { if(!obj || skillIndex != 220) return; local type = receiveData.readDword(); if(type == 0) obj.resetHitObjectList(); else if(type == 1) { local aptjarr = [ "character/swordman/effect/animation/atcometblade/finishfixsword.ani", "character/swordman/effect/animation/atcometblade/finishfloor_00.ani" ]; foreach(path in aptjarr) DarktemplerCreateAniPooledObj(obj, path, false, true, obj.getXPos(), obj.getYPos()-1, 0,1.0); } } function onEndCurrentAni_Cometblade_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(sq_GetIntData(obj, SKILL_VAGABOND_COMETBLADE, 9) > 0 || COMETBLADE_STONE > 0) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; case 1: case 2: if(obj.getVar("cometblade").getBool(subState) == true){ obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_VAGABOND_COMETBLADE, STATE_PRIORITY_IGNORE_FORCE, true); break; } 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; case 3: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_VAGABOND_COMETBLADE, STATE_PRIORITY_IGNORE_FORCE, true); break; case 4: obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Cometblade_bykk(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return; } function onEndState_Cometblade_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_VAGABOND_COMETBLADE){ 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_Cometblade_bykk(obj, flagIndex) { if (!obj) return; } function onProcCon_Cometblade_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){//位移 case 0: case 1: case 2: case 3: case 4: if(obj.getVar("cometblade").getBool(subState) == false && subState < 3){ obj.setSkillCommandEnable(SKILL_VAGABOND_COMETBLADE, true); if(sq_IsKeyDown(OPTION_HOTKEY_SKILL, ENUM_SUBKEY_TYPE_ALL) || obj.sq_IsEnterSkill(SKILL_VAGABOND_COMETBLADE) != -1){ obj.getVar("cometblade").setBool(subState, true); } } local pAni = obj.getCurrentAnimation(); local currentT = sq_GetCurrentTime(pAni); local fireT = pAni.getDelaySum(false); if(subState == 2 || subState == 4) fireT = pAni.getDelaySum(0, 1); else if(subState == 3) fireT = pAni.getDelaySum(0, 3); else if(subState == 0) fireT = pAni.getDelaySum(0, 7); if(currentT > fireT){ if(subState == 4) sq_setCurrentAxisPos(obj, 2, 0); break; } local srcX = obj.getVar("cometblade_move").getInt(10); local srcZ = obj.getVar("cometblade_move").getInt(11); local MoveX = obj.getVar("cometblade_move").getInt(12); local MoveZ = obj.getVar("cometblade_move").getInt(13); if(subState == 4) MoveZ = -srcZ; local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT); local vz = sq_GetUniformVelocity(0, MoveZ, currentT, fireT); local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); if(obj.isMovablePos(dstX, sq_GetYPos(obj))){ sq_setCurrentAxisPos(obj, 0, dstX); sq_setCurrentAxisPos(obj, 2, srcZ + vz); } else{ obj.getVar("cometblade_move").setInt(10, sq_GetXPos(obj)); obj.getVar("cometblade_move").setInt(12, 0); } break; case 2: break; case 3: break; case 6: break; } } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Dualweapon_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_DUALWEAPON); if (isUse){ local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/3_vagabond/dualweapon/ap_dualweapon.nut"); if(addAppendage){ local weaponType = addAppendage.getVar().getInt(10); if(weaponType == 4) addAppendage.getVar().setInt(10, 0); else addAppendage.getVar().setInt(10, weaponType + 1); switch(weaponType){ case 4: addAppendage.setBuffIconImage(63); break;//光 case 0: addAppendage.setBuffIconImage(62); break;//鈍 case 1: addAppendage.setBuffIconImage(60); break;//太 case 2: addAppendage.setBuffIconImage(61); break;//巨 case 3: addAppendage.setBuffIconImage(59); break;//短 } } return 1; } return 0; } function checkCommandEnable_Dualweapon_bykk(obj) { if (!obj) return 0; return 1; } function AddAppend_Dualweapon(obj,index) { local appArr = [ "character/atswordman/2_vegabond/dualweapon/ap_dualweapon0.nut", "character/atswordman/2_vegabond/dualweapon/ap_dualweapon1.nut", "character/atswordman/2_vegabond/dualweapon/ap_dualweapon2.nut", "character/atswordman/2_vegabond/dualweapon/ap_dualweapon3.nut", "character/atswordman/2_vegabond/dualweapon/ap_dualweapon5.nut" ]; local apPath = appArr[index]; local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, false); if(appendage != null) { appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), 202, sq_GetSkillLevel(obj, 202)); CNSquirrelAppendage.sq_Append(appendage, obj, obj, true); local incon = [59,60,62,61,63]; appendage.setBuffIconImage(incon[index]); } return index; } function checkAppend_Dualweapon(obj) { local index = 5; local appArr = [ "character/atswordman/2_vegabond/dualweapon/ap_dualweapon0.nut", "character/atswordman/2_vegabond/dualweapon/ap_dualweapon1.nut", "character/atswordman/2_vegabond/dualweapon/ap_dualweapon2.nut", "character/atswordman/2_vegabond/dualweapon/ap_dualweapon3.nut", "character/atswordman/2_vegabond/dualweapon/ap_dualweapon5.nut" ]; foreach( key,path in appArr) { if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, path)) return key; } return index; } function SetChrAniIndex_Dualweapon(obj,apdindex) { local index = 10; local appArr = [526,520,517,523,514,0]; return appArr[apdindex]; } function SetChrAtkIndex_Dualweapon(obj,apdindex) { local index = 10; local appArr = [146,140,137,143,134,0]; return appArr[apdindex]; } function Dualweapon_RemoveAppebd(obj)//??? { local appArr = [ "character/atswordman/2_vegabond/dualweapon/ap_dualweapon0.nut", "character/atswordman/2_vegabond/dualweapon/ap_dualweapon1.nut", "character/atswordman/2_vegabond/dualweapon/ap_dualweapon2.nut", "character/atswordman/2_vegabond/dualweapon/ap_dualweapon3.nut", "character/atswordman/2_vegabond/dualweapon/ap_dualweapon5.nut" ]; foreach(path in appArr) { if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, path)) CNSquirrelAppendage.sq_RemoveAppendage(obj, path); } obj.getVar("ChangeswordCurId").setInt(0, 0); } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Earthpressure_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_EARTHPRESSURE); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_VAGABOND_EARTHPRESSURE, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function onSetState_Earthpressure_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_EARTHPRESSUREBODY); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.sq_PlaySound("EARTH_PRESSURE_UP"); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atearthpressure/earthpressureeffect_effect.ani", 0, 1, 0); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(7,7); local speedRate = 6000.0 / delay.tofloat(); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate); break; } } function onEndCurrentAni_Earthpressure_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_Earthpressure_bykk(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return; } function onEnterFrame_Earthpressure_bykk(obj, frameIndex) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: switch(frameIndex){ case 6: sq_SetMyShake(obj, 2, 250); sq_flashScreen(obj, 0, 100, 0, 102,sq_RGB(192, 192, 192), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_BOTTOM); break; case 7: obj.sq_PlaySound("SW_EARTH_PRESSURE"); obj.sq_PlaySound("EARTH_PRESSURE_DOWN"); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_EARTHPRESSURE, SKILL_VAGABOND_EARTHPRESSURE, 0, 1.0) + 100; local range = sq_GetIntData(obj, SKILL_VAGABOND_EARTHPRESSURE, 0); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(7,7); cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, 0, obj.getDirection(), 3, SKILL_VAGABOND_EARTHPRESSURE, 1, totalDamage, range, delay, 0, 0, 0, 0, 0, 1); obj.getVar("rapid_step_enable").setBool(0, true); obj.getVar("EnableHermitTripleStep").setBool(0, true); break; } break; } } function onEndState_Earthpressure_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_VAGABOND_EARTHPRESSURE){ 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_Earthpressure_bykk(obj, flagIndex) { if (!obj) return; } function onProcCon_Earthpressure_bykk(obj) { if(!obj) return; } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Fatalflower_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_FATALFLOWER); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_VAGABOND_FATALFLOWER, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function onSetState_Fatalflower_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_FATALFLOWER_BODY); obj.sq_SetXScrollStart(350, 200); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FATALFLOWER); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FATALFLOWER, 0, skill_level); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 172)); 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 onEndCurrentAni_Fatalflower_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_SetXScrollStop(100); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Fatalflower_bykk(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return; } function onEnterFrame_Fatalflower_bykk(obj, frameIndex) { if(!obj || !obj.isMyControlObject()) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: switch(frameIndex){ case 0: obj.sq_PlaySound("R_SW_FATAL_FLOWER_01"); sq_flashScreen(obj, 500, 2500, 500, 200, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 4: obj.sq_PlaySound("FATAL_FLOWER_START"); sq_SetMyShake(obj, 3, 120); //`CreateFlower` 0 0 0 local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FATALFLOWER); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FATALFLOWER, 1, skill_level); local totalDamage2 = sq_GetLevelData(obj, SKILL_VAGABOND_FATALFLOWER, 4, skill_level); if(sq_GetSkillLevel(obj, SKILL_VAGABOND_FATALFLOWER) >= 9) totalDamage2 = totalDamage2 * 110 / 100; local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); local hitMax = sq_GetLevelData(obj, SKILL_VAGABOND_FATALFLOWER, 3, skill_level); if(sq_GetSkillLevel(obj, SKILL_VAGABOND_FATALFLOWER) >= 6) hitMax = hitMax + 3; local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(0, 0); local speedRate = 5400.0 / delay.tofloat(); cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, -1, 0, obj.getDirection(), 3, SKILL_VAGABOND_FATALFLOWER, 1, totalDamage, hitMax, damageRate, delay, 0, 0, 0, 0, 0); local pooledObj_1 = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/vagabond/animation/atfatalflower/newhellfireb_front_00.ani", 0, 0, 0); local pooledObj_2 = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/vagabond/animation/atfatalflower/newhellfirea_00.ani", 0, 0, 0); local pAni_1 = pooledObj_1.getCurrentAnimation(); local pAni_2 = pooledObj_2.getCurrentAnimation(); pAni_1.setSpeedRate(speedRate); pAni_2.setSpeedRate(speedRate); break; case 21: sq_SetMyShake(obj, 5, 300); break; case 30: obj.sq_SendCreatePassiveObjectPacket(776103, 0, 120, 1, 800); break; case 41: obj.sq_SendCreatePassiveObjectPacket(776103, 0, 120, 1, 400); break; case 43: sq_SetMyShake(obj, 4, 180); break; case 46: obj.sq_PlaySound("SW_SNAKEDANCE_03"); sq_SetMyShake(obj, 5, 300); break; case 50: //`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; } } function onEndState_Fatalflower_bykk(obj, newState) { if(!obj) return; if(sq_GetSkillLevel(obj, SKILL_VAGABOND_FATALFLOWER) < 3) return; local apPath = "character/atswordman/3_vagabond/fatalflower/ap_fatalflower.nut"; if(newState != SKILL_VAGABOND_FATALFLOWER){ obj.sq_SetXScrollStop(100); local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, false); if(addAppendage){ addAppendage.sq_SetValidTime(30000); addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_VAGABOND_FATALFLOWER, sq_GetSkillLevel(obj, SKILL_VAGABOND_FATALFLOWER)); addAppendage.setEnableIsBuff(true); CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); local CRITICAL_RATE = 15; local change_appendage = addAppendage.sq_getChangeStatus("Fatalflower"); if(!change_appendage) change_appendage = addAppendage.sq_AddChangeStatus("Fatalflower", obj, obj, 0, 15, false, CRITICAL_RATE); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, CRITICAL_RATE.tofloat()); } } 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_Fatalflower_bykk(obj, flagIndex) { if (!obj) return; } function onProcCon_Fatalflower_bykk(obj) { if(!obj) return; } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Fistofexplosion_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(219); if (isUse){ if(sq_GetIntData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 9) > 0) obj.getVar("Fistofexplosion_Bool").setBool(0, true); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); //obj.sq_IsEnterSkillLastKeyUnits(219);//蓄力 obj.sq_AddSetStatePacket(SKILL_VAGABOND_FISTOFEXPLOSION, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function onSetState_Fistofexplosion_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_FISTOFEXPLOSION_CASTSTART_BODY); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FISTOFEXPLOSION_CASTLOOP_BODY); obj.sq_PlaySound("FIST_HELLFIRE_READY"); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(sq_GetIntData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 8) > 0 || FISTOFEXPLOSION_STONE > 0){ local speedRate = 100.0 * (1.0 / 0.6); local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(speedRate); } break; case 2: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FISTOFEXPLOSION_SHOOT_BODY); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); break; } } function onEndCurrentAni_Fistofexplosion_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_VAGABOND_FISTOFEXPLOSION, STATE_PRIORITY_IGNORE_FORCE, true); break; case 2: if(obj.getVar("Fistofexplosion_Bool").getBool(0)){ obj.getVar("Fistofexplosion_Bool").setBool(0, false); obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_VAGABOND_FISTOFEXPLOSION, STATE_PRIORITY_IGNORE_FORCE, true); break; } obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Fistofexplosion_bykk(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return; } function onEnterFrame_Fistofexplosion_bykk(obj, frameIndex) { if(!obj || !obj.isMyControlObject()) return; local subState = obj.getSkillSubState(); switch(subState){ case 2: switch(frameIndex){ case 1: break; case 2: break; } break; } } function onEndState_Fistofexplosion_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_VAGABOND_FISTOFEXPLOSION){ 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_Fistofexplosion_bykk(obj, flagIndex) { if (!obj) return true; local subState = obj.getSkillSubState(); if(subState != 2) return true; switch(flagIndex){ case 1111: obj.sq_PlaySound("FIST_HELLFIRE_BURST"); obj.sq_PlaySound("SW_SNAKEDANCE_03"); sq_SetMyShake(obj, 7, 180); sq_flashScreen(obj, 0, 0, 150, 153,sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FISTOFEXPLOSION); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 2, skill_level); local totalDamage2 = sq_GetLevelData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 1, skill_level); local hitMax = sq_GetLevelData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 0, skill_level); local lifeTime = sq_GetIntData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 2); local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 3); local sub = 0; if(sq_GetIntData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 8) > 0 || FISTOFEXPLOSION_STONE > 0){ sub = 1; lifeTime = lifeTime + 1000; sizeRate = (sizeRate.tofloat() * 1.25).tointeger(); hitMax = hitMax - 2; totalDamage = (totalDamage.tofloat() * 1.27).tointeger(); totalDamage2 = totalDamage2 + 311; } local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 25, 0, 85, obj.getDirection(), 3, SKILL_VAGABOND_FISTOFEXPLOSION, 1, totalDamage, sizeRate, lifeTime, hitMax, damageRate, sub, 0, 0, 1); break; case 1112: obj.getVar("rapid_step_enable").setBool(0, true); obj.getVar("EnableHermitTripleStep").setBool(0, true); break; } return true; } function onProcCon_Fistofexplosion_bykk(obj) { if(!obj) return; } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Fivecircle_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_FIVECIRCLE); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_VAGABOND_FIVECIRCLE, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function onSetState_Fivecircle_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_FIVECIRCLE_START_BODY); obj.sq_PlaySound("SW_FIVE_CIRCLE"); local castTime = sq_GetCastTime(obj, SKILL_VAGABOND_FIVECIRCLE, sq_GetSkillLevel(obj, SKILL_VAGABOND_FIVECIRCLE)); local animation = sq_GetCurrentAnimation(obj); local castAniTime = sq_GetDelaySum(animation); local speedRate = castAniTime.tofloat() / castTime.tofloat(); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); sq_StartDrawCastGauge(obj, castAniTime, true); break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FIVECIRCLE_END_BODY); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); break; } } function onEndCurrentAni_Fivecircle_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_VAGABOND_FIVECIRCLE, STATE_PRIORITY_IGNORE_FORCE, true); break; case 1: local apdPath = "character/atswordman/3_vagabond/fivecircle/ap_fivecircle.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath); local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, false); addAppendage.sq_AddEffectFront("character/swordman/effect/animation/atfivecircle/buffeffect/buff_front_1.ani"); addAppendage.sq_AddEffectBack("character/swordman/effect/animation/atfivecircle/buffeffect/buff_back_1.ani"); addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_VAGABOND_FIVECIRCLE, sq_GetSkillLevel(obj, SKILL_VAGABOND_FIVECIRCLE)); addAppendage.setEnableIsBuff(true); CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FIVECIRCLE); local speedRate = sq_GetLevelData(obj, SKILL_VAGABOND_FIVECIRCLE, 2, skill_level) * 5; // local hitRate = sq_GetLevelData(obj, SKILL_VAGABOND_FIVECIRCLE, 4, skill_level) * 5; local change_appendage = addAppendage.sq_getChangeStatus("fivecircle"); if(!change_appendage) change_appendage = addAppendage.sq_AddChangeStatus("fivecircle", obj, obj, 0, 15, false, 1000); if(change_appendage){ change_appendage.clearParameter(); // change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_DAMAGE_RATE, false, (hitRate * 0.1 / 0.667).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (speedRate).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (speedRate).tofloat()); } setSkillDamageRate_VagaBond_bykk(obj); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onEnterFrame_Fivecircle_bykk(obj, frameIndex) { if(!obj) return; if(obj.getSkillSubState() == 0 && frameIndex == 3){ obj.sq_PlaySound("SW_FIVE_CIRCLE"); obj.sq_PlaySound("FIVE_CIRCLE_CAST"); } } function onEndState_Fivecircle_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_VAGABOND_FIVECIRCLE) sq_EndDrawCastGauge(obj); } function onProcCon_Fivecircle_bykk(obj) { if(!obj) return; } function CreateBuffCutin(obj,CutinPath) { local ani = sq_CreateAnimation("",CutinPath); local pooledObj = sq_CreatePooledObject(ani,true); local objectManager = obj.getObjectManager(); local xPos = obj.getXPos(); local yPos = objectManager.getFieldYPos(0, 0, 7); pooledObj = sq_SetEnumDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); pooledObj.setCurrentPos(xPos +480,yPos ,0); sq_AddObject(obj,pooledObj,2,false); } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Flowerbladedance_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_FLOWERBLADEDANCE); if (isUse){ obj.getVar("flowerbladedance_move").setInt(10, sq_GetXPos(obj)); obj.getVar("flowerbladedance_move").setInt(2, 150); obj.getVar("flowerbladedance").setBool(0, false); obj.getVar("flowerbladedance_jump").setBool(0, false); obj.sq_IntVectClear(); if(obj.sq_GetState() == STATE_JUMP){ obj.sq_IntVectPush(4); obj.getVar("flowerbladedance_move").setInt(2, 250); obj.getVar("flowerbladedance_jump").setBool(0, true); } else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_VAGABOND_FLOWERBLADEDANCE, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function onSetState_Flowerbladedance_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_FLOWERBLADEDANCE_CAST_BODY); break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FLOWERBLADEDANCE_FIRST_BODY); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FLOWERBLADEDANCE); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 0, skill_level); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 175)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 2: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FLOWERBLADEDANCE_SECOND_STARTJUMP_BODY); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FLOWERBLADEDANCE); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 1, skill_level); if(sq_GetIntData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 13) > 0 || FLOWERBLADEDANCE_STONE > 0){ totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 4, skill_level) * 133 / 100; } sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 176)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/secondjump/delay_jump_b.ani", 0, 0, 0); break; case 3: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FLOWERBLADEDANCE_SECOND_BODY); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FLOWERBLADEDANCE); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 4, skill_level); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 176)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/secondjump/delay_jump_b.ani", 0, 0, 0); break; case 4: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FLOWERBLADEDANCE_THIRD_BODY); obj.getVar("flowerbladedance_move").setInt(0, sq_GetXPos(obj)); obj.getVar("flowerbladedance_move").setInt(1, sq_GetZPos(obj)); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(0, 1); obj.setTimeEvent(10, delaySum / 10, 10, true); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FLOWERBLADEDANCE); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 2, skill_level); if(obj.getVar("flowerbladedance_jump").getBool(0)) totalDamage = totalDamage + sq_GetLevelData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 4, skill_level); if(sq_GetIntData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 13) > 0 || FLOWERBLADEDANCE_STONE > 0){ totalDamage = totalDamage * 133 / 100; } sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 173)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 5: if(obj.getVar("flowerbladedance").getBool(0)) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FLOWERBLADEDANCE_SPIN_BODY); else{ obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FLOWERBLADEDANCE_SPIN2_BODY); } local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FLOWERBLADEDANCE); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 3, skill_level); if(obj.getVar("flowerbladedance_jump").getBool(0)) totalDamage = totalDamage * 2; if(sq_GetIntData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 13) > 0 || FLOWERBLADEDANCE_STONE > 0){ totalDamage = totalDamage * 150 * 133 / 10000; } sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 174)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/spin/downattack_dust03.ani", 0, 0, 0); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Flowerbladedance_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: case 2: case 3: case 4: if(sq_GetIntData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 13) > 0 || FLOWERBLADEDANCE_STONE > 0){ if(subState == 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_VAGABOND_FLOWERBLADEDANCE, STATE_PRIORITY_IGNORE_FORCE, true); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/first/delay_back_dust01.ani", 0, 0, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/first/delay_jump_a.ani", 100, 0, 100); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/second/flowerbladedance_delay_second_linedodge.ani", 100, 0, 100); sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 155)); sq_SimpleMoveToNearMovablePos(obj, 200); sq_setCurrentAxisPos(obj, 2, 250); break; } else if(subState == 2){ obj.sq_IntVectClear(); obj.sq_IntVectPush(4); obj.sq_AddSetStatePacket(SKILL_VAGABOND_FLOWERBLADEDANCE, STATE_PRIORITY_IGNORE_FORCE, true); break; } } obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_VAGABOND_FLOWERBLADEDANCE, STATE_PRIORITY_IGNORE_FORCE, true); switch(subState){ case 0: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/dasheffect_light.ani", 0, 0, 0); sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 100)); sq_SimpleMoveToNearMovablePos(obj, 200); break; case 1: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/first/delay_back_dust01.ani", 0, 0, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/first/delay_jump_a.ani", 100, 0, 100); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/second/flowerbladedance_delay_second_linedodge.ani", 100, 0, 100); sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 155)); sq_SimpleMoveToNearMovablePos(obj, 200); sq_setCurrentAxisPos(obj, 2, 250); break; case 4: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/dasheffectdown_jumpline.ani", 0, 0, 0); break; } break; case 5: // if(obj.getVar("flowerbladedance").getBool(0) == false) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onTimeEvent_Flowerbladedance_bykk(obj, timeEventIndex, timeEventCount) { switch(timeEventIndex){ case 10: local srcX = obj.getVar("flowerbladedance_move").getInt(0); local srcZ = obj.getVar("flowerbladedance_move").getInt(1); local moveX = obj.getVar("flowerbladedance_move").getInt(2); local v = sq_GetUniformVelocity(0, moveX, timeEventCount, 10); local vz = sq_GetUniformVelocity(srcZ, 0, timeEventCount, 10); local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); sq_setCurrentAxisPos(obj, 2, vz); if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); else{ obj.getVar("flowerbladedance_move").setInt(0, sq_GetXPos(obj)); obj.getVar("flowerbladedance_move").setInt(2, 0); } break; } } function onAttack_Flowerbladedance_bykk(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return; } function onEnterFrame_Flowerbladedance_bykk(obj, frameIndex) { if(!obj || !obj.isMyControlObject()) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: switch(frameIndex){ case 0: obj.sq_PlaySound("SW_FLOWER_BLADE_DANCE_01"); break; case 1: sq_SetMyShake(obj, 1, 30); sq_flashScreen(obj, 0, 50, 0, 89, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; } break; case 1: switch(frameIndex){ case 0: sq_flashScreen(obj, 0, 20, 0, 127, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 1: obj.sq_PlaySound("FLOWER_BLADE_DANCE_01"); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/first/flowerbladedance_delay_first002.ani", 0, 0, 0); break; case 3: obj.resetHitObjectList(); break; } break; case 2: switch(frameIndex){ case 0: obj.sq_PlaySound("SW_FLOWER_BLADE_DANCE_02"); obj.sq_PlaySound("FLOWER_BLADE_DANCE_JUMP"); sq_SetMyShake(obj, 1, 150); break; case 1: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/secondjump/flowerbladedance_delay_second001.ani", 0, 0, 0); break; case 4: obj.resetHitObjectList(); break; } break; case 3: switch(frameIndex){ case 0: sq_SetMyShake(obj, 1, 150); sq_flashScreen(obj, 0, 20, 0, 127, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); obj.sq_PlaySound("SW_FLOWER_BLADE_DANCE_02"); obj.sq_PlaySound("FLOWER_BLADE_DANCE_JUMP"); break; case 1: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/second/flowerbladedance_delay_second001.ani", 0, 0, 0); break; case 3: obj.resetHitObjectList(); obj.sq_PlaySound("FLOWER_BLADE_DANCE_02"); break; } break; case 4: switch(frameIndex){ case 0: obj.sq_PlaySound("FLOWER_BLADE_DANCE_03"); obj.sq_PlaySound("SW_FLOWER_BLADE_DANCE_03"); sq_flashScreen(obj, 0, 20, 0, 127, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 3, 160); break; case 3: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/third/downattack_dust02.ani", 0, 0, 0); break; case 5: obj.resetHitObjectList(); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/third/flowerbladedance_delay_front_third004.ani", 0, 0, 0); break; } break; case 5: switch(frameIndex){ case 0: sq_flashScreen(obj, 10, 50, 100, 178, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 2: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/dasheffect_light.ani", -500, 0, 70); case 4: sq_SetMyShake(obj, 5, 320); //`finish spin` 7 0 -12 sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/spin/flower_spin.ani", 7, 0, -12); break; case 6: sq_SetMyShake(obj, 1, 50); //`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; } } function onChangeSkillEffect_Flowerbladedance_bykk(obj, skillIndex, receiveData) { if(!obj) return; } function onEndState_Flowerbladedance_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_VAGABOND_FLOWERBLADEDANCE){ 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_Flowerbladedance_bykk(obj, flagIndex) { if (!obj) return; } function onProcCon_Flowerbladedance_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); local curAni = sq_GetCurrentAnimation(obj); local curframe = obj.sq_GetCurrentFrameIndex(curAni); local ststeTime = obj.sq_GetStateTimer(); switch(subState){ case 0: case 1: case 2: case 3: case 4: if(obj.getVar("flowerbladedance").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("flowerbladedance").setBool(0, true); } break; case 5: if(obj.getVar("flowerbladedance").getBool(0) == false){ local pAni = obj.getCurrentAnimation(); local currentT = sq_GetCurrentTime(pAni); local fireT = pAni.getDelaySum(0, 7); local srcX = obj.getVar("flowerbladedance_move").getInt(0); local baseX = obj.getVar("flowerbladedance_move").getInt(10); local v = sq_GetUniformVelocity(srcX, baseX, currentT, fireT); sq_setCurrentAxisPos(obj, 0, v); } break; } } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Gonewiththepetal_bykk(obj) { if (!obj) return 0; local isUseSkill = obj.sq_IsUseSkill(249); if (isUseSkill){ obj.sq_IntVectClear(); if(obj.getState() == STATE_JUMP) obj.sq_IntVectPush(10); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_VAGABOND_GONEWITHTHEPETAL, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function onSetState_Gonewiththepetal_bykk(obj, state, datas, isResetTimer) { obj.sq_StopMove(); local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); switch(subState){ case 0: case 10: if(subState == 0){ obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_GONEWITHTHEPETALREADY_BODY); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atgonewiththepetal/ready_07.ani", 0, 1, 0); } else if(subState == 10){ obj.sq_ZStop(); obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_GONEWITHTHEPETALJUMPREADY_BODY); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atgonewiththepetal/jumpready_07.ani", 0, 1, 0); } obj.getVar("gone_target").clear_obj_vector(); obj.getVar("gone_target_boss").clear_obj_vector(); obj.getVar("gone_target_named").clear_obj_vector(); obj.getVar("gone_target_normal").clear_obj_vector(); local aniPath = "character/swordman/effect/animation/atgonewiththepetal/rangecheck_01.ani"; createOnlyDrawObject_AtSwordMan_bykk(obj, aniPath, true, obj.getDirection(), sq_GetXPos(obj), sq_GetYPos(obj), 0, ENUM_DRAWLAYER_BOTTOM); local rangeX = sq_GetIntData(obj, SKILL_VAGABOND_GONEWITHTHEPETAL, 0); local rangeY = sq_GetIntData(obj, SKILL_VAGABOND_GONEWITHTHEPETAL, 1); local objectManager = obj.getObjectManager();//得到對象管理器 local objectNumber = objectManager.getCollisionObjectNumber();//總數 for (local i = 0; i < objectNumber; i++){ local object = objectManager.getCollisionObject(i);//得到控制類對象 if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && isFrontObject(obj,object) && obj.isEnemy(object)){ local activeObj = sq_GetCNRDObjectToActiveObject(object); if(sq_Abs(sq_GetXPos(activeObj) - sq_GetXPos(obj)) <= rangeX && sq_Abs(sq_GetYPos(activeObj) - sq_GetYPos(obj)) <= rangeY){ if(sq_IsBoss(activeObj)) obj.getVar("gone_target_boss").push_obj_vector(activeObj); else if(sq_IsNamed(activeObj)) obj.getVar("gone_target_named").push_obj_vector(activeObj); else obj.getVar("gone_target_normal").push_obj_vector(activeObj); } } } if(obj.getVar("gone_target_boss").get_obj_vector_size() > 0) obj.getVar("gone_target").push_obj_vector(obj.getVar("gone_target_boss").get_obj_vector(0)); else if(obj.getVar("gone_target_named").get_obj_vector_size() > 0) obj.getVar("gone_target").push_obj_vector(obj.getVar("gone_target_named").get_obj_vector(0)); else if(obj.getVar("gone_target_normal").get_obj_vector_size() > 0) obj.getVar("gone_target").push_obj_vector(obj.getVar("gone_target_normal").get_obj_vector(0)); break; case 1: case 11: if(subState == 1) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_GONEWITHTHEPETALATTACK_BODY); else if(subState == 11) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_GONEWITHTHEPETALJUMPATTACK_BODY); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_GONEWITHTHEPETAL, SKILL_VAGABOND_GONEWITHTHEPETAL, 0, 1.0); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 175)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atgonewiththepetal/attackb_02.ani", 150, 0, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atgonewiththepetal/attacka.ani", 150, 1, 0); local aniPath = "character/swordman/effect/animation/atgonewiththepetal/attackc.ani"; createOnlyDrawObject_AtSwordMan_bykk(obj, aniPath, true, obj.getDirection(), sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 150), sq_GetYPos(obj), 0, ENUM_DRAWLAYER_BOTTOM); break; } } function onTimeEvent_Gonewiththepetal_bykk(obj, timeEventIndex, timeEventCount) { switch(timeEventIndex){ case 1: if(obj.getVar("gone_target").get_obj_vector_size() > 0){ local targetObj = obj.getVar("gone_target").get_obj_vector(0); local moveX = sq_GetDistancePos(sq_GetXPos(targetObj), obj.getDirection(), -130); sq_setCurrentAxisPos(obj, 0, moveX); sq_setCurrentAxisPos(obj, 1, sq_GetYPos(targetObj)); local subState = obj.getSkillSubState(); if(subState == 10) sq_setCurrentAxisPos(obj, 2, 0); obj.sq_IntVectClear(); if(subState == 0) obj.sq_IntVectPush(1); else if(subState == 10) obj.sq_IntVectPush(11); obj.sq_AddSetStatePacket(SKILL_VAGABOND_GONEWITHTHEPETAL, STATE_PRIORITY_IGNORE_FORCE, true); } else{ if(obj.getSkillSubState() == 10){ 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); } else{ obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); } } break; } } function onAttack_Gonewiththepetal_bykk(obj, damager, boundingBox, isStuck) { if (!obj || !damager) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: case 11: if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_GONEWITHTHEPETAL, SKILL_VAGABOND_GONEWITHTHEPETAL, 1, 1.0) + 100; local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_GONEWITHTHEPETAL, SKILL_VAGABOND_GONEWITHTHEPETAL, 2, 1.0) + 100; local hitMax = sq_GetIntData(obj, SKILL_VAGABOND_GONEWITHTHEPETAL, 8); if(sq_GetIntData(obj, SKILL_VAGABOND_GONEWITHTHEPETAL, 18) > 0) hitMax = 1; local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); local group = sq_GetGroup(damager); local uniqueId = sq_GetUniqueId(damager); cearteSkillPassiveObj_AtSwordMan_bykk(obj, damager, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, sq_GetObjectHeight(damager) / 2 * 0, obj.getDirection(), 3,SKILL_VAGABOND_GONEWITHTHEPETAL, 1, totalDamage, hitMax, damageRate, group, uniqueId, 0, 0, 0, 1); } break; } } function onEnterFrame_Gonewiththepetal_bykk(obj, frameIndex) { local subState = obj.getSkillSubState(); switch(subState){ case 0: case 10: switch(frameIndex){ case 0: obj.sq_PlaySound("R_SW_GONE_WITH_THE_PETAL_01"); obj.sq_PlaySound("PLAY_MY_GLOBAL"); break; case 2: obj.sq_PlaySound("GONE_WITH_THE_PETAL_CAST"); obj.sq_PlaySound("PLAY_MY_GLOBAL"); case 3: obj.setTimeEvent(1, 80, 1, false); break; } break; case 1: case 11: switch(frameIndex){ case 1: obj.sq_PlaySound("GONE_WITH_THE_PETAL_ABSORB"); obj.sq_PlaySound("PLAY_MY_GLOBAL"); break; case 3: //`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; } } function onKeyFrameFlag_Gonewiththepetal_bykk(obj, flagIndex) { if(!obj) return; } function onProcCon_Gonewiththepetal_bykk(obj) { if(!obj) return; } function onEndCurrentAni_Gonewiththepetal_bykk(obj) { local subState = obj.getSkillSubState(); switch(subState){ case 0: case 10: //obj.setTimeEvent(1, 80, 1, true); break; case 1: case 11: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onEndState_Gonewiththepetal_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_VAGABOND_GONEWITHTHEPETAL){ sq_SimpleMoveToNearMovablePos(obj,200); 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 checkExecutableSkill_Hermittriplestep_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_HERMITTRIPLESTEP); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_VAGABOND_HERMITTRIPLESTEP, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function onSetState_Hermittriplestep_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.getVar("hermittriplestep").setBool(0, false); obj.getVar("hermittriplestep_move").setInt(10, sq_GetXPos(obj)); obj.getVar("hermittriplestep_move").setInt(11, sq_GetYPos(obj)); obj.getVar("hermittriplestep_tar").clear_obj_vector(); obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_HERMITTRIPLESTEPCAST); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/cast_dust.ani", 0, 0, 0); // obj.setTimeEvent(1, 25, -1, false); break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_HERMITTRIPLESTEPATTACK1); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 178)); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/attacka_front_leef03.ani", 0, 1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/attacka_back_leef02.ani", 0, -1, 0); local objectManager = obj.getObjectManager(); for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ local object = objectManager.getCollisionObject(i);//得到控制類對象 if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && !object.isInDamagableState(obj)){ local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj); local tarPosX = sq_GetXPos(object), tarPosY = sq_GetYPos(object); if(direction == ENUM_DIRECTION_RIGHT){ if((tarPosX > xPos && tarPosX - xPos <= 640) || (tarPosX < xPos && xPos- tarPosX <= 260)){ if(sq_Abs(tarPosY - yPos) <= 100){ local activeObj = sq_GetCNRDObjectToActiveObject(object); sq_SetCustomDamageType(activeObj, false, 0); if(!obj.getVar("hermittriplestep_tar").is_obj_vector(activeObj)) obj.getVar("hermittriplestep_tar").push_obj_vector(activeObj); local apdPath = "character/atswordman/3_vagabond/hermittriplestep/ap_hermittriplestep.nut"; if(!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, apdPath)){ local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, apdPath, true); sq_HoldAndDelayDie(activeObj, obj, true, true, true, 0, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); } } } } else if(direction == ENUM_DIRECTION_LEFT){ if((tarPosX < xPos && xPos- tarPosX <= 640) || (tarPosX > xPos && tarPosX - xPos <= 260)){ if(sq_Abs(tarPosY - yPos) <= 100){ local activeObj = sq_GetCNRDObjectToActiveObject(object); sq_SetCustomDamageType(activeObj, false, 0); if(!obj.getVar("hermittriplestep_tar").is_obj_vector(activeObj)) obj.getVar("hermittriplestep_tar").push_obj_vector(activeObj); local apdPath = "character/atswordman/3_vagabond/hermittriplestep/ap_hermittriplestep.nut"; if(!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, apdPath)){ local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, apdPath, true); sq_HoldAndDelayDie(activeObj, obj, true, true, true, 0, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); } } } } } } break; case 2: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_HERMITTRIPLESTEPATTACK2); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 178)); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/attackb_front_leef03.ani", 0, 1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/attackb_back_leef02.ani", 0, -1, 0); break; case 3: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_HERMITTRIPLESTEPATTACK3); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 178)); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/attackc_front_leef01.ani", 0, 1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/attackc_back_leef02.ani", 0, -1, 0); break; case 4: obj.removeAllTimeEvent(); if(obj.getVar("hermittriplestep").getBool(0)) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_HERMITTRIPLESTEPLAST1FRONT); else{ sq_setCurrentAxisPos(obj, 0, obj.getVar("hermittriplestep_move").getInt(10)); sq_setCurrentAxisPos(obj, 1, obj.getVar("hermittriplestep_move").getInt(11)); obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_HERMITTRIPLESTEPLAST1); } sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/lasta_leef.ani", 0, 0, 0); break; case 5: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_HERMITTRIPLESTEPLAST2); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_HERMITTRIPLESTEP, SKILL_VAGABOND_HERMITTRIPLESTEP, 0, 1.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 177)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/lastb_effect02.ani", 0, 0, 0); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Hermittriplestep_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: case 2: case 3: case 4: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_VAGABOND_HERMITTRIPLESTEP, STATE_PRIORITY_IGNORE_FORCE, true); switch(subState){ case 0: sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(obj.getVar("hermittriplestep_move").getInt(10), obj.getDirection(), 200)); // sq_SimpleMoveToNearMovablePos(obj,300); break; case 1: sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(obj.getVar("hermittriplestep_move").getInt(10), obj.getDirection(), 380)); // sq_SimpleMoveToNearMovablePos(obj,400); break; case 2: sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(obj.getVar("hermittriplestep_move").getInt(10), obj.getDirection(), 590)); // sq_SimpleMoveToNearMovablePos(obj,600); break; } break; case 5: local size = obj.getVar("hermittriplestep_tar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("hermittriplestep_tar").get_obj_vector(i); if(targetObj){ local colObj = sq_GetCNRDObjectToCollisionObject(targetObj); CNSquirrelAppendage.sq_RemoveAppendage(colObj, "character/atswordman/3_vagabond/hermittriplestep/ap_hermittriplestep.nut"); } } } obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onEnterFrame_Hermittriplestep_bykk(obj, frameIndex) { if(!obj || !obj.isMyControlObject()) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: switch(frameIndex){ case 1: obj.sq_PlaySound("R_SW_FLOWER_BLADE_SLASH_01"); obj.sq_PlaySound("FLOWER_BLADE_SLASH_CAST"); sq_flashScreen(obj, 60, 420, 0, 102, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; } break; case 1: case 2: switch(frameIndex){ case 1: obj.sq_PlaySound("FLOWER_BLADE_SLASH_DASH"); sq_flashScreen(obj, 0, 120, 0, 102, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; } break; case 3: switch(frameIndex){ case 1: sq_flashScreen(obj, 0, 120, 360, 102, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 2: obj.sq_PlaySound("FLOWER_BLADE_SLASH_DASH"); break; } break; case 4: if(obj.getVar("hermittriplestep").getBool(0) == false){ switch(frameIndex){ case 1: obj.sq_PlaySound("FLOWER_BLADE_SLASH_RETURN"); break; case 6: sq_flashScreen(obj, 720, 120, 0, 255, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 14: obj.sq_PlaySound("R_SW_FLOWER_BLADE_SLASH_02"); break; } } else{ switch(frameIndex){ case 1: obj.sq_PlaySound("FLOWER_BLADE_SLASH_RETURN"); break; case 2: sq_flashScreen(obj, 720, 120, 0, 255, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 9: obj.sq_PlaySound("R_SW_FLOWER_BLADE_SLASH_02"); break; } } break; case 5: switch(frameIndex){ case 1: sq_flashScreen(obj, 0, 0, 600, 153, sq_RGB(255, 255, 255), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_BOTTOM); break; case 2: obj.sq_PlaySound("FLOWER_BLADE_SLASH_SHEATHE"); sq_SetMyShake(obj, 6, 250); break; } break; } } function onChangeSkillEffect_Hermittriplestep(obj, skillIndex, receiveData) { if(!obj || skillIndex != 225) return; } function onTimeEvent_Hermittriplestep_bykk(obj, timeEventIndex, timeEventCount) { switch(timeEventIndex){ case 1: local srcX = obj.getVar("hermittriplestep_move").getInt(10); local dstX = sq_GetDistancePos(srcX, obj.getDirection(), 20 * timeEventCount);//根據方嚮運算當前數值 if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);//設置當前x坐標 else obj.stopTimeEvent(1); break; } } function onAttack_Hermittriplestep_bykk(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return false; local subState = obj.getSkillSubState(); switch(subState){ case 1: case 2: case 3: if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ if(!obj.getVar("hermittriplestep_tar").is_obj_vector(damager)) obj.getVar("hermittriplestep_tar").push_obj_vector(damager); local apdPath = "character/atswordman/3_vagabond/hermittriplestep/ap_hermittriplestep.nut"; if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, apdPath)){ local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true); sq_HoldAndDelayDie(damager, obj, true, true, true, 0, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); } } break; case 5: if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ sq_AddDrawOnlyAniFromParent(damager, "character/swordman/effect/animation/athermittriplestep/hit_effect02.ani", 0, 0, sq_GetObjectHeight(damager) / 2); } break; } } function onEndState_Hermittriplestep_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_VAGABOND_HERMITTRIPLESTEP){ local size = obj.getVar("hermittriplestep_tar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("hermittriplestep_tar").get_obj_vector(i); if(targetObj){ local colObj = sq_GetCNRDObjectToActiveObject(targetObj); CNSquirrelAppendage.sq_RemoveAppendage(colObj, "character/atswordman/3_vagabond/hermittriplestep/ap_hermittriplestep.nut"); } } } sq_SimpleMoveToNearMovablePos(obj,600); } } function onKeyFrameFlag_Hermittriplestep_bykk(obj, flagIndex) { local subState = obj.getSkillSubState(); if(subState == 5 && flagIndex == 0){ local size = obj.getVar("hermittriplestep_tar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("hermittriplestep_tar").get_obj_vector(i); if(targetObj){ local colObj = sq_GetCNRDObjectToCollisionObject(targetObj); sq_SendHitObjectPacketWithNoStuck(obj, colObj, 0, 0, sq_GetObjectHeight(colObj) / 2); } } } } } function HermittriplestepSearchTarget(obj) { if(IsInterval(obj, 5)) { local objectManager = obj.getObjectManager(); for(local i=0; i 0) { local direction = obj.sq_GetInputDirection(0); if(obj.getDirection() == direction) { sq_BinaryStartWrite(); sq_BinaryWriteDword(1); sq_SendChangeSkillEffectPacket(obj, 225); } } } function onProcCon_Hermittriplestep_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); local curAni = sq_GetCurrentAnimation(obj); local curframe = obj.sq_GetCurrentFrameIndex(curAni); local aniSumTime = sq_GetDelaySum(curAni); local ststeTime = obj.sq_GetStateTimer(); switch(subState){ case 1: case 2: case 3: if(obj.getVar("hermittriplestep").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("hermittriplestep").setBool(0, true); } break; } } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Inhalation_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_INHALATION); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_VAGABOND_INHALATION, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function onSetState_Inhalation_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_INHALATIONCAST); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local range = sq_GetIntData(obj, SKILL_VAGABOND_INHALATION, 2); obj.getVar("inhalation_target").clear_obj_vector(); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_VAGABOND,300,0,0,obj.getDirection(),3,SKILL_VAGABOND_INHALATION,1,range,0,0,0,0,0,0,0,0); break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_INHALATIONGRAB); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local baseX = sq_GetIntData(obj, SKILL_VAGABOND_INHALATION, 1); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); obj.setTimeEvent(1, delaySum, 1, false); local size = obj.getVar("inhalation_target").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("inhalation_target").get_obj_vector(i); if(targetObj){ local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/atswordman/3_vagabond/inhalation/ap_inhalation.nut"); sq_MoveToAppendageForce(targetObj, obj, obj, baseX, 0, 0, delaySum, true, addAppendage); createOnlyDrawObject_AtSwordMan_bykk(obj, "character/swordman/effect/animation/atinhalation/dust.ani", true, obj.getDirection(), sq_GetXPos(targetObj), sq_GetYPos(targetObj), 0, ENUM_DRAWLAYER_BOTTOM); } } } break; case 2: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_INHALATIONTHROW); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_INHALATION); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_INHALATION, 0, skill_level); local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_INHALATION, 6); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 152)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local size = obj.getVar("inhalation_target").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("inhalation_target").get_obj_vector(i); if(targetObj){ sq_SendHitObjectPacket(obj, targetObj, 0, 0, 0); cearteSkillPassiveObj_AtSwordMan_bykk(obj, targetObj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, 0, obj.getDirection(), 3, SKILL_VAGABOND_INHALATION, 2, totalDamage, sizeRate, 0, 0, 0, 0, 0, 0, 1); } } } break; } } function onEndCurrentAni_Inhalation_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_VAGABOND_INHALATION, STATE_PRIORITY_IGNORE_FORCE, true); break; case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_VAGABOND_INHALATION, STATE_PRIORITY_IGNORE_FORCE, true); break; case 2: local size = obj.getVar("inhalation_target").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("inhalation_target").get_obj_vector(i); if(targetObj){ CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/3_vagabond/inhalation/ap_inhalation.nut"); } } } obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onTimeEvent_Inhalation_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return; } function onAttack_Inhalation_bykk(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return; } function onEnterFrame_Inhalation_bykk(obj, frameIndex) { if(!obj) return; local subState = obj.getSkillSubState(); if(subState == 2 && frameIndex == 1){ obj.getVar("rapid_step_enable").setBool(0, true); obj.getVar("EnableHermitTripleStep").setBool(0, true); } } function onEndState_Inhalation_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_VAGABOND_INHALATION){ 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); local size = obj.getVar("inhalation_target").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("inhalation_target").get_obj_vector(i); if(targetObj){ CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/3_vagabond/inhalation/ap_inhalation.nut"); } } } } } function onKeyFrameFlag_Inhalation_bykk(obj, flagIndex) { if (!obj) return; } function onProcCon_Inhalation_bykk(obj) { if(!obj) return; } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Moonlightslash_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_MOONLIGHTSLASH); if (isUse){ obj.sq_IntVectClear(); // print("sub ="+sq_GetIntData(obj, SKILL_VAGABOND_MOONLIGHTSLASH, 12)); if(sq_GetIntData(obj, SKILL_VAGABOND_MOONLIGHTSLASH, 12) > 0) obj.sq_IntVectPush(6); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_VAGABOND_MOONLIGHTSLASH, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function onSetState_Moonlightslash_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_MOONLIGHTSLASH_READY); 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_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 0, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 179)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(false); obj.setTimeEvent(3, delay, 1, false); break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_MOONLIGHTSLASH_CUT); 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_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 0, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 180)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); obj.setTimeEvent(1, delaySum / 18, 17, false); break; case 2: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_MOONLIGHTSLASH_DASH); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.getVar("moonlightslash_move").setInt(12, 355); obj.getVar("moonlightslash_move").setInt(13, 0); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 2, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 181)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 3: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_MOONLIGHTSLASH_UPPER); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.getVar("moonlightslash_move").setInt(12, -400); obj.getVar("moonlightslash_move").setInt(13, 230); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 3, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 182)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 4: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_MOONLIGHTSLASH_SLASH); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.getVar("moonlightslash_move").setInt(12, 45); obj.getVar("moonlightslash_move").setInt(13, -sq_GetZPos(obj)); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 5, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 183)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 5: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_MOONLIGHTSLASH_SLASH_UPPER); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.getVar("moonlightslash_move").setInt(12, -45); obj.getVar("moonlightslash_move").setInt(13, 0); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 6, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 184)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 6: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_MOONLIGHTSLASH_FINISH); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.getVar("moonlightslash_move").setInt(12, 45); obj.getVar("moonlightslash_move").setInt(13, 300); break; case 7: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_MOONLIGHTSLASH_FINISH_EXP); 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_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 7, 1.0); if(sq_GetIntData(obj, SKILL_VAGABOND_MOONLIGHTSLASH, 12) > 0){ totalDamage = totalDamage + obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 0, 23.0); } sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 185)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; } obj.getVar("moonlightslash_move").setInt(10, sq_GetXPos(obj)); obj.getVar("moonlightslash_move").setInt(11, sq_GetZPos(obj)); } function onTimeEvent_Moonlightslash_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return; switch(timeEventIndex){ case 1: obj.resetHitObjectList(); break; case 2: local srcZ = obj.getVar("moonlightslash_move").getInt(11); local vz = sq_GetUniformVelocity(srcZ, 0, timeEventCount, 10); sq_setCurrentAxisPos(obj, 2, vz); break; case 3: //if(sq_GetIntData(obj, SKILL_VAGABOND_MOONLIGHTSLASH, 12) < 1) sendAwakeCutinInfo(obj,37); break; } } function onEndCurrentAni_Moonlightslash_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: case 2: case 3: case 4: case 5: case 6: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_VAGABOND_MOONLIGHTSLASH, STATE_PRIORITY_IGNORE_FORCE, true); break; case 7: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Moonlightslash_bykk(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return; } function onEnterFrame_Moonlightslash_bykk(obj, frameIndex) { if(!obj || !obj.isMyControlObject()) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: switch(frameIndex){ case 5: obj.sq_PlaySound("MOON_LIGHT_SLASH_CAST"); obj.sq_PlaySound("SW_MOON_LIGHT_SLASH_01"); sq_flashScreen(obj, 100, 4600, 0, 204, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 5, 50); break; case 9: obj.sq_PlaySound("MOON_LIGHT_SLASH_STAB"); break; case 10: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step01b_dust07.ani", 0, 0, 0); break; case 11: sq_SetMyShake(obj, 4, 100); break; case 12: sq_flashScreen(obj, 0, 50, 0, 76, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 9, 200); break; } break; case 1: switch(frameIndex){ case 0: obj.sq_PlaySound("MOON_LIGHT_SLASH_HACK"); sq_flashScreen(obj, 0, 20, 0, 76, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 3: case 6: case 9: case 12: case 15: case 18: sq_flashScreen(obj, 0, 20, 0, 76, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 19: obj.sq_PlaySound("SW_MOON_LIGHT_SLASH_02"); break; } break; case 2: switch(frameIndex){ case 0: obj.sq_PlaySound("MOON_LIGHT_SLASH_DASH"); sq_flashScreen(obj, 0, 100, 0, 76, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 5, 240); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step03b_dust03.ani", 0, 0, 0); break; case 3: obj.sq_PlaySound("SW_MOON_LIGHT_SLASH_03"); break; } break; case 3: switch(frameIndex){ case 0: obj.sq_PlaySound("MOON_LIGHT_SLASH_JUMP"); sq_SetMyShake(obj, 3, 10); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step04b_dust01.ani", 0, 0, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step04c_atk.ani", -220, 0, 70); break; } break; case 4: switch(frameIndex){ case 0: sq_flashScreen(obj, 0, 40, 0, 102, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step06b_dust03.ani", 20, 0, -280); break; case 1: obj.sq_PlaySound("SW_MOON_LIGHT_SLASH_05"); obj.sq_PlaySound("MOON_LIGHT_SLASH_BLADE"); sq_SetMyShake(obj, 7, 150); break; } break; case 5: switch(frameIndex){ case 0: obj.sq_PlaySound("MOON_LIGHT_SLASH_UPPER"); break; case 1: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step07_spin.ani", 0, 0, 0); break; } break; case 6: switch(frameIndex){ case 0: obj.sq_PlaySound("MOON_LIGHT_SLASH_RISE"); sq_flashScreen(obj, 0, 20, 0, 76, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step08c_beam.ani", 0, 0, 0); break; case 2: obj.sq_PlaySound("R_SW_MOON_LIGHT_SLASH_06"); sq_flashScreen(obj, 0, 20, 0, 51, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 3: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step08b_leaf00.ani", 0, -1, -200); break; case 4: sq_flashScreen(obj, 0, 100, 0, 127, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 12: obj.sq_PlaySound("MOON_LIGHT_SLASH_CHARGE"); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(12, 14); obj.getVar("moonlightslash_move").setInt(11, sq_GetZPos(obj)); obj.setTimeEvent(2, delaySum / 10, 10, true); break; } break; case 7: switch(frameIndex){ case 0: obj.sq_PlaySound("R_SW_MOON_LIGHT_SLASH_07"); obj.sq_PlaySound("MOON_LIGHT_SLASH_EXP"); sq_flashScreen(obj, 0, 60, 0, 127, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 10, 700); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step09a_atkmain.ani", 0, 1, 0); break; case 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; case 2: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step09b_leafa00.ani", 0, 2, 0); break; } break; } } function onEndState_Moonlightslash_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_VAGABOND_MOONLIGHTSLASH){ 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 onProc_Moonlightslash_bykk(obj) { if(!obj) return; } function onKeyFrameFlag_Moonlightslash_bykk(obj, flagIndex) { if (!obj) return; } function onProcCon_Moonlightslash_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); if(subState == 0 || subState == 1 || subState == 7) return; local pAni = obj.getCurrentAnimation(); local currentT = sq_GetCurrentTime(pAni); local fireT = pAni.getDelaySum(0, 3); switch(subState){ case 3: fireT = pAni.getDelaySum(false); break; case 4: fireT = pAni.getDelaySum(0, 1); break; case 5: fireT = pAni.getDelaySum(false); break; case 6: fireT = pAni.getDelaySum(0, 2); break; } if(subState == 6 && currentT > fireT) return; local srcX = obj.getVar("moonlightslash_move").getInt(10); local srcZ = obj.getVar("moonlightslash_move").getInt(11); local MoveX = obj.getVar("moonlightslash_move").getInt(12); local MoveZ = obj.getVar("moonlightslash_move").getInt(13); local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT); local vz = sq_GetUniformVelocity(0, MoveZ, currentT, fireT); local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); sq_setCurrentAxisPos(obj, 2, srcZ + vz); if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); else{ obj.getVar("moonlightslash_move").setInt(10, sq_GetXPos(obj)); obj.getVar("moonlightslash_move").setInt(12, 0); } } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Nearblow_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_NEARBLOW); if (isUse){ if(sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 10) > 0) obj.getVar("Nearblow_Bool").setBool(0, true); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_VAGABOND_NEARBLOW, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function onSetState_Nearblow_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_NEARBLOWPIERCE); 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_NEAR_BLOW"); obj.getVar("nearblow").setBool(0,false); obj.getVar("nearblow_target").clear_obj_vector(); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_NEARBLOW); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_NEARBLOW, 0, skill_level); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 158)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_NEARBLOWPIERCEBACK); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); break; case 2: if(!obj.isMovablePos(sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), -150), sq_GetYPos(obj))) obj.getVar("nearblow").setBool(0, true); if(obj.getVar("nearblow").getBool(0)) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_NEARBLOWPIERCEFRONTSLASH); else obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_NEARBLOWPIERCEBACKSLASH); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(obj.getVar("nearblow").getBool(0) == false){ local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); local size = obj.getVar("nearblow_target").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("nearblow_target").get_obj_vector(i); if(targetObj){ local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/atswordman/3_vagabond/nearblow/ap_nearblow.nut"); sq_MoveToAppendageForce(targetObj, obj, obj, -150, 0, 0, delaySum, true, addAppendage); } } } } local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_NEARBLOW); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_NEARBLOW, 1, skill_level); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 158)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; } } function onEndCurrentAni_Nearblow_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 10) > 0){ obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } if(obj.getVar("nearblow_target").get_obj_vector_size() < 1){ obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_VAGABOND_NEARBLOW, STATE_PRIORITY_IGNORE_FORCE, true); break; case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_VAGABOND_NEARBLOW, STATE_PRIORITY_IGNORE_FORCE, true); break; case 2: local size = obj.getVar("nearblow_target").get_obj_vector_size(); if(size > 0 && obj.getVar("nearblow").getBool(0) == false){ local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_NEARBLOW); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_NEARBLOW, 2, skill_level); local range = sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 0); for(local i = 0; i < size; i++){ local targetObj = obj.getVar("nearblow_target").get_obj_vector(i); if(targetObj){ CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/3_vagabond/nearblow/ap_nearblow.nut"); cearteSkillPassiveObj_AtSwordMan_bykk(obj,targetObj,PASSIVEOBJECT_BYKK_VAGABOND,0,0,0,obj.getDirection(),3,SKILL_VAGABOND_NEARBLOW,1,totalDamage,range,0,0,0,0,0,0,1); } } } if(obj.getVar("nearblow").getBool(0) == false) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onTimeEvent_Nearblow_bykk(obj, timeEventIndex, timeEventCount) {} function onAttack_Nearblow_bykk(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return false; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ if(sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 10) > 0){ if(obj.getVar("Nearblow_Bool").getBool(0)){ obj.getVar("Nearblow_Bool").setBool(0, false); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_NEARBLOW); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_NEARBLOW, 2, skill_level); totalDamage = totalDamage * sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 11); local range = sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 0); cearteSkillPassiveObj_AtSwordMan_bykk(obj,damager,PASSIVEOBJECT_BYKK_VAGABOND,0,0,-85-sq_GetZPos(obj),obj.getDirection(),3,SKILL_VAGABOND_NEARBLOW,2,totalDamage,range,0,0,0,0,0,0,1); } } else{ if(sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager) && !sq_IsFixture(damager)){ if(obj.getVar("Nearblow").getBool(0) == false) obj.getVar("Nearblow").setBool(0,true); obj.getVar("nearblow_target").push_obj_vector(damager); local path = "character/atswordman/3_vagabond/nearblow/ap_nearblow.nut"; local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, path, true); if(addAppendage){ sq_HoldAndDelayDie(damager, obj, true, true, true, 0, 0, ENUM_DIRECTION_NEUTRAL, addAppendage); sq_MoveToAppendageForce(damager, obj, damager, 0, 0, 20, 100, true, addAppendage); } } else if(sq_IsFixture(damager)){ obj.getVar("nearblow").setBool(0, true); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_NEARBLOW); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_NEARBLOW, 2, skill_level); totalDamage = totalDamage * sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 11); local range = sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 0); cearteSkillPassiveObj_AtSwordMan_bykk(obj,damager,PASSIVEOBJECT_BYKK_VAGABOND,0,0,-85-sq_GetZPos(obj),obj.getDirection(),3,SKILL_VAGABOND_NEARBLOW,2,totalDamage,range,0,0,0,0,0,0,1); return; } } } break; } } function onEnterFrame_Nearblow_bykk(obj, frameIndex) { if(!obj) return; local subState = obj.getSkillSubState(); local size = obj.getVar("Nearblow").get_obj_vector_size(); switch(subState){ case 0: if(frameIndex == 3) sq_SetMyShake(obj, 8, 40); break; case 2: if(obj.getVar("nearblow").getBool(0)){ if(frameIndex == 5) sq_SetMyShake(obj, 10, 100); else if(frameIndex == 6){ obj.getVar("rapid_step_enable").setBool(0, true); obj.getVar("EnableHermitTripleStep").setBool(0, true); } else if(frameIndex == 9){ local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_NEARBLOW); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_NEARBLOW, 2, skill_level); local range = sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 0); local size = obj.getVar("nearblow_target").get_obj_vector_size(); for(local i = 0; i < size; i++){ local targetObj = obj.getVar("nearblow_target").get_obj_vector(i); if(targetObj){ CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/3_vagabond/nearblow/ap_nearblow.nut"); cearteSkillPassiveObj_AtSwordMan_bykk(obj,targetObj,PASSIVEOBJECT_BYKK_VAGABOND,0,0,0,obj.getDirection(),3,SKILL_VAGABOND_NEARBLOW,1,totalDamage,range,0,0,0,0,0,0,1); } } } } else{ if(frameIndex == 2){ sq_SetMyShake(obj, 15, 100); obj.getVar("rapid_step_enable").setBool(0, true); obj.getVar("EnableHermitTripleStep").setBool(0, true); } } } } function onEndState_Nearblow_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_VAGABOND_NEARBLOW){ local size = obj.getVar("nearblow_target").get_obj_vector_size(); if(size > 0 && obj.getVar("nearblow").getBool(0) == false){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("nearblow_target").get_obj_vector(i); if(targetObj){ CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/3_vagabond/nearblow/ap_nearblow.nut"); } } } 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_Nearblow_bykk(obj, flagIndex) { if (!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 2: switch(flagIndex){ case 1: if(obj.getVar("nearblow").getBool(0)){ local size = obj.getVar("nearblow_target").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("nearblow_target").get_obj_vector(i); if(targetObj){ sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); } } } } break; } break; } } function onProcCon_Nearblow_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: if(obj.getVar("nearblow").getBool(0) == false){ if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT) obj.getVar("nearblow").setBool(0, true); else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT) obj.getVar("nearblow").setBool(0, true); } break; } } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Overblowslash_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_OVERBLOWSLASH); if (isUse){ obj.sq_StopMove(); obj.sq_IntVectClear(); 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_GetIntData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 5) > 0){ obj.getVar("overblowslash_move").setInt(10, sq_GetXPos(obj)); if(sq_GetIntData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 5) > 0) obj.getVar("overblowslash_move").setInt(11, sq_GetIntData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 2) / 2); else obj.getVar("overblowslash_move").setInt(11, sq_GetIntData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 2)); obj.sq_IntVectPush(1); } else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_VAGABOND_OVERBLOWSLASH, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function onSetState_Overblowslash_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_OVERBLOWSLASHREADY); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.sq_PlaySound("OVERBLOW_SLASH_DASH"); obj.sq_PlaySound("SW_OVERBLOW_SLASH"); break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_OVERBLOWSLASHDASH); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atoverblowslash/overblowslashdash_smoke.ani", 0, 0, 0); obj.sq_PlaySound("OVERBLOW_SLASH_DASH"); obj.sq_PlaySound("SW_OVERBLOW_SLASH"); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_OVERBLOWSLASH); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 1, skill_level); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 159)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 2: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_OVERBLOWSLASHSTART_BODY); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.sq_PlaySound("OVERBLOW_SLASH_01"); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_OVERBLOWSLASH); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 1, skill_level); local hitMax = sq_GetLevelData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 0, skill_level); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 161)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(0,16); obj.setTimeEvent(1, delaySum / (hitMax + 1), hitMax, true); break; } } function onTimeEvent_Overblowslash_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: obj.resetHitObjectList(); break; } } function onEndCurrentAni_Overblowslash_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_VAGABOND_OVERBLOWSLASH, STATE_PRIORITY_IGNORE_FORCE, true); break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Overblowslash_bykk(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return false; local subState = obj.getSkillSubState(); switch(subState){ case 0: break; case 1: break; } } function onEnterFrame_Overblowslash_bykk(obj, frameIndex) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 2: if(frameIndex == 1){ } else if(frameIndex == 22){ } else if(frameIndex == 23){ } break; } } function onEndState_Overblowslash_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_VAGABOND_OVERBLOWSLASH){ 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_Overblowslash_bykk(obj, flagIndex) { if (!obj) return true; local subState = obj.getSkillSubState(); if(subState != 2) return true; switch(flagIndex){ case 1111: sq_SetMyShake(obj, 2, 650); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(1,1); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_OVERBLOWSLASH); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 4, skill_level); local hitMax = sq_GetLevelData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 3, skill_level); local totalDamage2 = sq_GetLevelData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 5, skill_level); local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 4); local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); if(sq_GetIntData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 9) > 0 || OVERBLOWSLASH_STONE > 0){ hitMax = (hitMax.tofloat() * (1 + 0.8 + 0.67)).tointeger(); sizeRate = (sizeRate.tofloat() * 1.25).tointeger(); totalDamage = (totalDamage.tofloat() * 1.07).tointeger(); } cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_VAGABOND,0,0,0,obj.getDirection(),3,SKILL_VAGABOND_OVERBLOWSLASH,1,totalDamage,hitMax,sizeRate,damageRate,delaySum,0,0,0,1); break; case 1112: obj.resetHitObjectList(); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_OVERBLOWSLASH); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 2, skill_level); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 160)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sq_SetMyShake(obj,9,300); sq_flashScreen(obj, 200, 50, 0, 153,sq_RGB(255, 255, 255), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_BOTTOM); break; case 1113: obj.getVar("rapid_step_enable").setBool(0, true); obj.getVar("EnableHermitTripleStep").setBool(0, true); break; } return true; } function onProcCon_Overblowslash_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: local pAni = obj.getCurrentAnimation(); local currentT = sq_GetCurrentTime(pAni); local fireT = pAni.getDelaySum(false); local srcX = obj.getVar("overblowslash_move").getInt(10); local MoveX = obj.getVar("overblowslash_move").getInt(11); local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT); local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); else{ obj.getVar("overblowslash_move").setInt(10, sq_GetXPos(obj)); obj.getVar("overblowslash_move").setInt(11, 0); } break; case 2: sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); } break; } } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Rapidstep_bykk(obj)//一花渡江 { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_RAPIDSTEP); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_VAGABOND_RAPIDSTEP, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function onSetState_Rapidstep_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_RAPIDSTEP_BODY); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.sq_PlaySound("RAPID_STEP"); obj.sq_PlaySound("SW_GUARD"); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); obj.setTimeEvent(1,delaySum / 10, 9, false); local moveX = sq_GetIntData(obj, SKILL_VAGABOND_RAPIDSTEP, 0); obj.getVar("rapidstep_move").clear_vector(); obj.getVar("rapidstep_move").push_vector(sq_GetXPos(obj)); obj.getVar("rapidstep_move").push_vector(sq_GetZPos(obj)); obj.getVar("rapidstep_move").push_vector(moveX); break; } } function onTimeEvent_Rapidstep_bykk(obj, timeEventIndex, timeEventCount) { switch(timeEventIndex){ case 1: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_RAPIDSTEP, SKILL_VAGABOND_RAPIDSTEP, 0, 1.0) + 100; local balance = [100,210,140,230,120,195,110,120,100]; local offsetZ = [50,-40,80,-30,90,-20,70,30,0]; local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_RAPIDSTEP, 1) * balance[timeEventCount - 1] / 100; cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, offsetZ[timeEventCount - 1] - sq_GetZPos(obj), obj.getDirection(), 3, SKILL_VAGABOND_RAPIDSTEP, 1, totalDamage, sizeRate, timeEventIndex, 0, 0, 0, 0, 0, 1); break; } } function onEndCurrentAni_Rapidstep_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onEnterFrame_Rapidstep_bykk(obj, frameIndex) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: switch(frameIndex){ case 0: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atrapidstep/enddust_00.ani", 0, 1, 0); break; case 6: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atrapidstep/startdust_00.ani", 0, 1, 0); break; } break; } } function onEndState_Rapidstep_bykk(obj, newState) { if(!obj) return; } function onProcCon_Rapidstep_bykk(obj) { local subState = obj.getSkillSubState(); switch(subState){ case 0: local pAni = obj.getCurrentAnimation(); local currentT = sq_GetCurrentTime(pAni); local fireT = pAni.getDelaySum(false); local srcX = obj.getVar("rapidstep_move").get_vector(0); local srcZ = obj.getVar("rapidstep_move").get_vector(1); local MoveX = obj.getVar("rapidstep_move").get_vector(2); local vx = sq_GetUniformVelocity(0, MoveX, currentT, fireT); local vz = sq_GetAccel(srcZ, 30, currentT, fireT / 2, true); if(currentT > fireT / 2) vz = sq_GetAccel(30, 0, currentT - fireT / 2, fireT / 2, false); local dstX = sq_GetDistancePos(srcX, obj.getDirection(), vx); if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); else{ obj.getVar("rapidstep_move").set_vector(0, sq_GetXPos(obj)); obj.getVar("rapidstep_move").set_vector(2, 0); } sq_setCurrentAxisPos(obj, 2, vz); break; } } function onKeyFrameFlag_Rapidstep_bykk(obj, flagIndex) { if (!obj) return; switch(flagIndex){ case 0: break; } } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Revolvingsword_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_REVOLVINGSWORD); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_VAGABOND_REVOLVINGSWORD, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function onSetState_Revolvingsword_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_REVOLVINGSWORDREADY); obj.sq_PlaySound("SW_REVOLVING_SWORD"); break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_REVOLVINGSWORDSPIN); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 0, skill_level); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 150)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local hitMax = sq_GetIntData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 0); if(true) hitMax = hitMax + sq_GetIntData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 3); obj.getVar("revolvingsword").setInt(10, hitMax); obj.getVar("revolvingsword").setInt(11, 0); local hitTime = sq_GetIntData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 1); obj.setTimeEvent(1, hitTime, 1, true); break; case 2: obj.removeAllTimeEvent(); obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_REVOLVINGSWORDFINISH); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 1, skill_level); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 149)); 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 onEndCurrentAni_Revolvingsword_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_VAGABOND_REVOLVINGSWORD, STATE_PRIORITY_IGNORE_FORCE, true); break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onTimeEvent_Revolvingsword_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return; switch(timeEventIndex){ case 0: break; case 1: if(obj.getVar("revolvingsword").getInt(11) >= obj.getVar("revolvingsword").getInt(10)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_VAGABOND_REVOLVINGSWORD, STATE_PRIORITY_IGNORE_FORCE, true); } else{ local inputConut = obj.getRapidInputFrequency(); inputConut = inputConut.tointeger(); local inputMax = 2; local gapByInputMin = sq_GetIntData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 1) / 16; local gapByInputMax = sq_GetIntData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 1) / 8; obj.getVar("revolvingsword").setInt(11, obj.getVar("revolvingsword").getInt(11) + 1); if(inputConut >= inputMax){ obj.setTimeEvent(1, gapByInputMin, 1,false); obj.resetHitObjectList(); local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(333.3); } else{ obj.setTimeEvent(1, gapByInputMax, 1,false); obj.resetHitObjectList(); local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(100.0); } } break; } } function onEnterFrame_Revolvingsword_bykk(obj, frameIndex) { if(!obj) return; local subState = obj.getSkillSubState(); if(subState == 2 && frameIndex == 5){ obj.getVar("rapid_step_enable").setBool(0, true); obj.getVar("EnableHermitTripleStep").setBool(0, true); } } function onEndState_Revolvingsword_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_VAGABOND_REVOLVINGSWORD){ 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_Revolvingsword_bykk(obj, flagIndex) { if (!obj) return; } function onProcCon_Revolvingsword_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_VAGABOND_REVOLVINGSWORD, STATE_PRIORITY_IGNORE_FORCE, true); } break; } } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Soarcut_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_SOARCUT); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_VAGABOND_SOARCUT, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function onSetState_Soarcut_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 count = sq_GetIntData(obj,213, 5); switch(subState){ case 0: obj.getVar("soarcut_target").clear_obj_vector(); if(sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUTEX) > 0) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTUPPERSLASH_MAGIC); else obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTUPPERSLASH); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcuta_leaf_00.ani", 0, 1, 0); local offsetX = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 150); if(obj.isMovablePos(offsetX, sq_GetYPos(obj))) obj.getVar("soarcut").setInt(10, 150); else obj.getVar("soarcut").setInt(10, 0); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUT); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_SOARCUT, 0, skill_level); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 156)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTJUMP); break; case 2: if(sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUTEX) > 0) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTAERIALSLASHEX); else obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTAERIALSLASH); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUTEX) > 0) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcutb_leaf_b.ani", 0, 1, 0); else sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcutd_leaf_b.ani", 0, 1, 0); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUT); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_SOARCUT, 1, skill_level); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 154)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 3: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTFALLINGEX); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUT); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_SOARCUT, 2, skill_level); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 154)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local hitMax = sq_GetIntData(obj, SKILL_VAGABOND_SOARCUT, 5); local currentAni = obj.getCurrentAnimation(); local speedRate = 6000 / currentAni.getDelaySum(0, 0); currentAni.setSpeedRate(speedRate.tofloat() * 2.5); local delaySum = currentAni.getDelaySum(false); obj.setTimeEvent(0, delaySum / (hitMax + 1), hitMax, true); local size = obj.getVar("soarcut_target").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("soarcut_target").get_obj_vector(i); if(targetObj){ local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/atswordman/3_vagabond/soarcut/ap_soarcut.nut"); sq_MoveToAppendageForce(targetObj, obj, targetObj, 0, 0, -sq_GetZPos(targetObj), delaySum, true, addAppendage); } } } break; case 4: if(sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUTEX) > 0) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTFINISHEFFECTEX); else obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTFINISHEFFECT); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUT); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_SOARCUT, 3, skill_level); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 155)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; } } function onEndCurrentAni_Soarcut_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(obj.getVar("soarcut_target").get_obj_vector_size() < 1){ obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); } else{ obj.getVar("soarcut_move").setInt(10, sq_GetXPos(obj)); obj.getVar("soarcut_move").setInt(11, sq_GetZPos(obj)); obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_VAGABOND_SOARCUT, STATE_PRIORITY_IGNORE_FORCE, true); } break; case 1: case 2: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_VAGABOND_SOARCUT, STATE_PRIORITY_IGNORE_FORCE, true); break; case 4: local size = obj.getVar("soarcut_target").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("soarcut_target").get_obj_vector(i); if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/3_vagabond/soarcut/ap_soarcut.nut"); } } obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Soarcut_bykk(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return false; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ if(sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager) && !sq_IsFixture(damager)){ obj.getVar("soarcut_target").push_obj_vector(damager); local path = "character/atswordman/3_vagabond/soarcut/ap_soarcut.nut"; local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, path, true); sq_MoveToAppendageForce(damager, obj, obj, obj.getVar("soarcut").getInt(10), 0, 200, 160, true, addAppendage); sq_HoldAndDelayDie(damager, obj, true, true, true, 0, 200, ENUM_DIRECTION_NEUTRAL , addAppendage); } } break; case 4: if(damager.isObjectType(OBJECTTYPE_ACTIVE) && CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/atswordman/3_vagabond/soarcut/ap_soarcut.nut")){ CNSquirrelAppendage.sq_RemoveAppendage(damager, "character/atswordman/3_vagabond/soarcut/ap_soarcut.nut"); } break; } } function onTimeEvent_Soarcut_bykk(obj, timeEventIndex, timeEventCount) { if (!obj) return false; switch(timeEventIndex){ case 0: obj.resetHitObjectList(); break; } } function onEnterFrame_Soarcut_bykk(obj, frameIndex) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 3: switch(frameIndex){ case 0: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcutd_leaf_b.ani", 0, 1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcute_atkeff_00.ani", 0, 1, 0); break; case 2: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcute_atkeff_04.ani", 0, 1, 0); break; case 4: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcute_atkeff_00.ani", 0, 1, 0); break; case 6: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcute_atkeff_04.ani", 0, 1, 0); break; } break; case 4: if(sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUTEX) > 0){ if(frameIndex == 2){ obj.getVar("rapid_step_enable").setBool(0, true); obj.getVar("EnableHermitTripleStep").setBool(0, true); } } break; } } function onEndState_Soarcut_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_VAGABOND_SOARCUT){ local size = obj.getVar("soarcut_target").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("soarcut_target").get_obj_vector(i); if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/3_vagabond/soarcut/ap_soarcut.nut"); } } 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 onProcCon_Soarcut_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: local ststeTime = obj.sq_GetStateTimer(); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(0,1); if(ststeTime > delaySum) break; local baseX = obj.getVar("soarcut_move").getInt(10); local baseZ = obj.getVar("soarcut_move").getInt(11); local vx = sq_GetUniformVelocity(0, obj.getVar("soarcut").getInt(10), ststeTime, delaySum); local vz = sq_GetAccel(0, 200, ststeTime, delaySum, false); sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(baseX, obj.getDirection(), vx)); sq_setCurrentAxisPos(obj, 2, vz); break; case 3: local ststeTime = obj.sq_GetStateTimer(); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); local vz = sq_GetAccel(200, 0, ststeTime, delaySum, false); sq_setCurrentAxisPos(obj, 2, vz); if(sq_GetZPos(obj) <= 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(4); obj.sq_AddSetStatePacket(SKILL_VAGABOND_SOARCUT, STATE_PRIORITY_IGNORE_FORCE, true); break; } break; } } function onKeyFrameFlag_Soarcut_bykk(obj, flagIndex) { if (!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 2: switch(flagIndex){ case 1: local size = obj.getVar("soarcut_target").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("soarcut_target").get_obj_vector(i); if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); } } break; } break; } } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Threeside_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_THREESIDE); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_VAGABOND_THREESIDE, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function onSetState_Threeside_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.getVar("Threeside").setBool(0,false); obj.sq_PlaySound("SW_THREE_SIDE"); if(sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIPEX) > 0) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_THREESIDEEX); else obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_THREESIDE); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 3, skill_level); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 151)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 1: if(sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIPEX) > 0) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_AFTER_THREESIDEEX); else obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_AFTER_THREESIDE); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Threeside_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(obj.getVar("Threeside").getBool(0)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_VAGABOND_THREESIDE, STATE_PRIORITY_IGNORE_FORCE, true); } else obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; case 1: obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Threeside_bykk(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: break; case 1: break; } } function onEnterFrame_Threeside_bykk(obj, frameIndex) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIPEX) < 1 && frameIndex == 6 && obj.getVar("Threeside").getBool(0)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_VAGABOND_THREESIDE, STATE_PRIORITY_IGNORE_FORCE, true); } switch(frameIndex){ case 3: if(sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIPEX) > 0) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atthreeside/threeside_ex_threeside_12.ani", 0, 3, 0); break; case 5: if(sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIPEX) > 0) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atthreeside/threeside_ex_threeside_11.ani", 0, 4, 0); case 6: obj.resetHitObjectList(); break; } break; } } function onEndState_Threeside_bykk(obj, newState) { if(!obj) return; } function onKeyFrameFlag_Threeside_bykk(obj, flagIndex) { if (!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: if(flagIndex == 3){ local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 4, skill_level); if(sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIPEX) > 0) cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_VAGABOND,0,0,0,obj.getDirection(),3,SKILL_VAGABOND_THREESIDE,2,totalDamage,0,0,0,0,0,0,0,1); else cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_VAGABOND,0,0,0,obj.getDirection(),3,SKILL_VAGABOND_THREESIDE,1,totalDamage,0,0,0,0,0,0,0,1); } break; } } function onProcCon_Threeside_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(obj.getVar("Threeside").getBool(0) == false){ local curAni = sq_GetCurrentAnimation(obj); local curframe = obj.sq_GetCurrentFrameIndex(curAni); obj.setSkillCommandEnable(SKILL_VAGABOND_THREESIDE, true); local b_useskill = obj.sq_IsEnterSkill(SKILL_VAGABOND_THREESIDE); if(b_useskill != -1 && curframe > 1) obj.getVar("Threeside").setBool(0,true); } break; } } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Zweivoltageex_bykk(obj) { if (!obj) return 0; if(obj.getVar("zwei").get_obj_vector_size() > 0 && (sq_GetIntData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 5) > 0 || ZWEIVOLTAGE_STONE > 0)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(SKILL_VAGABOND_ZWEIVOLTAGEEX, STATE_PRIORITY_IGNORE_FORCE, true); return 0; } local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_ZWEIVOLTAGEEX); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_VAGABOND_ZWEIVOLTAGEEX, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function onSetState_Zweivoltageex_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_ZWEIVOLTAGEHORIZONSLASH); break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_ZWEIVOLTAGEVERTICALCAST); local currentAni = sq_GetCurrentAnimation(obj); local delaySum = currentAni.getDelaySum(0,0); local size = obj.getVar("zwei_tar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("zwei_tar").get_obj_vector(i); if(targetObj){ local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); local masterAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, "character/atswordman/3_vagabond/zweivoltageex/ap_zweivoltageex.nut"); if(!sq_IsFixture(activeObj)) sq_MoveToAppendageForce(activeObj, obj, obj, 100, 0, 200, delaySum, true, masterAppendage); } } } break; case 2: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_ZWEIVOLTAGEVERTICAL); local currentAni = sq_GetCurrentAnimation(obj); local delaySum = currentAni.getDelaySum(0,0); local size = obj.getVar("zwei_tar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("zwei_tar").get_obj_vector(i); if(targetObj){ local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); local masterAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, "character/atswordman/3_vagabond/zweivoltageex/ap_zweivoltageex.nut"); if(!sq_IsFixture(activeObj)) sq_MoveToAppendageForce(activeObj, obj, activeObj, 0, 0, -sq_GetZPos(activeObj), delaySum, true, masterAppendage); } } } break; case 3: obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_ZWEIVOLTAGEEXPLOSION); local attackObj = obj.getVar("zwei").get_obj_vector(0); if(attackObj){ local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); } break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Zweivoltageex_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_VAGABOND_ZWEIVOLTAGEEX, 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 onEnterFrame_Zweivoltageex_bykk(obj, frameIndex) { if(!obj || !obj.isMyControlObject()) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: switch(frameIndex){ case 1: obj.sq_PlaySound("SW_CROSS_SWORD"); break; case 3: obj.sq_PlaySound("CROSS_SWORD_READY"); break; case 13: obj.sq_PlaySound("CROSS_SWORD_01"); sq_SetMyShake(obj, 5, 50); sq_flashScreen(obj, 50, 100, 50, 204, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); //`create zwei voltage horizon` 119 -1 62 local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 0, skill_level); local totalDamage2 = sq_GetLevelData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 2, skill_level); local lifeTime = sq_GetIntData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 1); local isStone = 0; if(sq_GetIntData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 5) > 0 || ZWEIVOLTAGE_STONE > 0){ isStone = 1; totalDamage = totalDamage * 2; totalDamage2 = (totalDamage2.tofloat() * 1.88).tointeger(); lifeTime = lifeTime + 1500; } local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 119, -1, 62, obj.getDirection(), 3, SKILL_VAGABOND_ZWEIVOLTAGEEX, 2, totalDamage, lifeTime, damageRate, isStone, 0, 0, 0, 0, 1); break; case 25: if(sq_GetIntData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 5) > 0 || ZWEIVOLTAGE_STONE > 0){ obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } break; } break; case 1: switch(frameIndex){ case 1: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atzweivoltage/zweivoltage_partb_eff_a.ani", 0, 1, 0); break; case 3: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atzweivoltage/zweivoltage_partb_eff_b.ani", 0, 1, 0); break; } break; case 2: switch(frameIndex){ case 1: obj.sq_PlaySound("CROSS_SWORD_02"); sq_SetMyShake(obj, 10, 100); sq_flashScreen(obj, 50, 100, 50, 204, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); //`create zwei voltage vertical` 100 -1 69 local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX); local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 0, skill_level); local totalDamage2 = sq_GetLevelData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 2, skill_level); local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); local lifeTime = sq_GetIntData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 1); cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 100, -1, 69, obj.getDirection(), 3, SKILL_VAGABOND_ZWEIVOLTAGEEX, 1, totalDamage, lifeTime, damageRate,0,0,0,0,0,1); obj.getVar("rapid_step_enable").setBool(0, true); obj.getVar("EnableHermitTripleStep").setBool(0, true); break; } break; } } function onAttack_Zweivoltageex_bykk(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return; } function onEndState_Zweivoltageex_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_VAGABOND_ZWEIVOLTAGEEX){ 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_Zweivoltageex_bykk(obj, flagIndex) { if (!obj) return; } function onProcCon_Zweivoltageex_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); local currentAni = sq_GetCurrentAnimation(obj); local currentT = sq_GetCurrentTime(currentAni); local delaySum = currentAni.getDelaySum(0,0); switch(subState){ case 1: local vz = sq_GetAccel(0, 200, currentT, delaySum, true); sq_setCurrentAxisPos(obj, 2, vz); break; case 2: local vz = sq_GetAccel(200, 0, currentT, delaySum, false); if(currentT > delaySum) vz = 0; sq_setCurrentAxisPos(obj, 2, vz); break; } }