Rindro-Sqr/user/114.66.51.249/3_atswordman_8.c

3623 lines
136 KiB
C
Raw Normal View History

2025-11-08 12:21:06 +08:00
function checkExecutableSkill_Cometblade_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_COMETBLADE);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_COMETBLADE, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function onSetState_Cometblade_bykk(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(ANIMATION_VAGABOND_COMETBLADE03ATKB_BODY);
obj.getVar("cometblade_move").setInt(10, sq_GetXPos(obj));//baseX
obj.getVar("cometblade_move").setInt(11, sq_GetZPos(obj));//baseZ
obj.getVar("cometblade_move").setInt(12, 400);//moveX
obj.getVar("cometblade_move").setInt(13, 0);//moveZ
obj.getVar("cometblade").setBool(0, false);
obj.sq_PlaySound("COMET_BLADE_DASH");
local currentAni = obj.getCurrentAnimation();
sq_ClearAttackBox(currentAni);
local delay = currentAni.getDelaySum(0, 0);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_COMETBLADE);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_COMETBLADE, 1, skill_level);
local sizeRate = 100;
local isStone = sq_GetIntData(obj, SKILL_VAGABOND_COMETBLADE, 9);
if((isStone > 0 && isStone != 50) || COMETBLADE_STONE > 0){
totalDamage = totalDamage * 2; sizeRate = 125;
if(sq_GetIntData(obj, SKILL_VAGABOND_COMETBLADE, 9) > 50) sizeRate = 188;
}
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, 0, obj.getDirection(), 3, SKILL_VAGABOND_COMETBLADE, 1, totalDamage, sizeRate, delay, 0, 0, 0, 0, 0, 1);
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COMETBLADE04ATKLIFT_BODY);
obj.sq_PlaySound("COMET_BLADE_SWISH");
obj.getVar("cometblade_move").setInt(10, sq_GetXPos(obj));//baseX
obj.getVar("cometblade_move").setInt(11, sq_GetZPos(obj));//baseZ
obj.getVar("cometblade_move").setInt(12, -150);//moveX
obj.getVar("cometblade_move").setInt(13, 250);//moveZ
obj.getVar("cometblade").setBool(1, false);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_COMETBLADE);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_COMETBLADE, 2, skill_level);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 167));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
case 2:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COMETBLADE04ATKFIXSWORD_BODY);
obj.getVar("cometblade_move").setInt(10, sq_GetXPos(obj));//baseX
obj.getVar("cometblade_move").setInt(11, sq_GetZPos(obj));//baseZ
obj.getVar("cometblade_move").setInt(12, -50);//moveX
obj.getVar("cometblade_move").setInt(13, -180);//moveZ
obj.getVar("cometblade").setBool(2, false);
obj.sq_PlaySound("COMET_BLADE_INDENT");
obj.resetHitObjectList();
break;
case 3:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COMETBLADE04ATKREADYSMASH_BODY);
obj.getVar("cometblade_move").setInt(10, sq_GetXPos(obj));//baseX
obj.getVar("cometblade_move").setInt(11, sq_GetZPos(obj));//baseZ
obj.getVar("cometblade_move").setInt(12, -200);//moveX
obj.getVar("cometblade_move").setInt(13, 180);//moveZ
obj.sq_PlaySound("COMET_BLADE_FLY");
break;
case 4:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COMETBLADE04ATKSMASH_BODY);
obj.getVar("cometblade_move").setInt(10, sq_GetXPos(obj));//baseX
obj.getVar("cometblade_move").setInt(11, sq_GetZPos(obj));//baseZ
obj.getVar("cometblade_move").setInt(12, 0);//moveX
obj.getVar("cometblade_move").setInt(13, -sq_GetZPos(obj));//moveZ
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atcometblade/liftattackeffect.ani", 2, 0, -1);
sq_moveWithParent(obj, pooledObj);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_COMETBLADE);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_COMETBLADE, 3, skill_level);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 168));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEnterFrame_Cometblade_bykk(obj, frameIndex)
{
if(!obj || !obj.isMyControlObject()) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(frameIndex == 1){
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atcometblade/cutsmoke.ani", 0, 0, 0);
sq_flashScreen(obj, 50, 200, 400, 204, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 10, 200);
}
else if(frameIndex == 14 && obj.getVar("cometblade").getBool(0) == true){
if(sq_GetIntData(obj, SKILL_VAGABOND_COMETBLADE, 9) > 0 || COMETBLADE_STONE > 0) break;
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_COMETBLADE, STATE_PRIORITY_IGNORE_FORCE, true);
}
if(frameIndex == 14 && (sq_GetIntData(obj, SKILL_VAGABOND_COMETBLADE, 9) > 0 || COMETBLADE_STONE > 0)){
local currentAni = obj.getCurrentAnimation();
currentAni.setSpeedRate(166.67);
}
break;
case 2:
if(frameIndex == 2){
sq_flashScreen(obj, 30, 150, 200, 154, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 10, 200);
local aniPath = "character/swordman/effect/animation/atcometblade/finishfloor_00.ani"
local aniPath2 = "character/swordman/effect/animation/atcometblade/finishfixsword.ani"
createOnlyDrawObject_AtSwordMan_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM);
createOnlyDrawObject_AtSwordMan_bykk(obj,aniPath2,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL);
}
break;
case 4:
switch(frameIndex){
case 1:
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atcometblade/finishfixsword_eff2_a.ani", 188, 0, -sq_GetZPos(obj));
break;
case 2:
obj.sq_PlaySound("COMET_BLADE_FINISH");
sq_flashScreen(obj, 30, 150, 250, 205, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 20, 200);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atcometblade/finishsmokesmash.ani", 188, 0, 0);
obj.getVar("rapid_step_enable").setBool(0, true);
obj.getVar("EnableHermitTripleStep").setBool(0, true);
break;
case 10:
// sq_CreateParticle("character/swordman/effect/particle/atcometbladefinishleaf.ptl", obj, 0, 5, 0, true, 10, 0, 3);
// sq_CreateParticle("character/swordman/effect/particle/atcometbladefinishmiddleleaf.ptl", obj, 0, 5, 0, true, 10, 0, 5);
// sq_CreateParticle("character/swordman/effect/particle/atcometbladefinishsmallleaf.ptl", obj, 0, 5, 0, true, 1, 0, 10);
//local sizeRate = sq_getRandom(15, 90), rotateSet = sq_getRandom(0, 360);
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, 0, obj.getDirection(), 3, SKILL_VAGABOND_COMETBLADE, 2, 1, 15, 90, 0, 360, 15, 2, 0, 0);
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, 0, obj.getDirection(), 3, SKILL_VAGABOND_COMETBLADE, 2, 2, 20, 50, 0, 360, 15, 3, 0, 0);
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, 0, obj.getDirection(), 3, SKILL_VAGABOND_COMETBLADE, 2, 3, 2, 20, 0, 360, 20, 3, 0, 0);
break;
}
break;
}
}
function onChangeSkillEffect_Cometblade(obj, skillIndex, receiveData)
{
if(!obj || skillIndex != 220) return;
local type = receiveData.readDword();
if(type == 0)
obj.resetHitObjectList();
else if(type == 1)
{
local aptjarr = [
"character/swordman/effect/animation/atcometblade/finishfixsword.ani",
"character/swordman/effect/animation/atcometblade/finishfloor_00.ani"
];
foreach(path in aptjarr)
DarktemplerCreateAniPooledObj(obj, path, false, true, obj.getXPos(), obj.getYPos()-1, 0,1.0);
}
}
function onEndCurrentAni_Cometblade_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(sq_GetIntData(obj, SKILL_VAGABOND_COMETBLADE, 9) > 0 || COMETBLADE_STONE > 0) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj)));
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 1:
case 2:
if(obj.getVar("cometblade").getBool(subState) == true){
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_COMETBLADE, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 3:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_COMETBLADE, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 4:
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onAttack_Cometblade_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj || isStuck) return;
}
function onEndState_Cometblade_bykk(obj, newState)
{
if(!obj) return;
if(newState != SKILL_VAGABOND_COMETBLADE){
if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false);
if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false);
}
}
function onKeyFrameFlag_Cometblade_bykk(obj, flagIndex)
{
if (!obj) return;
}
function onProcCon_Cometblade_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){//位移
case 0:
case 1:
case 2:
case 3:
case 4:
if(obj.getVar("cometblade").getBool(subState) == false && subState < 3){
obj.setSkillCommandEnable(SKILL_VAGABOND_COMETBLADE, true);
if(sq_IsKeyDown(OPTION_HOTKEY_SKILL, ENUM_SUBKEY_TYPE_ALL) || obj.sq_IsEnterSkill(SKILL_VAGABOND_COMETBLADE) != -1){
obj.getVar("cometblade").setBool(subState, true);
}
}
local pAni = obj.getCurrentAnimation();
local currentT = sq_GetCurrentTime(pAni);
local fireT = pAni.getDelaySum(false);
if(subState == 2 || subState == 4) fireT = pAni.getDelaySum(0, 1);
else if(subState == 3) fireT = pAni.getDelaySum(0, 3);
else if(subState == 0) fireT = pAni.getDelaySum(0, 7);
if(currentT > fireT){
if(subState == 4) sq_setCurrentAxisPos(obj, 2, 0);
break;
}
local srcX = obj.getVar("cometblade_move").getInt(10);
local srcZ = obj.getVar("cometblade_move").getInt(11);
local MoveX = obj.getVar("cometblade_move").getInt(12);
local MoveZ = obj.getVar("cometblade_move").getInt(13);
if(subState == 4) MoveZ = -srcZ;
local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT);
local vz = sq_GetUniformVelocity(0, MoveZ, currentT, fireT);
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);
if(obj.isMovablePos(dstX, sq_GetYPos(obj))){
sq_setCurrentAxisPos(obj, 0, dstX);
sq_setCurrentAxisPos(obj, 2, srcZ + vz);
}
else{
obj.getVar("cometblade_move").setInt(10, sq_GetXPos(obj));
obj.getVar("cometblade_move").setInt(12, 0);
}
break;
case 2:
break;
case 3:
break;
case 6:
break;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Dualweapon_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_DUALWEAPON);
if (isUse){
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/3_vagabond/dualweapon/ap_dualweapon.nut");
if(addAppendage){
local weaponType = addAppendage.getVar().getInt(10);
if(weaponType == 4) addAppendage.getVar().setInt(10, 0);
else addAppendage.getVar().setInt(10, weaponType + 1);
switch(weaponType){
case 4: addAppendage.setBuffIconImage(63); break;//光
case 0: addAppendage.setBuffIconImage(62); break;//鈍
case 1: addAppendage.setBuffIconImage(60); break;//太
case 2: addAppendage.setBuffIconImage(61); break;//巨
case 3: addAppendage.setBuffIconImage(59); break;//短
}
}
return 1;
}
return 0;
}
function checkCommandEnable_Dualweapon_bykk(obj)
{
if (!obj) return 0;
return 1;
}
function AddAppend_Dualweapon(obj,index)
{
local appArr = [
"character/atswordman/2_vegabond/dualweapon/ap_dualweapon0.nut",
"character/atswordman/2_vegabond/dualweapon/ap_dualweapon1.nut",
"character/atswordman/2_vegabond/dualweapon/ap_dualweapon2.nut",
"character/atswordman/2_vegabond/dualweapon/ap_dualweapon3.nut",
"character/atswordman/2_vegabond/dualweapon/ap_dualweapon5.nut"
];
local apPath = appArr[index];
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, false);
if(appendage != null)
{
appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), 202, sq_GetSkillLevel(obj, 202));
CNSquirrelAppendage.sq_Append(appendage, obj, obj, true);
local incon = [59,60,62,61,63];
appendage.setBuffIconImage(incon[index]);
}
return index;
}
function checkAppend_Dualweapon(obj)
{
local index = 5;
local appArr = [
"character/atswordman/2_vegabond/dualweapon/ap_dualweapon0.nut",
"character/atswordman/2_vegabond/dualweapon/ap_dualweapon1.nut",
"character/atswordman/2_vegabond/dualweapon/ap_dualweapon2.nut",
"character/atswordman/2_vegabond/dualweapon/ap_dualweapon3.nut",
"character/atswordman/2_vegabond/dualweapon/ap_dualweapon5.nut"
];
foreach( key,path in appArr)
{
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, path))
return key;
}
return index;
}
function SetChrAniIndex_Dualweapon(obj,apdindex)
{
local index = 10;
local appArr = [526,520,517,523,514,0];
return appArr[apdindex];
}
function SetChrAtkIndex_Dualweapon(obj,apdindex)
{
local index = 10;
local appArr = [146,140,137,143,134,0];
return appArr[apdindex];
}
function Dualweapon_RemoveAppebd(obj)//???
{
local appArr = [
"character/atswordman/2_vegabond/dualweapon/ap_dualweapon0.nut",
"character/atswordman/2_vegabond/dualweapon/ap_dualweapon1.nut",
"character/atswordman/2_vegabond/dualweapon/ap_dualweapon2.nut",
"character/atswordman/2_vegabond/dualweapon/ap_dualweapon3.nut",
"character/atswordman/2_vegabond/dualweapon/ap_dualweapon5.nut"
];
foreach(path in appArr)
{
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, path))
CNSquirrelAppendage.sq_RemoveAppendage(obj, path);
}
obj.getVar("ChangeswordCurId").setInt(0, 0);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Earthpressure_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_EARTHPRESSURE);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_EARTHPRESSURE, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function onSetState_Earthpressure_bykk(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(ANIMATION_VAGABOND_EARTHPRESSUREBODY);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
obj.sq_PlaySound("EARTH_PRESSURE_UP");
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atearthpressure/earthpressureeffect_effect.ani", 0, 1, 0);
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(7,7);
local speedRate = 6000.0 / delay.tofloat();
local pAni = pooledObj.getCurrentAnimation();
pAni.setSpeedRate(speedRate);
break;
}
}
function onEndCurrentAni_Earthpressure_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onAttack_Earthpressure_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj || isStuck) return;
}
function onEnterFrame_Earthpressure_bykk(obj, frameIndex)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
switch(frameIndex){
case 6:
sq_SetMyShake(obj, 2, 250);
sq_flashScreen(obj, 0, 100, 0, 102,sq_RGB(192, 192, 192), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_BOTTOM);
break;
case 7:
obj.sq_PlaySound("SW_EARTH_PRESSURE");
obj.sq_PlaySound("EARTH_PRESSURE_DOWN");
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_EARTHPRESSURE, SKILL_VAGABOND_EARTHPRESSURE, 0, 1.0) + 100;
local range = sq_GetIntData(obj, SKILL_VAGABOND_EARTHPRESSURE, 0);
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(7,7);
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, 0, obj.getDirection(), 3, SKILL_VAGABOND_EARTHPRESSURE, 1, totalDamage, range, delay, 0, 0, 0, 0, 0, 1);
obj.getVar("rapid_step_enable").setBool(0, true);
obj.getVar("EnableHermitTripleStep").setBool(0, true);
break;
}
break;
}
}
function onEndState_Earthpressure_bykk(obj, newState)
{
if(!obj) return;
if(newState != SKILL_VAGABOND_EARTHPRESSURE){
if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false);
if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false);
}
}
function onKeyFrameFlag_Earthpressure_bykk(obj, flagIndex)
{
if (!obj) return;
}
function onProcCon_Earthpressure_bykk(obj)
{
if(!obj) return;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Fatalflower_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_FATALFLOWER);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_FATALFLOWER, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function onSetState_Fatalflower_bykk(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(ANIMATION_VAGABOND_FATALFLOWER_BODY);
obj.sq_SetXScrollStart(350, 200);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FATALFLOWER);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FATALFLOWER, 0, skill_level);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 172));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_Fatalflower_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_SetXScrollStop(100);
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onAttack_Fatalflower_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj || isStuck) return;
}
function onEnterFrame_Fatalflower_bykk(obj, frameIndex)
{
if(!obj || !obj.isMyControlObject()) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
switch(frameIndex){
case 0:
obj.sq_PlaySound("R_SW_FATAL_FLOWER_01");
sq_flashScreen(obj, 500, 2500, 500, 200, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
break;
case 4:
obj.sq_PlaySound("FATAL_FLOWER_START");
sq_SetMyShake(obj, 3, 120);
//`CreateFlower` 0 0 0
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FATALFLOWER);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FATALFLOWER, 1, skill_level);
local totalDamage2 = sq_GetLevelData(obj, SKILL_VAGABOND_FATALFLOWER, 4, skill_level);
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_FATALFLOWER) >= 9) totalDamage2 = totalDamage2 * 110 / 100;
local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger();
local hitMax = sq_GetLevelData(obj, SKILL_VAGABOND_FATALFLOWER, 3, skill_level);
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_FATALFLOWER) >= 6) hitMax = hitMax + 3;
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(0, 0);
local speedRate = 5400.0 / delay.tofloat();
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, -1, 0, obj.getDirection(), 3, SKILL_VAGABOND_FATALFLOWER, 1, totalDamage, hitMax, damageRate, delay, 0, 0, 0, 0, 0);
local pooledObj_1 = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/vagabond/animation/atfatalflower/newhellfireb_front_00.ani", 0, 0, 0);
local pooledObj_2 = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/vagabond/animation/atfatalflower/newhellfirea_00.ani", 0, 0, 0);
local pAni_1 = pooledObj_1.getCurrentAnimation();
local pAni_2 = pooledObj_2.getCurrentAnimation();
pAni_1.setSpeedRate(speedRate);
pAni_2.setSpeedRate(speedRate);
break;
case 21:
sq_SetMyShake(obj, 5, 300);
break;
case 30:
obj.sq_SendCreatePassiveObjectPacket(776103, 0, 120, 1, 800);
break;
case 41:
obj.sq_SendCreatePassiveObjectPacket(776103, 0, 120, 1, 400);
break;
case 43:
sq_SetMyShake(obj, 4, 180);
break;
case 46:
obj.sq_PlaySound("SW_SNAKEDANCE_03");
sq_SetMyShake(obj, 5, 300);
break;
case 50:
//`EnableHermitTripleStep` 0 0 0
//`rapid step enable` 0 0 0
obj.getVar("rapid_step_enable").setBool(0, true);
obj.getVar("EnableHermitTripleStep").setBool(0, true);
break;
}
break;
}
}
function onEndState_Fatalflower_bykk(obj, newState)
{
if(!obj) return;
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_FATALFLOWER) < 3) return;
local apPath = "character/atswordman/3_vagabond/fatalflower/ap_fatalflower.nut";
if(newState != SKILL_VAGABOND_FATALFLOWER){
obj.sq_SetXScrollStop(100);
local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, false);
if(addAppendage){
addAppendage.sq_SetValidTime(30000);
addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_VAGABOND_FATALFLOWER, sq_GetSkillLevel(obj, SKILL_VAGABOND_FATALFLOWER));
addAppendage.setEnableIsBuff(true);
CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true);
local CRITICAL_RATE = 15;
local change_appendage = addAppendage.sq_getChangeStatus("Fatalflower");
if(!change_appendage) change_appendage = addAppendage.sq_AddChangeStatus("Fatalflower", obj, obj, 0, 15, false, CRITICAL_RATE);
if(change_appendage){
change_appendage.clearParameter();
change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, CRITICAL_RATE.tofloat());
}
}
if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false);
if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false);
}
}
function onKeyFrameFlag_Fatalflower_bykk(obj, flagIndex)
{
if (!obj) return;
}
function onProcCon_Fatalflower_bykk(obj)
{
if(!obj) return;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Fistofexplosion_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(219);
if (isUse){
if(sq_GetIntData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 9) > 0) obj.getVar("Fistofexplosion_Bool").setBool(0, true);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
//obj.sq_IsEnterSkillLastKeyUnits(219);//蓄力
obj.sq_AddSetStatePacket(SKILL_VAGABOND_FISTOFEXPLOSION, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function onSetState_Fistofexplosion_bykk(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(ANIMATION_VAGABOND_FISTOFEXPLOSION_CASTSTART_BODY);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FISTOFEXPLOSION_CASTLOOP_BODY);
obj.sq_PlaySound("FIST_HELLFIRE_READY");
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
if(sq_GetIntData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 8) > 0 || FISTOFEXPLOSION_STONE > 0){
local speedRate = 100.0 * (1.0 / 0.6);
local currentAni = obj.getCurrentAnimation();
currentAni.setSpeedRate(speedRate);
}
break;
case 2:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FISTOFEXPLOSION_SHOOT_BODY);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
break;
}
}
function onEndCurrentAni_Fistofexplosion_bykk(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(SKILL_VAGABOND_FISTOFEXPLOSION, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 2:
if(obj.getVar("Fistofexplosion_Bool").getBool(0)){
obj.getVar("Fistofexplosion_Bool").setBool(0, false);
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_FISTOFEXPLOSION, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onAttack_Fistofexplosion_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj || isStuck) return;
}
function onEnterFrame_Fistofexplosion_bykk(obj, frameIndex)
{
if(!obj || !obj.isMyControlObject()) return;
local subState = obj.getSkillSubState();
switch(subState){
case 2:
switch(frameIndex){
case 1:
break;
case 2:
break;
}
break;
}
}
function onEndState_Fistofexplosion_bykk(obj, newState)
{
if(!obj) return;
if(newState != SKILL_VAGABOND_FISTOFEXPLOSION){
if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false);
if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false);
}
}
function onKeyFrameFlag_Fistofexplosion_bykk(obj, flagIndex)
{
if (!obj) return true;
local subState = obj.getSkillSubState();
if(subState != 2) return true;
switch(flagIndex){
case 1111:
obj.sq_PlaySound("FIST_HELLFIRE_BURST");
obj.sq_PlaySound("SW_SNAKEDANCE_03");
sq_SetMyShake(obj, 7, 180);
sq_flashScreen(obj, 0, 0, 150, 153,sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FISTOFEXPLOSION);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 2, skill_level);
local totalDamage2 = sq_GetLevelData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 1, skill_level);
local hitMax = sq_GetLevelData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 0, skill_level);
local lifeTime = sq_GetIntData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 2);
local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 3);
local sub = 0;
if(sq_GetIntData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 8) > 0 || FISTOFEXPLOSION_STONE > 0){
sub = 1;
lifeTime = lifeTime + 1000;
sizeRate = (sizeRate.tofloat() * 1.25).tointeger();
hitMax = hitMax - 2;
totalDamage = (totalDamage.tofloat() * 1.27).tointeger();
totalDamage2 = totalDamage2 + 311;
}
local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger();
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 25, 0, 85, obj.getDirection(), 3, SKILL_VAGABOND_FISTOFEXPLOSION, 1, totalDamage, sizeRate, lifeTime, hitMax, damageRate, sub, 0, 0, 1);
break;
case 1112:
obj.getVar("rapid_step_enable").setBool(0, true);
obj.getVar("EnableHermitTripleStep").setBool(0, true);
break;
}
return true;
}
function onProcCon_Fistofexplosion_bykk(obj)
{
if(!obj) return;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Fivecircle_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_FIVECIRCLE);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_FIVECIRCLE, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function onSetState_Fivecircle_bykk(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(ANIMATION_VAGABOND_FIVECIRCLE_START_BODY);
obj.sq_PlaySound("SW_FIVE_CIRCLE");
local castTime = sq_GetCastTime(obj, SKILL_VAGABOND_FIVECIRCLE, sq_GetSkillLevel(obj, SKILL_VAGABOND_FIVECIRCLE));
local animation = sq_GetCurrentAnimation(obj);
local castAniTime = sq_GetDelaySum(animation);
local speedRate = castAniTime.tofloat() / castTime.tofloat();
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate);
sq_StartDrawCastGauge(obj, castAniTime, true);
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FIVECIRCLE_END_BODY);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
break;
}
}
function onEndCurrentAni_Fivecircle_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_FIVECIRCLE, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 1:
local apdPath = "character/atswordman/3_vagabond/fivecircle/ap_fivecircle.nut";
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath);
local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, false);
addAppendage.sq_AddEffectFront("character/swordman/effect/animation/atfivecircle/buffeffect/buff_front_1.ani");
addAppendage.sq_AddEffectBack("character/swordman/effect/animation/atfivecircle/buffeffect/buff_back_1.ani");
addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_VAGABOND_FIVECIRCLE, sq_GetSkillLevel(obj, SKILL_VAGABOND_FIVECIRCLE));
addAppendage.setEnableIsBuff(true);
CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FIVECIRCLE);
local speedRate = sq_GetLevelData(obj, SKILL_VAGABOND_FIVECIRCLE, 2, skill_level) * 5;
// local hitRate = sq_GetLevelData(obj, SKILL_VAGABOND_FIVECIRCLE, 4, skill_level) * 5;
local change_appendage = addAppendage.sq_getChangeStatus("fivecircle");
if(!change_appendage) change_appendage = addAppendage.sq_AddChangeStatus("fivecircle", obj, obj, 0, 15, false, 1000);
if(change_appendage){
change_appendage.clearParameter();
// change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_DAMAGE_RATE, false, (hitRate * 0.1 / 0.667).tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (speedRate).tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (speedRate).tofloat());
}
setSkillDamageRate_VagaBond_bykk(obj);
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onEnterFrame_Fivecircle_bykk(obj, frameIndex)
{
if(!obj) return;
if(obj.getSkillSubState() == 0 && frameIndex == 3){
obj.sq_PlaySound("SW_FIVE_CIRCLE");
obj.sq_PlaySound("FIVE_CIRCLE_CAST");
}
}
function onEndState_Fivecircle_bykk(obj, newState)
{
if(!obj) return;
if(newState != SKILL_VAGABOND_FIVECIRCLE) sq_EndDrawCastGauge(obj);
}
function onProcCon_Fivecircle_bykk(obj)
{
if(!obj) return;
}
function CreateBuffCutin(obj,CutinPath)
{
local ani = sq_CreateAnimation("",CutinPath);
local pooledObj = sq_CreatePooledObject(ani,true);
local objectManager = obj.getObjectManager();
local xPos = obj.getXPos();
local yPos = objectManager.getFieldYPos(0, 0, 7);
pooledObj = sq_SetEnumDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM);
pooledObj.setCurrentPos(xPos +480,yPos ,0);
sq_AddObject(obj,pooledObj,2,false);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Flowerbladedance_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_FLOWERBLADEDANCE);
if (isUse){
obj.getVar("flowerbladedance_move").setInt(10, sq_GetXPos(obj));
obj.getVar("flowerbladedance_move").setInt(2, 150);
obj.getVar("flowerbladedance").setBool(0, false);
obj.getVar("flowerbladedance_jump").setBool(0, false);
obj.sq_IntVectClear();
if(obj.sq_GetState() == STATE_JUMP){
obj.sq_IntVectPush(4);
obj.getVar("flowerbladedance_move").setInt(2, 250);
obj.getVar("flowerbladedance_jump").setBool(0, true);
}
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_FLOWERBLADEDANCE, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function onSetState_Flowerbladedance_bykk(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(ANIMATION_VAGABOND_FLOWERBLADEDANCE_CAST_BODY);
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FLOWERBLADEDANCE_FIRST_BODY);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FLOWERBLADEDANCE);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 0, skill_level);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 175));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
case 2:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FLOWERBLADEDANCE_SECOND_STARTJUMP_BODY);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FLOWERBLADEDANCE);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 1, skill_level);
if(sq_GetIntData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 13) > 0 || FLOWERBLADEDANCE_STONE > 0){
totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 4, skill_level) * 133 / 100;
}
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 176));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/secondjump/delay_jump_b.ani", 0, 0, 0);
break;
case 3:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FLOWERBLADEDANCE_SECOND_BODY);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FLOWERBLADEDANCE);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 4, skill_level);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 176));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/secondjump/delay_jump_b.ani", 0, 0, 0);
break;
case 4:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FLOWERBLADEDANCE_THIRD_BODY);
obj.getVar("flowerbladedance_move").setInt(0, sq_GetXPos(obj));
obj.getVar("flowerbladedance_move").setInt(1, sq_GetZPos(obj));
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(0, 1);
obj.setTimeEvent(10, delaySum / 10, 10, true);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FLOWERBLADEDANCE);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 2, skill_level);
if(obj.getVar("flowerbladedance_jump").getBool(0)) totalDamage = totalDamage + sq_GetLevelData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 4, skill_level);
if(sq_GetIntData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 13) > 0 || FLOWERBLADEDANCE_STONE > 0){
totalDamage = totalDamage * 133 / 100;
}
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 173));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
case 5:
if(obj.getVar("flowerbladedance").getBool(0)) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FLOWERBLADEDANCE_SPIN_BODY);
else{
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FLOWERBLADEDANCE_SPIN2_BODY);
}
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FLOWERBLADEDANCE);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 3, skill_level);
if(obj.getVar("flowerbladedance_jump").getBool(0)) totalDamage = totalDamage * 2;
if(sq_GetIntData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 13) > 0 || FLOWERBLADEDANCE_STONE > 0){
totalDamage = totalDamage * 150 * 133 / 10000;
}
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 174));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/spin/downattack_dust03.ani", 0, 0, 0);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_Flowerbladedance_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
case 2:
case 3:
case 4:
if(sq_GetIntData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 13) > 0 || FLOWERBLADEDANCE_STONE > 0){
if(subState == 0){
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_FLOWERBLADEDANCE, STATE_PRIORITY_IGNORE_FORCE, true);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/first/delay_back_dust01.ani", 0, 0, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/first/delay_jump_a.ani", 100, 0, 100);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/second/flowerbladedance_delay_second_linedodge.ani", 100, 0, 100);
sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 155));
sq_SimpleMoveToNearMovablePos(obj, 200);
sq_setCurrentAxisPos(obj, 2, 250);
break;
}
else if(subState == 2){
obj.sq_IntVectClear();
obj.sq_IntVectPush(4);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_FLOWERBLADEDANCE, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_FLOWERBLADEDANCE, STATE_PRIORITY_IGNORE_FORCE, true);
switch(subState){
case 0:
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/dasheffect_light.ani", 0, 0, 0);
sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 100));
sq_SimpleMoveToNearMovablePos(obj, 200);
break;
case 1:
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/first/delay_back_dust01.ani", 0, 0, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/first/delay_jump_a.ani", 100, 0, 100);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/second/flowerbladedance_delay_second_linedodge.ani", 100, 0, 100);
sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 155));
sq_SimpleMoveToNearMovablePos(obj, 200);
sq_setCurrentAxisPos(obj, 2, 250);
break;
case 4:
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/dasheffectdown_jumpline.ani", 0, 0, 0);
break;
}
break;
case 5:
// if(obj.getVar("flowerbladedance").getBool(0) == false) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj)));
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onTimeEvent_Flowerbladedance_bykk(obj, timeEventIndex, timeEventCount)
{
switch(timeEventIndex){
case 10:
local srcX = obj.getVar("flowerbladedance_move").getInt(0);
local srcZ = obj.getVar("flowerbladedance_move").getInt(1);
local moveX = obj.getVar("flowerbladedance_move").getInt(2);
local v = sq_GetUniformVelocity(0, moveX, timeEventCount, 10);
local vz = sq_GetUniformVelocity(srcZ, 0, timeEventCount, 10);
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);
sq_setCurrentAxisPos(obj, 2, vz);
if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);
else{
obj.getVar("flowerbladedance_move").setInt(0, sq_GetXPos(obj));
obj.getVar("flowerbladedance_move").setInt(2, 0);
}
break;
}
}
function onAttack_Flowerbladedance_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj || isStuck) return;
}
function onEnterFrame_Flowerbladedance_bykk(obj, frameIndex)
{
if(!obj || !obj.isMyControlObject()) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
switch(frameIndex){
case 0: obj.sq_PlaySound("SW_FLOWER_BLADE_DANCE_01"); break;
case 1:
sq_SetMyShake(obj, 1, 30);
sq_flashScreen(obj, 0, 50, 0, 89, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
break;
}
break;
case 1:
switch(frameIndex){
case 0: sq_flashScreen(obj, 0, 20, 0, 127, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break;
case 1:
obj.sq_PlaySound("FLOWER_BLADE_DANCE_01");
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/first/flowerbladedance_delay_first002.ani", 0, 0, 0);
break;
case 3:
obj.resetHitObjectList();
break;
}
break;
case 2:
switch(frameIndex){
case 0:
obj.sq_PlaySound("SW_FLOWER_BLADE_DANCE_02");
obj.sq_PlaySound("FLOWER_BLADE_DANCE_JUMP");
sq_SetMyShake(obj, 1, 150);
break;
case 1:
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/secondjump/flowerbladedance_delay_second001.ani", 0, 0, 0);
break;
case 4:
obj.resetHitObjectList();
break;
}
break;
case 3:
switch(frameIndex){
case 0:
sq_SetMyShake(obj, 1, 150);
sq_flashScreen(obj, 0, 20, 0, 127, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
obj.sq_PlaySound("SW_FLOWER_BLADE_DANCE_02");
obj.sq_PlaySound("FLOWER_BLADE_DANCE_JUMP");
break;
case 1:
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/second/flowerbladedance_delay_second001.ani", 0, 0, 0);
break;
case 3:
obj.resetHitObjectList();
obj.sq_PlaySound("FLOWER_BLADE_DANCE_02");
break;
}
break;
case 4:
switch(frameIndex){
case 0:
obj.sq_PlaySound("FLOWER_BLADE_DANCE_03");
obj.sq_PlaySound("SW_FLOWER_BLADE_DANCE_03");
sq_flashScreen(obj, 0, 20, 0, 127, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 3, 160);
break;
case 3:
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/third/downattack_dust02.ani", 0, 0, 0);
break;
case 5:
obj.resetHitObjectList();
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/third/flowerbladedance_delay_front_third004.ani", 0, 0, 0);
break;
}
break;
case 5:
switch(frameIndex){
case 0: sq_flashScreen(obj, 10, 50, 100, 178, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break;
case 2:
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/dasheffect_light.ani", -500, 0, 70);
case 4:
sq_SetMyShake(obj, 5, 320);
//`finish spin` 7 0 -12
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/spin/flower_spin.ani", 7, 0, -12);
break;
case 6:
sq_SetMyShake(obj, 1, 50);
//`EnableHermitTripleStep` 0 0 0
//`rapid step enable` 0 0 0
obj.getVar("rapid_step_enable").setBool(0, true);
obj.getVar("EnableHermitTripleStep").setBool(0, true);
break;
}
break;
}
}
function onChangeSkillEffect_Flowerbladedance_bykk(obj, skillIndex, receiveData)
{
if(!obj) return;
}
function onEndState_Flowerbladedance_bykk(obj, newState)
{
if(!obj) return;
if(newState != SKILL_VAGABOND_FLOWERBLADEDANCE){
if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false);
if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false);
}
}
function onKeyFrameFlag_Flowerbladedance_bykk(obj, flagIndex)
{
if (!obj) return;
}
function onProcCon_Flowerbladedance_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
local curAni = sq_GetCurrentAnimation(obj);
local curframe = obj.sq_GetCurrentFrameIndex(curAni);
local ststeTime = obj.sq_GetStateTimer();
switch(subState){
case 0:
case 1:
case 2:
case 3:
case 4:
if(obj.getVar("flowerbladedance").getBool(0) == false){
if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT)) obj.getVar("flowerbladedance").setBool(0, true);
}
break;
case 5:
if(obj.getVar("flowerbladedance").getBool(0) == false){
local pAni = obj.getCurrentAnimation();
local currentT = sq_GetCurrentTime(pAni);
local fireT = pAni.getDelaySum(0, 7);
local srcX = obj.getVar("flowerbladedance_move").getInt(0);
local baseX = obj.getVar("flowerbladedance_move").getInt(10);
local v = sq_GetUniformVelocity(srcX, baseX, currentT, fireT);
sq_setCurrentAxisPos(obj, 0, v);
}
break;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Gonewiththepetal_bykk(obj)
{
if (!obj) return 0;
local isUseSkill = obj.sq_IsUseSkill(249);
if (isUseSkill){
obj.sq_IntVectClear();
if(obj.getState() == STATE_JUMP) obj.sq_IntVectPush(10);
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_GONEWITHTHEPETAL, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function onSetState_Gonewiththepetal_bykk(obj, state, datas, isResetTimer)
{
obj.sq_StopMove();
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
switch(subState){
case 0:
case 10:
if(subState == 0){
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_GONEWITHTHEPETALREADY_BODY);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atgonewiththepetal/ready_07.ani", 0, 1, 0);
}
else if(subState == 10){
obj.sq_ZStop();
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_GONEWITHTHEPETALJUMPREADY_BODY);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atgonewiththepetal/jumpready_07.ani", 0, 1, 0);
}
obj.getVar("gone_target").clear_obj_vector();
obj.getVar("gone_target_boss").clear_obj_vector();
obj.getVar("gone_target_named").clear_obj_vector();
obj.getVar("gone_target_normal").clear_obj_vector();
local aniPath = "character/swordman/effect/animation/atgonewiththepetal/rangecheck_01.ani";
createOnlyDrawObject_AtSwordMan_bykk(obj, aniPath, true, obj.getDirection(), sq_GetXPos(obj), sq_GetYPos(obj), 0, ENUM_DRAWLAYER_BOTTOM);
local rangeX = sq_GetIntData(obj, SKILL_VAGABOND_GONEWITHTHEPETAL, 0);
local rangeY = sq_GetIntData(obj, SKILL_VAGABOND_GONEWITHTHEPETAL, 1);
local objectManager = obj.getObjectManager();//得到對象管理器
local objectNumber = objectManager.getCollisionObjectNumber();//總數
for (local i = 0; i < objectNumber; i++){
local object = objectManager.getCollisionObject(i);//得到控制類對象
if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && isFrontObject(obj,object) && obj.isEnemy(object)){
local activeObj = sq_GetCNRDObjectToActiveObject(object);
if(sq_Abs(sq_GetXPos(activeObj) - sq_GetXPos(obj)) <= rangeX && sq_Abs(sq_GetYPos(activeObj) - sq_GetYPos(obj)) <= rangeY){
if(sq_IsBoss(activeObj)) obj.getVar("gone_target_boss").push_obj_vector(activeObj);
else if(sq_IsNamed(activeObj)) obj.getVar("gone_target_named").push_obj_vector(activeObj);
else obj.getVar("gone_target_normal").push_obj_vector(activeObj);
}
}
}
if(obj.getVar("gone_target_boss").get_obj_vector_size() > 0) obj.getVar("gone_target").push_obj_vector(obj.getVar("gone_target_boss").get_obj_vector(0));
else if(obj.getVar("gone_target_named").get_obj_vector_size() > 0) obj.getVar("gone_target").push_obj_vector(obj.getVar("gone_target_named").get_obj_vector(0));
else if(obj.getVar("gone_target_normal").get_obj_vector_size() > 0) obj.getVar("gone_target").push_obj_vector(obj.getVar("gone_target_normal").get_obj_vector(0));
break;
case 1:
case 11:
if(subState == 1) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_GONEWITHTHEPETALATTACK_BODY);
else if(subState == 11) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_GONEWITHTHEPETALJUMPATTACK_BODY);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_GONEWITHTHEPETAL, SKILL_VAGABOND_GONEWITHTHEPETAL, 0, 1.0);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 175));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atgonewiththepetal/attackb_02.ani", 150, 0, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atgonewiththepetal/attacka.ani", 150, 1, 0);
local aniPath = "character/swordman/effect/animation/atgonewiththepetal/attackc.ani";
createOnlyDrawObject_AtSwordMan_bykk(obj, aniPath, true, obj.getDirection(), sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 150), sq_GetYPos(obj), 0, ENUM_DRAWLAYER_BOTTOM);
break;
}
}
function onTimeEvent_Gonewiththepetal_bykk(obj, timeEventIndex, timeEventCount)
{
switch(timeEventIndex){
case 1:
if(obj.getVar("gone_target").get_obj_vector_size() > 0){
local targetObj = obj.getVar("gone_target").get_obj_vector(0);
local moveX = sq_GetDistancePos(sq_GetXPos(targetObj), obj.getDirection(), -130);
sq_setCurrentAxisPos(obj, 0, moveX);
sq_setCurrentAxisPos(obj, 1, sq_GetYPos(targetObj));
local subState = obj.getSkillSubState();
if(subState == 10) sq_setCurrentAxisPos(obj, 2, 0);
obj.sq_IntVectClear();
if(subState == 0) obj.sq_IntVectPush(1);
else if(subState == 10) obj.sq_IntVectPush(11);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_GONEWITHTHEPETAL, STATE_PRIORITY_IGNORE_FORCE, true);
}
else{
if(obj.getSkillSubState() == 10){
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_IGNORE_FORCE, true);
}
else{
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
break;
}
}
function onAttack_Gonewiththepetal_bykk(obj, damager, boundingBox, isStuck)
{
if (!obj || !damager) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
case 11:
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_GONEWITHTHEPETAL, SKILL_VAGABOND_GONEWITHTHEPETAL, 1, 1.0) + 100;
local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_GONEWITHTHEPETAL, SKILL_VAGABOND_GONEWITHTHEPETAL, 2, 1.0) + 100;
local hitMax = sq_GetIntData(obj, SKILL_VAGABOND_GONEWITHTHEPETAL, 8);
if(sq_GetIntData(obj, SKILL_VAGABOND_GONEWITHTHEPETAL, 18) > 0) hitMax = 1;
local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger();
local group = sq_GetGroup(damager);
local uniqueId = sq_GetUniqueId(damager);
cearteSkillPassiveObj_AtSwordMan_bykk(obj, damager, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, sq_GetObjectHeight(damager) / 2 * 0, obj.getDirection(), 3,SKILL_VAGABOND_GONEWITHTHEPETAL, 1, totalDamage, hitMax, damageRate, group, uniqueId, 0, 0, 0, 1);
}
break;
}
}
function onEnterFrame_Gonewiththepetal_bykk(obj, frameIndex)
{
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 10:
switch(frameIndex){
case 0:
obj.sq_PlaySound("R_SW_GONE_WITH_THE_PETAL_01");
obj.sq_PlaySound("PLAY_MY_GLOBAL");
break;
case 2:
obj.sq_PlaySound("GONE_WITH_THE_PETAL_CAST");
obj.sq_PlaySound("PLAY_MY_GLOBAL");
case 3:
obj.setTimeEvent(1, 80, 1, false);
break;
}
break;
case 1:
case 11:
switch(frameIndex){
case 1:
obj.sq_PlaySound("GONE_WITH_THE_PETAL_ABSORB");
obj.sq_PlaySound("PLAY_MY_GLOBAL");
break;
case 3:
//`EnableHermitTripleStep` 0 0 0
//`rapid step enable` 0 0 0
obj.getVar("rapid_step_enable").setBool(0, true);
obj.getVar("EnableHermitTripleStep").setBool(0, true);
break;
}
break;
}
}
function onKeyFrameFlag_Gonewiththepetal_bykk(obj, flagIndex)
{
if(!obj) return;
}
function onProcCon_Gonewiththepetal_bykk(obj)
{
if(!obj) return;
}
function onEndCurrentAni_Gonewiththepetal_bykk(obj)
{
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 10:
//obj.setTimeEvent(1, 80, 1, true);
break;
case 1:
case 11:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onEndState_Gonewiththepetal_bykk(obj, newState)
{
if(!obj) return;
if(newState != SKILL_VAGABOND_GONEWITHTHEPETAL){
sq_SimpleMoveToNearMovablePos(obj,200);
if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false);
if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false);
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Hermittriplestep_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_HERMITTRIPLESTEP);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_HERMITTRIPLESTEP, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function onSetState_Hermittriplestep_bykk(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.getVar("hermittriplestep").setBool(0, false);
obj.getVar("hermittriplestep_move").setInt(10, sq_GetXPos(obj));
obj.getVar("hermittriplestep_move").setInt(11, sq_GetYPos(obj));
obj.getVar("hermittriplestep_tar").clear_obj_vector();
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_HERMITTRIPLESTEPCAST);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/cast_dust.ani", 0, 0, 0);
// obj.setTimeEvent(1, 25, -1, false);
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_HERMITTRIPLESTEPATTACK1);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 178));
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/attacka_front_leef03.ani", 0, 1, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/attacka_back_leef02.ani", 0, -1, 0);
local objectManager = obj.getObjectManager();
for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){
local object = objectManager.getCollisionObject(i);//得到控制類對象
if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && !object.isInDamagableState(obj)){
local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj);
local tarPosX = sq_GetXPos(object), tarPosY = sq_GetYPos(object);
if(direction == ENUM_DIRECTION_RIGHT){
if((tarPosX > xPos && tarPosX - xPos <= 640) || (tarPosX < xPos && xPos- tarPosX <= 260)){
if(sq_Abs(tarPosY - yPos) <= 100){
local activeObj = sq_GetCNRDObjectToActiveObject(object);
sq_SetCustomDamageType(activeObj, false, 0);
if(!obj.getVar("hermittriplestep_tar").is_obj_vector(activeObj)) obj.getVar("hermittriplestep_tar").push_obj_vector(activeObj);
local apdPath = "character/atswordman/3_vagabond/hermittriplestep/ap_hermittriplestep.nut";
if(!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, apdPath)){
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, apdPath, true);
sq_HoldAndDelayDie(activeObj, obj, true, true, true, 0, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage);
}
}
}
}
else if(direction == ENUM_DIRECTION_LEFT){
if((tarPosX < xPos && xPos- tarPosX <= 640) || (tarPosX > xPos && tarPosX - xPos <= 260)){
if(sq_Abs(tarPosY - yPos) <= 100){
local activeObj = sq_GetCNRDObjectToActiveObject(object);
sq_SetCustomDamageType(activeObj, false, 0);
if(!obj.getVar("hermittriplestep_tar").is_obj_vector(activeObj)) obj.getVar("hermittriplestep_tar").push_obj_vector(activeObj);
local apdPath = "character/atswordman/3_vagabond/hermittriplestep/ap_hermittriplestep.nut";
if(!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, apdPath)){
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, apdPath, true);
sq_HoldAndDelayDie(activeObj, obj, true, true, true, 0, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage);
}
}
}
}
}
}
break;
case 2:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_HERMITTRIPLESTEPATTACK2);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 178));
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/attackb_front_leef03.ani", 0, 1, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/attackb_back_leef02.ani", 0, -1, 0);
break;
case 3:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_HERMITTRIPLESTEPATTACK3);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 178));
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/attackc_front_leef01.ani", 0, 1, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/attackc_back_leef02.ani", 0, -1, 0);
break;
case 4:
obj.removeAllTimeEvent();
if(obj.getVar("hermittriplestep").getBool(0)) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_HERMITTRIPLESTEPLAST1FRONT);
else{
sq_setCurrentAxisPos(obj, 0, obj.getVar("hermittriplestep_move").getInt(10));
sq_setCurrentAxisPos(obj, 1, obj.getVar("hermittriplestep_move").getInt(11));
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_HERMITTRIPLESTEPLAST1);
}
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/lasta_leef.ani", 0, 0, 0);
break;
case 5:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_HERMITTRIPLESTEPLAST2);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_HERMITTRIPLESTEP, SKILL_VAGABOND_HERMITTRIPLESTEP, 0, 1.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 177));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/lastb_effect02.ani", 0, 0, 0);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_Hermittriplestep_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
case 2:
case 3:
case 4:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_HERMITTRIPLESTEP, STATE_PRIORITY_IGNORE_FORCE, true);
switch(subState){
case 0:
sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(obj.getVar("hermittriplestep_move").getInt(10), obj.getDirection(), 200));
// sq_SimpleMoveToNearMovablePos(obj,300);
break;
case 1:
sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(obj.getVar("hermittriplestep_move").getInt(10), obj.getDirection(), 380));
// sq_SimpleMoveToNearMovablePos(obj,400);
break;
case 2:
sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(obj.getVar("hermittriplestep_move").getInt(10), obj.getDirection(), 590));
// sq_SimpleMoveToNearMovablePos(obj,600);
break;
}
break;
case 5:
local size = obj.getVar("hermittriplestep_tar").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("hermittriplestep_tar").get_obj_vector(i);
if(targetObj){
local colObj = sq_GetCNRDObjectToCollisionObject(targetObj);
CNSquirrelAppendage.sq_RemoveAppendage(colObj, "character/atswordman/3_vagabond/hermittriplestep/ap_hermittriplestep.nut");
}
}
}
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onEnterFrame_Hermittriplestep_bykk(obj, frameIndex)
{
if(!obj || !obj.isMyControlObject()) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
switch(frameIndex){
case 1:
obj.sq_PlaySound("R_SW_FLOWER_BLADE_SLASH_01");
obj.sq_PlaySound("FLOWER_BLADE_SLASH_CAST");
sq_flashScreen(obj, 60, 420, 0, 102, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
break;
}
break;
case 1:
case 2:
switch(frameIndex){
case 1:
obj.sq_PlaySound("FLOWER_BLADE_SLASH_DASH");
sq_flashScreen(obj, 0, 120, 0, 102, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
break;
}
break;
case 3:
switch(frameIndex){
case 1:
sq_flashScreen(obj, 0, 120, 360, 102, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
break;
case 2:
obj.sq_PlaySound("FLOWER_BLADE_SLASH_DASH");
break;
}
break;
case 4:
if(obj.getVar("hermittriplestep").getBool(0) == false){
switch(frameIndex){
case 1:
obj.sq_PlaySound("FLOWER_BLADE_SLASH_RETURN");
break;
case 6:
sq_flashScreen(obj, 720, 120, 0, 255, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
break;
case 14:
obj.sq_PlaySound("R_SW_FLOWER_BLADE_SLASH_02");
break;
}
}
else{
switch(frameIndex){
case 1:
obj.sq_PlaySound("FLOWER_BLADE_SLASH_RETURN");
break;
case 2:
sq_flashScreen(obj, 720, 120, 0, 255, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
break;
case 9:
obj.sq_PlaySound("R_SW_FLOWER_BLADE_SLASH_02");
break;
}
}
break;
case 5:
switch(frameIndex){
case 1:
sq_flashScreen(obj, 0, 0, 600, 153, sq_RGB(255, 255, 255), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_BOTTOM);
break;
case 2:
obj.sq_PlaySound("FLOWER_BLADE_SLASH_SHEATHE");
sq_SetMyShake(obj, 6, 250);
break;
}
break;
}
}
function onChangeSkillEffect_Hermittriplestep(obj, skillIndex, receiveData)
{
if(!obj || skillIndex != 225) return;
}
function onTimeEvent_Hermittriplestep_bykk(obj, timeEventIndex, timeEventCount)
{
switch(timeEventIndex){
case 1:
local srcX = obj.getVar("hermittriplestep_move").getInt(10);
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), 20 * timeEventCount);//根據方嚮運算當前數值
if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);//設置當前x坐標
else obj.stopTimeEvent(1);
break;
}
}
function onAttack_Hermittriplestep_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj || isStuck) return false;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
case 2:
case 3:
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
if(!obj.getVar("hermittriplestep_tar").is_obj_vector(damager)) obj.getVar("hermittriplestep_tar").push_obj_vector(damager);
local apdPath = "character/atswordman/3_vagabond/hermittriplestep/ap_hermittriplestep.nut";
if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, apdPath)){
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true);
sq_HoldAndDelayDie(damager, obj, true, true, true, 0, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage);
}
}
break;
case 5:
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
sq_AddDrawOnlyAniFromParent(damager, "character/swordman/effect/animation/athermittriplestep/hit_effect02.ani", 0, 0, sq_GetObjectHeight(damager) / 2);
}
break;
}
}
function onEndState_Hermittriplestep_bykk(obj, newState)
{
if(!obj) return;
if(newState != SKILL_VAGABOND_HERMITTRIPLESTEP){
local size = obj.getVar("hermittriplestep_tar").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("hermittriplestep_tar").get_obj_vector(i);
if(targetObj){
local colObj = sq_GetCNRDObjectToActiveObject(targetObj);
CNSquirrelAppendage.sq_RemoveAppendage(colObj, "character/atswordman/3_vagabond/hermittriplestep/ap_hermittriplestep.nut");
}
}
}
sq_SimpleMoveToNearMovablePos(obj,600);
}
}
function onKeyFrameFlag_Hermittriplestep_bykk(obj, flagIndex)
{
local subState = obj.getSkillSubState();
if(subState == 5 && flagIndex == 0){
local size = obj.getVar("hermittriplestep_tar").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("hermittriplestep_tar").get_obj_vector(i);
if(targetObj){
local colObj = sq_GetCNRDObjectToCollisionObject(targetObj);
sq_SendHitObjectPacketWithNoStuck(obj, colObj, 0, 0, sq_GetObjectHeight(colObj) / 2);
}
}
}
}
}
function HermittriplestepSearchTarget(obj)
{
if(IsInterval(obj, 5))
{
local objectManager = obj.getObjectManager();
for(local i=0; i<objectManager.getCollisionObjectNumber(); ++i)
{
local object = objectManager.getCollisionObject(i);
local dis = sq_GetDistanceObject(object, obj, false);
if(object && obj.isEnemy(object) && dis <= 130 && object.isObjectType(OBJECTTYPE_ACTIVE))
obj.getVar("Hermittriplestep").push_obj_vector(object);
}
}
}
function HermittriplestepSetPos(obj,curframe)
{
if(curframe > 0)
{
local direction = obj.sq_GetInputDirection(0);
if(obj.getDirection() == direction)
{
sq_BinaryStartWrite();
sq_BinaryWriteDword(1);
sq_SendChangeSkillEffectPacket(obj, 225);
}
}
}
function onProcCon_Hermittriplestep_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
local curAni = sq_GetCurrentAnimation(obj);
local curframe = obj.sq_GetCurrentFrameIndex(curAni);
local aniSumTime = sq_GetDelaySum(curAni);
local ststeTime = obj.sq_GetStateTimer();
switch(subState){
case 1:
case 2:
case 3:
if(obj.getVar("hermittriplestep").getBool(0) == false){
if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT)) obj.getVar("hermittriplestep").setBool(0, true);
}
break;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Inhalation_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_INHALATION);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_INHALATION, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function onSetState_Inhalation_bykk(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(ANIMATION_VAGABOND_INHALATIONCAST);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local range = sq_GetIntData(obj, SKILL_VAGABOND_INHALATION, 2);
obj.getVar("inhalation_target").clear_obj_vector();
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_VAGABOND,300,0,0,obj.getDirection(),3,SKILL_VAGABOND_INHALATION,1,range,0,0,0,0,0,0,0,0);
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_INHALATIONGRAB);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local baseX = sq_GetIntData(obj, SKILL_VAGABOND_INHALATION, 1);
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(false);
obj.setTimeEvent(1, delaySum, 1, false);
local size = obj.getVar("inhalation_target").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("inhalation_target").get_obj_vector(i);
if(targetObj){
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/atswordman/3_vagabond/inhalation/ap_inhalation.nut");
sq_MoveToAppendageForce(targetObj, obj, obj, baseX, 0, 0, delaySum, true, addAppendage);
createOnlyDrawObject_AtSwordMan_bykk(obj, "character/swordman/effect/animation/atinhalation/dust.ani", true, obj.getDirection(), sq_GetXPos(targetObj), sq_GetYPos(targetObj), 0, ENUM_DRAWLAYER_BOTTOM);
}
}
}
break;
case 2:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_INHALATIONTHROW);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_INHALATION);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_INHALATION, 0, skill_level);
local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_INHALATION, 6);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 152));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local size = obj.getVar("inhalation_target").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("inhalation_target").get_obj_vector(i);
if(targetObj){
sq_SendHitObjectPacket(obj, targetObj, 0, 0, 0);
cearteSkillPassiveObj_AtSwordMan_bykk(obj, targetObj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, 0, obj.getDirection(), 3, SKILL_VAGABOND_INHALATION, 2, totalDamage, sizeRate, 0, 0, 0, 0, 0, 0, 1);
}
}
}
break;
}
}
function onEndCurrentAni_Inhalation_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_INHALATION, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_INHALATION, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 2:
local size = obj.getVar("inhalation_target").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("inhalation_target").get_obj_vector(i);
if(targetObj){
CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/3_vagabond/inhalation/ap_inhalation.nut");
}
}
}
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onTimeEvent_Inhalation_bykk(obj, timeEventIndex, timeEventCount)
{
if(!obj) return;
}
function onAttack_Inhalation_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj || isStuck) return;
}
function onEnterFrame_Inhalation_bykk(obj, frameIndex)
{
if(!obj) return;
local subState = obj.getSkillSubState();
if(subState == 2 && frameIndex == 1){
obj.getVar("rapid_step_enable").setBool(0, true);
obj.getVar("EnableHermitTripleStep").setBool(0, true);
}
}
function onEndState_Inhalation_bykk(obj, newState)
{
if(!obj) return;
if(newState != SKILL_VAGABOND_INHALATION){
if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false);
if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false);
local size = obj.getVar("inhalation_target").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("inhalation_target").get_obj_vector(i);
if(targetObj){
CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/3_vagabond/inhalation/ap_inhalation.nut");
}
}
}
}
}
function onKeyFrameFlag_Inhalation_bykk(obj, flagIndex)
{
if (!obj) return;
}
function onProcCon_Inhalation_bykk(obj)
{
if(!obj) return;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Moonlightslash_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_MOONLIGHTSLASH);
if (isUse){
obj.sq_IntVectClear();
// print("sub ="+sq_GetIntData(obj, SKILL_VAGABOND_MOONLIGHTSLASH, 12));
if(sq_GetIntData(obj, SKILL_VAGABOND_MOONLIGHTSLASH, 12) > 0) obj.sq_IntVectPush(6);
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_MOONLIGHTSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function onSetState_Moonlightslash_bykk(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(ANIMATION_VAGABOND_MOONLIGHTSLASH_READY);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 0, 1.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 179));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(false);
obj.setTimeEvent(3, delay, 1, false);
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_MOONLIGHTSLASH_CUT);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 0, 1.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 180));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(false);
obj.setTimeEvent(1, delaySum / 18, 17, false);
break;
case 2:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_MOONLIGHTSLASH_DASH);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
obj.getVar("moonlightslash_move").setInt(12, 355);
obj.getVar("moonlightslash_move").setInt(13, 0);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 2, 1.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 181));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
case 3:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_MOONLIGHTSLASH_UPPER);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
obj.getVar("moonlightslash_move").setInt(12, -400);
obj.getVar("moonlightslash_move").setInt(13, 230);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 3, 1.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 182));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
case 4:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_MOONLIGHTSLASH_SLASH);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
obj.getVar("moonlightslash_move").setInt(12, 45);
obj.getVar("moonlightslash_move").setInt(13, -sq_GetZPos(obj));
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 5, 1.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 183));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
case 5:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_MOONLIGHTSLASH_SLASH_UPPER);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
obj.getVar("moonlightslash_move").setInt(12, -45);
obj.getVar("moonlightslash_move").setInt(13, 0);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 6, 1.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 184));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
case 6:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_MOONLIGHTSLASH_FINISH);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
obj.getVar("moonlightslash_move").setInt(12, 45);
obj.getVar("moonlightslash_move").setInt(13, 300);
break;
case 7:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_MOONLIGHTSLASH_FINISH_EXP);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 7, 1.0);
if(sq_GetIntData(obj, SKILL_VAGABOND_MOONLIGHTSLASH, 12) > 0){
totalDamage = totalDamage + obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 0, 23.0);
}
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 185));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
}
obj.getVar("moonlightslash_move").setInt(10, sq_GetXPos(obj));
obj.getVar("moonlightslash_move").setInt(11, sq_GetZPos(obj));
}
function onTimeEvent_Moonlightslash_bykk(obj, timeEventIndex, timeEventCount)
{
if(!obj) return;
switch(timeEventIndex){
case 1: obj.resetHitObjectList(); break;
case 2:
local srcZ = obj.getVar("moonlightslash_move").getInt(11);
local vz = sq_GetUniformVelocity(srcZ, 0, timeEventCount, 10);
sq_setCurrentAxisPos(obj, 2, vz);
break;
case 3:
//if(sq_GetIntData(obj, SKILL_VAGABOND_MOONLIGHTSLASH, 12) < 1) sendAwakeCutinInfo(obj,37);
break;
}
}
function onEndCurrentAni_Moonlightslash_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_MOONLIGHTSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 7:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onAttack_Moonlightslash_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj || isStuck) return;
}
function onEnterFrame_Moonlightslash_bykk(obj, frameIndex)
{
if(!obj || !obj.isMyControlObject()) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
switch(frameIndex){
case 5:
obj.sq_PlaySound("MOON_LIGHT_SLASH_CAST");
obj.sq_PlaySound("SW_MOON_LIGHT_SLASH_01");
sq_flashScreen(obj, 100, 4600, 0, 204, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 5, 50);
break;
case 9: obj.sq_PlaySound("MOON_LIGHT_SLASH_STAB"); break;
case 10: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step01b_dust07.ani", 0, 0, 0); break;
case 11: sq_SetMyShake(obj, 4, 100); break;
case 12:
sq_flashScreen(obj, 0, 50, 0, 76, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 9, 200);
break;
}
break;
case 1:
switch(frameIndex){
case 0:
obj.sq_PlaySound("MOON_LIGHT_SLASH_HACK");
sq_flashScreen(obj, 0, 20, 0, 76, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
break;
case 3:
case 6:
case 9:
case 12:
case 15:
case 18:
sq_flashScreen(obj, 0, 20, 0, 76, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
break;
case 19: obj.sq_PlaySound("SW_MOON_LIGHT_SLASH_02"); break;
}
break;
case 2:
switch(frameIndex){
case 0:
obj.sq_PlaySound("MOON_LIGHT_SLASH_DASH");
sq_flashScreen(obj, 0, 100, 0, 76, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 5, 240);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step03b_dust03.ani", 0, 0, 0);
break;
case 3: obj.sq_PlaySound("SW_MOON_LIGHT_SLASH_03"); break;
}
break;
case 3:
switch(frameIndex){
case 0:
obj.sq_PlaySound("MOON_LIGHT_SLASH_JUMP");
sq_SetMyShake(obj, 3, 10);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step04b_dust01.ani", 0, 0, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step04c_atk.ani", -220, 0, 70);
break;
}
break;
case 4:
switch(frameIndex){
case 0:
sq_flashScreen(obj, 0, 40, 0, 102, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step06b_dust03.ani", 20, 0, -280);
break;
case 1:
obj.sq_PlaySound("SW_MOON_LIGHT_SLASH_05");
obj.sq_PlaySound("MOON_LIGHT_SLASH_BLADE");
sq_SetMyShake(obj, 7, 150);
break;
}
break;
case 5:
switch(frameIndex){
case 0:
obj.sq_PlaySound("MOON_LIGHT_SLASH_UPPER");
break;
case 1:
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step07_spin.ani", 0, 0, 0);
break;
}
break;
case 6:
switch(frameIndex){
case 0:
obj.sq_PlaySound("MOON_LIGHT_SLASH_RISE");
sq_flashScreen(obj, 0, 20, 0, 76, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step08c_beam.ani", 0, 0, 0);
break;
case 2:
obj.sq_PlaySound("R_SW_MOON_LIGHT_SLASH_06");
sq_flashScreen(obj, 0, 20, 0, 51, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
break;
case 3: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step08b_leaf00.ani", 0, -1, -200); break;
case 4: sq_flashScreen(obj, 0, 100, 0, 127, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break;
case 12:
obj.sq_PlaySound("MOON_LIGHT_SLASH_CHARGE");
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(12, 14);
obj.getVar("moonlightslash_move").setInt(11, sq_GetZPos(obj));
obj.setTimeEvent(2, delaySum / 10, 10, true);
break;
}
break;
case 7:
switch(frameIndex){
case 0:
obj.sq_PlaySound("R_SW_MOON_LIGHT_SLASH_07");
obj.sq_PlaySound("MOON_LIGHT_SLASH_EXP");
sq_flashScreen(obj, 0, 60, 0, 127, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 10, 700);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step09a_atkmain.ani", 0, 1, 0);
break;
case 1:
//`EnableHermitTripleStep` 0 0 0
//`rapid step enable` 0 0 0
obj.getVar("rapid_step_enable").setBool(0, true);
obj.getVar("EnableHermitTripleStep").setBool(0, true);
break;
case 2:
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step09b_leafa00.ani", 0, 2, 0);
break;
}
break;
}
}
function onEndState_Moonlightslash_bykk(obj, newState)
{
if(!obj) return;
if(newState != SKILL_VAGABOND_MOONLIGHTSLASH){
if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false);
if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false);
}
}
function onProc_Moonlightslash_bykk(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_Moonlightslash_bykk(obj, flagIndex)
{
if (!obj) return;
}
function onProcCon_Moonlightslash_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
if(subState == 0 || subState == 1 || subState == 7) return;
local pAni = obj.getCurrentAnimation();
local currentT = sq_GetCurrentTime(pAni);
local fireT = pAni.getDelaySum(0, 3);
switch(subState){
case 3: fireT = pAni.getDelaySum(false); break;
case 4: fireT = pAni.getDelaySum(0, 1); break;
case 5: fireT = pAni.getDelaySum(false); break;
case 6: fireT = pAni.getDelaySum(0, 2); break;
}
if(subState == 6 && currentT > fireT) return;
local srcX = obj.getVar("moonlightslash_move").getInt(10);
local srcZ = obj.getVar("moonlightslash_move").getInt(11);
local MoveX = obj.getVar("moonlightslash_move").getInt(12);
local MoveZ = obj.getVar("moonlightslash_move").getInt(13);
local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT);
local vz = sq_GetUniformVelocity(0, MoveZ, currentT, fireT);
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);
sq_setCurrentAxisPos(obj, 2, srcZ + vz);
if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);
else{
obj.getVar("moonlightslash_move").setInt(10, sq_GetXPos(obj));
obj.getVar("moonlightslash_move").setInt(12, 0);
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Nearblow_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_NEARBLOW);
if (isUse){
if(sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 10) > 0) obj.getVar("Nearblow_Bool").setBool(0, true);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_NEARBLOW, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function onSetState_Nearblow_bykk(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(ANIMATION_VAGABOND_NEARBLOWPIERCE);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
obj.sq_PlaySound("SW_NEAR_BLOW");
obj.getVar("nearblow").setBool(0,false);
obj.getVar("nearblow_target").clear_obj_vector();
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_NEARBLOW);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_NEARBLOW, 0, skill_level);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 158));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_NEARBLOWPIERCEBACK);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
break;
case 2:
if(!obj.isMovablePos(sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), -150), sq_GetYPos(obj))) obj.getVar("nearblow").setBool(0, true);
if(obj.getVar("nearblow").getBool(0)) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_NEARBLOWPIERCEFRONTSLASH);
else obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_NEARBLOWPIERCEBACKSLASH);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
if(obj.getVar("nearblow").getBool(0) == false){
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(false);
local size = obj.getVar("nearblow_target").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("nearblow_target").get_obj_vector(i);
if(targetObj){
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/atswordman/3_vagabond/nearblow/ap_nearblow.nut");
sq_MoveToAppendageForce(targetObj, obj, obj, -150, 0, 0, delaySum, true, addAppendage);
}
}
}
}
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_NEARBLOW);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_NEARBLOW, 1, skill_level);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 158));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
}
}
function onEndCurrentAni_Nearblow_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 10) > 0){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
if(obj.getVar("nearblow_target").get_obj_vector_size() < 1){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_NEARBLOW, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_NEARBLOW, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 2:
local size = obj.getVar("nearblow_target").get_obj_vector_size();
if(size > 0 && obj.getVar("nearblow").getBool(0) == false){
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_NEARBLOW);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_NEARBLOW, 2, skill_level);
local range = sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 0);
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("nearblow_target").get_obj_vector(i);
if(targetObj){
CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/3_vagabond/nearblow/ap_nearblow.nut");
cearteSkillPassiveObj_AtSwordMan_bykk(obj,targetObj,PASSIVEOBJECT_BYKK_VAGABOND,0,0,0,obj.getDirection(),3,SKILL_VAGABOND_NEARBLOW,1,totalDamage,range,0,0,0,0,0,0,1);
}
}
}
if(obj.getVar("nearblow").getBool(0) == false) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj)));
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onTimeEvent_Nearblow_bykk(obj, timeEventIndex, timeEventCount)
{}
function onAttack_Nearblow_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj || isStuck) return false;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
if(sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 10) > 0){
if(obj.getVar("Nearblow_Bool").getBool(0)){
obj.getVar("Nearblow_Bool").setBool(0, false);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_NEARBLOW);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_NEARBLOW, 2, skill_level);
totalDamage = totalDamage * sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 11);
local range = sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 0);
cearteSkillPassiveObj_AtSwordMan_bykk(obj,damager,PASSIVEOBJECT_BYKK_VAGABOND,0,0,-85-sq_GetZPos(obj),obj.getDirection(),3,SKILL_VAGABOND_NEARBLOW,2,totalDamage,range,0,0,0,0,0,0,1);
}
}
else{
if(sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager) && !sq_IsFixture(damager)){
if(obj.getVar("Nearblow").getBool(0) == false) obj.getVar("Nearblow").setBool(0,true);
obj.getVar("nearblow_target").push_obj_vector(damager);
local path = "character/atswordman/3_vagabond/nearblow/ap_nearblow.nut";
local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, path, true);
if(addAppendage){
sq_HoldAndDelayDie(damager, obj, true, true, true, 0, 0, ENUM_DIRECTION_NEUTRAL, addAppendage);
sq_MoveToAppendageForce(damager, obj, damager, 0, 0, 20, 100, true, addAppendage);
}
}
else if(sq_IsFixture(damager)){
obj.getVar("nearblow").setBool(0, true);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_NEARBLOW);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_NEARBLOW, 2, skill_level);
totalDamage = totalDamage * sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 11);
local range = sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 0);
cearteSkillPassiveObj_AtSwordMan_bykk(obj,damager,PASSIVEOBJECT_BYKK_VAGABOND,0,0,-85-sq_GetZPos(obj),obj.getDirection(),3,SKILL_VAGABOND_NEARBLOW,2,totalDamage,range,0,0,0,0,0,0,1);
return;
}
}
}
break;
}
}
function onEnterFrame_Nearblow_bykk(obj, frameIndex)
{
if(!obj) return;
local subState = obj.getSkillSubState();
local size = obj.getVar("Nearblow").get_obj_vector_size();
switch(subState){
case 0:
if(frameIndex == 3) sq_SetMyShake(obj, 8, 40);
break;
case 2:
if(obj.getVar("nearblow").getBool(0)){
if(frameIndex == 5) sq_SetMyShake(obj, 10, 100);
else if(frameIndex == 6){
obj.getVar("rapid_step_enable").setBool(0, true);
obj.getVar("EnableHermitTripleStep").setBool(0, true);
}
else if(frameIndex == 9){
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_NEARBLOW);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_NEARBLOW, 2, skill_level);
local range = sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 0);
local size = obj.getVar("nearblow_target").get_obj_vector_size();
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("nearblow_target").get_obj_vector(i);
if(targetObj){
CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/3_vagabond/nearblow/ap_nearblow.nut");
cearteSkillPassiveObj_AtSwordMan_bykk(obj,targetObj,PASSIVEOBJECT_BYKK_VAGABOND,0,0,0,obj.getDirection(),3,SKILL_VAGABOND_NEARBLOW,1,totalDamage,range,0,0,0,0,0,0,1);
}
}
}
}
else{
if(frameIndex == 2){
sq_SetMyShake(obj, 15, 100);
obj.getVar("rapid_step_enable").setBool(0, true);
obj.getVar("EnableHermitTripleStep").setBool(0, true);
}
}
}
}
function onEndState_Nearblow_bykk(obj, newState)
{
if(!obj) return;
if(newState != SKILL_VAGABOND_NEARBLOW){
local size = obj.getVar("nearblow_target").get_obj_vector_size();
if(size > 0 && obj.getVar("nearblow").getBool(0) == false){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("nearblow_target").get_obj_vector(i);
if(targetObj){
CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/3_vagabond/nearblow/ap_nearblow.nut");
}
}
}
if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false);
if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false);
}
}
function onKeyFrameFlag_Nearblow_bykk(obj, flagIndex)
{
if (!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 2:
switch(flagIndex){
case 1:
if(obj.getVar("nearblow").getBool(0)){
local size = obj.getVar("nearblow_target").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("nearblow_target").get_obj_vector(i);
if(targetObj){
sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2);
}
}
}
}
break;
}
break;
}
}
function onProcCon_Nearblow_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
if(obj.getVar("nearblow").getBool(0) == false){
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT) obj.getVar("nearblow").setBool(0, true);
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT) obj.getVar("nearblow").setBool(0, true);
}
break;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Overblowslash_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_OVERBLOWSLASH);
if (isUse){
obj.sq_StopMove();
obj.sq_IntVectClear();
if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT) || sq_GetIntData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 5) > 0){
obj.getVar("overblowslash_move").setInt(10, sq_GetXPos(obj));
if(sq_GetIntData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 5) > 0) obj.getVar("overblowslash_move").setInt(11, sq_GetIntData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 2) / 2);
else obj.getVar("overblowslash_move").setInt(11, sq_GetIntData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 2));
obj.sq_IntVectPush(1);
}
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_OVERBLOWSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function onSetState_Overblowslash_bykk(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(ANIMATION_VAGABOND_OVERBLOWSLASHREADY);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
obj.sq_PlaySound("OVERBLOW_SLASH_DASH");
obj.sq_PlaySound("SW_OVERBLOW_SLASH");
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_OVERBLOWSLASHDASH);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atoverblowslash/overblowslashdash_smoke.ani", 0, 0, 0);
obj.sq_PlaySound("OVERBLOW_SLASH_DASH");
obj.sq_PlaySound("SW_OVERBLOW_SLASH");
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_OVERBLOWSLASH);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 1, skill_level);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 159));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
case 2:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_OVERBLOWSLASHSTART_BODY);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
obj.sq_PlaySound("OVERBLOW_SLASH_01");
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_OVERBLOWSLASH);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 1, skill_level);
local hitMax = sq_GetLevelData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 0, skill_level);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 161));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(0,16);
obj.setTimeEvent(1, delaySum / (hitMax + 1), hitMax, true);
break;
}
}
function onTimeEvent_Overblowslash_bykk(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 1: obj.resetHitObjectList(); break;
}
}
function onEndCurrentAni_Overblowslash_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_OVERBLOWSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onAttack_Overblowslash_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj || isStuck) return false;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
break;
case 1:
break;
}
}
function onEnterFrame_Overblowslash_bykk(obj, frameIndex)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 2:
if(frameIndex == 1){
}
else if(frameIndex == 22){
}
else if(frameIndex == 23){
}
break;
}
}
function onEndState_Overblowslash_bykk(obj, newState)
{
if(!obj) return;
if(newState != SKILL_VAGABOND_OVERBLOWSLASH){
if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false);
if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false);
}
}
function onKeyFrameFlag_Overblowslash_bykk(obj, flagIndex)
{
if (!obj) return true;
local subState = obj.getSkillSubState();
if(subState != 2) return true;
switch(flagIndex){
case 1111:
sq_SetMyShake(obj, 2, 650);
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(1,1);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_OVERBLOWSLASH);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 4, skill_level);
local hitMax = sq_GetLevelData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 3, skill_level);
local totalDamage2 = sq_GetLevelData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 5, skill_level);
local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 4);
local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger();
if(sq_GetIntData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 9) > 0 || OVERBLOWSLASH_STONE > 0){
hitMax = (hitMax.tofloat() * (1 + 0.8 + 0.67)).tointeger();
sizeRate = (sizeRate.tofloat() * 1.25).tointeger();
totalDamage = (totalDamage.tofloat() * 1.07).tointeger();
}
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_VAGABOND,0,0,0,obj.getDirection(),3,SKILL_VAGABOND_OVERBLOWSLASH,1,totalDamage,hitMax,sizeRate,damageRate,delaySum,0,0,0,1);
break;
case 1112:
obj.resetHitObjectList();
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_OVERBLOWSLASH);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 2, skill_level);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 160));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
sq_SetMyShake(obj,9,300);
sq_flashScreen(obj, 200, 50, 0, 153,sq_RGB(255, 255, 255), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_BOTTOM);
break;
case 1113:
obj.getVar("rapid_step_enable").setBool(0, true);
obj.getVar("EnableHermitTripleStep").setBool(0, true);
break;
}
return true;
}
function onProcCon_Overblowslash_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
local pAni = obj.getCurrentAnimation();
local currentT = sq_GetCurrentTime(pAni);
local fireT = pAni.getDelaySum(false);
local srcX = obj.getVar("overblowslash_move").getInt(10);
local MoveX = obj.getVar("overblowslash_move").getInt(11);
local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT);
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);
if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);
else{
obj.getVar("overblowslash_move").setInt(10, sq_GetXPos(obj));
obj.getVar("overblowslash_move").setInt(11, 0);
}
break;
case 2:
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
}
break;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Rapidstep_bykk(obj)//一花渡江
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_RAPIDSTEP);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_RAPIDSTEP, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function onSetState_Rapidstep_bykk(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(ANIMATION_VAGABOND_RAPIDSTEP_BODY);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
obj.sq_PlaySound("RAPID_STEP");
obj.sq_PlaySound("SW_GUARD");
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(false);
obj.setTimeEvent(1,delaySum / 10, 9, false);
local moveX = sq_GetIntData(obj, SKILL_VAGABOND_RAPIDSTEP, 0);
obj.getVar("rapidstep_move").clear_vector();
obj.getVar("rapidstep_move").push_vector(sq_GetXPos(obj));
obj.getVar("rapidstep_move").push_vector(sq_GetZPos(obj));
obj.getVar("rapidstep_move").push_vector(moveX);
break;
}
}
function onTimeEvent_Rapidstep_bykk(obj, timeEventIndex, timeEventCount)
{
switch(timeEventIndex){
case 1:
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_RAPIDSTEP, SKILL_VAGABOND_RAPIDSTEP, 0, 1.0) + 100;
local balance = [100,210,140,230,120,195,110,120,100];
local offsetZ = [50,-40,80,-30,90,-20,70,30,0];
local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_RAPIDSTEP, 1) * balance[timeEventCount - 1] / 100;
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, offsetZ[timeEventCount - 1] - sq_GetZPos(obj), obj.getDirection(), 3, SKILL_VAGABOND_RAPIDSTEP, 1, totalDamage, sizeRate, timeEventIndex, 0, 0, 0, 0, 0, 1);
break;
}
}
function onEndCurrentAni_Rapidstep_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onEnterFrame_Rapidstep_bykk(obj, frameIndex)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
switch(frameIndex){
case 0:
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atrapidstep/enddust_00.ani", 0, 1, 0);
break;
case 6:
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atrapidstep/startdust_00.ani", 0, 1, 0);
break;
}
break;
}
}
function onEndState_Rapidstep_bykk(obj, newState)
{
if(!obj) return;
}
function onProcCon_Rapidstep_bykk(obj)
{
local subState = obj.getSkillSubState();
switch(subState){
case 0:
local pAni = obj.getCurrentAnimation();
local currentT = sq_GetCurrentTime(pAni);
local fireT = pAni.getDelaySum(false);
local srcX = obj.getVar("rapidstep_move").get_vector(0);
local srcZ = obj.getVar("rapidstep_move").get_vector(1);
local MoveX = obj.getVar("rapidstep_move").get_vector(2);
local vx = sq_GetUniformVelocity(0, MoveX, currentT, fireT);
local vz = sq_GetAccel(srcZ, 30, currentT, fireT / 2, true);
if(currentT > fireT / 2) vz = sq_GetAccel(30, 0, currentT - fireT / 2, fireT / 2, false);
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), vx);
if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);
else{
obj.getVar("rapidstep_move").set_vector(0, sq_GetXPos(obj));
obj.getVar("rapidstep_move").set_vector(2, 0);
}
sq_setCurrentAxisPos(obj, 2, vz);
break;
}
}
function onKeyFrameFlag_Rapidstep_bykk(obj, flagIndex)
{
if (!obj) return;
switch(flagIndex){
case 0:
break;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Revolvingsword_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_REVOLVINGSWORD);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_REVOLVINGSWORD, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function onSetState_Revolvingsword_bykk(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(ANIMATION_VAGABOND_REVOLVINGSWORDREADY);
obj.sq_PlaySound("SW_REVOLVING_SWORD");
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_REVOLVINGSWORDSPIN);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 0, skill_level);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 150));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local hitMax = sq_GetIntData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 0);
if(true) hitMax = hitMax + sq_GetIntData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 3);
obj.getVar("revolvingsword").setInt(10, hitMax);
obj.getVar("revolvingsword").setInt(11, 0);
local hitTime = sq_GetIntData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 1);
obj.setTimeEvent(1, hitTime, 1, true);
break;
case 2:
obj.removeAllTimeEvent();
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_REVOLVINGSWORDFINISH);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 1, skill_level);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 149));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_Revolvingsword_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_REVOLVINGSWORD, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onTimeEvent_Revolvingsword_bykk(obj, timeEventIndex, timeEventCount)
{
if(!obj) return;
switch(timeEventIndex){
case 0:
break;
case 1:
if(obj.getVar("revolvingsword").getInt(11) >= obj.getVar("revolvingsword").getInt(10)){
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_REVOLVINGSWORD, STATE_PRIORITY_IGNORE_FORCE, true);
}
else{
local inputConut = obj.getRapidInputFrequency();
inputConut = inputConut.tointeger();
local inputMax = 2;
local gapByInputMin = sq_GetIntData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 1) / 16;
local gapByInputMax = sq_GetIntData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 1) / 8;
obj.getVar("revolvingsword").setInt(11, obj.getVar("revolvingsword").getInt(11) + 1);
if(inputConut >= inputMax){
obj.setTimeEvent(1, gapByInputMin, 1,false);
obj.resetHitObjectList();
local currentAni = obj.getCurrentAnimation();
currentAni.setSpeedRate(333.3);
}
else{
obj.setTimeEvent(1, gapByInputMax, 1,false);
obj.resetHitObjectList();
local currentAni = obj.getCurrentAnimation();
currentAni.setSpeedRate(100.0);
}
}
break;
}
}
function onEnterFrame_Revolvingsword_bykk(obj, frameIndex)
{
if(!obj) return;
local subState = obj.getSkillSubState();
if(subState == 2 && frameIndex == 5){
obj.getVar("rapid_step_enable").setBool(0, true);
obj.getVar("EnableHermitTripleStep").setBool(0, true);
}
}
function onEndState_Revolvingsword_bykk(obj, newState)
{
if(!obj) return;
if(newState != SKILL_VAGABOND_REVOLVINGSWORD){
if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false);
if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false);
}
}
function onKeyFrameFlag_Revolvingsword_bykk(obj, flagIndex)
{
if (!obj) return;
}
function onProcCon_Revolvingsword_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput();
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_REVOLVINGSWORD, STATE_PRIORITY_IGNORE_FORCE, true);
}
break;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Soarcut_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_SOARCUT);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_SOARCUT, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function onSetState_Soarcut_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
obj.sq_ZStop();
local count = sq_GetIntData(obj,213, 5);
switch(subState){
case 0:
obj.getVar("soarcut_target").clear_obj_vector();
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUTEX) > 0) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTUPPERSLASH_MAGIC);
else obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTUPPERSLASH);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcuta_leaf_00.ani", 0, 1, 0);
local offsetX = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 150);
if(obj.isMovablePos(offsetX, sq_GetYPos(obj))) obj.getVar("soarcut").setInt(10, 150);
else obj.getVar("soarcut").setInt(10, 0);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUT);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_SOARCUT, 0, skill_level);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 156));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTJUMP);
break;
case 2:
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUTEX) > 0) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTAERIALSLASHEX);
else obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTAERIALSLASH);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUTEX) > 0) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcutb_leaf_b.ani", 0, 1, 0);
else sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcutd_leaf_b.ani", 0, 1, 0);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUT);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_SOARCUT, 1, skill_level);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 154));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
case 3:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTFALLINGEX);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUT);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_SOARCUT, 2, skill_level);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 154));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local hitMax = sq_GetIntData(obj, SKILL_VAGABOND_SOARCUT, 5);
local currentAni = obj.getCurrentAnimation();
local speedRate = 6000 / currentAni.getDelaySum(0, 0);
currentAni.setSpeedRate(speedRate.tofloat() * 2.5);
local delaySum = currentAni.getDelaySum(false);
obj.setTimeEvent(0, delaySum / (hitMax + 1), hitMax, true);
local size = obj.getVar("soarcut_target").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("soarcut_target").get_obj_vector(i);
if(targetObj){
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/atswordman/3_vagabond/soarcut/ap_soarcut.nut");
sq_MoveToAppendageForce(targetObj, obj, targetObj, 0, 0, -sq_GetZPos(targetObj), delaySum, true, addAppendage);
}
}
}
break;
case 4:
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUTEX) > 0) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTFINISHEFFECTEX);
else obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTFINISHEFFECT);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUT);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_SOARCUT, 3, skill_level);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 155));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
}
}
function onEndCurrentAni_Soarcut_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(obj.getVar("soarcut_target").get_obj_vector_size() < 1){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
}
else{
obj.getVar("soarcut_move").setInt(10, sq_GetXPos(obj));
obj.getVar("soarcut_move").setInt(11, sq_GetZPos(obj));
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_SOARCUT, STATE_PRIORITY_IGNORE_FORCE, true);
}
break;
case 1:
case 2:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_SOARCUT, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 4:
local size = obj.getVar("soarcut_target").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("soarcut_target").get_obj_vector(i);
if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/3_vagabond/soarcut/ap_soarcut.nut");
}
}
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onAttack_Soarcut_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj || isStuck) return false;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
if(sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager) && !sq_IsFixture(damager)){
obj.getVar("soarcut_target").push_obj_vector(damager);
local path = "character/atswordman/3_vagabond/soarcut/ap_soarcut.nut";
local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, path, true);
sq_MoveToAppendageForce(damager, obj, obj, obj.getVar("soarcut").getInt(10), 0, 200, 160, true, addAppendage);
sq_HoldAndDelayDie(damager, obj, true, true, true, 0, 200, ENUM_DIRECTION_NEUTRAL , addAppendage);
}
}
break;
case 4:
if(damager.isObjectType(OBJECTTYPE_ACTIVE) && CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/atswordman/3_vagabond/soarcut/ap_soarcut.nut")){
CNSquirrelAppendage.sq_RemoveAppendage(damager, "character/atswordman/3_vagabond/soarcut/ap_soarcut.nut");
}
break;
}
}
function onTimeEvent_Soarcut_bykk(obj, timeEventIndex, timeEventCount)
{
if (!obj) return false;
switch(timeEventIndex){
case 0:
obj.resetHitObjectList();
break;
}
}
function onEnterFrame_Soarcut_bykk(obj, frameIndex)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 3:
switch(frameIndex){
case 0:
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcutd_leaf_b.ani", 0, 1, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcute_atkeff_00.ani", 0, 1, 0);
break;
case 2:
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcute_atkeff_04.ani", 0, 1, 0);
break;
case 4:
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcute_atkeff_00.ani", 0, 1, 0);
break;
case 6:
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcute_atkeff_04.ani", 0, 1, 0);
break;
}
break;
case 4:
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUTEX) > 0){
if(frameIndex == 2){
obj.getVar("rapid_step_enable").setBool(0, true);
obj.getVar("EnableHermitTripleStep").setBool(0, true);
}
}
break;
}
}
function onEndState_Soarcut_bykk(obj, newState)
{
if(!obj) return;
if(newState != SKILL_VAGABOND_SOARCUT){
local size = obj.getVar("soarcut_target").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("soarcut_target").get_obj_vector(i);
if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/3_vagabond/soarcut/ap_soarcut.nut");
}
}
if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false);
if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false);
}
}
function onProcCon_Soarcut_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
local ststeTime = obj.sq_GetStateTimer();
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(0,1);
if(ststeTime > delaySum) break;
local baseX = obj.getVar("soarcut_move").getInt(10);
local baseZ = obj.getVar("soarcut_move").getInt(11);
local vx = sq_GetUniformVelocity(0, obj.getVar("soarcut").getInt(10), ststeTime, delaySum);
local vz = sq_GetAccel(0, 200, ststeTime, delaySum, false);
sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(baseX, obj.getDirection(), vx));
sq_setCurrentAxisPos(obj, 2, vz);
break;
case 3:
local ststeTime = obj.sq_GetStateTimer();
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(false);
local vz = sq_GetAccel(200, 0, ststeTime, delaySum, false);
sq_setCurrentAxisPos(obj, 2, vz);
if(sq_GetZPos(obj) <= 0){
obj.sq_IntVectClear();
obj.sq_IntVectPush(4);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_SOARCUT, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
break;
}
}
function onKeyFrameFlag_Soarcut_bykk(obj, flagIndex)
{
if (!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 2:
switch(flagIndex){
case 1:
local size = obj.getVar("soarcut_target").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("soarcut_target").get_obj_vector(i);
if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2);
}
}
break;
}
break;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Threeside_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_THREESIDE);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_THREESIDE, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function onSetState_Threeside_bykk(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.getVar("Threeside").setBool(0,false);
obj.sq_PlaySound("SW_THREE_SIDE");
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIPEX) > 0) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_THREESIDEEX);
else obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_THREESIDE);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 3, skill_level);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 151));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
case 1:
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIPEX) > 0) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_AFTER_THREESIDEEX);
else obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_AFTER_THREESIDE);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_Threeside_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(obj.getVar("Threeside").getBool(0)){
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_THREESIDE, STATE_PRIORITY_IGNORE_FORCE, true);
}
else obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 1:
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onAttack_Threeside_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj || isStuck) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
break;
case 1:
break;
}
}
function onEnterFrame_Threeside_bykk(obj, frameIndex)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIPEX) < 1 && frameIndex == 6 && obj.getVar("Threeside").getBool(0)){
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_THREESIDE, STATE_PRIORITY_IGNORE_FORCE, true);
}
switch(frameIndex){
case 3:
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIPEX) > 0) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atthreeside/threeside_ex_threeside_12.ani", 0, 3, 0);
break;
case 5:
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIPEX) > 0) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atthreeside/threeside_ex_threeside_11.ani", 0, 4, 0);
case 6:
obj.resetHitObjectList();
break;
}
break;
}
}
function onEndState_Threeside_bykk(obj, newState)
{
if(!obj) return;
}
function onKeyFrameFlag_Threeside_bykk(obj, flagIndex)
{
if (!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
if(flagIndex == 3){
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 4, skill_level);
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIPEX) > 0) cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_VAGABOND,0,0,0,obj.getDirection(),3,SKILL_VAGABOND_THREESIDE,2,totalDamage,0,0,0,0,0,0,0,1);
else cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_VAGABOND,0,0,0,obj.getDirection(),3,SKILL_VAGABOND_THREESIDE,1,totalDamage,0,0,0,0,0,0,0,1);
}
break;
}
}
function onProcCon_Threeside_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(obj.getVar("Threeside").getBool(0) == false){
local curAni = sq_GetCurrentAnimation(obj);
local curframe = obj.sq_GetCurrentFrameIndex(curAni);
obj.setSkillCommandEnable(SKILL_VAGABOND_THREESIDE, true);
local b_useskill = obj.sq_IsEnterSkill(SKILL_VAGABOND_THREESIDE);
if(b_useskill != -1 && curframe > 1) obj.getVar("Threeside").setBool(0,true);
}
break;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Zweivoltageex_bykk(obj)
{
if (!obj) return 0;
if(obj.getVar("zwei").get_obj_vector_size() > 0 && (sq_GetIntData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 5) > 0 || ZWEIVOLTAGE_STONE > 0)){
obj.sq_IntVectClear();
obj.sq_IntVectPush(3);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_ZWEIVOLTAGEEX, STATE_PRIORITY_IGNORE_FORCE, true);
return 0;
}
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_ZWEIVOLTAGEEX);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_ZWEIVOLTAGEEX, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function onSetState_Zweivoltageex_bykk(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(ANIMATION_VAGABOND_ZWEIVOLTAGEHORIZONSLASH);
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_ZWEIVOLTAGEVERTICALCAST);
local currentAni = sq_GetCurrentAnimation(obj);
local delaySum = currentAni.getDelaySum(0,0);
local size = obj.getVar("zwei_tar").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("zwei_tar").get_obj_vector(i);
if(targetObj){
local activeObj = sq_GetCNRDObjectToActiveObject(targetObj);
local masterAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, "character/atswordman/3_vagabond/zweivoltageex/ap_zweivoltageex.nut");
if(!sq_IsFixture(activeObj)) sq_MoveToAppendageForce(activeObj, obj, obj, 100, 0, 200, delaySum, true, masterAppendage);
}
}
}
break;
case 2:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_ZWEIVOLTAGEVERTICAL);
local currentAni = sq_GetCurrentAnimation(obj);
local delaySum = currentAni.getDelaySum(0,0);
local size = obj.getVar("zwei_tar").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("zwei_tar").get_obj_vector(i);
if(targetObj){
local activeObj = sq_GetCNRDObjectToActiveObject(targetObj);
local masterAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, "character/atswordman/3_vagabond/zweivoltageex/ap_zweivoltageex.nut");
if(!sq_IsFixture(activeObj)) sq_MoveToAppendageForce(activeObj, obj, activeObj, 0, 0, -sq_GetZPos(activeObj), delaySum, true, masterAppendage);
}
}
}
break;
case 3:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_ZWEIVOLTAGEEXPLOSION);
local attackObj = obj.getVar("zwei").get_obj_vector(0);
if(attackObj){
local colObj = sq_GetCNRDObjectToCollisionObject(attackObj);
colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
}
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_Zweivoltageex_bykk(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(SKILL_VAGABOND_ZWEIVOLTAGEEX, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 2:
case 3:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onEnterFrame_Zweivoltageex_bykk(obj, frameIndex)
{
if(!obj || !obj.isMyControlObject()) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
switch(frameIndex){
case 1: obj.sq_PlaySound("SW_CROSS_SWORD"); break;
case 3: obj.sq_PlaySound("CROSS_SWORD_READY"); break;
case 13:
obj.sq_PlaySound("CROSS_SWORD_01");
sq_SetMyShake(obj, 5, 50);
sq_flashScreen(obj, 50, 100, 50, 204, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
//`create zwei voltage horizon` 119 -1 62
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 0, skill_level);
local totalDamage2 = sq_GetLevelData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 2, skill_level);
local lifeTime = sq_GetIntData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 1);
local isStone = 0;
if(sq_GetIntData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 5) > 0 || ZWEIVOLTAGE_STONE > 0){
isStone = 1;
totalDamage = totalDamage * 2;
totalDamage2 = (totalDamage2.tofloat() * 1.88).tointeger();
lifeTime = lifeTime + 1500;
}
local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger();
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 119, -1, 62, obj.getDirection(), 3, SKILL_VAGABOND_ZWEIVOLTAGEEX, 2, totalDamage, lifeTime, damageRate, isStone, 0, 0, 0, 0, 1);
break;
case 25:
if(sq_GetIntData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 5) > 0 || ZWEIVOLTAGE_STONE > 0){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
break;
}
break;
case 1:
switch(frameIndex){
case 1: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atzweivoltage/zweivoltage_partb_eff_a.ani", 0, 1, 0); break;
case 3: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atzweivoltage/zweivoltage_partb_eff_b.ani", 0, 1, 0); break;
}
break;
case 2:
switch(frameIndex){
case 1:
obj.sq_PlaySound("CROSS_SWORD_02");
sq_SetMyShake(obj, 10, 100);
sq_flashScreen(obj, 50, 100, 50, 204, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
//`create zwei voltage vertical` 100 -1 69
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 0, skill_level);
local totalDamage2 = sq_GetLevelData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 2, skill_level);
local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger();
local lifeTime = sq_GetIntData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 1);
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 100, -1, 69, obj.getDirection(), 3, SKILL_VAGABOND_ZWEIVOLTAGEEX, 1, totalDamage, lifeTime, damageRate,0,0,0,0,0,1);
obj.getVar("rapid_step_enable").setBool(0, true);
obj.getVar("EnableHermitTripleStep").setBool(0, true);
break;
}
break;
}
}
function onAttack_Zweivoltageex_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj || isStuck) return;
}
function onEndState_Zweivoltageex_bykk(obj, newState)
{
if(!obj) return;
if(newState != SKILL_VAGABOND_ZWEIVOLTAGEEX){
if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false);
if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false);
}
}
function onKeyFrameFlag_Zweivoltageex_bykk(obj, flagIndex)
{
if (!obj) return;
}
function onProcCon_Zweivoltageex_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
local currentAni = sq_GetCurrentAnimation(obj);
local currentT = sq_GetCurrentTime(currentAni);
local delaySum = currentAni.getDelaySum(0,0);
switch(subState){
case 1:
local vz = sq_GetAccel(0, 200, currentT, delaySum, true);
sq_setCurrentAxisPos(obj, 2, vz);
break;
case 2:
local vz = sq_GetAccel(200, 0, currentT, delaySum, false);
if(currentT > delaySum) vz = 0;
sq_setCurrentAxisPos(obj, 2, vz);
break;
}
}