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 ) ;
2025-11-17 19:38:44 +08:00
local apdPath = " character/atswordman/1_swordmaster/timeslash/ap_timeslashhold.nut " ;
obj . getVar ( " timeSlashTar " ) . clear_obj_vector ( ) ;
local objectManager = obj . getObjectManager ( ) ; //得到對象管理器
for ( local i = 0 ; i < objectManager . getCollisionObjectNumber ( ) ; i + + ) {
local object = objectManager . getCollisionObject ( i ) ; //得到控制類對象
if ( object & & object . isObjectType ( OBJECTTYPE_ACTIVE ) & & obj . isEnemy ( object ) & & object . isInDamagableState ( obj ) & & sq_GetDistance ( sq_GetXPos ( obj ) , sq_GetYPos ( obj ) , sq_GetXPos ( object ) , sq_GetYPos ( object ) , true ) < = 1000 ) {
local activeObj = sq_GetCNRDObjectToActiveObject ( object ) ;
if ( ! CNSquirrelAppendage . sq_IsAppendAppendage ( activeObj , apdPath ) ) {
local AddAppendage = CNSquirrelAppendage . sq_AppendAppendage ( activeObj , obj , SKILL_SWORDMASTER_BYKK_TIMESLASH , false , apdPath , true ) ;
sq_HoldAndDelayDie ( activeObj , obj , true , true , true , 200 , 200 , ENUM_DIRECTION_NEUTRAL , AddAppendage ) ;
obj . getVar ( " timeSlashTar " ) . push_obj_vector ( activeObj ) ;
}
}
}
2025-11-08 12:21:06 +08:00
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 )
2025-11-17 19:38:44 +08:00
local size = obj . getVar ( " timeSlashTar " ) . get_obj_vector_size ( ) ;
if ( size > 0 ) {
local apdPath = " character/atswordman/1_swordmaster/timeslash/ap_timeslashhold.nut " ;
for ( local i = 0 ; i < size ; i + + ) {
local targetObj = obj . getVar ( " timeSlashTar " ) . get_obj_vector ( i ) ;
if ( targetObj & & CNSquirrelAppendage . sq_IsAppendAppendage ( targetObj , apdPath ) ) CNSquirrelAppendage . sq_RemoveAppendage ( targetObj , apdPath ) ;
}
}
2025-11-08 12:21:06 +08:00
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 ;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////