Rindro-Sqr/user/114.66.51.249/8_thief_5.c

3468 lines
133 KiB
C

/////////////////////忍者/////////////////////////////////////////////////////////////
//忍术精通
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;
}