function checkExecutableSkill_ChasersExplosion(obj) { if (!obj) return false; local size = obj.getVar("kksChaser").get_obj_vector_size(); if(size < 1){ if (obj.isMessage()) sq_AddMessage(3573); return false; } if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CHASERSEXPLOSION); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_CHASERSEXPLOSION, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_ChasersExplosion(obj) { if (!obj) return false; return true; } function onSetState_ChasersExplosion(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: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ obj.sq_SetCurrentAnimation(221); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.5, 1.5); obj.sq_PlaySound("WZ_PRECENCIA_CHASERPRESS_1"); obj.sq_PlaySound("PRECENCIA_CHASERPRESS_1_CAST"); } else{ if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ local Ani = getCurrentAnimation_precencia(obj, "ChasersExplosion", false, false); obj.setCurrentAnimation(Ani); } else obj.sq_SetCurrentAnimation(8); obj.sq_PlaySound("WZ_CHASERP_02"); } local speed = 1.0; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) speed = 0.3 + speed; else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) speed = 0.5 + speed; obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); local size = obj.getVar("kksChaser").get_obj_vector_size(); obj.getVar("chasersexp").setInt(10, size); local delaySum = 300; local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(0, 2); if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ obj.setTimeEvent(0, delay / 10, 10, true); obj.setTimeEvent(1, delay, 1, false); } else{ obj.setTimeEvent(10, delay, 1, false); } sq_SetFrameDelayTime(currentAni, 6, delaySum); obj.getVar("ChasersExplosion_damage").setInt(10, 0); break; } } function onEndCurrentAni_ChasersExplosion(obj) { if(!obj) return; if(sq_GetZPos(obj) > 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(0); obj.sq_IntVectPush(100); obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); } else{ obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); } } function onProcCon_ChasersExplosion(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: break; } } function onKeyFrameFlag_ChasersExplosion(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 11: obj.sq_PlaySound("R_WZ_PRECENCIA_CHASERPRESS_2"); obj.sq_PlaySound("PRECENCIA_CHASERPRESS_2_CHASER"); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CHASERSEXPLOSION, -1, 0, 1.0); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHASERSEXPLOSION); local baseSRate = sq_GetIntData(obj, SKILL_BYKK_CHASERSEXPLOSION, 0); print("baseSRate = "+baseSRate); local addSRate = sq_GetIntData(obj, SKILL_BYKK_CHASERSEXPLOSION, 2) / 10; // if(sq_GetSkillLevel(obj, SKILL_BYKK_POLEMASTERY) > 0 && obj.getWeaponSubType() == 1) baseSRate = baseSRate + sq_GetIntData(obj, SKILL_BYKK_POLEMASTERY, 2) / 10; baseSRate = baseSRate + obj.getVar("chasersexp").getInt(10) * addSRate; print("test1 = "+obj.getVar("chasersexp").getInt(10)); print("test2 = "+addSRate); print("test3 = "+baseSRate); // if(sq_GetSkillLevel(obj, SKILL_BYKK_POLEMASTERY) > 0 && obj.getWeaponSubType() == 1) baseSRate = baseSRate * (100 + sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 2)) / 100; // totalDamage = totalDamage * obj.getVar("ChasersExplosion_damage").getInt(10) / 100; print("totalDamage = "+totalDamage); cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,1,0,obj.getDirection(),SKILL_BYKK_CHASERSEXPLOSION,2,totalDamage,baseSRate,1,0,0,0,0,0); break; case 12: local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHASERSEXPLOSION); local baseSRate = sq_GetLevelData(obj, SKILL_BYKK_CHASERSEXPLOSION, 1, skillLevel); local addSRate = sq_GetLevelData(obj, SKILL_BYKK_CHASERSEXPLOSION, 3, skillLevel) / 10; // if(sq_GetSkillLevel(obj, SKILL_BYKK_POLEMASTERY) > 0 && obj.getWeaponSubType() == 1) baseSRate = baseSRate + sq_GetIntData(obj, SKILL_BYKK_POLEMASTERY, 2) / 10; baseSRate = baseSRate + obj.getVar("chasersexp").getInt(10) * addSRate; createOnlyDrawObjectEX_Battlemage_bykk(obj,"character/mage/effect/animation/battlemage_bykk/chasersexplosion/precencia/chaserexplosionbottom_09.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj)*0,ENUM_DRAWLAYER_BOTTOM,baseSRate,baseSRate); createOnlyDrawObjectEX_Battlemage_bykk(obj,"character/mage/effect/animation/battlemage_bykk/chasersexplosion/precencia/chaserexplosionfront_07.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj) + 1,sq_GetZPos(obj)*0,ENUM_DRAWLAYER_NORMAL,baseSRate,baseSRate); sq_SetMyShake(obj, 8, 160); break; case 13: obj.sq_PlaySound("PRECENCIA_CHASERPRESS_3_FINISH"); break; } return true; } function onTimeEvent_ChasersExplosion(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: local vz = sq_GetUniformVelocity(0, 50, timeEventCount, 10); sq_setCurrentAxisPos(obj, 2, vz); break; case 1: local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(3, 6); local delay2 = currentAni.getDelaySum(3, 9); cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,-70,0,50,obj.getDirection(),SKILL_BYKK_CHASERSEXPLOSION,1,delay,0,0,0,0,0,0,0); obj.setTimeEvent(2, delay2, 1, false); local baseX = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), -75); local baseZ = 88; local size = obj.getVar("kksChaser").get_obj_vector_size(); for(local i = 0; i < size; i++){ local chaserObj = obj.getVar("kksChaser").get_obj_vector(i); if(chaserObj){ local colObj = sq_GetCNRDObjectToCollisionObject(chaserObj); if(colObj.getState() > 22) colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); colObj.removeAllTimeEvent(); local angle = 360 / size * i; local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 60.0).tointeger(); local z = (sq_Sin(sq_ToRadian(angle.tofloat())) * 60.0).tointeger(); colObj.getVar("moveSet").setInt(10, baseX + x); colObj.getVar("moveSet").setInt(11, baseZ + z); colObj.getVar("moveSet").setInt(12, baseX); colObj.getVar("moveSet").setInt(13, baseZ); colObj.getVar("moveSet").setInt(14, delay); colObj.setTimeEvent(15, delay / 45, 15, true); // local totalDamage = obj.getVar("ChasersExplosion_damage").getInt(10) + colObj.getVar("custom").getInt(10); // obj.getVar("ChasersExplosion_damage").setInt(10, totalDamage); // print(obj.getVar("ChasersExplosion_damage").getInt(10)); } } break; case 2: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CHASERSEXPLOSION, -1, 0, 1.0); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHASERSEXPLOSION); local baseSRate = sq_GetIntData(obj, SKILL_BYKK_CHASERSEXPLOSION, 0); print("baseSRate = "+baseSRate); local addSRate = sq_GetIntData(obj, SKILL_BYKK_CHASERSEXPLOSION, 2) / 10; // if(sq_GetSkillLevel(obj, SKILL_BYKK_POLEMASTERY) > 0 && obj.getWeaponSubType() == 1) baseSRate = baseSRate + sq_GetIntData(obj, SKILL_BYKK_POLEMASTERY, 2) / 10; baseSRate = baseSRate + obj.getVar("chasersexp").getInt(10) * addSRate; // if(sq_GetSkillLevel(obj, SKILL_BYKK_POLEMASTERY) > 0 && obj.getWeaponSubType() == 1) baseSRate = baseSRate * (100 + sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 2)) / 100; // totalDamage = totalDamage * obj.getVar("ChasersExplosion_damage").getInt(10) / 100; print("test1 = "+obj.getVar("chasersexp").getInt(10)); print("test2 = "+addSRate); print("test3 = "+baseSRate); print("totalDamage = "+totalDamage); cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,75,1,0,obj.getDirection(),SKILL_BYKK_CHASERSEXPLOSION,2,totalDamage,baseSRate,0,0,0,0,0,0); break; case 10: local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(3, 6); local baseX = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 5); local baseZ = 240; local size = obj.getVar("kksChaser").get_obj_vector_size(); for(local i = 0; i < size; i++){ local chaserObj = obj.getVar("kksChaser").get_obj_vector(i); if(chaserObj){ local colObj = sq_GetCNRDObjectToCollisionObject(chaserObj); if(colObj.getState() > 22) colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); colObj.removeAllTimeEvent(); local angle = 360 / size * i; local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 80.0).tointeger(); local z = (sq_Sin(sq_ToRadian(angle.tofloat())) * 80.0).tointeger(); colObj.getVar("moveSet").setInt(10, baseX + x); colObj.getVar("moveSet").setInt(11, baseZ + z); colObj.getVar("moveSet").setInt(12, baseX); colObj.getVar("moveSet").setInt(13, baseZ); colObj.getVar("moveSet").setInt(14, delay); colObj.setTimeEvent(15, delay / 45, 15, true); // local totalDamage = obj.getVar("ChasersExplosion_damage").getInt(10) + colObj.getVar("custom").getInt(10); // obj.getVar("ChasersExplosion_damage").setInt(10, totalDamage); // print(obj.getVar("ChasersExplosion_damage").getInt(10)); } } break; } } function onEndState_ChasersExplosion(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_CHASERSEXPLOSION && new_state != STATE_DIE){ local createMax = sq_GetLevelData(obj, SKILL_BYKK_CHASERSEXPLOSION, 16, sq_GetSkillLevel(obj, SKILL_BYKK_CHASERSEXPLOSION)); for(local i = 0; i < createMax; i++){ createBattlemageChaser(obj); } } } function checkExecutableSkill_DoubleSwing(obj) { if (!obj) return false; if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DOUBLESWING); 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(SKILL_BYKK_DOUBLESWING, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_DoubleSwing(obj) { if (!obj) return false; return true; } function onSetState_DoubleSwing(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, "Doubleswing1", false, false); obj.setCurrentAnimation(Ani); } else if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_SetCurrentAnimation(226); else obj.sq_SetCurrentAnimation(65); break; case 1: if(obj.getVar("skillSub").getInt(100) == 1){ local Ani = getCurrentAnimation_precencia(obj, "Doubleswing2", false, false); obj.setCurrentAnimation(Ani); } else if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_SetCurrentAnimation(227); else obj.sq_SetCurrentAnimation(66); 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 atkIndex = [35,36]; local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_DOUBLESWING); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DOUBLESWING, -1, subState, 1.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex[subState])); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo){ attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); sq_SetAddWeaponDamage(attackInfo, true); } } function onEndCurrentAni_DoubleSwing(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_BYKK_DOUBLESWING, STATE_PRIORITY_AUTO, true); break; case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_DoubleSwing(obj) { if(!obj) return; } function onKeyFrameFlag_DoubleSwing(obj, flagIndex) { if(!obj) return false; if(flagIndex == 1){ sq_SetMyShake(obj, 5, 100); switch(obj.getSkillSubState()){ case 0: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/doubleswing/doubleswing1_02.ani", 0, 1, 0); obj.sq_PlaySound("R_WZ_PRECENCIA_DOUBLESWING_1"); obj.sq_PlaySound("PRECENCIA_DOUBLESWING_1"); } else obj.sq_PlaySound("WZ_DOUBLE_SWING_01"); break; case 1: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ obj.sq_PlaySound("R_WZ_PRECENCIA_DOUBLESWING_2"); obj.sq_PlaySound("PRECENCIA_DOUBLESWING_2"); } else obj.sq_PlaySound("R_WZ_DOUBLE_SWING_02"); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DOUBLESWING, -1, 2, 1.0) + 100; local sizeRate = sq_GetLevelData(obj, SKILL_BYKK_DOUBLESWING, 3, sq_GetSkillLevel(obj, SKILL_BYKK_DOUBLESWING)); if(sq_GetSkillLevel(obj, SKILL_BYKK_SPEARMASTERY) > 0) sizeRate = sizeRate * (100 + sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 2)) / 100; cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,150,0,0,obj.getDirection(),SKILL_BYKK_DOUBLESWING,1,totalDamage,sizeRate,0,0,0,0,0,0); break; } } return true; } function onTimeEvent_DoubleSwing(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_DoubleSwing(obj, new_state) { if(!obj) return; } function checkExecutableSkill_DragonSpear(obj) { if (!obj) return false; if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DRAGONSPEAR); 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("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); } return true; } return false; } function checkCommandEnable_DragonSpear(obj) { if (!obj) return false; return true; } function onSetState_DragonSpear(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, "DragonSpear", false, false); obj.setCurrentAnimation(Ani); } else obj.sq_SetCurrentAnimation(17); obj.sq_AddStateLayerAnimation(10002,obj.sq_CreateCNRDAnimation("effect/animation/avatar/dragonspear/spearattack1.ani"), 0, 0); obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/avatar/dragonspear/spearattack2.ani"), 0, 0); obj.sq_AddStateLayerAnimation(10000,obj.sq_CreateCNRDAnimation("effect/animation/avatar/dragonspear/spearattack3.ani"), 0, 0); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 0, 1.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 15)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 1://煌龍亂舞普通形態 if(obj.getVar("skillSub").getInt(100) == 1){ local Ani = getCurrentAnimation_precencia(obj, "DragonSpearNew_Body", false, false); obj.setCurrentAnimation(Ani); } else obj.sq_SetCurrentAnimation(99); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 7, 1.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 58)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.getVar("DragonSpearBool").setBool(0, true); break; case 2://煌龍亂舞護石形態 if(obj.getVar("skillSub").getInt(100) == 1){ local Ani = getCurrentAnimation_precencia(obj, "DragonSpearNew_Body_Talisman", false, false); obj.setCurrentAnimation(Ani); } else obj.sq_SetCurrentAnimation(284); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 7, 1.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 58)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.getVar("DragonSpearBool").setBool(0, true); break; case 10://三覺形態準備 obj.sq_SetCurrentAnimation(234); break; case 11://三覺形態釋放 obj.sq_SetCurrentAnimation(233); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 0, 1.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 15)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 12://三覺形態煌龍亂舞開始 obj.sq_SetCurrentAnimation(232); obj.getVar("DragonSpearBool").setBool(0, true); break; case 13://三覺形態煌龍亂舞過程 obj.sq_SetCurrentAnimation(231); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 7, 1.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 61)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 14://三覺形態煌龍亂舞過程(護石) obj.sq_SetCurrentAnimation(230); break; case 15://三覺形態煌龍亂舞結束 obj.sq_SetCurrentAnimation(229); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 7, 1.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 60)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; } local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo){ attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); sq_SetAddWeaponDamage(attackInfo, true); } local speedRate = 1.0 + sq_GetLevelData(obj, SKILL_BYKK_DRAGONSPEAR, 2, sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONSPEAR)).tofloat() / 100; if(obj.getVar("skillSub").getInt(100) == 1) speedRate = 0.3 + speedRate; else if(obj.getVar("skillSub").getInt(100) == 2) speedRate = 0.5 + speedRate; obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); if(subState == 0 || subState == 11 && sq_GetLevelData(obj, SKILL_BYKK_DRAGONSPEAR, 15, sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONSPEAR)) < 1){ local currentAni = obj.getCurrentAnimation(); obj.sq_SetXScrollStart(300, currentAni.getDelaySum(0, 6)); } } function onEndCurrentAni_DragonSpear(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: case 2: case 11: case 15: obj.sq_SetXScrollStop(0); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); if(subState == 0){ sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/avatar/dragonspear/speardisappear1.ani", 0, 0, 0); sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/avatar/dragonspear/speardisappear2.ani", 0, 1, 0); } break; case 10: case 12: case 14: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_BYKK_DRAGONSPEAR, STATE_PRIORITY_AUTO, true); break; case 13: obj.sq_IntVectClear(); if(DRAGONSPEAR_STONE > 0 || sq_GetLevelData(obj, SKILL_BYKK_DRAGONSPEAR, 15, sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONSPEAR)) > 0) obj.sq_IntVectPush(subState + 1); else obj.sq_IntVectPush(subState + 2); obj.sq_AddSetStatePacket(SKILL_BYKK_DRAGONSPEAR, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_DragonSpear(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: case 2: case 12: case 13: if(obj.getVar("DragonSpearBool").getBool(0)){ 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("DragonSpearBool").setBool(0, false); } } break; } } function onKeyFrameFlag_DragonSpear(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1000: obj.sq_PlaySound("YELLOWD_CHARGE"); obj.sq_PlaySound("R_WZ_DRAGONDANCE"); break; case 1001://生成龍刀 break; case 1002://生成龍珠後攻擊 if(obj.getVar("dragonspearTar_fix").get_obj_vector_size() < 1 && obj.getVar("dragonspearTar").get_obj_vector_size() < 1 || sq_GetLevelData(obj, SKILL_BYKK_DRAGONSPEAR, 15, sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONSPEAR)) > 0){ obj.setTimeEvent(1, 300, 1, false); break; } local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 1, 1.0) + 100; local sizeRate = (obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 3, 1.0) + 100) * 83 / 100; local currentAni = obj.getCurrentAnimation(); local speedRate = 72000 / currentAni.getDelaySum(0, 0); local createMax = sq_GetIntData(obj, SKILL_BYKK_DRAGONSPEAR, 0); local baseAngle = sq_getRandom(0, 90); for(local i = 0; i < createMax; i++){ local angle = 360 / createMax * i + baseAngle; local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 90.0).tointeger(); local z = (sq_Sin(sq_ToRadian(angle.tofloat())) * 90.0).tointeger(); cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,300+x,0,50+z,obj.getDirection(),SKILL_BYKK_DRAGONSPEAR,2,totalDamage,sizeRate,i,50,speedRate,0,0,0); } local delay = (2300 + createMax * 200) / speedRate * 100; obj.setTimeEvent(0, delay, 1, false); break; case 2001: case 3001: obj.sq_PlaySound("YELLOWD_CHARGE"); obj.sq_PlaySound("R_WZ_DRAGONDANCE"); break; case 2002: case 3002: obj.sq_PlaySound("DRAGONDANCE_STAB"); sq_flashScreen(obj, 0, 30, 30, 7, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 4, 80); break; case 2003: case 2007: case 3003: case 3008: obj.sq_PlaySound("DRAGONDANCE_SWISH"); sq_flashScreen(obj, 0, 30, 30, 7, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 4, 100); obj.resetHitObjectList(); if(obj.getVar("DragonSpearBool").getBool(0) == false) {sq_SetVelocity(obj, 0, 0.0);break;} local speed = 300.0; if(obj.getDirection() == ENUM_DIRECTION_LEFT) speed = -speed; if(flagIndex == 2003 || flagIndex == 3003) sq_SetVelocity(obj, 0, speed); else sq_SetVelocity(obj, 0, 0.0); break; case 2004: case 2005: case 3004: obj.sq_PlaySound("DRAGONDANCE_SWISH"); sq_flashScreen(obj, 0, 30, 30, 7, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 4, 80); obj.resetHitObjectList(); if(obj.getVar("DragonSpearBool").getBool(0) == false) {sq_SetVelocity(obj, 0, 0.0);break;} local speed = 300.0; if(obj.getDirection() == ENUM_DIRECTION_LEFT) speed = -speed; if(flagIndex == 2004 || flagIndex == 3004) sq_SetVelocity(obj, 0, speed); else sq_SetVelocity(obj, 0, 0.0); break; case 2006: case 3006: obj.resetHitObjectList(); if(obj.getVar("DragonSpearBool").getBool(0) == false) {sq_SetVelocity(obj, 0, 0.0);break;} local speed = 300.0; if(obj.getDirection() == ENUM_DIRECTION_LEFT) speed = -speed; sq_SetVelocity(obj, 0, speed); break; case 2007: case 3007: obj.resetHitObjectList(); sq_SetVelocity(obj, 0, 0.0); break; case 2008: case 3009: if(obj.getVar("DragonSpearBool").getBool(0) == false) {sq_SetVelocity(obj, 0, 0.0);break;} local speed = 300.0; if(obj.getDirection() == ENUM_DIRECTION_LEFT) speed = -speed; sq_SetVelocity(obj, 0, speed); break; case 2009: case 3010: obj.sq_PlaySound("DRAGONDANCE_FINISH"); sq_flashScreen(obj, 0, 80, 100, 51, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 15, 180); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 8, 1.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 59)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 2010: case 3011: sq_SetVelocity(obj, 0, 0.0); break; case 3012: obj.sq_PlaySound("R_WZ_DRAGONDANCE_FIN"); obj.sq_PlaySound("DRAGONDANCE_FINISH"); obj.sq_PlaySound("BLAST_SWORD_EXP"); sq_flashScreen(obj, 10, 100, 10, 51, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 20, 120); //`add finish exp` 149 1 -7 local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 8, 1.0) + 100; totalDamage = totalDamage * 18 / 100; local sizeRate = 100; cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,149,1,-7,obj.getDirection(),SKILL_BYKK_DRAGONSPEAR,1,totalDamage,sizeRate,0,0,0,0,0,0); break; case 1101: obj.sq_PlaySound("YELLOWD_CHARGE"); obj.sq_PlaySound("R_WZ_PRECENCIA_DRAGONSPEAR_1"); break; case 1102://生成龍珠後攻擊 if(obj.getVar("dragonspearTar_fix").get_obj_vector_size() < 1 && obj.getVar("dragonspearTar").get_obj_vector_size() < 1 || sq_GetLevelData(obj, SKILL_BYKK_DRAGONSPEAR, 15, sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONSPEAR)) > 0){ obj.setTimeEvent(1, 300, 1, false); break; } local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 1, 1.0) + 100; local sizeRate = (obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 3, 1.0) + 100) * 83 / 100; local currentAni = obj.getCurrentAnimation(); local speedRate = 5100 / currentAni.getDelaySum(0, 0); local createMax = sq_GetIntData(obj, SKILL_BYKK_DRAGONSPEAR, 0); local baseAngle = sq_getRandom(0, 90); for(local i = 0; i < createMax; i++){ local angle = 360 / createMax * i + baseAngle; local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 90.0).tointeger(); local z = (sq_Sin(sq_ToRadian(angle.tofloat())) * 90.0).tointeger(); cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,300+x,0,100+z,obj.getDirection(),SKILL_BYKK_DRAGONSPEAR,2,totalDamage,sizeRate,i,100,speedRate,0,0,0); } local delay = (2000 + createMax * 200) / speedRate * 100; obj.setTimeEvent(0, delay, 1, false); break; case 1201: obj.sq_PlaySound("YELLOWD_CHARGE"); break; case 1202: obj.sq_PlaySound("R_WZ_PRECENCIA_DRAGONDANCE_1"); break; case 1301: case 1303: case 1305: obj.sq_PlaySound("PRECENCIA_DRAGONDANCE_1"); sq_flashScreen(obj, 0, 30, 30, 20, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 3, 80); if(flagIndex > 1301) obj.resetHitObjectList(); if(obj.getVar("DragonSpearBool").getBool(0) == false) {sq_SetVelocity(obj, 0, 0.0);break;} local speed = 300.0; if(obj.getDirection() == ENUM_DIRECTION_LEFT) speed = -speed; sq_SetVelocity(obj, 0, speed); break; case 1302: sq_SetVelocity(obj, 0, 0.0); break; case 1304: case 1306: case 1307: if(flagIndex == 1306) obj.sq_PlaySound("PRECENCIA_DRAGONDANCE_2"); else if(flagIndex == 1307) obj.resetHitObjectList(); if(obj.getVar("DragonSpearBool").getBool(0) == false) {sq_SetVelocity(obj, 0, 0.0);break;} local speed = 300.0; if(obj.getDirection() == ENUM_DIRECTION_LEFT) speed = -speed; sq_SetVelocity(obj, 0, speed); break; case 1308: obj.sq_PlaySound("R_WZ_PRECENCIA_DRAGONDANCE_2"); obj.sq_PlaySound("PRECENCIA_DRAGONDANCE_3"); sq_flashScreen(obj, 0, 80, 200, 76, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 20, 150); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 8, 1.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 59)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); if(sq_GetLevelData(obj, SKILL_BYKK_DRAGONSPEAR, 15, sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONSPEAR)) < 1) break; totalDamage = totalDamage * 18 / 100; local sizeRate = 130; cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,220,0,-2,obj.getDirection(),SKILL_BYKK_DRAGONSPEAR,1,totalDamage,sizeRate,0,0,0,0,0,0); sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/dragondance_finish_25.ani", 0, 1, -1); sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/dragondance_finish_24.ani", 0, 1, -1); sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/dragondance_finish_00.ani", 0, 1, -1000); sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/dragondance_finish_01.ani", 0, 1, -1000); sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/dragondance_finish_05.ani", 0, 1, 0); break; case 1401: obj.sq_PlaySound("PRECENCIA_DRAGONDANCE_1"); sq_flashScreen(obj, 0, 30, 30, 20, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 3, 80); if(obj.getSkillSubState() == 14) obj.resetHitObjectList(); sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/talisman/talisman_mid_14.ani", 0, -1, 0); if(obj.getVar("DragonSpearBool").getBool(0) == false) {sq_SetVelocity(obj, 0, 0.0);break;} local speed = 300.0; if(obj.getDirection() == ENUM_DIRECTION_LEFT) speed = -speed; sq_SetVelocity(obj, 0, speed); break; case 1402: sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/talisman/talisman_mid_13.ani", 0, -1, 0); break; case 1403: obj.sq_PlaySound("PRECENCIA_DRAGONDANCE_1"); obj.resetHitObjectList(); sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/talisman/talisman_mid_22.ani", 0, -1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/talisman/talisman_mid_23.ani", 0, -1, 0); sq_flashScreen(obj, 0, 30, 30, 20, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 3, 80); if(obj.getVar("DragonSpearBool").getBool(0) == false) {sq_SetVelocity(obj, 0, 0.0);break;} local speed = 300.0; if(obj.getDirection() == ENUM_DIRECTION_LEFT) speed = -speed; sq_SetVelocity(obj, 0, speed); break; case 1404: sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/talisman/talisman_mid_24.ani", 0, -1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/talisman/talisman_mid_25.ani", 0, -1, 0); break; case 1405: obj.resetHitObjectList(); sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/talisman/talisman_mid_24.ani", 0, -1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/talisman/talisman_mid_25.ani", 0, -1, 0); if(obj.getVar("DragonSpearBool").getBool(0) == false) {sq_SetVelocity(obj, 0, 0.0);break;} local speed = 300.0; if(obj.getDirection() == ENUM_DIRECTION_LEFT) speed = -speed; sq_SetVelocity(obj, 0, speed); break; case 4001: sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/dragonspear_06.ani", 0, 1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/dragonspear_07.ani", 0, 1, 0); break; } local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo){ attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); sq_SetAddWeaponDamage(attackInfo, true); } return true; } function onTimeEvent_DragonSpear(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 4, 1.0) + 100; local sizeRate = (obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 3, 1.0) + 100) * 83 / 100; local zpos = 50; if(obj.getSkillSubState() == 11) zpos = 100; cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,300,0,zpos,obj.getDirection(),SKILL_BYKK_DRAGONSPEAR,3,totalDamage,sizeRate,0,0,0,0,0,0); case 1: if(obj.getSkillSubState() == 0){ obj.sq_SetXScrollStop(0); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); } else{ local currentAni = obj.getCurrentAnimation(); currentAni.setCurrentFrameWithChildLayer(15); } break; } } function onEndState_DragonSpear(obj, new_state) { if(!obj) return; if(new_state != SKILL_BYKK_DRAGONSPEAR){ local size = obj.getVar("dragonspearTar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("dragonspearTar").get_obj_vector(i); if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, DRAGONSPEAR_APDPATH); } } } } function onAttack_DragonSpear(obj, damager, boundingBox, isStuck) { if(!obj) return; if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; local frameIndex = sq_GetCurrentFrameIndex(obj); if(frameIndex >= 10) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 11: if(sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager) && !sq_IsFixture(damager)){ if(!obj.getVar("dragonspearTar").is_obj_vector(damager)) obj.getVar("dragonspearTar").push_obj_vector(damager); local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, DRAGONSPEAR_APDPATH, true); sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , addAppendage); local zpos = 0; if(subState == 11) zpos = 50; local currentAni = obj.getCurrentAnimation();; local delay = currentAni.getDelaySum(frameIndex, 10); sq_MoveToAppendageForce(damager, obj, obj, 300, 0, zpos, delay / 2, true, addAppendage); } else if(sq_IsFixture(damager) || !sq_IsHoldable(obj,damager) || !sq_IsGrabable(obj,damager)){ if(!obj.getVar("dragonspearTar_fix").is_obj_vector(damager)) obj.getVar("dragonspearTar_fix").push_obj_vector(damager); } break; } } function checkExecutableSkill_FusionChaser(obj) { if (!obj) return false; local size = obj.getVar("kksChaser").get_obj_vector_size(); if(size < 2){ if (obj.isMessage()) sq_AddMessage(3573); return false; } if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_FUSIONCHASER); 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_IsEnterSkillLastKeyUnits(SKILL_BYKK_FUSIONCHASER); obj.getVar("fusionchaser").setBool(0, false); obj.getVar("fusionchaser").setBool(10, false); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_BYKK_FUSIONCHASER, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_FusionChaser(obj) { if (!obj) return false; return true; } function onSetState_FusionChaser(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); switch(subState){ case 0: obj.getVar("fusioncs").setInt(10, 0); if(obj.getVar("skillSub").getInt(100) == 2){ obj.sq_SetCurrentAnimation(235); obj.sq_PlaySound("R_WZ_PRECENCIA_FUSIONCHASER_1"); obj.sq_PlaySound("PRECENCIA_FUSIONCHASER_CAST"); } else{ if(obj.getVar("skillSub").getInt(100) == 1){ local Ani = getCurrentAnimation_precencia(obj, "Fusionchaser", false, false); obj.setCurrentAnimation(Ani); } else obj.sq_SetCurrentAnimation(64); obj.sq_PlaySound("WZ_FUSION"); } break; } local sub = 2; for(local i = 0; i < sub; i++){ local chaserObj = obj.getVar("kksChaser").get_obj_vector(i); if(!chaserObj){ sub = sub + 1; continue; } chaserObj.setValid(false); } 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, 3)); // sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); sq_SetFrameDelayTime(currentAni, 6, 100000); } function onEndCurrentAni_FusionChaser(obj) { if(!obj) return; if(obj.getVar("fusioncs").getInt(10) == 0 && sq_GetLevelData(obj, SKILL_BYKK_FUSIONCHASER, 9, sq_GetSkillLevel(obj, SKILL_BYKK_FUSIONCHASER)) > 0){ local sub = 2,sizeRate = sq_GetIntData(obj, SKILL_BYKK_FUSIONCHASER, 4) / 2; if(obj.getVar("skillSub").getInt(100) < 2){ if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut")) sub = 4; else sub = 3; sizeRate = sizeRate * 2; } local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FUSIONCHASER, -1, 0, 1.0) + 100; sizeRate = sizeRate * (100 + sq_GetLevelData(obj, SKILL_BYKK_FUSIONCHASER, 8, sq_GetSkillLevel(obj, SKILL_BYKK_FUSIONCHASER))) / 100; if(obj.getWeaponSubType() == 1 && sq_GetSkillLevel(obj, SKILL_BYKK_POLEMASTERY) > 0) sizeRate = sizeRate * (100 + sq_GetIntData(obj, SKILL_BYKK_POLEMASTERY, 1)) / 100; cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,50,1,75,obj.getDirection(),SKILL_BYKK_FUSIONCHASER,sub,totalDamage,sizeRate,0,0,0,0,0,0); } obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); } function onProcCon_FusionChaser(obj) { if(!obj) return; local frameIndex = sq_GetCurrentFrameIndex(obj); if(frameIndex == 6){ if(obj.getVar("fusionchaser").getBool(0) == false){ obj.getVar("fusionchaser").setBool(0, true); local sub = 0,xpos = -10, zpos = 120; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut")) sub = 1; else if(obj.getVar("skillSub").getInt(100) == 2){ sub = 2; xpos = 0; zpos = 160; } cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,xpos,0,zpos,obj.getDirection(),SKILL_BYKK_FUSIONCHASER,1,sub,0,0,0,0,0,0,0); } local bDownKey = obj.isDownSkillLastKey(); if(!bDownKey){ local stateTime = obj.sq_GetStateTimer(); if(stateTime <= 500 || sq_GetLevelData(obj, SKILL_BYKK_FUSIONCHASER, 7, sq_GetSkillLevel(obj, SKILL_BYKK_FUSIONCHASER)) > 0) obj.getVar("fusionchaser").setBool(10, true); local currentAni = obj.getCurrentAnimation(); currentAni.setCurrentFrameWithChildLayer(7); if(obj.getVar("skillSub").getInt(100) == 2){ obj.sq_PlaySound("PRECENCIA_FUSIONCHASER_SHOT"); obj.sq_PlaySound("WZ_PRECENCIA_FUSIONCHASER_2"); } } else{ if(obj.getVar("skillSub").getInt(100) == 2){ local currentAni = obj.getCurrentAnimation(); currentAni.setCurrentFrameWithChildLayer(4); } } } } function onKeyFrameFlag_FusionChaser(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: obj.getVar("fusionChaser_move").setInt(10, sq_GetXPos(obj)); local currentAni = obj.getCurrentAnimation(); local poleAniFrameNumber = sq_GetAniFrameNumber(currentAni, 0); local delay = currentAni.getDelaySum(9, poleAniFrameNumber); obj.setTimeEvent(0, delay / 30, 30, true); local atkObj = obj.getVar("kksfsChaser").get_obj_vector(0); if(atkObj){ local colObj = sq_GetCNRDObjectToCollisionObject(atkObj); local zpos = 65; if(obj.getVar("skillSub").getInt(100) == 2) zpos = 80; sq_setCurrentAxisPos(colObj, 2, zpos); colObj.setTimeEvent(0, delay / 30, 30, true); } break; } return true; } function onTimeEvent_FusionChaser(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: local baseX = obj.getVar("fusionChaser_move").getInt(10); local v = sq_GetUniformVelocity(0, 200, timeEventCount, 30); local dstX = sq_GetDistancePos(baseX, obj.getDirection(), v); if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); break; } } function onEndState_FusionChaser(obj, new_state) { if(!obj) return; local size = obj.getVar("kksfsChaser").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local atkObj = obj.getVar("kksfsChaser").get_obj_vector(i); if(atkObj){ local colObj = sq_GetCNRDObjectToCollisionObject(atkObj); if(colObj.getState() == 20) colObj.setValid(false); } } } } function onAttack_FusionChaser(obj, damager, boundingBox, isStuck) { if(!obj) return; if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; obj.getVar("fusioncs").setInt(10, obj.getVar("fusioncs").getInt(10) + 1); if(obj.getVar("fusionchaser").getBool(10)){ obj.getVar("fusionchaser").setBool(10, false); local sub = 2,sizeRate = sq_GetIntData(obj, SKILL_BYKK_FUSIONCHASER, 4) / 2; if(obj.getVar("skillSub").getInt(100) < 2){ if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut")) sub = 4; else sub = 3; sizeRate = sizeRate * 2; } local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FUSIONCHASER, -1, 0, 1.0) + 100; if(sq_GetLevelData(obj, SKILL_BYKK_FUSIONCHASER, 10, sq_GetSkillLevel(obj, SKILL_BYKK_FUSIONCHASER)) > 0){ local sub = 2; for(local i = 0; i < sub; i++){ local chaserObj = obj.getVar("kksChaser").get_obj_vector(i); if(!chaserObj){ sub = sub + 1; continue; } chaserObj.setValid(false); } totalDamage = totalDamage * 2; } sizeRate = sizeRate * (100 + sq_GetLevelData(obj, SKILL_BYKK_FUSIONCHASER, 8, sq_GetSkillLevel(obj, SKILL_BYKK_FUSIONCHASER))) / 100; if(obj.getWeaponSubType() == 1 && sq_GetSkillLevel(obj, SKILL_BYKK_POLEMASTERY) > 0) sizeRate = sizeRate * (100 + sq_GetIntData(obj, SKILL_BYKK_POLEMASTERY, 1)) / 100; cearteSkillPassive_Battlemage_bykk(obj,damager,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,1,sq_GetCenterZPos(boundingBox),obj.getDirection(),SKILL_BYKK_FUSIONCHASER,sub,totalDamage,sizeRate,0,0,0,0,0,0); return; } local atkObj = obj.getVar("kksfsChaser").get_obj_vector(0); if(atkObj){ local colObj = sq_GetCNRDObjectToCollisionObject(atkObj); if(colObj.getState() == 20){ obj.getVar("kksfsChaser").remove_obj_vector(colObj); colObj.removeAllTimeEvent(); colObj.getVar("tar").clear_obj_vector(); colObj.getVar("tar").push_obj_vector(damager); sq_setCurrentAxisPos(colObj, 0, sq_GetXPos(damager)); sq_setCurrentAxisPos(colObj, 1, sq_GetYPos(damager) + 1); sq_setCurrentAxisPos(colObj, 2, sq_GetCenterZPos(boundingBox)); sq_moveWithParent(damager, colObj); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FUSIONCHASER, -1, 4, 1.0) + 100; if(sq_GetLevelData(obj, SKILL_BYKK_FUSIONCHASER, 10, sq_GetSkillLevel(obj, SKILL_BYKK_FUSIONCHASER)) > 0){ local sub = 2; for(local i = 0; i < sub; i++){ local chaserObj = obj.getVar("kksChaser").get_obj_vector(i); if(!chaserObj){ sub = sub + 1; continue; } chaserObj.setValid(false); } totalDamage = totalDamage * 2; } local hitTime = sq_GetIntData(obj, SKILL_BYKK_FUSIONCHASER, 7); local lifeTime = sq_GetIntData(obj, SKILL_BYKK_FUSIONCHASER, 8); colObj.setTimeEvent(2, hitTime, -1, true); colObj.setTimeEvent(3, lifeTime, 1, false); sq_SetCurrentAttackInfo(colObj, sq_GetCustomAttackInfo(colObj, 24)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(colObj), totalDamage); colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); } } } function checkExecutableSkill_Goddnessofwar(obj) { if (!obj) return false; if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_GODDNESSOFWAR); 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_GODDNESSOFWAR, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Goddnessofwar(obj) { if (!obj) return false; return true; } function onSetState_Goddnessofwar(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(237); obj.sq_PlaySound("R_WZ_PRECENCIA_GODDNESSOFWAR"); obj.sq_PlaySound("PRECENCIA_GODDNESSOFWAR"); } else{ if(obj.getVar("skillSub").getInt(100) == 1){ local Ani = getCurrentAnimation_precencia(obj, "Goddnessofwar_Body", false, false); obj.setCurrentAnimation(Ani); } else obj.sq_SetCurrentAnimation(273); obj.sq_PlaySound("TEANA_CHANGE_CAST"); obj.sq_PlaySound("GODDESWAR"); obj.sq_PlaySound("R_WZ_GODDNESSOFWAR"); } break; case 3: if(obj.getVar("skillSub").getInt(100) == 2){ obj.sq_SetCurrentAnimation(218); obj.sq_PlaySound("R_WZ_PRECENCIA_CHASER_EVOLUTION"); } else{ if(obj.getVar("skillSub").getInt(100) == 1){ local Ani = getCurrentAnimation_precencia(obj, "Wink1", false, false); obj.setCurrentAnimation(Ani); } else{ local Ani = obj.sq_GetThrowChargeAni(3); obj.setCurrentAnimation(Ani); } obj.sq_PlaySound("WZ_EVOLUTIONCHASER_START"); } break; case 4: if(obj.getVar("skillSub").getInt(100) == 1){ local Ani = getCurrentAnimation_precencia(obj, "Wink2", false, false); obj.setCurrentAnimation(Ani); } else{ local Ani = obj.sq_GetThrowShootAni(3); obj.setCurrentAnimation(Ani); } obj.sq_PlaySound("WZ_EVOLUTIONCHASER_LAUNCH"); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut")){ CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut"); changeBattlemageChaser(obj, 0); } else{ if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut") || CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) return; local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_CHASEREVOLUTION, false, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut", true); addAppendage.setEnableIsBuff(true); addAppendage.setBuffIconImage(74); addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_CHASEREVOLUTION, sq_GetSkillLevel(obj, SKILL_BYKK_CHASEREVOLUTION)); CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); changeBattlemageChaser(obj, 1); } break; } } function onEndCurrentAni_Goddnessofwar(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: local apdPath = "character/mage/battlemage_bykk/ap/ap_goddnessofwar.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath); local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_GODDNESSOFWAR, false, apdPath, true); setDamageRate_BattleMage_bykk(obj); local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_GODDNESSOFWAR); local buffTime = sq_GetLevelData(obj, SKILL_BYKK_GODDNESSOFWAR, 0, skill_level); if(buffTime > 0) addAppendage.sq_SetValidTime(buffTime); addAppendage.setEnableIsBuff(true); addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_GODDNESSOFWAR, skill_level); CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); local rad = sq_GetLevelData(obj, 7, 1, sq_GetSkillLevel(obj, 7)) / 10; obj.getVar("apGetSetbyKK").setInt(0, rad); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; case 3: if(obj.getVar("skillSub").getInt(100) == 2){ obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); } else{ obj.sq_IntVectClear(); obj.sq_IntVectPush(4); obj.sq_AddSetStatePacket(STATE_BYKK_GODDNESSOFWAR, STATE_PRIORITY_AUTO, true); } break; case 4: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Goddnessofwar(obj) { if(!obj) return; } function onKeyFrameFlag_Goddnessofwar(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 101: if(obj.getVar("skillSub").getInt(100) == 2){ if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut")){ CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut"); changeBattlemageChaser(obj, 0); } else{ if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut") || CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) return; local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_CHASEREVOLUTION, false, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut", true); addAppendage.setEnableIsBuff(true); addAppendage.setBuffIconImage(74); addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_CHASEREVOLUTION, sq_GetSkillLevel(obj, SKILL_BYKK_CHASEREVOLUTION)); CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); changeBattlemageChaser(obj, 1); } } break; } return true; } function onTimeEvent_Goddnessofwar(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_Goddnessofwar(obj, new_state) { if(!obj) return; } function checkExecutableSkill_HandStrike(obj) { if (!obj) return false; if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HANDSTRIKE); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_HANDSTRIKE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_HandStrike(obj) { if (!obj) return false; return true; } function onSetState_HandStrike(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(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_IsEnterSkillLastKeyUnits(SKILL_BYKK_HANDSTRIKE); obj.getVar("handstrike_move").setBool(100, false); obj.getVar("handstrike_bool").setBool(0, true); obj.getVar("handstrike_bool").setBool(1, true); if(obj.getVar("skillSub").getInt(100) == 2){ obj.sq_SetCurrentAnimation(240); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.5, 1.5); } else{ if(obj.getVar("skillSub").getInt(100) == 1){ local Ani = getCurrentAnimation_precencia(obj, "Handstrike", false, false); obj.setCurrentAnimation(Ani); } else obj.sq_SetCurrentAnimation(4); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_HANDSTRIKE); local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_HANDSTRIKE, 1, skillLevel); local change = sq_GetLevelData(obj, SKILL_BYKK_HANDSTRIKE, 10, skillLevel); if(change > 0) totalDamage = (obj.sq_GetBonusRateWithPassive(174, -1, 0, 1.0) + 200) * change / 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 3)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); local bForce = sq_GetLevelData(obj, SKILL_BYKK_HANDSTRIKE, 2, skillLevel); sq_SetCurrentAttacknBackForce(attackInfo, bForce); sq_SetCurrentAttacknUpForce(attackInfo, 600); attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); sq_SetAddWeaponDamage(attackInfo, true); } break; case 1: obj.sq_SetCurrentAnimation(239); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.5, 1.5); break; case 2: obj.sq_SetCurrentAnimation(238); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_HANDSTRIKE); local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_HANDSTRIKE, 1, skillLevel); local change = sq_GetLevelData(obj, SKILL_BYKK_HANDSTRIKE, 10, 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 bForce = sq_GetLevelData(obj, SKILL_BYKK_HANDSTRIKE, 2, skillLevel); sq_SetCurrentAttacknBackForce(attackInfo, bForce); sq_SetCurrentAttacknUpForce(attackInfo, 600); attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); sq_SetAddWeaponDamage(attackInfo, true); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.5, 1.5); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(false); local stateTime = obj.sq_GetVectorData(datas, 1); print("stateTime = "+stateTime); local speedRate = stateTime.tofloat() * 1.5; if(speedRate <= 1000) speedRate = 1000.0; else if(speedRate >= 2000) speedRate = 2000.0; speedRate = 410.0 / delay * speedRate; print("speedRate = "+speedRate); if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speedRate); else sq_SetVelocity(obj, 0, -speedRate); // obj.getVar("handstrike_move").setInt(10, sq_GetXPos(obj)); // obj.setTimeEvent(1, delay / 20, 20, true); break; } } function onEndCurrentAni_HandStrike(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(obj.getVar("skillSub").getInt(100) == 2){ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_HANDSTRIKE, STATE_PRIORITY_AUTO, true); } else{ obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); } break; case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(STATE_BYKK_HANDSTRIKE, STATE_PRIORITY_AUTO, true); break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_HandStrike(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(obj.getVar("skillSub").getInt(100) == 2) break; local bDownKey = obj.isDownSkillLastKey(); local frameIndex = sq_GetCurrentFrameIndex(obj); local stateTime = obj.sq_GetStateTimer(); if(!bDownKey && obj.getVar("handstrike_bool").getBool(1)){ obj.getVar("handstrike_bool").setBool(1, false); obj.getVar("handstrike_move").setInt(10, sq_GetXPos(obj)); obj.getVar("handstrike_move").setInt(11, 200); local currentAni = obj.getCurrentAnimation(); currentAni.setCurrentFrameWithChildLayer(9); local delay = currentAni.getDelaySum(9, 13); //obj.setTimeEvent(0, delay / 30, 20, true); print("stateTime = "+stateTime); local speedRate = stateTime.tofloat() * 1.5; if(speedRate <= 1000) speedRate = 1000.0; else if(speedRate >= 2000) speedRate = 2000.0; speedRate = 410.0 / delay * speedRate; print("speedRate = "+speedRate); if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speedRate); else sq_SetVelocity(obj, 0, -speedRate); obj.sq_PlaySound("WZ_DASH_HIT"); return; } if(frameIndex == 7){ if(stateTime >= sq_GetIntData(obj, SKILL_BYKK_HANDSTRIKE, 2) && obj.getVar("handstrike_bool").getBool(0)){ obj.getVar("handstrike_bool").setBool(0, false); obj.getVar("handstrike_move").setBool(100, true); sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/magicfullcharge31.ani", 0, 1, 50); sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/magicfullcharge32.ani", 0, 1, 50); obj.sq_PlaySound("YELLOWD_CHARGE"); } } break; case 1: local bDownKey = obj.isDownSkillLastKey(); local stateTime = obj.sq_GetStateTimer(); //if(stateTime < 200) break; if(!bDownKey){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_IntVectPush(stateTime); obj.sq_AddSetStatePacket(STATE_BYKK_HANDSTRIKE, STATE_PRIORITY_AUTO, true); break; } else{ local fullchargeTime = sq_GetIntData(obj, SKILL_BYKK_HANDSTRIKE, 2); if(sq_GetSkillLevel(obj, SKILL_BYKK_SPEARMASTERY) > 0 && obj.getWeaponSubType() == 0) fullchargeTime = fullchargeTime * (100 - sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 0)) / 100; if(stateTime >= fullchargeTime && obj.getVar("handstrike_bool").getBool(0)){ obj.getVar("handstrike_bool").setBool(0, false); obj.getVar("handstrike_move").setBool(100, true); sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/magicfullcharge31.ani", 0, 1, 75); sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/magicfullcharge32.ani", 0, 1, 75); obj.sq_PlaySound("YELLOWD_CHARGE"); } } break; } } function onKeyFrameFlag_HandStrike(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_HandStrike(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: local baseX = obj.getVar("handstrike_move").getInt(10); local moveX = obj.getVar("handstrike_move").getInt(11); if(obj.getVar("handstrike_move").getBool(100)) moveX = moveX * 150 / 100; if(obj.getVar("skillSub").getInt(100) == 2) moveX = moveX * 150 / 100; local v = sq_GetUniformVelocity(0, moveX, timeEventCount, 20); local dstX = sq_GetDistancePos(baseX, obj.getDirection(), v); if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); else{ obj.getVar("handstrike_move").setInt(10, sq_GetXPos(obj)); obj.getVar("handstrike_move").setInt(11, 0); } break; case 1: local baseX = obj.getVar("handstrike_move").getInt(10); local moveX = obj.getVar("handstrike_move").getInt(11); if(obj.getVar("handstrike_move").getBool(100)) moveX = moveX * 150 / 100; local v = sq_GetUniformVelocity(0, moveX, timeEventCount, 20); local dstX = sq_GetDistancePos(baseX, obj.getDirection(), v); if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); else{ obj.getVar("handstrike_move").setInt(10, sq_GetXPos(obj)); obj.getVar("handstrike_move").setInt(11, 0); } break; } } function onEndState_HandStrike(obj, new_state) { if(!obj) return; } function onAttack_HandStrike(obj, damager, boundingBox, isStuck) { if(!obj) return; if(obj.getVar("handstrike_move").getBool(100) == false) return; if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; if(sq_getGrowType(obj) != 3) return; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HANDSTRIKE, -1, 6, 1.0); local group = sq_GetGroup(damager); local uniqueId = sq_GetUniqueId(damager); cearteSkillPassive_Battlemage_bykk(obj,damager,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,0,sq_GetZPos(damager),damager.getDirection(),SKILL_BYKK_HANDSTRIKE,1,totalDamage,group,uniqueId,0,0,0,0,0); local createMax = sq_GetIntData(obj, SKILL_BYKK_CHASER, 0); if(obj.getVar("kksChaser").get_obj_vector_size() < createMax) createBattlemageChaser(obj); } function checkExecutableSkill_Layofprimitive(obj) { if (!obj) return false; if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_LAYOFPRIMITIVE); 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(); if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_IntVectPush(1); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_BYKK_LAYOFPRIMITIVE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Layofprimitive(obj) { if (!obj) return false; return true; } function onSetState_Layofprimitive(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); switch(subState){ case 0://start obj.sq_SetCurrentAnimation(288); // sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/layofprimitive/layofprimitive_start_front_03.ani", 0, 1, 0); // sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/layofprimitive/layofprimitive_start_back_08.ani", 0, -1, 0); obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/layofprimitive/layofprimitive_start_front_03.ani"), 0, 0); obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/layofprimitive/layofprimitive_start_back_08.ani"), 0, 0); obj.sq_PlaySound("PRECENCIA_CHANGE_SHORT"); break; case 1://summon obj.sq_SetCurrentAnimation(289); sq_flashScreen(obj, 30, 1100, 180, 204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); obj.sq_PlaySound("PRECENCIA_LAYOFPRIMITIVE_1_CAST"); obj.sq_PlaySound("WZ_PRECENCIA_LAYOFPRIMITIVE_1_1"); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 63)); break; case 2://loop obj.sq_SetCurrentAnimation(287); // sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/layofprimitive/layofprimitive_loop_rune_00.ani", 175, 1, 75); obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/layofprimitive/layofprimitive_loop_rune_00.ani"), 175, -75); obj.sq_PlaySound("PRECENCIA_LAYOFPRIMITIVE_2_SPEAR"); obj.sq_PlaySound("R_WZ_PRECENCIA_LAYOFPRIMITIVE_1_2"); obj.getVar("Layofprimitive_chaser").setInt(10, 0); obj.getVar("Layofprimitive_chaser").setInt(11, 0); local size = obj.getVar("kksChaser").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local chaserObj = obj.getVar("kksChaser").get_obj_vector(i); if(!chaserObj) continue; local colObj = sq_GetCNRDObjectToCollisionObject(chaserObj); local totalDamage = colObj.getVar("custom").getInt(10); obj.getVar("Layofprimitive_chaser").setInt(10, obj.getVar("Layofprimitive_chaser").getInt(10) + 1); obj.getVar("Layofprimitive_chaser").setInt(11, obj.getVar("Layofprimitive_chaser").getInt(11) + totalDamage); colObj.setValid(false); } } break; case 3://end obj.sq_SetCurrentAnimation(286); obj.sq_PlaySound("PRECENCIA_LAYOFPRIMITIVE_3_SHOT"); obj.sq_PlaySound("R_WZ_PRECENCIA_LAYOFPRIMITIVE_2_1"); // sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/layofprimitive/layofprimitive_end_rune_06.ani", 175, 1, 75); obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/layofprimitive/layofprimitive_end_rune_06.ani"), 175, -75); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LAYOFPRIMITIVE, -1, 0, 1.0) + 100; totalDamage = totalDamage + obj.getVar("Layofprimitive_chaser").getInt(11); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 65)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 4://dis obj.sq_SetCurrentAnimation(285); // sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/layofprimitive/layofprimitive_dissolution_front_03.ani", 0, 1, 0); // sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/layofprimitive/layofprimitive_dissolution_back_08.ani", 0, -1, 0); obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/layofprimitive/layofprimitive_dissolution_back_08.ani"), 0, 0); obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/layofprimitive/layofprimitive_dissolution_front_03.ani"), 0, 0); obj.sq_PlaySound("PRECENCIA_CHANGE_END"); break; } local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo){ attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); sq_SetAddWeaponDamage(attackInfo, true); } 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 speedRate = 4000 / currentAni.getDelaySum(0, 0); switch(subState){ case 1: speedRate = 2900 / currentAni.getDelaySum(0, 0); break; case 2: speedRate = 5500 / currentAni.getDelaySum(0, 0); break; case 3: speedRate = 6000 / currentAni.getDelaySum(0, 0); break; case 4: speedRate = 4300 / currentAni.getDelaySum(0, 0); break; } print("speedRate = "+speedRate); if(speedRate > 200){ currentAni.setSpeedRate(200.0); } if(subState == 2){ local currentAni = obj.getCurrentAnimation(); obj.sq_SetXScrollStart(300, currentAni.getDelaySum(false)); } } function onEndCurrentAni_Layofprimitive(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: case 2: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_BYKK_LAYOFPRIMITIVE, STATE_PRIORITY_AUTO, true); break; case 3: if(obj.getVar("skillSub").getInt(100) != 2){ obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_BYKK_LAYOFPRIMITIVE, STATE_PRIORITY_AUTO, true); break; } case 4: obj.sq_SetXScrollStop(0); local chaserNum = obj.getVar("Layofprimitive_chaser").getInt(10); if(chaserNum > 0){ for(local i = 0; i < chaserNum; i++){ createBattlemageChaser(obj); } } obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Layofprimitive(obj) { if(!obj) return; } function onKeyFrameFlag_Layofprimitive(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1001: sq_flashScreen(obj, 50, 100, 100, 255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 1002: sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/layofprimitive/layofprimitive_summon_attack_15.ani", 0, 1, 0); break; case 1003: sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/layofprimitive/layofprimitive_summon_attack_16.ani", 0, 1, 0); break; case 1004: sq_SetMyShake(obj, 3, 100); break; case 1005: sq_flashScreen(obj, 30, 60, 120, 204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_flashScreen(obj, 30, 90, 30, 127, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 30, 200); break; } return true; } function onTimeEvent_Layofprimitive(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_Layofprimitive(obj, new_state) { if(!obj) return; } function checkExecutableSkill_PokeThrow(obj) { if (!obj) return false; if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_POKETHROW); 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("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); return true; } return false; } function checkCommandEnable_PokeThrow(obj) { if (!obj) return false; return true; } function onSetState_PokeThrow(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, "Pokethrowtry", false, false); obj.setCurrentAnimation(Ani); } else if(obj.getVar("skillSub").getInt(100) == 2){ obj.sq_SetCurrentAnimation(246); } else{ obj.sq_SetCurrentAnimation(6); } local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_POKETHROW); local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_POKETHROW, 0, skillLevel); local change = sq_GetLevelData(obj, SKILL_BYKK_POKETHROW, 5, skillLevel); if(change > 0) totalDamage = (obj.sq_GetBonusRateWithPassive(174, -1, 0, 1.0) + 200) * change / 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 8)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo){ attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); sq_SetAddWeaponDamage(attackInfo, true); } local speed = 2.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; case 1: if(obj.getVar("skillSub").getInt(100) == 1){ local Ani = getCurrentAnimation_precencia(obj, "Pokethrowsmash", false, false); obj.setCurrentAnimation(Ani); } else if(obj.getVar("skillSub").getInt(100) == 2){ obj.sq_SetCurrentAnimation(245); } else{ obj.sq_SetCurrentAnimation(7); } if(obj.getVar("dirBool").getBool(0) == false) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); local speed = 2.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(); local delay = pAni.getDelaySum(false) / 3; obj.setTimeEvent(0, delay, 1, false); obj.setTimeEvent(1, delay * 2, 1, false); local size = obj.getVar("pokethrowTar").get_obj_vector_size(); for(local i = 0; i < size; i++){ local targetObj = obj.getVar("pokethrowTar").get_obj_vector(i); if(targetObj){ local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/mage/battlemage_bykk/ap/ap_pokethrow.nut"); if(!addAppendage) continue; sq_MoveToAppendageForce(targetObj, obj, obj, 0, 0, 100, delay, true, addAppendage); } } break; case 2: if(obj.getVar("skillSub").getInt(100) == 1){ local Ani = getCurrentAnimation_precencia(obj, "Pokethrowsmashfront", false, false); obj.setCurrentAnimation(Ani); } else if(obj.getVar("skillSub").getInt(100) == 2){ obj.sq_SetCurrentAnimation(244); } else{ obj.sq_SetCurrentAnimation(272); } local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_POKETHROW); local speed = (1000 + sq_GetLevelData(obj, SKILL_BYKK_POKETHROW, 2, 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(); local delay = pAni.getDelaySum(false) / 3 * 2; obj.setTimeEvent(1, delay, 1, false); break; } } function onEndCurrentAni_PokeThrow(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(obj.getVar("pokethrowTar_fix").get_obj_vector_size() > 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(STATE_BYKK_POKETHROW, STATE_PRIORITY_AUTO, true); } else if(obj.getVar("pokethrowTar").get_obj_vector_size() > 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_POKETHROW, STATE_PRIORITY_AUTO, true); } else{ obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); } break; case 1: case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_PokeThrow(obj) { if(!obj) return; local subState = obj.getSkillSubState(); if(subState == 0){ if(obj.getVar("dirBool").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("dirBool").setBool(0, true); } } } function onKeyFrameFlag_PokeThrow(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_PokeThrow(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: local pAni = obj.getCurrentAnimation(); local delay = pAni.getDelaySum(false) / 3; local size = obj.getVar("pokethrowTar").get_obj_vector_size(); for(local i = 0; i < size; i++){ local targetObj = obj.getVar("pokethrowTar").get_obj_vector(i); if(targetObj){ local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/mage/battlemage_bykk/ap/ap_pokethrow.nut"); if(!addAppendage) continue; sq_MoveToAppendageForce(targetObj, obj, obj, 125, 0, 0, delay, true, addAppendage); } } break; case 1: local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_POKETHROW); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_POKETHROW, -1, 1, 1.0) + 100; local change = sq_GetLevelData(obj, SKILL_BYKK_POKETHROW, 5, skillLevel); if(change > 0) totalDamage = (obj.sq_GetBonusRateWithPassive(174, -1, 0, 1.0) + 200) * change / 100; local sizeRate = sq_GetLevelData(obj, SKILL_BYKK_POKETHROW, 3, skillLevel); if(sq_GetSkillLevel(obj, SKILL_BYKK_SPEARMASTERY) > 0 && obj.getWeaponSubType() == 0) sizeRate = sizeRate + sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 1); cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,125,0,0,obj.getDirection(),SKILL_BYKK_POKETHROW,1,totalDamage,sizeRate,0,0,0,0,0,0); break; case 2: local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_POKETHROW); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_POKETHROW, -1, 4, 1.0) + 100; local change = sq_GetLevelData(obj, SKILL_BYKK_POKETHROW, 5, skillLevel); if(change > 0) totalDamage = (obj.sq_GetBonusRateWithPassive(174, -1, 0, 1.0) + 200) * change / 100; local sizeRate = sq_GetLevelData(obj, SKILL_BYKK_POKETHROW, 3, skillLevel); if(sq_GetSkillLevel(obj, SKILL_BYKK_SPEARMASTERY) > 0 && obj.getWeaponSubType() == 0) sizeRate = sizeRate + sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 1); cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,125,0,0,obj.getDirection(),SKILL_BYKK_POKETHROW,1,totalDamage,sizeRate,0,0,0,0,0,0); break; } } function onEndState_PokeThrow(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_POKETHROW){ local size = obj.getVar("pokethrowTar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("pokethrowTar").get_obj_vector(i); if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/mage/battlemage_bykk/ap/ap_pokethrow.nut"); } } } } function onAttack_PokeThrow(obj, damager, boundingBox, isStuck) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ if(sq_IsHoldable(obj,damager) && !sq_IsFixture(damager) && sq_IsGrabable(obj,damager)){ if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/mage/battlemage_bykk/ap/ap_pokethrow.nut")){ if(!obj.getVar("pokethrowTar").is_obj_vector(damager)) obj.getVar("pokethrowTar").push_obj_vector(damager); local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/mage/battlemage_bykk/ap/ap_pokethrow.nut", true); sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, addAppendage); } } else{ if(!obj.getVar("pokethrowTar_fix").is_obj_vector(damager)) obj.getVar("pokethrowTar_fix").push_obj_vector(damager); } if(sq_getGrowType(obj) != 3) break; local createMax = sq_GetIntData(obj, SKILL_BYKK_CHASER, 0); if(obj.getVar("kksChaser").get_obj_vector_size() < createMax) createBattlemageChaser(obj); } break; } } function checkExecutableSkill_Precencia(obj) { if (!obj) return false; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut") || CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PRECENCIA); if (isUse){ local subState = 0; local skill = sq_GetSkill(obj, SKILL_BYKK_PRECENCIA); if(!skill.isSealFunction()) subState = 2; obj.sq_IntVectClear(); obj.sq_IntVectPush(subState); obj.sq_AddSetStatePacket(SKILL_BYKK_PRECENCIA, STATE_PRIORITY_IGNORE_FORCE, true); obj.startSkillCoolTime(SKILL_BYKK_PRECENCIA, sq_GetSkillLevel(obj, SKILL_BYKK_PRECENCIA), -1); return true; } return false; } function checkCommandEnable_Precencia(obj) { if (!obj) return false; return true; } function onSetState_Precencia(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(93); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut")){ CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut"); } changeBattlemageChaser(obj, 2); break; case 2://三覺化身 obj.sq_SetCurrentAnimation(210); obj.sq_PlaySound("PRECENCIA_CHANGE_SHORT"); obj.sq_PlaySound("R_WZ_PRECENCIA_CHANGE"); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut")){ CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut"); } changeBattlemageChaser(obj, 3); obj.setObjectHeight(10); sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/avatar/precencia/realease/avatar_release_back_08.ani", 0, -1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/avatar/precencia/realease/avatar_release_front_03.ani", 0, 1, 0); break; case 1://解除化身 local sub = obj.sq_GetVectorData(datas, 1); switch(sub){ case 0://二覺 local Ani = getCurrentAnimation_precencia(obj, "avatarend_body", false, false); obj.setCurrentAnimation(Ani); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/avatar/avatarend_eff_00.ani", 0, 1, 0); sq_flashScreen(obj,700,100,300,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut"); } break; case 1://三覺主動解除 obj.sq_SetCurrentAnimation(209); sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/avatar/precencia/realease/avatar_finish_return_back_08.ani", 0, 1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/avatar/precencia/realease/avatar_finish_return_front_03.ani", 0, 1, 0); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut"); } break; } changeBattlemageChaser(obj, 0); break; case 10: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ obj.sq_SetCurrentAnimation(206); // for(local i = 0; i < 20000; i++){ // obj.stopSound(i); // } obj.sq_PlaySound("R_WZ_PRECENCIA_ATK_1"); } else{ if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ local Ani = getCurrentAnimation_precencia(obj, "battlemageattack1", false, false); obj.setCurrentAnimation(Ani); } else{ obj.sq_SetCurrentAnimation(9); } } obj.getVar("attackBool").setBool(10, false); obj.getVar("attackBool").setBool(12, false); break; case 11: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ obj.sq_SetCurrentAnimation(207); obj.sq_PlaySound("R_WZ_PRECENCIA_ATK_2"); } else{ if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ local Ani = getCurrentAnimation_precencia(obj, "battlemageattack2", false, false); obj.setCurrentAnimation(Ani); } else{ obj.sq_SetCurrentAnimation(10); } obj.sq_PlaySound("R_WZ_ATK"); } obj.getVar("attackBool").setBool(10, false); obj.getVar("attackBool").setBool(13, false); break; case 12: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ obj.sq_SetCurrentAnimation(208); obj.sq_PlaySound("R_WZ_PRECENCIA_ATK_3"); } else{ if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ local Ani = getCurrentAnimation_precencia(obj, "battlemageattack3", false, false); obj.setCurrentAnimation(Ani); } else{ obj.sq_SetCurrentAnimation(11); } obj.sq_PlaySound("R_WZ_ATK"); } break; case 20: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ obj.sq_SetCurrentAnimation(218); } else{ if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ local Ani = getCurrentAnimation_precencia(obj, "Buff", false, false); obj.setCurrentAnimation(Ani); } else{ local Ani = obj.sq_GetThrowChargeAni(3); obj.setCurrentAnimation(Ani); } } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); local castTime = currentAni.getDelaySum(false); sq_StartDrawCastGauge(obj, castTime, true); break; case 21: local Ani = obj.sq_GetThrowShootAni(3); obj.setCurrentAnimation(Ani); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); break; } if(subState >= 10 && subState <= 12){ local speed = 1.3; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) speed = 2.5; obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed); local atkIndex = [53,54,55]; local totalDamage = sq_GetLevelData(obj, 174, 0, sq_GetSkillLevel(obj, 174)) + 100; if(sq_GetSkillLevel(obj, SKILL_BYKK_ENABLEFINISHATTACK) > 0) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_BYKK_ENABLEFINISHATTACK, 2, sq_GetSkillLevel(obj, SKILL_BYKK_ENABLEFINISHATTACK))) / 1000; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex[subState - 10])); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo){ attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); sq_SetAddWeaponDamage(attackInfo, true); } } } function onEndCurrentAni_Precencia(obj) { if(!obj) return; //if(!obj.sq_IsMyControlObject()) return; local substate = obj.getSkillSubState(); switch(substate){ case 0: obj.sq_PlaySound("AVATAR_AURA_LOOP", 2333); local apdPath = "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut"; local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_PRECENCIA, false, apdPath, true); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_PRECENCIA); local buffTime = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 0, skillLevel); addAppendage.sq_SetValidTime(buffTime); addAppendage.setEnableIsBuff(true); addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_PRECENCIA, skillLevel); CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); local hpMax = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 1, skillLevel); local allDefense = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 2, skillLevel); local attackspeedRate = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 3, skillLevel); local movespeedRate = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 4, skillLevel); local allactTolerance = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 5, skillLevel); local change_appendage = addAppendage.sq_getChangeStatus("precencia"); if(!change_appendage) change_appendage = addAppendage.sq_AddChangeStatus("precencia",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_HP_MAX, false, (hpMax).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, false, (allDefense).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, false, (allDefense).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackspeedRate).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (movespeedRate).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_ACTIVESTATUS_TOLERANCE_ALL, false, (allactTolerance).tofloat()); } obj.sq_SetSuperArmorUntilTime(obj, buffTime); if(sq_GetIntData(obj, SKILL_BYKK_PRECENCIA, 15) > 0) addAppendage.getVar("setFail").setBool(0, true); local spectrumAppendage = addAppendage.sq_GetOcularSpectrum("ocularSpectrum");//得到殘影 if(!spectrumAppendage) spectrumAppendage = addAppendage.sq_AddOcularSpectrum("ocularSpectrum", obj, obj, 100);//設置殘影 sq_SetParameterOcularSpectrum(spectrumAppendage, 300, 75, true, sq_RGBA(255, 244, 77, 75), sq_RGBA(255, 244, 77, 0), 2, 2, 2);//設置效果 local goddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/mage/battlemage_bykk/ap/ap_goddnessofwar.nut"); if(goddAppendage) goddAppendage.getVar().setBool(100, true); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); break; case 2: obj.sq_PlaySound("AVATAR_AURA_LOOP", 2333); local apdPath = "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut"; local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_PRECENCIA, false, apdPath, true); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_PRECENCIA); local buffTime = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 0, skillLevel); addAppendage.sq_SetValidTime(buffTime); addAppendage.setEnableIsBuff(true); addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_PRECENCIA, skillLevel); CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); local hpMax = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 1, skillLevel); local allDefense = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 2, skillLevel); local attackspeedRate = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 3, skillLevel); local movespeedRate = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 4, skillLevel); local allactTolerance = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 5, skillLevel); local change_appendage = addAppendage.sq_getChangeStatus("precencia"); if(!change_appendage) change_appendage = addAppendage.sq_AddChangeStatus("precencia",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_HP_MAX, false, (hpMax).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, false, (allDefense).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, false, (allDefense).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackspeedRate).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (movespeedRate).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_ACTIVESTATUS_TOLERANCE_ALL, false, (allactTolerance).tofloat()); } obj.sq_SetSuperArmorUntilTime(obj, buffTime); if(sq_GetIntData(obj, SKILL_BYKK_PRECENCIA, 15) > 0) addAppendage.getVar("setFail").setBool(0, true); local spectrumAppendage = addAppendage.sq_GetOcularSpectrum("ocularSpectrum");//得到殘影 if(!spectrumAppendage) spectrumAppendage = addAppendage.sq_AddOcularSpectrum("ocularSpectrum", obj, obj, 100);//設置殘影 sq_SetParameterOcularSpectrum(spectrumAppendage, 300, 75, true, sq_RGBA(255, 244, 77, 75), sq_RGBA(255, 244, 77, 0), 2, 2, 2);//設置效果 local goddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/mage/battlemage_bykk/ap/ap_goddnessofwar.nut"); if(goddAppendage) goddAppendage.getVar().setBool(100, true); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); break; case 1: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut"); } if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut"); } case 10: case 11: case 12: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); break; case 20: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut") || CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ local apdPath = "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut"; local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_PRECENCIA, false, apdPath, true); local skillLevel = sq_GetSkillLevel(obj, 2); local buffTime = sq_GetLevelData(obj, 2, 0, 2); addAppendage.sq_SetValidTime(buffTime); addAppendage.setEnableIsBuff(true); addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), 2, skillLevel); CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); } else{ obj.sq_IntVectClear(); obj.sq_IntVectPush(21); obj.sq_AddSetStatePacket(SKILL_BYKK_PRECENCIA, STATE_PRIORITY_USER, true); } break; case 21: local apdPath = "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut"; local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_PRECENCIA, false, apdPath, true); local skillLevel = sq_GetSkillLevel(obj, 2); local buffTime = sq_GetLevelData(obj, 2, 0, 2); addAppendage.sq_SetValidTime(buffTime); addAppendage.setEnableIsBuff(true); addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), 2, skillLevel); CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); break; } } function onProcCon_Precencia(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 10: case 11: if(obj.getVar("attackBool").getBool(subState) == false){ sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.getVar("attackBool").setBool(subState, true); } if(obj.getVar("attackBool").getBool(subState)){ local pAni = obj.getCurrentAnimation(); local delaySum = pAni.getDelaySum(false); local currentT = sq_GetCurrentTime(pAni); if(currentT >= delaySum * 90 / 100){ obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_BYKK_PRECENCIA, STATE_PRIORITY_USER, true); } } case 12: 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); break; } local speedRate = [0,300,30]; if((obj.getVar("attackBool").getBool(12) && subState >= 10) || (obj.getVar("attackBool").getBool(13) && subState >= 11)) break; 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)){ if(obj.getVar("attackBool").getBool(12) == false) obj.getVar("attackBool").setBool(12, true); if(obj.getVar("attackBool").getBool(13) == false) obj.getVar("attackBool").setBool(13, true); } else if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT)) speedRate = [0, 500, 80]; if(obj.getDirection() == ENUM_DIRECTION_RIGHT && speedRate[subState - 10] > 0) sq_SetVelocity(obj, 0, speedRate[subState - 10].tofloat()); else if(obj.getDirection() == ENUM_DIRECTION_LEFT && speedRate[subState - 10] > 0) sq_SetVelocity(obj, 0, -speedRate[subState - 10].tofloat()); break; } } function onKeyFrameFlag_Precencia(obj, flagIndex) { if(!obj) return false; local subState = obj.getSkillSubState(); switch(subState){ case 0: sq_flashScreen(obj, 100, 0, 50, 178, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 5, 100); break; case 1: switch(flagIndex){ case 111: obj.sq_PlaySound("PRCENCIA_AVATAR_CAST"); break; case 201: obj.sq_PlaySound("AVATAR_FINISH_CAST"); break; case 202: sq_flashScreen(obj, 0, 80, 80, 255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 203: obj.sq_PlaySound("WZ_AVATAR_FINISH"); obj.sq_PlaySound("AVATAR_FINISH"); sq_flashScreen(obj, 80, 0, 166, 255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); sq_SetMyShake(obj, 5, 240); break; case 301: sq_flashScreen(obj, 0, 80, 80, 255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); obj.sq_PlaySound("AVATAR_FINISH_CAST"); break; case 302: sq_flashScreen(obj, 60, 60, 420, 204, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); sq_SetMyShake(obj, 8, 160); obj.sq_PlaySound("AVATAR_FINISH"); break; case 303: obj.sq_PlaySound("AVATAR_FINISH"); break; } break; case 2: switch(flagIndex){ case 101: sq_flashScreen(obj, 150, 0, 0, 76, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; } break; case 10: obj.sq_PlaySound("R_PRECENCIA_WEAPONSWING"); break; case 11: obj.sq_PlaySound("PRECENCIA_WEAPONSWING"); break; case 12: obj.sq_PlaySound("PRECENCIA_WEAPONSWING"); break; } return true;// } function onTimeEvent_Precencia(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/avatar/precencia/avatar_inishxx1_26.ani", 0, 1, 0); break; } } function onEndState_Precencia(obj, new_state) { if(!obj) return; if(new_state != SKILL_BYKK_PRECENCIA){ sq_EndDrawCastGauge(obj); } } function onAttack_Precencia(obj, damager, boundingBox, isStuck) { if(!obj) return; if(isStuck) return; if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; if(obj.getSkillSubState() != 12) return; local createMax = sq_GetIntData(obj, SKILL_BYKK_CHASER, 0); if(obj.getVar("kksChaser").get_obj_vector_size() < createMax) createBattlemageChaser(obj); } function checkExecutableSkill_Quasarexplosion(obj) { if (!obj) return false; if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_QUASAREXPLOSION); 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(SKILL_BYKK_QUASAREXPLOSION, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Quasarexplosion(obj) { if (!obj) return false; return true; } function onSetState_Quasarexplosion(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: if(obj.getVar("skillSub").getInt(100) == 0){ obj.sq_SetCurrentAnimation(290); obj.sq_PlaySound("WZ_QUASAR_EXPLOSION_READY"); } else if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_SetCurrentAnimation(292); else if(obj.getVar("skillSub").getInt(100) == 1){ local Ani = getCurrentAnimation_precencia(obj, "QuasarExplosionPrecencia_Start_Normal", false, false); obj.setCurrentAnimation(Ani); } obj.sq_PlaySound("PRECENCIA_QUASAR_1_CAST"); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); break; case 1: obj.sq_SetCurrentAnimation(294); 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(0, 0); local speedRate = 6000 / delay; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_QUASAREXPLOSION, -1, 0, 1.0) + 100; if(obj.getWeaponSubType() == 1 && sq_GetSkillLevel(obj, SKILL_BYKK_POLEMASTERY) > 0) totalDamage = totalDamage * (1000 + sq_GetIntData(obj, SKILL_BYKK_POLEMASTERY, 4)) / 1000; cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,0,0,obj.getDirection(),SKILL_BYKK_QUASAREXPLOSION,1,totalDamage,speedRate,0,0,0,0,0,0); obj.sq_PlaySound("WZ_PRECENCIA_QUASAR_1_01"); obj.setTimeEvent(0, 500 / speedRate, 1, false); break; case 2: if(obj.getVar("skillSub").getInt(100) == 0){ obj.sq_SetCurrentAnimation(291); } else if(obj.getVar("skillSub").getInt(100) == 2){ obj.sq_SetCurrentAnimation(293); } else if(obj.getVar("skillSub").getInt(100) == 1){ local Ani = getCurrentAnimation_precencia(obj, "QuasarExplosionPrecencia_Normal_End", false, false); obj.setCurrentAnimation(Ani); } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(obj.getVar("skillSub").getInt(100) < 2){ local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(0, 0); local speedRate = 6100 / delay; local aniPath = ["character/mage/effect/animation/battlemage_bykk/quasarexplosion/precencia/quasarexplosion_normal_end_00.ani","character/mage/effect/animation/battlemage_bykk/quasarexplosion/precencia/quasarexplosion_normal_end_01.ani","character/mage/effect/animation/battlemage_bykk/quasarexplosion/precencia/quasarexplosion_normal_end_02.ani","character/mage/effect/animation/battlemage_bykk/quasarexplosion/precencia/quasarexplosion_normal_end_03.ani"]; for(local i = 0; i < aniPath.len(); i++){ local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath[i], 0, 1, 0); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); } } break; } } function onEndCurrentAni_Quasarexplosion(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_BYKK_QUASAREXPLOSION, STATE_PRIORITY_AUTO, true); break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Quasarexplosion(obj) { if(!obj) return; } function onKeyFrameFlag_Quasarexplosion(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 101: sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/quasarexplosion/precencia/quasarexplosion_start_normal_02.ani", 0, 1, 0); break; case 102: sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/quasarexplosion/precencia/quasarexplosion_start_normal_03.ani", 0, 1, 0); break; } return true; } function onTimeEvent_Quasarexplosion(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: switch(obj.getVar("skillSub").getInt(100)){ case 0: obj.sq_PlaySound("WZ_QUASAR_EXPLOSION_FIN"); break; case 2: obj.sq_PlaySound("WZ_PRECENCIA_QUASAR_2_01"); break; } break; } } function onEndState_Quasarexplosion(obj, new_state) { if(!obj) return; } function checkExecutableSkill_RandomPierceStrike(obj) { if (!obj) return false; if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_RANDOMPIERCESTRIKE); 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(SKILL_BYKK_RANDOMPIERCESTRIKE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_RandomPierceStrike(obj) { if (!obj) return false; return true; } function onSetState_RandomPierceStrike(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(249); } else{ if(obj.getVar("skillSub").getInt(100) == 1){ local Ani = getCurrentAnimation_precencia(obj, "RandomPierceStrikeTry", false, false); obj.setCurrentAnimation(Ani); } else{ obj.sq_SetCurrentAnimation(12); } obj.sq_PlaySound("WZ_THUNDER_01", 2333); } local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKE); local hitMax = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKE, 6, skillLevel); obj.getVar("rdps").setInt(10, hitMax); obj.getVar("rdps").setInt(11, 0); local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKE, 0, skillLevel); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 12)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 1: if(obj.getVar("skillSub").getInt(100) == 2){ obj.sq_SetCurrentAnimation(248); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKE); local hitTime = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKE, 9, skillLevel); obj.setTimeEvent(0, hitTime, -1, false); } else{ if(obj.getVar("skillSub").getInt(100) == 1){ local Ani = getCurrentAnimation_precencia(obj, "RandomPierceStrikeLoop", false, false); obj.setCurrentAnimation(Ani); } else{ obj.sq_SetCurrentAnimation(13); } obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/randompiercestrike/hit.ani"), 200, -40); } break; case 2: obj.removeAllTimeEvent(); if(obj.getVar("skillSub").getInt(100) == 2){ obj.sq_SetCurrentAnimation(247); obj.sq_PlaySound("PRECENCIA_PIERCESTRIKE_2_FINISH"); obj.sq_PlaySound("R_WZ_PRECENCIA_PIERCESTRIKE_2"); } else{ if(obj.getVar("skillSub").getInt(100) == 1){ local Ani = getCurrentAnimation_precencia(obj, "RandomPierceStrikeFinish", false, false); obj.setCurrentAnimation(Ani); } else{ obj.sq_SetCurrentAnimation(14); } obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/randompiercestrike/swing.ani"), 0, 0); obj.stopSound(2333); obj.sq_PlaySound("WZ_THUNDER_02"); obj.setTimeEvent(1, 100, 1, false); } local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKE); local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKE, 2, skillLevel); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 13)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; } local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo){ attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); sq_SetAddWeaponDamage(attackInfo, true); } local speed = 1.35; 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); } function onEndCurrentAni_RandomPierceStrike(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_BYKK_RANDOMPIERCESTRIKE, STATE_PRIORITY_AUTO, true); break; case 1: obj.resetHitObjectList(); obj.sq_IntVectClear(); if(obj.getVar("rdps").getInt(11) >= obj.getVar("rdps").getInt(10) - 1 || sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKE, 11, sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKE)) > 0) obj.sq_IntVectPush(2); else{ obj.sq_IntVectPush(1); obj.getVar("rdps").setInt(11, obj.getVar("rdps").getInt(11) + 1); } obj.sq_AddSetStatePacket(SKILL_BYKK_RANDOMPIERCESTRIKE, STATE_PRIORITY_AUTO, true); break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_RandomPierceStrike(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: // sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true); // sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); if(sq_IsKeyDown(OPTION_HOTKEY_SKILL, ENUM_SUBKEY_TYPE_ALL)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_BYKK_RANDOMPIERCESTRIKE, STATE_PRIORITY_AUTO, true); } if(sq_IsKeyDown(OPTION_HOTKEY_JUMP, ENUM_SUBKEY_TYPE_ALL)){ obj.stopSound(2333); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); } break; } } function onKeyFrameFlag_RandomPierceStrike(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1001: sq_SetMyShake(obj, 8, 80); break; } return true; } function onTimeEvent_RandomPierceStrike(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: if(timeEventCount >= obj.getVar("rdps").getInt(10) - 1){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_BYKK_RANDOMPIERCESTRIKE, STATE_PRIORITY_AUTO, true); } else obj.resetHitObjectList(); break; case 1: sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/randompiercestrike/dust.ani", 0, 0, 0); break; } } function onEndState_RandomPierceStrike(obj, new_state) { if(!obj) return; } function checkExecutableSkill_RandomPierceStrikeEx(obj) { if (!obj) return false; if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_RANDOMPIERCESTRIKEEX); 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); 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); return true; } return false; } function checkCommandEnable_RandomPierceStrikeEx(obj) { if (!obj) return false; return true; } function onSetState_RandomPierceStrikeEx(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, "RandomPierceStrikeTry", false, false); obj.setCurrentAnimation(Ani); } else obj.sq_SetCurrentAnimation(12); obj.sq_PlaySound("WZ_THUNDER_01", 2333); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX); local hitMax = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 7, skillLevel); obj.getVar("rdpsex").setInt(10, hitMax); obj.getVar("rdpsex").setInt(11, 0); local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 3, skillLevel); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 29)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 1: if(obj.getVar("skillSub").getInt(100) == 1){ local Ani = getCurrentAnimation_precencia(obj, "RandomPierceStrikeLoopEx", false, false); obj.setCurrentAnimation(Ani); } else obj.sq_SetCurrentAnimation(56); obj.setTimeEvent(2, 100, -1, false); break; case 2: if(obj.isExistTimeEvent(2)) obj.stopTimeEvent(2); if(obj.getVar("skillSub").getInt(100) == 1){ local Ani = getCurrentAnimation_precencia(obj, "RandomPierceStrikeChargeEx", false, false); obj.setCurrentAnimation(Ani); } else obj.sq_SetCurrentAnimation(57); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/charge_dodge.ani"), 0, 0); obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/charge_light_dodge.ani"), 0, 0); break; case 3: if(obj.isExistTimeEvent(2)) obj.stopTimeEvent(2); if(obj.getVar("skillSub").getInt(100) == 1){ local Ani = getCurrentAnimation_precencia(obj, "RandomPierceStrikeFinishEx", false, false); obj.setCurrentAnimation(Ani); } else obj.sq_SetCurrentAnimation(58); obj.removeAllTimeEvent(); obj.stopSound(2333); obj.sq_PlaySound("WZ_THUNDER_02"); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX); local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 5, skillLevel); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 30)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/bluelight_dodge1.ani"), 180, -40); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/bluelight_dodge2.ani"), 180, -40); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/end_dodge.ani"), 180, -40); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/glow_dodge.ani"), 180, -40); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/redlight_dodge.ani"), 180, -40); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/shadow_dodge.ani"), 180, -40); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/shadow_normal.ani"), 180, -40); break; case 10: obj.sq_SetCurrentAnimation(251); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX); local hitMax = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 7, skillLevel); obj.getVar("rdpsex").setInt(10, hitMax); obj.getVar("rdpsex").setInt(11, 0); local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 3, skillLevel); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 29)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local hitTime = sq_GetIntData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 8); obj.setTimeEvent(1, hitTime, -1, false); break; case 11: obj.sq_SetCurrentAnimation(252); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/precencia/sinrairenloop_10.ani"), 0, 0); break; case 12: obj.sq_SetCurrentAnimation(253); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/precencia/sinrairenloop_10.ani"), 0, 0); break; case 13: obj.sq_SetCurrentAnimation(254); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/precencia/sinrairenloop_10.ani"), 0, 0); break; case 14: obj.removeAllTimeEvent(); obj.sq_SetCurrentAnimation(250); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX); local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 5, skillLevel); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 30)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; } local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo){ attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); sq_SetAddWeaponDamage(attackInfo, true); } local speed = 1.35; 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(subState == 1){ local currentAni = obj.getCurrentAnimation(); obj.setTimeEvent(1, currentAni.getDelaySum(false), -1, false); local speedRate = 4000.0 / currentAni.getDelaySum(0, 0); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/randompiercestrikeex/pierce_dodge.ani", 200, 1, 40); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate); } } function onEndCurrentAni_RandomPierceStrikeEx(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMPIERCESTRIKEEX, STATE_PRIORITY_AUTO, true); break; case 1: obj.resetHitObjectList(); obj.sq_IntVectClear(); if(obj.getVar("rdpsex").getInt(11) >= obj.getVar("rdpsex").getInt(10) - 1 || sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 14, sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX)) > 0) obj.sq_IntVectPush(2); else{ obj.sq_IntVectPush(1); obj.getVar("rdpsex").setInt(11, obj.getVar("rdpsex").getInt(11) + 1); } obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMPIERCESTRIKEEX, STATE_PRIORITY_AUTO, true); break; case 2: obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMPIERCESTRIKEEX, STATE_PRIORITY_AUTO, true); break; case 3: case 14: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; case 10: obj.sq_IntVectClear(); obj.sq_IntVectPush(11); obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMPIERCESTRIKEEX, STATE_PRIORITY_AUTO, true); break; case 11: case 12: case 13: local pushstate = subState + 1; if(subState == 13) pushstate = 11; obj.sq_IntVectClear(); obj.sq_IntVectPush(pushstate); obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMPIERCESTRIKEEX, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_RandomPierceStrikeEx(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: case 10: case 11: case 12: case 13: if(sq_IsKeyDown(OPTION_HOTKEY_SKILL, ENUM_SUBKEY_TYPE_ALL)){ obj.sq_IntVectClear(); if(subState < 10) obj.sq_IntVectPush(2); else obj.sq_IntVectPush(14); obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMPIERCESTRIKEEX, STATE_PRIORITY_AUTO, true); } if(sq_IsKeyDown(OPTION_HOTKEY_JUMP, ENUM_SUBKEY_TYPE_ALL)){ obj.stopSound(2333); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); } break; } } function onKeyFrameFlag_RandomPierceStrikeEx(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1001: print("test"); sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/randompiercestrikeex/precencia/randompiercestrikeex_finish_02.ani", 0, 1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/randompiercestrikeex/precencia/randompiercestrikeex_finish_01.ani", 0, 1, 0); sq_SetMyShake(obj, 20, 150); break; case 1002: obj.sq_PlaySound("R_WZ_PRECENCIA_PIERCESTRIKE_EX_2"); obj.sq_PlaySound("PRECENCIA_PIERCESTRIKE_EX_2_FINISH"); break; } return true; } function onTimeEvent_RandomPierceStrikeEx(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: if(timeEventCount >= obj.getVar("rdpsex").getInt(10) - 1){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMPIERCESTRIKEEX, STATE_PRIORITY_AUTO, true); } else obj.resetHitObjectList(); break; case 1: if(timeEventCount >= obj.getVar("rdpsex").getInt(10) - 1){ obj.sq_IntVectClear(); obj.sq_IntVectPush(14); obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMPIERCESTRIKEEX, STATE_PRIORITY_AUTO, true); } else obj.resetHitObjectList(); break; case 2: obj.sq_PlaySound("R_P_THUNDER_ATK"); break; } } function onEndState_RandomPierceStrikeEx(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_RANDOMPIERCESTRIKEEX){ local size = obj.getVar("RandomPierceStrikeEx_tar").get_obj_vector_size(); if(size > 0){ local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX); local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 5, skillLevel) * 19 / 100; for(local i = 0; i < size; i++){ local targetObj = obj.getVar("RandomPierceStrikeEx_tar").get_obj_vector(i); if(targetObj){ local group = sq_GetGroup(targetObj); local uniqueId = sq_GetUniqueId(targetObj); cearteSkillPassive_Battlemage_bykk(obj,targetObj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,0,0,obj.getDirection(),SKILL_BYKK_RANDOMPIERCESTRIKEEX,1,totalDamage,group,uniqueId,0,0,0,0,0); local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/mage/battlemage_bykk/ap/ap_randompiercestrikeex.nut"); addAppendage.sq_SetValidTime(1000); } } } } } function onAttack_RandomPierceStrikeEx(obj, damager, boundingBox, isStuck) { if(!obj) return; if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; if(RANDOMPIERCESTRIKEEX_STONE < 1 && sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 8, sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX)) < 1) return; if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/mage/battlemage_bykk/ap/ap_randompiercestrikeex.nut")) return; local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/mage/battlemage_bykk/ap/ap_randompiercestrikeex.nut", true); sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); if(!obj.getVar("RandomPierceStrikeEx_tar").is_obj_vector(damager)) obj.getVar("RandomPierceStrikeEx_tar").push_obj_vector(damager); } function checkExecutableSkill_Returntobm(obj) { if (!obj) return false; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){ CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut"); obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_BYKK_PRECENCIA, STATE_PRIORITY_USER, true); } else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){ CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut"); // obj.sq_SendCreatePassiveObjectPacket(1008605, 0, 0, 1, 200); obj.setObjectHeight(-1); obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_BYKK_PRECENCIA, STATE_PRIORITY_USER, true); } return true; } function checkCommandEnable_Returntobm(obj) { if (!obj) return false; return true; } function onSetState_Returntobm(obj, state, datas, isResetTimer) { if(!obj) return; } function onEndCurrentAni_Returntobm(obj) { if(!obj) return; } function onProcCon_Returntobm(obj) { if(!obj) return; } function onKeyFrameFlag_Returntobm(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_Returntobm(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_Returntobm(obj, new_state) { if(!obj) return; } function checkExecutableSkill_StrengthHandStrike(obj) { if (!obj) return false; if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_STRENGTHHANDSTRIKE); 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_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); } return true; } return false; } function checkCommandEnable_StrengthHandStrike(obj) { if (!obj) return false; return true; } function onSetState_StrengthHandStrike(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, "StrengthHandStrike", false, false); obj.setCurrentAnimation(Ani); } else obj.sq_SetCurrentAnimation(15); obj.sq_PlaySound("WZ_RAIDP_01", 2332); obj.sq_PlaySound("RAIDP_CHARGE_LOOP", 2333); cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,1,0,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,1,0,0,0,0,0,0,0,0); cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,-1,0,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,2,0,0,0,0,0,0,0,0); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STRENGTHHANDSTRIKE, -1, 1, 1.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 14)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo){ attackInfo.setAttackType(ATTACKTYPE_PHYSICAL); sq_SetAddWeaponDamage(attackInfo, true); } break; case 1: if(obj.getVar("skillSub").getInt(100) == 1){ local Ani = getCurrentAnimation_precencia(obj, "StrengthHandStrikeReturn", false, false); obj.setCurrentAnimation(Ani); } else obj.sq_SetCurrentAnimation(16); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(false); obj.setTimeEvent(2, delay / 21, 6, true); sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/strengthhandstrike/end_body_fade.ani", 0, 0, 0); break; case 10: obj.sq_SetCurrentAnimation(261); cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,1,0,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,11,0,0,0,0,0,0,0,0); cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,-1,0,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,12,0,0,0,0,0,0,0,0); obj.sq_PlaySound("R_WZ_PRECENCIA_STRENGTHHANDSTRIKE_1", 2332); obj.sq_PlaySound("RAIDP_CHARGE_LOOP", 2333); break; case 11: obj.sq_SetCurrentAnimation(258); break; case 12: obj.sq_SetCurrentAnimation(259); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(false); obj.setTimeEvent(2, delay / 21, 6, true); break; case 21: if(obj.getVar("skillSub").getInt(100) == 2){ obj.sq_SetCurrentAnimation(262); obj.sq_PlaySound("R_WZ_PRECENCIA_STRENGTHHANDSTRIKE_1", 2332); obj.sq_PlaySound("RAIDP_CHARGE_LOOP", 2333); } else{ if(obj.getVar("skillSub").getInt(100) == 1){ local Ani = getCurrentAnimation_precencia(obj, "StrengthHandStrikeShootCharge", false, false); obj.setCurrentAnimation(Ani); } else obj.sq_SetCurrentAnimation(277); obj.sq_PlaySound("WZ_RAIDP_01", 2332); obj.sq_PlaySound("RAIDP_CHARGE_LOOP", 2333); cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,1,0,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,1,0,0,0,0,0,0,0,0); cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,-1,0,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,2,0,0,0,0,0,0,0,0); } break; case 22: if(obj.getVar("skillSub").getInt(100) == 2){ obj.sq_SetCurrentAnimation(260); obj.stopSound(2332); obj.stopSound(2333); obj.sq_PlaySound("WZ_PRECENCIA_STRENGTHHANDSTRIKE_2"); } else{ if(obj.getVar("skillSub").getInt(100) == 1){ local Ani = getCurrentAnimation_precencia(obj, "StrengthHandStrikeShoot", false, false); obj.setCurrentAnimation(Ani); } else obj.sq_SetCurrentAnimation(276); obj.stopSound(2332); obj.stopSound(2333); obj.sq_PlaySound("WZ_RAIDP_02"); local size = obj.getVar("kksshs").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local shsObj = obj.getVar("kksshs").get_obj_vector(i); if(shsObj){ local colObj = sq_GetCNRDObjectToCollisionObject(shsObj); colObj.setValid(false); } } } } break; } if(subState < 10){ local speedRate = 1.0; if(obj.getVar("skillSub").getInt(100) == 1) speedRate = 1.3; obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); } } function onEndCurrentAni_StrengthHandStrike(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 10: case 11: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_BYKK_STRENGTHHANDSTRIKE, STATE_PRIORITY_AUTO, true); break; case 1: case 12: case 22: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_StrengthHandStrike(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 10: case 21: local bDownKey = obj.isDownSkillLastKey(); if(!bDownKey){ if(subState == 0 || subState == 10){ local frameIndex = sq_GetCurrentFrameIndex(obj); if((frameIndex == 7 && subState == 0) || (frameIndex == 2 && subState == 10)){ local currentAni = obj.getCurrentAnimation(); local setFrame = 8; if(subState == 10) setFrame = 3; currentAni.setCurrentFrameWithChildLayer(setFrame); local size = obj.getVar("kksshs").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local shsObj = obj.getVar("kksshs").get_obj_vector(i); if(shsObj){ local colObj = sq_GetCNRDObjectToCollisionObject(shsObj); colObj.setValid(false); } } } local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(setFrame, setFrame); obj.getVar("shs_move").setInt(10, sq_GetXPos(obj)); obj.getVar("shs_move").setInt(11, 400); obj.setTimeEvent(0, delay, 1, false); obj.stopSound(2332); obj.stopSound(2333); if(subState == 0){ obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/strengthhandstrike/attack_short.ani"), 0, 0); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/strengthhandstrike/attack_long.ani"), 0, 0); obj.sq_PlaySound("WZ_RAIDP_02"); sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/strengthhandstrike/start_body_fade.ani", 0, 0, 0); local attackInfo = sq_GetCurrentAttackInfo(obj); local upForce = sq_GetLevelData(obj, SKILL_BYKK_STRENGTHHANDSTRIKE, 2, sq_GetSkillLevel(obj, SKILL_BYKK_STRENGTHHANDSTRIKE)); if(obj.getVar("shsBool").getBool(0)) upForce = sq_GetLevelData(obj, SKILL_BYKK_UPPERSWING, 3, sq_GetSkillLevel(obj, SKILL_BYKK_STRENGTHHANDSTRIKE)); sq_SetCurrentAttacknUpForce(attackInfo, upForce); } else{ obj.sq_PlaySound("WZ_PRECENCIA_STRENGTHHANDSTRIKE_2"); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STRENGTHHANDSTRIKE, -1, 1, 1.0) + 100; local upForce = sq_GetLevelData(obj, SKILL_BYKK_STRENGTHHANDSTRIKE, 2, sq_GetSkillLevel(obj, SKILL_BYKK_STRENGTHHANDSTRIKE)); if(obj.getVar("shsBool").getBool(0)) upForce = sq_GetLevelData(obj, SKILL_BYKK_UPPERSWING, 3, sq_GetSkillLevel(obj, SKILL_BYKK_STRENGTHHANDSTRIKE)); cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,170,1,120,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,20,totalDamage,upForce,0,0,0,0,0,0); } } } else{ obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_BYKK_STRENGTHHANDSTRIKE, STATE_PRIORITY_AUTO, true); } } else{ local stateTime = obj.sq_GetStateTimer(); local fullchargeTime = sq_GetIntData(obj, SKILL_BYKK_STRENGTHHANDSTRIKE, 2); if(sq_GetSkillLevel(obj, SKILL_BYKK_SPEARMASTERY) > 0 && obj.getWeaponSubType() == 0) fullchargeTime = fullchargeTime * ( 100 - sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 4)) / 100; if(stateTime >= fullchargeTime && obj.getVar("shsBool").getBool(0)){ obj.getVar("shsBool").setBool(0, false); obj.sq_PlaySound("RAIDP_FULL"); cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,1,0,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,3,0,0,0,0,0,0,0,0); cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,-1,0,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,4,0,0,0,0,0,0,0,0); obj.sq_SetSuperArmor(POD_VAR_SUPERARMOR); } } break; } } function onKeyFrameFlag_StrengthHandStrike(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1001: sq_SetShake(obj, 10, 150); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STRENGTHHANDSTRIKE, -1, 1, 1.0) + 100; cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,56,0,63,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,21,totalDamage,100,0,0,0,0,0,0); break; case 2001: sq_SetShake(obj, 10, 150); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STRENGTHHANDSTRIKE, -1, 1, 1.0) + 100; cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,170,1,120,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,21,totalDamage,150,0,0,0,0,0,0); break; } return true; } function onTimeEvent_StrengthHandStrike(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: local currentAni = obj.getCurrentAnimation(); local poleAniFrameNumber = sq_GetAniFrameNumber(currentAni, 0); local startFrame = 9; if(obj.getSkillSubState() == 10) startFrame = 4; local delay = currentAni.getDelaySum(startFrame, poleAniFrameNumber); obj.setTimeEvent(1, delay / 50, 30, true); break; case 1: local v = sq_GetUniformVelocity(0, 400, timeEventCount, 30); local dstX = sq_GetDistancePos(obj.getVar("shs_move").getInt(10), obj.getDirection(), v); sq_setCurrentAxisPos(obj, 0, dstX); // obj.sq_SetXScrollStop(0); if(timeEventCount >= 30){ obj.getVar("shs_move").setInt(12, sq_GetXPos(obj)); obj.sq_PlaySound("RAIDP_ATK"); if(obj.getSkillSubState() == 0) sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/strengthhandstrike/damage.ani", 50, 0, 10); } break; case 2: local v = sq_GetUniformVelocity(obj.getVar("shs_move").getInt(12), obj.getVar("shs_move").getInt(10), timeEventCount, 5); sq_setCurrentAxisPos(obj, 0, v); // obj.sq_SetXScrollStop(0); break; } } function onEndState_StrengthHandStrike(obj, new_state) { if(!obj) return; if(new_state != SKILL_BYKK_STRENGTHHANDSTRIKE){ local size = obj.getVar("kksshs").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local shsObj = obj.getVar("kksshs").get_obj_vector(i); if(shsObj){ local colObj = sq_GetCNRDObjectToCollisionObject(shsObj); colObj.setValid(false); } } } obj.stopSound(2332); obj.stopSound(2333); obj.sq_RemoveSuperArmor(POD_VAR_SUPERARMOR); } } function onAttack_StrengthHandStrike(obj, damager, boundingBox, isStuck) { if(!obj) return; if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; sq_SetMyShake(obj, 12, 80); }