Rindro-Sqr/user/114.66.45.221/3_atswordman_7.c

3301 lines
138 KiB
C
Raw Normal View History

2025-11-08 12:21:06 +08:00
function checkExecutableSkill_Devilslash_bykk(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_DEVILSLASH);
if (isUse){
obj.sq_IsEnterSkillLastKeyUnits(SKILL_SWORDMASTER_BYKK_DEVILSLASH);
obj.getVar("chargeatk_devilslash").setBool(0, false);
obj.getVar("isDash_devilslash").setBool(0, false);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Devilslash_bykk(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Devilslash_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
local aniSet = [99,100,101,102,103,756,755];
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD), apdPath = "character/atswordman/1_swordmaster/changesword/ap_changesword.nut";
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath) && !skill.isSealFunction()) aniSet = [267,268,269,270,271,758,757];
obj.sq_SetCurrentAnimation(aniSet[subState]);
if(subState >= 3) obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local element = 4;
local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut");
if(AddAppendage) element = AddAppendage.getVar("elementIndex").getInt(10);
local effSet = [["effect/animation/atdevilslash/"],["nothing/","nothing/","nothing/","nothing/","nothing/","fire/","ice/","dark/","light/","nothing/"],["charge_body_1.ani","charge_body_2.ani","charge_body_3.ani","charge_body_1.ani","dash_body.ani"]];
local effectSet = ["devilslashcharge1","devilslashcharge2","devilslashcharge3","devilslashdash","devilslashmultiattack","newatdevilslashnormalfinish","newatdevilslashchargefinishbody"];
changeSwordEffect_bykk(obj, effectSet[subState], SKILL_SWORDMASTER_BYKK_DEVILSLASH);
if(subState <= 4){
obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation(effSet[0][0]+effSet[1][element]+effSet[2][subState]), 0, 0);
}
switch(subState){
case 0:
obj.sq_PlaySound("SW_COUNTERSLASH");
break;
case 3:
obj.getVar("devilslash").setInt(10, sq_GetXPos(obj));
obj.getVar("devilslash").setInt(11, 200);
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(0, 0);
obj.setTimeEvent(10, delay / 5, 15, true);
break;
case 4:
local inputConut = obj.getRapidInputFrequency();
inputConut = inputConut.tointeger();
if(inputConut > 2) obj.getVar("chargeatk_devilslash").setBool(0, true);
obj.sq_PlaySound("SW_DEVILSLASH");
obj.sq_PlaySound("DEVILSLASH_LOOP",2000);
local dam = 0, min = 4, max = 5;
switch(obj.getVar("charge_devilslash").getInt(10)){
case 1: dam = 1; min = 6; max = 7; break;
case 2: dam = 2; min = 8; max = 9; break;
}
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DEVILSLASH, -1, dam, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH).tofloat() / 100.0) + 100;
local hitMax = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, min);
if(obj.getVar("chargeatk_devilslash").getBool(0)) hitMax = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, max);
local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, 17);
if(obj.getVar("charge_devilslash").getInt(10) == 2 && obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0){
totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 2, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY))) / 100;
sizeRate = sizeRate * sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 13, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY)) / 100;
local apdPath = "character/atswordman/1_swordmaster/heavyswordmastery/ap_heavyswordmastery.nut";
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)){
local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true);
local bufftime = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 2);
addAppendage.sq_SetValidTime(bufftime);
addAppendage.setEnableIsBuff(true);
addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY));
CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true);
obj.sq_SetSuperArmorUntilTime(obj, bufftime);
}
}
local currentAni = obj.getCurrentAnimation();
local speedRate = 5000 / currentAni.getDelaySum(0, 0);
obj.getVar("develslash_multi").setInt(0, totalDamage);
obj.getVar("develslash_multi").setInt(1, hitMax);
obj.getVar("develslash_multi").setInt(2, sizeRate);
obj.getVar("develslash_multi").setInt(3, speedRate);
obj.getVar("develslash_multi").setInt(4, 0);
// cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_DEVILSLASH,1,totalDamage,hitMax,4,speedRate,sizeRate,0,0,0,1);
break;
case 5:
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DEVILSLASH, -1, 3, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH).tofloat() / 100.0) + 100;
if(obj.getVar("charge_devilslash").getInt(10) > 0) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DEVILSLASH, -1, 4, 1.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 71));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
setWeaponMaster_attackElement(obj);
// local effectSet = [["effect/animation/atdevilslash/fire/finish2_mu.ani","effect/animation/atdevilslash/fire/finish2_slash_fire.ani"],["effect/animation/atdevilslash/ice/finish2_ice.ani","effect/animation/atdevilslash/ice/finish2_slash_ice.ani"],["effect/animation/atdevilslash/dark/finish2_dark_n.ani","effect/animation/atdevilslash/dark/finish2_dark.ani","effect/animation/atdevilslash/dark/finish2_slash_dark.ani"],["effect/animation/atdevilslash/light/finish2_light.ani","effect/animation/atdevilslash/light/finish2_slash_light.ani"],["effect/animation/atdevilslash/nothing/finish2_mu.ani","effect/animation/atdevilslash/nothing/finish2_slash_mu.ani"]];
// for(local i = 0; i < effectSet[4].len(); i++){
// obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation(effectSet[4][i]), 0, 0);
// }
break;
case 6:
// local effectSet = ["effect/animation/atdevilslash/fire/napdo_body_mu.ani","effect/animation/atdevilslash/ice/napdo_body_mu.ani","effect/animation/atdevilslash/dark/napdo_body_mu.ani","effect/animation/atdevilslash/light/napdo_body_mu.ani","effect/animation/atdevilslash/nothing/napdo_body_mu.ani"];
// obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation(effectSet[4]), 0, 0);
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(0, 7);
local delay2 = currentAni.getDelaySum(8, 15);
local delay3 = currentAni.getDelaySum(16, 19);
sq_flashScreen(obj, delay, 100, delay2, 204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
break;
}
}
function onEndCurrentAni_Devilslash_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
case 3:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 2:
obj.getVar("charge_devilslash").setInt(10, 2);
obj.getVar("chargeatk_devilslash").setBool(0, true);
obj.sq_IntVectClear();
if(obj.getVar("isDash_devilslash").getBool(0)) obj.sq_IntVectPush(4);
else obj.sq_IntVectPush(3);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 4:
switch(obj.getVar("charge_devilslash").getInt(10)){
case 0:
case 1:
obj.sq_IntVectClear();
obj.sq_IntVectPush(5);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_IntVectPush(6);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
break;
case 5:
case 6:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onChangeSkillEffect_Devilslash_bykk(obj, skillIndex, receiveData)
{
if(!obj || skillIndex != 136) return;
}
function onEnterFrame_Devilslash_bykk(obj, frameIndex)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 6:
switch(frameIndex){
case 8:
// obj.stopSound(2000);
// obj.sq_PlaySound("SW_DEVILSLASH_FIN");
// obj.sq_PlaySound("DEVILSLASH_EXP");
// sq_SetMyShake(obj, 8, 300);
// local element = 4;
// local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut");
// if(AddAppendage) element = AddAppendage.getVar("elementIndex").getInt(10);
// local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DEVILSLASH, -1, 5, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH).tofloat() / 100.0) + 100;
// local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, 18);
// if(obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0){
// totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 3, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY))) / 100;
// sizeRate = sizeRate * sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 13, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY)) / 100;
// }
// // cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,100,0,20,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_DEVILSLASH,2,totalDamage,sizeRate,element,0,0,0,0,0,1);
// cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,100,0,20,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_DEVILSLASH,11,totalDamage,sizeRate,0,0,0,0,0,0,1);
break;
}
break;
}
}
function onAttack_Devilslash_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj) return false;
}
function onEndState_Devilslash_bykk(obj, newState)
{
if(!obj) return;
if(newState != SKILL_SWORDMASTER_BYKK_DEVILSLASH){
sq_SimpleMoveToNearMovablePos(obj,1600);
obj.stopSound(2000);
blademastery_buff(obj);
}
}
function onProcCon_Devilslash_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
local stateTime = obj.sq_GetStateTimer();
local bDownKey = obj.isDownSkillLastKey();
local currentAni = obj.getCurrentAnimation();
local currentT = sq_GetCurrentTime(currentAni);
switch(subState){
case 0:
case 1:
case 2:
if(obj.getVar("isDash_devilslash").getBool(0) == false){
if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT)){
obj.getVar("isDash_devilslash").setBool(0, true);
}
}
if(!bDownKey && stateTime >= sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, 14)){
obj.getVar("charge_devilslash").setInt(10, subState);
local delaySum = currentAni.getDelaySum(false);
//if(currentT >= delaySum * 70 / 100) obj.getVar("chargeatk_devilslash").setBool(0, true);
obj.sq_IntVectClear();
if(obj.getVar("isDash_devilslash").getBool(0)) obj.sq_IntVectPush(4);
else obj.sq_IntVectPush(3);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
else{
if((subState == 0 && currentT >= sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, 0)) || (subState == 1 && currentT >= sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, 1))|| (subState == 2 && currentT >= sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, 2) * 430)){
if(subState == 2){
obj.getVar("charge_devilslash").setInt(10, 2);
//obj.getVar("chargeatk_devilslash").setBool(0, true);
obj.sq_IntVectClear();
if(obj.getVar("isDash_devilslash").getBool(0)) obj.sq_IntVectPush(4);
else obj.sq_IntVectPush(3);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput();
break;
case 3:
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput();
break;
}
}
function onProc_Devilslash_bykk(obj)
{
if(!obj) return;
}
function onTimeEvent_Devilslash_bykk(obj, timeEventIndex, timeEventCount)
{
if (!obj) return false;
switch(timeEventIndex){
case 10:
local v = sq_GetUniformVelocity(0, obj.getVar("devilslash").getInt(11), timeEventCount, 15);
local dstX = sq_GetDistancePos(obj.getVar("devilslash").getInt(10), obj.getDirection(), v);
if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);
break;
case 11:
switch(obj.getVar("charge_devilslash").getInt(10)){
case 0:
case 1:
obj.sq_IntVectClear();
obj.sq_IntVectPush(5);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_IntVectPush(6);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
break;
}
return true;
}
function onKeyFrameFlag_Devilslash_bykk(obj, flagIndex)
{
if (!obj) return false;
switch(flagIndex){
case 11:
sq_flashScreen(obj, 0, 30, 270, 153, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 7, 240);
break;
case 21:
//[OFFSET] `Create Finish` 43 0 103
obj.stopSound(2000);
obj.sq_PlaySound("SW_DEVILSLASH_FIN");
obj.sq_PlaySound("DEVILSLASH_EXP");
sq_SetMyShake(obj, 8, 300);
// local element = 4;
// local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut");
// if(AddAppendage) element = AddAppendage.getVar("elementIndex").getInt(10);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DEVILSLASH, -1, 5, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH).tofloat() / 100.0);
local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, 18);
if(obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0){
totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 3, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY))) / 100;
sizeRate = sizeRate * sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 13, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY)) / 100;
}
local speedRate = obj.getVar("develslash_multi").getInt(3);
// cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,100,0,20,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_DEVILSLASH,2,totalDamage,sizeRate,element,0,0,0,0,0,1);
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,43,0,103,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_DEVILSLASH,11,totalDamage,sizeRate,speedRate,0,0,0,0,0,1);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/10_atswordman_bykk/atdevilslash/newatdevilslashchargeattackeffect_00.ani", 43, 0, 103);
break;
case 31:
case 32:
case 33:
case 34:
case 35:
case 36:
local hitCount = obj.getVar("develslash_multi").getInt(4);
local totalDamage = obj.getVar("develslash_multi").getInt(0);
local hitMax = obj.getVar("develslash_multi").getInt(1);
print("hitCount = "+hitCount+",,hitMax = "+hitMax);
if(hitCount + 1 >= hitMax){
obj.setTimeEvent(11, 100, 1, true);
break;
}
else obj.getVar("develslash_multi").setInt(4, hitCount + 1);
local sizeRate = obj.getVar("develslash_multi").getInt(2);
local speedRate = obj.getVar("develslash_multi").getInt(3);
local offSet = [[51,0,56],[80,0,86],[51,0,46],[100,0,85],[61,0,56],[68,0,50]];
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,offSet[flagIndex - 31][0],offSet[flagIndex - 31][1],offSet[flagIndex - 31][2],obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_DEVILSLASH,10,totalDamage,speedRate,sizeRate,flagIndex,0,0,0,0,1);
break;
}
return true;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Dragonupex_bykk(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_DRAGONUPEX);
if (isUse){
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX);
obj.sq_IntVectClear();
if(sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX, 20) > 0 || DRAGONUPEX_STONE > 0 || sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD, 32) > 0 || skill.isSealFunction()) obj.sq_IntVectPush(3);
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DRAGONUPEX, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Dragonupex_bykk(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Dragonupex_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
local aniSet = [111,112,113,114];
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD), apdPath = "character/atswordman/1_swordmaster/changesword/ap_changesword.nut";
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath) && !skill.isSealFunction()) aniSet = [272,274,273,275];
obj.sq_SetCurrentAnimation(aniSet[subState]);
local effSet = ["dragonupexcasting","dragonupexdash","dragonupexcutting","dragonupexfrontdash"];
changeSwordEffect_bykk(obj, effSet[subState], SKILL_SWORDMASTER_BYKK_DRAGONUPEX);
if(subState == 1 || subState == 3){
obj.getVar("dragonupex_move").setInt(10, sq_GetXPos(obj));
local timeEventMax = 10, moveMax = 200;
if(subState == 3){timeEventMax = 30, moveMax = 300;}
obj.setTimeEvent(10, 10, timeEventMax, true);
obj.getVar("dragonupex_move").setInt(11, moveMax);
obj.getVar("dragonupex_move").setInt(12, timeEventMax);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DRAGONUPEX, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX).tofloat() / 100.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 234));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
setWeaponMaster_attackElement(obj);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atdragonup/dragonupexfrontdash_dust.ani", 0, 0, 0);
}
if(subState == 3){
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DRAGONUPEX, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX).tofloat() / 100.0) + 100;
local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DRAGONUPEX, -1, 2, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX).tofloat() / 100.0) + 100;
local hitMax = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX, 0);
local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX, 17) + 30;
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,75,0,75,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_DRAGONUPEX,2,totalDamage,hitMax,totalDamage2,sizeRate,0,0,0,0,1);
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,75,0,15,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_DRAGONUPEX,3,0,0,0,0,0,0,0,0,0);
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atdragonup/atdragonuptalismanhandeffect_00.ani", 0, 0, 0);
sq_moveWithParent(obj, pooledObj);
for(local i = 1; i < 7; i++){
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atdragonup/atdragonuptalismanbody_0"+i.tostring()+".ani", 0, 0, 0);
}
}
}
function onEndCurrentAni_Dragonupex_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DRAGONUPEX, 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 onAttack_Dragonupex_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj) return false;
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
isMagicSwordUp_Attack(obj,damager,boundingBox);
}
local subState = obj.getSkillSubState();
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
if(obj.isExistTimeEvent(10)) obj.stopTimeEvent(10);
if(subState == 1){
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DRAGONUPEX, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
}
function onEnterFrame_Dragonupex_bykk(obj, frameIndex)
{
if(!obj) return;
}
function onEndState_Dragonupex_bykk(obj, newState)
{
if(!obj) return;
if(newState != SKILL_SWORDMASTER_BYKK_DRAGONUPEX){
blademastery_buff(obj);
sq_SimpleMoveToNearMovablePos(obj,300);
}
}
function onKeyFrameFlag_Dragonupex_bykk(obj, flagIndex)
{
if (!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 2:
if(flagIndex == 1000){
obj.sq_PlaySound("SW_SPOUT");
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DRAGONUPEX, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX).tofloat() / 100.0) + 100;
local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DRAGONUPEX, -1, 2, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX).tofloat() / 100.0) + 100;
local hitMax = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX, 0);
local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX, 17);
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,150,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_DRAGONUPEX,1,totalDamage,hitMax,totalDamage2,sizeRate,0,0,0,0,1);
}
break;
}
}
function onTimeEvent_Dragonupex_bykk(obj, timeEventIndex, timeEventCount)
{
if(!obj) return;
switch(timeEventIndex){
case 10:
local v = sq_GetUniformVelocity(0, obj.getVar("dragonupex_move").getInt(11), timeEventCount, obj.getVar("dragonupex_move").getInt(12));
local dstX = sq_GetDistancePos(obj.getVar("dragonupex_move").getInt(10), obj.getDirection(), v);
sq_setCurrentAxisPos(obj, 0, dstX);
if(timeEventCount >= obj.getVar("dragonupex_move").getInt(12) && obj.getVar("dragonupex_move").getInt(12) < 30){
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DRAGONUPEX, STATE_PRIORITY_IGNORE_FORCE, true);
}
break;
}
}
function onProcCon_Dragonupex_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState)
{
case 1:
if (sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 1)
obj.sq_SetStaticMoveInfo(0, 0, 0, false);
else if (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 0)
obj.sq_SetStaticMoveInfo(0, 0, 0, false);
if (sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 0)
obj.sq_SetStaticMoveInfo(0, 3800, -1000, false);
else if (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 1)
obj.sq_SetStaticMoveInfo(0, 3800, -1000, false);
break;
}
}
function onProc_Dragonupex_bykk(obj)
{
if(!obj) return;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Excalibur_bykk(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_EXCALIBUR);
if (isUse){
obj.sq_IntVectClear();
if(obj.getWeaponSubType() == 2 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY) > 0) obj.sq_IntVectPush(11);
else obj.sq_IntVectPush(10);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_EXCALIBUR, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Excalibur_bykk(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Excalibur_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
if(subState >= 10){
switch(subState){
case 10:
obj.sq_SetCurrentAnimation(750);
obj.sq_AddStateLayerAnimation(1001,obj.sq_CreateCNRDAnimation("effect/animation/10_atswordman_bykk/atexcalibur/newatexcaliburbeffect_00.ani"), 0, 0);
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/10_atswordman_bykk/atexcalibur/newatexcaliburbbottom_00.ani", 0, 0, 0);
sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM);
obj.sq_SetCurrentAttackInfo(241);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_EXCALIBUR, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR).tofloat() / 100.0);
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
break;
case 11:
obj.sq_SetCurrentAnimation(751);
obj.sq_SetCurrentAttackInfo(243);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_EXCALIBUR, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR).tofloat() / 100.0);
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
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_EXCALIBUR");
break;
}
return;
}
obj.sq_SetStaticMoveInfo(0, 20 * (3 - subState), 30 * (3 - subState), false);
obj.sq_SetMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL);
local aniSet = [96,97,98];
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD), apdPath = "character/atswordman/1_swordmaster/changesword/ap_changesword.nut";
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath) && !skill.isSealFunction()) aniSet = [276,277,278];
local atkSet = [66,67,68];
obj.sq_SetCurrentAnimation(aniSet[subState]);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
obj.sq_SetCurrentAttackInfo(atkSet[subState]);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_EXCALIBUR, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR).tofloat() / 100.0) + 100;
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
setWeaponMaster_attackElement(obj);
local effSet = [["effect/animation/atexcalibur/excalibur1_fire_slash_fire.ani","effect/animation/atexcalibur/excalibur1_ice_slash_ice.ani","effect/animation/atexcalibur/excalibur1_dark_slash_dark.ani","effect/animation/atexcalibur/excalibur1_light_slash_light.ani","effect/animation/atexcalibur/excalibur1_mu_slash_mu.ani"],["effect/animation/atexcalibur/excalibur2_fire_slash_fire.ani","effect/animation/atexcalibur/excalibur2_ice_slash_ice.ani","effect/animation/atexcalibur/excalibur2_dark_slash_dark.ani","effect/animation/atexcalibur/excalibur2_light_slash_light.ani","effect/animation/atexcalibur/excalibur2_mu_slash_mu.ani"],["effect/animation/atexcalibur/excalibur3_fire_slash_fire.ani","effect/animation/atexcalibur/excalibur3_ice_slash_ice.ani","effect/animation/atexcalibur/excalibur3_dark_slash_dark.ani","effect/animation/atexcalibur/excalibur3_light_slash_light.ani","effect/animation/atexcalibur/excalibur3_mu_slash_mu.ani"]];
local element = 4;
local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut");
if(AddAppendage) element = AddAppendage.getVar("elementIndex").getInt(10);
obj.sq_AddStateLayerAnimation(1001,obj.sq_CreateCNRDAnimation(effSet[subState][element]), 0, 0);
//if(subState == 2) obj.sq_PlaySound("SW_EXCALIBUR");
}
function onEndCurrentAni_Excalibur_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
case 10:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_EXCALIBUR, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 2:
case 11:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onAttack_Excalibur_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj) return false;
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
isMagicSwordUp_Attack(obj,damager,boundingBox);
}
}
function onEnterFrame_Excalibur_bykk(obj, frameIndex)
{
if(!obj) return;
}
function onEndState_Excalibur_bykk(obj, newState)
{
if(!obj) return;
if(newState != SKILL_SWORDMASTER_BYKK_EXCALIBUR){
blademastery_buff(obj);
}
}
function onProcCon_Excalibur_bykk(obj)
{
if(!obj) return;
if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 1) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 0)) obj.sq_SetStaticMoveInfo(0, 0, 0, false);
}
function onProc_Excalibur_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
}
function onKeyFrameFlag_Excalibur_bykk(obj, flagIndex)
{
if (!obj) return;
switch(flagIndex){
case 1:
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_EXCALIBUR, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR).tofloat() / 100.0) + 100;
local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_EXCALIBUR, -1, 2, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR).tofloat() / 100.0) + 100;
local element = 4;
local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut");
if(AddAppendage) element = AddAppendage.getVar("elementIndex").getInt(10);
local baseX = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR, 2) - 50;
local randomX = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR, 3), randomY = 35;
local createMax = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR, 4);
local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR, 9);
local sub = 0, baseT = 0;
if(createMax > 8) baseT = baseT * 8 / createMax;
if(obj.getWeaponSubType() == 2 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY) > 0){
sub = 1
local skillLevel = sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY);
randomX = randomX * (100 - sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 12, skillLevel)) / 100;
randomY = randomY * (100 - sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 12, skillLevel)) / 100;
sizeRate = sizeRate * sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 3, skillLevel) / 100;
totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 6, skillLevel)) / 100;
totalDamage2 = totalDamage2 * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 6, skillLevel)) / 100;
baseT = 0;
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0 - sizeRate,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_EXCALIBUR,3,totalDamage2,sizeRate,0,0,0,0,0,0,1);
}
for(local i = 0; i < createMax; i++){
local x = baseX + sq_getRandom(-randomX, randomX), y = sq_getRandom(-randomY, randomY);
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,x,y,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_EXCALIBUR,1,totalDamage,element,(i + 1) * baseT,totalDamage2,sub,0,0,0,1);
}
break;
case 11: sq_SetMyShake(obj, 5, 120); break;
case 12:
obj.sq_SetCurrentAttackInfo(242);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_EXCALIBUR, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR).tofloat() / 100.0);
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
case 21:
sq_SetMyShake(obj, 8, 240);
//[OFFSET] `create explosion` 150 0 0
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_EXCALIBUR, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR).tofloat() / 100.0);
local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_EXCALIBUR, 9);
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,150,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_EXCALIBUR,10,totalDamage,sizeRate,0,0,0,0,0,0,1);
break;
case 22:
sq_flashScreen(obj, 0, 40, 320, 153, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
break;
}
}
function onTimeEvent_Excalibur_bykk(obj, timeEventIndex, timeEventCount)
{}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Halfmoon_bykk(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_HALFMOON);
if (isUse){
obj.getVar("halfmoon_max").setBool(0, false);
obj.getVar("halfmoon_bool").setBool(0, false);
obj.getVar("halfmoon_bool").setBool(1, false);
obj.sq_IsEnterSkillLastKeyUnits(SKILL_SWORDMASTER_BYKK_HALFMOON);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_HALFMOON, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Halfmoon_bykk(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Halfmoon_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
local aniSet = [90,92,91];
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()) aniSet = [282,284,283];
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(aniSet[subState]);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athalfmoon/attack_dust.ani", 0, -1, 0);
changeSwordEffect_bykk(obj, "halfmoon1", SKILL_SWORDMASTER_BYKK_HALFMOON);
if(obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0) sq_SetCustomDamageType(obj, true, 1);
obj.getVar("halfmoonBool").setBool(0, false);
obj.getVar("halfmoonBool").setBool(1, false);
break;
case 1:
obj.sq_SetCurrentAnimation(aniSet[subState]);
changeSwordEffect_bykk(obj, "halfmoon3", SKILL_SWORDMASTER_BYKK_HALFMOON);
break;
case 2:
obj.sq_SetCurrentAnimation(aniSet[subState]);
changeSwordEffect_bykk(obj, "halfmoon2", SKILL_SWORDMASTER_BYKK_HALFMOON);
obj.sq_PlaySound("HALFMOON");
obj.sq_PlaySound("SW_HALFMOON");
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_SWORDMASTER_BYKK_HALFMOON, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_HALFMOON).tofloat() / 100.0) + 100;
local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_HALFMOON, 10);
local hitMax = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_HALFMOON, 3);
if(obj.getVar("halfmoon_max").getBool(0)){
totalDamage = totalDamage * (100 + sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_HALFMOON, 5)) / 100;
if(obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0){
totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 1, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY))) / 100;
totalDamage = totalDamage * hitMax;
hitMax = 1;
sizeRate = sizeRate * sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 13, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY)) / 100;
local apdPath = "character/atswordman/1_swordmaster/heavyswordmastery/ap_heavyswordmastery.nut";
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)){
local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true);
local bufftime = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 2);
addAppendage.sq_SetValidTime(bufftime);
addAppendage.setEnableIsBuff(true);
addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY));
CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true);
obj.sq_SetSuperArmorUntilTime(obj, bufftime);
}
}
}
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(1, 1);
local speedRate = 6000 / delay;
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_HALFMOON,1,totalDamage,sizeRate,speedRate,hitMax,0,0,0,0,1);
local movespeed = 500;
if(obj.getVar("halfmoon_max").getBool(0)) movespeed = 600;
obj.getVar("halfmoon_move").setInt(10, movespeed);
if(obj.getVar("halfmoonBool").getBool(1)) break;
obj.sq_SetStaticMoveInfo(0, movespeed, movespeed, false);
obj.sq_SetMoveDirection(obj.getDirection() , ENUM_DIRECTION_NEUTRAL);
break;
}
}
function onEndCurrentAni_Halfmoon_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_HALFMOON, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onAttack_Halfmoon_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj) return false;
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
isMagicSwordUp_Attack(obj,damager,boundingBox);
}
// local subState = obj.getSkillSubState();
// MagicswordupOccur(obj, damager, boundingBox, isStuck);
// MagicSword_BasiconAttack(obj, damager, boundingBox, isStuck);
}
function onEnterFrame_Halfmoon_bykk(obj, frameIndex)
{
if(!obj) return;
}
function onEndState_Halfmoon_bykk(obj, newState)
{
if(!obj) return;
if(newState != SKILL_SWORDMASTER_BYKK_HALFMOON){
if(obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0) sq_SetCustomDamageType(obj, true, 0);
blademastery_buff(obj);
}
}
function onProcCon_Halfmoon_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
if(obj.getVar("halfmoonBool").getBool(0) == false){
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT){
obj.getVar("halfmoonBool").setBool(0, true);
obj.getVar("halfmoonBool").setBool(1, true);
}
}
local bDownKey = obj.isDownSkillLastKey();
local stateTime = obj.sq_GetStateTimer();
local minTime = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_HALFMOON, 4);
if(!bDownKey && stateTime > minTime){
local maxTime = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HALFMOON, 1, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HALFMOON));
if(subState == 1) maxTime = 0;
if(stateTime > maxTime){
obj.getVar("halfmoon_max").setBool(0, true);
}
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_HALFMOON, STATE_PRIORITY_IGNORE_FORCE, true);
}
break;
}
}
function onProc_Halfmoon_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 2:
if(obj.getVar("halfmoonBool").getBool(1)) break;
if(obj.getVar("halfmoon_bool").getBool(0) == false){
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){
local movespeed = obj.getVar("halfmoon_move").getInt(10) * 2 / 5;
obj.sq_SetStaticMoveInfo(1, movespeed, movespeed, false);
obj.sq_SetMoveDirection(obj.getDirection() , ENUM_DIRECTION_UP);
obj.getVar("halfmoon_bool").setBool(0, true);
}
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){
local movespeed = obj.getVar("halfmoon_move").getInt(10) * 2 / 5;
obj.sq_SetStaticMoveInfo(1, movespeed, movespeed, false);
obj.sq_SetMoveDirection(obj.getDirection() , ENUM_DIRECTION_DOWN);
obj.getVar("halfmoon_bool").setBool(0, true);
}
}
if(obj.getVar("halfmoon_bool").getBool(1) == false){
if ((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 0) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 1)){
obj.getVar("halfmoon_bool").setBool(1, true);
}
else if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 1) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 0)){
local movespeed = obj.getVar("halfmoon_move").getInt(10);
obj.sq_SetStaticMoveInfo(0, -movespeed, -movespeed, false);
obj.sq_SetMoveDirection(obj.getDirection() , ENUM_DIRECTION_NEUTRAL);
obj.getVar("halfmoon_bool").setBool(1, true);
}
}
break;
}
}
function onKeyFrameFlag_Halfmoon_bykk(obj, flagIndex)
{
if (!obj) return;
}
function onTimeEvent_Halfmoon_bykk(obj, timeEventIndex, timeEventCount)
{}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_fusionblade_bykk(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_FUSIONBLADE);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_FUSIONBLADE, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_fusionblade_bykk(obj)
{
if (!obj) return false;
return true;
}
function onSetState_fusionblade_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
local aniSet = [740,741];
obj.sq_SetCurrentAnimation(aniSet[subState]);
switch(subState){
case 0://
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/atfusionblade/atfusionbladepiercingfront_00.ani"), 0, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atfusionblade/atfusionbladehitwavefront_00.ani", 250, 0, 75);
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(0, 10);
obj.getVar("fusionblade").setInt(10, sq_GetXPos(obj));
obj.setTimeEvent(1, delay, 1, false);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_FUSIONBLADE, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_FUSIONBLADE).tofloat() / 100.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 235));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
setWeaponMaster_attackElement(obj);
sq_flashScreen(obj, 720, 600, 200, 216, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
break;
case 1:
local appendage = obj.getVar().getAppendage(0);
if(appendage) appendage.setValid(false);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_FUSIONBLADE, -1, 2, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_FUSIONBLADE).tofloat() / 100.0) + 100;
local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_FUSIONBLADE, 12);
sq_SetMyShake(obj, 15, 60);
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,262,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_FUSIONBLADE,1,totalDamage,sizeRate,0,0,0,0,0,0,1);
break;
}
}
function onEndCurrentAni_fusionblade_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_FUSIONBLADE, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onAttack_fusionblade_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj) return false;
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
isMagicSwordUp_Attack(obj,damager,boundingBox);
}
}
function onEnterFrame_fusionblade_bykk(obj, frameIndex)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
switch(frameIndex){
case 4:
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_FUSIONBLADE, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_FUSIONBLADE).tofloat() / 100.0) + 100;
local angle = [0,-5,-10,-15];
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(0, 10);
local delay2 = currentAni.getDelaySum(11, 13);
for(local i = 0; i < 4; i++){
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,-50,0,(i+1)*50,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_FUSIONBLADE,3,i,delay,i*delay2,angle[i],totalDamage,0,0,0,1);
}
break;
case 12:
sq_SetMyShake(obj, 5, 200);
local appendage = sq_AttractToMe(obj, 500, 262, 1000);
obj.getVar().setAppendage(0,appendage);//设置ap
break;
case 14:
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atfusionblade/atfusionbladestartaurafront_00.ani", 250, 0, 75);
break;
}
break;
}
}
function onEndState_fusionblade_bykk(obj, newState)
{
if(!obj) return;
if(newState != SKILL_SWORDMASTER_BYKK_FUSIONBLADE){
local appendage = obj.getVar().getAppendage(0);
if(appendage) appendage.setValid(false);
blademastery_buff(obj);
}
}
function onProcCon_fusionblade_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
local frameIndex = sq_GetCurrentFrameIndex(obj);
if(frameIndex < 11 && obj.getVar("fusionblade").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("fusionblade").setBool(0, true);
}
break;
}
}
function onProc_fusionblade_bykk(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_fusionblade_bykk(obj, flagIndex)
{
if (!obj) return;
}
function onTimeEvent_fusionblade_bykk(obj, timeEventIndex, timeEventCount)
{
switch(timeEventIndex){
case 1:
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(11, 15);
obj.setTimeEvent(2, delay / 20, 20, false);
break;
case 2:
local moveX = 100;
if(obj.getVar("fusionblade").getBool(0)) moveX = 180;
local v = sq_GetUniformVelocity(0, moveX, timeEventCount, 20);
local dstX = sq_GetDistancePos(obj.getVar("fusionblade").getInt(10), obj.getDirection(), v);
if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);
break;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Illusionblade_bykk(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Illusionblade_bykk(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Illusionblade_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
local aniSet = [82,83];
local effSet = ["illusionblade","illusionblade2"];
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()) aniSet = [285,286];
obj.sq_SetCurrentAnimation(aniSet[subState]);
changeSwordEffect_bykk(obj, effSet[subState], SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_Illusionblade_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE).tofloat() / 100.0) + 100;
local hitMax = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE, -1, 1, 1.0) + 100;
local speedRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE, 1);
if(obj.getWeaponSubType() == 2){
local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE, -1, 2, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE).tofloat() / 100.0) + 100;
totalDamage2 = totalDamage2 * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 5, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY))) / 100;
local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE, 1) * sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 2, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY)) / 100;
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE,2,totalDamage,hitMax,totalDamage2,sizeRate,speedRate,0,0,0,1);
}
else cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE,1,totalDamage,hitMax,speedRate,0,0,0,0,0,1);
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 1:
blademastery_buff(obj);
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onTimeEvent_Illusionblade_bykk(obj, timeEventIndex, timeEventCount)
{}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Jackcatch_bykk(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_JACKCATCH);
if (isUse){
obj.getVar("jackCatch_tar").clear_obj_vector();
obj.sq_IntVectClear();
if(sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_JACKCATCH, 11) > 0 || JACKCATCH_STONE > 0 || sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD, 33) > 0) obj.sq_IntVectPush(7);
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_JACKCATCH, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Jackcatch_bykk(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Jackcatch_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 aniSet = [133,134,128,129,130,131,132,127];
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD), apdPath = "character/atswordman/1_swordmaster/changesword/ap_changesword.nut";
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath) && !skill.isSealFunction()) aniSet = [293,294,300,298,299,295,297,292];
obj.sq_SetCurrentAnimation(aniSet[subState]);
local effSet = ["jackcatchcast","jackcatchslash","jackcatch_light","jackcatch_fire","jackcatch_ice","jackcatch_dark","jackcatch_finish","jackcatch"];
changeSwordEffect_bykk(obj, effSet[subState], SKILL_SWORDMASTER_BYKK_JACKCATCH);
local soundSet = ["","R_REQUIEM_ATK","R_REQUIEM_ATK","R_REQUIEM_ATK","R_REQUIEM_ATK","R_REQUIEM_ATK","","SW_REQUIEM"];
if(soundSet[subState] != "") obj.sq_PlaySound(soundSet[subState]);
obj.getVar("jackcatch_move").setInt(10, sq_GetXPos(obj));
obj.getVar("jackcatch_move").setInt(11, sq_GetYPos(obj));
obj.getVar("jackcatch_move").setInt(12, sq_GetZPos(obj));
if(subState > 1 && subState <= 6){
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(0,0);
local speedRate = 80.0 / delay.tofloat();
local time = (10.0 / speedRate).tointeger();
obj.setTimeEvent(1, time, 10, true);
}
switch(subState){
case 0:
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.75, 0.75);
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(0,0);
local speedRate = 10000 / delay;
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,250,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_JACKCATCH,1,speedRate,0,0,0,0,0,0,0,0);
local baseX = [0,65,-65,0], baseY = [0,60,-60,0];
for(local i = 0; i < 4; i++){
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,250 + baseX[i],baseY[i],0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_JACKCATCH,2,i,speedRate,0,0,0,0,0,0,0);
}
break;
case 1:
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.5, 1.5);
break;
case 2:
case 3:
case 4:
case 5:
case 6:
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.75, 0.75);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_JACKCATCH, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_JACKCATCH).tofloat() / 100.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 75));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
setWeaponMaster_attackElement(obj);
local size = obj.getVar("jackCatch_tar").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("jackCatch_tar").get_obj_vector(i);
if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2);
}
}
local inputConut = obj.getRapidInputFrequency();
inputConut = inputConut.tointeger();
if(inputConut > 2){
local currentAni = obj.getCurrentAnimation();
currentAni.setSpeedRate(180.0);
}
break;
case 7:
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_JACKCATCH, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_JACKCATCH).tofloat() / 100.0) + 100;
totalDamage = totalDamage / 2;
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,250,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_JACKCATCH,4,1600,0,0,0,0,0,0,0,0);
local baseX = [0,65,-65,0], baseY = [0,60,-60,0], moveX = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 250), moveY = sq_GetYPos(obj);
for(local i = 0; i < 4; i++){
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,250,0,300,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_JACKCATCH,5,totalDamage,i,moveX,moveY,0,0,0,0,1);
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
break;
}
}
function onEndCurrentAni_Jackcatch_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_JACKCATCH, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 6:
local effectObj = obj.getVar("jackCatch_circle").get_obj_vector(0);
if(effectObj){
local colObj = sq_GetCNRDObjectToCollisionObject(effectObj);
colObj.addSetStatePacket(22, null, STATE_PRIORITY_IGNORE_FORCE, false, "");
}
case 7:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onAttack_Jackcatch_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj) return false;
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
isMagicSwordUp_Attack(obj,damager,boundingBox);
}
}
function onEnterFrame_Jackcatch_bykk(obj, frameIndex)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 6:
if(frameIndex == 7){
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_JACKCATCH, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_JACKCATCH).tofloat() / 100.0) + 100;
local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_JACKCATCH, 3);
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,1,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_JACKCATCH,3,totalDamage,sizeRate,0,0,0,0,0,0,1);
sq_SetMyShake(obj, 6, 200);
}
break;
}
}
function onEndState_Jackcatch_bykk(obj, newState)
{
if(!obj) return;
if(newState != SKILL_SWORDMASTER_BYKK_JACKCATCH){
blademastery_buff(obj);
sq_SimpleMoveToNearMovablePos(obj,1600);
local size = obj.getVar("jackCatch_tar").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("jackCatch_tar").get_obj_vector(i);
if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/1_swordmaster/jackcatch/ap_jackcatch.nut");
}
}
local VarName = ["jackCatch_circle_light","jackCatch_circle_fire","jackCatch_circle_ice","jackCatch_circle_dark"];
for(local i = 0; i < VarName.len(); i++){
local effectObj = obj.getVar(VarName[i]).get_obj_vector(0);
if(effectObj){
local colObj = sq_GetCNRDObjectToCollisionObject(effectObj);
colObj.setValid(false);
}
}
local effectObj = obj.getVar("jackCatch_circle").get_obj_vector(0);
if(effectObj){
local colObj = sq_GetCNRDObjectToCollisionObject(effectObj);
colObj.addSetStatePacket(22, null, STATE_PRIORITY_IGNORE_FORCE, false, "");
}
}
}
function onProc_Jackcatch_bykk(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_Jackcatch_bykk(obj, flagIndex)
{
if(!obj) return false;
}
function onTimeEvent_Jackcatch_bykk(obj, timeEventIndex, timeEventCount)
{
switch(timeEventIndex){
case 1:
local baseX = obj.getVar("jackcatch_move").getInt(10), baseY = obj.getVar("jackcatch_move").getInt(11);
local moveX = [0,0,480,-445,275,-110,78], moveY = [0,0,-20,40,40,-120,60], moveZ = 150;
local subState = obj.getSkillSubState();
local vx = sq_GetUniformVelocity(0, moveX[subState], timeEventCount, 10);
local vy = sq_GetUniformVelocity(0, moveY[subState], timeEventCount, 10);
if(subState == 6) moveZ = 0;
local vz = sq_GetUniformVelocity(sq_GetZPos(obj), moveZ, timeEventCount, 10);
local dstX = sq_GetDistancePos(baseX, obj.getDirection(), vx);
sq_setCurrentAxisPos(obj, 0, dstX);
sq_setCurrentAxisPos(obj, 1, baseY + vy);
sq_setCurrentAxisPos(obj, 2, vz);
if(timeEventCount >= 10){
local VarName = ["","","jackCatch_circle_light","jackCatch_circle_fire","jackCatch_circle_ice","jackCatch_circle_dark"];
switch(subState){
case 2:
case 3:
case 4:
case 5:
local effectObj = obj.getVar(VarName[subState]).get_obj_vector(0);
if(effectObj){
local colObj = sq_GetCNRDObjectToCollisionObject(effectObj);
colObj.addSetStatePacket(22, null, STATE_PRIORITY_IGNORE_FORCE, false, "");
}
break;
}
}
break;
case 2:
local vz = sq_GetUniformVelocity(obj.getVar("jackcatch_move").getInt(12), 0, timeEventCount, 10);
sq_setCurrentAxisPos(obj, 2, vz);
break;
}
}
function onProcCon_Jackcatch_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput();
break;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Laevateinn_bykk(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_LAEVATEINN);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_LAEVATEINN, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Laevateinn_bykk(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Laevateinn_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_PlaySound("SW_LAEVATEINN");
obj.sq_PlaySound("LAEVATEINN_CAST");
local aniSet = 144;
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD), apdPath = "character/atswordman/1_swordmaster/changesword/ap_changesword.nut";
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath) && !skill.isSealFunction()) aniSet = 229;
obj.sq_SetCurrentAnimation(aniSet);
changeSwordEffect_bykk(obj, "atlaevateinn", SKILL_SWORDMASTER_BYKK_LAEVATEINN);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.75, 0.75);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_LAEVATEINN, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_LAEVATEINN).tofloat() / 100.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 78));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
setWeaponMaster_attackElement(obj);
obj.sq_AddStateLayerAnimation(-10001,obj.sq_CreateCNRDAnimation("effect/animation/atlaevateinn/back_02.ani"), 0, 0);
obj.getVar("Laevateinn_target").clear_obj_vector();
local objectManager = obj.getObjectManager();
local apdPath = "character/atswordman/1_swordmaster/laevateinn/ap_laevateinn.nut";
local holdTime = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_LAEVATEINN, 0) * 10;
for(local i = 0; i < objectManager.getCollisionObjectNumber(); i++){
local object = objectManager.getCollisionObject(i);
if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) <= 1200 && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= 400){
if(!obj.getVar("Laevateinn_target").is_obj_vector(object)) obj.getVar("Laevateinn_target").push_obj_vector(object);
local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(object, obj, -1, false, apdPath, true);
sq_HoldAndDelayDie(object, obj, true, true, true, 200, 300, ENUM_DIRECTION_NEUTRAL, addAppendage);
addAppendage.sq_SetValidTime(holdTime);
}
}
sq_SendMessage(obj, 0, 1, 0);
break;
}
}
function onEndCurrentAni_Laevateinn_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_Laevateinn_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj) return false;
}
function onEndState_Laevateinn_bykk(obj, newState)
{
if(!obj) return;
if(newState != SKILL_SWORDMASTER_BYKK_LAEVATEINN){
// local flashScreenObj = obj.getVar().getObject(0);
// if(flashScreenObj){
// local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj);
// if(pflashScreen) pflashScreen.fadeOut();
// }
blademastery_buff(obj);
// local apdPath = "character/atswordman/1_swordmaster/laevateinn/ap_laevateinn.nut";
// local size = obj.getVar("Laevateinn_target").get_obj_vector_size();
// if(size > 0){
// for(local i = 0; i < size; i++){
// local targetObj = obj.getVar("Laevateinn_target").get_obj_vector(i);
// if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, apdPath);
// }
// }
sq_SendMessage(obj, 0, 0, 0);
}
}
function onEnterFrame_Laevateinn_bykk(obj, frameIndex)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(frameIndex){
case 0:
sq_SetMyShake(obj, 2, 150);
break;
case 1:
// `create wave` -2 0 -1
break;
case 5: sq_SetMyShake(obj,2,1500); break;
case 10: sq_flashScreen(obj,0,80,0,127,sq_RGB(255,255,255),GRAPHICEFFECT_NONE,ENUM_DRAWLAYER_BOTTOM); break;
case 18: sq_SetMyShake(obj,10,100); break;
}
}
function onKeyFrameFlag_Laevateinn_bykk(obj, flagIndex)
{
if (!obj) return;
if(flagIndex == 1){
obj.sq_PlaySound("R_SW_LAEVATEINN_FIN");
obj.sq_PlaySound("LAEVATEINN");
sq_flashScreen(obj,0,100,0,255,sq_RGB(255,255,255),GRAPHICEFFECT_NONE,ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 10, 350);
// `attack` 23 0 -31
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(26,26);
local speedRate = 12000 / delay;
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,-2,0,-1,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_LAEVATEINN,1,speedRate,0,0,0,0,0,0,0,0);
local apdPath = "character/atswordman/1_swordmaster/laevateinn/ap_laevateinn.nut";
local size = obj.getVar("Laevateinn_target").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("Laevateinn_target").get_obj_vector(i);
if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2);
}
}
}
}
function onTimeEvent_Laevateinn_bykk(obj, timeEventIndex, timeEventCount)
{}
function onProcCon_Laevateinn_bykk(obj)
{
if(!obj) return;
}
function onProc_Laevateinn_bykk(obj)
{
if(!obj) return;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Magicswordshoot_bykk(obj)
{
if(!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT);
if(isUse){
if(sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 6) < 1 || MAGICSWORDSHOOT_STONE < 1) obj.sq_IsEnterSkillLastKeyUnits(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Magicswordshoot_bykk(obj)
{
if (!obj) return false;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) return false;
return true;
}
function onSetState_Magicswordshoot_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
local element = 4;
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut");
if(addAppendage) element = addAppendage.getVar("elementIndex").getInt(10);
local aniSet = [[115,116,117],[118,119,120],[121,122,123],[124,125,126]];
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD), apdPath = "character/atswordman/1_swordmaster/changesword/ap_changesword.nut";
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath) && !skill.isSealFunction()) aniSet = [[306,304,305],[309,307,308],[303,301,302],[312,311,310]];
obj.sq_SetCurrentAnimation(aniSet[element][subState]);
local effSet = [["magicswordshot_"],["fire","ice","dark","light"],["_start","_loop","_shoot"]];
changeSwordEffect_bykk(obj, effSet[0]+effSet[1][element]+effSet[2][subState], SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT);
local effSet_front = [
["effect/animation/atmagicswordshoot/fire/01_ready/magicswordshot_ready_fire_body.ani",
"effect/animation/atmagicswordshoot/ice/01_ready/magicswordshot_ready_frozen_body.ani",
"effect/animation/atmagicswordshoot/dark/01_ready/magicswordshot_ready_shadow_body.ani",
"effect/animation/atmagicswordshoot/light/01_ready/magicswordshot_ready_light_body.ani"],
["effect/animation/atmagicswordshoot/fire/02_chargeloop/magicswordshot_ready_loop_fire_front.ani",
"effect/animation/atmagicswordshoot/ice/02_chargeloop/magicswordshot_ready_loop_frozen_front.ani",
"effect/animation/atmagicswordshoot/dark/02_chargeloop/magicswordshot_ready_loop_shadow_front.ani",
"effect/animation/atmagicswordshoot/light/02_chargeloop/magicswordshot_ready_loop_light_front.ani"],
["effect/animation/atmagicswordshoot/fire/03_shoot/magicswordshot_shoot_fire.ani",
"effect/animation/atmagicswordshoot/ice/03_shoot/magicswordshot_shoot_frozen.ani",
"effect/animation/atmagicswordshoot/dark/03_shoot/magicswordshot_shoot_shadow.ani",
"effect/animation/atmagicswordshoot/light/03_shoot/magicswordshot_shoot_light.ani"]
];
local effSet_back = ["effect/animation/atmagicswordshoot/fire/02_chargeloop/magicswordshot_ready_loop_fire_back.ani",
"effect/animation/atmagicswordshoot/ice/02_chargeloop/magicswordshot_ready_loop_frozen_back.ani",
"effect/animation/atmagicswordshoot/dark/02_chargeloop/magicswordshot_ready_loop_shadow_back.ani",
"effect/animation/atmagicswordshoot/light/02_chargeloop/magicswordshot_ready_loop_light_back.ani"];
switch(subState){
case 0: obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation(effSet_front[subState][element]), 0, 0); break;
case 1:
obj.sq_AddStateLayerAnimation(1001,obj.sq_CreateCNRDAnimation(effSet_front[subState][element]), 0, 0);
obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation(effSet_back[element]), 0, 0);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, -1, 2, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT).tofloat() / 100.0) + 100;
local atkIndex = [116,119,125,122];
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex[element]));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
setWeaponMaster_attackElement(obj);
obj.setTimeEvent(1, 100, -1, false);
break;
case 2:
obj.removeAllTimeEvent();
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation(effSet_front[subState][element]), 0, 0);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, -1, 2, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT).tofloat() / 100.0) + 100;
local hitMax = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 2);
local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, -1, 4, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT).tofloat() / 100.0) + 100;
switch(element){
case 0: totalDamage2 = totalDamage2 + obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 5, 1.0) + 100; break;
case 1: totalDamage2 = totalDamage2 + obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 1, 1.0) + 100; break;
case 2: totalDamage2 = totalDamage2 + obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 0, 1.0) + 100; break;
case 3: totalDamage2 = totalDamage2 + obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 10, 1.0) + 100; break;
}
local loadSlot = obj.sq_GetSkillLoad(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT);
if(loadSlot){
local loadnumber = loadSlot.getRemainLoadNumber();
if(loadnumber > 0){
totalDamage = totalDamage * (100 + sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 1) * loadnumber) / 100;
totalDamage2 = totalDamage2 * (100 + sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 1) * loadnumber) / 100;
if(loadnumber < sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 0)) loadSlot.decreaseLoadCount(loadnumber);
else loadSlot.decreaseLoadCount(sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 0));
}
}
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(0,2);
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT,1,totalDamage,element,hitMax,totalDamage2,delay,0,0,0,1);
break;
}
}
function onEndCurrentAni_Magicswordshoot_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onAttack_Magicswordshoot_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj) return false;
}
function onEnterFrame_Magicswordshoot_bykk(obj, frameIndex)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
switch(frameIndex){
case 0:
obj.sq_PlaySound("SW_SWORDSHOOT_01");
local element = 4;
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut");
if(addAppendage) element = addAppendage.getVar("elementIndex").getInt(10);
switch(element){
case 0: obj.sq_PlaySound("SWORDSHOOT_CAST_FIRE"); break;
case 1: obj.sq_PlaySound("SWORDSHOOT_CAST_ICE"); break;
case 2: obj.sq_PlaySound("SWORDSHOOT_CAST_DARK"); break;
case 3: obj.sq_PlaySound("SWORDSHOOT_CAST_LIGHT"); break;
}
break;
case 1:
local element = 4;
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut");
if(addAppendage) element = addAppendage.getVar("elementIndex").getInt(10);
switch(element){
case 0: sq_flashScreen(obj,1,1,50,76,sq_RGB(255,69,0),GRAPHICEFFECT_NONE,ENUM_DRAWLAYER_BOTTOM); break;
case 1: sq_flashScreen(obj,1,1,50,76,sq_RGB(65,105,225),GRAPHICEFFECT_NONE,ENUM_DRAWLAYER_BOTTOM); break;
case 2: sq_flashScreen(obj,1,1,50,76,sq_RGB(192,192,192),GRAPHICEFFECT_NONE,ENUM_DRAWLAYER_BOTTOM); break;
case 3: sq_flashScreen(obj,1,1,50,76,sq_RGB(255,255,224),GRAPHICEFFECT_NONE,ENUM_DRAWLAYER_BOTTOM); break;
}
sq_SetMyShake(obj, 2, 360);
break;
}
break;
case 1:
sq_SetMyShake(obj, 2, 240)
break;
}
}
function onEndState_Magicswordshoot_bykk(obj, newState)
{
if(!obj) return;
if(newState != SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT){
blademastery_buff(obj);
}
}
function onKeyFrameFlag_Magicswordshoot_bykk(obj, flagIndex)
{
if (!obj) return;
if(obj.getSkillSubState() == 2 && flagIndex == 1){
obj.sq_PlaySound("SW_SWORDSHOOT_02");
obj.sq_PlaySound("SWORDSHOOT");
sq_SetMyShake(obj, 4, 200);
}
}
function onTimeEvent_Magicswordshoot_bykk(obj, timeEventIndex, timeEventCount)
{
switch(timeEventIndex){
case 1: obj.resetHitObjectList(); break;
}
}
function onProcCon_Magicswordshoot_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
if(sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 6) > 0 || MAGICSWORDSHOOT_STONE > 0){
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT,STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
local bDownKey = obj.isDownSkillLastKey();
local currentAni = obj.getCurrentAnimation();
local currentT = sq_GetCurrentTime(currentAni);
local MaxTime = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 9);
if(!bDownKey || currentT >= MaxTime){
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT,STATE_PRIORITY_IGNORE_FORCE, true);
}
break;
}
}
function onProc_Magicswordshoot_bykk(obj)
{
if(!obj) return;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Overdrive_bykk(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_OVERDRIVE);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_OVERDRIVE, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Overdrive_bykk(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Overdrive_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:
local aniSet = [81];
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD), apdPath = "character/atswordman/1_swordmaster/changesword/ap_changesword.nut";
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath) && !skill.isSealFunction()) aniSet = [313];
obj.sq_SetCurrentAnimation(aniSet[subState]);
local effSet = ["overdrive_on_body"];
changeSwordEffect_bykk(obj, effSet[subState], SKILL_SWORDMASTER_BYKK_OVERDRIVE);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(false);
sq_StartDrawCastGauge(obj, delay, true);
obj.sq_PlaySound("SW_OVERDRIVE");
break;
}
}
function onEndCurrentAni_Overdrive_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 onEnterFrame_Overdrive_bykk(obj, frameIndex)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(frameIndex){
case 4:
local bufftmime = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_OVERDRIVE, 0, sq_GetSkillLevel(obj, 146));
local apdPath = "character/atswordman/1_swordmaster/overdrive/ap_overdrive.nut";
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath);
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, false);
appendage.sq_SetValidTime(bufftmime);
appendage.setEnableIsBuff(true);
appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_SWORDMASTER_BYKK_OVERDRIVE, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_OVERDRIVE));
CNSquirrelAppendage.sq_Append(appendage, obj, obj, true);
appendage.setBuffIconImage(56);
break;
}
}
function onEndState_Overdrive_bykk(obj, newState)
{
if(!obj) return;
}
function onProcCon_Overdrive_bykk(obj)
{
if(!obj) return;
}
function onProc_Overdrive_bykk(obj)
{
if(!obj) return;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Thunderslash_bykk(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_THUNDERSLASH);
if (isUse){
obj.getVar("thunderslash_target").clear_obj_vector();
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_SWORDMASTER_BYKK_THUNDERSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Thunderslash_bykk(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Thunderslash_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 aniSet = [84,86,88,89,85,87];
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()) aniSet = [318,322,319,323,320,321];
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(aniSet[subState]);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_THUNDERSLASH, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_THUNDERSLASH).tofloat() / 100.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 59));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
setWeaponMaster_attackElement(obj);
changeSwordEffect_bykk(obj, "thunderslash1", SKILL_SWORDMASTER_BYKK_THUNDERSLASH);
obj.sq_PlaySound("THUNDERSLASH");
break;
case 1:
obj.sq_SetCurrentAnimation(aniSet[subState]);
obj.getVar("thunderslash_move").setInt(10, sq_GetXPos(obj));
obj.getVar("thunderslash_move").setInt(11, 50);
obj.setTimeEvent(10, 2, 35, false);
changeSwordEffect_bykk(obj, "thunderslashjump2", SKILL_SWORDMASTER_BYKK_THUNDERSLASH);
break;
case 2:
obj.sq_SetCurrentAnimation(aniSet[subState]);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_THUNDERSLASH, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_THUNDERSLASH).tofloat() / 100.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 59));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
setWeaponMaster_attackElement(obj);
local hitMax = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_THUNDERSLASH, 0);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(false);
obj.setTimeEvent(11, delaySum / (hitMax + 1), hitMax, false);
changeSwordEffect_bykk(obj, "thunderslashair3", SKILL_SWORDMASTER_BYKK_THUNDERSLASH);
break;
case 3:
obj.sq_SetCurrentAnimation(aniSet[subState]);
if(sq_GetZPos(obj) > 0) obj.setTimeEvent(12, 100 , 1, true);
changeSwordEffect_bykk(obj, "thunderslash_air_finish_body", SKILL_SWORDMASTER_BYKK_THUNDERSLASH);
break;
case 11:
obj.sq_SetCurrentAnimation(aniSet[subState - 7]);
obj.setTimeEvent(15, 100, 1, false);
changeSwordEffect_bykk(obj, "thunderslashdash2", SKILL_SWORDMASTER_BYKK_THUNDERSLASH);
obj.sq_PlaySound("THUNDERSLASH");
break;
case 12:
obj.sq_SetCurrentAnimation(aniSet[subState - 7]);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_THUNDERSLASH, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_THUNDERSLASH).tofloat() / 100.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 59));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
setWeaponMaster_attackElement(obj);
local hitMax = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_THUNDERSLASH, 0);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(false);
obj.setTimeEvent(11, delaySum / (hitMax + 1), hitMax, false);
changeSwordEffect_bykk(obj, "thunderslashground3", SKILL_SWORDMASTER_BYKK_THUNDERSLASH);
break;
}
}
function onEndCurrentAni_Thunderslash_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
local size = obj.getVar("thunderslash_target").get_obj_vector_size();
if(size > 0){
obj.sq_IntVectClear();
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE) > 0) obj.sq_IntVectPush(11);
else obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_SWORDMASTER_BYKK_THUNDERSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
}
else{
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
}
break;
case 1:
case 2:
case 11:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(STATE_SWORDMASTER_BYKK_THUNDERSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 3:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 12:
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_THUNDERSLASH, -1, 2, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_THUNDERSLASH).tofloat() / 100.0) + 100;
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE) > 0) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_THUNDERSLASH, -1, 3, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_THUNDERSLASH).tofloat() / 100.0) + 100;
local element = 4;
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut");
if(addAppendage) element = addAppendage.getVar("elementIndex").getInt(10);
local sizeRate = 100;
if(obj.getWeaponSubType() == 2 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY) > 0){
sizeRate = sizeRate * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 1, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY))) / 100;
totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 4, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY))) / 100;
}
if(element < 4) cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,150,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_THUNDERSLASH,2,totalDamage,element,sizeRate,0,0,0,0,0,1);
else cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,150,0,-sq_GetZPos(obj),obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_THUNDERSLASH,1,totalDamage,sizeRate,0,0,0,0,0,0,1);
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onAttack_Thunderslash_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj) return false;
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
isMagicSwordUp_Attack(obj,damager,boundingBox);
}
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
local apdPath = "character/atswordman/1_swordmaster/thunderslash/ap_thunderslash.nut";
local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true);
if(addAppendage){
if(damager.isObjectType(OBJECTTYPE_ACTIVE) && sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager) && !sq_IsFixture(damager)){
sq_HoldAndDelayDie(damager, obj, true, true, true, 100, 100, ENUM_DIRECTION_NEUTRAL, addAppendage);
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE) < 1) sq_MoveToAppendageForce(damager, obj, obj, 100, 0, 150, 200, true, addAppendage,true);
else sq_MoveToAppendageForce(damager, obj, obj, 100, 0, 0, 200, true, addAppendage,true);
if(!obj.getVar("thunderslash_target").is_obj_vector(damager)) obj.getVar("thunderslash_target").push_obj_vector(damager);
}
else if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE) > 0){
sq_HoldAndDelayDie(damager, obj, true, true, true, 100, 100, ENUM_DIRECTION_NEUTRAL, addAppendage);
if(!obj.getVar("thunderslash_target").is_obj_vector(damager)) obj.getVar("thunderslash_target").push_obj_vector(damager);
}
}
}
break;
}
}
function onTimeEvent_Thunderslash_bykk(obj, timeEventIndex, timeEventCount)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(timeEventIndex){
case 10:
local baseX = obj.getVar("thunderslash_move").getInt(10);
local v = sq_GetUniformVelocity(0, obj.getVar("thunderslash_move").getInt(11), timeEventCount, 35);
local dstX = sq_GetDistancePos(baseX, obj.getDirection(), v);
sq_setCurrentAxisPos(obj, 0, dstX);
local vz = sq_GetUniformVelocity(0, 150, timeEventCount, 35);
sq_setCurrentAxisPos(obj, 2, vz);
if(timeEventCount >= 35) obj.setTimeEvent(15, 100, 1, true);
break;
case 11:
local size = obj.getVar("thunderslash_target").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("thunderslash_target").get_obj_vector(i);
if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2);
}
}
break;
case 12:
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(false) / 2;
local size = obj.getVar("thunderslash_target").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("thunderslash_target").get_obj_vector(i);
if(targetObj){
local activeObj = sq_GetCNRDObjectToActiveObject(targetObj);
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, "character/atswordman/1_swordmaster/thunderslash/ap_thunderslash.nut");
if(addAppendage){
sq_MoveToAppendageForce(activeObj, obj, obj, 50, 0, -sq_GetZPos(obj), 30, true, addAppendage);
}
}
}
}
obj.setTimeEvent(13, 30, 1, false);
obj.setTimeEvent(14, 50, 1, false);
break;
case 13:
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_THUNDERSLASH, -1, 2, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_THUNDERSLASH).tofloat() / 100.0) + 100;
local sizeRate = 100;
if(obj.getWeaponSubType() == 2 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY) > 0){
sizeRate = sizeRate * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 1, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY))) / 100;
totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 4, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY))) / 100;
}
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,50,0,-sq_GetZPos(obj),obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_THUNDERSLASH,1,totalDamage,sizeRate,0,0,0,0,0,0,1);
break;
case 14:
local size = obj.getVar("thunderslash_target").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("thunderslash_target").get_obj_vector(i);
if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/1_swordmaster/thunderslash/ap_thunderslash.nut");
}
}
break;
case 15:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(STATE_SWORDMASTER_BYKK_THUNDERSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onEnterFrame_Thunderslash_bykk(obj, frameIndex)
{
if(!obj || !obj.isMyControlObject()) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(frameIndex == 3) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atthunderslash/start_thunderslash_updust.ani", 0, 1, 0);
break;
case 1:
if(frameIndex == 0) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atthunderslash/thunderslash_dust.ani", 0, 1, 0);
break;
}
}
function onEndState_Thunderslash_bykk(obj, newState)
{
if(!obj) return;
if(newState != STATE_SWORDMASTER_BYKK_THUNDERSLASH){
obj.sq_SetXScrollStop(0);
blademastery_buff(obj);
local size = obj.getVar("thunderslash_target").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("thunderslash_target").get_obj_vector(i);
if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/1_swordmaster/thunderslash/ap_thunderslash.nut");
}
}
}
}
function onProcCon_Thunderslash_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 2:
case 12:
local pAni = obj.getCurrentAnimation();
local frameIndex = sq_GetAnimationFrameIndex(pAni);
if(frameIndex >= 4){
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){
obj.sq_IntVectClear();
obj.sq_IntVectPush(3);
obj.sq_AddSetStatePacket(STATE_SWORDMASTER_BYKK_THUNDERSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
break;
}
}
function onProc_Thunderslash_bykk(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_Thunderslash_bykk(obj, flagIndex)
{
if (!obj) return;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Timeslash_bykk(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_TIMESLASH);
if (isUse){
// obj.sq_IsEnterSkillLastKeyUnits(SKILL_SWORDMASTER_BYKK_TIMESLASH);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_TIMESLASH, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Timeslash_bykk(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Timeslash_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH) >= 3) sq_SendMessage(obj, 0, 1, 0);
local aniSet = [106,108,107,109,110];
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()) aniSet = [328,324,325,327,326];
obj.sq_SetCurrentAnimation(aniSet[subState]);
local effSet = ["timeslashstart","timeslashcharge","timeslashchargeloop","timeslashslash","timeslashexp"];
changeSwordEffect_bykk(obj, effSet[subState], SKILL_SWORDMASTER_BYKK_TIMESLASH);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
switch(subState){
case 0:
if(obj.isMyControlObject()) obj.sq_SetXScrollStart(200, 300);
break;
case 1:
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_TIMESLASH,1,0,0,0,0,0,0,0,0,0);
break;
case 3:
local flashScreenObj = sq_flashScreen(obj,100,999999,240,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
obj.getVar("flashobj").clear_obj_vector();
obj.getVar("flashobj").push_obj_vector(flashScreenObj);
break;
case 4:
local flashScreenObj = obj.getVar("flashobj").get_obj_vector(0);
if(flashScreenObj){
local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj);
pflashScreen.fadeOut();
}
sq_flashScreen(obj,0,1000,300,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
obj.setTimeEvent(1, 1000, 1, false);
obj.setTimeEvent(2, 100, 1, true);
if(obj.isMyControlObject()) obj.sq_SetXScrollStop(200);
break;
}
}
function onEndCurrentAni_Timeslash_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 3:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_TIMESLASH, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_IntVectPush(3);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_TIMESLASH, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 4:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onAttack_Timeslash_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj) return false;
}
function onEnterFrame_Timeslash_bykk(obj, frameIndex)
{
if(!obj) return;
local subState = obj.getSkillSubState();
if(subState == 4) return;
}
function onEndState_Timeslash_bykk(obj, newState)
{
if(!obj) return;
if(newState != SKILL_SWORDMASTER_BYKK_TIMESLASH){
obj.sq_SetXScrollStop(0)
blademastery_buff(obj);
local flashScreenObj = obj.getVar("flashobj").getObject(0);
if(flashScreenObj){
local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj);
if(pflashScreen) pflashScreen.fadeOut();
}
sq_SendMessage(obj, 0, 0, 0);
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH) >= 6){
local addLevel = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH, 4, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH));
local time = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH, 3, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH));
// print("addLevel = "+addLevel);
// print("time = "+time);
addSkillLevelTime(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD, addLevel, time);
}
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH) >= 9){
local bufftmime = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH, 3, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH));
local apdPath = "character/atswordman/1_swordmaster/timeslash/ap_timeslash.nut";
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, false);
appendage.sq_SetValidTime(bufftmime);
appendage.setEnableIsBuff(true);
appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_SWORDMASTER_BYKK_TIMESLASH, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH));
CNSquirrelAppendage.sq_Append(appendage, obj, obj, true);
local change_appendage = appendage.sq_getChangeStatus("timeslash");
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("timeslash", obj, obj, 0, 15, false, 1000);
if(change_appendage){
change_appendage.clearParameter();
change_appendage.addParameter(CHANGE_STATUS_TYPE_COOLTIME_DECLINE, true, -10.0);
}
}
}
}
function onKeyFrameFlag_Timeslash_bykk(obj, flagIndex)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 3:
switch(flagIndex){
case 1:
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_TIMESLASH, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH).tofloat() / 100.0) + 100;
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_TIMESLASH,2,totalDamage,0,0,0,0,0,0,0,1);
sq_SetMyShake(obj, 5, 200);
break;
}
break;
case 4:
switch(flagIndex){
case 2:
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_TIMESLASH, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH).tofloat() / 100.0) + 100;
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_TIMESLASH,3,totalDamage,0,0,0,0,0,0,0,1);
sq_SetMyShake(obj, 20, 400);
break;
}
break;
}
}
function onTimeEvent_Timeslash_bykk(obj, timeEventIndex, timeEventCount)
{
switch(timeEventIndex){
case 1:
local bottomObj = obj.getVar("timeslash_bottom").get_obj_vector(0);
if(bottomObj) bottomObj.setValid(false);
break;
case 2:
if(obj.isMyControlObject()){
sq_CreateParticle("character/swordman/effect/particle/timeslash_glass.ptl", obj, 0, 1, 0, true, 5, 0, 5);
sq_setFullScreenEffect(obj, "character/swordman/effect/animation/attimeslash/finish_timeslash_crack.ani");
}
break;
}
}
function onProcCon_Timeslash_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
if(subState == 2){
local bDownKey = obj.isDownSkillLastKey();
local stateTime = obj.sq_GetStateTimer();
if(stateTime >= 1000 && !bDownKey){
obj.sq_IntVectClear();
obj.sq_IntVectPush(3);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_TIMESLASH, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
}
function onProc_Timeslash_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Upperslash_bykk(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_UPPERSLASH);
if (isUse){
//CheckUseAddloadDrawsword(obj,128,{[0] = true,[108] = true,[14] = true},0);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_UPPERSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Upperslash_bykk(obj)
{
if (!obj) return false;
//if(obj.getZPos() > 10) return false;
return true;
}
function onSetState_Upperslash_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
local aniSet = [77,78,80];
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()) aniSet = [329,330,331];
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(aniSet[subState]);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_UPPERSLASH, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_UPPERSLASH).tofloat() / 100.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 60));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
setWeaponMaster_attackElement(obj);
changeSwordEffect_bykk(obj, "UpperSlash1", SKILL_SWORDMASTER_BYKK_UPPERSLASH);
obj.sq_SetMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL);
obj.sq_SetStaticMoveInfo(0, 400, -1000, false);
obj.sq_PlaySound("SW_UPPERSLASH");
break;
case 1:
obj.sq_SetCurrentAnimation(aniSet[subState]);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_UPPERSLASH, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_UPPERSLASH).tofloat() / 100.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 61));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
setWeaponMaster_attackElement(obj);
changeSwordEffect_bykk(obj, "UpperSlash2", SKILL_SWORDMASTER_BYKK_UPPERSLASH);
break;
case 2://95
obj.sq_SetCurrentAnimation(aniSet[subState]);
local totalDamage1 = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_UPPERSLASH, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_UPPERSLASH).tofloat() / 100.0) + 100;
local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_UPPERSLASH, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_UPPERSLASH).tofloat() / 100.0) + 100;
local bonusRate = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE, 1, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE));
local totalDamage = (totalDamage1 + totalDamage2) * bonusRate / 1000;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 63));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
setWeaponMaster_attackElement(obj);
changeSwordEffect_bykk(obj, "UpperSlash2Lv95Passive_Body", SKILL_SWORDMASTER_BYKK_UPPERSLASH);
//obj.sq_PlaySound("SW_UPPERSLASH");
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_Upperslash_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE) > 0) obj.sq_IntVectPush(2);
else obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_UPPERSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 1:
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onTimeEvent_Upperslash_bykk(obj, timeEventIndex, timeEventCount)
{
if(!obj) return;
switch(timeEventIndex){
case 0:
obj.resetHitObjectList();
break;
}
}
function onAttack_Upperslash_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj || isStuck) return false;
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
isMagicSwordUp_Attack(obj,damager,boundingBox);
}
}
function onEnterFrame_Upperslash_bykk(obj, frameIndex)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
switch(frameIndex){
case 1:
local hitMax = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_UPPERSLASH, 3);
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(1, 5);
obj.setTimeEvent(0,delaySum/(hitMax + 1), hitMax, true);
break;
}
break;
}
}
function onEndState_Upperslash_bykk(obj, newState)
{
if(!obj) return;
if(newState != SKILL_SWORDMASTER_BYKK_UPPERSLASH){
blademastery_buff(obj);
}
}
function onKeyFrameFlag_Upperslash_bykk(obj, flagIndex)
{
if (!obj) return;
}
function onProcCon_Upperslash_bykk(obj)
{
if(!obj) return;
}
function onProc_Upperslash_bykk(obj)
{
if(!obj) return;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Weaponcombo_bykk(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_WEAPONCOMBO);
if (isUse){
obj.getVar("weaponCombo_bool").setBool(0, false);
obj.getVar("weaponCombo_bool").setBool(1, false);
obj.getVar("weaponCombo_bool").setBool(2, false);
obj.getVar("weaponCombo_bool").setBool(3, false);
if(obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0) obj.sq_IsEnterSkillLastKeyUnits(SKILL_SWORDMASTER_BYKK_WEAPONCOMBO);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_WEAPONCOMBO, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Weaponcombo_bykk(obj)
{
if (!obj) return false;
if(obj.getZPos() > 10) return false;
return true;
}
function onSetState_Weaponcombo_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
local weaponType = obj.getWeaponSubType();
local aniSet = [[33,34,35,36], [39,40,41], [42,43,44], [37,45,38]];
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()) aniSet = [[341,342,343,344], [338,339,340], [332,333,334], [335,336,337]];
local atkSet = [[30,31,32,33],[24,25,26],[27,28,29],[22,23,23]];
local effSet = [["WeaponComboShortSword1","WeaponComboShortSword2","WeaponComboShortSword3","WeaponComboShortSword4"],
["WeaponComboKatana1_body","WeaponComboKatana2_body","WeaponComboKatana3_body"],
["WeaponComboClub1_body","WeaponComboClub2_body","WeaponComboClub3_body"],
["WeaponComboHeavy1_body","WeaponComboHeavy2Charge_body","WeaponComboHeavy2_body"]];
obj.sq_SetCurrentAnimation(aniSet[weaponType][subState]);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkSet[weaponType][subState]));
changeSwordEffect_bykk(obj, effSet[weaponType][subState], SKILL_SWORDMASTER_BYKK_WEAPONCOMBO);
setWeaponMaster_attackElement(obj);
local soundSet = [["","","","R_SW_LIFTSLASH"],
["R_FENCING_SWDA","R_FENCING_SWDA","R_FENCING_SWDA"],
["FENCING_BLUNT_01","FENCING_BLUNT_02","FENCING_BLUNT_03"],
["FENCING_SWDC_01","","FENCING_SWDC_02"]];
if(soundSet[weaponType][subState] != "") obj.sq_PlaySound(soundSet[weaponType][subState]);
local totalDamage = obj.sq_GetBonusRateWithPassive(174, -1, 0, 0.1) + 200;
if(weaponType == 1 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY) > 0) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY, 8, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY))) / 1000;
else if(weaponType == 3 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 10, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY))) / 1000;
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
setWeaponMaster_attackElement(obj);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
if(weaponType < 3) obj.sq_SetStaticMoveInfo(0, 2 * subState, 2 * subState, false);
obj.sq_SetMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL);
}
function onEndCurrentAni_Weaponcombo_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
case 2:
case 3:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onAttack_Weaponcombo_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj || isStuck) return false;
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
isChangeSword_Attack(obj,damager,boundingBox);
}
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
isMagicSwordUp_Attack(obj,damager,boundingBox);
}
}
function onEnterFrame_Weaponcombo_bykk(obj, frameIndex)
{
if(!obj) return;
}
function onKeyFrameFlag_Weaponcombo_bykk(obj, flagIndex)
{
if(flagIndex != 1) return;
local subState = obj.getSkillSubState();
local weaponType = obj.getWeaponSubType();
local element = 4;
local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut");
if(AddAppendage) element = AddAppendage.getVar("elementIndex").getInt(10);
local totalDamage = obj.sq_GetBonusRateWithPassive(174, -1, 0, 0.1) + 200;
switch(weaponType){
case 0://短劍
totalDamage = totalDamage / 10;
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_WEAPONCOMBO,0,totalDamage,element,subState,0,0,0,0,0,1);
break;
case 2://鈍器
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,150,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_WEAPONCOMBO,1,totalDamage,0,0,0,0,0,0,0,1);
break;
case 3://巨劍
if(subState != 2) break;
local sizeRate = 100;
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0){
totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 10, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY))) / 1000;
sizeRate = sizeRate * sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 13, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY)) / 100;
local apdPath = "character/atswordman/1_swordmaster/heavyswordmastery/ap_heavyswordmastery.nut";
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)){
local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true);
local bufftime = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 2);
addAppendage.sq_SetValidTime(bufftime);
addAppendage.setEnableIsBuff(true);
addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY));
CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true);
obj.sq_SetSuperArmorUntilTime(obj, bufftime);
}
}
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,150,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_WEAPONCOMBO,3,totalDamage,sizeRate,0,0,0,0,0,0,1);
break;
}
}
function onProc_Weaponcombo_bykk(obj)
{
if(!obj) return;
if(!obj.isMyControlObject()) return;
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL) && sq_IsKeyDown(OPTION_HOTKEY_JUMP, ENUM_SUBKEY_TYPE_ALL)){
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(200);
obj.sq_AddSetStatePacket(6, STATE_PRIORITY_IGNORE_FORCE, true);
}
local subState = obj.getSkillSubState();
local weaponType = obj.getWeaponSubType();
local subState_Max = [3,2,2,2];
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(false);
local stateTime = obj.sq_GetStateTimer();
if(weaponType == 3){
switch(subState){
case 0:
local bDownKey = obj.isDownSkillLastKey();
if(bDownKey){
if(stateTime >= delaySum * 90 / 100){
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_WEAPONCOMBO, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
else{
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_WEAPONCOMBO, STATE_PRIORITY_IGNORE_FORCE, true);
}
break;
case 1:
local bDownKey = obj.isDownSkillLastKey();
if(!bDownKey || stateTime >= 1200){
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_WEAPONCOMBO, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
else{
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_WEAPONCOMBO, STATE_PRIORITY_IGNORE_FORCE, true);
}
break;
}
}
if(obj.getVar("weaponCombo_bool").getBool(subState) == false && weaponType < 3){
if(subState < subState_Max[weaponType]){
obj.setSkillCommandEnable(SKILL_SWORDMASTER_BYKK_WEAPONCOMBO,true);
local b_useskill = obj.sq_IsEnterSkill(SKILL_SWORDMASTER_BYKK_WEAPONCOMBO);
if(b_useskill != -1) obj.getVar("weaponCombo_bool").setBool(subState, true);
}
}
if(stateTime >= delaySum * 75 / 100 && obj.getVar("weaponCombo_bool").getBool(subState) && subState < subState_Max[weaponType] && weaponType < 3){
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_WEAPONCOMBO, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function onStart_appendage_Dualweapon_bykk(appendage)
{
local obj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent());
local stuckRate = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 16, sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON));
local change_appendage = appendage.sq_getChangeStatus("dualweapon");
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("dualweapon", obj, obj, 0, 15, false, stuckRate);
if(change_appendage){
change_appendage.clearParameter();
change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK, false, -(stuckRate * 0.1).tofloat());
}
appendage.getVar().setInt(10, 0);
}
function onStart_appendage_Threeflower_bykk(appendage)
{
local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent());
local skillLevel = sq_GetSkillLevel(parentObj, SKILL_VAGABOND_THREEFLOWER);
local value1 = sq_GetLevelData(parentObj, SKILL_VAGABOND_THREEFLOWER, 0, skillLevel);
local value2 = sq_GetLevelData(parentObj, SKILL_VAGABOND_THREEFLOWER, 1, skillLevel);
local change_appendage = appendage.sq_getChangeStatus("threeflower");
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("threeflower",parentObj, parentObj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value1);
if(change_appendage){
change_appendage.clearParameter();
//change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (value1 * 0.1).tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, (value2 * 0.1).tofloat());
}
}
function onStart_appendage_Budclimb_bykk(appendage)
{
local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent());
}
function onStart_appendage_Ecstasy_bykk(appendage)
{
local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent());
}
function onStart_appendage_Goddessofsword_bykk(appendage)
{
local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent());
}
function onStart_appendage_Equiplightsword_bykk(appendage)
{
local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent());
if(parentObj.getWeaponSubType() == 0 || parentObj.getWeaponSubType() == 1 || parentObj.getWeaponSubType() == 5){
local value1 = sq_GetIntData(parentObj, SKILL_VAGABOND_EQUIPLIGHTSWORD, 0);
local value2 = sq_GetIntData(parentObj, SKILL_VAGABOND_EQUIPLIGHTSWORD, 1);
local change_appendage = appendage.sq_getChangeStatus("threeflower");
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("threeflower",parentObj, parentObj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value1);
if(change_appendage && parentObj.getWeaponSubType() == 5){
change_appendage.clearParameter();
change_appendage.addParameter(CHANGE_STATUS_TYPE_COOLTIME_DECLINE, true, -(value1).tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (value2).tofloat());
}
}
}
function checkExecutableSkill_Bigjang_bykk(obj)
{
if (!obj) return 0;
local state = obj.sq_GetState();
local minZpos = sq_GetIntData(obj, SKILL_VAGABOND_BIGJANG, 2);
if(state == 6 && obj.getZPos() < minZpos) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_BIGJANG);
if(isUse){
local dis = sq_GetIntData(obj, SKILL_VAGABOND_BIGJANG, 3);
if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 0) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 1)) obj.getVar("bigjang").setInt(0, dis * 75 / 100);
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) obj.getVar("bigjang").setInt(0, dis * 150 / 100);
else obj.getVar("bigjang").setInt(0, dis);
obj.sq_IntVectClear();
if(state == 6) obj.sq_IntVectPush(1);
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_BIGJANG, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function onSetState_Bigjang_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_BIGJANG_NORMAL_START_BODY);
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_BIGJANG_JUMP_START_BODY);
break;
case 2:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_BIGJANG_JUMP_THROW_BODY);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_Bigjang_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;
case 1:
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_BIGJANG, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 2:
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;
}
}
function onAttack_Bigjang_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj || isStuck) return;
}
function onEnterFrame_Bigjang_bykk(obj, frameIndex)
{
if(!obj) return;
local subState = obj.getSkillSubState();
local sizerate = sq_GetIntData(obj,223, 0);
switch(subState){
case 0:
switch(frameIndex){
case 1: obj.sq_PlaySound("SW_FIST_HUNDRED"); break;
case 2:
obj.sq_PlaySound("FIST_HUNDRED_HAND");
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atbigjang/normal_start_ready.ani", 25, 0, 63);
break;
case 9:
obj.sq_PlaySound("FIST_HUNDRED_SWISH");
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_BIGJANG, SKILL_VAGABOND_BIGJANG, 0, 1.0) + 100;
local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_BIGJANG, SKILL_VAGABOND_BIGJANG, 1, 1.0) + 100;
local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger();
local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_BIGJANG, 0);
local dis = obj.getVar("bigjang").getInt(0);
local sub = sq_GetIntData(obj, SKILL_VAGABOND_BIGJANG, 16);
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 25, 0, 65, obj.getDirection(), 3, SKILL_VAGABOND_BIGJANG, 1, totalDamage, damageRate, dis, sizeRate, 0, sub, 0, 0, 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;
}
break;
case 1:
switch(frameIndex){
case 6:
obj.sq_PlaySound("FIST_HUNDRED_HAND");
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atbigjang/jump_start_hand.ani", 8, 0, 80);
break;
}
break;
case 2:
switch(frameIndex){
case 1:
obj.sq_PlaySound("FIST_HUNDRED_EXP");
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_BIGJANG, SKILL_VAGABOND_BIGJANG, 0, 1.0) + 100;
local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_BIGJANG, SKILL_VAGABOND_BIGJANG, 1, 1.0) + 100;
local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger();
local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_BIGJANG, 0) / 3 * 2;
local dis = obj.getVar("bigjang").getInt(0);
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 9, 0, 81, obj.getDirection(), 3, SKILL_VAGABOND_BIGJANG, 2, totalDamage, damageRate, dis * 75 / 100, sizeRate, 0, 0, 0, 0, 1);
//sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/vagabond/animation/atbigjang/jump_throw_hand.ani", 200, 0, 0);
break;
}
break;
}
}
function onEndState_Bigjang_bykk(obj, newState)
{
if(!obj) return;
if(newState != SKILL_VAGABOND_BIGJANG){
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_Bigjang_bykk(obj, flagIndex)
{
if (!obj) return;
}
function onProcCon_Bigjang_bykk(obj)
{
if(!obj) return;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Blastsword_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_BLASTSWORD);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_BLASTSWORD, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function onSetState_Blastsword_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_BLASTSWORDSELECTSWORD);
obj.sq_PlaySound("SW_BLAST_SWORD");
obj.getVar("blastsword").setBool(0, false);
obj.getVar("blastsword").setBool(1, false);
if(sq_GetIntData(obj, SKILL_VAGABOND_BLASTSWORD, 10) > 0){
obj.getVar("blastsword").setBool(0, true);
obj.getVar("blastsword").setBool(1, true);
}
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_BLASTSWORDTWOHANDSTART);
obj.getVar("blastsword_move").setInt(10, sq_GetXPos(obj));
if(obj.getVar("blastsword").getBool(1) == false) obj.getVar("blastsword_move").setInt(11, sq_GetIntData(obj, SKILL_VAGABOND_BLASTSWORD, 2));
break;
case 2:
// obj.getVar("Blastsword").setInt(1, 3);
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_BLASTSWORDTWOHANDLOOP);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_BLASTSWORD);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_BLASTSWORD, 2, skill_level);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 163));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local hitMax = sq_GetIntData(obj, SKILL_VAGABOND_BLASTSWORD, 4);
local hitTime = sq_GetIntData(obj, SKILL_VAGABOND_BLASTSWORD, 6);
obj.setTimeEvent(1, hitTime, hitMax, true);
local lifeTime = (hitTime + 20) * (hitMax - 1);
obj.getVar("blastsword_move").setInt(12, lifeTime);
obj.setTimeEvent(2, lifeTime, 1, false);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atblastsword/dust_03.ani", 0, 0, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atblastsword/loop_leaf_00.ani", 0, 0, 0);
break;
case 3:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_BLASTSWORDTWOHANDEND);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_BLASTSWORD);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_BLASTSWORD, 0, skill_level);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 163));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
obj.sq_PlaySound("BLAST_SWORD_EXP");
obj.sq_PlaySound("SW_BLAST_SWORD");
break;
case 4:
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_BLASTSWORDONEHAND);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_BLASTSWORD);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_BLASTSWORD, 0, skill_level);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 162));
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 onTimeEvent_Blastsword_bykk(obj, timeEventIndex, timeEventCount)
{
if (!obj) return;
switch(timeEventIndex){
case 1:
obj.resetHitObjectList();
break;
case 2:
obj.sq_IntVectClear();
obj.sq_IntVectPush(3);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_BLASTSWORD, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onEndCurrentAni_Blastsword_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
if(obj.getVar("blastsword").getBool(0)) obj.sq_IntVectPush(4);
else obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_BLASTSWORD, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_BLASTSWORD, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 3:
case 4:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onAttack_Blastsword_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj || isStuck) return false;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
break;
case 1:
break;
}
}
function onEnterFrame_Blastsword_bykk(obj, frameIndex)
{
if(!obj || !obj.isMyControlObject()) return;
local subState = obj.getSkillSubState();
if((frameIndex == 1 && subState == 3) || (frameIndex == 3 && subState == 4)){
//[OFFSET] `two hand finish` 206 0 3
//[OFFSET] `one hand finish` 237 0 5
local offsetX = 206, offsetZ = 3;
if(subState == 4){offsetX = 207; offsetZ = 5;}
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_BLASTSWORD);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_BLASTSWORD, 1, skill_level);
local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_BLASTSWORD, 1);
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, offsetX, 0, offsetZ, obj.getDirection(), 3, SKILL_VAGABOND_BLASTSWORD, 1, totalDamage, sizeRate, 0, 0, 0, 0, 0, 0, 1);
obj.getVar("rapid_step_enable").setBool(0, true);
obj.getVar("EnableHermitTripleStep").setBool(0, true);
}
if(frameIndex == 2 && subState == 4){
obj.sq_PlaySound("SW_BLAST_SWORD");
obj.sq_PlaySound("BLAST_SWORD_EXP");
}
}
function onEndState_Blastsword_bykk(obj, newState)
{
if(!obj) return;
if(newState != SKILL_VAGABOND_BLASTSWORD){
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);
sq_SimpleMoveToNearMovablePos(obj,300);
}
}
function onKeyFrameFlag_Blastsword_bykk(obj, flagIndex)
{
if (!obj) return;
}
function onProcCon_Blastsword_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(obj.getVar("blastsword").getBool(0) == false){
obj.setSkillCommandEnable(SKILL_VAGABOND_BLASTSWORD, true);
if(sq_IsKeyDown(OPTION_HOTKEY_SKILL, ENUM_SUBKEY_TYPE_ALL) || obj.sq_IsEnterSkill(SKILL_VAGABOND_BLASTSWORD) != -1 || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT)) obj.getVar("blastsword").setBool(0, true);
}
case 1:
if(obj.getVar("blastsword").getBool(1) == 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) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){
obj.getVar("blastsword").setBool(1, true);
obj.getVar("blastsword_move").setInt(11, sq_GetIntData(obj, SKILL_VAGABOND_BLASTSWORD, 3));
}
}
break;
case 2:
local stateTime = obj.sq_GetStateTimer();
local fireT = obj.getVar("blastsword_move").getInt(12);
local srcX = obj.getVar("blastsword_move").getInt(10);
local MoveX = obj.getVar("blastsword_move").getInt(11);
local v = sq_GetAccel(0, MoveX, stateTime, fireT, false);
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);
sq_setCurrentAxisPos(obj, 0, dstX);
break;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Coalban_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(216);
if (isUse){
obj.sq_IntVectClear();
if(obj.sq_GetState() == 6) obj.sq_IntVectPush(10);
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_COALBAN, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function onSetState_Coalban_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:
case 10:
if(subState == 0) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COALBANCAST);
else if(subState == 10){
obj.sq_ZStop();
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COALBANCASTJUMP);
}
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_COAL_BAN");
local countMax = sq_GetIntData(obj, SKILL_VAGABOND_COALBAN, 0) * 3 / 2 - 1;
obj.getVar("coalban").setInt(10, countMax);
obj.getVar("coalban").setInt(11, 0);
break;
case 1:
case 2:
case 11:
case 12:
local pooledObj;
if(subState == 11 || subState == 12) obj.sq_ZStop();
if(subState == 1){
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COALBANLEFT);
pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atcoalban/loop/left/leftleaf_00.ani", 0, 1, 0);
}
else if(subState == 2){
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COALBANRIGHT);
pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atcoalban/loop/right/rightleaf_00.ani", 0, 1, 0);
}
else if(subState == 11){
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COALBANLEFTJUMP);
pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atcoalban/loop/left/leftleafjump_00.ani", 0, 1, 0);
}
else if(subState == 12){
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COALBANRIGHTJUMP);
pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atcoalban/loop/right/rightleafjump_00.ani", 0, 1, 0);
}
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(false);
local interval = sq_GetIntData(obj, SKILL_VAGABOND_COALBAN, 3);
local speedRate = delaySum.tofloat() / interval.tofloat() * 250.0;
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_GODDESSOFSWORD) > 0) speedRate = speedRate * sq_GetIntData(obj, SKILL_VAGABOND_GODDESSOFSWORD, 4).tofloat() / 100.0;
currentAni.setSpeedRate(speedRate);
local pAni = pooledObj.getCurrentAnimation();
pAni.setSpeedRate(speedRate);
break;
}
}
function onEndCurrentAni_Coalban_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 10:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_COALBAN, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 1:
case 2:
if(obj.getVar("coalban").getInt(10) <= 0){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
}
else{
obj.getVar("coalban").setInt(10, obj.getVar("coalban").getInt(10) - 1);
obj.sq_IntVectClear();
if(subState == 1) obj.sq_IntVectPush(2);
else if(subState == 2) obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_COALBAN, STATE_PRIORITY_IGNORE_FORCE, true);
}
break;
case 11:
case 12:
if(obj.getVar("coalban").getInt(10) <= 0){
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(6, STATE_PRIORITY_IGNORE_FORCE, true);
}
else{
obj.getVar("coalban").setInt(10, obj.getVar("coalban").getInt(10) - 1);
obj.sq_IntVectClear();
if(subState == 11) obj.sq_IntVectPush(12);
else if(subState == 12) obj.sq_IntVectPush(11);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_COALBAN, STATE_PRIORITY_IGNORE_FORCE, true);
}
break;
}
}
function onEnterFrame_Coalban_bykk(obj, frameIndex)
{
if(!obj) return;
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("coalban").setInt(11, 1);
else if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT)) obj.getVar("coalban").setInt(11, 2);
else obj.getVar("coalban").setInt(11, 0);
}
function onEndState_Coalban_bykk(obj, newState)
{
if(!obj) return;
}
function onKeyFrameFlag_Coalban_bykk(obj, flagIndex)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(flagIndex){
case 1:
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_COALBAN);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_COALBAN, 0, skill_level);
local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_COALBAN, 13);
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_GODDESSOFSWORD) > 0) sizeRate = sizeRate * sq_GetIntData(obj, SKILL_VAGABOND_GODDESSOFSWORD, 3) / 100;
local dis = sq_GetIntData(obj, SKILL_VAGABOND_COALBAN, 1);
local sub = obj.getVar("coalban").getInt(11);
local offsetX = 50, offsetZ = 73, angle = 0, partl = sub * 10 + 1;
if(subState == 2){offsetX = 50; offsetZ = 73; angle = 0; partl = sub * 10 + 2;}
if(subState == 11){offsetX = 70; offsetZ = 45; angle = 1; partl = sub * 10 + 1;}
if(subState == 12){offsetX = 70; offsetZ = 45; angle = 1; partl = sub * 10 + 2;}
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, offsetX, 0, offsetZ, obj.getDirection(), 3, SKILL_VAGABOND_COALBAN, 1, totalDamage, sizeRate, dis, partl, angle, sub, 0, 0, 1);
break;
case 2:
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_COALBAN);
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_COALBAN, 0, skill_level);
local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_COALBAN, 13);
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_GODDESSOFSWORD) > 0) sizeRate = sizeRate * sq_GetIntData(obj, SKILL_VAGABOND_GODDESSOFSWORD, 3) / 100;
print(sizeRate);
local dis = sq_GetIntData(obj, SKILL_VAGABOND_COALBAN, 1);
local sub = obj.getVar("coalban").getInt(11);
local offsetX = 50, offsetZ = 73, angle = 0, partl = sub * 10 + 1;
if(subState == 1){offsetX = 50; offsetZ = 73; angle = 0; partl = sub * 10 + 3;}
if(subState == 2){offsetX = 50; offsetZ = 73; angle = 0; partl = sub * 10 + 4;}
if(subState == 11){offsetX = 70; offsetZ = 45; angle = 1; partl = sub * 10 + 3;}
if(subState == 12){offsetX = 70; offsetZ = 45; angle = 1; partl = sub * 10 + 4;}
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, offsetX, 0, offsetZ, obj.getDirection(), 3, SKILL_VAGABOND_COALBAN, 1, totalDamage, sizeRate, dis, partl, angle, sub, 0, 0, 1);
break;
}
}
function onProcCon_Coalban_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
case 2:
case 11:
case 12:
if(sq_IsKeyDown(OPTION_HOTKEY_JUMP, ENUM_SUBKEY_TYPE_ALL)){
if(subState < 10){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
}
else{
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;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////