3468 lines
133 KiB
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;
|
|
}
|
|
|