function checkExecutableSkill_Swing(obj) { if (!obj) return false; if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SWING); if (isUse){ if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2); else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1); else obj.getVar("skillSub").setInt(100, 0); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_SWING, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Swing(obj) { if (!obj) return false; return true; } function onSetState_Swing(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); switch(subState){ case 0: if(sq_GetSkillLevel(obj, SKILL_BYKK_ARMONIA) > 0 && obj.getVar("kksChaser").get_obj_vector_size() > 0){//太古之力 if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_SetCurrentAnimation(264); else if(obj.getVar("skillSub").getInt(100) == 0) obj.sq_SetCurrentAnimation(275); else{ local Ani = getCurrentAnimation_precencia(obj, "SwingArmonia_Body", false, false); obj.setCurrentAnimation(Ani); } if(obj.getVar("skillSub").getInt(100) < 2) obj.sq_PlaySound("WZ_SWING"); print(sq_GetLevelData(obj, SKILL_BYKK_SWING, 6, sq_GetSkillLevel(obj, SKILL_BYKK_SWING))); print(sq_GetLevelData(obj, SKILL_BYKK_SWING, 5, sq_GetSkillLevel(obj, SKILL_BYKK_SWING))); if(sq_GetLevelData(obj, SKILL_BYKK_SWING, 6, sq_GetSkillLevel(obj, SKILL_BYKK_SWING)) < 1){ local chaserObj = obj.getVar("kksChaser").get_obj_vector(0); if(chaserObj) chaserObj.setValid(false); } } else{//普通形態 if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_SetCurrentAnimation(265); else if(obj.getVar("skillSub").getInt(100) == 0) obj.sq_SetCurrentAnimation(3); else{ local Ani = getCurrentAnimation_precencia(obj, "Swing", false, false); obj.setCurrentAnimation(Ani); } if(obj.getVar("skillSub").getInt(100) < 2) obj.sq_PlaySound("WZ_SWING"); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SWING); local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_SWING, 0, skillLevel); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 2)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo){ attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); sq_SetAddWeaponDamage(attackInfo, true); } if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/swing/precencia/swing_05.ani"), 0, 0); else obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/swing.ani"), -50, 0); } local speed = 1.0 + (sq_GetIntData(obj, SKILL_BYKK_SWING, 0).tofloat()) / 200.0; if(obj.getVar("skillSub").getInt(100) == 1) speed = 0.3 + speed; else if(obj.getVar("skillSub").getInt(100) == 2) speed = 0.5 + speed; obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); break; } } function onEndCurrentAni_Swing(obj) { if(!obj) return; obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); } function onProcCon_Swing(obj) { if(!obj) return; } function onKeyFrameFlag_Swing(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: obj.sq_PlaySound("PRECENCIA_ARMONIA_1_CAST"); break; case 2: obj.sq_PlaySound("PRECENCIA_ARMONIA_2_SMASH"); break; case 3: local sub = 0; if(obj.getVar("skillSub").getInt(100) == 2){ obj.sq_PlaySound("R_WZ_PRECENCIA_SMASH"); sq_SetMyShake(obj, 3, 80); sub = 1; } local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(5, 5); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SWING); local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_SWING, 0, skillLevel); local sizeRate = 100 + sq_GetLevelData(obj, SKILL_BYKK_SWING, 7, skillLevel); if(sq_GetLevelData(obj, SKILL_BYKK_SWING, 5, sq_GetSkillLevel(obj, SKILL_BYKK_SWING)) > 0 && obj.getVar("kksChaser").get_obj_vector_size() > 0){ local chaserObj = obj.getVar("kksChaser").get_obj_vector(0); if(chaserObj) chaserObj.setValid(false); sizeRate = sizeRate + 150; } if(sq_GetSkillLevel(obj, SKILL_BYKK_SPEARMASTERY) > 0 && obj.getWeaponSubType() == 0) sizeRate = sizeRate + sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 3); cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,1,0,obj.getDirection(),SKILL_BYKK_SWING,1,sub,totalDamage,delay,sizeRate,0,0,0,0); break; case 4://`CancelFrame` 17 0 121 break; } return true; } function onTimeEvent_Swing(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_Swing(obj, new_state) { if(!obj) return; } function checkExecutableSkill_SwingEx(obj) { if (!obj) return false; if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SWINGEX); if (isUse){ if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2); else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1); else obj.getVar("skillSub").setInt(100, 0); obj.getVar("CancelBool").setBool(0, false); if(sq_GetLevelData(obj, SKILL_BYKK_SWING, 5, sq_GetSkillLevel(obj, SKILL_BYKK_SWING)) > 0 && sq_GetSkill(obj, SKILL_BYKK_SWING).isInCoolTime()) obj.endSkillCoolTime(SKILL_BYKK_SWING); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_SWINGEX, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_SwingEx(obj) { if (!obj) return false; return true; } function onSetState_SwingEx(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); switch(subState){ case 0: if(obj.getVar("skillSub").getInt(100) == 2){ obj.sq_SetCurrentAnimation(264); } else{ if(obj.getVar("skillSub").getInt(100) == 1){ local Ani = getCurrentAnimation_precencia(obj, "SwingEx", false, false); obj.setCurrentAnimation(Ani); } else obj.sq_SetCurrentAnimation(63); obj.sq_PlaySound("WZ_SWING"); } break; } local speed = 1.0 + (sq_GetLevelData(obj, SKILL_BYKK_SWINGEX, 18, sq_GetSkillLevel(obj, SKILL_BYKK_SWINGEX)).tofloat()) / 200.0; if(obj.getVar("skillSub").getInt(100) == 1) speed = 0.3 + speed; else if(obj.getVar("skillSub").getInt(100) == 2) speed = 0.5 + speed; obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); if(obj.getVar("skillSub").getInt(100) != 2){ local currentAni = obj.getCurrentAnimation(); obj.setTimeEvent(0, currentAni.getDelaySum(0, 3), 1, false); } } function onEndCurrentAni_SwingEx(obj) { if(!obj) return; obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); } function onProcCon_SwingEx(obj) { if(!obj) return; if(obj.getVar("CancelBool").getBool(0)){ local skillIndex = [SKILL_BYKK_DOUBLESWING,SKILL_BYKK_SWING,SKILL_BYKK_RANDOMPIERCESTRIKE, SKILL_BYKK_RANDOMPIERCESTRIKEEX, SKILL_BYKK_CHASERSEXPLOSION,SKILL_BYKK_STRENGTHHANDSTRIKE,SKILL_BYKK_DRAGONSPEAR]; for(local i = 0; i < skillIndex.len(); i++){ if(sq_GetSkill(obj, skillIndex[i]).isInCoolTime()) continue; obj.setSkillCommandEnable(skillIndex[i], true); local b_useskill = obj.sq_IsEnterSkill(skillIndex[i]); if(b_useskill != -1){ if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2); else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1); else obj.getVar("skillSub").setInt(100, 0); switch(skillIndex[i]){ case SKILL_BYKK_DOUBLESWING: obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_BYKK_DOUBLESWING, STATE_PRIORITY_IGNORE_FORCE, true); break; case SKILL_BYKK_SWING: obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_SWING, STATE_PRIORITY_IGNORE_FORCE, true); break; case SKILL_BYKK_RANDOMPIERCESTRIKE: obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_BYKK_RANDOMPIERCESTRIKE, STATE_PRIORITY_IGNORE_FORCE, true); break; case SKILL_BYKK_RANDOMPIERCESTRIKEEX: if(RANDOMPIERCESTRIKEEX_STONE > 0 || sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 8, sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX)) > 0) obj.getVar("RandomPierceStrikeEx_tar").clear_obj_vector(); obj.sq_IntVectClear(); if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_IntVectPush(10); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMPIERCESTRIKEEX, STATE_PRIORITY_IGNORE_FORCE, true); break; case SKILL_BYKK_CHASERSEXPLOSION: local size = obj.getVar("kksChaser").get_obj_vector_size(); if(size < 2){ if (obj.isMessage()) sq_AddMessage(3573); continue; } else{ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_CHASERSEXPLOSION, STATE_PRIORITY_IGNORE_FORCE, true); } break; case SKILL_BYKK_STRENGTHHANDSTRIKE: obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_STRENGTHHANDSTRIKE); obj.getVar("shsBool").setBool(0, true); if(STRENGTHHANDSTRIKE_STONE > 0 || sq_GetLevelData(obj, SKILL_BYKK_STRENGTHHANDSTRIKE, 12, sq_GetSkillLevel(obj, SKILL_BYKK_STRENGTHHANDSTRIKE)) > 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(21); obj.sq_AddSetStatePacket(SKILL_BYKK_STRENGTHHANDSTRIKE, STATE_PRIORITY_IGNORE_FORCE, true); } else{ obj.sq_IntVectClear(); if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_IntVectPush(10); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_BYKK_STRENGTHHANDSTRIKE, STATE_PRIORITY_IGNORE_FORCE, true); } break; case SKILL_BYKK_DRAGONSPEAR: obj.getVar("dragonspearTar").clear_obj_vector(); obj.getVar("dragonspearTar_fix").clear_obj_vector(); if(sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONDANCE) > 0 && !sq_GetSkill(obj, SKILL_BYKK_DRAGONDANCE).isSealFunction()){ obj.sq_IntVectClear(); if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_IntVectPush(12); else{ if(DRAGONSPEAR_STONE > 0 || sq_GetLevelData(obj, SKILL_BYKK_DRAGONSPEAR, 15, sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONSPEAR)) > 0) obj.sq_IntVectPush(2); else obj.sq_IntVectPush(1); } obj.sq_AddSetStatePacket(SKILL_BYKK_DRAGONSPEAR, STATE_PRIORITY_IGNORE_FORCE, true); } else{ obj.sq_IntVectClear(); if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_IntVectPush(10); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_BYKK_DRAGONSPEAR, STATE_PRIORITY_IGNORE_FORCE, true); } break; } } } } } function onKeyFrameFlag_SwingEx(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: obj.sq_PlaySound("PRECENCIA_ARMONIA_1_CAST"); break; case 2: obj.sq_PlaySound("PRECENCIA_ARMONIA_2_SMASH"); break; case 3: obj.sq_PlaySound("R_WZ_PRECENCIA_SMASH"); // sq_flashScreen(obj,100,20,80,102, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); // sq_SetMyShake(obj, 5, 200); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(0, 0); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SWINGEX); local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_SWINGEX, 0, skillLevel); local sizeRate = 100 + sq_GetLevelData(obj, SKILL_BYKK_SWINGEX, 5, skillLevel); if(obj.getWeaponSubType() == 0 && sq_GetSkillLevel(obj, SKILL_BYKK_SPEARMASTERY) > 0) sizeRate = sizeRate + sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 3); cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,1,0,obj.getDirection(),SKILL_BYKK_SWINGEX,1,totalDamage,delay,sizeRate,0,0,0,0,0); local time = 200 * delay / 70; obj.setTimeEvent(1, time, 1, false); break; case 4://`CancelFrame` 17 0 121 obj.getVar("CancelBool").setBool(0, true); break; } return true; } function onTimeEvent_SwingEx(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(0, 0); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SWINGEX); local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_SWINGEX, 0, skillLevel); local sizeRate = 120 + sq_GetLevelData(obj, SKILL_BYKK_SWINGEX, 5, skillLevel); if(obj.getWeaponSubType() == 0 && sq_GetSkillLevel(obj, SKILL_BYKK_SPEARMASTERY) > 0) sizeRate = sizeRate * (100 + sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 3)) / 100; cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,1,0,obj.getDirection(),SKILL_BYKK_SWINGEX,2,delay,sizeRate,totalDamage,0,0,0,0,0); local time = 300 * delay / 70; obj.setTimeEvent(1, time, 1, false); break; case 1: sq_SetShake(obj, 5, 200); break; } } function onEndState_SwingEx(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_SWINGEX){ obj.getVar("CancelBool").setBool(0, false); } } function checkExecutableSkill_Thrust(obj) { if (!obj) return false; if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_THRUST); if (isUse){ if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2); else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1); else obj.getVar("skillSub").setInt(100, 0); obj.getVar("CancelBool").setBool(0, false); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_THRUST, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Thrust(obj) { if (!obj) return false; return true; } function onSetState_Thrust(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); switch(subState){ case 0: if(obj.getVar("skillSub").getInt(100) == 1){ local Ani = getCurrentAnimation_precencia(obj, "Thrust", false, false); obj.setCurrentAnimation(Ani); obj.sq_PlaySound("WZ_LEAP"); } else if(obj.getVar("skillSub").getInt(100) == 2){ obj.sq_SetCurrentAnimation(268); } else{ obj.sq_SetCurrentAnimation(1); obj.sq_PlaySound("WZ_LEAP"); } local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_THRUST); local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_THRUST, 0, skillLevel); local change = sq_GetLevelData(obj, SKILL_BYKK_THRUST, 3, skillLevel); if(change > 0) totalDamage = (obj.sq_GetBonusRateWithPassive(174, -1, 0, 1.0) + 200) * change / 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo){ attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); sq_SetAddWeaponDamage(attackInfo, true); } local speed = (1000 + sq_GetLevelData(obj, SKILL_BYKK_THRUST, 1, skillLevel)) / 1000.0; if(obj.getVar("skillSub").getInt(100) == 1) speed = 0.3 + speed; else if(obj.getVar("skillSub").getInt(100) == 2) speed = 0.5 + speed; obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); local pAni = obj.getCurrentAnimation(); if(obj.getVar("skillSub").getInt(100) == 2) obj.setTimeEvent(0, pAni.getDelaySum(0,3), 1, false); else obj.setTimeEvent(1, 100, 1, true); break; } } function onEndCurrentAni_Thrust(obj) { if(!obj) return; obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); } function onProcCon_Thrust(obj) { if(!obj) return; if(obj.getVar("CancelBool").getBool(0)){ local skillIndex = [SKILL_BYKK_UPPERSWING, SKILL_BYKK_HANDSTRIKE, SKILL_BYKK_POKETHROW, SKILL_BYKK_DOUBLESWING,SKILL_BYKK_SWING,SKILL_BYKK_RANDOMPIERCESTRIKE, SKILL_BYKK_RANDOMPIERCESTRIKEEX,SKILL_BYKK_STRENGTHHANDSTRIKE,SKILL_BYKK_DRAGONSPEAR, SKILL_BYKK_AVATARDANCE]; for(local i = 0; i < skillIndex.len(); i++){ if(sq_GetSkill(obj, skillIndex[i]).isInCoolTime()) continue; obj.setSkillCommandEnable(skillIndex[i], true); local b_useskill = obj.sq_IsEnterSkill(skillIndex[i]); if(b_useskill != -1){ if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2); else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1); else obj.getVar("skillSub").setInt(100, 0); switch(skillIndex[i]){ case SKILL_BYKK_UPPERSWING: obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_UPPERSWING, STATE_PRIORITY_IGNORE_FORCE, true); break; case SKILL_BYKK_HANDSTRIKE: obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_HANDSTRIKE); obj.getVar("handstrike_move").setBool(100, false); obj.getVar("handstrike_bool").setBool(0, true); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_HANDSTRIKE, STATE_PRIORITY_IGNORE_FORCE, true); break; case SKILL_BYKK_POKETHROW: obj.getVar("dirBool").setBool(0, false); obj.getVar("pokethrowTar").clear_obj_vector(); obj.getVar("pokethrowTar_fix").clear_obj_vector(); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_POKETHROW, STATE_PRIORITY_IGNORE_FORCE, true); break; case SKILL_BYKK_DOUBLESWING: obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_BYKK_DOUBLESWING, STATE_PRIORITY_IGNORE_FORCE, true); break; case SKILL_BYKK_SWING: obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_SWING, STATE_PRIORITY_IGNORE_FORCE, true); break; case SKILL_BYKK_RANDOMPIERCESTRIKE: obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_BYKK_RANDOMPIERCESTRIKE, STATE_PRIORITY_IGNORE_FORCE, true); break; case SKILL_BYKK_RANDOMPIERCESTRIKEEX: if(RANDOMPIERCESTRIKEEX_STONE > 0 || sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 8, sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX)) > 0) obj.getVar("RandomPierceStrikeEx_tar").clear_obj_vector(); obj.sq_IntVectClear(); if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_IntVectPush(10); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMPIERCESTRIKEEX, STATE_PRIORITY_IGNORE_FORCE, true); break; case SKILL_BYKK_STRENGTHHANDSTRIKE: obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_STRENGTHHANDSTRIKE); obj.getVar("shsBool").setBool(0, true); if(STRENGTHHANDSTRIKE_STONE > 0 || sq_GetLevelData(obj, SKILL_BYKK_STRENGTHHANDSTRIKE, 12, sq_GetSkillLevel(obj, SKILL_BYKK_STRENGTHHANDSTRIKE)) > 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(21); obj.sq_AddSetStatePacket(SKILL_BYKK_STRENGTHHANDSTRIKE, STATE_PRIORITY_IGNORE_FORCE, true); } else{ obj.sq_IntVectClear(); if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_IntVectPush(10); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_BYKK_STRENGTHHANDSTRIKE, STATE_PRIORITY_IGNORE_FORCE, true); } break; case SKILL_BYKK_DRAGONSPEAR: obj.getVar("dragonspearTar").clear_obj_vector(); obj.getVar("dragonspearTar_fix").clear_obj_vector(); if(sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONDANCE) > 0 && !sq_GetSkill(obj, SKILL_BYKK_DRAGONDANCE).isSealFunction()){ obj.sq_IntVectClear(); if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_IntVectPush(12); else{ if(DRAGONSPEAR_STONE > 0 || sq_GetLevelData(obj, SKILL_BYKK_DRAGONSPEAR, 15, sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONSPEAR)) > 0) obj.sq_IntVectPush(2); else obj.sq_IntVectPush(1); } obj.sq_AddSetStatePacket(SKILL_BYKK_DRAGONSPEAR, STATE_PRIORITY_IGNORE_FORCE, true); } else{ obj.sq_IntVectClear(); if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_IntVectPush(10); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_BYKK_DRAGONSPEAR, STATE_PRIORITY_IGNORE_FORCE, true); } break; case SKILL_BYKK_AVATARDANCE: obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_BYKK_AVATARDANCE, STATE_PRIORITY_IGNORE_FORCE, true); break; } } } } } function onKeyFrameFlag_Thrust(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_Thrust(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/thrust/thrust_04.ani", 0, 1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/thrust/thrust_05.ani", 0, 1, 0); break; case 1: sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/thrustover.ani", 200, 1, 50); sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/thrustunder.ani", 200, 1, 50); break; } } function onEndState_Thrust(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_THRUST){ obj.getVar("CancelBool").setBool(0, false); } } function onAttack_Thrust(obj, damager, boundingBox, isStuck) { if(!obj) return; if(sq_getGrowType(obj) != 3) return; obj.getVar("CancelBool").setBool(0, true); local createMax = sq_GetIntData(obj, SKILL_BYKK_CHASER, 0); if(obj.getVar("kksChaser").get_obj_vector_size() < createMax) createBattlemageChaser(obj); } function checkExecutableSkill_TimerBomb(obj) { if (!obj) return false; if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_TIMERBOMB); if (isUse){ if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2); else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1); else obj.getVar("skillSub").setInt(100, 0); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_TIMERBOMB, STATE_PRIORITY_IGNORE_FORCE, true); obj.startSkillCoolTime(SKILL_BYKK_TIMERBOMB, sq_GetSkillLevel(obj, SKILL_BYKK_TIMERBOMB), -1); return true; } return false; } function checkCommandEnable_TimerBomb(obj) { if (!obj) return false; return true; } function onSetState_TimerBomb(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); switch(subState){ case 0: if(obj.getVar("skillSub").getInt(100) == 1){ local Ani = getCurrentAnimation_precencia(obj, "Timerbomb", false, false); obj.setCurrentAnimation(Ani); } else if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_SetCurrentAnimation(269); else obj.sq_SetCurrentAnimation(67); break; } local speed = 1.0; if(obj.getVar("skillSub").getInt(100) == 1) speed = 0.3 + speed; else if(obj.getVar("skillSub").getInt(100) == 2) speed = 0.5 + speed; obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_TIMERBOMB); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_TIMERBOMB, -1, 0, 1.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 37)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo){ attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); sq_SetAddWeaponDamage(attackInfo, true); } } function onEndCurrentAni_TimerBomb(obj) { if(!obj) return; obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); } function onProcCon_TimerBomb(obj) { if(!obj) return; } function onKeyFrameFlag_TimerBomb(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_TimerBomb(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_TimerBomb(obj, new_state) { if(!obj) return; } function onAttack_TimerBomb(obj, damager, boundingBox, isStuck) { if(!obj) return; if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DOUBLESWING, -1, 3, 1.0) + 100; local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DOUBLESWING, -1, 4, 1.0) + 100; local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_DOUBLESWING); local lifeTime = sq_GetLevelData(obj, SKILL_BYKK_TIMERBOMB, 1, skillLevel); local hitTime = sq_GetIntData(obj, SKILL_BYKK_TIMERBOMB, 0); local group = sq_GetGroup(damager); local uniqueId = sq_GetUniqueId(damager); local sub = sq_GetLevelData(obj, SKILL_BYKK_TIMERBOMB, 5, skillLevel); local sub2 = sq_GetLevelData(obj, SKILL_BYKK_TIMERBOMB, 6, skillLevel); cearteSkillPassive_Battlemage_bykk(obj,damager,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,1,sq_GetCenterZPos(boundingBox),obj.getDirection(),SKILL_BYKK_TIMERBOMB,1,totalDamage,totalDamage2,lifeTime,hitTime,group,uniqueId,sub,sub2); } } function checkExecutableSkill_UpperSwing(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_UPPERSWING); if (isUse){ if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2); else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1); else obj.getVar("skillSub").setInt(100, 0); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_UPPERSWING, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_UpperSwing(obj) { if (!obj) return false; return true; } function onSetState_UpperSwing(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); switch(subState){ case 0: if(obj.getVar("skillSub").getInt(100) == 1){ local Ani = getCurrentAnimation_precencia(obj, "upperswing", false, false); obj.setCurrentAnimation(Ani); obj.sq_PlaySound("WZ_HEAVEN_HIT"); } else if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_SetCurrentAnimation(271); else{ obj.sq_SetCurrentAnimation(2); obj.sq_PlaySound("WZ_HEAVEN_HIT"); } local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_UPPERSWING); local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_UPPERSWING, 0, skillLevel); local change = sq_GetLevelData(obj, SKILL_BYKK_UPPERSWING, 5, skillLevel); if(change > 0) totalDamage = (obj.sq_GetBonusRateWithPassive(174, -1, 0, 1.0) + 200) * change / 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 1)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); local upForce = sq_GetLevelData(obj, SKILL_BYKK_UPPERSWING, 2, skillLevel); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaser.nut")) upForce = (upForce * sq_GetLevelData(obj, SKILL_BYKK_CHASER, 17, sq_GetSkillLevel(obj, SKILL_BYKK_CHASER)) * 0.4 / 100).tointeger(); print("upForce = "+upForce); sq_SetCurrentAttacknUpForce(attackInfo, upForce); attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); sq_SetAddWeaponDamage(attackInfo, true); local speed = (1000 + sq_GetLevelData(obj, SKILL_BYKK_UPPERSWING, 1, skillLevel)) / 1000.0; if(obj.getVar("skillSub").getInt(100) == 1) speed = 0.3 + speed; else if(obj.getVar("skillSub").getInt(100) == 2) speed = 0.5 + speed; print(speed); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); local pAni = obj.getCurrentAnimation(); local delaySum = pAni.getDelaySum(false); obj.setTimeEvent(0, delaySum / 50, 50, true); obj.getVar("upswing_move").setInt(0, 0); if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) obj.getVar("upswing_move").setInt(0, 1); else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) obj.getVar("upswing_move").setInt(0, 2); obj.getVar("upswing_move").setInt(10, sq_GetXPos(obj)); obj.getVar("upswing_move").setInt(11, sq_GetYPos(obj)); obj.getVar("upswing_move").setInt(12, 200); break; } } function onEndCurrentAni_UpperSwing(obj) { if(!obj) return; obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); } function onProcCon_UpperSwing(obj) { if(!obj) return; } function onKeyFrameFlag_UpperSwing(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_UpperSwing(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: local baseX = obj.getVar("upswing_move").getInt(10); local baseY = obj.getVar("upswing_move").getInt(11); local v = sq_GetUniformVelocity(0, obj.getVar("upswing_move").getInt(12), timeEventCount, 50); local vy = 0; if(obj.getVar("upswing_move").getInt(0) == 1) vy = sq_GetUniformVelocity(0, -30, timeEventCount, 25); else if(obj.getVar("upswing_move").getInt(0) == 2) vy = sq_GetUniformVelocity(0, 30, timeEventCount, 25); if(timeEventCount > 25){ if(obj.getVar("upswing_move").getInt(0) == 1) vy = sq_GetUniformVelocity(0, 40, timeEventCount - 25, 25); else if(obj.getVar("upswing_move").getInt(0) == 2) vy = sq_GetUniformVelocity(0, -40, timeEventCount - 25, 25); } local dstX = sq_GetDistancePos(baseX, obj.getDirection(), v); if(obj.isMovablePos(dstX, sq_GetYPos(obj))){ sq_setCurrentAxisPos(obj, 0, dstX); sq_setCurrentAxisPos(obj, 1, baseY + vy); } else{ obj.getVar("upswing_move").setInt(12, v); } break; } } function onEndState_UpperSwing(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_UPPERSWING){ sq_SimpleMoveToNearMovablePos(obj, 1200); } } function onAttack_UpperSwing(obj, damager, boundingBox, isStuck) { if(!obj) return; if(isStuck) return; if(sq_getGrowType(obj) != 3) return; if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; local createMax = sq_GetIntData(obj, SKILL_BYKK_CHASER, 0); if(obj.getVar("kksChaser").get_obj_vector_size() < createMax) createBattlemageChaser(obj); } /////////////////////////battlemage_end///////////////////////