//极·神剑术(瞬斩) function checkExecutableSkill_FlashCut(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_FLASHCUT); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_SMBYKK_FLASHCUT, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_FlashCut(obj) { if (!obj) return false; return true; } function onSetState_FlashCut(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_FLASHCUTREADY_BODY); break; case 1: obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLASHCUTATK_BODY); break; case 2: obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLASHCUTEND_BODY); 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("flashCutTar").clear_obj_vector(); local currentAni = obj.getCurrentAnimation(); local speedRate = 7500 / currentAni.getDelaySum(0, 0); currentAni.setSpeedRate(speedRate.tofloat()); break; case 1: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/flashcut/flashcutsmoke_eff_00.ani", 0, -1, 0); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(false); obj.getVar("FlashCutSet").setInt(0, sq_GetXPos(obj)); obj.setTimeEvent(0, delay / 20, 20, true); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLASHCUT, -1, 0, 1.0); local sizeRate = sq_GetIntData(obj, SKILL_SMBYKK_FLASHCUT, 2); local speedRate = 4000 / currentAni.getDelaySum(0, 0); createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_FLASHCUT,2,totalDamage,sizeRate,speedRate,0,0,0,0,0); break; case 2: local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 0); currentAni.setSpeedRate(speedRate.tofloat() * 1.5); break; } } function onEndCurrentAni_FlashCut(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(STATE_SMBYKK_FLASHCUT, STATE_PRIORITY_AUTO, true); break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_FlashCut(obj) { if(!obj) return; } function onKeyFrameFlag_FlashCut(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1002://`darkchange` local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(2, 7) local flashScreenObj = sq_flashScreen(obj,delay,9999999,0,205,sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); obj.getVar("FlashCutObj").clear_obj_vector(); obj.getVar("FlashCutObj").push_obj_vector(flashScreenObj); break; case 1003: sq_SetMyShake(obj, 6, 50); break; case 2000: sq_SetMyShake(obj, 7, 90); break; case 2001: obj.sq_PlaySound("SM_FLASHCUT"); obj.sq_PlaySound("FLASHCUT"); //`createBackground` local direction = sq_GetDirection(obj), xPos = sq_GetDistancePos(sq_GetXPos(obj), direction, 200), yPos = sq_GetYPos(obj); createOnlyDrawObjectEX_Swordman_bykk(obj,"character/swordman/effect/animation/1_swordman_bykk/flashcut/flashcutbg_02.ani",true,direction,xPos,yPos - 1,75,ENUM_DRAWLAYER_NORMAL,120,200); createOnlyDrawObjectEX_Swordman_bykk(obj,"character/swordman/effect/animation/1_swordman_bykk/flashcut/flashcutbg_01.ani",true,direction,xPos,yPos + 1,75,ENUM_DRAWLAYER_NORMAL,200,175); break; case 3000: sq_SetMyShake(obj, 10, 200); break; case 3010://`delayAttack` local flashScreenObj = obj.getVar("FlashCutObj").get_obj_vector(0); local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); if(pflashScreen){ pflashScreen.fadeOut(); sq_flashScreen(obj,0,0,200,150,sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); } local size = obj.getVar("flashCutTar").get_obj_vector_size(); if(size > 0){ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLASHCUT, -1, 1, 1.0); local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLASHCUT, -1, 2, 1.0); local hitMax = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLASHCUT, -1, 3, 0.9) + 100; for(local i = 0; i < size; i++){ local targetObj = obj.getVar("flashCutTar").get_obj_vector(i); if(targetObj){ local group = sq_GetGroup(targetObj); local uniqueId = sq_GetUniqueId(targetObj); createSkillPassive_Swordman_bykk(obj,targetObj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,sq_GetZPos(targetObj) + sq_GetObjectHeight(targetObj) / 2,sq_GetDirection(obj),1,SKILL_SMBYKK_FLASHCUT,1,totalDamage,totalDamageExp,hitMax,group,uniqueId,0,0,0); } } } break; } return true; } function onTimeEvent_FlashCut(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: local v = sq_GetUniformVelocity(0, 375, timeEventCount, 13); local dstX = sq_GetDistancePos(obj.getVar("FlashCutSet").getInt(0), sq_GetDirection(obj), v); if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); else obj.stopTimeEvent(0); break; } } function onEndState_FlashCut(obj, new_state) { if(!obj) return; } //万剑归宗 function checkExecutableSkill_HandlingSword(obj) { if (!obj) return false; // print("test1"); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)) return false; // print("test2"); local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_HANDLINGSWORD); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_SMBYKK_HANDLINGSWORD, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_HandlingSword(obj) { if (!obj) return false; return true; } function onSetState_HandlingSword(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_HANDLINGSWORD_SRART_BODY); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_HandlingSword(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_HandlingSword(obj) { if(!obj) return; } function onKeyFrameFlag_HandlingSword(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){ CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF); local size = obj.getVar("handlingsword_mainAtkObj").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local attackObj = obj.getVar("handlingsword_mainAtkObj").get_obj_vector(i); if(attackObj) attackObj.setValid(false); } } } local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_SMBYKK_HANDLINGSWORD, false, APDPATH_SM_HANDLINGSWORD_BUFF, true); break; } return true; } function onTimeEvent_HandlingSword(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_HandlingSword(obj, new_state) { if(!obj) return; } function onStart_appendage_handlingsword_buff(appendage) { appendage.getVar().setBool(0, false); appendage.getVar().setBool(1, false); local parentObj = appendage.getParent(); local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_HANDLINGSWORD); appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_SMBYKK_HANDLINGSWORD, skillLevel); local buffTime = sq_GetLevelData(obj, SKILL_SMBYKK_HANDLINGSWORD, 0, skillLevel); if(buffTime != 0) appendage.sq_SetValidTime(buffTime); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_HANDLINGSWORD, -1, 4, 1.0); createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_HANDLINGSWORD,1,totalDamage,0,0,0,0,0,0,0); } function proc_appendage_handlingsword_buff(appendage) { if(!appendage) return; local parentObj = appendage.getParent(); if(!parentObj || parentObj.getState() == STATE_DIE) { appendage.setValid(false); return; } if(appendage.getTimer().Get() <= 5000) return; local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); if(sq_GetSkill(obj, SKILL_SMBYKK_HANDLINGSWORD).isInCoolTime()) return; if(appendage.getVar().getBool(0) && appendage.isValid() && appendage.getVar().getBool(1) == false){ appendage.getVar().setBool(0, false); appendage.getVar().setBool(1, true); return; } } function proc_appendage_handlingsword_hold(appendage) { if(!appendage) return; local parentObj = appendage.getParent(); if(!parentObj || parentObj.getState() == STATE_DIE) { appendage.setValid(false); return; } local sourceObj = appendage.getSource(); if(!sourceObj && appendage.getVar().getBool(0) == false){ appendage.getVar().setBool(0, true); appendage.sq_SetValidTime(1000); return; } } function onEnd_appendage_handlingsword_buff(appendage) { if(!appendage) return; local parentObj = appendage.getParent(); local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); if(obj && obj.getState() != STATE_DIE){ local size = obj.getVar("handlingsword_mainAtkObj").get_obj_vector_size(); if(size > 0){ local canShootCount = 0; for(local i = 0; i < size; i++){ local attackObj = obj.getVar("handlingsword_mainAtkObj").get_obj_vector(i); if(attackObj){ local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); colObj.setTimeEvent(255, 1000, 1, true); } } } if(appendage.getVar().getBool(0) == false && appendage.getVar().getBool(1) == false) createEndHandlingSword_bykk(obj); } } function shootHandlingSword_bykk(obj, group, uniqueId) { local state = obj.getState(); local shootCount = 0; switch(state){ case STATE_ATTACK: case STATE_DASH_ATTACK: case STATE_JUMP_ATTACK: case 22: case STATE_SMBYKK_RAPIDMOVESLASH: case STATE_SMBYKK_WEAPONCOMBO: shootCount = 1; break; case STATE_SMBYKK_FLOWMINDONE: case STATE_SMBYKK_FLOWMINDTWO: case STATE_SMBYKK_FLOWMINDTHREE: shootCount = 2; break; case STATE_SMBYKK_ILLUSIONSLASH: case STATE_SMBYKK_SWORDOFMIND: shootCount = 4; break; case STATE_SMBYKK_CHARGEBURST: shootCount = 5; break; } if(shootCount > 0){ obj.getVar("handlingsword_canShoot").setBool(0, false); local mainAtkObj = obj.getVar("handlingsword_mainAtkObj").get_obj_vector(0); if(mainAtkObj){ local colObj = sq_GetCNRDObjectToCollisionObject(mainAtkObj); local swordCount = colObj.getVar("custom").getInt(1); if(swordCount > 0){ if(swordCount < shootCount) shootCount = swordCount; colObj.getVar("custom").setInt(2, group); colObj.getVar("custom").setInt(3, uniqueId); if(!colObj.isExistTimeEvent(20)) colObj.setTimeEvent(20, 120, shootCount, false); } } } } function createEndHandlingSword_bykk(obj) { obj.getVar("setTar_boss").clear_obj_vector(); obj.getVar("setTar_named").clear_obj_vector(); obj.getVar("setTar_normal").clear_obj_vector(); obj.getVar("setTar").clear_obj_vector(); obj.getVar("setTar_Shoot").clear_obj_vector(); local rangeX = 1000, rangeY = 1000; local objectManager = obj.getObjectManager();//得到對象管理器 for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ local object = objectManager.getCollisionObject(i);//得到控制類對象 if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) <= rangeX && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= rangeY){ local activeObj = sq_GetCNRDObjectToActiveObject(object); if(sq_IsBoss(activeObj)){ obj.getVar("setTar_boss").push_obj_vector(activeObj); continue; } else if(sq_IsNamed(activeObj)){ obj.getVar("setTar_named").push_obj_vector(activeObj); continue; } else{ obj.getVar("setTar_normal").push_obj_vector(activeObj); continue; } } } local bossSize = obj.getVar("setTar_boss").get_obj_vector_size(); local namedSize = obj.getVar("setTar_named").get_obj_vector_size(); local normalSize = obj.getVar("setTar_normal").get_obj_vector_size(); if(bossSize > 0){ for(local i = 0; i < bossSize; i++){ local targetObj = obj.getVar("setTar_boss").get_obj_vector(i); if(targetObj) obj.getVar("setTar").push_obj_vector(targetObj); } } if(namedSize > 0){ for(local i = 0; i < namedSize; i++){ local targetObj = obj.getVar("setTar_named").get_obj_vector(i); if(targetObj) obj.getVar("setTar").push_obj_vector(targetObj); } } if(normalSize > 0){ for(local i = 0; i < normalSize; i++){ local targetObj = obj.getVar("setTar_normal").get_obj_vector(i); if(targetObj) obj.getVar("setTar").push_obj_vector(targetObj); } } local sizeTar = obj.getVar("setTar").get_obj_vector_size(); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_HANDLINGSWORD, -1, 5, 1.0); local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_HANDLINGSWORD, -1, 6, 1.0); if(sizeTar > 0){ local targetObj = obj.getVar("setTar").get_obj_vector(0); if(targetObj && targetObj.getState() != STATE_DIE){ local group = sq_GetGroup(targetObj); local uniqueId = sq_GetUniqueId(targetObj); createSkillPassive_Swordman_bykk(obj,targetObj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,-sq_GetZPos(obj),sq_GetDirection(obj),1,SKILL_SMBYKK_HANDLINGSWORD,4,totalDamage,totalDamageExp,14,group,uniqueId,0,0,0); } } else{ createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,225,0,-sq_GetZPos(obj),sq_GetDirection(obj),1,SKILL_SMBYKK_HANDLINGSWORD,4,totalDamage,totalDamageExp,14,-1,-1,0,0,0); } } //极·神剑术(无形斩) function checkExecutableSkill_InvisibleSwordCut(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_INVISIBLESWORDCUT); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_SMBYKK_INVISIBLESWORDCUT, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_InvisibleSwordCut(obj) { if (!obj) return false; return true; } function onSetState_InvisibleSwordCut(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_INVISIBLESWORDCUT_BODY); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); local speedRate = 4000 / currentAni.getDelaySum(0, 0); speedRate = speedRate.tofloat() * 1.2; currentAni.setSpeedRate(speedRate); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_INVISIBLESWORDCUT, -1, 0, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_INVISIBLESWORDCUT)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/invisibleswordcut/startfront_18.ani"), 0, 0); break; } } function onEndCurrentAni_InvisibleSwordCut(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_InvisibleSwordCut(obj) { if(!obj) return; } function onKeyFrameFlag_InvisibleSwordCut(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1006: obj.sq_PlaySound("INVISIBLE_SWORDCUT"); obj.sq_PlaySound("R_SM_INVISIBLE_SWORDCUT"); break; case 1007: sq_flashScreen(obj,0,20,260,127, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 10, 180); break; case 1008: //`CreateInvisibleSword` local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_INVISIBLESWORDCUT, -1, 1, 1.0); local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_INVISIBLESWORDCUT, -1, 2, 1.0); local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_INVISIBLESWORDCUT, 0); local currentAni = obj.getCurrentAnimation(); local speedRate = 4000 / currentAni.getDelaySum(0, 0); createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_INVISIBLESWORDCUT,1,totalDamage,totalDamageExp,hitMax,speedRate,0,0,0,0); break; } return true; } function onTimeEvent_InvisibleSwordCut(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_InvisibleSwordCut(obj, new_state) { if(!obj) return; } function onAttack_SwordMaster_byKK(obj, damager, boundingBox, isStuck) { // if(isStuck) return; if(damager.isObjectType(OBJECTTYPE_ACTIVE) && obj.getVar("handlingsword_canShoot").getBool(0)){ local group = sq_GetGroup(damager); local uniqueId = sq_GetUniqueId(damager); shootHandlingSword_bykk(obj, group, uniqueId); } } function setState_weaponMaster_bykk(obj, state, datas, isResetTimer) { switch(state){ case 19: if(obj.getWeaponSubType() == 0 && sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY) >= 5){ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_SHORTSWORDMASTERY, -1, 4, 1.0); local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY); local proc = sq_GetLevelData(obj, SKILL_SMBYKK_SHORTSWORDMASTERY, 5, skillLevel); local time = sq_GetLevelData(obj, SKILL_SMBYKK_SHORTSWORDMASTERY, 7, skillLevel); local level = sq_GetSkillLevel(obj, 174) + 5; createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_SHORTSWORDMASTERY,1,totalDamage,proc,time,level,0,0,0,0); sq_AddDrawOnlyAniFromParent(obj, "passiveobject/0_swordman_bykk/1weaponmaster/animation/guardwavedust.ani", 75, 0, 0); } else if(obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY) >= 5){ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_HEAVYSWORDMASTERY, -1, 3, 1.0); local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY); local proc = sq_GetLevelData(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY, 4, skillLevel); local time = sq_GetLevelData(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY, 6, skillLevel); local level = sq_GetSkillLevel(obj, 174) + 5; createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_SHORTSWORDMASTERY,1,totalDamage,proc,time,level,0,0,0,0); sq_AddDrawOnlyAniFromParent(obj, "passiveobject/0_swordman_bykk/1weaponmaster/animation/guardwavedust.ani", 75, 0, 0); } break; } } ///////刺伤 function proc_appendage_puncture_bykk(appendage) { local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); local sourceObj = appendage.getSource(); if(!parentObj || parentObj.getState() == STATE_DIE || !sourceObj || sourceObj.getState() == STATE_DIE){ appendage.setValid(false); return; } local obj = sq_GetCNRDObjectToSQRCharacter(sourceObj); if(appendage.getVar("bool").getBool(0)){ local timer = appendage.getVar().get_ct_vector(0); if(!timer){ appendage.getVar().clear_ct_vector(); appendage.getVar().push_ct_vector(); timer = appendage.getVar().get_ct_vector(0); timer.Reset(); timer.Start(10000,0); } local currentT = timer.Get(); if(currentT >= appendage.getVar("custom").getInt(2)){ local totalDamageMin = appendage.getVar("custom").getInt(0); local totalDamageMax = appendage.getVar("custom").getInt(1); local count = appendage.getVar("punctureCount").getInt(0); if(count > 17) count = 17; local totalDamage = totalDamageMin; if(count > 3) totalDamage = totalDamage + ((totalDamageMax - totalDamageMin).tofloat() * (count.tofloat() / 17.0)).tointeger(); local group = sq_GetGroup(parentObj); local uniqueId = sq_GetUniqueId(parentObj); local sizeRate = 100 + (100.0 * (count.tofloat() / 17.0)).tointeger(); createSkillPassive_Swordman_bykk(obj,parentObj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,sq_GetHeightObject(parentObj) / 2,sq_GetDirection(obj),1,SKILL_SMBYKK_BLADEMASTERY,2,totalDamage,group,uniqueId,sizeRate,0,0,0,0); appendage.getVar("punctureCount").setInt(0, 0); appendage.getVar("bool").setBool(0, false); appendage.getVar().clear_ct_vector(); return; } } local t = appendage.getVar("setCoolTime").get_timer_vector(0); local currentT = appendage.getTimer().Get(); if(t && t.isOnEvent(currentT) && appendage.getVar("punctureCount").getInt(0) >= 3){ local totalDamageMin = appendage.getVar("custom").getInt(0); local totalDamageMax = appendage.getVar("custom").getInt(1); local count = appendage.getVar("punctureCount").getInt(0); local totalDamage = totalDamageMin; if(count > 3)totalDamage = totalDamage + ((totalDamageMax - totalDamageMin).tofloat() * (count.tofloat() / 17.0)).tointeger(); totalDamage = totalDamage * appendage.getVar("custom").getInt(3) / 100; local group = sq_GetGroup(parentObj); local uniqueId = sq_GetUniqueId(parentObj); createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_BLADEMASTERY,1,totalDamage,group,uniqueId,0,0,0,0,0); } } function onStart_appendage_puncture_bykk(appendage) { if(!appendage) return; } function onEnd_appendage_puncture_bykk(appendage) { if(!appendage) return; } function onStart_appendage_smblademastery(appendage) { local obj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); if(!obj || obj.getState() == STATE_DIE) return; local weaponSubType = obj.getWeaponSubType(); if(weaponSubType == 1) appendage.getVar("bool").setBool(0, true); else appendage.getVar("bool").setBool(0, false); } function onAttackParent_appendage_smblademastery(appendage, realAttacker, damager, boundingBox, isStuck) { if(!appendage) return; if(appendage.getVar("bool").getBool(0) == false) return; if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; if(damager.getState() == STATE_DIE) return; if(realAttacker.isObjectType(OBJECTTYPE_CHARACTER)){ local obj = sq_GetCNRDObjectToSQRCharacter(realAttacker); local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_BLADEMASTERY); local proc = sq_GetLevelData(obj, SKILL_SMBYKK_BLADEMASTERY, 14, skillLevel) + 100; local time = sq_GetLevelData(obj, SKILL_SMBYKK_BLADEMASTERY, 18, skillLevel) + 5; local number = 1, isExplosion = 0, state = obj.getState(); switch(state){ case STATE_SMBYKK_CHARGEBURST: local skill_level = sq_GetSkillLevel(obj, SKILL_SMBYKK_CHARGEBURST); proc = proc + sq_GetLevelData(obj, SKILL_SMBYKK_CHARGEBURST, 8, skill_level); number = number + sq_GetLevelData(obj, SKILL_SMBYKK_CHARGEBURST, 9, skill_level); if(skillLevel >= 10 && obj.getVar("blademastery_canExp").getBool(0)){ obj.getVar("blademastery_canExp").setBool(0, false); isExplosion = 1; } break; case STATE_SMBYKK_CHARGECRASH: local skill_level = sq_GetSkillLevel(obj, SKILL_SMBYKK_CHARGECRASH); proc = proc + sq_GetLevelData(obj, SKILL_SMBYKK_CHARGECRASH, 2, skill_level) / 10; number = number + sq_GetLevelData(obj, SKILL_SMBYKK_CHARGECRASH, 3, skill_level); break; case STATE_SMBYKK_FLOWMINDONE: local skill_level = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDONE); proc = proc + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDONE, 3, skill_level); number = number + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDONE, 4, skill_level); if(skillLevel >= 10 && obj.getVar("blademastery_canExp").getBool(0)){ obj.getVar("blademastery_canExp").setBool(0, false); isExplosion = 1; } break; case STATE_SMBYKK_FLOWMINDTWO: local skill_level = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDTWO); proc = proc + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDTWO, 8, skill_level); number = number + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDTWO, 9, skill_level); if(skillLevel >= 10 && obj.getVar("blademastery_canExp").getBool(0)){ obj.getVar("blademastery_canExp").setBool(0, false); isExplosion = 1; } break; case STATE_SMBYKK_FLOWMINDTHREE: local skill_level = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDTHREE); proc = proc + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDTHREE, 1, skill_level); number = number + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDTHREE, 2, skill_level); if(skillLevel >= 10 && obj.getVar("blademastery_canExp").getBool(0)){ obj.getVar("blademastery_canExp").setBool(0, false); isExplosion = 1; } break; case STATE_SMBYKK_FLOWMINDTHREE: local skill_level = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDTHREE); proc = proc + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDTHREE, 1, skill_level); number = number + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDTHREE, 2, skill_level); if(skillLevel >= 10 && obj.getVar("blademastery_canExp").getBool(0)){ obj.getVar("blademastery_canExp").setBool(0, false); isExplosion = 1; } break; } puncture_bykk(obj, damager, boundingBox, isStuck, proc, number, time, isExplosion); } else if(realAttacker.isObjectType(OBJECTTYPE_PASSIVE)){ local colObj = sq_GetCNRDObjectToCollisionObject(realAttacker); local obj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); if(colObj.getCollisionObjectIndex() != PASSIVEOBJ_BYKK_SWORDMAN) return; local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_BLADEMASTERY); local proc = sq_GetLevelData(obj, SKILL_SMBYKK_BLADEMASTERY, 14, skillLevel) + 100; local time = sq_GetLevelData(obj, SKILL_SMBYKK_BLADEMASTERY, 18, skillLevel) + 5; local number = 1, isExplosion = 0; local skillIndex = colObj.getVar("skillIndex").getInt(0), subtype = colObj.getVar("subtype").getInt(0); switch(skillIndex){ case SKILL_SMBYKK_METEORSWORD: switch(subtype){ case 4: case 6: case 7: local skill_level = sq_GetSkillLevel(obj, SKILL_SMBYKK_METEORSWORD); proc = proc + sq_GetLevelData(obj, SKILL_SMBYKK_METEORSWORD, 7, skill_level); number = number + sq_GetLevelData(obj, SKILL_SMBYKK_METEORSWORD, 8, skill_level); break; case 15: local skill_level = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFLIMIT); proc = proc + sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 27, skill_level); number = number + sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 28, skill_level); break; } break; case SKILL_SMBYKK_ILLUSIONSLASH: local skill_level = sq_GetSkillLevel(obj, SKILL_SMBYKK_ILLUSIONSLASH); proc = proc + sq_GetLevelData(obj, SKILL_SMBYKK_ILLUSIONSLASH, 4, skill_level); number = number + sq_GetLevelData(obj, SKILL_SMBYKK_ILLUSIONSLASH, 5, skill_level); if(skillLevel >= 10 && obj.getVar("blademastery_canExp").getBool(0)){ obj.getVar("blademastery_canExp").setBool(0, false); isExplosion = 1; } break; case SKILL_SMBYKK_MOMENTARYSLASH: local sub = colObj.getVar("custom").getInt(4); switch(sub){ case 0: local skill_level = sq_GetSkillLevel(obj, SKILL_SMBYKK_MOMENTARYSLASH); proc = proc + sq_GetLevelData(obj, SKILL_SMBYKK_MOMENTARYSLASH, 1, skill_level); number = number + sq_GetLevelData(obj, SKILL_SMBYKK_MOMENTARYSLASH, 2, skill_level); break; case 1: local skill_level = sq_GetSkillLevel(obj, SKILL_SMBYKK_MOMENTARYSLASH); proc = proc + sq_GetLevelData(obj, SKILL_SMBYKK_MOMENTARYSLASH, 4, skill_level); number = number + sq_GetLevelData(obj, SKILL_SMBYKK_MOMENTARYSLASH, 5, skill_level); break; } if(skillLevel >= 10 && obj.getVar("blademastery_canExp").getBool(0)){ obj.getVar("blademastery_canExp").setBool(0, false); isExplosion = 1; } break; case SKILL_SMBYKK_BLADEMASTERY: case SKILL_SMBYKK_MYSTICEQUIP: return; break; } puncture_bykk(obj, damager, boundingBox, isStuck, proc, number, time, isExplosion); } } function puncture_bykk(obj, damager, boundingBox, isStuck, proc, number, time, isExplosion) { if(!obj) return;//APDPATH_SM_PUNCTURE if(sq_getRandom(1, 100) < 100 - proc) return; local addAppendage = CNSquirrelAppendage.sq_GetAppendage(damager, APDPATH_SM_PUNCTURE); if(!addAppendage){ addAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, APDPATH_SM_PUNCTURE, true); local totalDamageMin = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_BLADEMASTERY, -1, 15, 1.0); local totalDamageMax = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_BLADEMASTERY, -1, 16, 1.0); local hitRate = sq_GetLevelData(obj, SKILL_SMBYKK_BLADEMASTERY, 17, sq_GetSkillLevel(obj, SKILL_SMBYKK_BLADEMASTERY)); local hitTime = sq_GetIntData(obj, SKILL_SMBYKK_BLADEMASTERY, 14); addAppendage.getVar("punctureCount").setInt(0, number); addAppendage.getVar("custom").setInt(0, totalDamageMin); addAppendage.getVar("custom").setInt(1, totalDamageMax); addAppendage.getVar("custom").setInt(2, time); addAppendage.getVar("custom").setInt(3, hitRate); addAppendage.getVar("setCoolTime").clear_timer_vector(); addAppendage.getVar("setCoolTime").push_timer_vector(); local t = addAppendage.getVar("setCoolTime").get_timer_vector(0); t.setParameter(hitTime, -1); t.resetInstant(0); print("setAppendage"); } else{ addAppendage.getVar("punctureCount").setInt(0, addAppendage.getVar("punctureCount").getInt(0) + number); local count = addAppendage.getVar("punctureCount").getInt(0); print("count = "+count); if(addAppendage.getVar("bool").getBool(0) == false && count >= 3){ addAppendage.getVar("bool").setBool(0, true); } if(count >= 17 || isExplosion == 1){ local totalDamageMin = addAppendage.getVar("custom").getInt(0); local totalDamageMax = addAppendage.getVar("custom").getInt(1); local count = addAppendage.getVar("punctureCount").getInt(0); if(count > 17) count = 17; local totalDamage = totalDamageMin; if(count > 3) totalDamage = totalDamage + ((totalDamageMax - totalDamageMin).tofloat() * (count.tofloat() / 17.0)).tointeger(); local group = sq_GetGroup(damager); local uniqueId = sq_GetUniqueId(damager); local sizeRate = 100 + (100.0 * (count.tofloat() / 17.0)).tointeger(); createSkillPassive_Swordman_bykk(obj,damager,PASSIVEOBJ_BYKK_SWORDMAN,0,0,sq_GetHeightObject(damager) / 2,sq_GetDirection(obj),1,SKILL_SMBYKK_BLADEMASTERY,2,totalDamage,group,uniqueId,sizeRate,0,0,0,0); addAppendage.getVar("punctureCount").setInt(0, 0); addAppendage.getVar("bool").setBool(0, false); addAppendage.getVar().clear_ct_vector(); } } } ///////////////被动 function onStart_appendage_smequiplightsword(appendage) { local obj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); if(!obj || obj.getState() == STATE_DIE) return; local weaponSubType = obj.getWeaponSubType(); if(weaponSubType != 5) return; local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_EQUIPLIGHTSWORD); if(sq_GetSkill(obj, SKILL_SMBYKK_EQUIPLIGHTSWORD) && skillLevel > 0){ local coolTime = sq_GetLevelData(obj, SKILL_SMBYKK_EQUIPLIGHTSWORD, 0, skillLevel); local attackSpeed = sq_GetLevelData(obj, SKILL_SMBYKK_EQUIPLIGHTSWORD, 1, skillLevel); local change_appendage = appendage.sq_getChangeStatus("smequiplightsword"); if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("smequiplightsword",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_COOLTIME_DECLINE, true, (coolTime * -1).tofloat()); } } } function onStart_appendage_smmysticequip(appendage) { if(sq_GetCurrentModuleType() != 3) return; local obj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); if(!obj || obj.getState() == STATE_DIE) return; local weaponSubType = obj.getWeaponSubType(); if(weaponSubType == -1) return; if(weaponSubType == obj.getVar("weaponSubTypeSave").getInt(0)){ obj.getVar("weaponSubTypeSave").setInt(0, weaponSubType); return; } obj.getVar("weaponSubTypeSave").setInt(0, weaponSubType); local apdPath = "character/swordman/1weaponmaster_bykk/ap_smmysticequip_buff.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true); AddAppendage.getVar("custom").setInt(0, 1); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_MYSTICEQUIP, -1, 1, 1.0); local sub = 0; if(sq_GetZPos(obj) > 0) sub = 1; createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,1,0,sq_GetDirection(obj),1,SKILL_SMBYKK_MYSTICEQUIP,1,totalDamage,sub,0,0,0,0,0,0); } function onStart_appendage_smfastequip(appendage) { if(sq_GetCurrentModuleType() != 3) return; local obj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); if(!obj || obj.getState() == STATE_DIE) return; local weaponSubType = obj.getWeaponSubType(); if(weaponSubType == -1) return; if(weaponSubType == obj.getVar("weaponSubTypeSave").getInt(0)){ obj.getVar("weaponSubTypeSave").setInt(0, weaponSubType); return; } obj.getVar("weaponSubTypeSave").setInt(0, weaponSubType); local apdPath = "character/swordman/1weaponmaster_bykk/ap_smmysticequip_buff.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true); AddAppendage.getVar("custom").setInt(0, 0); local buffTime = sq_GetIntData(obj, SKILL_SMBYKK_FASTEQUIP, 2); if(sq_GetSkillLevel(obj, SKILL_SMBYKK_MYSTICEQUIP) > 0){ buffTime = sq_GetIntData(obj, SKILL_SMBYKK_MYSTICEQUIP, 2); AddAppendage.getVar("custom").setInt(0, 1); } if(buffTime != 0) AddAppendage.sq_SetValidTime(buffTime); local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_FASTEQUIP); local moveSpeed = 0; local attackSpeed = 0; local criticalRate = sq_GetLevelData(obj, SKILL_SMBYKK_FASTEQUIP, 3, skillLevel); local addAttack = sq_GetLevelData(obj, SKILL_SMBYKK_FASTEQUIP, 4, skillLevel); if(AddAppendage.getVar("custom").getInt(0) > 0){ moveSpeed = sq_GetLevelData(obj, SKILL_SMBYKK_MYSTICEQUIP, 3, skillLevel); attackSpeed = sq_GetLevelData(obj, SKILL_SMBYKK_MYSTICEQUIP, 2, skillLevel); AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_SMBYKK_MYSTICEQUIP, skillLevel); } else{ skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_FASTEQUIP); AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_SMBYKK_FASTEQUIP, skillLevel); } CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); print("moveSpeed = "+moveSpeed); print("attackSpeed = "+attackSpeed); print("criticalRate = "+criticalRate); print("addAttack = "+addAttack); local change_appendage = AddAppendage.sq_getChangeStatus("smfastequip"); if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("smfastequip",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE , false, criticalRate.tofloat() * 0.1); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, addAttack.tofloat() * 0.1); if(moveSpeed > 0){ change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed).tofloat()); } } if(sq_GetSkillLevel(obj, SKILL_SMBYKK_MYSTICEQUIP) > 0){ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_MYSTICEQUIP, -1, 1, 1.0); local sub = 0; if(sq_GetZPos(obj) > 0) sub = 1; createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,1,0,sq_GetDirection(obj),1,SKILL_SMBYKK_MYSTICEQUIP,1,totalDamage,sub,0,0,0,0,0,0); } } function onStart_appendage_smmysticequip_buff(appendage) { // } function ProcPassiveSkill_WeaponMaster_Swordman(obj, skill_index, skill_level) { switch(skill_index){ case SKILL_SMBYKK_BLADEMASTERY: if(skill_level > 0){ local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/swordman/1weaponmaster_bykk/passiveskill_ap/ap_smblademastery.nut", true); } break; case SKILL_SMBYKK_EQUIPLIGHTSWORD: if(skill_level > 0){ local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/swordman/1weaponmaster_bykk/passiveskill_ap/ap_smequiplightsword.nut", true); } break; // case SKILL_SMBYKK_MYSTICEQUIP: // if(skill_level > 0){ // local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/swordman/1weaponmaster_bykk/passiveskill_ap/ap_smmysticequip.nut", true); // } // break; case SKILL_SMBYKK_FASTEQUIP: if(skill_level > 0){ local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/swordman/1weaponmaster_bykk/passiveskill_ap/ap_smfastequip.nut", true); } break; } } function setWeaponMasterBuff_bykk(obj) { local apdPath = "character/swordman/1weaponmaster_bykk/ap_smoverdrive.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath); local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, false); local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_OVERDRIVE); local bufftmime = sq_GetLevelData(obj, SKILL_SMBYKK_OVERDRIVE, 0, skillLevel); if(bufftmime > 0) appendage.sq_SetValidTime(bufftmime); appendage.setEnableIsBuff(true); appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_SMBYKK_OVERDRIVE, skillLevel); CNSquirrelAppendage.sq_Append(appendage, obj, obj, true); // appendage.setBuffIconImage(7); setSkillBonusBate_Swordman_1WeaponMaster_bykk(obj); } function onStartDungeon_Swordman_1Swordmaster(obj) { local weaponSubType = obj.getWeaponSubType(); obj.getVar("weaponSubTypeSave").setInt(0, weaponSubType); setSkillBonusBate_Swordman_1WeaponMaster_bykk(obj); } function onStartMap_1Swordmaster_bykk(obj) { local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF); if(addAppendage && addAppendage.isValid() && addAppendage.getVar().getBool(0) == false){ local mainAtkObj = obj.getVar("handlingsword_mainAtkObj").get_obj_vector(0); if(mainAtkObj){ local colObj = sq_GetCNRDObjectToCollisionObject(mainAtkObj); local swordCount = colObj.getVar("custom").getInt(1); if(swordCount < 5) colObj.getVar("custom").setInt(1, 5); colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); } } } function procAppend_Swordman_1WeaponMaster(obj) { local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF); if(addAppendage && addAppendage.isValid() && addAppendage.getVar().getBool(0) == false){ obj.setSkillCommandEnable(SKILL_SMBYKK_HANDLINGSWORD, true); if(obj.sq_IsEnterSkill(SKILL_SMBYKK_HANDLINGSWORD) != -1){ if(!sq_GetSkill(obj, SKILL_SMBYKK_HANDLINGSWORD).isInCoolTime()){ if(addAppendage.getVar().getBool(1)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_SMBYKK_HANDLINGSWORD, STATE_PRIORITY_IGNORE_FORCE, true); return; } obj.startSkillCoolTime(SKILL_SMBYKK_HANDLINGSWORD, sq_GetSkillLevel(obj, SKILL_SMBYKK_HANDLINGSWORD), -1); } addAppendage.getVar().setBool(0, true); createEndHandlingSword_bykk(obj); } } } function setSkillBonusBate_Swordman_1WeaponMaster_bykk(obj) { local bonusRate = 1000; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/swordman/1weaponmaster_bykk/ap_smoverdrive.nut")) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_OVERDRIVE, 4, sq_GetSkillLevel(obj, SKILL_SMBYKK_OVERDRIVE))) / 1000; print("bonusRate1 = "+bonusRate); if(sq_GetSkillLevel(obj, 91) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, 91, 1, sq_GetSkillLevel(obj, 91))) / 1000; print("bonusRate2 = "+bonusRate); if(sq_GetSkillLevel(obj, SKILL_SMBYKK_FARTHERHIT) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FARTHERHIT, 0, sq_GetSkillLevel(obj, SKILL_SMBYKK_FARTHERHIT))) / 1000; print("bonusRate3 = "+bonusRate); if(sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 0, sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD))) / 1000; print("bonusRate4 = "+bonusRate); obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); //sq_SetSkillAttackBonus(obj, bonusRate); } //剑魂结束 SKILL_BYKK_FORCEOFTHUNDERER <- 251 function setforceholdAppendage_bykk(passiveobj, damager, bounding_box, is_stuck) { if(!passiveobj) return; local ID = passiveobj.getPassiveObjectIndex(); print("ID = "+ID); switch(ID){ case 20101: local sqrChr = sq_GetCNRDObjectToSQRCharacter(passiveobj.getTopCharacter()); if(sqrChr){ local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_BYKK_FORCEOFTHUNDERER); if(skillLevel > 0){ if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, "appendage/character/ap_common_hold.nut")){ local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, passiveobj, -1, false, "appendage/character/ap_common_hold.nut", true); sq_HoldAndDelayDie(damager, passiveobj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); } } } break; case 20108: case 24357: local sqrChr = sq_GetCNRDObjectToSQRCharacter(passiveobj.getTopCharacter()); if(sqrChr){ local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_BYKK_FORCEOFTHUNDERER); if(skillLevel > 0){ if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, "appendage/character/ap_common_hold2.nut")){ local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, passiveobj, -1, false, "appendage/character/ap_common_hold2.nut", true); sq_HoldAndDelayDie(damager, passiveobj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); } } } break; case 20132: case 21192: if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, "appendage/character/ap_common_hold2.nut")){ CNSquirrelAppendage.sq_RemoveAppendage(damager, "appendage/character/ap_common_hold2.nut"); } break; } } function proc_appendage_common_hold(appendage) { if(!appendage) return; local sourceObj = appendage.getSource(); if(!sourceObj){ appendage.setValid(false); return; } } function proc_appendage_common_hold2(appendage) { if(!appendage) return; } //////剑影 //无式·极影剑 function checkExecutableSkill_UnlimitedSpeedSlashBvs(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(231); if (isUse){ obj.sq_IntVectClear(); local state = obj.getState(); 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); return true; } return false; } function checkCommandEnable_UnlimitedSpeedSlashBvs(obj) { if (!obj) return false; return false; } function onSetState_UnlimitedSpeedSlashBvs(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(345); obj.sq_PlaySound("R_SM_UNLIMITEDSPEEDSLASH_BS"); break; case 1://剑术系列 obj.sq_SetCurrentAnimation(346); obj.sq_PlaySound("R_SM_UNLIMITEDSPEEDSLASH_BS"); break; case 2://幻鬼系列 obj.sq_SetCurrentAnimation(344); obj.sq_PlaySound("R_SM_UNLIMITEDSPEEDSLASH_BS"); local totalDamage = obj.sq_GetBonusRateWithPassive(231, -1, 4, 1.0); local totalDamageFinish = obj.sq_GetBonusRateWithPassive(231, -1, 5, 1.0); local VSObject = getVSObject(obj); if(VSObject){ createSkillPassive_Swordman_bykk(obj,VSObject,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),5,231,4,totalDamage,totalDamageFinish,0,0,0,0,0,0); local colObj = sq_GetCNRDObjectToCollisionObject(VSObject); if(colObj.getVar("set").getInt(0) > 0) colObj.setTimeEvent(10, 1000, 1, true); else sq_SendDestroyPacketPassiveObject(VSObject); } else createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,-1,0,sq_GetDirection(obj),5,231,4,totalDamage,totalDamageFinish,0,0,0,0,0,0); break; case 3: obj.sq_SetCurrentAnimation(347); break; } } function onEndCurrentAni_UnlimitedSpeedSlashBvs(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(231, STATE_PRIORITY_AUTO, true); break; case 1: case 2: case 3: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onKeyFrameFlag_UnlimitedSpeedSlashBvs(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 106://`slash1` 58 0 16 local totalDamage = obj.sq_GetBonusRateWithPassive(231, -1, 0, 1.0); createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),5,231,1,totalDamage,1,0,0,0,0,0,0); local totalDamage = obj.sq_GetBonusRateWithPassive(231, -1, 1, 1.0); local VSObject = getVSObject(obj); if(VSObject){ createSkillPassive_Swordman_bykk(obj,VSObject,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),5,231,2,totalDamage,1,0,0,0,0,0,0); local colObj = sq_GetCNRDObjectToCollisionObject(VSObject); if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) obj.getVar("UnlimitedSpeedSlashBvsSet").setInt(0, sq_GetXPos(colObj) - sq_GetXPos(obj)); else obj.getVar("UnlimitedSpeedSlashBvsSet").setInt(0, sq_GetXPos(obj) - sq_GetXPos(colObj)); obj.getVar("UnlimitedSpeedSlashBvsSet").setInt(1, sq_GetYPos(colObj) - sq_GetYPos(obj)); if(colObj.getVar("set").getInt(0) > 0) colObj.setTimeEvent(10, 1000, 1, true); else sq_SendDestroyPacketPassiveObject(VSObject); } else{ obj.getVar("UnlimitedSpeedSlashBvsSet").setInt(0, 0); obj.getVar("UnlimitedSpeedSlashBvsSet").setInt(1, -1); createSkillPassive_Swordman_bykk(obj,VSObject,PASSIVEOBJ_BYKK_SWORDMAN,0,-1,0,sq_GetDirection(obj),5,231,2,totalDamage,1,0,0,0,0,0,0); } break; case 110://`slash2` 64 0 49 local totalDamage = obj.sq_GetBonusRateWithPassive(231, -1, 0, 1.0); createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),5,231,1,totalDamage,2,0,0,0,0,0,0); break; case 114://`slash3` 100 0 24 local totalDamage = obj.sq_GetBonusRateWithPassive(231, -1, 0, 1.0); createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),5,231,1,totalDamage,3,0,0,0,0,0,0); break; case 118://`slash4` 66 0 88 local totalDamage = obj.sq_GetBonusRateWithPassive(231, -1, 0, 1.0); createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),5,231,1,totalDamage,4,0,0,0,0,0,0); break; case 121://`slash5` 62 0 13 local totalDamage = obj.sq_GetBonusRateWithPassive(231, -1, 0, 1.0); createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),5,231,1,totalDamage,5,0,0,0,0,0,0); break; case 201://`start move` local speed = 2000.0; if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); else sq_SetVelocity(obj, 0, -speed); break; case 202: sq_SetMyShake(obj, 10, 80); break; case 203: sq_flashScreen(obj,0,0,360,178, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 204: sq_SetVelocity(obj, 0, 0.0); local totalDamage = obj.sq_GetBonusRateWithPassive(231, -1, 2, 1.0) + obj.sq_GetBonusRateWithPassive(231, -1, 3, 1.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 191)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 304: break; case 306: local totalDamage = obj.sq_GetBonusRateWithPassive(231, -1, 2, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 191)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sq_flashScreen(obj,0,0,360,178, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 12, 240); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/ultimatespeedslashbvs/ultimatespeedslashfinishbs_29.ani", 280, 0, 55); local totalDamage = obj.sq_GetBonusRateWithPassive(231, -1, 3, 1.0); createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,obj.getVar("UnlimitedSpeedSlashBvsSet").getInt(0),obj.getVar("UnlimitedSpeedSlashBvsSet").getInt(1),0,sq_GetDirection(obj),5,231,3,totalDamage,0,0,0,0,0,0,0); break; } return true; } function onEndState_UnlimitedSpeedSlashBvs(obj, new_state) { if(!obj) return; }