/////////////////////忍者///////////////////////////////////////////////////////////// //忍术精通 function onSetState_Ninjutsu(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_THBYKK_NINJUTSUBODY1); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "ninjutsubody1"); obj.getVar("NinjutsuBool").setBool(0, false); local skillIndex = obj.sq_GetVectorData(datas, 1); local stateIndex = obj.sq_GetVectorData(datas, 2); obj.getVar("NinjutsuSet").setInt(0, skillIndex); obj.getVar("NinjutsuSet").setInt(1, stateIndex); obj.getVar("NinjutsuSet").setInt(2, 0); obj.sq_IsEnterSkillLastKeyUnits(skillIndex); obj.sq_PlaySound("NINJUTSU"); break; case 1: obj.sq_SetCurrentAnimation(ANI_THBYKK_NINJUTSUBODY2); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "ninjutsubody2"); break; case 2: obj.sq_SetCurrentAnimation(ANI_THBYKK_NINJUTSUBODY3); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "ninjutsubody3"); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); if(subState == 0){ local speed = 8000 / currentAni.getDelaySum(0, 0); local delay = sq_GetIntData(obj, SKILL_THBYKK_NINJUTSU, 0); if(sq_GetSkillLevel(obj, SKILL_THBYKK_CHAKRATRINITY) > 0) delay = delay * (100 - sq_GetIntData(obj, SKILL_THBYKK_CHAKRATRINITY, 0)) / 100; delay = delay * 100 / speed; local speedRate = 72000 / (delay * 6 + 200); obj.getVar("NinjutsuSet").setInt(3, speedRate); obj.getVar("kunoichiSpeedRateSave").setInt(0, speedRate); currentAni.setSpeedRate(speedRate.tofloat()); obj.setTimeEvent(1, delay, 6, false); } else currentAni.setSpeedRate(obj.getVar("NinjutsuSet").getInt(3).tofloat()); } function onEndCurrentAni_Ninjutsu(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_THBYKK_NINJUTSU, STATE_PRIORITY_AUTO, true); break; case 2: local skillIndex = obj.getVar("NinjutsuSet").getInt(0); local stateIndex = obj.getVar("NinjutsuSet").getInt(1); local ninjutsuPhase = obj.getVar("NinjutsuSet").getInt(2); setSkillState_Kunoichi_bykk(obj, skillIndex, stateIndex, ninjutsuPhase); break; } } function onProcCon_Ninjutsu(obj) { if(!obj) return; if(obj.getVar("canbreak").getBool(0)) return; if(obj.getVar("NinjutsuBool").getBool(0) == false){ if(!obj.isDownSkillLastKey()){ obj.getVar("NinjutsuBool").setBool(0, true); local skillIndex = obj.getVar("NinjutsuSet").getInt(0); local stateIndex = obj.getVar("NinjutsuSet").getInt(1); local ninjutsuPhase = obj.getVar("NinjutsuSet").getInt(2); setSkillState_Kunoichi_bykk(obj, skillIndex, stateIndex, ninjutsuPhase); } } } function onKeyFrameFlag_Ninjutsu(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_Ninjutsu(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: // print("timeEventCount = "+timeEventCount); obj.getVar("NinjutsuSet").setInt(2, timeEventCount); local aniPath = ["", "character/thief/effect/animation/3kunoichi_bykk/ninjutsu/type/step1type_01.ani", "character/thief/effect/animation/3kunoichi_bykk/ninjutsu/type/step2type_01.ani", "character/thief/effect/animation/3kunoichi_bykk/ninjutsu/type/step3type_01.ani", "character/thief/effect/animation/3kunoichi_bykk/ninjutsu/type/step4type_01.ani", "character/thief/effect/animation/3kunoichi_bykk/ninjutsu/type/step5type_01.ani", "character/thief/effect/animation/3kunoichi_bykk/ninjutsu/type/step6type_01.ani"]; local offSet = [[],[-40, 0, 80],[-70, 0, 120],[-40, 0, 160],[40, 0, 160],[70, 0, 120],[40, 0, 80]]; createOnlyDrawObject_Theif_bykk(obj,aniPath[timeEventCount],true,ENUM_DIRECTION_RIGHT,sq_GetDistancePos(sq_GetXPos(obj), ENUM_DIRECTION_RIGHT, offSet[timeEventCount][0]),sq_GetYPos(obj) - 1,offSet[timeEventCount][2],ENUM_DRAWLAYER_NORMAL); obj.sq_PlaySound("NINJUTSU_CAST"); break; } } function onEndState_Ninjutsu(obj, new_state) { if(!obj) return; if(new_state == 1 || new_state == 2 || new_state == 3 || new_state == 4 || new_state == 5 || new_state == 9 || new_state == 6 || new_state == 7) return; if(obj.getVar("createLeaveTraceObj").getBool(0)){ obj.getVar("createLeaveTraceObj").setBool(0, false); obj.getVar("canbreak").setBool(0, false); local skillIndex = obj.getVar("NinjutsuSet").getInt(0); local stateIndex = obj.getVar("NinjutsuSet").getInt(1); createLeaveTraceObj(obj, skillIndex, stateIndex, 0, 0, 6); } } function setSkillState_Kunoichi_bykk(obj, skillIndex, stateIndex, ninjutsuPhase) { // print("skillIndex = " + skillIndex); // print("stateIndex = " + stateIndex); // print("ninjutsuPhase = " + ninjutsuPhase); local aniPath = ["", "character/thief/effect/animation/3kunoichi_bykk/ninjutsu/suck/step1suck_01.ani", "character/thief/effect/animation/3kunoichi_bykk/ninjutsu/suck/step2suck_01.ani", "character/thief/effect/animation/3kunoichi_bykk/ninjutsu/suck/step3suck_01.ani", "character/thief/effect/animation/3kunoichi_bykk/ninjutsu/suck/step4suck_01.ani", "character/thief/effect/animation/3kunoichi_bykk/ninjutsu/suck/step5suck_01.ani", "character/thief/effect/animation/3kunoichi_bykk/ninjutsu/suck/step06suck_01.ani"]; if(ninjutsuPhase > 0) createOnlyDrawObject_Theif_bykk(obj,aniPath[ninjutsuPhase],true,ENUM_DIRECTION_RIGHT,sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL); switch(skillIndex){ case SKILL_THBYKK_FLAMEBALL: case SKILL_THBYKK_BIGKUNAI: case SKILL_THBYKK_FLAMETORNADO: case SKILL_THBYKK_GASOLINEFIRE: case SKILL_THBYKK_ILUSIONSHURIKEN: case SKILL_THBYKK_SKYROADS: case SKILL_THBYKK_FLAMEFLOWER: case SKILL_THBYKK_FUUMASHURIKEN: case SKILL_THBYKK_YAMATAOROCHI: case SKILL_THBYKK_AMATERAS: case SKILL_THBYKK_FUUMASHURIKEN: obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_IntVectPush(ninjutsuPhase); obj.sq_AddSetStatePacket(stateIndex, STATE_PRIORITY_IGNORE_FORCE, true); break; } } //火遁·豪火球之術 function checkExecutableSkill_FlameBall(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_FLAMEBALL); if (isUse){ if(obj.getVar("canSaveDeitiesreBirth").getBool(0)){ // print("testt"); local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ local countSkillSave = obj.getVar("DeitiesreBirthSkillSave").getInt(SKILL_THBYKK_FLAMEBALL); if(countSkillSave < 3){ obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_FLAMEBALL, countSkillSave + 1); loadSlot.decreaseLoadCount(1); deitiesreBirthDamageSave(obj, SKILL_THBYKK_FLAMEBALL); } } } obj.sq_IntVectClear(); if(obj.getState() == 6) obj.sq_IntVectPush(10); else{ if(sq_GetSkillLevel(obj, SKILL_THBYKK_NINJUTSU) > 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_IntVectPush(SKILL_THBYKK_FLAMEBALL); obj.sq_IntVectPush(STATE_THBYKK_FLAMEBALL); obj.sq_AddSetStatePacket(STATE_THBYKK_NINJUTSU, STATE_PRIORITY_IGNORE_FORCE, true); return true; } else obj.sq_IntVectPush(0); } obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_THBYKK_FLAMEBALL, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_FlameBall(obj) { if (!obj) return false; return true; } function onSetState_FlameBall(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_THBYKK_FLAMEBALLSTART); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/flameball/mouthpieceflameball.ani"), 0, 0); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "flameballstart"); // obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/flameball/start/start_flameball_normal.ani"), 0, -70); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); local speedRate = 6000 / currentAni.getDelaySum(0, 0); local ninjutsuPhase = obj.sq_GetVectorData(datas, 1); obj.getVar("FlameBallSet").setInt(0, ninjutsuPhase); obj.getVar("FlameBallSet").setInt(1, speedRate); obj.getVar("kunoichiSpeedRateSave").setInt(0, speedRate); obj.getVar("FlameBall").clear_obj_vector(); local lifeTime = sq_GetIntData(obj, SKILL_THBYKK_FLAMEBALL, 2) * 100 / speedRate; local hitTime = sq_GetIntData(obj, SKILL_THBYKK_FLAMEBALL, 0) * 100 / speedRate; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEBALL, -1, 0, 1.0); local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEBALL, -1, 1, 1.0); // print("totalDamage1&2 :"+totalDamage+",,"+totalDamage_exp); local sizeRate = sq_GetIntData(obj, SKILL_THBYKK_FLAMEBALL, 9); if(ninjutsuPhase > 1) sizeRate = sq_GetIntData(obj, SKILL_THBYKK_FLAMEBALL, 8 + ninjutsuPhase); local isBlue = 0; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,sq_GetDirection(obj),3,SKILL_THBYKK_FLAMEBALL,1,totalDamage,totalDamage_exp,hitTime,lifeTime,sizeRate,speedRate,isBlue,0); obj.sq_PlaySound("R_TF_FLAMEBALL"); break; case 1: obj.sq_SetCurrentAnimation(ANI_THBYKK_FLAMEBALLLOOP); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/flameball/loop/loop_flameball_body.ani"), 0, 0); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "flameballloop"); local currentAni = obj.getCurrentAnimation(); local speedRate = obj.getVar("FlameBallSet").getInt(1); currentAni.setSpeedRate(speedRate.tofloat()); local lifeTime = sq_GetIntData(obj, SKILL_THBYKK_FLAMEBALL, 2) * 100 / speedRate; obj.setTimeEvent(1, lifeTime, 1, false); break; case 2: obj.sq_SetCurrentAnimation(ANI_THBYKK_FLAMEBALLEND); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/flameball/end/end_flameball_body.ani"), 0, 0); obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/flameball/end/end_flameball_dodge.ani"), 0, 0); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "flameballend"); local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(obj.getVar("FlameBallSet").getInt(1).tofloat()); break; case 10: obj.sq_SetCurrentAnimation(ANI_THBYKK_FLAMEBALLENDILLUSION); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/flameball/end/end_flameball_body.ani"), 0, 0); obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/flameball/end/end_flameball_dodge.ani"), 0, 0); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "flameballendillusion"); obj.getVar("FlameBallSet").setInt(0, 0); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEBALL, -1, 1, 1.0); local isBlue = 0; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,50,0,75,sq_GetDirection(obj),3,SKILL_THBYKK_FLAMEBALL,2,totalDamage,isBlue,0,0,0,0,0,0); obj.sq_PlaySound("R_TF_FLAMEBALL"); break; } } function onEndCurrentAni_FlameBall(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_THBYKK_FLAMEBALL, STATE_PRIORITY_AUTO, true); break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; case 10: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(1); obj.sq_IntVectPush(sq_GetZPos(obj) / 4); obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_FlameBall(obj) { if(!obj) return; } function onKeyFrameFlag_FlameBall(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_FlameBall(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(STATE_THBYKK_FLAMEBALL, STATE_PRIORITY_AUTO, true); break; } } function onEndState_FlameBall(obj, new_state) { if(!obj) return; if(new_state == 1 || new_state == 2 || new_state == 3 || new_state == 4 || new_state == 5 || new_state == 9){ local aObj = obj.getVar("FlameBall").get_obj_vector(0); if(aObj){ local colObj = sq_GetCNRDObjectToCollisionObject(aObj); colObj.setTimeEvent(3, 1000, 1, false); } } if(obj.getVar("createLeaveTraceObj").getBool(0)){ obj.getVar("createLeaveTraceObj").setBool(0, false); local subState = obj.getSkillSubState(); local startFrameIndex = sq_GetCurrentFrameIndex(obj); local ninjutsuPhase = obj.getVar("FlameBallSet").getInt(0); createLeaveTraceObj(obj, SKILL_THBYKK_FLAMEBALL, STATE_THBYKK_FLAMEBALL, subState, startFrameIndex, ninjutsuPhase); } } //火遁·螺旋手裡劍 function checkExecutableSkill_BigKunai(obj) { if (!obj) return false; if(obj.getVar("bigkunaiMoveBool").getBool(0) && obj.getVar("bigkunaiMoveBool").getBool(1) && obj.getState() != STATE_THBYKK_BIGKUNAI){ obj.getVar("bigkunaiMoveBool").setBool(1, false); obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(STATE_THBYKK_BIGKUNAI, STATE_PRIORITY_IGNORE_FORCE, true); return false; } local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_BIGKUNAI); if (isUse){ if(obj.getVar("canSaveDeitiesreBirth").getBool(0)){ // print("testt"); local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ local countSkillSave = obj.getVar("DeitiesreBirthSkillSave").getInt(SKILL_THBYKK_BIGKUNAI); if(countSkillSave < 3){ obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_BIGKUNAI, countSkillSave + 1); loadSlot.decreaseLoadCount(1); deitiesreBirthDamageSave(obj, SKILL_THBYKK_BIGKUNAI); } } } obj.sq_IntVectClear(); if(obj.getState() == 6) obj.sq_IntVectPush(1); else{ if(sq_GetSkillLevel(obj, SKILL_THBYKK_NINJUTSU) > 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_IntVectPush(SKILL_THBYKK_BIGKUNAI); obj.sq_IntVectPush(STATE_THBYKK_BIGKUNAI); obj.sq_AddSetStatePacket(STATE_THBYKK_NINJUTSU, STATE_PRIORITY_IGNORE_FORCE, true); return true; } else obj.sq_IntVectPush(0); } obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_THBYKK_BIGKUNAI, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_BigKunai(obj) { if (!obj) return false; return true; } function onSetState_BigKunai(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_THBYKK_BIGKUNAI); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "bigkunai"); local ninjutsuPhase = obj.sq_GetVectorData(datas, 1); obj.getVar("BigKunaiSet").setInt(0, ninjutsuPhase); obj.sq_PlaySound("R_TF_NSKUNAI"); break; case 1: obj.sq_ZStop(); obj.sq_SetCurrentAnimation(ANI_THBYKK_BIGKUNAIJUMP); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "bigkunaijump"); obj.getVar("BigKunaiSet").setInt(0, 0); obj.sq_PlaySound("R_TF_NSKUNAI"); break; case 2: obj.sq_SetCurrentAnimation(ANI_THBYKK_BIGKUNAIRAPIDMOVE); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "bigkunairapidmove"); local offSetX = obj.getVar("bigkunaiMove").getInt(0); local offSetY = obj.getVar("bigkunaiMove").getInt(1); sq_setCurrentAxisPos(obj, 0, offSetX); sq_setCurrentAxisPos(obj, 1, offSetY); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(subState == 0){ local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 0); obj.getVar("kunoichiSpeedRateSave").setInt(0, speedRate); } } function onEndCurrentAni_BigKunai(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 2: if(subState == 2) obj.getVar("bigkunaiMoveBool").setBool(0, false); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; case 1: 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 onProcCon_BigKunai(obj) { if(!obj) return; } function onKeyFrameFlag_BigKunai(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: local subState = obj.getSkillSubState(); local bonusRate = 1.0; if(subState == 1) bonusRate = sq_GetIntData(obj, SKILL_THBYKK_BIGKUNAI, 9).tofloat() / 100.0; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_BIGKUNAI, -1, 0, bonusRate); local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_BIGKUNAI, -1, 1, bonusRate); local ninjutsuPhase = obj.getVar("BigKunaiSet").getInt(0); local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_BIGKUNAI); local hitTime = sq_GetLevelData(obj, SKILL_THBYKK_BIGKUNAI, 2, skillLevel); local lifeTime = sq_GetLevelData(obj, SKILL_THBYKK_BIGKUNAI, 3, skillLevel); local sizeRate = sq_GetLevelData(obj, SKILL_THBYKK_BIGKUNAI, 4, skillLevel); local addSizeRate = sq_GetLevelData(obj, SKILL_THBYKK_BIGKUNAI, 5, skillLevel); sizeRate = sizeRate + addSizeRate * ninjutsuPhase; local offSet = [[75,0,50],[75,0,0]]; local isBlue = 0, moveBool = 0; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; if(sq_GetSkillLevel(obj, SKILL_THBYKK_CHAKRATRINITY) > 0) moveBool = 1; createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,offSet[subState][0],offSet[subState][1],offSet[subState][2],sq_GetDirection(obj),3,SKILL_THBYKK_BIGKUNAI,1 + subState,totalDamage,totalDamage_exp,hitTime,lifeTime,sizeRate,isBlue,moveBool,0); break; } return true; } function onTimeEvent_BigKunai(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_BigKunai(obj, new_state) { if(!obj) return; if(obj.getVar("createLeaveTraceObj").getBool(0)){ obj.getVar("createLeaveTraceObj").setBool(0, false); local subState = obj.getSkillSubState(); local startFrameIndex = sq_GetCurrentFrameIndex(obj); local ninjutsuPhase = obj.getVar("BigKunaiSet").getInt(0); createLeaveTraceObj(obj, SKILL_THBYKK_BIGKUNAI, STATE_THBYKK_BIGKUNAI, subState, startFrameIndex, ninjutsuPhase); } if(new_state != STATE_THBYKK_BIGKUNAI){ if(obj.getSkillSubState() == 2) sq_SimpleMoveToNearMovablePos(obj,200); } } //忍法:幻影手裡劍 function checkExecutableSkill_IlusionShuriken(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_ILUSIONSHURIKEN); if (isUse){ if(obj.getVar("canSaveDeitiesreBirth").getBool(0)){ // print("testt"); local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ local countSkillSave = obj.getVar("DeitiesreBirthSkillSave").getInt(SKILL_THBYKK_ILUSIONSHURIKEN); if(countSkillSave < 3){ obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_ILUSIONSHURIKEN, countSkillSave + 1); loadSlot.decreaseLoadCount(1); deitiesreBirthDamageSave(obj, SKILL_THBYKK_ILUSIONSHURIKEN); } } } obj.sq_IntVectClear(); if(obj.getState() == 6) obj.sq_IntVectPush(10); else{ if(sq_GetSkillLevel(obj, SKILL_THBYKK_NINJUTSU) > 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_IntVectPush(SKILL_THBYKK_ILUSIONSHURIKEN); obj.sq_IntVectPush(STATE_THBYKK_ILUSIONSHURIKEN); obj.sq_AddSetStatePacket(STATE_THBYKK_NINJUTSU, STATE_PRIORITY_IGNORE_FORCE, true); return true; } else obj.sq_IntVectPush(0); } obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_THBYKK_ILUSIONSHURIKEN, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_IlusionShuriken(obj) { if (!obj) return false; return true; } function onSetState_IlusionShuriken(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); if(subState >= 10) obj.sq_ZStop(); switch(subState){ case 0: obj.sq_SetCurrentAnimation(ANI_THBYKK_ILLUSIONSHURIKENGROUNDSTART); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "illusionshurikengroundstart"); break; case 1: obj.sq_SetCurrentAnimation(ANI_THBYKK_ILLUSIONSHURIKENGROUNDCREATE); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "illusionshurikengroundcreate"); break; case 2: obj.sq_SetCurrentAnimation(ANI_THBYKK_ILLUSIONSHURIKENGROUNDATTACK); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "illusionshurikengroundattack"); break; case 3: obj.sq_SetCurrentAnimation(ANI_THBYKK_ILLUSIONSHURIKENGROUNDATTACK2); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "illusionshurikengroundattack2"); break; case 4: obj.sq_SetCurrentAnimation(ANI_THBYKK_ILLUSIONSHURIKENGROUNDATTACK3); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "illusionshurikengroundattack3"); break; case 5: obj.sq_SetCurrentAnimation(ANI_THBYKK_ILLUSIONSHURIKENGROUNDEND); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "illusionshurikengroundend"); break; case 10: obj.sq_SetCurrentAnimation(ANI_THBYKK_ILLUSIONSHURIKENAIRSTART); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "illusionshurikenairstart"); break; case 11: obj.sq_SetCurrentAnimation(ANI_THBYKK_ILLUSIONSHURIKENAIRCREATE); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "illusionshurikenaircreate"); break; case 12: obj.sq_SetCurrentAnimation(ANI_THBYKK_ILLUSIONSHURIKENAIRATTACK); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "illusionshurikenairattack"); break; case 13: obj.sq_SetCurrentAnimation(ANI_THBYKK_ILLUSIONSHURIKENAIRATTACK2); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "illusionshurikenairattack2"); break; case 14: obj.sq_SetCurrentAnimation(ANI_THBYKK_ILLUSIONSHURIKENAIRATTACK3); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "illusionshurikenairattack3"); break; case 15: obj.sq_SetCurrentAnimation(ANI_THBYKK_ILLUSIONSHURIKENAIREND); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "illusionshurikenairend"); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(subState == 0 || subState == 10){ local ninjutsuPhase = obj.sq_GetVectorData(datas, 1); obj.getVar("IlusionShurikenSet").setInt(0, ninjutsuPhase); local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_ILUSIONSHURIKEN); local createMax = sq_GetLevelData(obj, SKILL_THBYKK_ILUSIONSHURIKEN, 3, skillLevel); local reboundCount = sq_GetLevelData(obj, SKILL_THBYKK_ILUSIONSHURIKEN, 4, skillLevel); obj.getVar("IlusionShurikenSet").setInt(1, createMax); obj.getVar("IlusionShurikenSet").setInt(2, 0); obj.getVar("IlusionShurikenSet").setInt(3, reboundCount); local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 0); obj.getVar("kunoichiSpeedRateSave").setInt(0, speedRate); } else if(subState == 1 || subState == 11){ obj.sq_PlaySound("R_TF_GHOSTKUNAI"); local ninjutsuPhase = obj.getVar("IlusionShurikenSet").getInt(0); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_ILUSIONSHURIKEN, -1, 0, 1.0); local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_ILUSIONSHURIKEN); local createMax = sq_GetLevelData(obj, SKILL_THBYKK_ILUSIONSHURIKEN, 3, skillLevel); local reboundCount = sq_GetLevelData(obj, SKILL_THBYKK_ILUSIONSHURIKEN, 4, skillLevel); local bonusRate = sq_GetLevelData(obj, SKILL_THBYKK_ILUSIONSHURIKEN, 6, skillLevel); local bonusRate2 = sq_GetLevelData(obj, SKILL_THBYKK_ILUSIONSHURIKEN, 7, skillLevel); local offSet = [[50,55],[120,-40],[-47,83],[17,-62]]; local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 0); local isBlue = 0; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; obj.getVar("IlusionShuriken").clear_obj_vector(); if(subState == 11){ offSet = [[20,-30],[-50,40]]; totalDamage = totalDamage * bonusRate / 100; for(local i = 0; i < 2; i++){ createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,offSet[i][0],offSet[i][1],0,sq_GetDirection(obj),3,SKILL_THBYKK_ILUSIONSHURIKEN,4,totalDamage,reboundCount,createMax,speedRate,isBlue,0,0,0); } return; } switch(ninjutsuPhase){ case 1: case 2: local create = sq_GetIntData(obj, SKILL_THBYKK_ILUSIONSHURIKEN, 5); totalDamage = totalDamage * bonusRate / 100; for(local i = 0; i < create; i++){ createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,offSet[i][0],offSet[i][1],0,sq_GetDirection(obj),3,SKILL_THBYKK_ILUSIONSHURIKEN,3,totalDamage,reboundCount,createMax,speedRate,isBlue,0,0,0); } break; case 3: case 4: local create = sq_GetIntData(obj, SKILL_THBYKK_ILUSIONSHURIKEN, 7); local totalDamage1 = totalDamage * bonusRate / 100; local totalDamage2 = totalDamage * bonusRate2 / 100; for(local i = 0; i < create; i++){ if(i < 2) createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,offSet[i][0],offSet[i][1],0,sq_GetDirection(obj),3,SKILL_THBYKK_ILUSIONSHURIKEN,3,totalDamage1,reboundCount,createMax,speedRate,isBlue,0,0,0); else createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,offSet[i][0],offSet[i][1],0,sq_GetDirection(obj),3,SKILL_THBYKK_ILUSIONSHURIKEN,3,totalDamage2,reboundCount,createMax,speedRate,isBlue,0,0,0); } break; case 5: case 6: local create = sq_GetIntData(obj, SKILL_THBYKK_ILUSIONSHURIKEN, 9); local totalDamage1 = totalDamage * bonusRate / 100; local totalDamage2 = totalDamage * bonusRate2 / 100; for(local i = 0; i < create; i++){ if(i < 2) createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,offSet[i][0],offSet[i][1],0,sq_GetDirection(obj),3,SKILL_THBYKK_ILUSIONSHURIKEN,3,totalDamage1,reboundCount,createMax,speedRate,isBlue,0,0,0); else createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,offSet[i][0],offSet[i][1],0,sq_GetDirection(obj),3,SKILL_THBYKK_ILUSIONSHURIKEN,3,totalDamage2,reboundCount,createMax,speedRate,isBlue,0,0,0); } break; } } } function onEndCurrentAni_IlusionShuriken(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: case 10: case 11: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(STATE_THBYKK_ILUSIONSHURIKEN, STATE_PRIORITY_AUTO, true); break; case 2: case 3: case 4: case 12: case 13: case 14: if(obj.getVar("IlusionShurikenSet").getInt(2) + 1 >= obj.getVar("IlusionShurikenSet").getInt(1)){ obj.sq_IntVectClear(); if(subState < 10) obj.sq_IntVectPush(5); else obj.sq_IntVectPush(15); obj.sq_AddSetStatePacket(STATE_THBYKK_ILUSIONSHURIKEN, STATE_PRIORITY_AUTO, true); } else{ obj.getVar("IlusionShurikenSet").setInt(2, obj.getVar("IlusionShurikenSet").getInt(2) + 1); obj.sq_IntVectClear(); if(subState == 4) obj.sq_IntVectPush(2); else if(subState == 14) obj.sq_IntVectPush(12); else obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(STATE_THBYKK_ILUSIONSHURIKEN, STATE_PRIORITY_AUTO, true); } break; case 5: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; case 15: 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 onProcCon_IlusionShuriken(obj) { if(!obj) return; } function onKeyFrameFlag_IlusionShuriken(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: case 2: case 3: local subState = obj.getSkillSubState(); if(subState < 2 || (subState > 9 && subState < 12)) break; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_ILUSIONSHURIKEN, -1, 0, 1.0); local reboundCount = obj.getVar("IlusionShurikenSet").getInt(3); local offSet = [[],[72,0,66],[78,0,68],[87,0,67]]; local isBlue = 0; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,offSet[flagIndex][0],offSet[flagIndex][1],offSet[flagIndex][2],sq_GetDirection(obj),3,SKILL_THBYKK_ILUSIONSHURIKEN,1,totalDamage,reboundCount,isBlue,0,0,0,0,0); obj.sq_PlaySound("R_GHOSTKUNAI_THROW"); break; case 11: case 12: case 13: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_ILUSIONSHURIKEN, -1, 0, 1.0); local reboundCount = obj.getVar("IlusionShurikenSet").getInt(3); local offSet = [[],[42,0,58],[36,0,61],[41,0,58]]; local isBlue = 0; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,offSet[flagIndex - 10][0],offSet[flagIndex - 10][1],offSet[flagIndex - 10][2],sq_GetDirection(obj),3,SKILL_THBYKK_ILUSIONSHURIKEN,2,totalDamage,reboundCount,isBlue,0,0,0,0,0); obj.sq_PlaySound("R_GHOSTKUNAI_THROW"); break; } return true; } function onTimeEvent_IlusionShuriken(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_IlusionShuriken(obj, new_state) { if(!obj) return; if(obj.getVar("createLeaveTraceObj").getBool(0)){ obj.getVar("createLeaveTraceObj").setBool(0, false); local subState = obj.getSkillSubState(); local startFrameIndex = sq_GetCurrentFrameIndex(obj); local ninjutsuPhase = obj.getVar("IlusionShurikenSet").getInt(0); // print("subState = "+subState); // print("startFrameIndex = "+startFrameIndex); // print("ninjutsuPhase = "+ninjutsuPhase); createLeaveTraceObj(obj, SKILL_THBYKK_ILUSIONSHURIKEN, STATE_THBYKK_ILUSIONSHURIKEN, subState, startFrameIndex, ninjutsuPhase); } if(new_state == 1 || new_state == 2 || new_state == 3 || new_state == 4 || new_state == 5 || new_state == 9){ local size = obj.getVar("IlusionShuriken").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local aObj = obj.getVar("IlusionShuriken").get_obj_vector(0); if(aObj){ local colObj = sq_GetCNRDObjectToCollisionObject(aObj); colObj.setTimeEvent(4, 1000, 1, true); } } } } } //忍法:原木分身術 function checkExecutableSkill_WoodMove(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_WOODMOVE); if (isUse){ obj.sq_IntVectClear(); if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(1); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_THBYKK_WOODMOVE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_WoodMove(obj) { if (!obj) return false; return true; } function onSetState_WoodMove(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); switch(subState){ case 0: case 1: if(subState == 0){ obj.sq_SetCurrentAnimation(ANI_THBYKK_WOODMOVE_START_GROUND_BODY); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "woodmove_start_ground_body"); } else{ obj.sq_SetCurrentAnimation(ANI_THBYKK_WOODMOVE_START_JUMP_BODY); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "woodmove_start_jump_body"); } obj.getVar("WoodMoveBool").setBool(0, true); obj.getVar("WoodMoveBool").setBool(1, true); obj.getVar("WoodMoveSet").setInt(0, 0); obj.getVar("WoodMoveSet").setInt(1, 0); sq_SendMessage(obj, 0, 1, 0); break; case 2: local sub = obj.sq_GetVectorData(datas, 1); switch(sub){ case 0: local offSet = sq_GetIntData(obj, SKILL_THBYKK_WOODMOVE, 0); if(obj.getVar("WoodMoveSet").getInt(0) == 1) offSet = -offSet; local offSetX = 0; for(local i = 0; i < 20; i++){ offSetX = sq_GetDistancePos(sq_GetXPos(obj), sq_GetDirection(obj), offSet); if(obj.isMovablePos(offSetX, sq_GetYPos(obj))) break; else offSet = offSet - offSet / 20; } if(offSet != 0) sq_setCurrentAxisPos(obj, 0, offSetX); if(obj.getVar("WoodMoveBool").getBool(1) == false){ local offSet = sq_GetIntData(obj, SKILL_THBYKK_WOODMOVE, 0) / 3; if(obj.getVar("WoodMoveSet").getInt(1) == 1) offSet = -offSet; for(local i = 0; i < 20; i++){ if(obj.isMovablePos(sq_GetXPos(obj), sq_GetYPos(obj) + offSet)) break; else offSet = offSet - offSet / 20; } if(offSet != 0) sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) + offSet); } break; case 1: if(obj.getVar("WoodMoveBool").getBool(0) == false){ local offSet = sq_GetIntData(obj, SKILL_THBYKK_WOODMOVE, 0); if(obj.getVar("WoodMoveSet").getInt(0) == 1) offSet = -offSet; local offSetX = 0; for(local i = 0; i < 20; i++){ offSetX = sq_GetDistancePos(sq_GetXPos(obj), sq_GetDirection(obj), offSet); if(obj.isMovablePos(offSetX, sq_GetYPos(obj))) break; else offSet = offSet - offSet / 20; } if(offSet != 0) sq_setCurrentAxisPos(obj, 0, offSetX); } if(obj.getVar("WoodMoveBool").getBool(1) == false){ local offSet = sq_GetIntData(obj, SKILL_THBYKK_WOODMOVE, 0) / 3; if(obj.getVar("WoodMoveSet").getInt(1) == 1) offSet = -offSet; for(local i = 0; i < 20; i++){ if(obj.isMovablePos(sq_GetXPos(obj), sq_GetYPos(obj) + offSet)) break; else offSet = offSet - offSet / 20; } if(offSet != 0) sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) + offSet); } break; } sq_setCurrentAxisPos(obj, 2, 0); local yPos = sq_GetYPos(obj); obj.sq_SetCurrentAnimation(ANI_THBYKK_WOODMOVE_FINISH_BODY); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "woodmove_finish_body"); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); break; } } function onEndCurrentAni_WoodMove(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_IntVectPush(subState); obj.sq_AddSetStatePacket(STATE_THBYKK_WOODMOVE, STATE_PRIORITY_AUTO, true); break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_WoodMove(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: if(obj.getVar("WoodMoveBool").getBool(0)){ local direction = sq_GetDirection(obj); if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ obj.getVar("WoodMoveBool").setBool(0, false); if(direction == ENUM_DIRECTION_RIGHT) obj.getVar("WoodMoveSet").setInt(0, 1); else obj.getVar("WoodMoveSet").setInt(0, 2); } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ obj.getVar("WoodMoveBool").setBool(0, false); if(direction == ENUM_DIRECTION_LEFT) obj.getVar("WoodMoveSet").setInt(0, 1); else obj.getVar("WoodMoveSet").setInt(0, 2); } } if(obj.getVar("WoodMoveBool").getBool(1)){ if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ obj.getVar("WoodMoveBool").setBool(1, false); obj.getVar("WoodMoveSet").setInt(1, 1); } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ obj.getVar("WoodMoveBool").setBool(1, false); obj.getVar("WoodMoveSet").setInt(1, 2); } } break; } } function onKeyFrameFlag_WoodMove(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_WoodMove(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_WoodMove(obj, new_state) { if(!obj) return; if(new_state != STATE_THBYKK_WOODMOVE){ sq_SendMessage(obj, 0, 0, 0); local range = sq_GetIntData(obj, SKILL_THBYKK_WOODMOVE, 0); sq_SimpleMoveToNearMovablePos(obj, range); } } //火遁·颶風煞 function checkExecutableSkill_FlameTornado(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_FLAMETORNADO); if (isUse){ if(obj.getVar("canSaveDeitiesreBirth").getBool(0)){ // print("testt"); local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ local countSkillSave = obj.getVar("DeitiesreBirthSkillSave").getInt(SKILL_THBYKK_FLAMETORNADO); if(countSkillSave < 3){ obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_FLAMETORNADO, countSkillSave + 1); loadSlot.decreaseLoadCount(1); deitiesreBirthDamageSave(obj, SKILL_THBYKK_FLAMETORNADO); } } } if(sq_GetSkillLevel(obj, SKILL_THBYKK_NINJUTSU) > 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_IntVectPush(SKILL_THBYKK_FLAMETORNADO); obj.sq_IntVectPush(STATE_THBYKK_FLAMETORNADO); obj.sq_AddSetStatePacket(STATE_THBYKK_NINJUTSU, STATE_PRIORITY_IGNORE_FORCE, true); } else{ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_THBYKK_FLAMETORNADO, STATE_PRIORITY_IGNORE_FORCE, true); } return true; } return false; } function checkCommandEnable_FlameTornado(obj) { if (!obj) return false; return true; } function onSetState_FlameTornado(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_THBYKK_FLAMETORNADO); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "flametornado"); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local ninjutsuPhase = obj.sq_GetVectorData(datas, 1); obj.getVar("FlameTornadoSet").setInt(0, ninjutsuPhase); obj.sq_PlaySound("R_TF_FLAMETORNADO"); local currentAni = obj.getCurrentAnimation(); local speedRate = 6000 / currentAni.getDelaySum(0, 0); obj.getVar("kunoichiSpeedRateSave").setInt(0, speedRate); break; } } function onEndCurrentAni_FlameTornado(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_FlameTornado(obj) { if(!obj) return; } function onKeyFrameFlag_FlameTornado(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: //90 1 0 local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMETORNADO, -1, 0, 1.0); local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMETORNADO, -1, 1, 1.0); local ninjutsuPhase = obj.getVar("FlameTornadoSet").getInt(0); local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_FLAMETORNADO); local hitTime = sq_GetLevelData(obj, SKILL_THBYKK_FLAMETORNADO, 3, skillLevel); local lifeTime = sq_GetLevelData(obj, SKILL_THBYKK_FLAMETORNADO, 2, skillLevel); local sizeRate = sq_GetLevelData(obj, SKILL_THBYKK_FLAMETORNADO, 6, skillLevel); local addSizeRate = sq_GetLevelData(obj, SKILL_THBYKK_FLAMETORNADO, 5, skillLevel); local addExpSizeRate = sq_GetLevelData(obj, SKILL_THBYKK_FLAMETORNADO, 7, skillLevel); sizeRate = sizeRate + addSizeRate * ninjutsuPhase; local range = sq_GetIntData(obj, SKILL_THBYKK_FLAMETORNADO, 2); local addRangeRate = sq_GetLevelData(obj, SKILL_THBYKK_FLAMETORNADO, 9, skillLevel); range = range * (100 + addRangeRate * ninjutsuPhase) / 100; local expSizeRate = sizeRate + addExpSizeRate * ninjutsuPhase; local isBlue = 0; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,90, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_FLAMETORNADO,1,totalDamage,totalDamage_exp,hitTime,lifeTime,sizeRate,range,expSizeRate,isBlue); break; } return true; } function onTimeEvent_FlameTornado(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_FlameTornado(obj, new_state) { if(!obj) return; if(obj.getVar("createLeaveTraceObj").getBool(0)){ obj.getVar("createLeaveTraceObj").setBool(0, false); local subState = obj.getSkillSubState(); local startFrameIndex = sq_GetCurrentFrameIndex(obj); local ninjutsuPhase = obj.getVar("FlameTornadoSet").getInt(0); // print("subState = "+subState); // print("startFrameIndex = "+startFrameIndex); // print("ninjutsuPhase = "+ninjutsuPhase); createLeaveTraceObj(obj, SKILL_THBYKK_FLAMETORNADO, STATE_THBYKK_FLAMETORNADO, subState, startFrameIndex, ninjutsuPhase); } } function proc_appendage_flametornado_suck(appendage) { if(!appendage) return; local parentObj = appendage.getParent(); if(!parentObj || parentObj.getState() == STATE_DIE){ appendage.setValid(false); return; } } //忍法:六道輪迴 function checkExecutableSkill_DeitiesreBirth(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_DEITIESREBIRTH); if (isUse){ obj.sq_IntVectClear(); local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); if(loadSlot && loadSlot.isCooling()) obj.sq_IntVectPush(1); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_THBYKK_DEITIESREBIRTH, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_DeitiesreBirth(obj) { if (!obj) return false; return true; } function onSetState_DeitiesreBirth(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_THBYKK_DEITIESREBIRTHCAST_04); break; case 1: obj.sq_SetCurrentAnimation(ANI_THBYKK_DEITIESREBIRTHSTART_BODY); break; } // obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_DeitiesreBirth(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_DeitiesreBirth(obj) { if(!obj) return; } function onKeyFrameFlag_DeitiesreBirth(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: obj.sq_PlaySound("R_TF_DEITIES_REBIRTH_CAST"); obj.sq_PlaySound("SIXROTATION_REC"); sq_flashScreen(obj,0,0,300,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); local saveMax = sq_GetIntData(obj, SKILL_THBYKK_DEITIESREBIRTH, 0); local coolTime = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_DEITIESREBIRTH, -1, 1, 1.0) + 100; obj.sq_AddSkillLoad(SKILL_THBYKK_DEITIESREBIRTH, 181, saveMax, coolTime); local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); if(loadSlot) loadSlot.setStartCool(); obj.getVar("DeitiesreBirthDamageSave").setInt(0, 0); obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_FLAMEBALL, 0); obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_FLAMETORNADO, 0); obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_ILUSIONSHURIKEN, 0); obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_BIGKUNAI, 0); obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_SKYROADS, 0); obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_GASOLINEFIRE, 0); obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_FLAMEFLOWER, 0); obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_FUUMASHURIKEN, 0); obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_YAMATAOROCHI, 0); obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_AMATERAS, 0); break; case 2: local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); if(loadSlot){ local loadNumber = loadSlot.getRemainLoadNumber(); createDeitiesreBirthAttackObj(obj, loadNumber); obj.getVar("canSaveDeitiesreBirth").setBool(0, false); obj.sq_RemoveSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); } obj.sq_PlaySound("R_TF_DEITIES_REBIRTH_FIN"); obj.sq_PlaySound("DEITIES_REBIRTH_START"); break; } return true; } function onTimeEvent_DeitiesreBirth(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_DeitiesreBirth(obj, new_state) { if(!obj) return; } function deitiesreBirthDamageSave(obj, skillIndex) { local totalDamage = 0; switch(skillIndex){ case SKILL_THBYKK_FLAMEBALL: local lifeTime = sq_GetIntData(obj, SKILL_THBYKK_FLAMEBALL, 2); local hitTime = sq_GetIntData(obj, SKILL_THBYKK_FLAMEBALL, 0); local count = lifeTime / hitTime + 1; totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEBALL, -1, 0, 1.0) * count; local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEBALL, -1, 1, 1.0); // print("Get1 : "+obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEBALL, -1, 0, 1.0)); // print("Get2 : "+obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEBALL, -1, 1, 1.0)); totalDamage = totalDamage + totalDamage_exp; break; case SKILL_THBYKK_FLAMETORNADO: local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_FLAMETORNADO); local hitTime = sq_GetLevelData(obj, SKILL_THBYKK_FLAMETORNADO, 3, skillLevel); local lifeTime = sq_GetLevelData(obj, SKILL_THBYKK_FLAMETORNADO, 2, skillLevel); local count = lifeTime / hitTime + 1; totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMETORNADO, -1, 0, 1.0) * count; local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMETORNADO, -1, 1, 1.0); totalDamage = totalDamage + totalDamage_exp; break; case SKILL_THBYKK_ILUSIONSHURIKEN: local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_ILUSIONSHURIKEN); local createMax = sq_GetLevelData(obj, SKILL_THBYKK_ILUSIONSHURIKEN, 3, skillLevel); totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_ILUSIONSHURIKEN, -1, 0, 1.0) * createMax * 5; break; case SKILL_THBYKK_BIGKUNAI: local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_BIGKUNAI); local hitTime = sq_GetLevelData(obj, SKILL_THBYKK_BIGKUNAI, 2, skillLevel); local lifeTime = sq_GetLevelData(obj, SKILL_THBYKK_BIGKUNAI, 3, skillLevel); local count = lifeTime / hitTime + 1; totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_BIGKUNAI, -1, 0, 1.0) * count; local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_BIGKUNAI, -1, 1, 1.0); totalDamage = totalDamage + totalDamage_exp; break; case SKILL_THBYKK_SKYROADS: totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SKYROADS, -1, 0, 1.0); totalDamage = totalDamage + obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SKYROADS, -1, 1, 1.0); totalDamage = totalDamage + obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SKYROADS, -1, 2, 1.0); totalDamage = totalDamage + obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SKYROADS, -1, 3, 1.0); break; case SKILL_THBYKK_GASOLINEFIRE: local totalDamage_shockwave = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 0, 1.0); local totalDamage_ball = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 1, 1.0); local totalDamage_ballexp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 2, 1.0); local totalDamage_disexp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 9, 1.0); totalDamage = totalDamage_shockwave + totalDamage_ball + totalDamage_ballexp + totalDamage_disexp; break; case SKILL_THBYKK_FLAMEFLOWER: local slashMax = sq_GetIntData(obj, SKILL_THBYKK_FLAMEFLOWER, 3); totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEFLOWER, -1, 0, 1.0) * slashMax; totalDamage = totalDamage + obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEFLOWER, -1, 5, 1.0); break; case SKILL_THBYKK_FUUMASHURIKEN: local hitMax = sq_GetIntData(obj, SKILL_THBYKK_FUUMASHURIKEN, 13); totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FUUMASHURIKEN, -1, 0, 1.0) * hitMax; local hitMax2 = sq_GetIntData(obj, SKILL_THBYKK_FUUMASHURIKEN, 20); totalDamage = totalDamage + obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FUUMASHURIKEN, -1, 1, 1.0) * hitMax2; local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FUUMASHURIKEN, -1, 2, 1.0); totalDamage = totalDamage + totalDamage_exp; break; case SKILL_THBYKK_YAMATAOROCHI: local isTalisman = 0; if(isTalisman > 0){ local totalDamage_loop = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_YAMATAOROCHI, -1, 1, 1.0); local lifeTime = sq_GetIntData(obj, SKILL_THBYKK_YAMATAOROCHI, 3); totalDamage = totalDamage_loop * (lifeTime / 100); } else{ totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_YAMATAOROCHI, -1, 0, 1.0); local totalDamage_loop = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_YAMATAOROCHI, -1, 1, 1.0); local hitMax = sq_GetIntData(obj, SKILL_THBYKK_YAMATAOROCHI, 1); totalDamage = totalDamage + totalDamage_loop * hitMax; local totalDamage_loop = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_YAMATAOROCHI, -1, 2, 1.0); local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_YAMATAOROCHI); local lifeTime = sq_GetLevelData(obj, SKILL_THBYKK_YAMATAOROCHI, 3, skillLevel); totalDamage = totalDamage + totalDamage_loop * (lifeTime / 600); } break; case SKILL_THBYKK_AMATERAS: totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_AMATERAS, -1, 0, 1.0); local totalDamage_laser = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_AMATERAS, -1, 1, 2.0); local laserMax = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_AMATERAS, -1, 2, 1.0) + 100; totalDamage = totalDamage + totalDamage_laser * laserMax; break; } if(totalDamage > 0) obj.getVar("DeitiesreBirthDamageSave").setInt(0, obj.getVar("DeitiesreBirthDamageSave").getInt(0) + totalDamage); // print("skillIndex = "+skillIndex+",,,saveDamage = "+totalDamage); // print("nowDamage = "+obj.getVar("DeitiesreBirthDamageSave").getInt(0)); } function createDeitiesreBirthAttackObj(obj, loadNumber) { if(obj.getVar("DeitiesreBirthDamageSave").getInt(0) > 0){ local totalDamage = obj.getVar("DeitiesreBirthDamageSave").getInt(0); // print("totalDamage = "+totalDamage); local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_DEITIESREBIRTH); local bonusRate = sq_GetLevelData(obj, SKILL_THBYKK_DEITIESREBIRTH, 0, skillLevel); totalDamage = totalDamage * bonusRate / 100; local sizeRate = 100 + 3 * (6 - loadNumber); local speedRate = 100; if(sq_GetSkillLevel(obj, SKILL_THBYKK_MIRROROFYATA) > 0) speedRate = speedRate + sq_GetLevelData(obj, SKILL_THBYKK_MIRROROFYATA, 4, sq_GetSkillLevel(obj, SKILL_THBYKK_MIRROROFYATA)); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 50, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_DEITIESREBIRTH,1,totalDamage,sizeRate,speedRate,0,0,0,0,0); } } //火遁·紅蓮 function checkExecutableSkill_FireHide(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_FIREHIDE); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_THBYKK_FIREHIDE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_FireHide(obj) { if (!obj) return false; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/thief/3_kunoichi_bykk/ap_firehide.nut")) return false; return true; } function onSetState_FireHide(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_THBYKK_FIREHIDE); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "firehide"); obj.sq_PlaySound("R_TF_FIREHIDE"); break; } } function onEndCurrentAni_FireHide(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/thief/3_kunoichi_bykk/ap_firehide.nut")) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/thief/3_kunoichi_bykk/ap_firehide.nut"); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, true, "character/thief/3_kunoichi_bykk/ap_firehide.nut", true); if(sq_GetSkillLevel(obj, SKILL_THBYKK_KURVEJADE) > 0){ local name = ["kurvejadeFireObj","kurvejadeDarkObj","kurvejadeLightObj"]; for(local i = 0; i < name.len(); i++){ local aObj = obj.getVar(name[i]).get_obj_vector(0); if(aObj){ local colObj = sq_GetCNRDObjectToCollisionObject(aObj); if(colObj.getVar("custom").getInt(1) != 1){ colObj.getVar("custom").setInt(1, 1); colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); } } } } else{ obj.getVar("firehide").clear_obj_vector(); for(local i = 0; i < 3; i++){ createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 0, 70,sq_GetDirection(obj),3,SKILL_THBYKK_FIREHIDE,1,i,0,0,0,0,0,0,0); } } obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_FireHide(obj) { if(!obj) return; } function onKeyFrameFlag_FireHide(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_FireHide(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_FireHide(obj, new_state) { if(!obj) return; } function onStart_appendage_firehide_buff(appendage) { local parentObj = appendage.getParent(); local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_FIREHIDE); appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_THBYKK_FIREHIDE, skillLevel); local buffTime = sq_GetLevelData(obj, SKILL_THBYKK_FIREHIDE, 0, skillLevel); appendage.setBuffIconImage(72); if(buffTime > 0) appendage.sq_SetValidTime(buffTime); local bonusRate = sq_GetLevelData(obj, SKILL_THBYKK_FIREHIDE, 2, skillLevel) / 10; obj.getVar("apGetSetbyKK").setInt(0, bonusRate); local equPhyDefense = sq_GetLevelData(obj, SKILL_THBYKK_FIREHIDE, 3, skillLevel); local equMagDefense = sq_GetLevelData(obj, SKILL_THBYKK_FIREHIDE, 4, skillLevel); if(sq_GetSkillLevel(obj, SKILL_THBYKK_KURVEJADE) > 0){ local add = sq_GetIntData(obj, SKILL_THBYKK_KURVEJADE, 22); equPhyDefense = equPhyDefense + add; equMagDefense = equMagDefense + add; } local change_appendage = appendage.sq_getChangeStatus("firehide_buff"); if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("firehide_buff",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, false, (equPhyDefense).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, false, (equMagDefense).tofloat()); } setSkillBonusRate_3Kunoichi_bykk(obj); print("setBuff"); } function onEnd_appendage_firehide_buff(appendage) { if(!appendage) return; // local parentObj = appendage.getParent(); // local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); // if(obj && obj.getState() != STATE_DIE){ // setSkillBonusRate_3Kunoichi_bykk(obj); // } } function proc_appendage_firehide_buff(appendage) { if(!appendage) return; local parentObj = appendage.getParent(); if(!parentObj || parentObj.getState() == STATE_DIE){ appendage.setValid(false); return; } } //火遁·蟾蜍油炎彈 function checkExecutableSkill_GasolineFire(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_GASOLINEFIRE); if (isUse){ if(obj.getVar("canSaveDeitiesreBirth").getBool(0)){ // print("testt"); local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ local countSkillSave = obj.getVar("DeitiesreBirthSkillSave").getInt(SKILL_THBYKK_GASOLINEFIRE); if(countSkillSave < 3){ obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_GASOLINEFIRE, countSkillSave + 1); loadSlot.decreaseLoadCount(1); deitiesreBirthDamageSave(obj, SKILL_THBYKK_GASOLINEFIRE); } } } obj.sq_IntVectClear(); if(obj.getState() == 6) obj.sq_IntVectPush(1); else{ if(sq_GetSkillLevel(obj, SKILL_THBYKK_NINJUTSU) > 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_IntVectPush(SKILL_THBYKK_GASOLINEFIRE); obj.sq_IntVectPush(STATE_THBYKK_GASOLINEFIRE); obj.sq_AddSetStatePacket(STATE_THBYKK_NINJUTSU, STATE_PRIORITY_IGNORE_FORCE, true); return true; } else obj.sq_IntVectPush(0); } obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_THBYKK_GASOLINEFIRE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_GasolineFire(obj) { if (!obj) return false; return true; } function onSetState_GasolineFire(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_THBYKK_GASOLINEFIRE); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "gasolinefire"); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local ninjutsuPhase = obj.sq_GetVectorData(datas, 1); obj.getVar("GasolineFireSet").setInt(0, ninjutsuPhase); obj.sq_PlaySound("R_TF_GASOLINEFIRE"); obj.sq_PlaySound("R_GASOLINEFIRE_CAST"); local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 0); obj.getVar("kunoichiSpeedRateSave").setInt(0, speedRate); break; case 1: obj.sq_ZStop(); obj.sq_SetCurrentAnimation(ANI_THBYKK_GASOLINEFIREJUMP); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "gasolinefirejump"); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.sq_PlaySound("R_TF_GASOLINEFIRE"); obj.sq_PlaySound("R_GASOLINEFIRE_CAST"); break; } } function onEndCurrentAni_GasolineFire(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; case 1: 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 onProcCon_GasolineFire(obj) { if(!obj) return; } function onKeyFrameFlag_GasolineFire(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 0); local ninjutsuPhase = obj.getVar("GasolineFireSet").getInt(0); local totalDamage_shockwave = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 0, 1.0); local totalDamage_ball = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 1, 1.0); local totalDamage_ballexp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 2, 1.0); local totalDamage_disexp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 9, 1.0); local sizeRate = sq_GetIntData(obj, SKILL_THBYKK_GASOLINEFIRE, 4); if(ninjutsuPhase > 1) sizeRate = sq_GetIntData(obj, SKILL_THBYKK_GASOLINEFIRE, 3 + ninjutsuPhase); local sockwaveSizeRate = sq_GetIntData(obj, SKILL_THBYKK_GASOLINEFIRE, 0); if(false){ totalDamage_ballexp = totalDamage_ballexp * 133 / 100; sizeRate = sizeRate * 130 / 100; createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, -275, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_GASOLINEFIRE,1,totalDamage_shockwave,totalDamage_ball,totalDamage_ballexp,totalDamage_disexp,sizeRate,sockwaveSizeRate,speedRate,150); } else createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_GASOLINEFIRE,1,totalDamage_shockwave,totalDamage_ball,totalDamage_ballexp,totalDamage_disexp,sizeRate,sockwaveSizeRate,speedRate,100); break; case 2: sq_flashScreen(obj,40,80,240,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 3, 160); break; case 3: local currentAni = obj.getCurrentAnimation(); local speedRate = 24000 / currentAni.getDelaySum(0, 0); local totalDamage_shockwave = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 0, 1.0); local totalDamage_ball = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 1, 1.0); local totalDamage_ballexp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 2, 1.0); local totalDamage_disexp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 9, 1.0); local sizeRate = 100; local sockwaveSizeRate = sq_GetIntData(obj, SKILL_THBYKK_GASOLINEFIRE, 2); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 1, -sq_GetZPos(obj),sq_GetDirection(obj),3,SKILL_THBYKK_GASOLINEFIRE,1,totalDamage_shockwave,totalDamage_ball,totalDamage_ballexp,totalDamage_disexp,sizeRate,sockwaveSizeRate,speedRate,100); break; } return true; } function onTimeEvent_GasolineFire(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_GasolineFire(obj, new_state) { if(!obj) return; if(obj.getVar("createLeaveTraceObj").getBool(0)){ obj.getVar("createLeaveTraceObj").setBool(0, false); local subState = obj.getSkillSubState(); local startFrameIndex = sq_GetCurrentFrameIndex(obj); local ninjutsuPhase = obj.getVar("SkyRoadsSet").getInt(0); // print("subState = "+subState); // print("startFrameIndex = "+startFrameIndex); // print("ninjutsuPhase = "+ninjutsuPhase); createLeaveTraceObj(obj, SKILL_THBYKK_GASOLINEFIRE, STATE_THBYKK_GASOLINEFIRE, subState, startFrameIndex, ninjutsuPhase); } } //忍法:殘影術 function checkExecutableSkill_LeaveTrace(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_LEAVETRACE); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_THBYKK_LEAVETRACE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_LeaveTrace(obj) { if (!obj) return false; return true; } function onSetState_LeaveTrace(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_THBYKK_LEAVETRACE_CAST); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); break; } } function onEndCurrentAni_LeaveTrace(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_LeaveTrace(obj) { if(!obj) return; } function onKeyFrameFlag_LeaveTrace(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 101: local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_LEAVETRACE); if(loadSlot){} else{ local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_LEAVETRACE); local countMax = sq_GetLevelData(obj, SKILL_THBYKK_LEAVETRACE, 0, skillLevel); local coolTime = sq_GetLevelData(obj, SKILL_THBYKK_LEAVETRACE, 0, skillLevel); local mirrorofyataLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_MIRROROFYATA); if(mirrorofyataLevel > 0){ countMax = countMax + sq_GetLevelData(obj, SKILL_THBYKK_MIRROROFYATA, 1, mirrorofyataLevel); coolTime = coolTime * (100 - sq_GetLevelData(obj, SKILL_THBYKK_MIRROROFYATA, 0, mirrorofyataLevel)) / 100; } obj.sq_AddSkillLoad(SKILL_THBYKK_LEAVETRACE, 66, countMax, coolTime); } break; } return true; } function onTimeEvent_LeaveTrace(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_LeaveTrace(obj, new_state) { if(!obj) return; } function createLeaveTraceObj(obj, skillIndex, stateIndex, state, startFrameIndex, ninjutsuPhase) { // print("test :"); // print("skillIndex = "+skillIndex); // print("stateIndex = "+stateIndex); // print("state = "+state); // print("startFrameIndex = "+startFrameIndex); // print("ninjutsuPhase = "+ninjutsuPhase); local speedRate = obj.getVar("kunoichiSpeedRateSave").getInt(0); if(speedRate == 0) speedRate = 100; // print("speedRate = "+speedRate); local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_LEAVETRACE); local bonusRate = sq_GetLevelData(obj, SKILL_THBYKK_LEAVETRACE, 2, skillLevel); local set_1 = 0, set_2 = 0; switch(skillIndex){ case SKILL_THBYKK_ILUSIONSHURIKEN: if(state > 1){ set_1 = obj.getVar("IlusionShurikenSet").getInt(2); set_2 = obj.getVar("IlusionShurikenSet").getInt(1); } else{ set_2 = sq_GetLevelData(obj, SKILL_THBYKK_ILUSIONSHURIKEN, 3, sq_GetSkillLevel(obj, SKILL_THBYKK_ILUSIONSHURIKEN)); } break; case SKILL_THBYKK_FLAMEFLOWER: if(state > 0){ set_1 = obj.getVar("FlameFlowerSet").getInt(2); set_2 = obj.getVar("FlameFlowerSet").getInt(1); } else{ set_2 = sq_GetIntData(obj, SKILL_THBYKK_FLAMEFLOWER, 3); } break; } createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, -1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_LEAVETRACE,skillIndex,state,startFrameIndex,ninjutsuPhase,speedRate,bonusRate,set_1,set_2,0); } //忍法:替身術 function checkExecutableSkill_Migawari(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_MIGAWARI); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_THBYKK_MIGAWARI, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Migawari(obj) { if (!obj) return false; return true; } function onSetState_Migawari(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_THBYKK_MIGAWARISTART); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "migawaristart"); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.sq_PlaySound("R_TF_MIGAWARI"); break; case 1: obj.sq_SetCurrentAnimation(ANI_THBYKK_MIGAWARIBACKSTEP); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "migawaribackstep"); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); // local speedRate = 8000 / currentAni.getDelaySum(0, 0); // obj.getVar("") // if(speedRate > 150) speedRate = 150; // obj.sq_SetStaticMoveInfo(0, 3 * speedRate, 0, false, 100, true); // obj.sq_SetMoveDirection(sq_GetOppositeDirection(sq_GetDirection(obj)), ENUM_DIRECTION_NEUTRAL); obj.setTimeEvent(1, currentAni.getDelaySum(false) / 10, 20, true); obj.getVar("MigawariSet").setInt(0, sq_GetXPos(obj)); obj.setTimeEvent(2, currentAni.getDelaySum(false) / 10, 20, true); break; case 2: obj.sq_SetCurrentAnimation(ANI_THBYKK_MIGAWARISPIN); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "migawarispin"); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_MIGAWARI, -1, 1, 1.0); local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_MIGAWARI, -1, 3, 1.0); local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_MIGAWARI, -1, 4, 1.0) + 100; local offSet = obj.getVar("MigawariSet").getInt(0) - sq_GetXPos(obj); if(sq_GetDirection(obj) == ENUM_DIRECTION_LEFT) offSet = sq_GetXPos(obj) - obj.getVar("MigawariSet").getInt(0); obj.getVar("MigawariObj").clear_obj_vector(); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, offSet, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_MIGAWARI,2,totalDamage,totalDamage_exp,sizeRate,0,0,0,0,0); break; case 3: obj.sq_SetCurrentAnimation(ANI_THBYKK_MIGAWARIATTACK); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "migawariattack"); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); break; } } function onEndCurrentAni_Migawari(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: case 2: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(STATE_THBYKK_MIGAWARI, STATE_PRIORITY_AUTO, true); break; case 3: 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 onProcCon_Migawari(obj) { if(!obj) return; } function onKeyFrameFlag_Migawari(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: local subState = obj.getSkillSubState(); switch(subState){ case 0: local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 0); local delay1 = 4000 / speedRate, delay2 = 8000 / speedRate, delay3 = 24000 / speedRate; sq_flashScreen(obj,delay1,delay2,delay3,255,sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_MIGAWARI, -1, 0, 1.0); local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_MIGAWARI, -1, 4, 1.0) + 100; createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_MIGAWARI,1,totalDamage,sizeRate,speedRate,0,0,0,0,0); break; case 3: local atkObj = obj.getVar("MigawariObj").get_obj_vector(0); if(atkObj){ local colObj = sq_GetCNRDObjectToCollisionObject(atkObj); colObj.setTimeEvent(1, 1000, 1, true); } break; } break; } return true; } function onTimeEvent_Migawari(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: local v = sq_GetAccel(0, 75, timeEventCount, 20, true); sq_setCurrentAxisPos(obj, 2, v); break; case 2: local v = sq_GetAccel(0, -275, timeEventCount, 20, true); local dstX = sq_GetDistancePos(obj.getVar("MigawariSet").getInt(0), sq_GetDirection(obj), v); if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); else obj.stopTimeEvent(2); break; } } function onEndState_Migawari(obj, new_state) { if(!obj) return; } //火遁·炎天道 function checkExecutableSkill_SkyRoads(obj) { if (!obj) return false; if(obj.getState() == 6 && sq_GetZPos(obj) < 60) return false; local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_SKYROADS); if (isUse){ if(obj.getVar("canSaveDeitiesreBirth").getBool(0)){ // print("testt"); local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ local countSkillSave = obj.getVar("DeitiesreBirthSkillSave").getInt(SKILL_THBYKK_SKYROADS); if(countSkillSave < 3){ obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_SKYROADS, countSkillSave + 1); loadSlot.decreaseLoadCount(1); deitiesreBirthDamageSave(obj, SKILL_THBYKK_SKYROADS); } } } obj.sq_IntVectClear(); if(obj.getState() == 6){ obj.getVar("SkyRoadsBool").setBool(0, true); obj.sq_IntVectPush(2); } else{ if(sq_GetSkillLevel(obj, SKILL_THBYKK_NINJUTSU) > 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_IntVectPush(SKILL_THBYKK_SKYROADS); obj.sq_IntVectPush(STATE_THBYKK_SKYROADS); obj.sq_AddSetStatePacket(STATE_THBYKK_NINJUTSU, STATE_PRIORITY_IGNORE_FORCE, true); return true; } else obj.sq_IntVectPush(0); } obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_THBYKK_SKYROADS, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_SkyRoads(obj) { if (!obj) return false; return true; } function onSetState_SkyRoads(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_THBYKK_SKYROADSACTCAST); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "skyroadsactcast"); local ninjutsuPhase = obj.sq_GetVectorData(datas, 1); obj.getVar("SkyRoadsSet").setInt(0, ninjutsuPhase); obj.sq_PlaySound("R_TF_SKYROADS"); obj.sq_PlaySound("SKYROADS_APPEAR"); break; case 1: obj.sq_SetCurrentAnimation(ANI_THBYKK_SKYROADSACTJUMP); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "skyroadsactjump"); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(false); obj.setTimeEvent(1, delay / 24, 24, true); return; break; case 2: obj.sq_SetCurrentAnimation(ANI_THBYKK_SKYROADSACTTHROW); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "skyroadsactthrow"); if(obj.getVar("SkyRoadsBool").getBool(0)){ obj.sq_PlaySound("R_TF_SKYROADS"); obj.sq_PlaySound("SKYROADS_APPEAR"); obj.getVar("SkyRoadsBool").setBool(0, false); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SKYROADS, -1, 1, 1.0); local isBlue = 0; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 1, -sq_GetZPos(obj), sq_GetDirection(obj),3,SKILL_THBYKK_SKYROADS,2,totalDamage,isBlue,0,0,0,0,0,0); } break; case 3: obj.sq_SetCurrentAnimation(ANI_THBYKK_SKYROADSGRABFALL); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "skyroadsgrabfall"); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(subState == 0){ local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 0); obj.getVar("kunoichiSpeedRateSave").setInt(0, speedRate); } } function onEndCurrentAni_SkyRoads(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: // case 2: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(STATE_THBYKK_SKYROADS, STATE_PRIORITY_AUTO, true); break; case 2: case 3: 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 onProcCon_SkyRoads(obj) { if(!obj) return; } function onKeyFrameFlag_SkyRoads(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: local subState = obj.getSkillSubState(); switch(subState){ case 0: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SKYROADS, -1, 0, 1.0); local sizeRate = sq_GetIntData(obj, SKILL_THBYKK_SKYROADS, 13); local ninjutsuPhase = obj.getVar("SkyRoadsSet").getInt(0); if(ninjutsuPhase > 1) sizeRate = sq_GetIntData(obj, SKILL_THBYKK_SKYROADS, 12 + ninjutsuPhase); local isBlue = 0; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_SKYROADS,1,totalDamage,sizeRate,0,0,0,0,0,0); break; case 1: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SKYROADS, -1, 1, 1.0); local isBlue = 0; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 1, -sq_GetZPos(obj),sq_GetDirection(obj),3,SKILL_THBYKK_SKYROADS,2,totalDamage,0,0,0,0,0,0,0); break; case 2: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SKYROADS, -1, 2, 1.0); local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SKYROADS, -1, 3, 1.0); local sizeRate = sq_GetIntData(obj, SKILL_THBYKK_SKYROADS, 13); local ninjutsuPhase = obj.getVar("SkyRoadsSet").getInt(0); if(ninjutsuPhase > 1) sizeRate = sq_GetIntData(obj, SKILL_THBYKK_SKYROADS, 12 + ninjutsuPhase); local xPos = sq_GetDistancePos(sq_GetXPos(obj), sq_GetDirection(obj), 225); local zPos = sq_GetZPos(obj); local isBlue = 0, isTalisman = 0; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 95, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_SKYROADS,3,totalDamage,sizeRate,xPos,zPos,0,0,0,0); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 200, 1, -zPos,sq_GetDirection(obj),3,SKILL_THBYKK_SKYROADS,4,totalDamage_exp,sizeRate,isTalisman,isBlue,0,0,0,0); break; } break; } return true; } function onTimeEvent_SkyRoads(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: local v = sq_GetAccel(0, 150, timeEventCount, 24, true); sq_setCurrentAxisPos(obj, 2, v); break; } } function onEndState_SkyRoads(obj, new_state) { if(!obj) return; if(obj.getVar("createLeaveTraceObj").getBool(0)){ obj.getVar("createLeaveTraceObj").setBool(0, false); local subState = obj.getSkillSubState(); local startFrameIndex = sq_GetCurrentFrameIndex(obj); local ninjutsuPhase = obj.getVar("SkyRoadsSet").getInt(0); // print("subState = "+subState); // print("startFrameIndex = "+startFrameIndex); // print("ninjutsuPhase = "+ninjutsuPhase); createLeaveTraceObj(obj, SKILL_THBYKK_SKYROADS, STATE_THBYKK_SKYROADS, subState, startFrameIndex, ninjutsuPhase); } } //火遁·炎舞天璇 function checkExecutableSkill_FlameFlower(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_FLAMEFLOWER); if (isUse){ if(obj.getVar("canSaveDeitiesreBirth").getBool(0)){ // print("testt"); local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ local countSkillSave = obj.getVar("DeitiesreBirthSkillSave").getInt(SKILL_THBYKK_FLAMEFLOWER); if(countSkillSave < 3){ obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_FLAMEFLOWER, countSkillSave + 1); loadSlot.decreaseLoadCount(1); deitiesreBirthDamageSave(obj, SKILL_THBYKK_FLAMEFLOWER); } } } obj.sq_IntVectClear(); if(sq_GetSkillLevel(obj, SKILL_THBYKK_NINJUTSU) > 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_IntVectPush(SKILL_THBYKK_FLAMEFLOWER); obj.sq_IntVectPush(STATE_THBYKK_FLAMEFLOWER); obj.sq_AddSetStatePacket(STATE_THBYKK_NINJUTSU, STATE_PRIORITY_IGNORE_FORCE, true); return true; } else obj.sq_IntVectPush(0); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_THBYKK_FLAMEFLOWER, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_FlameFlower(obj) { if (!obj) return false; return true; } function onSetState_FlameFlower(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_THBYKK_FLAMEFLOWERCAST); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "flameflowercast"); local slashMax = sq_GetIntData(obj, SKILL_THBYKK_FLAMEFLOWER, 3); obj.getVar("FlameFlowerSet").setInt(1, slashMax); obj.getVar("FlameFlowerSet").setInt(2, 0); local ninjutsuPhase = obj.sq_GetVectorData(datas, 1); obj.getVar("FlameFlowerSet").setInt(0, ninjutsuPhase); obj.sq_PlaySound("R_TF_OPENFIRE"); break; case 1: case 2: case 3: case 4: if(subState == 1){ obj.sq_SetCurrentAnimation(ANI_THBYKK_FLAMEFLOWERSLASHA); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "flameflowerslasha"); } else if(subState == 2){ obj.sq_SetCurrentAnimation(ANI_THBYKK_FLAMEFLOWERSLASHB); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "flameflowerslashb"); } else if(subState == 3){ obj.sq_SetCurrentAnimation(ANI_THBYKK_FLAMEFLOWERSLASHC); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "flameflowerslashc"); } else if(subState == 4){ obj.sq_SetCurrentAnimation(ANI_THBYKK_FLAMEFLOWERSLASHD); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "flameflowerslashd"); } if(subState == 1){ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEFLOWER, -1, 0, 1.0); local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_MARKOFFLAME) if(skillLevel > 0){ local burnDamageRate = sq_GetLevelData(obj, SKILL_THBYKK_MARKOFFLAME, 1, skillLevel); local burnTime = sq_GetIntData(obj, SKILL_THBYKK_MARKOFFLAME, 0); local decreaseBurnDamageRate = burnDamageRate; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)){ burnDamageRate = burnDamageRate + sq_GetIntData(obj, SKILL_THBYKK_SWORDOFKUSANAGI, 20) / 4; } totalDamage = totalDamage * (100 - decreaseBurnDamageRate) / 100; local burnDamage = totalDamage * burnDamageRate / 100; obj.getVar("markofFlameSet").setInt(1, totalDamage); obj.getVar("markofFlameSet").setInt(2, burnDamage); obj.getVar("markofFlameSet").setInt(3, decreaseBurnDamageRate); obj.getVar("markofFlameSet").setInt(4, burnTime); } sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_THBYKK_FLAMEFLOWERSLASH)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); } else{ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEFLOWER, -1, 0, 1.0); local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_MARKOFFLAME) if(skillLevel > 0){ totalDamage = obj.getVar("markofFlameSet").getInt(1); } sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_THBYKK_FLAMEFLOWERSLASH)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local ninjutsuPhase = obj.getVar("FlameFlowerSet").getInt(0); if(ninjutsuPhase > 0){ local currentAni = obj.getCurrentAnimation(); local speedRate = 6000 / currentAni.getDelaySum(0, 0); speedRate = speedRate * (100 + sq_GetIntData(obj, SKILL_THBYKK_FLAMEFLOWER, 6) * ninjutsuPhase) / 100; currentAni.setSpeedRate(speedRate.tofloat()); sq_AddAttackBox(currentAni, -225,-50,-15,450,100,212); } return; break; case 5: obj.sq_SetCurrentAnimation(ANI_THBYKK_FLAMEFLOWERLOOPREADY); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "flameflowerloopready"); obj.sq_PlaySound("TF_OPENFIRE_01"); break; case 6: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)){ obj.sq_SetCurrentAnimation(ANI_THBYKK_FLAMEFLOWERLOOPBLUE); setSwordKusanagiEffect(obj, "flameflowerloop"); } else obj.sq_SetCurrentAnimation(ANI_THBYKK_FLAMEFLOWERLOOP); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); local speedRate = 4000 / currentAni.getDelaySum(0, 0); local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_FLAMEFLOWER); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEFLOWER, -1, 1, 1.0); local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_MARKOFFLAME) if(skillLevel > 0){ local burnDamageRate = sq_GetLevelData(obj, SKILL_THBYKK_MARKOFFLAME, 1, skillLevel); local decreaseBurnDamageRate = burnDamageRate; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)){ burnDamageRate = burnDamageRate + sq_GetIntData(obj, SKILL_THBYKK_SWORDOFKUSANAGI, 20) / 4; } totalDamage = totalDamage * (100 - decreaseBurnDamageRate) / 100; local burnDamage = totalDamage * burnDamageRate / 100; obj.getVar("markofFlameSet").setInt(2, burnDamage); } sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_THBYKK_FLAMEFLOWERLOOP)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local lifeTime = sq_GetLevelData(obj, SKILL_THBYKK_FLAMEFLOWER, 4, skillLevel) * 100 / speedRate; local hitTime = sq_GetLevelData(obj, SKILL_THBYKK_FLAMEFLOWER, 2, skillLevel) * 100 / speedRate; obj.setTimeEvent(1, lifeTime, 1, false); obj.setTimeEvent(2, hitTime, -1, false); obj.sq_PlaySound("OPENFIRE_LOOP", 2333); return; break; case 7: obj.sq_SetCurrentAnimation(ANI_THBYKK_FLAMEFLOWERLAST); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "flameflowerlast"); obj.removeAllTimeEvent(); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEFLOWER, -1, 5, 1.0); local sizeRate = sq_GetIntData(obj, SKILL_THBYKK_FLAMEFLOWER, 13) / 10; local isBlue = 0; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_FLAMEFLOWER,1,totalDamage,sizeRate,isBlue,0,0,0,0,0); obj.stopSound(2333); obj.sq_PlaySound("OPENFIRE_EXP"); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(subState == 0){ local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 0); obj.getVar("kunoichiSpeedRateSave").setInt(0, speedRate); } } function onEndCurrentAni_FlameFlower(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_THBYKK_FLAMEFLOWER, STATE_PRIORITY_AUTO, true); break; case 1: case 2: case 3: case 4: if(obj.getVar("FlameFlowerSet").getInt(2) + 1 >= obj.getVar("FlameFlowerSet").getInt(1)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(5); obj.sq_AddSetStatePacket(STATE_THBYKK_FLAMEFLOWER, STATE_PRIORITY_AUTO, true); } else{ obj.getVar("FlameFlowerSet").setInt(2, obj.getVar("FlameFlowerSet").getInt(2) + 1); obj.sq_IntVectClear(); if(subState == 4) obj.sq_IntVectPush(1); else obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(STATE_THBYKK_FLAMEFLOWER, STATE_PRIORITY_AUTO, true); } break; case 5: obj.sq_IntVectClear(); obj.sq_IntVectPush(6); obj.sq_AddSetStatePacket(STATE_THBYKK_FLAMEFLOWER, STATE_PRIORITY_AUTO, true); break; case 7: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_FlameFlower(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: case 2: case 3: case 4: sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(5); obj.sq_AddSetStatePacket(STATE_THBYKK_FLAMEFLOWER, STATE_PRIORITY_IGNORE_FORCE, true); return; } break; } } function onKeyFrameFlag_FlameFlower(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_FlameFlower(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(7); obj.sq_AddSetStatePacket(STATE_THBYKK_FLAMEFLOWER, STATE_PRIORITY_AUTO, true); break; case 2: obj.resetHitObjectList(); break; } } function onEndState_FlameFlower(obj, new_state) { if(!obj) return; if(new_state != STATE_THBYKK_FLAMEFLOWER) obj.stopSound(2333); if(obj.getVar("createLeaveTraceObj").getBool(0)){ obj.getVar("createLeaveTraceObj").setBool(0, false); local subState = obj.getSkillSubState(); local startFrameIndex = sq_GetCurrentFrameIndex(obj); local ninjutsuPhase = obj.getVar("SkyRoadsSet").getInt(0); // print("subState = "+subState); // print("startFrameIndex = "+startFrameIndex); // print("ninjutsuPhase = "+ninjutsuPhase); createLeaveTraceObj(obj, SKILL_THBYKK_FLAMEFLOWER, STATE_THBYKK_FLAMEFLOWER, subState, startFrameIndex, ninjutsuPhase); } } function onAttack_FlameFlower(obj, damager, boundingBox, isStuck) { if(sq_GetSkillLevel(obj, SKILL_THBYKK_MARKOFFLAME) > 0){ local burnDamage = obj.getVar("markofFlameSet").getInt(2); local burnTime = obj.getVar("markofFlameSet").getInt(4); if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) return; if(!obj || obj.getState() == STATE_DIE) return; if(damager.getVar("markofFlameObj").get_obj_vector_size() > 0){ local markofFlameObj = damager.getVar("markofFlameObj").get_obj_vector(0); if(markofFlameObj){ local colObj = sq_GetCNRDObjectToCollisionObject(markofFlameObj); // print("add = "+burnDamage); local baseDamage = colObj.getVar("damage").getInt(0); colObj.getVar("damage").setInt(0, baseDamage + burnDamage); } } else{ local group = sq_GetGroup(damager); local uniqueId = sq_GetUniqueId(damager); createSkillPassive_Theif_bykk(obj,damager,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,255,1,group,uniqueId,burnTime,burnDamage,0,0,0,0); } } } //忍法:飛燕手裡劍 function checkExecutableSkill_FlyingSwallow(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_FLYINGSWALLOW); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_THBYKK_FLYINGSWALLOW, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_FlyingSwallow(obj) { if (!obj) return false; return true; } function onSetState_FlyingSwallow(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_THBYKK_FLYINGSWALLOWBOMB); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "flyingswallowbomb"); //obj.sq_SetCurrentAnimation(ANI_THBYKK_FLYINGSWALLOWBOMBDUMMY); obj.getVar("FlyingSwallowTar").clear_obj_vector(); break; case 1: sq_setCurrentAxisPos(obj, 2, 225); obj.sq_ZStop(); obj.sq_SetCurrentAnimation(ANI_THBYKK_FLYINGSWALLOWFINISH); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "flyingswallowfinish"); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_FlyingSwallow(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: sq_setCurrentAxisPos(obj, 2, 500); obj.sq_ZStop(); break; case 1: 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 onProcCon_FlyingSwallow(obj) { if(!obj) return; } function onKeyFrameFlag_FlyingSwallow(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 0: local subState = obj.getSkillSubState(); switch(subState){ case 0: local currentAni = obj.getCurrentAnimation(); local speedRate = 4000 / currentAni.getDelaySum(0, 0); local delay1 = 4000 / speedRate, delay2 = 8000 / speedRate, delay3 = 24000 / speedRate; sq_flashScreen(obj,delay1,delay2,delay3,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 1: local totalDamage_shuriken = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLYINGSWALLOW, -1, 6, 1.0); local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLYINGSWALLOW, -1, 7, 1.0); local createMax = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLYINGSWALLOW, -1, 8, 1.0) + 100; local sizeRate = sq_GetIntData(obj, SKILL_THBYKK_FLYINGSWALLOW, 15); for(local i = 0; i < createMax; i++){ createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_FLYINGSWALLOW,7,totalDamage_exp,sizeRate,i,createMax,0,0,0,0); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 1, -sq_GetZPos(obj),sq_GetDirection(obj),3,SKILL_THBYKK_FLYINGSWALLOW,5,totalDamage_shuriken,0,0,0,0,0,0,0); } break; } break; case 1: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLYINGSWALLOW, -1, 0, 1.0); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_FLYINGSWALLOW,1,totalDamage,0,0,0,0,0,0,0); local currentAni = obj.getCurrentAnimation(); local speedRate = 4000 / currentAni.getDelaySum(0, 0); local delay = 50000 / speedRate; obj.setTimeEvent(1, delay, 5, true); break; } return true; } function onTimeEvent_FlyingSwallow(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: if(timeEventCount >= 5){ local totalDamage_light = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLYINGSWALLOW, -1, 5, 1.0); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 2, -sq_GetZPos(obj),sq_GetDirection(obj),3,SKILL_THBYKK_FLYINGSWALLOW,8,totalDamage_light,timeEventCount,0,0,0,0,0,0); obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_THBYKK_FLYINGSWALLOW, STATE_PRIORITY_AUTO, true); } else{ local offSet = [[],[-155,70],[225,75],[-65,158],[115,158]]; local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_FLYINGSWALLOW); local createMax = sq_GetLevelData(obj, SKILL_THBYKK_FLYINGSWALLOW, 4, skillLevel); local totalDamage_shuriken = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLYINGSWALLOW, -1, 2, 1.0); local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLYINGSWALLOW, -1, 3, 1.0); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, offSet[timeEventCount][0], 1, offSet[timeEventCount][1] - sq_GetZPos(obj),sq_GetDirection(obj),3,SKILL_THBYKK_FLYINGSWALLOW,3,totalDamage_shuriken,totalDamage_exp,createMax,timeEventCount,0,0,0,0); local totalDamage_light = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLYINGSWALLOW, -1, 1, 1.0); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 2, -sq_GetZPos(obj),sq_GetDirection(obj),3,SKILL_THBYKK_FLYINGSWALLOW,8,totalDamage_light,timeEventCount,0,0,0,0,0,0); } break; } } function onEndState_FlyingSwallow(obj, new_state) { if(!obj) return; } //火遁·冥焰業火陣 function checkExecutableSkill_DoomField(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_DOOMFIELD); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_THBYKK_DOOMFIELD, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_DoomField(obj) { if (!obj) return false; return true; } function onSetState_DoomField(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_THBYKK_DOOMFILEDMOTION_START); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "doomfiledmotion_start"); obj.getVar("DoomFieldSet").setInt(0, 0); break; case 1: if(obj.getVar("DoomFieldSet").getInt(0) > 0){ sq_setCurrentAxisPos(obj, 0, obj.getVar("DoomFieldSet").getInt(0)); obj.sq_SetXScrollStop(0); } obj.sq_SetCurrentAnimation(ANI_THBYKK_DOOMFILEDMOTION_END); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "doomfiledmotion_end"); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(subState == 0){ local currentAni = obj.getCurrentAnimation(); local speedRate = 4000 / currentAni.getDelaySum(0, 0); obj.getVar("kunoichiSpeedRateSave").setInt(0, speedRate); } } function onEndCurrentAni_DoomField(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_THBYKK_DOOMFIELD, STATE_PRIORITY_AUTO, true); break; case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_DoomField(obj) { if(!obj) return; } function onKeyFrameFlag_DoomField(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: if(obj.getSkillSubState() != 0) break; obj.sq_PlaySound("R_TF_NINPOJIN_01", 2333); local offSet = 330; local baseX = sq_GetXPos(obj), baseY = sq_GetYPos(obj), direction = sq_GetDirection(obj); for(local i = 0; i < 22; i++){ // print(offSet); local offSetX = sq_GetDistancePos(baseX, direction, offSet); if(obj.isMovablePos(offSetX, baseY)) break; else offSet = offSet - 15; } // print("final :" + offSet); local currentAni = obj.getCurrentAnimation(); local speedRate = 3000 / currentAni.getDelaySum(0, 0); if(offSet > 0){ local delay = currentAni.getDelaySum(5, 14); obj.sq_SetXScrollStart(offSet, delay); local offSetX = sq_GetDistancePos(baseX, direction, offSet); obj.getVar("DoomFieldSet").setInt(0, offSetX); } local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_DOOMFIELD, -1, 0, 1.0); local sizeRate = 100; if(sq_GetSkillLevel(obj, SKILL_THBYKK_DOOMFIELD) >= 9) sizeRate = 120; local isBlue = 0; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, offSet, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_DOOMFIELD,1,totalDamage,speedRate,sizeRate,isBlue,0,0,0,0); break; case 6: local size = obj.getVar("DoomFieldObj").get_obj_vector_size(); if(size > 0){ local currentAni = obj.getCurrentAnimation(); local speedRate = 6000 / currentAni.getDelaySum(0, 0); local delay = 40000 / speedRate; for(local i = 0; i < size; i++){ local aObj = obj.getVar("DoomFieldObj").get_obj_vector(i); if(aObj){ local colObj = sq_GetCNRDObjectToCollisionObject(aObj); local phaseSet = colObj.getVar("custom").getInt(1); colObj.setTimeEvent(1, delay * phaseSet, 1, false); } } } break; case 7: sq_SetMyShake(obj, 4, 200); break; case 8: local currentAni = obj.getCurrentAnimation(); local speedRate = 6000 / currentAni.getDelaySum(0, 0); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_DOOMFIELD, -1, 4, 1.0); local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_DOOMFIELD, -1, 1, 1.0); local sizeRate = 100; if(sq_GetSkillLevel(obj, SKILL_THBYKK_DOOMFIELD) >= 9) sizeRate = 120; local isBlue = 0; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_DOOMFIELD,3,totalDamage,totalDamage_exp,speedRate,sizeRate,isBlue,0,0,0); if(sq_GetSkillLevel(obj, SKILL_THBYKK_DOOMFIELD) >= 3){ local bonusRate = 1.0; if(sq_GetSkillLevel(obj, SKILL_THBYKK_DOOMFIELD) >= 6) bonusRate = 1.1; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_DOOMFIELD, -1, 9, bonusRate); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_DOOMFIELD,2,totalDamage,sizeRate,0,0,0,0,0,0); } break; case 9: obj.stopSound(2333); obj.sq_PlaySound("R_TF_NINPOJIN_02"); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_DOOMFIELD, -1, 2, 1.0); local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_DOOMFIELD, -1, 3, 1.0); local sizeRate = 100; local offSet = [[-170,-30,1,1],[170,30,1,2],[0,60,2,3],[0,-60,2,4],[-170,30,3,5],[170,-30,3,6]]; if(sq_GetSkillLevel(obj, SKILL_THBYKK_DOOMFIELD) >= 9){ sizeRate = 120; offSet = [[-204,-36,1,1],[204,36,1,2],[0,72,2,3],[0,-72,2,4],[-204,36,3,5],[204,-36,3,6]]; } local isBlue = 0; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; obj.getVar("DoomFieldObj").clear_obj_vector(); for(local i = 0; i < 6; i++){ createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, offSet[i][0], offSet[i][1], 75,sq_GetDirection(obj),3,SKILL_THBYKK_DOOMFIELD,5,totalDamage_exp,offSet[i][2],offSet[i][3],sizeRate,isBlue,0,0,0); } createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_DOOMFIELD,7,totalDamage,sizeRate,0,0,0,0,0,0); break; case 10: local currentAni = obj.getCurrentAnimation(); local speedRate = 6000 / currentAni.getDelaySum(0, 0); local delay1 = 6000 / speedRate, delay2 = 12000 / speedRate, delay3 = 1000 / speedRate; sq_flashScreen(obj,delay1,delay2,delay3,204, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 3, 150); break; } return true; } function onTimeEvent_DoomField(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_DoomField(obj, new_state) { if(!obj) return; if(new_state != STATE_THBYKK_DOOMFIELD){ obj.sq_SetXScrollStop(300); } if(obj.getVar("createLeaveTraceObj").getBool(0)){ obj.getVar("createLeaveTraceObj").setBool(0, false); local subState = obj.getSkillSubState(); local startFrameIndex = sq_GetCurrentFrameIndex(obj); local ninjutsuPhase = obj.getVar("SkyRoadsSet").getInt(0); // print("subState = "+subState); // print("startFrameIndex = "+startFrameIndex); // print("ninjutsuPhase = "+ninjutsuPhase); createLeaveTraceObj(obj, SKILL_THBYKK_DOOMFIELD, STATE_THBYKK_DOOMFIELD, subState, startFrameIndex, ninjutsuPhase); } } function proc_appendage_doomfield_hold(appendage) { if(!appendage) return; local sourceObj = appendage.getSource(); if(!sourceObj || sourceObj.getState() == STATE_DIE || sourceObj.getState() != STATE_THBYKK_DOOMFIELD){ appendage.setValid(false); return; } } //火遁·風魔手裡劍 function checkExecutableSkill_FuumaShuriken(obj) { if (!obj) return false; if(obj.getState() == 6 && sq_GetZPos(obj) < 60) return false; local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_FUUMASHURIKEN); if (isUse){ if(obj.getVar("canSaveDeitiesreBirth").getBool(0)){ // print("testt"); local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ local countSkillSave = obj.getVar("DeitiesreBirthSkillSave").getInt(SKILL_THBYKK_FUUMASHURIKEN); if(countSkillSave < 3){ obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_FUUMASHURIKEN, countSkillSave + 1); loadSlot.decreaseLoadCount(1); deitiesreBirthDamageSave(obj, SKILL_THBYKK_FUUMASHURIKEN); } } } obj.sq_IntVectClear(); if(obj.getState() == 6){ obj.sq_IntVectPush(10); } else{ if(sq_GetSkillLevel(obj, SKILL_THBYKK_NINJUTSU) > 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_IntVectPush(SKILL_THBYKK_FUUMASHURIKEN); obj.sq_IntVectPush(STATE_THBYKK_FUUMASHURIKEN); obj.sq_AddSetStatePacket(STATE_THBYKK_NINJUTSU, STATE_PRIORITY_IGNORE_FORCE, true); return true; } else obj.sq_IntVectPush(0); } obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_THBYKK_FUUMASHURIKEN, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_FuumaShuriken(obj) { if (!obj) return false; return true; } function onSetState_FuumaShuriken(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_THBYKK_FUNMASURIKEN01_BODY_READY); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "funmasuriken01_body_ready"); local ninjutsuPhase = obj.sq_GetVectorData(datas, 1); obj.getVar("FuumaShurikenSet").setInt(0, ninjutsuPhase); break; case 1: obj.sq_SetCurrentAnimation(ANI_THBYKK_FUNMASURIKEN02_BODY_THROW01); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "funmasuriken02_body_throw01"); break; case 2: obj.sq_SetCurrentAnimation(ANI_THBYKK_FUNMASURIKEN03_BODY_THROW02); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "funmasuriken03_body_throw02"); break; case 3: obj.sq_SetCurrentAnimation(ANI_THBYKK_FUNMASURIKENTALISMAN_BODY); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "funmasurikentalisman_body"); break; case 10: obj.sq_ZStop(); if(false){ obj.sq_SetCurrentAnimation(ANI_THBYKK_FUNMASURIKENTALISMANJUMP_BODY); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "funmasurikentalismanjump_body"); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 0); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/3kunoichi_bykk/fuumashuriken/funmasurikentalismanjumpeffect_00.ani", 43, 0, -49); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); return; } else{ obj.sq_SetCurrentAnimation(ANI_THBYKK_FUNMASURIKEN04_BODY_JUMPTHROW); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "funmasuriken04_body_jumpthrow"); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 0); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/3kunoichi_bykk/fuumashuriken/funmasuriken04_jumpsuriken_00.ani", 43, 0, -49); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); return; } break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(subState == 0){ local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 0); obj.getVar("kunoichiSpeedRateSave").setInt(0, speedRate); } } function onEndCurrentAni_FuumaShuriken(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); if(false) obj.sq_IntVectPush(3); else obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_THBYKK_FUUMASHURIKEN, STATE_PRIORITY_AUTO, true); break; case 1: case 2: case 3: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; case 10: 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 onProcCon_FuumaShuriken(obj) { if(!obj) return; } function onKeyFrameFlag_FuumaShuriken(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 100: local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 0); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/3kunoichi_bykk/fuumashuriken/funmasuriken01suriken_00.ani", 36, 1, 85); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); break; case 101: obj.sq_PlaySound("R_TF_FUUMA_01"); obj.sq_PlaySound("FUUMA_CAST"); break; case 102: //`throw` 116 0 66 passiveobject/6_thief_bykk/kunoichi_bykk/animation/fuumashuriken/funmasuriken_smallsuriken_suriken.ani obj.getVar("FuumaShuriken").clear_obj_vector(); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FUUMASHURIKEN, -1, 0, 1.0); local hitMax = sq_GetIntData(obj, SKILL_THBYKK_FUUMASHURIKEN, 13); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 116, 0, 66,sq_GetDirection(obj),3,SKILL_THBYKK_FUUMASHURIKEN,1,totalDamage,hitMax,0,0,0,0,0,0); for(local i = 0; i < 4; i++){ createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 116, 0, 66,sq_GetDirection(obj),3,SKILL_THBYKK_FUUMASHURIKEN,2,i,hitMax,0,0,0,0,0,0); } break; case 103: //`throw` 255 0 58 local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FUUMASHURIKEN, -1, 1, 1.0); local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FUUMASHURIKEN, -1, 2, 1.0); local hitMax = sq_GetIntData(obj, SKILL_THBYKK_FUUMASHURIKEN, 20); local sizeRate = sq_GetIntData(obj, SKILL_THBYKK_FUUMASHURIKEN, 31); local ninjutsuPhase = obj.getVar("FuumaShurikenSet").getInt(0); if(ninjutsuPhase <= 3) sizeRate = sizeRate * sq_GetIntData(obj, SKILL_THBYKK_FUUMASHURIKEN, 32) / 100; else if(ninjutsuPhase > 3) sizeRate = sizeRate * sq_GetIntData(obj, SKILL_THBYKK_FUUMASHURIKEN, 33) / 100; local sizeRate_shuriken = 100; local isBlue = 0; createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 255, 0, 58,sq_GetDirection(obj),3,SKILL_THBYKK_FUUMASHURIKEN,3,totalDamage,hitMax,totalDamage_exp,sizeRate,sizeRate_shuriken,isBlue,0,0); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 255, 0, 58,sq_GetDirection(obj),3,SKILL_THBYKK_FUUMASHURIKEN,4,hitMax,sizeRate_shuriken,isBlue,0,0,0,0,0); break; case 201: //`createEffectBack` 23 0 -56 local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 0); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/3kunoichi_bykk/fuumashuriken/funmasuriken04_underjumpsuriken.ani", 23, 0, -56); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); break; case 202: //`throw` 111 0 -11 local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FUUMASHURIKEN, -1, 2, 1.0); local sizeRate = sq_GetIntData(obj, SKILL_THBYKK_FUUMASHURIKEN, 31); local isBlue = 0; local isTalisman = 1; if(isTalisman > 1){ sizeRate = sizeRate * 130 / 100; } createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 111, 0, -11,sq_GetDirection(obj),3,SKILL_THBYKK_FUUMASHURIKEN,6,totalDamage_exp,sizeRate,isBlue,0,0,0,0,0); break; case 301: //`throw` 255 0 58 local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FUUMASHURIKEN, -1, 1, 1.0); local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FUUMASHURIKEN, -1, 2, 1.0); local hitMax = sq_GetIntData(obj, SKILL_THBYKK_FUUMASHURIKEN, 20); local sizeRate = sq_GetIntData(obj, SKILL_THBYKK_FUUMASHURIKEN, 31); local ninjutsuPhase = obj.getVar("FuumaShurikenSet").getInt(0); if(ninjutsuPhase <= 3) sizeRate = sizeRate * sq_GetIntData(obj, SKILL_THBYKK_FUUMASHURIKEN, 32) / 100; else if(ninjutsuPhase > 3) sizeRate = sizeRate * sq_GetIntData(obj, SKILL_THBYKK_FUUMASHURIKEN, 33) / 100; local sizeRate_shuriken = 130; local isBlue = 0; createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 255, 0, 58,sq_GetDirection(obj),3,SKILL_THBYKK_FUUMASHURIKEN,3,totalDamage,hitMax,totalDamage_exp,sizeRate,sizeRate_shuriken,isBlue,0,0); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 255, 0, 58,sq_GetDirection(obj),3,SKILL_THBYKK_FUUMASHURIKEN,4,hitMax,sizeRate_shuriken,isBlue,0,0,0,0,0); break; } return true; } function onTimeEvent_FuumaShuriken(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_FuumaShuriken(obj, new_state) { if(!obj) return; if(obj.getVar("createLeaveTraceObj").getBool(0)){ obj.getVar("createLeaveTraceObj").setBool(0, false); local subState = obj.getSkillSubState(); local startFrameIndex = sq_GetCurrentFrameIndex(obj); local ninjutsuPhase = obj.getVar("SkyRoadsSet").getInt(0); // print("subState = "+subState); // print("startFrameIndex = "+startFrameIndex); // print("ninjutsuPhase = "+ninjutsuPhase); createLeaveTraceObj(obj, SKILL_THBYKK_FUUMASHURIKEN, STATE_THBYKK_FUUMASHURIKEN, subState, startFrameIndex, ninjutsuPhase); } } //八岐大蛇 function checkExecutableSkill_Yamataorochi(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_YAMATAOROCHI); if (isUse){ if(obj.getVar("canSaveDeitiesreBirth").getBool(0)){ // print("testt"); local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ local countSkillSave = obj.getVar("DeitiesreBirthSkillSave").getInt(SKILL_THBYKK_YAMATAOROCHI); if(countSkillSave < 3){ obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_YAMATAOROCHI, countSkillSave + 1); loadSlot.decreaseLoadCount(1); deitiesreBirthDamageSave(obj, SKILL_THBYKK_YAMATAOROCHI); } } } obj.sq_IntVectClear(); if(sq_GetSkillLevel(obj, SKILL_THBYKK_NINJUTSU) > 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_IntVectPush(SKILL_THBYKK_YAMATAOROCHI); obj.sq_IntVectPush(STATE_THBYKK_YAMATAOROCHI); obj.sq_AddSetStatePacket(STATE_THBYKK_NINJUTSU, STATE_PRIORITY_IGNORE_FORCE, true); return true; } else obj.sq_IntVectPush(0); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_THBYKK_YAMATAOROCHI, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Yamataorochi(obj) { if (!obj) return false; return true; } function onSetState_Yamataorochi(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_THBYKK_YMATAOROCHICASTING); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "ymataorochicasting"); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local ninjutsuPhase = obj.sq_GetVectorData(datas, 1); obj.getVar("YamataorochiSet").setInt(0, ninjutsuPhase); local currentAni = obj.getCurrentAnimation(); local speedRate = 5000 / currentAni.getDelaySum(0, 0); obj.getVar("kunoichiSpeedRateSave").setInt(0, speedRate); obj.sq_PlaySound("R_TF_YAMATAOROCHI"); break; } } function onEndCurrentAni_Yamataorochi(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_Yamataorochi(obj) { if(!obj) return; } function onKeyFrameFlag_Yamataorochi(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: local isTalisman = 0; if(isTalisman > 0){ local totalDamage_loop = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_YAMATAOROCHI, -1, 1, 1.0); local lifeTime = sq_GetIntData(obj, SKILL_THBYKK_YAMATAOROCHI, 3) local sizeRate = 120; local ninjutsuPhase = obj.getVar("YamataorochiSet").getInt(0); if(ninjutsuPhase > 0){ switch(ninjutsuPhase){ case 4: case 5: case 6: lifeTime = lifeTime * (110) / 100; break; } } createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, -300, -1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_YAMATAOROCHI,3,totalDamage_loop,lifeTime,sizeRate,0,0,0,0,0); } else{ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_YAMATAOROCHI, -1, 0, 1.0); local totalDamage_loop = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_YAMATAOROCHI, -1, 1, 1.0); local hitMax = sq_GetIntData(obj, SKILL_THBYKK_YAMATAOROCHI, 1); local sizeRate = sq_GetIntData(obj, SKILL_THBYKK_YAMATAOROCHI, 15); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, -100, -1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_YAMATAOROCHI,1,totalDamage,totalDamage_loop,hitMax,0,0,0,0,0); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_YAMATAOROCHI, -1, 2, 1.0); local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_YAMATAOROCHI); local lifeTime = sq_GetLevelData(obj, SKILL_THBYKK_YAMATAOROCHI, 3, skillLevel); local ninjutsuPhase = obj.getVar("YamataorochiSet").getInt(0); if(ninjutsuPhase > 0){ switch(ninjutsuPhase){ case 1: case 2: case 3: local addRate = sq_GetLevelData(obj, SKILL_THBYKK_YAMATAOROCHI, 4, skillLevel); lifeTime = lifeTime * (100 + addRate) / 100; break; case 4: case 5: case 6: local addRate = sq_GetLevelData(obj, SKILL_THBYKK_YAMATAOROCHI, 4, skillLevel); lifeTime = lifeTime * (100 + addRate) / 100; break; } } local sizeRate = 100; local kurv_skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_KURVEJADE); if(kurv_skillLevel > 0) sizeRate = sizeRate + sq_GetLevelData(obj, SKILL_THBYKK_KURVEJADE, 7, kurv_skillLevel) * 60 / 100; createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_YAMATAOROCHI,2,totalDamage,lifeTime,sizeRate,0,0,0,0,0); } break; } return true; } function onTimeEvent_Yamataorochi(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_Yamataorochi(obj, new_state) { if(!obj) return; if(obj.getVar("createLeaveTraceObj").getBool(0)){ obj.getVar("createLeaveTraceObj").setBool(0, false); local subState = obj.getSkillSubState(); local startFrameIndex = sq_GetCurrentFrameIndex(obj); local ninjutsuPhase = obj.getVar("SkyRoadsSet").getInt(0); // print("subState = "+subState); // print("startFrameIndex = "+startFrameIndex); // print("ninjutsuPhase = "+ninjutsuPhase); createLeaveTraceObj(obj, SKILL_THBYKK_YAMATAOROCHI, STATE_THBYKK_YAMATAOROCHI, subState, startFrameIndex, ninjutsuPhase); } } //天照 function checkExecutableSkill_Amateras(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_AMATERAS); if (isUse){ if(obj.getVar("canSaveDeitiesreBirth").getBool(0)){ // print("testt"); local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH); if(loadSlot && loadSlot.getRemainLoadNumber() > 0){ local countSkillSave = obj.getVar("DeitiesreBirthSkillSave").getInt(SKILL_THBYKK_AMATERAS); if(countSkillSave < 3){ obj.getVar("DeitiesreBirthSkillSave").setInt(SKILL_THBYKK_AMATERAS, countSkillSave + 1); loadSlot.decreaseLoadCount(1); deitiesreBirthDamageSave(obj, SKILL_THBYKK_AMATERAS); } } } obj.sq_IntVectClear(); if(sq_GetSkillLevel(obj, SKILL_THBYKK_NINJUTSU) > 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_IntVectPush(SKILL_THBYKK_AMATERAS); obj.sq_IntVectPush(STATE_THBYKK_AMATERAS); obj.sq_AddSetStatePacket(STATE_THBYKK_NINJUTSU, STATE_PRIORITY_IGNORE_FORCE, true); return true; } else obj.sq_IntVectPush(0); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_THBYKK_AMATERAS, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Amateras(obj) { if (!obj) return false; return true; } function onSetState_Amateras(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_THBYKK_AMATERAS_CASTING_BODY); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "amateras_casting_body"); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); local speedRate = 5000 / currentAni.getDelaySum(0, 0); obj.getVar("kunoichiSpeedRateSave").setInt(0, speedRate); local ninjutsuPhase = obj.sq_GetVectorData(datas, 1); obj.getVar("AmaterasSet").setInt(0, ninjutsuPhase); break; } } function onEndCurrentAni_Amateras(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_Amateras(obj) { if(!obj) return; } function onKeyFrameFlag_Amateras(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: obj.sq_PlaySound("R_TF_AMATERAS"); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_AMATERAS, -1, 0, 1.0); local totalDamage_laser = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_AMATERAS, -1, 1, 1.0); local laserMax = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_AMATERAS, -1, 2, 1.0) + 100; local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_AMATERAS); local ninjutsuPhase = obj.getVar("AmaterasSet").getInt(0); if(ninjutsuPhase > 0){ switch(ninjutsuPhase){ case 1: case 2: case 3: local addRate = sq_GetLevelData(obj, SKILL_THBYKK_YAMATAOROCHI, 6, skillLevel); totalDamage = totalDamage * (100 + addRate) / 100; totalDamage_laser = totalDamage_laser * (100 + addRate) / 100; break; case 4: case 5: case 6: local addRate = sq_GetLevelData(obj, SKILL_THBYKK_YAMATAOROCHI, 9, skillLevel); totalDamage = totalDamage * (100 + addRate) / 100; totalDamage_laser = totalDamage_laser * (100 + addRate) / 100; break; } } local range = sq_GetIntData(obj, SKILL_THBYKK_AMATERAS, 7); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 250,sq_GetDirection(obj),3,SKILL_THBYKK_AMATERAS,1,totalDamage,totalDamage_laser,laserMax,range,0,0,0,0); obj.getVar("AmaterasObj").clear_obj_vector(); obj.getVar("Amateras").clear_obj_vector(); break; } return true; } function onTimeEvent_Amateras(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_Amateras(obj, new_state) { if(!obj) return; if(obj.getVar("createLeaveTraceObj").getBool(0)){ obj.getVar("createLeaveTraceObj").setBool(0, false); local subState = obj.getSkillSubState(); local startFrameIndex = sq_GetCurrentFrameIndex(obj); local ninjutsuPhase = obj.getVar("SkyRoadsSet").getInt(0); // print("subState = "+subState); // print("startFrameIndex = "+startFrameIndex); // print("ninjutsuPhase = "+ninjutsuPhase); createLeaveTraceObj(obj, SKILL_THBYKK_AMATERAS, STATE_THBYKK_AMATERAS, subState, startFrameIndex, ninjutsuPhase); } } //火焰灼空:草薙劍 function checkExecutableSkill_SwordOfKusanagi(obj) { if (!obj) return false; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) return false; local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_SWORDOFKUSANAGI); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_THBYKK_SWORDOFKUSANAGI, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_SwordOfKusanagi(obj) { if (!obj) return false; return true; } function onSetState_SwordOfKusanagi(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_THBYKK_SWORDOFKUSANAGICAST); obj.sq_PlaySound("R_TF_SWORD_KUSANAGI_01"); break; case 1: obj.sq_SetCurrentAnimation(ANI_THBYKK_SWORDOFKUSANAGI_CATCHBODY); obj.sq_PlaySound("TF_SWORD_KUSANAGI_03"); break; case 2: obj.sq_SetCurrentAnimation(ANI_THBYKK_SWORDOFKUSANAGIEND_BODY); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "swordofkusanagiend_body"); obj.getVar("SwordOfKusanagiBool").setBool(1, false); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_SwordOfKusanagi(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_SwordOfKusanagi(obj) { if(!obj) return; } function onKeyFrameFlag_SwordOfKusanagi(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 101: case 102: sq_SetMyShake(obj, 1, 50); break; case 103: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SWORDOFKUSANAGI, -1, 1, 1.0); local totalDamage_loop = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SWORDOFKUSANAGI, -1, 2, 1.0); local lifeTime = sq_GetIntData(obj, SKILL_THBYKK_SWORDOFKUSANAGI, 0); obj.getVar("SwordOfKusanagi").clear_obj_vector(); obj.getVar("SwordOfKusanagiBool").setBool(0, true); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 182, 0, 3,sq_GetDirection(obj),3,SKILL_THBYKK_SWORDOFKUSANAGI,1,totalDamage,totalDamage_loop,lifeTime,0,0,0,0,0); break; case 201: obj.sq_PlaySound("SWORD_KUSANAGI_EQUIP"); local atkObj = obj.getVar("SwordOfKusanagi").get_obj_vector(0); if(atkObj){ local colObj = sq_GetCNRDObjectToCollisionObject(atkObj); colObj.removeAllTimeEvent(); colObj.setTimeEvent(3, 1000, 1, true); } if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, true, APDPATH_SWORDOFKUSANAGI_BUFF, true); obj.getVar("SwordOfKusanagiBool").setBool(1, true); break; case 301: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SWORDOFKUSANAGI, -1, 3, 1.0); local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SWORDOFKUSANAGI, -1, 4, 1.0); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, -1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_SWORDOFKUSANAGI,3,totalDamage,totalDamage_exp,0,0,0,0,0,0); sq_flashScreen(obj,80,4000,1000,166, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; } return true; } function onTimeEvent_SwordOfKusanagi(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_SwordOfKusanagi(obj, new_state) { if(!obj) return; } function onStart_appendage_swordofkusanagi_buff(appendage) { local parentObj = appendage.getParent(); local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_THBYKK_SWORDOFKUSANAGI, sq_GetSkillLevel(obj, SKILL_THBYKK_SWORDOFKUSANAGI)); local buffTime = sq_GetIntData(obj, SKILL_THBYKK_SWORDOFKUSANAGI, 2); appendage.sq_SetValidTime(buffTime); local attackSpeed = sq_GetIntData(obj, SKILL_THBYKK_SWORDOFKUSANAGI, 15); local change_appendage = appendage.sq_getChangeStatus("swordofkusanagi_buff"); if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("swordofkusanagi_buff",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()); } } function onEnd_appendage_swordofkusanagi_buff(appendage) { if(!appendage) return; local parentObj = appendage.getParent(); local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); if(obj && obj.getState() != STATE_DIE){ if(obj.getVar("SwordOfKusanagiBool").getBool(1)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(STATE_THBYKK_SWORDOFKUSANAGI, STATE_PRIORITY_IGNORE_FORCE, true); } obj.getVar("SwordOfKusanagiBool").setBool(1, false); } } function proc_appendage_swordofkusanagi_buff(appendage) { if(!appendage) return; local parentObj = appendage.getParent(); if(!parentObj || parentObj.getState() == STATE_DIE){ appendage.setValid(false); return; } } //勾玉之火:鐮鼬 function checkExecutableSkill_JadeKamaitachi(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_THBYKK_JADEKAMAITACHI); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_THBYKK_JADEKAMAITACHI, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_JadeKamaitachi(obj) { if (!obj) return false; return true; } function onSetState_JadeKamaitachi(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_THBYKK_JADEKAMAITACHIBODY_01); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "jadekamaitachibody_01"); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); sq_ClearAttackBox(currentAni); local speedRate = 12000 / currentAni.getDelaySum(0, 0); obj.getVar("kunoichiSpeedRateSave").setInt(0, speedRate); local delay1 = 60000 / speedRate, delay2 = 2000 / speedRate; sq_flashScreen(obj,delay1,0,delay2,178, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); //`disappearJade_Renewal` 0 0 0 sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/3kunoichi_bykk/jadekamaitachi/renewal/jadekamaitachi_10.ani", 0, 0, 0); if(sq_getRandom(1, 100) > 50) obj.sq_PlaySound("TF_JADE_KAMAITACHI_01_A"); else obj.sq_PlaySound("TF_JADE_KAMAITACHI_01_B"); break; } } function onEndCurrentAni_JadeKamaitachi(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_JadeKamaitachi(obj) { if(!obj) return; } function onKeyFrameFlag_JadeKamaitachi(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 101: obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/jadekamaitachi/renewal/jadekamaitachibody_03.ani"), 0, 0); obj.sq_AddStateLayerAnimation(10002,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/jadekamaitachi/renewal/jadekamaitachibody_04.ani"), 0, 0); break; case 102: obj.sq_PlaySound("TF_JADE_KAMAITACHI_02_C"); obj.sq_PlaySound("JADE_KAMAITACHI_READY"); break; case 103: sq_SetMyShake(obj, 5, 80); break; case 104: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_JADEKAMAITACHI, -1, 1, 1.0); local totalDamage_exp = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_JADEKAMAITACHI, -1, 2, 1.0); local addNumber = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_JADEKAMAITACHI, -1, 3, 1.0) + 100; local hitMax = sq_GetIntData(obj, SKILL_THBYKK_JADEKAMAITACHI, 5); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,350,0,0,sq_GetDirection(obj),3,SKILL_THBYKK_JADEKAMAITACHI,1,totalDamage,totalDamage_exp,addNumber,hitMax,0,0,0,0); break; } return true; } function onTimeEvent_JadeKamaitachi(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_JadeKamaitachi(obj, new_state) { if(!obj) return; }