function procSkill_Swordman_ghostsword_bykk(obj) { local skill = sq_GetSkill(obj, 231); local state = obj.getState(); if(!skill.isInCoolTime() && (state == 0 || state == 8 || state > 13) && state != 231){ obj.setSkillCommandEnable(231, true); if(obj.sq_IsEnterSkill(231) != -1){ obj.startSkillCoolTime(231, sq_GetSkillLevel(obj, 231), -1); obj.sq_IntVectClear(); switch(state){ case 0: case 14: obj.sq_IntVectPush(0);//共鸣系列 break; case STATE_SPIRITMOVE: obj.sq_IntVectPush(1);//剑术系列 break; default: obj.sq_IntVectPush(2);//幻鬼系列 break; } obj.sq_AddSetStatePacket(231, STATE_PRIORITY_IGNORE_FORCE, true); } } if(sq_GetSkillLevel(obj, 232) > 0){ local timer = obj.getVar("ReturnISCt").get_ct_vector(0); if(!timer){ obj.getVar("ReturnISCt").clear_ct_vector(); obj.getVar("ReturnISCt").push_ct_vector(); timer = obj.getVar("ReturnISCt").get_ct_vector(0); timer.Reset();//初始化 timer.Start(10000,0);//计时开始 obj.getVar("ReturnISBool").setBool(0, true); } local currentT = timer.Get();//得到时间 local coolTime = sq_GetIntData(obj, 232, 2); if(currentT >= coolTime){ timer.Reset();//初始化 timer.Start(10000,0);//计时开始 obj.getVar("ReturnISBool").setBool(0, true); } local VSObject = getVSObject(obj); if((state == 2 || state == 3 || state == 4) && VSObject && obj.getVar("ReturnISBool").getBool(0)){ obj.setSkillCommandEnable(231, true); if(obj.sq_IsEnterSkill(231) != -1){ obj.getVar("ReturnISBool").setBool(0, false); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_RETURNSPIRITMOVE, STATE_PRIORITY_IGNORE_FORCE, true); als_ani(obj, "character/swordman/effect/animation/returnspiritmove/returnspiritmovestart_00.ani", 0, 0, 0, 0, 100, 0, 1, 1.0); als_ani(obj, "character/swordman/effect/animation/returnspiritmove/returnspiritmovestart_01.ani", 0, 0, 0, 0, 100, 0, 1, 1.0); } } } } //空中 function onAfterSetState_SM_Jump(obj, state, datas, isResetTimer) { if(!obj) return; if(sq_getGrowType(obj) != 1) return; obj.getVar("jumpMessageSave").setInt(0, sq_GetVectorData(datas, 1)); if(sq_GetVectorData(datas, 1) == 1 && sq_GetVectorData(datas, 3) == 1){ obj.sq_IntVectClear(); obj.sq_IntVectPush(49); obj.sq_AddSetStatePacket(7, STATE_PRIORITY_IGNORE_FORCE, true); } } function onProcCon_SM_Jump(obj) { if(!obj) return; if(sq_getGrowType(obj) != 1) return; if(obj.getWeaponSubType() == 2){ if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDTWO).isInCoolTime()){ // sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMIND, true); local b_useskill = obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMIND); if(b_useskill != -1){// || sq_IsEnterCommand(obj, E_ATTACK_COMMAND) obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMINDTWO, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDTWO), -1); obj.sq_IntVectClear(); obj.sq_IntVectPush(10); obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTWO, STATE_PRIORITY_IGNORE_FORCE, true); return; } } } else{ if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDONE).isInCoolTime()){ obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMIND, true); local b_useskill = obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMIND); if(b_useskill != -1){ obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMINDONE, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDONE), -1); obj.sq_IntVectClear(); obj.sq_IntVectPush(10); obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDONE, STATE_PRIORITY_IGNORE_FORCE, true); return; } } } // if(obj.getVar("jumpMessageSave").getInt(0) != 1){ // obj.setSkillCommandEnable(169, true); // if(obj.sq_IsEnterSkill(169) != -1){ // obj.sq_IntVectClear(); // obj.sq_IntVectPush(1); // obj.sq_IntVectPush(1); // obj.sq_IntVectPush(200); // obj.sq_IntVectPush(1); // obj.sq_AddSetStatePacket(6, STATE_PRIORITY_IGNORE_FORCE, true); // return; // } // } } //空中攻击 function onAfterSetState_SM_JumpAttack(obj, state, datas, isResetTimer) { if(!obj) return; if(sq_getGrowType(obj) != 1) return; local atkInfo = obj.sq_GetVectorData(datas, 0); obj.getVar("smjatkSet").setInt(0, atkInfo); if(obj.getWeaponSubType() == 2 && sq_GetSkillLevel(obj, SKILL_SMBYKK_BLUNTMASTERY) >= 3){ sq_SetCurrentAttackInfo(obj, obj.sq_GetJumpAttackInfo()); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), sq_GetIntData(obj, SKILL_SMBYKK_BLUNTMASTERY, 13)); } } function onAttack_SM_JumpAttack(obj, damager, boundingBox, isStuck) { if(!obj) return; if(isStuck) return; if(sq_getGrowType(obj) != 1) return; if(obj.getVar("smjatkSet").getInt(0) == 17) return; if(obj.getWeaponSubType() != 2) return; if(sq_GetSkillLevel(obj, SKILL_SMBYKK_BLUNTMASTERY) < 5) return; if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_BLUNTMASTERY, -1, 8, 1.0); local sizeRate = 100 + 3 * sq_GetSkillLevel(obj, SKILL_SMBYKK_BLUNTMASTERY); local upForceSet = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_BLUNTMASTERY, -1, 4, 1.0) + 100; if(obj.getVar("smjatkSet").getInt(0) == 49){ totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_BLUNTMASTERY, -1, 3, 1.0); upForceSet = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_BLUNTMASTERY, -1, 2, 1.0) + 100; } createSkillPassive_Swordman_bykk(obj,damager,PASSIVEOBJ_BYKK_SWORDMAN,0,0,-sq_GetZPos(obj),sq_GetDirection(obj),1,SKILL_SMBYKK_BLUNTMASTERY,1,totalDamage,sizeRate,upForceSet,0,0,0,0,0); } } function onKeyFrameFlag_SM_JumpAttack(obj, flagIndex) { if(!obj) return false; if(sq_getGrowType(obj) != 1) return false; switch(flagIndex){ case 0: local atkInfo = obj.getVar("smjatkSet").getInt(0); if(atkInfo == 49){ if(sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFLIMIT) > 0){ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_STATEOFLIMIT, -1, 0, 1.0); createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,30,0,-20,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFLIMIT,3,totalDamage,0,0,0,0,0,0,0); print("test"); } } break; } return true; } function onEndState_SM_JumpAttack(obj, new_state) { if(!obj) return; if(new_state != 7){ obj.getVar("jumpAttackBool").setBool(0, false); } } //银光落刃 function onAfterSetState_SM_Ashenfork(obj, state, datas, isResetTimer) { if(!obj) return; if(sq_getGrowType(obj) != 1) return; local weaponSubType = obj.getWeaponSubType(); local bonusRate = 1.0; if(weaponSubType == 2) bonusRate = (100 - sq_GetIntData(obj, SKILL_SMBYKK_ASHENFORK, 7)).tofloat() / 100.0; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_ASHENFORK, -1, 0, bonusRate); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_ASHENFORK)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); } function onCreateObject_SM_Ashenfork(obj, createObject) { if(!obj) return; if(sq_getGrowType(obj) != 1) return; if(createObject.isObjectType(OBJECTTYPE_PASSIVE)){ local colObj = sq_GetCNRDObjectToCollisionObject(createObject); local passiveObjId = colObj.getCollisionObjectIndex(); // print("passiveObjId = "+passiveObjId); if(passiveObjId == 20016){ colObj.setValid(false); local weaponSubType = obj.getWeaponSubType();//0短1太2钝3巨5光 local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_ASHENFORK); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_ASHENFORK, -1, 1, 1.0); local sizeRate = sq_GetLevelData(obj, SKILL_SMBYKK_ASHENFORK, 2, skillLevel); if(weaponSubType == 3){ local totalDamageSub = totalDamage * sq_GetIntData(obj, SKILL_SMBYKK_ASHENFORK, 4) / 100; local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_ASHENFORK, 5); createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_ASHENFORK,2,totalDamageSub,hitMax,sizeRate,0,0,0,0,0); } else if(weaponSubType == 2){ totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_ASHENFORK, -1, 3, 1.0); sizeRate = sq_GetLevelData(obj, SKILL_SMBYKK_ASHENFORK, 4, skillLevel); } createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_ASHENFORK,1,totalDamage,sizeRate,0,0,0,0,0,0); } } } //里·鬼剑术 function checkExecutableSkill_SMWeaponCombo(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_WEAPONCOMBO); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_SMBYKK_WEAPONCOMBO, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_SMWeaponCombo(obj) { if (!obj) return false; return true; } function onSetState_SMWeaponCombo(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); obj.sq_ZStop(); //0短1太2钝3巨5光 local weaponSubType = obj.getWeaponSubType(); local aniSet = [[ANI_SMBYKK_WEAPONCOMBOSHORT1, ANI_SMBYKK_WEAPONCOMBOSHORT2, ANI_SMBYKK_WEAPONCOMBOSHORT3], [ANI_SMBYKK_WEAPONCOMBOBLADE1, ANI_SMBYKK_WEAPONCOMBOBLADE2, ANI_SMBYKK_WEAPONCOMBOBLADE3, ANI_SMBYKK_WEAPONCOMBOBLADE4], [ANI_SMBYKK_WEAPONCOMBOBLUNT1, ANI_SMBYKK_WEAPONCOMBOBLUNT2, ANI_SMBYKK_WEAPONCOMBOBLUNT3, ANI_SMBYKK_WEAPONCOMBOBLUNT4], [ANI_SMBYKK_WEAPONCOMBOHEAVY1, ANI_SMBYKK_WEAPONCOMBOHEAVY2], [], [ANI_SMBYKK_WEAPONCOMBOLIGHT1, ANI_SMBYKK_WEAPONCOMBOLIGHT2, ANI_SMBYKK_WEAPONCOMBOLIGHT3]]; obj.sq_SetCurrentAnimation(aniSet[weaponSubType][subState]); local speedRate = [0.9,1.3,1.1,0.75,1.0,1.2]; obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate[weaponSubType], speedRate[weaponSubType]); local atkSet = [[ATK_SMBYKK_WEAPONCOMBOSHORT1,ATK_SMBYKK_WEAPONCOMBOSHORT2,ATK_SMBYKK_WEAPONCOMBOSHORT3], [ATK_SMBYKK_WEAPONCOMBOBLADE1,ATK_SMBYKK_WEAPONCOMBOBLADE2,ATK_SMBYKK_WEAPONCOMBOBLADE3,ATK_SMBYKK_WEAPONCOMBOBLADE4], [ATK_SMBYKK_WEAPONCOMBOBLUNT1,ATK_SMBYKK_WEAPONCOMBOBLUNT2,ATK_SMBYKK_WEAPONCOMBOBLUNT3,ATK_SMBYKK_WEAPONCOMBOBLUNT4], [ATK_SMBYKK_WEAPONCOMBOHEAVY1,ATK_SMBYKK_WEAPONCOMBOHEAVY2], [], [ATK_SMBYKK_WEAPONCOMBOLIGHT1,ATK_SMBYKK_WEAPONCOMBOLIGHT2,ATK_SMBYKK_WEAPONCOMBOLIGHT3]]; local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_WEAPONCOMBO, 0, sq_GetSkillLevel(obj, SKILL_SMBYKK_WEAPONCOMBO)).tofloat() / 100.0 + 1.0; // print("bonusRate = "+bonusRate); local totalDamage = obj.sq_GetBonusRateWithPassive(174, -1, 0, bonusRate) + 100; if(obj.getVar("weaponcombo_bool").getBool(0)){ obj.getVar("weaponcombo_bool").setBool(0, false); totalDamage = totalDamage * (100 + sq_GetIntData(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY, 6)) / 100; } // print("totalDamage = "+totalDamage); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkSet[weaponSubType][subState])); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage / 10); obj.sq_PlaySound("R_SM_ATK"); local soundSet = ["R_MINERALSWDA","R_KATANAA","R_STICKA","R_SQUARESWDA","","R_BEAMSWDA"]; obj.sq_PlaySound(soundSet[weaponSubType]); local soundSet2 = ["R_MINERALSWDC","R_KATANAC","R_STICKC","R_SQUARESWDC","","R_BEAMSWDC"]; obj.sq_PlaySound(soundSet2[weaponSubType]); obj.startRapidInput(); switch(weaponSubType){ case 0: local effectPath = ["effect/animation/1_swordman_bykk/weaponcombo/short_new_01.ani","effect/animation/1_swordman_bykk/weaponcombo/short_new_02.ani","effect/animation/1_swordman_bykk/weaponcombo/short_new_03.ani"]; obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation(effectPath[subState]), 0, 0); effectPath = ["effect/animation/1_swordman_bykk/shortswordmastery/shortweaponcombo1.ani","effect/animation/1_swordman_bykk/shortswordmastery/shortweaponcombo2.ani","effect/animation/1_swordman_bykk/shortswordmastery/shortweaponcombo3.ani"]; obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation(effectPath[subState]), 0, 0); if(sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY) > 0 && subState > 0){ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_SHORTSWORDMASTERY, -1, 17, 1.0); local sizeRate = sq_GetIntData(obj, SKILL_SMBYKK_SHORTSWORDMASTERY, 13); createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_WEAPONCOMBO,1,totalDamage,sizeRate,subState,0,0,0,0,0); } break; case 1: local effectPath = [["character/swordman/effect/animation/weaponcombo/ura_katana_eff.ani"], ["character/swordman/effect/animation/weaponcombo/katana_new1_under_effect.ani","character/swordman/effect/animation/weaponcombo/katana_new1_upper_effect.ani"], ["character/swordman/effect/animation/weaponcombo/ura_katana_eff.ani"], ["character/swordman/effect/animation/weaponcombo/katana_new2_under_effect.ani","character/swordman/effect/animation/weaponcombo/katana_new2_upper_effect.ani"]]; local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj) + 1; for(local i = 0; i < effectPath[subState].len(); i++){ local effectObj = createOnlyDrawObject_Swordman_bykk(obj,effectPath[subState][i],true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL); sq_moveWithParent(obj, effectObj); } break; case 2: // break; case 3: if(subState == 0 && sq_GetSkillLevel(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY) >= 3){//使用[里 · 鬼剑术]时, 第1次斩击会出现飓风, 按住技能键可以蓄气进行第2次斩击 local totalDamage = totalDamage * 30 / 1000; createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,100,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_WEAPONCOMBO,2,totalDamage,0,0,0,0,0,0,0); obj.sq_IsEnterSkillLastKeyUnits(SKILL_SMBYKK_WEAPONCOMBO); local aniPath = "character/swordman/effect/animation/1_swordman_bykk/shortswordmastery/heavyweaponcombochargedodge.ani"; local pooledObj = createOnlyDrawObject_Swordman_bykk(obj,aniPath,true,sq_GetDirection(obj),sq_GetDistancePos(sq_GetXPos(obj), sq_GetDirection(obj), -70),sq_GetYPos(obj) + 1,60,ENUM_DRAWLAYER_NORMAL); local speedRate = 142000 / sq_GetIntData(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY, 6); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); obj.getVar("weaponcombo_effect").clear_obj_vector(); obj.getVar("weaponcombo_effect").push_obj_vector(pooledObj); return; } break; case 5: local effectPath = [["light1-1.ani","light1-2.ani","light1-3.ani","light1-4.ani","light1-5.ani","light1-6.ani"], ["light2-1.ani","light2-2.ani","light2-3.ani","light2-4.ani","light2-5.ani","light2-6.ani"], ["light3-1.ani","light3-2.ani","light3-3.ani","light3-4.ani","light3-5.ani","light3-6.ani"]]; for(local i = 0; i < 3; i++){ obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/weaponcombo/" + effectPath[subState][i]), 0, 0); } break; } if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){ obj.getVar("handlingsword_canShoot").setBool(0, true); } if(weaponSubType == 5 && sq_GetSkillLevel(obj, SKILL_SMBYKK_LIGHTSWORDMASTERY) >= 3){ local attackInfo = sq_GetCurrentAttackInfo(obj); local proc = sq_GetIntData(obj, SKILL_SMBYKK_LIGHTSWORDMASTERY, 5); local time = sq_GetIntData(obj, SKILL_SMBYKK_LIGHTSWORDMASTERY, 6); local level = sq_GetSkillLevel(obj, 174) + 5; sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_LIGHTNING, 1000, level, time); } if(subState == 0) return; if(subState + 1 < aniSet[weaponSubType].len()) obj.sq_SetStaticMoveInfo(0, 0, 50, false, 100, true); else obj.sq_SetStaticMoveInfo(0, 0, 200, false, 120, true); obj.sq_SetMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL); } function onEndCurrentAni_SMWeaponCombo(obj) { if(!obj) return; local weaponSubType = obj.getWeaponSubType(); if(weaponSubType == 3 && sq_GetSkillLevel(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY) >= 3){ local subState = obj.getSkillSubState(); if(subState == 0) return; } obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); } function onProcCon_SMWeaponCombo(obj) { if(!obj) return; obj.setSkillCommandEnable(169, true); if(obj.sq_IsEnterSkill(169) != -1){ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(1); obj.sq_IntVectPush(200); obj.sq_AddSetStatePacket(6, STATE_PRIORITY_AUTO, true); return; } sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(8, STATE_PRIORITY_AUTO, true); return; } if(!sq_GetSkill(obj, SKILL_SMBYKK_HUNDREDSWORD).isInCoolTime()){ obj.setSkillCommandEnable(SKILL_SMBYKK_HUNDREDSWORD, true); if(obj.sq_IsEnterSkill(SKILL_SMBYKK_HUNDREDSWORD) != -1){ obj.startSkillCoolTime(SKILL_SMBYKK_HUNDREDSWORD, sq_GetSkillLevel(obj, SKILL_SMBYKK_HUNDREDSWORD), -1); obj.sq_IntVectClear(); if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) obj.sq_IntVectPush(1); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(47, STATE_PRIORITY_AUTO, true); return; } } if(!sq_GetSkill(obj, 46).isInCoolTime()){ obj.setSkillCommandEnable(46, true); if(obj.sq_IsEnterSkill(46) != -1){ obj.startSkillCoolTime(46, sq_GetSkillLevel(obj, 46), -1); obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_IntVectPush(46); obj.sq_AddSetStatePacket(8, STATE_PRIORITY_AUTO, true); return; } } if(!sq_GetSkill(obj, 8).isInCoolTime() && obj.getVar("weaponcomboBool1").getBool(0) == false){ obj.setSkillCommandEnable(8, true); if(obj.sq_IsEnterSkill(8) != -1){ obj.getVar("weaponcomboBool1").setBool(0, true); // obj.startSkillCoolTime(8, sq_GetSkillLevel(obj, 8), -1); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) obj.sq_IntVectPush(1); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(22, STATE_PRIORITY_AUTO, true); return; } } if(!sq_GetSkill(obj, 1).isInCoolTime()){ obj.setSkillCommandEnable(1, true); if(obj.sq_IsEnterSkill(1) != -1){ obj.startSkillCoolTime(1, sq_GetSkillLevel(obj, 1), -1); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_IntVectPush(0); obj.sq_IntVectPush(0); obj.sq_IntVectPush(1); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(19, STATE_PRIORITY_AUTO, true); return; } } if(!sq_GetSkill(obj, 5).isInCoolTime()){ obj.setSkillCommandEnable(5, true); if(obj.sq_IsEnterSkill(5) != -1){ obj.startSkillCoolTime(5, sq_GetSkillLevel(obj, 5), -1); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(20, STATE_PRIORITY_AUTO, true); return; } } if(!sq_GetSkill(obj, 58).isInCoolTime()){ obj.setSkillCommandEnable(58, true); if(obj.sq_IsEnterSkill(58) != -1){ obj.startSkillCoolTime(58, sq_GetSkillLevel(obj, 58), -1); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(32, STATE_PRIORITY_AUTO, true); return; } } local weaponSubType = obj.getWeaponSubType(); if(weaponSubType == 3) return; obj.setSkillCommandEnable(SKILL_SMBYKK_WEAPONCOMBO, true); local b_useskill = obj.sq_IsEnterSkill(SKILL_SMBYKK_WEAPONCOMBO); if(b_useskill != -1) obj.addRapidInput(); local subState = obj.getSkillSubState(); local nowFrame = sq_GetCurrentFrameIndex(obj); local startFrame = [[5,5,4], [5,4,5,4], [5,4,6,5], [6,8], [], [4,4,5]]; if(obj.getRapidInputFrequency() > 1){ if(nowFrame < startFrame[weaponSubType][subState]) return; if(subState + 1 < startFrame[weaponSubType].len()){ obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(STATE_SMBYKK_WEAPONCOMBO, STATE_PRIORITY_AUTO, true); return; } // else{ // obj.sq_IntVectClear(); // obj.sq_IntVectPush(0); // obj.sq_AddSetStatePacket(STATE_SMBYKK_WEAPONCOMBO, STATE_PRIORITY_AUTO, true); // } } } function onProc_SMWeaponCombo(obj) { local weaponSubType = obj.getWeaponSubType(); if(weaponSubType == 3 && sq_GetSkillLevel(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY) >= 3){ local subState = obj.getSkillSubState(); if(subState == 0){ if(obj.isDownSkillLastKey()){ local stateTime = obj.sq_GetStateTimer(); if(stateTime >= sq_GetIntData(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY, 8) && obj.getVar("weaponcombo_bool").getBool(0) == false) obj.getVar("weaponcombo_bool").setBool(0, true); } else{ if(sq_GetCurrentFrameIndex(obj) < 6) return; local pooledObj = obj.getVar("weaponcombo_effect").get_obj_vector(0); if(pooledObj) pooledObj.setValid(false); obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_SMBYKK_WEAPONCOMBO, STATE_PRIORITY_AUTO, true); return; } } } local subState = obj.getSkillSubState(); if(obj.getVar("weaponComboBool").getBool(subState) == 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("weaponComboBool").setBool(subState, true); obj.sq_SetStaticMoveInfo(0, 50, 150, false, 100, true); } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT){ obj.getVar("weaponComboBool").setBool(subState, true); obj.sq_SetStaticMoveInfo(0, 0, 0, false, 100, true); } } } function onKeyFrameFlag_SMWeaponCombo(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 2404: local aniPath = "character/swordman/effect/animation/1_swordman_bykk/weaponcombo/reslash_blunt03_dust01.ani"; sq_AddDrawOnlyAniFromParent(obj, aniPath, 0, -1, 0); break; case 100: case 5103: case 5203: case 5303: obj.resetHitObjectList(); break; } return true; } function onTimeEvent_SMWeaponCombo(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_SMWeaponCombo(obj, new_state) { if(!obj) return; if(new_state != STATE_SMBYKK_WEAPONCOMBO){ obj.getVar("weaponcombo_bool").setBool(0, false); obj.getVar("weaponcomboBool1").setBool(0, false); for(local i = 0; i < 4; i++){ obj.getVar("weaponComboBool").setBool(i, false); } } } function onAttack_SMWeaponCombo(obj, damager, boundingBox, isStuck) { if(!obj) return; if(isStuck) return; local weaponSubType = obj.getWeaponSubType(); local soundSet = ["R_MINERALSWDA_HIT","R_KATANAA_HIT","R_STICKA_HIT","R_SQUARESWDA_HIT","","R_BEAMSWDA_HIT"]; obj.sq_PlaySound(soundSet[weaponSubType]); local soundSet2 = ["R_MINERALSWDC_HIT","R_KATANAC_HIT","R_STICKC_HIT","R_SQUARESWDC_HIT","","R_BEAMSWDC_HIT"]; obj.sq_PlaySound(soundSet2[weaponSubType]); if(weaponSubType == 2 && sq_GetSkillLevel(obj, SKILL_SMBYKK_BLUNTMASTERY) >= 3){ if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ local activeObj = sq_GetCNRDObjectToActiveObject(damager); if(sq_IsValidActiveStatus(activeObj, ACTIVESTATUS_STUN)){ local totalDamage = sq_GetIntData(obj, SKILL_SMBYKK_BLUNTMASTERY, 7) - 100; local group = sq_GetGroup(activeObj); local uniqueId = sq_GetUniqueId(activeObj); createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_BLUNTMASTERY,2,totalDamage,group,uniqueId,0,0,0,0,0); } } } } //破军斩龙击 function checkExecutableSkill_ChargeBurst(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_CHARGEBURST); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_SMBYKK_CHARGEBURST, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_ChargeBurst(obj) { if (!obj) return false; return true; } function onSetState_ChargeBurst(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(ANI_SMBYKK_CHARGECRASHDASH); break; case 1: obj.sq_SetCurrentAnimation(ANI_SMBYKK_CHARGECRASHEXSHOULDER); break; case 2: obj.sq_SetCurrentAnimation(ANI_SMBYKK_CHARGECRASHEXPICK); break; case 3: obj.sq_SetCurrentAnimation(ANI_SMBYKK_CHARGECRASHEXUPPER); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); switch(subState){ case 0: obj.getVar("ChargeBurstTar").clear_obj_vector(); obj.getVar("ChargeBurstSet").setInt(0, sq_GetXPos(obj)); local currentAni = obj.getCurrentAnimation(); obj.setTimeEvent(1, currentAni.getDelaySum(0, 3) / 10, 10, true); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/chargecrash/dash.ani"), 0, 0); obj.sq_PlaySound("SM_CHARGE_CRASH"); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_CHARGEBURST, -1, 0, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_CHARGECRASHEXSHOULDER)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){ obj.getVar("handlingsword_canShoot").setBool(0, true); } obj.getVar("blademastery_canExp").setBool(0, true); break; case 1: local currentAni = obj.getCurrentAnimation(); local speedRate = 2500 / currentAni.getDelaySum(0, 0); // print("speedRate = "+speedRate); if(speedRate < 100) currentAni.setSpeedRate(100.0); else if(speedRate > 130) currentAni.setSpeedRate(130.0); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/chargecrashex/shoulder.ani"), 0, -25); break; case 2: obj.getVar("ChargeBurstSet").setInt(1, sq_GetXPos(obj)); local currentAni = obj.getCurrentAnimation(); local speedRate = 2000 / currentAni.getDelaySum(0, 0); // print("speedRate = "+speedRate); if(speedRate < 120) currentAni.setSpeedRate(120.0); else if(speedRate > 130) currentAni.setSpeedRate(130.0); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(false); obj.setTimeEvent(2, delay / 15, 14, true); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/chargecrashex/pick.ani"), 0, -25); obj.sq_PlaySound("SM_CHARGE_CRASH_UP"); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_CHARGEBURST, -1, 1, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_CHARGECRASHEXPICK)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local size = obj.getVar("ChargeBurstTar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("ChargeBurstTar").get_obj_vector(i); if(!targetObj) continue; local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, APDPATH_SM_CHARGEBURST); if(addAppendage){ sq_MoveToAppendageForce(targetObj, obj, obj, 250, 0, sq_GetZPos(targetObj), delay, true, addAppendage); } } } break; case 3: local currentAni = obj.getCurrentAnimation(); local speedRate = 13000 / currentAni.getDelaySum(0, 0); print("speedRate = "+speedRate); if(speedRate < 100) currentAni.setSpeedRate(100.0); else if(speedRate > 130) currentAni.setSpeedRate(130.0); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_CHARGEBURST, -1, 2, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_CHARGECRASHEXUPPER)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local upForceSet = sq_GetLevelData(obj, SKILL_SMBYKK_CHARGEBURST, 3, sq_GetSkillLevel(obj, SKILL_SMBYKK_CHARGEBURST)) * 13 / 10; local attackInfo = sq_GetCurrentAttackInfo(obj); sq_SetCurrentAttacknUpForce(attackInfo, upForceSet); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/chargecrashex/upperdustfoward.ani", 0, -1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/chargecrashex/upperdustback.ani", 0, -1, 0); obj.sq_SetStaticMoveInfo(0, 75, 0, false, 100, true); obj.sq_SetMoveDirection(sq_GetDirection(obj), ENUM_DIRECTION_NEUTRAL); break; } } function onEndCurrentAni_ChargeBurst(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: case 2: if(subState >= 1) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(STATE_SMBYKK_CHARGEBURST, STATE_PRIORITY_AUTO, true); break; case 3: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_ChargeBurst(obj) { if(!obj) return; } function onKeyFrameFlag_ChargeBurst(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: local subState = obj.getSkillSubState(); switch(subState){ case 3: local size = obj.getVar("ChargeBurstTar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("ChargeBurstTar").get_obj_vector(i); if(!targetObj) continue; CNSquirrelAppendage.sq_RemoveAppendage(targetObj, APDPATH_SM_CHARGEBURST); } } break; } break; case 4: if(obj.getSkillSubState() == 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_SMBYKK_CHARGEBURST, STATE_PRIORITY_AUTO, true); } break; } return true; } function onTimeEvent_ChargeBurst(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: local v = sq_GetUniformVelocity(0, 325, timeEventCount, 9); local dstX = sq_GetDistancePos(obj.getVar("ChargeBurstSet").getInt(0), obj.getDirection(), v); sq_setCurrentAxisPos(obj, 0, dstX); break; case 2: local v = sq_GetUniformVelocity(obj.getVar("ChargeBurstSet").getInt(1), obj.getVar("ChargeBurstSet").getInt(0), timeEventCount, 10); sq_setCurrentAxisPos(obj, 0, v); break; } } function onEndState_ChargeBurst(obj, new_state) { if(!obj) return; } // function onAttack_ChargeBurst(obj, damager, boundingBox, isStuck) { if(!obj) return; if(isStuck) return; if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ if(!obj.getVar("ChargeBurstTar").is_obj_vector(damager)){ obj.getVar("ChargeBurstTar").push_obj_vector(damager); if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, APDPATH_SM_CHARGEBURST)){ local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, APDPATH_SM_CHARGEBURST, true); sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); } } } } //破军升龙击 function checkExecutableSkill_ChargeCrash(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_CHARGECRASH); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_SMBYKK_CHARGECRASH, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_ChargeCrash(obj) { if (!obj) return false; return true; } function onSetState_ChargeCrash(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(ANI_SMBYKK_CHARGECRASHDASH); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/chargecrash/dash.ani"), 0, 0); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_CHARGECRASH, -1, 0, 1.0); local weaponSubType = obj.getWeaponSubType(); local hitMax = 1, dis = 190; if(weaponSubType == 5){ totalDamage = totalDamage - sq_GetIntData(obj, SKILL_SMBYKK_CHARGECRASH, 15); hitMax = sq_GetIntData(obj, SKILL_SMBYKK_CHARGECRASH, 13) + hitMax; dis = 210; } else if(weaponSubType == 0 && sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY) >= 6){ local addRate = sq_GetLevelData(obj, SKILL_SMBYKK_SHORTSWORDMASTERY, 20, sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY)); totalDamage = totalDamage * (1000 + addRate) / 1000; } print("totalDamage = "+totalDamage); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_CHARGECRASHDASH)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(false); obj.getVar("chargeCrash_move").setInt(0, sq_GetXPos(obj)); obj.getVar("chargeCrash_move").setInt(1, dis); obj.setTimeEvent(1, delay / 35, 30, true); if(hitMax > 1) obj.setTimeEvent(0, delay / hitMax, hitMax - 1, false); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/chargecrash/dustdash.ani", -10, 0, 0); obj.sq_PlaySound("SM_CHARGE_CRASH"); obj.sq_PlaySound("CCRASH_MOVING"); break; case 1: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/chargecrash/dustdashlast.ani", 0, 0, 0); obj.sq_SetCurrentAnimation(ANI_SMBYKK_CHARGECRASHUPPER); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/chargecrash/up-slash.ani"), 0, 0); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_CHARGECRASH, -1, 1, 1.0); local weaponSubType = obj.getWeaponSubType(); if(weaponSubType == 0 && sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY) >= 6){ local addRate = sq_GetLevelData(obj, SKILL_SMBYKK_SHORTSWORDMASTERY, 20, sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY)); totalDamage = totalDamage * (1000 + addRate) / 1000; } sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_CHARGECRASHUPPER)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.getVar("chargeCrash_bool").setBool(0, false); switch(weaponSubType){ case 1: local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(false); obj.setTimeEvent(0, delay / 2, 1, false); break; case 2: case 3: if(sq_GetSkillLevel(obj, SKILL_SMBYKK_BLUNTMASTERY) >= 7 || sq_GetSkillLevel(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY) >= 7){ obj.getVar("chargeCrash_bool").setBool(0, true); obj.sq_IsEnterSkillLastKeyUnits(SKILL_SMBYKK_CHARGECRASH); obj.sq_PlaySound("CCRASH_GET", 3333); } break; } obj.sq_PlaySound("SM_CHARGE_CRASH_UP"); obj.sq_PlaySound("CCRASH_CRASH"); local passiveskill75Lv = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFLIMIT); if(passiveskill75Lv > 0){ local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 13, passiveskill75Lv) + sq_GetIntData(obj, SKILL_SMBYKK_STATEOFLIMIT, 14); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_CHARGECRASH, -1, 1, bonusRate.tofloat() / 100.0); createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,50,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFLIMIT,1,totalDamage,0,0,0,0,0,0,0); } break; case 2: obj.sq_SetCurrentAnimation(ANI_SMBYKK_CHARGECRASHFINISH); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local weaponSubType = obj.getWeaponSubType(); local bonusRate = sq_GetIntData(obj, SKILL_SMBYKK_CHARGECRASH, 9); if(weaponSubType == 2) bonusRate = sq_GetIntData(obj, SKILL_SMBYKK_CHARGECRASH, 7); bonusRate = bonusRate.tofloat() / 100.0; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_CHARGECRASH, -1, 1, bonusRate); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_CHARGECRASHFINISH)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.sq_PlaySound("SM_CHARGE_CRASH_DOWN"); local aniPath = "character/swordman/effect/animation/1_swordman_bykk/chargecrash/down-slash.ani"; sq_AddDrawOnlyAniFromParent(obj, aniPath, 125, -1, 0); break; } } function onEndCurrentAni_ChargeCrash(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_SMBYKK_CHARGECRASH, STATE_PRIORITY_AUTO, true); break; case 1: if(obj.getVar("chargeCrash_bool").getBool(0)){ obj.getVar("chargeCrash_bool").setBool(1, true); local aniPath = "character/swordman/effect/animation/1_swordman_bykk/chargecrash/charge.ani"; local pooledObj = createOnlyDrawObject_Swordman_bykk(obj,aniPath,true,sq_GetDirection(obj),sq_GetDistancePos(sq_GetXPos(obj), sq_GetDirection(obj), -10),sq_GetYPos(obj) + 1,165,ENUM_DRAWLAYER_NORMAL); local speedRate = 72000 / sq_GetIntData(obj, SKILL_SMBYKK_CHARGECRASH, 3); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); obj.getVar("chargeCrash_effect").clear_obj_vector(); obj.getVar("chargeCrash_effect").push_obj_vector(pooledObj); break; } case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_ChargeCrash(obj) { if(!obj) return; } function onProc_ChargeCrash(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: if(obj.getVar("chargeCrash_bool").getBool(0) && sq_GetCurrentFrameIndex(obj) >= 4){ if(obj.isDownSkillLastKey()){ local stateTime = obj.sq_GetStateTimer(); local currentAni = obj.getCurrentAnimation(); if(stateTime >= currentAni.getDelaySum(false) + sq_GetIntData(obj, SKILL_SMBYKK_CHARGECRASH, 3)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(STATE_SMBYKK_CHARGECRASH, STATE_PRIORITY_AUTO, true); return; } } else{ obj.stopSound(3333); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); } } break; } } function onKeyFrameFlag_ChargeCrash(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 65534: local weaponSubType = obj.getWeaponSubType(); if(weaponSubType == 2){ local bonusRate = sq_GetIntData(obj, SKILL_SMBYKK_CHARGECRASH, 10); bonusRate = bonusRate.tofloat() / 100.0; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_CHARGECRASH, -1, 1, bonusRate); createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,125,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_CHARGECRASH,1,totalDamage,0,0,0,0,0,0,0); } break; } return true; } function onTimeEvent_ChargeCrash(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: obj.resetHitObjectList(); break; case 1: local v = sq_GetAccel(0, obj.getVar("chargeCrash_move").getInt(1), timeEventCount, 30, true); local dstX = sq_GetDistancePos(obj.getVar("chargeCrash_move").getInt(0), obj.getDirection(), v);//根据方向运算当前数值 if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);//设置当前x坐标 else obj.stopTimeEvent(1); break; } } function onEndState_ChargeCrash(obj, new_state) { if(!obj) return; } //流心 function checkExecutableSkill_FlowMind(obj) { if (!obj) return false; if(sq_GetSkill(obj, SKILL_SMBYKK_FLOWMIND).isInCoolTime()) return false; local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_FLOWMIND); if (isUse){ obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMIND, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMIND), -1); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMIND, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_FlowMind(obj) { if (!obj) return false; return true; } function onSetState_FlowMind(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(ANI_SMBYKK_FLOWMINDSTAY); break; } } function onEndCurrentAni_FlowMind(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } FLOWMINDPOWERUP_APDPATH <- "character/swordman/1weaponmaster_bykk/ap_flowmindpowerup.nut" function onProc_FlowMind(obj) { if(!obj) return; obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMIND, true); local b_useskill = obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMIND); if(b_useskill != -1){ obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); return; } if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDPOWERUP).isInCoolTime()){ sq_SetKeyxEnable(obj, E_BUFF_COMMAND, true); if(sq_IsEnterCommand(obj, E_BUFF_COMMAND)){ local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP); obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMINDPOWERUP, skillLevel, -1); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/flowmindpowerup/charge_dodge.ani"), 0, -50); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/flowmindpowerup/flash_dodge.ani"), 0, -50); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) CNSquirrelAppendage.sq_RemoveAppendage(obj, FLOWMINDPOWERUP_APDPATH); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, FLOWMINDPOWERUP_APDPATH, true); // local buffTime = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 1); // if(buffTime > 0) AddAppendage.sq_SetValidTime(buffTime); AddAppendage.setEnableIsBuff(true); AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_SMBYKK_FLOWMINDPOWERUP, skillLevel); CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); obj.sq_PlaySound("SM_GUE_CHARGE"); // obj.setTimeEvent(1, sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 0), 1, false); return; } } if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDTHREE).isInCoolTime()){ // sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true); obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMINDTHREE, true); if(obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMINDTHREE) != -1){//sq_IsEnterCommand(obj, E_SKILL_COMMAND) || obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMINDTHREE, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDTHREE), -1); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTHREE, STATE_PRIORITY_IGNORE_FORCE, true); return; } } if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDONE).isInCoolTime()){ // sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMINDONE, true); if(obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMINDONE) != -1){//sq_IsEnterCommand(obj, E_ATTACK_COMMAND) || obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMINDONE, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDONE), -1); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDONE, STATE_PRIORITY_IGNORE_FORCE, true); return; } } if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDTWO).isInCoolTime()){ // sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMINDTWO, true); if(obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMINDTWO) != -1){//sq_IsEnterCommand(obj, E_JUMP_COMMAND) || obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMINDTWO, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDTWO), -1); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTWO, STATE_PRIORITY_IGNORE_FORCE, true); return; } } if(!sq_GetSkill(obj, SKILL_SMBYKK_HUNDREDSWORD).isInCoolTime()){ obj.setSkillCommandEnable(SKILL_SMBYKK_HUNDREDSWORD, true); if(obj.sq_IsEnterSkill(SKILL_SMBYKK_HUNDREDSWORD) != -1){ obj.startSkillCoolTime(SKILL_SMBYKK_HUNDREDSWORD, sq_GetSkillLevel(obj, SKILL_SMBYKK_HUNDREDSWORD), -1); obj.sq_IntVectClear(); if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) obj.sq_IntVectPush(1); else obj.sq_IntVectPush(0); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(47, STATE_PRIORITY_IGNORE_FORCE, true); return; } } if(!sq_GetSkill(obj, SKILL_SMBYKK_METEORSWORD).isInCoolTime()){ obj.setSkillCommandEnable(SKILL_SMBYKK_METEORSWORD, true); if(obj.sq_IsEnterSkill(SKILL_SMBYKK_METEORSWORD) != -1){ obj.startSkillCoolTime(SKILL_SMBYKK_METEORSWORD, sq_GetSkillLevel(obj, SKILL_SMBYKK_METEORSWORD), -1); obj.sq_IntVectClear(); obj.sq_IntVectPush(10); obj.sq_AddSetStatePacket(STATE_SMBYKK_METEORSWORD, STATE_PRIORITY_IGNORE_FORCE, true); return; } } } function onKeyFrameFlag_FlowMind(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_FlowMind(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onEndState_FlowMind(obj, new_state) { if(!obj) return; } function proc_appendage_flowmindpowerup(appendage) { if(!appendage) return; local parentObj = appendage.getParent(); if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false); return;} } function onStart_appendage_flowmindpowerup(appendage) { if(!appendage) return; local obj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP); local value1 = sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 3, skillLevel); local change_appendage = appendage.sq_getChangeStatus("flowmindpowerup"); if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("flowmindpowerup",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value1); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, (value1.tofloat() * 0.1)); } } //流心:刺 function checkExecutableSkill_FlowMindOne(obj) { if (!obj) return false; // if(sq_GetSkill(obj, SKILL_SMBYKK_FLOWMIND).isInCoolTime()) return false; local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_FLOWMINDONE); if (isUse){ obj.sq_IntVectClear(); if(sq_GetZPos(obj) <= 0) obj.sq_IntVectPush(0); else obj.sq_IntVectPush(10); obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDONE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_FlowMindOne(obj) { if (!obj) return false; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH) || obj.getState() == STATE_SMBYKK_FLOWMIND) return true; else return false; } function onSetState_FlowMindOne(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(ANI_SMBYKK_FLOWMINDONE); break; case 1: obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDONEADD); break; case 10: obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDONEJUMPATTACK); break; } local speed = 1.0; if(subState == 10) speed = 1.1; obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); switch(subState){ case 0: obj.getVar("flowmindone_bool").setBool(0, false); obj.getVar("flowmindone_bool").setBool(1, false); obj.sq_PlaySound("R_SM_FLOWMIND_ONE"); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/flowmindone/dash_dodge.ani"), 0, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/flowmindone/move_shadow_dodge1.ani", 0, -3, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/flowmindone/move_shadow_dodge2.ani", 0, -2, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/flowmindone/move_shadow_normal.ani", 0, -1, 0); case 10: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){ print("FlowMindOne"); obj.getVar("handlingsword_canShoot").setBool(0, true); } local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, 1.0 + flowmindExLv.tofloat() * 0.25); local weaponSubType = obj.getWeaponSubType(); local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDONE, 2); switch(weaponSubType){ case 1: case 5: hitMax = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDONE, 3) * 2; totalDamage = totalDamage * sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDONE, 4) / 100; break; case 2: totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDONE, 9, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDONE))) / 100; break; } // print("hitMax = "+hitMax); local currentAni = obj.getCurrentAnimation(); if(subState == 10){ local speedRate = 100.0 / currentAni.getDelaySum(0, 0).tofloat(); local speed = 500.0 * speedRate; if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); else sq_SetVelocity(obj, 0, -speed); sq_SetVelocity(obj, 2, -speed); totalDamage = totalDamage * hitMax; hitMax = 1; sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/flowmindone/fallstate_one_leap.ani", 0, 0, 0); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/flowmindone/fallstate_one_start.ani"), 0, 0); } else{ local delay = currentAni.getDelaySum(0, 2); obj.setTimeEvent(2, delay, 1, false); obj.sq_SetStaticMoveInfo(0, 120, 0, false, 100, true); obj.sq_SetMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL); } // print("totalDamage1 = "+totalDamage); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 0, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000; // print("totalDamage2 = "+totalDamage); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_FLOWMINDONE)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.sq_PlaySound("R_SM_FLOWMIND_ONE"); obj.getVar("blademastery_canExp").setBool(0, true); break; case 1: local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX); local bonusRate = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDONE, 6); bonusRate = (bonusRate.tofloat() / 100.0) * (100.0 + 25.0 * flowmindExLv) / 100.0; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, bonusRate); local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDONE, 2); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_FLOWMINDONEADD)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage * hitMax); break; } local passiveskill90Lv = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD); if(passiveskill90Lv > 0){ local weaponSubType = obj.getWeaponSubType(); local currentAni = obj.getCurrentAnimation(); if(weaponSubType == 5 || weaponSubType == 1) return; switch(subState){ case 0: local speedRate = 8000 / currentAni.getDelaySum(0, 0); local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 1, passiveskill90Lv); switch(weaponSubType){ case 2: bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 7, passiveskill90Lv); break; case 3: bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 9, passiveskill90Lv); break; } local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX); if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, bonusRate / 100.0); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 0, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000; createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,1,totalDamage,weaponSubType,subState,speedRate,0,0,0,0); break; case 1: local speedRate = 7000 / currentAni.getDelaySum(0, 0); local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 1, passiveskill90Lv); switch(weaponSubType){ case 3: bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 10, passiveskill90Lv); break; } local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX); if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, bonusRate.tofloat() / 100.0); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 0, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000; createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,1,totalDamage,weaponSubType,subState,speedRate,0,0,0,0); if(weaponSubType == 3){ bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 11, passiveskill90Lv); totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, bonusRate.tofloat() / 100.0); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 0, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000; local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 8); createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,75,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,4,totalDamage,weaponSubType,subState,speedRate,hitMax,0,0,0); } break; case 10: local speedRate = 10000 / currentAni.getDelaySum(0, 0); switch(weaponSubType){ case 0: local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 3, passiveskill90Lv); local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX); if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv); local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 1); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, bonusRate.tofloat() / 100.0); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 0, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000; createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,sq_GetZPos(obj) / 3,0,-sq_GetZPos(obj) / 2,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,1,totalDamage,weaponSubType,subState,speedRate,hitMax,0,0,0); break; case 3: local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 12, passiveskill90Lv); local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX); if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, bonusRate.tofloat() / 100.0); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 0, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000; createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,1,totalDamage,weaponSubType,subState,speedRate,0,0,0,0); break; } break; } } local passiveskill75Lv = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFLIMIT); if(passiveskill75Lv > 0){ switch(subState){ case 0: case 10: local superArmorTime = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 12, passiveskill75Lv); obj.sq_SetSuperArmorUntilTime(obj, superArmorTime); break; } } } function onEndCurrentAni_FlowMindOne(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: local stateSet = obj.getVar("flowmindoneSet").getInt(0); if(stateSet > 0){ obj.startSkillCoolTime(11, sq_GetSkillLevel(obj, 11), -1); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(29, STATE_PRIORITY_AUTO, true); return; } case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProc_FlowMindOne(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(obj.getVar("flowmindone_bool").getBool(0)){ // sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true); // sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); // if(sq_IsEnterCommand(obj, E_SKILL_COMMAND)) obj.getVar("flowmindone_bool").setBool(0, true); // else if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.getVar("flowmindone_bool").setBool(1, true); if(obj.getWeaponSubType() == 0 || obj.getWeaponSubType() == 3){ sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true); if(sq_IsEnterCommand(obj, E_SKILL_COMMAND)){ obj.getVar("flowmindone_bool").setBool(0, false); obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDONE, STATE_PRIORITY_AUTO, true); return; } } else if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDTHREE).isInCoolTime()){ // sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true); obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMINDTHREE, true); local b_useskill = obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMINDTHREE); if(b_useskill != -1){//sq_IsEnterCommand(obj, E_SKILL_COMMAND) || obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMINDTHREE, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDTHREE), -1); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTHREE, STATE_PRIORITY_IGNORE_FORCE, true); return; } } if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDTWO).isInCoolTime()){ //sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMINDTWO, true); local b_useskill = obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMINDTWO); if(b_useskill != -1){//sq_IsEnterCommand(obj, E_JUMP_COMMAND) || obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMINDTWO, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDTWO), -1); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTWO, STATE_PRIORITY_IGNORE_FORCE, true); return; } } if(sq_IsKeyDown(OPTION_HOTKEY_ATTACK, ENUM_SUBKEY_TYPE_ALL)) { //obj.getVar("flowmindone_bool").setBool(0, false); //obj.getVar("flowmindoneSet").setInt(0, 1); obj.startSkillCoolTime(11, sq_GetSkillLevel(obj, 11), -1); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(29, STATE_PRIORITY_IGNORE_FORCE, true); return; } } break; case 1: if(obj.getVar("flowmindone_bool").getBool(0)){ if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDTHREE).isInCoolTime()){ //sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true); obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMINDTHREE, true); local b_useskill = obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMINDTHREE); if(b_useskill != -1){//sq_IsEnterCommand(obj, E_SKILL_COMMAND) || obj.getVar("flowmindone_bool").setBool(0, false); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTHREE, STATE_PRIORITY_IGNORE_FORCE, true); return; } } if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDTWO).isInCoolTime()){ //sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMINDTWO, true); local b_useskill = obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMINDTWO); if(b_useskill != -1){//sq_IsEnterCommand(obj, E_JUMP_COMMAND) || obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTWO, STATE_PRIORITY_IGNORE_FORCE, true); return; } } sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){ obj.startSkillCoolTime(11, sq_GetSkillLevel(obj, 11), -1); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(29, STATE_PRIORITY_AUTO, true); return; } } break; case 10: if(sq_GetZPos(obj) <= 0){ obj.sq_StopMove(); obj.sq_ZStop(); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/flowmindone/fallstate_one_end.ani", 0, 0, 0); if(sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD) > 0) sq_AddDrawOnlyAniFromParent(obj, "passiveobject/0_swordman_bykk/1weaponmaster/animation/stateofinvisiblesword/flowmindone/flowmindlv95longswordonefallend_fxbodyl.ani", 0, 1, 0); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); } break; } if(subState < 10 && obj.getVar("flowmindone_bool").getBool(2) == false){ if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT){ obj.getVar("flowmindone_bool").setBool(2, true); obj.sq_StopMove(); } } } function onKeyFrameFlag_FlowMindOne(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1005: obj.getVar("flowmindone_bool").setBool(0, true); obj.getVar("flowmindoneSet").setInt(0, 0); break; case 2008: obj.getVar("flowmindone_bool").setBool(0, true); break; } return true; } function onTimeEvent_FlowMindOne(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: obj.resetHitObjectList(); break; case 1: local vx = sq_GetAccel(0, obj.getVar("flowmindone_move").getInt(1), timeEventCount, 10, false); local vz = sq_GetAccel(obj.getVar("flowmindone_move").getInt(1), 0, timeEventCount, 10, false); local dstX = sq_GetDistancePos(obj.getVar("flowmindone_move").getInt(0), obj.getDirection(), vx); if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); sq_setCurrentAxisPos(obj, 2, vz); break; case 2: local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(3, 7); local weaponSubType = obj.getWeaponSubType(); local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDONE, 2); switch(weaponSubType){ case 1: case 5: hitMax = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDONE, 3) * 2; break; } obj.setTimeEvent(0, delay / hitMax, hitMax - 1, false); break; } } function onEndState_FlowMindOne(obj, new_state) { if(!obj) return; if(new_state != STATE_SMBYKK_FLOWMINDONE){ obj.getVar("flowmindone_bool").setBool(2, false); } } function onAttack_FlowMindOne(obj, damager, boundingBox, isStuck) { if(isStuck) return; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH) && !sq_GetSkill(obj, SKILL_SMBYKK_FLOWMIND).isSealFunction() && damager.isObjectType(OBJECTTYPE_ACTIVE)){ local aniPath = "character/swordman/effect/animation/1_swordman_bykk/flowmindpowerup/flow_mind_power_up_hit_effect.ani"; local direction = sq_GetDirection(obj); local xPos = sq_GetXPos(damager), yPos = sq_GetYPos(damager), zPos = sq_GetCenterZPos(boundingBox); createOnlyDrawObject_Swordman_bykk(damager,aniPath,true,direction,xPos,yPos,zPos,ENUM_DRAWLAYER_NORMAL); } } //流心:跃 function checkExecutableSkill_FlowMindTwo(obj) { if (!obj) return false; // if(sq_GetSkill(obj, SKILL_SMBYKK_FLOWMIND).isInCoolTime()) return false; local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_FLOWMINDTWO); if (isUse){ obj.sq_IntVectClear(); if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(10); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTWO, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_FlowMindTwo(obj) { if (!obj) return false; if((CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH) && !sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDPOWERUP).isSealFunction()) || obj.getState() == STATE_SMBYKK_FLOWMIND) return true; else return false; } function onSetState_FlowMindTwo(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(ANI_SMBYKK_FLOWMINDTWOJUMP); break; case 1: obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDTWOLANDING); break; case 2: obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDTWOSIT); break; case 3: if(obj.getWeaponSubType() <= 1) obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDTWOATTACK2); else obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDTWOATTACK1); break; case 10: obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDTWOJUMPWAIT); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); switch(subState){ case 0: obj.sq_ZStop(); local currentAni = obj.getCurrentAnimation(); local speedRate = 100.0 / currentAni.getDelaySum(0, 0).tofloat(); // print("speedRate = "+speedRate); if(speedRate < 1.0){ currentAni.setSpeedRate(100.0); speedRate = 1.0; } else if(speedRate >= 1.3){ currentAni.setSpeedRate(130.0); speedRate = 1.3; } obj.getVar("flowmindtwo_set").setFloat(0, speedRate); local speed = 450 * speedRate; if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); else sq_SetVelocity(obj, 0, -speed); local delay = (10.0 / speedRate).tointeger(); obj.setTimeEvent(1, delay, 30, true); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){ print("FlowMindTwo"); obj.getVar("handlingsword_canShoot").setBool(0, true); } break; case 1: case 3: if(subState == 3) print("test"); obj.sq_ZStop(); local currentAni = obj.getCurrentAnimation(); obj.getVar("flowmindTwo_Move").setInt(0, sq_GetZPos(obj)); local speedRate = obj.getVar("flowmindtwo_set").getFloat(0); if(speedRate < 1.0){ currentAni.setSpeedRate(100.0); speedRate = 1.0; } else if(speedRate >= 1.3){ currentAni.setSpeedRate(130.0); speedRate = 1.3; } else currentAni.setSpeedRate(speedRate * 100.0); // if(subState == 3) print(currentAni.getDelaySum(0, 0)); local speed = 450 * speedRate; if(subState == 3) speed = 200 * speedRate; if(obj.getVar("flowmindtwo_bool").getBool(3)) speed = speed * 1.5; if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); else sq_SetVelocity(obj, 0, -speed); local delay = (10.0 / speedRate).tointeger(); if(subState == 3){ delay = (16.0 / speedRate).tointeger(); if(obj.getWeaponSubType() <= 1) delay = (18.667 / speedRate).tointeger(); } obj.setTimeEvent(2, delay, 30, true); if(subState == 3){ local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDTWO, -1, 0, 1.0 + 0.25 * flowmindExLv); if(obj.getWeaponSubType() <= 1){ totalDamage = totalDamage * sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDTWO, 9) / 100; local currentAni = obj.getCurrentAnimation(); local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDTWO, 7); obj.setTimeEvent(0, currentAni.getDelaySum(0, 2) / hitMax, hitMax - 1, false); } if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 1, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000; if(obj.getVar("flowmindtwo_bool").getBool(3)) totalDamage = totalDamage * (100 + sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDTWO, 14)) / 100; local atkIndex = [ATK_SMBYKK_FLOWMINDTWOATTACK1,ATK_SMBYKK_FLOWMINDTWOATTACK1,ATK_SMBYKK_FLOWMINDTWOATTACK2,ATK_SMBYKK_FLOWMINDTWOATTACK3,0,ATK_SMBYKK_FLOWMINDTWOATTACK1]; local weaponSubType = obj.getWeaponSubType(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex[weaponSubType])); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.getVar("flowmindtwo_bool").setBool(4, true); } obj.sq_PlaySound("R_SM_FLOWMIND_TWO"); obj.getVar("blademastery_canExp").setBool(0, true); break; case 10: obj.getVar("flowmindtwo_bool").setBool(3, true); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/flowmindtwo/fallstate_two_leap.ani", 0, 0, -25); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/flowmindtwo/fallstate_two_air.ani", 0, 1, 0); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){ print("FlowMindTwo"); obj.getVar("handlingsword_canShoot").setBool(0, true); } obj.sq_PlaySound("R_SM_FLOWMIND_TWO"); break; } local passiveskill90Lv = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD); if(passiveskill90Lv > 0){ local weaponSubType = obj.getWeaponSubType(); switch(subState){ case 3: local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 0); switch(weaponSubType){ case 0: local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 4, passiveskill90Lv); local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX); if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, bonusRate.tofloat() / 100.0); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 1, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000; createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,1,1,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,2,totalDamage,weaponSubType,subState,speedRate,0,0,0,0); break; case 1: local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 5, passiveskill90Lv); local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX); if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, bonusRate.tofloat() / 100.0); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 1, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000; local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 3); createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,1,1,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,2,totalDamage,weaponSubType,subState,speedRate,hitMax,0,0,0); break; case 2: local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 8, passiveskill90Lv); local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX); if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, bonusRate.tofloat() / 100.0); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 1, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000; createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,-sq_GetZPos(obj),sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,2,totalDamage,weaponSubType,subState,speedRate,0,0,0,0); break; case 5: local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 14, passiveskill90Lv); local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX); if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, bonusRate.tofloat() / 100.0); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 1, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000; createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,1,1,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,2,totalDamage,weaponSubType,subState,speedRate,0,0,0,0); break; } break; } } local passiveskill75Lv = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFLIMIT); if(passiveskill75Lv > 0){ switch(subState){ case 0: case 10: local superArmorTime = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 12, passiveskill75Lv); obj.sq_SetSuperArmorUntilTime(obj, superArmorTime); break; } } } function onEndCurrentAni_FlowMindTwo(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: if(subState == 1) obj.getVar("flowmindtwo_bool").setBool(2, true); obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTWO, STATE_PRIORITY_AUTO, true); break; case 2: if(obj.getVar("flowmindtwo_bool").getBool(5)){ obj.getVar("flowmindtwo_bool").setBool(5, false); sq_setCurrentAxisPos(obj, 2, 0); if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDONE).isInCoolTime()){ obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMINDONE, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDONE), -1); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDONE, STATE_PRIORITY_AUTO, true); return; } } if(obj.getVar("flowmindtwo_bool").getBool(2)){ // obj.endSkillCoolTime(SKILL_SMBYKK_FLOWMINDTWO); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMIND, STATE_PRIORITY_AUTO, true); break; } obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; case 3: obj.getVar("flowmindtwo_bool").setBool(2, false); obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTWO, STATE_PRIORITY_AUTO, true); break; case 10: obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTWO, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_FlowMindTwo(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMINDTWO, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND) || sq_IsEnterCommand(obj, E_JUMP_COMMAND) || obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMINDTWO) != -1){ obj.removeAllTimeEvent(); obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTWO, STATE_PRIORITY_AUTO, true); return; } break; } if(obj.getVar("flowmindtwo_bool").getBool(1)){ // if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDONE).isInCoolTime()){ // sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); // obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMINDONE, true); // if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND) || obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMINDONE) != -1){ // obj.getVar("flowmindtwo_bool").setBool(5, true); // } // } if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDTHREE).isInCoolTime()){ // sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true); obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMINDTHREE, true); if(obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMINDTHREE) != -1){//sq_IsEnterCommand(obj, E_SKILL_COMMAND) || obj.getVar("flowmindtwo_bool").setBool(1, false); obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMINDTHREE, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDTHREE), -1); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTHREE, STATE_PRIORITY_IGNORE_FORCE, true); return; } } } } function onProc_FlowMindTwo(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: case 3: local speed = 90.0 * obj.getVar("flowmindtwo_set").getFloat(0); if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ sq_SetVelocity(obj, 1, speed); } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ sq_SetVelocity(obj, 1, -speed); } else sq_SetVelocity(obj, 1, 0.0); break; } } function onKeyFrameFlag_FlowMindTwo(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1002: obj.getVar("flowmindtwo_bool").setBool(1, true); break; } return true; } function onTimeEvent_FlowMindTwo(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: obj.resetHitObjectList(); break; case 1: local v = sq_GetAccel(0, 75, timeEventCount, 25, true); sq_setCurrentAxisPos(obj, 2, v); break; case 2: // print("frameIndex = "+sq_GetCurrentFrameIndex(obj)); local v = sq_GetAccel(obj.getVar("flowmindTwo_Move").getInt(0), 0, timeEventCount, 26, false); sq_setCurrentAxisPos(obj, 2, v); break; } } function onEndState_FlowMindTwo(obj, new_state) { if(!obj) return; if(new_state != STATE_SMBYKK_FLOWMINDTWO){ obj.getVar("flowmindtwo_bool").setBool(3, false); } } function onAttack_FlowMindTwo(obj, damager, boundingBox, isStuck) { if(isStuck) return; if(obj.getWeaponSubType() == 2 && damager.isObjectType(OBJECTTYPE_ACTIVE) && obj.getVar("flowmindtwo_bool").getBool(4)){ obj.getVar("flowmindtwo_bool").setBool(4, false); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDTWO, -1, 3, 1.0); local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDTWO, -1, 2, 1.0) + 100; createSkillPassive_Swordman_bykk(obj,damager,PASSIVEOBJ_BYKK_SWORDMAN,0,0,-sq_GetZPos(obj),sq_GetDirection(obj),1,SKILL_SMBYKK_FLOWMINDTWO,1,totalDamage,sizeRate,0,0,0,0,0,0); } if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH) && !sq_GetSkill(obj, SKILL_SMBYKK_FLOWMIND).isSealFunction() && damager.isObjectType(OBJECTTYPE_ACTIVE)){ local aniPath = "character/swordman/effect/animation/1_swordman_bykk/flowmindpowerup/flow_mind_power_up_hit_effect.ani"; local direction = sq_GetDirection(obj); local xPos = sq_GetXPos(damager), yPos = sq_GetYPos(damager), zPos = sq_GetCenterZPos(boundingBox); createOnlyDrawObject_Swordman_bykk(damager,aniPath,true,direction,xPos,yPos,zPos,ENUM_DRAWLAYER_NORMAL); } } //流心:升 function checkExecutableSkill_FlowMindThree(obj) { if (!obj) return false; // if(sq_GetSkill(obj, SKILL_SMBYKK_FLOWMIND).isInCoolTime()) return false; local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_FLOWMINDTHREE); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTHREE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_FlowMindThree(obj) { if (!obj) return false; if((CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH) && !sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDPOWERUP).isSealFunction()) || obj.getState() == STATE_SMBYKK_FLOWMIND) return true; else return false; } function onSetState_FlowMindThree(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(ANI_SMBYKK_FLOWMINDTHREEREADY); break; case 1: local weaponSubType = obj.getWeaponSubType(); local hitMax = 1, bonusRate = 1.0; if(weaponSubType == 5){ hitMax = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDTHREE, 3); bonusRate = 0.8; obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDTHREEATTACKLIGHTSWORD); } else if(weaponSubType == 1){ hitMax = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDTHREE, 3); bonusRate = 0.8; obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDTHREEATTACKBLADE); } else obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDTHREEATTACK); local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX); bonusRate = bonusRate * (1.0 + 0.25 * flowmindExLv); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDTHREE, -1, 0, bonusRate); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 2, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000; obj.getVar("flowmindThreeBonusRate").setInt(0, totalDamage); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_FLOWMINDTHREEATTACK)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.getVar("blademastery_canExp").setBool(0, true); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); switch(subState){ case 0: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){ print("FlowMindThree"); obj.getVar("handlingsword_canShoot").setBool(0, true); } break; case 1: obj.sq_SetStaticMoveInfo(0, 50, 150, false, 100, true); obj.sq_SetMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL);//开始移动 local currentAni = obj.getCurrentAnimation(); local speedRate = 10000.0 / currentAni.getDelaySum(0, 0); if(speedRate > 1.3) speedRate = 1.3; if(obj.getWeaponSubType() == 3) speedRate = speedRate * 0.7; sq_SetVelocity(obj, 2, 1000.0 * speedRate); if(obj.getWeaponSubType() == 5 || obj.getWeaponSubType() == 1){ local upTime = (200.0 / speedRate).tointeger(); local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDTHREE, 3); obj.setTimeEvent(0, upTime / hitMax, hitMax - 1, false); } obj.sq_PlaySound("R_SM_FLOWMIND_THREE"); break; } local passiveskill90Lv = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD); if(passiveskill90Lv > 0){ local weaponSubType = obj.getWeaponSubType(); switch(subState){ case 1: local currentAni = obj.getCurrentAnimation(); local speedRate = 1000000 / currentAni.getDelaySum(0, 0); switch(weaponSubType){ case 1: local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 6, passiveskill90Lv); bonusRate = bonusRate.tofloat() * 0.8 / 100.0; local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX); if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDTHREE, -1, 0, bonusRate); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 2, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000; local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 5); createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,3,totalDamage,weaponSubType,subState,speedRate,hitMax,0,0,0); break; case 3: local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 13, passiveskill90Lv); local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX); if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDTHREE, -1, 0, bonusRate / 100.0); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 2, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000; createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,3,totalDamage,weaponSubType,subState,speedRate,0,0,0,0); break; case 5: local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 15, passiveskill90Lv); local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX); if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDTHREE, -1, 0, bonusRate / 100.0); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 2, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000; createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,3,totalDamage,weaponSubType,subState,speedRate,0,0,0,0); break; } break; } } local passiveskill75Lv = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFLIMIT); if(passiveskill75Lv > 0){ switch(subState){ case 0: local superArmorTime = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 12, passiveskill75Lv); obj.sq_SetSuperArmorUntilTime(obj, superArmorTime); break; } } } function onEndCurrentAni_FlowMindThree(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTHREE, STATE_PRIORITY_AUTO, true); break; case 1: if(obj.getVar("flowmindthree_bool").getBool(0)){ obj.getVar("flowmindthree_bool").setBool(0, false); obj.sq_IntVectClear(); obj.sq_IntVectPush(10); obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDONE, STATE_PRIORITY_AUTO, true); break; } obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(0); obj.sq_IntVectPush(sq_GetZPos(obj)); obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); break; } } function onProc_FlowMindThree(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: local height = 190; if(obj.getWeaponSubType() == 3) height = 120; else if(obj.getWeaponSubType() == 2) height = 150; if((sq_GetZPos(obj) >= height || obj.sq_GetStateTimer() > 1000) && sq_GetCurrentFrameIndex(obj) == 0){ local currentAni = obj.getCurrentAnimation(); currentAni.setCurrentFrameWithChildLayer(1); } break; } } function onKeyFrameFlag_FlowMindThree(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_FlowMindThree(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: obj.resetHitObjectList(); break; } } function onEndState_FlowMindThree(obj, new_state) { if(!obj) return; if(new_state != STATE_SMBYKK_FLOWMINDTHREE){ obj.getVar("flowmindthree_bool").setBool(0, false); } } function onAttack_FlowMindThree(obj, damager, boundingBox, isStuck) { if(isStuck) return; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH) && !sq_GetSkill(obj, SKILL_SMBYKK_FLOWMIND).isSealFunction() && damager.isObjectType(OBJECTTYPE_ACTIVE)){ local aniPath = "character/swordman/effect/animation/1_swordman_bykk/flowmindpowerup/flow_mind_power_up_hit_effect.ani"; local direction = sq_GetDirection(obj); local xPos = sq_GetXPos(damager), yPos = sq_GetYPos(damager), zPos = sq_GetCenterZPos(boundingBox); createOnlyDrawObject_Swordman_bykk(damager,aniPath,true,direction,xPos,yPos,zPos,ENUM_DRAWLAYER_NORMAL); } local weaponSubType = obj.getWeaponSubType(); if(weaponSubType == 1 || weaponSubType == 5) return; if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ if(damager.getState() == STATE_DOWN){ local totalDamage = obj.getVar("flowmindThreeBonusRate").getInt(0) * sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDTHREE, 5) / 100; local group = sq_GetGroup(damager); local uniqueId = sq_GetUniqueId(damager); createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_FLOWMINDTHREE,1,totalDamage,group,uniqueId,0,0,0,0,0); } } } //流心:狂 function checkExecutableSkill_FlowMindPowerUp(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(0); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_FlowMindPowerUp(obj) { if (!obj) return false; return true; } function onSetState_FlowMindPowerUp(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); switch(subState){ case 0: obj.sq_SetCurrentAnimation(120); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_FlowMindPowerUp(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_FlowMindPowerUp(obj) { if(!obj) return; } function onKeyFrameFlag_FlowMindPowerUp(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_FlowMindPowerUp(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_FlowMindPowerUp(obj, new_state) { if(!obj) return; } //拔刀斩 function checkExecutableSkill_SMMomentarySlash(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_MOMENTARYSLASH); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_SMBYKK_MOMENTARYSLASH, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_SMMomentarySlash(obj) { if (!obj) return false; return true; } function onSetState_SMMomentarySlash(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(ANI_SMBYKK_MOMENTARYSLASH_READY); local currentAni = obj.getCurrentAnimation(); local weaponSubType = obj.getWeaponSubType(); local delay = 300; switch(weaponSubType){ case 0: delay = 80; break; case 1: delay = 120; break; case 2: delay = 200; break; case 5: delay = 80; break; } sq_SetFrameDelayTime(currentAni, 0, delay); if(weaponSubType == 3 && sq_GetSkillLevel(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY) >= 3){ obj.sq_IsEnterSkillLastKeyUnits(SKILL_SMBYKK_MOMENTARYSLASH); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/momentaryslash/charge2.ani"), -30, 0); } break; case 1: // if(obj.getWeaponSubType() == 0) obj.sq_SetCurrentAnimation(ANI_SMBYKK_MOMENTARYSLASH_SLASH); // else obj.sq_SetCurrentAnimation(ANI_SMBYKK_MOMENTARYSLASH); break; case 2: obj.sq_SetCurrentAnimation(ANI_SMBYKK_MOMENTARYSLASH); break; } if(subState == 0) obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); else{ local speed = 1.0; switch(obj.getWeaponSubType()){ case 1: speed = 1.1; break; case 5: speed = 1.2; break; } if(subState == 2) speed = speed * 1.5; obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); } local currentAni = obj.getCurrentAnimation(); sq_ClearAttackBox(currentAni); switch(subState){ case 0: local delay = currentAni.getDelaySum(0, 0); obj.getVar("MomentarySlashSet").setInt(1, delay); obj.sq_PlaySound("SM_BAL_READY"); obj.getVar("blademastery_canExp").setBool(0, true); break; case 1: local weaponSubType = obj.getWeaponSubType(); local speedRate = 50000 / currentAni.getDelaySum(0, 0); // if(weaponSubType == 0) speedRate = 2500 / currentAni.getDelaySum(0, 0); print("speedRate = "+speedRate); if(speedRate > 200){ currentAni.setSpeedRate(200.0); speedRate = 200; } obj.getVar("MomentarySlashSet").setInt(0, speedRate); obj.getVar("MomentarySlash_Bool").setBool(0, false); if(weaponSubType == 1 || weaponSubType == 5){ obj.getVar("MomentarySlash_Bool").setBool(0, true); } case 2: currentAni.setCurrentFrameWithChildLayer(1); obj.sq_PlaySound("SM_BAL_SHOT"); local speedRate = obj.getVar("MomentarySlashSet").getInt(0).tofloat() * 2.5; currentAni.setSpeedRate(speedRate); break; } } function onEndCurrentAni_SMMomentarySlash(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY) >= 3) break; obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_SMBYKK_MOMENTARYSLASH, STATE_PRIORITY_AUTO, true); break; case 1: case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_SMMomentarySlash(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY) >= 3){ local maxTime = sq_GetIntData(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY, 8); local stateTime = obj.sq_GetStateTimer(); if(obj.isDownSkillLastKey()){ if(stateTime >= maxTime){ obj.getVar("MomentarySlash_Bool").setBool(1, true); obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_SMBYKK_MOMENTARYSLASH, STATE_PRIORITY_AUTO, true); return; } } else{ if(stateTime >= obj.getVar("MomentarySlashSet").getInt(1)){ obj.getVar("MomentarySlash_Bool").setBool(1, false); obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_SMBYKK_MOMENTARYSLASH, STATE_PRIORITY_AUTO, true); return; } } } break; case 1: if(sq_GetCurrentFrameIndex(obj) >= 5){ if(obj.getVar("MomentarySlash_Bool").getBool(0)){ sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); obj.setSkillCommandEnable(SKILL_SMBYKK_MOMENTARYSLASH, true); local b_useskill = obj.sq_IsEnterSkill(SKILL_SMBYKK_MOMENTARYSLASH); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND) || b_useskill != -1){ obj.getVar("MomentarySlash_Bool").setBool(0, false); obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(STATE_SMBYKK_MOMENTARYSLASH, STATE_PRIORITY_AUTO, true); return; } } } break; } } function onKeyFrameFlag_SMMomentarySlash(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1002: local sizeRate = sq_GetIntData(obj, SKILL_SMBYKK_MOMENTARYSLASH, 0); local speedRate = obj.getVar("MomentarySlashSet").getInt(0); local baseAniPath = "character/swordman/effect/animation/1_swordman_bykk/momentaryslash/"; local aniPath_back = ["momentaryslash_blue_ldodge_under.ani", "momentaryslash_none_ldodge_under.ani"]; local aniPath_front = ["momentaryslash_blue_ldodge_upper.ani", "momentaryslash_none_ldodge_upper.ani"]; local subState = obj.getSkillSubState(); local weaponSubType = obj.getWeaponSubType(); if(subState == 2){ if(weaponSubType == 1) {aniPath_back[0] = "momentaryslash_red_ldodge_under.ani"; aniPath_front[0] = "momentaryslash_red_ldodge_upper.ani";} else if(weaponSubType == 5) {aniPath_back[0] = "momentaryslash_white_ldodge_under.ani"; aniPath_front[0] = "momentaryslash_white_ldodge_upper.ani";} } local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj); for(local i = 0; i < aniPath_back.len(); i++){ local pooledObj = createOnlyDrawObjectEX_Swordman_bykk(obj,baseAniPath + aniPath_back[i],true,direction,xPos,yPos - 1,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); } for(local i = 0; i < aniPath_front.len(); i++){ local pooledObj = createOnlyDrawObjectEX_Swordman_bykk(obj,baseAniPath + aniPath_front[i],true,direction,xPos,yPos + 1,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); } local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_MOMENTARYSLASH, -1, 0, 1.0); local sub = 0; if(subState == 2){ if(weaponSubType == 1) totalDamage = totalDamage * sq_GetIntData(obj, SKILL_SMBYKK_MOMENTARYSLASH, 1) / 100; else if(weaponSubType == 5) totalDamage = totalDamage * sq_GetIntData(obj, SKILL_SMBYKK_MOMENTARYSLASH, 2) / 100; sub = 1; } if(obj.getVar("MomentarySlash_Bool").getBool(1)) totalDamage = totalDamage * (100 * 0 + sq_GetIntData(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY, 7)) / 100; createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_MOMENTARYSLASH,1,totalDamage,sizeRate,speedRate,weaponSubType,sub,0,0,0); break; case 65534: if(obj.getWeaponSubType() != 0) break; if(sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY) < 7) break; local sizeRate = sq_GetIntData(obj, SKILL_SMBYKK_MOMENTARYSLASH, 0) * 120 / 100; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_MOMENTARYSLASH, -1, 0, sq_GetIntData(obj, SKILL_SMBYKK_MOMENTARYSLASH, 3).tofloat() / 100.0); print("totalDamage = "+totalDamage); createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,60,sq_GetDirection(obj),1,SKILL_SMBYKK_MOMENTARYSLASH,2,totalDamage,sizeRate,0,0,0,0,0,0); break; } return true; } function onTimeEvent_SMMomentarySlash(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_SMMomentarySlash(obj, new_state) { if(!obj) return; } //猛龙断空斩 function checkExecutableSkill_RapidMoveSlash(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_RAPIDMOVESLASH); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(STATE_SMBYKK_RAPIDMOVESLASH, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_RapidMoveSlash(obj) { if (!obj) return false; return true; } function onSetState_RapidMoveSlash(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(ANI_SMBYKK_RAPIDMOVESLASHREADY1); break; case 1: obj.sq_SetCurrentAnimation(ANI_SMBYKK_RAPIDMOVESLASHREADY2); break; case 2: obj.sq_SetCurrentAnimation(ANI_SMBYKK_RAPIDMOVESLASHMOVE1); break; case 3: obj.sq_SetCurrentAnimation(ANI_SMBYKK_RAPIDMOVESLASHMOVE2); break; } if(subState > 1) obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(obj.getWeaponSubType() == 5){ local subStateName = ["lightready1-","lightready2-","lightmove1-","lightmove2-"]; for(local i = 0; i < 6; i++){ obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/" + subStateName[subState] + i.tostring() + ".ani"), 0, 0); } } switch(subState){ case 0: // obj.getVar("rapidMoveSlashSet").setInt(1, 0); // if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){ // print("RapidMoveSlash"); // obj.getVar("handlingsword_canShoot").setBool(0, true); // } // local apdPath = "appendage/character/ap_common_suck.nut"; // local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true); // local spectrumAppendage = addAppendage.sq_GetOcularSpectrum("ocularSpectrum");//得到殘影 // if(!spectrumAppendage) spectrumAppendage = addAppendage.sq_AddOcularSpectrum("ocularSpectrum", obj, obj, 100);//設置殘影 // sq_SetParameterOcularSpectrum(spectrumAppendage, 500, 30, true, sq_RGBA(255, 75, 255, 205), sq_RGBA(255, 75, 255, 0), 2, 2, 2);//設置效果 break; case 1: obj.getVar("rapidMoveSlashBool").setBool(2, false); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){ print("RapidMoveSlash"); obj.getVar("handlingsword_canShoot").setBool(0, true); } local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 0); speedRate = speedRate.tofloat() * 2.0; currentAni.setSpeedRate(speedRate); break; case 2: obj.getVar("rapidMoveSlashSet").setInt(1, 0); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){ print("RapidMoveSlash"); obj.getVar("handlingsword_canShoot").setBool(0, true); } local apdPath = "appendage/character/ap_common_suck.nut"; local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true); local spectrumAppendage = addAppendage.sq_GetOcularSpectrum("ocularSpectrum");//得到殘影 if(!spectrumAppendage) spectrumAppendage = addAppendage.sq_AddOcularSpectrum("ocularSpectrum", obj, obj, 100);//設置殘影 sq_SetParameterOcularSpectrum(spectrumAppendage, 500, 30, true, sq_RGBA(255, 75, 255, 205), sq_RGBA(255, 75, 255, 0), 2, 2, 2);//設置效果 case 3: local currentAni = obj.getCurrentAnimation(); local sizeRate = sq_GetIntData(obj, SKILL_SMBYKK_RAPIDMOVESLASH, 7); local speedRate = 10000 / currentAni.getDelaySum(0, 0); // print("speedRate = "+speedRate); local newSpeedRate = speedRate; if(speedRate < 100) newSpeedRate = 100; else if(speedRate > 150) newSpeedRate = 150; if(newSpeedRate != speedRate) currentAni.setSpeedRate(newSpeedRate.tofloat()); obj.getVar("rapidMoveSlashSet").setInt(0, newSpeedRate); local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj); local aniPath = [["character/swordman/effect/animation/1_swordman_bykk/rapidmoveslash/move_dragonheadb.ani",0,1,-75,125,110],["character/swordman/effect/animation/1_swordman_bykk/rapidmoveslash/move_dragonheadc.ani",0,1,0,100,100],["character/swordman/effect/animation/1_swordman_bykk/rapidmoveslash/rmatka_eff_10.ani",-150,1,0,100,100],["character/swordman/effect/animation/1_swordman_bykk/rapidmoveslash/dasha.ani",0,0,0,100,100],["character/swordman/effect/animation/1_swordman_bykk/rapidmoveslash/smoke_eff_00_new.ani",-175,1,-50,120, 120]]; for(local i = 0; i < aniPath.len(); i++){ if(i == 0 && subState == 3) aniPath[i][0] = "character/swordman/effect/animation/1_swordman_bykk/rapidmoveslash/move_dragonheada.ani"; local pooledObj = createOnlyDrawObjectEX_Swordman_bykk(obj,aniPath[i][0],true,direction,sq_GetDistancePos(xPos, direction, aniPath[i][1]),yPos + aniPath[i][2],aniPath[i][3],ENUM_DRAWLAYER_NORMAL,aniPath[i][4],aniPath[i][5]); if(i < aniPath.len() - 1) sq_moveWithParent(obj, pooledObj); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(newSpeedRate.tofloat()); } local speed = 1560.0 * newSpeedRate / 100.0; if(direction == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); else sq_SetVelocity(obj, 0, -speed); sq_ClearAttackBox(currentAni); local attackBoxSet = [-47,-23,-10,300,46,110]; if(sizeRate > 100){ sizeRate = sizeRate.tofloat() / 100.0; for(local i = 0; i < attackBoxSet.len(); i++){ attackBoxSet[i] = (attackBoxSet[i] * sizeRate).tointeger(); } } sq_AddAttackBox(currentAni,attackBoxSet[0], attackBoxSet[1], attackBoxSet[2], attackBoxSet[3], attackBoxSet[4], attackBoxSet[5]); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_RAPIDMOVESLASH, -1, subState - 2, 1.0); local weaponSubType = obj.getWeaponSubType(); if(weaponSubType == 0 && sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY) >= 9){ local addRate = sq_GetLevelData(obj, SKILL_SMBYKK_SHORTSWORDMASTERY, 22, sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY)); totalDamage = totalDamage * (1000 + addRate) / 1000; } if(subState == 2) sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_RAPIDMOVESLASH1)); else sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_RAPIDMOVESLASH2)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); if(subState == 2){ if(obj.getVar("rapidMoveSlashBool").getBool(1)) obj.sq_PlaySound("R_SM_MENGRYONG"); else obj.sq_PlaySound("SM_MENGRYONG_START"); } else obj.sq_PlaySound("SM_MENGRYONG_FIN"); obj.sq_PlaySound("MENGRYOUNG_ATK"); obj.getVar("rapidMoveSlashBool").setBool(0, false); obj.getVar("rapidMoveSlashBool").setBool(1, false); obj.setTimeEvent(1, (30000 / newSpeedRate).tointeger(), -1, false); local passiveskill75Lv = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFLIMIT); if(passiveskill75Lv > 0){ local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 14, passiveskill75Lv) + sq_GetIntData(obj, SKILL_SMBYKK_STATEOFLIMIT, 17); totalDamage = totalDamage * bonusRate / 100; local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_STATEOFLIMIT, 19); local sub = 0, sizeRate = 100; if(sq_GetIntData(obj, SKILL_SMBYKK_RAPIDMOVESLASH, 6) > 0){sub = 1; sizeRate = 180; hitMax = hitMax + 6;} createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,1,1,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFLIMIT,2,totalDamage,hitMax,sub,sizeRate,0,0,0,0); } if(weaponSubType == 5 && sq_GetSkillLevel(obj, SKILL_SMBYKK_LIGHTSWORDMASTERY) >= 9){ local attackInfo = sq_GetCurrentAttackInfo(obj); local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_LIGHTSWORDMASTERY); local time = sq_GetLevelData(obj, SKILL_SMBYKK_LIGHTSWORDMASTERY, 6, skillLevel); local level = sq_GetSkillLevel(obj, 174) + 5; sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_LIGHTNING, 1000, level, time); } break; } } function onEndCurrentAni_RapidMoveSlash(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(STATE_SMBYKK_RAPIDMOVESLASH, STATE_PRIORITY_AUTO, true); break; case 2: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_SMBYKK_RAPIDMOVESLASH, STATE_PRIORITY_AUTO, true); break; case 1: if(obj.getVar("rapidMoveSlashBool").getBool(1)){ obj.sq_IntVectClear(); if(obj.getVar("rapidMoveSlashSet").getInt(1) + 1 >= sq_GetIntData(obj, SKILL_SMBYKK_RAPIDMOVESLASH, 0)) obj.sq_IntVectPush(3); else obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(STATE_SMBYKK_RAPIDMOVESLASH, STATE_PRIORITY_AUTO, true); break; } case 3: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProc_RapidMoveSlash(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: if(obj.getVar("rapidMoveSlashBool").getBool(2) == false){ local direction = sq_GetDirection(obj); if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_RIGHT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_LEFT){ obj.getVar("rapidMoveSlashBool").setBool(2, true); sq_SetCurrentDirection(obj, sq_GetOppositeDirection(direction)); } } break; case 2: if(obj.getVar("rapidMoveSlashBool").getBool(1) == false){ obj.setSkillCommandEnable(SKILL_SMBYKK_RAPIDMOVESLASH, true); if(obj.sq_IsEnterSkill(SKILL_SMBYKK_RAPIDMOVESLASH) != -1){ obj.getVar("rapidMoveSlashBool").setBool(1, true); obj.getVar("rapidMoveSlashSet").setInt(1, obj.getVar("rapidMoveSlashSet").getInt(1) + 1); } } case 3: if(obj.getVar("rapidMoveSlashBool").getBool(0) == false){ if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ obj.getVar("rapidMoveSlashBool").setBool(0, true); local speed = 200.0 * obj.getVar("rapidMoveSlashSet").getInt(0) / 100.0; sq_SetVelocity(obj, 1, speed); } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ obj.getVar("rapidMoveSlashBool").setBool(0, true); local speed = 200.0 * obj.getVar("rapidMoveSlashSet").getInt(0) / 100.0; sq_SetVelocity(obj, 1, -speed); } } break; } } function onKeyFrameFlag_RapidMoveSlash(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: obj.resetHitObjectList(); break; } return true; } function onTimeEvent_RapidMoveSlash(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: local aniPath = "character/swordman/effect/animation/1_swordman_bykk/rapidmoveslash/smoke_eff_01.ani"; local direction = sq_GetDirection(obj), xPos = sq_GetDistancePos(sq_GetXPos(obj), direction, -100), yPos = sq_GetYPos(obj); createOnlyDrawObjectEX_Swordman_bykk(obj,aniPath,true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL,120,120); break; } } function onEndState_RapidMoveSlash(obj, new_state) { if(!obj) return; if(new_state != STATE_SMBYKK_RAPIDMOVESLASH){ if(!sq_GetSkill(obj, SKILL_SMBYKK_RAPIDMOVESLASH).isInCoolTime()) obj.startSkillCoolTime(SKILL_SMBYKK_RAPIDMOVESLASH, sq_GetSkillLevel(obj, SKILL_SMBYKK_RAPIDMOVESLASH), -1); obj.getVar("rapidMoveSlashBool").setBool(0, false); obj.getVar("rapidMoveSlashBool").setBool(1, false); CNSquirrelAppendage.sq_RemoveAppendage(obj, "appendage/character/ap_common_suck.nut"); } } //幻影剑舞 function checkExecutableSkill_IllusionSlash(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_ILLUSIONSLASH); if (isUse){ obj.getVar("IllusionSlashBool").setBool(0, true); obj.getVar("IllusionSlashBool").setBool(1, true); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_SMBYKK_ILLUSIONSLASH, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_IllusionSlash(obj) { if (!obj) return false; return true; } function onSetState_IllusionSlash(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(ANI_SMBYKK_ILLUSIONSLASH1); break; case 1: obj.sq_SetCurrentAnimation(ANI_SMBYKK_ILLUSIONSLASH2); break; case 2: obj.sq_SetCurrentAnimation(ANI_SMBYKK_ILLUSIONSLASH3); break; case 3: obj.sq_SetCurrentAnimation(ANI_SMBYKK_ILLUSIONSLASH4); break; case 4: obj.sq_SetCurrentAnimation(ANI_SMBYKK_ILLUSIONSLASHFINAL); break; } local weaponSubType = obj.getWeaponSubType(); local speed = 1.2; switch(weaponSubType){ case 0: speed = 1.5; case 1: speed = 1.65; case 2: speed = 1.35; case 5: speed = 1.65; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); switch(subState){ case 0: if(obj.getVar("IllusionSlashBool").getBool(0)){ obj.getVar("IllusionSlashBool").setBool(0, false); obj.getVar("IllusionSlash_WeaponSubType").setInt(0, weaponSubType); obj.getVar("IllusionSlash_hitCount").setInt(0, 0); obj.getVar("IllusionSlash_illCount").setInt(0, 0); obj.sq_PlaySound("SM_HOANYOUNG_START"); obj.getVar("IllusionSlash_hitMaxSet").setInt(0, 1); switch(weaponSubType){ case 1: if(sq_GetSkillLevel(obj, SKILL_SMBYKK_BLADEMASTERY) >= 7) obj.getVar("IllusionSlash_hitMaxSet").setInt(0, 25); break; case 5: if(sq_GetSkillLevel(obj, SKILL_SMBYKK_LIGHTSWORDMASTERY) >= 7) obj.getVar("IllusionSlash_hitMaxSet").setInt(0, 27); break; } obj.startRapidInput(); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){ print("IllusionSlash"); obj.getVar("handlingsword_canShoot").setBool(0, true); } obj.getVar("blademastery_canExp").setBool(0, true); } case 1: case 2: case 3: local currentAni = obj.getCurrentAnimation(); local speedRate = 10000 / currentAni.getDelaySum(0, 0); obj.getVar("IllusionSlashSet").setInt(0, speedRate); print("speedRate = "+speedRate); obj.sq_PlaySound("R_SM_HOANYOUNG"); break; case 4: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/illusionslash/upper.ani", 0, 0, 0); obj.sq_PlaySound("SM_HOANYOUNG_FIN"); break; } } function onEndCurrentAni_IllusionSlash(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: case 2: case 3: // print(obj.getVar("IllusionSlash_hitCount").getInt(0)); // print(obj.getVar("IllusionSlash_hitMaxSet").getInt(0)); local speedRate = obj.getVar("IllusionSlashSet").getInt(0); createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,-1,0,sq_GetDirection(obj),1,SKILL_SMBYKK_ILLUSIONSLASH,0,subState,speedRate,0,0,0,0,0,0); local weaponSubType = obj.getWeaponSubType(); if(weaponSubType != obj.getVar("IllusionSlash_WeaponSubType").getInt(0)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(4); obj.sq_AddSetStatePacket(STATE_SMBYKK_ILLUSIONSLASH, STATE_PRIORITY_AUTO, true); return; } obj.sq_IntVectClear(); if(obj.getVar("IllusionSlash_hitCount").getInt(0) + 1 >= sq_GetIntData(obj, SKILL_SMBYKK_ILLUSIONSLASH, obj.getVar("IllusionSlash_hitMaxSet").getInt(0))) obj.sq_IntVectPush(4); else{ obj.getVar("IllusionSlash_hitCount").setInt(0, obj.getVar("IllusionSlash_hitCount").getInt(0) + 1) if(subState < 3) obj.sq_IntVectPush(subState + 1); else obj.sq_IntVectPush(0); } obj.sq_AddSetStatePacket(STATE_SMBYKK_ILLUSIONSLASH, STATE_PRIORITY_AUTO, true); break; case 4: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_IllusionSlash(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: case 2: case 3: sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); break; } } function onKeyFrameFlag_IllusionSlash(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1000: if(obj.getRapidInputFrequency() > 1){ local currentAni = obj.getCurrentAnimation(); local speed = obj.getVar("IllusionSlashSet").getInt(0).tofloat() * 2.0; local weaponSubType = obj.getWeaponSubType(); if(weaponSubType == 1 || weaponSubType == 5) speed = speed * 1.2; else if(weaponSubType == 0 && sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY) > 0) speed = speed * 1.5; currentAni.setSpeedRate(speed); if(obj.getVar("IllusionSlashBool").getBool(1)){ obj.getVar("IllusionSlashBool").setBool(1, false); obj.getVar("IllusionSlash_hitMaxSet").setInt(0, obj.getVar("IllusionSlash_hitMaxSet").getInt(0) + 1); } } break; case 1001: case 1002: case 1003: case 1004: local bonusRate = 1.0; local weaponSubType = obj.getWeaponSubType(); if(weaponSubType == 1 || weaponSubType == 5) bonusRate = 0.75; else if(weaponSubType == 0) bonusRate = 0.9; else if(weaponSubType == 3) bonusRate = sq_GetIntData(obj, SKILL_SMBYKK_ILLUSIONSLASH, 33).tofloat() / 100.0; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_ILLUSIONSLASH, -1, 0, bonusRate); local sizeRate = sq_GetIntData(obj, SKILL_SMBYKK_ILLUSIONSLASH, 30); local weaponSubType = obj.getWeaponSubType(); createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,1,1,sq_GetDirection(obj),1,SKILL_SMBYKK_ILLUSIONSLASH,1,totalDamage,sizeRate,flagIndex,weaponSubType,0,0,0,0); local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFLIMIT); if(skillLevel > 0 && flagIndex == 1001){ local illCount = obj.getVar("IllusionSlash_illCount").getInt(0); obj.getVar("IllusionSlash_illCount").setInt(0, obj.getVar("IllusionSlash_illCount").getInt(0) + 1); totalDamage = totalDamage * (sq_GetIntData(obj, SKILL_SMBYKK_STATEOFLIMIT, 20) + sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 15, skillLevel)) / 100; createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,-1,-1,sq_GetDirection(obj),1,SKILL_SMBYKK_ILLUSIONSLASH,10,totalDamage,sizeRate,illCount,weaponSubType,0,0,0,0); } obj.sq_PlaySound("HOANYOUNG_WAVE"); break; case 32767: local bounsSet = 1, bonusGet = obj.getVar("IllusionSlash_hitMaxSet").getInt(0), weaponSubType = obj.getWeaponSubType(); if(bonusGet != 1 && bonusGet != 25 && bonusGet != 27){ bounsSet = 2; if(weaponSubType == 0) bounsSet = 13; } else if(weaponSubType == 2) bounsSet = 3; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_ILLUSIONSLASH, -1, bounsSet, 1.0); local sizeRate = sq_GetIntData(obj, SKILL_SMBYKK_ILLUSIONSLASH, 30); local speedRate = obj.getVar("IllusionSlashSet").getInt(0); // print("totalDamage = "+totalDamage); createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,weaponSubType==2?125:75,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_ILLUSIONSLASH,2,totalDamage,sizeRate,weaponSubType,bonusGet,speedRate,0,0,0); local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFLIMIT); if(skillLevel > 0){ if(weaponSubType != 2)totalDamage = totalDamage * (sq_GetIntData(obj, SKILL_SMBYKK_STATEOFLIMIT, 21) + sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 16, skillLevel)) / 100; else totalDamage = totalDamage * (sq_GetIntData(obj, SKILL_SMBYKK_STATEOFLIMIT, 31) + sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 38, skillLevel)) / 100; createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,-1,-1,sq_GetDirection(obj),1,SKILL_SMBYKK_ILLUSIONSLASH,20,totalDamage,sizeRate,weaponSubType,bonusGet,speedRate,0,0,0); } break; case 65534: if(obj.getWeaponSubType() == 2) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/illusionslash/smash.ani", 0, 0, 0); break; } return true; } function onTimeEvent_IllusionSlash(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_IllusionSlash(obj, new_state) { if(!obj) return; } //极·鬼剑士(暴风式)准备阶段 function onAfterSetState_HundredSwordReady(obj, state, datas, isResetTimer) { if(!obj) return; local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 0); obj.getVar("HundredSwordSet").setInt(0, speedRate); obj.startRapidInput(); if(sq_GetSkillLevel(obj, SKILL_SMBYKK_HUNDREDSWORD) >= 3) sq_SendMessage(obj, 0, 1, 0); local isHold = obj.sq_GetVectorData(datas, 1); if(isHold > 0) obj.getVar("HundredSwordReady").setBool(0, true); else obj.getVar("HundredSwordReady").setBool(0, false); obj.getVar("HundredSwordSet").setInt(2, 0); } function onProc_HundredSwordReady(obj) { if(!obj) return; sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); // print(sq_GetCurrentFrameIndex(obj)); } function onKeyFrameFlag_HundredSwordReady(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1001: if(obj.getVar("HundredSwordReady").getBool(0)) break; local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(4, 14); local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_HUNDREDSWORD); local addDamageRate = sq_GetLevelData(obj, SKILL_SMBYKK_HUNDREDSWORD, 6, skillLevel); createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,150,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_HUNDREDSWORD,1,delay,addDamageRate,0,0,0,0,0,0); break; } return true; } function onTimeEvent_HundredSwordReady(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_HundredSwordReady(obj, new_state) { if(!obj) return; local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_HUNDREDSWORD); if(skillLevel >= 6){ local criticalRate = sq_GetLevelData(obj, SKILL_SMBYKK_HUNDREDSWORD, 3, skillLevel); local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, criticalRate.tofloat(), 0); if (ap){ ap.getAppendageInfo().setValidTime(10000); ap.sq_Append(obj, obj); } } } function proc_appendage_hundredsword_hold(appendage) { if(!appendage) return; local sourceObj = appendage.getSource(); local state = sourceObj.getState(); if(!sourceObj || state == STATE_DIE){ appendage.setValid(false); return; } local sqrChr = sq_GetCNRDObjectToSQRCharacter(sourceObj); if(sqrChr.getVar("HundredSwordSet").getInt(2) == 1){ appendage.setValid(false); return; } local useTime = appendage.getTimer().Get(); if(useTime >= 10000){ appendage.setValid(false); return; } } function getImmuneTypeDamageRate_appendage_hundredsword_hold(appendage, damageRate, attacker) { if(!appendage) return; if(appendage.getVar().getBool(0)){ if(attacker.isObjectType(OBJECTTYPE_PASSIVE)){ local colObj = sq_GetCNRDObjectToCollisionObject(attacker); local passiveIndex = colObj.getCollisionObjectIndex(); if(passiveIndex == 20051){ local newdamageRate = damageRate * (100 + appendage.getVar("custom").getInt(0)) / 100; return newdamageRate; } else return damageRate; } else return damageRate; } else return damageRate; } //极·鬼剑士(暴风式)攻击阶段 function onAfterSetState_HundredSwordHit(obj, state, datas, isResetTimer) { if(!obj) return; local currentAni = obj.getCurrentAnimation(); local speedRate = obj.getVar("HundredSwordSet").getInt(0); if(obj.getRapidInputFrequency() > 2) speedRate = speedRate * 2; local speedSet = sq_GetIntData(obj, SKILL_SMBYKK_HUNDREDSWORD, 12); if(speedSet > 0) speedRate = speedRate / 2 * 3; local hitCount = obj.getVar("HundredSwordSet").getInt(1); speedRate = speedRate * (100 + 2 * hitCount) / 100; obj.getVar("HundredSwordSet").setInt(1, obj.getVar("HundredSwordSet").getInt(1) + 1); currentAni.setSpeedRate(speedRate.tofloat()); } function onProc_HundredSwordHit(obj) { if(!obj) return; sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); } //极·鬼剑士(暴风式)结束阶段 function onAfterSetState_HundredSwordEnd(obj, state, datas, isResetTimer) { if(!obj) return; local currentAni = obj.getCurrentAnimation(); local speedRate = obj.getVar("HundredSwordSet").getInt(0); currentAni.setSpeedRate(speedRate.tofloat()); local bonusRate = 1.0; local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_HUNDREDSWORD); if(skillLevel >= 9) bonusRate = 1.0 + sq_GetLevelData(obj, SKILL_SMBYKK_HUNDREDSWORD, 6, skillLevel).tofloat() / 100.0; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_HUNDREDSWORD, -1, 2, bonusRate); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_HUNDREDSWORDFINISH)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); } function onProc_HundredSwordEnd(obj) { if(!obj) return; } function onEndState_HundredSwordEnd(obj, new_state) { if(!obj) return; if(sq_GetSkillLevel(obj, SKILL_SMBYKK_HUNDREDSWORD) >= 3) sq_SendMessage(obj, 0, 0, 0); obj.getVar("HundredSwordSet").setInt(1, 0); obj.getVar("HundredSwordSet").setInt(2, 1); } function onAttack_PassiveObject_hundredsword_bykk(passiveobj, damager, bounding_box, is_stuck) { local id = passiveobj.getPassiveObjectIndex(); if(id == 20051){ if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ local xPos = sq_GetXPos(passiveobj), yPos = sq_GetYPos(passiveobj); local xTPos = sq_GetXPos(damager), yTPos = sq_GetYPos(damager); local disX = sq_Abs(xTPos - xPos), disY = sq_Abs(yTPos - yPos); if(disX > 5){ local moveX = disX / 10 + 1; if(xPos > xTPos) sq_setCurrentAxisPos(damager, 0, xTPos + moveX); else sq_setCurrentAxisPos(damager, 0, xTPos - moveX); } if(disY > 2){ local moveY = disY / 10 + 1; if(yPos > yTPos) sq_setCurrentAxisPos(damager, 1, yTPos + moveY); else sq_setCurrentAxisPos(damager, 1, yTPos - moveY); } } } } //极·神剑术(流星落) function checkExecutableSkill_MeteorSword(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_METEORSWORD); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_SMBYKK_METEORSWORD, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_MeteorSword(obj) { if (!obj) return false; return true; } function onSetState_MeteorSword(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(ANI_SMBYKK_METEORSWORDSTART); break; case 1: obj.sq_SetCurrentAnimation(ANI_SMBYKK_METEORSWORDUP); break; case 2: obj.sq_SetCurrentAnimation(ANI_SMBYKK_METEORSWORDDROP); break; case 3: obj.sq_SetCurrentAnimation(ANI_SMBYKK_METEORSWORDEXPLOSION); break; case 10: obj.sq_IsEnterSkillLastKeyUnits(SKILL_SMBYKK_METEORSWORD); obj.sq_SetCurrentAnimation(ANI_SMBYKK_MOMENTARYSLASH_READY); obj.sq_PlaySound("SM_GUE_SWORD", 3333); obj.getVar("MeteorSwordCharge").setBool(0, false); break; case 11: obj.sq_SetCurrentAnimation(ANI_SMBYKK_WEAPONCOMBOSHORT3); obj.stopSound(3333); obj.sq_PlaySound("SM_THRUST"); local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj); createOnlyDrawObjectEX_Swordman_bykk(obj,"character/swordman/effect/animation/1_swordman_bykk/meteorsword/up_meteorsword_upeffect.ani",true,direction,sq_GetDistancePos(xPos,direction, 25),yPos,0,ENUM_DRAWLAYER_NORMAL,300,75); createOnlyDrawObjectEX_Swordman_bykk(obj,"passiveobject/0_swordman_bykk/1weaponmaster/animation/meteorsword/up_meteorsword_shock1.ani",true,direction,xPos,yPos,0,ENUM_DRAWLAYER_BOTTOM,100,100); sq_SetMyShake(obj, 5, 120); local isTrue = 0; if(obj.getVar("MeteorSwordCharge").getBool(0)) isTrue = 1; createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,200,0,-sq_GetZPos(obj),sq_GetDirection(obj),1,SKILL_SMBYKK_METEORSWORD,3,1,isTrue,0,0,0,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); switch(subState){ case 0: //obj.sq_IsEnterSkillLastKeyUnits(SKILL_SMBYKK_METEORSWORD); local currentAni = obj.getCurrentAnimation(); local speedRate = 17500 / currentAni.getDelaySum(false); // if(speedRate > 160) speedRate = 160; currentAni.setSpeedRate(speedRate.tofloat()); obj.getVar("blademastery_canExp").setBool(0, true); break; case 1: // obj.setTimeEvent(1, 3000, 1, false); local currentAni = obj.getCurrentAnimation(); obj.setTimeEvent(2, currentAni.getDelaySum(false) / 4, 3, true); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_METEORSWORD, -1, 0, 1.0); local sizeRate = sq_GetIntData(obj, SKILL_SMBYKK_METEORSWORD, 4); createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,-sq_GetZPos(obj),sq_GetDirection(obj),1,SKILL_SMBYKK_METEORSWORD,2,totalDamage,sizeRate,0,0,0,0,0,0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/meteorsword/up_meteorsword_start_dust.ani", 0, 1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/meteorsword/up_meteorsword_upeffect.ani", 0, 0, 0); sq_SetMyShake(obj, 8, 120); sq_SendMessage(obj, 0, 1, 0); break; case 2: sq_setCurrentAxisPos(obj, 0, obj.getVar("meteorSwordSet").getInt(1)); sq_setCurrentAxisPos(obj, 1, obj.getVar("meteorSwordSet").getInt(2)); local currentAni = obj.getCurrentAnimation(); obj.setTimeEvent(3, currentAni.getDelaySum(false) / 10, 8, true); break; case 3: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_METEORSWORD, -1, 6, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_METEORSWORDEXPLOSION)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); local speedRate = 6000 / currentAni.getDelaySum(0, 0); if(speedRate > 160){ currentAni.setSpeedRate(160.0); } else if(speedRate < 120){ currentAni.setSpeedRate(120.0); } sq_SetMyShake(obj, 15, 300); sq_SendMessage(obj, 0, 0, 0); break; } } function onEndCurrentAni_MeteorSword(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_SMBYKK_METEORSWORD, STATE_PRIORITY_AUTO, true); break; case 1: local offsetX = 150; if(!obj.isMovablePos(sq_GetDistancePos(sq_GetXPos(obj), sq_GetDirection(obj), offsetX)), sq_GetYPos(obj)) offsetX = 0; createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,offsetX,0,-sq_GetZPos(obj),sq_GetDirection(obj),1,SKILL_SMBYKK_METEORSWORD,1,0,0,0,0,0,0,0,0); break; case 2: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(STATE_SMBYKK_METEORSWORD, STATE_PRIORITY_AUTO, true); break; case 3: case 11: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_MeteorSword(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 10: if(obj.isDownSkillLastKey()){ if(obj.sq_GetStateTimer() >= 1000){ obj.getVar("MeteorSwordCharge").setBool(0, true); obj.sq_IntVectClear(); obj.sq_IntVectPush(11); obj.sq_AddSetStatePacket(STATE_SMBYKK_METEORSWORD, STATE_PRIORITY_AUTO, true); } } else{ obj.sq_IntVectClear(); obj.sq_IntVectPush(11); obj.sq_AddSetStatePacket(STATE_SMBYKK_METEORSWORD, STATE_PRIORITY_AUTO, true); } break; } } function onKeyFrameFlag_MeteorSword(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_MeteorSword(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(STATE_SMBYKK_METEORSWORD, STATE_PRIORITY_AUTO, true); break; case 2: local vz = sq_GetAccel(0, 500, timeEventCount, 3, true); sq_setCurrentAxisPos(obj, 2, vz); break; case 3: local vz = sq_GetAccel(500, 0, timeEventCount, 6, false); sq_setCurrentAxisPos(obj, 2, vz); if(timeEventCount >= 8){ obj.stopTimeEvent(3); obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(STATE_SMBYKK_METEORSWORD, STATE_PRIORITY_AUTO, true); } break; } } function onEndState_MeteorSword(obj, new_state) { if(!obj) return; if(new_state != STATE_SMBYKK_METEORSWORD){ sq_SimpleMoveToNearMovablePos(obj,200); } } function getScrollBasisPos_MeteorSword(obj) { if(!obj) return; local subState = obj.getSkillSubState(); if(subState != 1) return false; if(obj.sq_GetStateTimer() <= 500) return false; if(obj.isMyControlObject()){ local offsetX = obj.getVar("meteorSwordSet").getInt(1); local offsetY = obj.getVar("meteorSwordSet").getInt(2); if(offsetX == sq_GetXPos(obj)) return false; obj.sq_SetCameraScrollPosition(offsetX, offsetY, 0); return true; } return false; } //破空拔刀斩 function checkExecutableSkill_MomentarySlashEx(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_MOMENTARYSLASHEX); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_SMBYKK_MOMENTARYSLASHEX, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_MomentarySlashEx(obj) { if (!obj) return false; return true; } function onSetState_MomentarySlashEx(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(ANI_SMBYKK_MOMENTARYSLASHEX_READY); obj.sq_PlaySound("R_SM_MOMENTARY_SLASHEX_READY"); obj.getVar("blademastery_canExp").setBool(0, true); obj.sq_IsEnterSkillLastKeyUnits(SKILL_SMBYKK_MOMENTARYSLASHEX); break; case 1: obj.sq_SetCurrentAnimation(ANI_SMBYKK_MOMENTARYSLASHEX_SLASH); local currentAni = obj.getCurrentAnimation(); sq_SetFrameDelayTime(currentAni, 9, 250); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_MomentarySlashEx(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: //obj.sq_IntVectClear(); //obj.sq_IntVectPush(1); //obj.sq_AddSetStatePacket(STATE_SMBYKK_MOMENTARYSLASHEX, STATE_PRIORITY_AUTO, true); break; case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_MomentarySlashEx(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(obj.isDownSkillLastKey()){ if(obj.sq_GetStateTimer() >= 1500){ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_SMBYKK_MOMENTARYSLASHEX, STATE_PRIORITY_AUTO, true); } } else{ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_SMBYKK_MOMENTARYSLASHEX, STATE_PRIORITY_AUTO, true); } break; } if(obj.getVar("MomentarySlashExBool").getBool(0)){ obj.setSkillCommandEnable(SKILL_SMBYKK_MOMENTARYSLASH, true); if(obj.sq_IsEnterSkill(SKILL_SMBYKK_MOMENTARYSLASH) != -1){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_SMBYKK_MOMENTARYSLASH, STATE_PRIORITY_IGNORE_FORCE, true); } } } function onKeyFrameFlag_MomentarySlashEx(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1001: obj.sq_PlaySound("R_DRAWING_SWORD"); obj.sq_PlaySound("R_SM_MOMENTARY_SLASHEX_SHOT"); break; case 1004: //`CreateWave` 0 0 0 local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_MOMENTARYSLASHEX, -1, 1, 1.0); local sizeRate = sq_GetIntData(obj, SKILL_SMBYKK_MOMENTARYSLASHEX, 2); local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_MOMENTARYSLASHEX); local moveX = sq_GetLevelData(obj, SKILL_SMBYKK_MOMENTARYSLASHEX, 3, skillLevel); createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,60,sq_GetDirection(obj),1,SKILL_SMBYKK_MOMENTARYSLASHEX,1,totalDamage,sizeRate,moveX,0,0,0,0,0); break; case 1005: //`EnableMometarySlash` 0 0 0 //`EndSlash` 0 0 0 // if(sq_GetIntData(obj, SKILL_SMBYKK_MOMENTARYSLASH, 0) > 3){ // obj.getVar("MomentarySlashExBool").setBool(0, true); // obj.sq_IntVectClear(); // obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); // } break; } return true; } function onTimeEvent_MomentarySlashEx(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_MomentarySlashEx(obj, new_state) { if(!obj) return; } //极·神剑术(破空斩) function checkExecutableSkill_SwordOfMind(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_SWORDOFMIND); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_SMBYKK_SWORDOFMIND, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_SwordOfMind(obj) { if (!obj) return false; return true; } function onSetState_SwordOfMind(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); switch(subState){ case 0: local weaponSubType = obj.getWeaponSubType(); if(weaponSubType == 0) obj.sq_SetCurrentAnimation(ANI_SMBYKK_SWORDOFMINDCHARGEATTRACT); else obj.sq_SetCurrentAnimation(ANI_SMBYKK_SWORDOFMINDCHARGE); obj.sq_IsEnterSkillLastKeyUnits(SKILL_SMBYKK_SWORDOFMIND); obj.getVar("SwordOfMindObj").clear_obj_vector(); createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_SWORDOFMIND,1,0,0,0,0,0,0,0,0); local chargeTime = 200000; if(weaponSubType == 3) chargeTime = sq_GetIntData(obj, SKILL_SMBYKK_SWORDOFMIND, 7); createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_SWORDOFMIND,2,chargeTime,0,0,0,0,0,0,0); if(weaponSubType == 0){ local appendage = sq_AttractToMe(obj, sq_GetIntData(obj, SKILL_SMBYKK_SWORDOFMIND, 11), 150, 200); obj.getVar("SwordOfMind").setAppendage(0,appendage); } if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){ obj.getVar("handlingsword_canShoot").setBool(0, true); } // obj.getVar("SwordOfMindCount").setInt(1, sq_GetIntData(obj, SKILL_SMBYKK_SWORDOFMIND, 1)); obj.getVar("blademastery_canExp").setBool(0, true); break; case 1: obj.sq_SetCurrentAnimation(ANI_SMBYKK_SWORDOFMINDCHARGEATTACK); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_SWORDOFMINDATTACK)); local size = obj.getVar("SwordOfMindObj").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local effectObj = obj.getVar("SwordOfMindObj").get_obj_vector(i); if(effectObj) effectObj.setValid(false); } } if(obj.getWeaponSubType() == 0){ local appendage = obj.getVar("SwordOfMind").getAppendage(0); if(appendage) appendage.setValid(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_SwordOfMind(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_SwordOfMind(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(!obj.isDownSkillLastKey()){ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_SMBYKK_SWORDOFMIND, STATE_PRIORITY_AUTO, true); } else{ local stateTime = obj.sq_GetStateTimer(); if(obj.getWeaponSubType() == 3 && stateTime >= sq_GetIntData(obj, SKILL_SMBYKK_SWORDOFMIND, 7)) obj.getVar("SwordOfMindCharge").setBool(0, true); if(stateTime >= 3000){ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_SMBYKK_SWORDOFMIND, STATE_PRIORITY_AUTO, true); } } break; } } function onKeyFrameFlag_SwordOfMind(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_SwordOfMind(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_SwordOfMind(obj, new_state) { if(!obj) return; if(new_state != STATE_SMBYKK_SWORDOFMIND){ obj.getVar("SwordOfMindCharge").setBool(0, false); obj.getVar("SwordOfMindCount").setInt(1, 0); } } function onAttack_SwordOfMind(obj, damager, boundingBox, isStuck) { if(isStuck) return; if(damager.isObjectType(OBJECTTYPE_ACTIVE) && damager.isInDamagableState(obj)){// && obj.getVar("SwordOfMindCount").getInt(1) > 0 // obj.getVar("SwordOfMindCount").setInt(1, obj.getVar("SwordOfMindCount").getInt(1) - 1); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_SWORDOFMIND, -1, 0, 1.0); local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_SWORDOFMIND, -1, 4, 1.0); local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_SWORDOFMIND, 0); local weaponSubType = obj.getWeaponSubType(); if(obj.getVar("SwordOfMindCharge").getBool(0)) totalDamage = totalDamage * (100 + sq_GetIntData(obj, SKILL_SMBYKK_SWORDOFMIND, 14)) / 100; local stateoflimitSet = 0; local passiveskill75Lv = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFLIMIT); if(passiveskill75Lv > 0){ stateoflimitSet = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 17, passiveskill75Lv) + sq_GetIntData(obj, SKILL_SMBYKK_STATEOFLIMIT, 26); } local group = sq_GetGroup(damager); local uniqueId = sq_GetUniqueId(damager); createSkillPassive_Swordman_bykk(obj,damager,PASSIVEOBJ_BYKK_SWORDMAN,0,0,sq_GetZPos(damager) + sq_GetObjectHeight(damager) / 2,sq_GetDirection(obj),1,SKILL_SMBYKK_SWORDOFMIND,3,totalDamage,totalDamageExp,hitMax,weaponSubType,group,uniqueId,stateoflimitSet,0); } }