function checkExecutableSkill_Darkstrike_bykk(obj) { if (!obj) return false; if(obj.getVar("darkstrike_tar").get_obj_vector_size() > 0) return false; local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_DARKSTRIKE); if (isUse){ obj.getVar("Darkstrike").setBool(0, false); obj.getVar("darkstrike_bool").setBool(0, false); obj.getVar("Darkstrike_Target").clear_obj_vector(); obj.sq_IntVectClear(); if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) obj.sq_IntVectPush(1); else if(obj.sq_GetState() == 6) obj.sq_IntVectPush(2); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_DARKSTRIKE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Darkstrike_bykk(obj) { if (!obj) return false; if(sq_GetIntData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 8) > 0 || DARKSTRIKE_STONE > 0) return false; return true; } function onSetState_Darkstrike_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); obj.sq_ZStop(); switch(subState){ case 0: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_DARKSTRIKELANDATTAK_BODY); break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_DARKSTRIKEJUMP); obj.sq_PlaySound("SUMMONDAIMUS_JUMP"); break; case 2: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_DARKSTRIKEFLYING); obj.getVar("darkstrike_move").setInt(10, sq_GetXPos(obj)); obj.getVar("darkstrike_move").setInt(11, sq_GetZPos(obj)); obj.setTimeEvent(2, 5, 60, false); break; case 3: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_DARKSTRIKELANDING); obj.sq_PlaySound("SUMMONDAIMUS_LANDING"); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atdarkstrike/slash_floor_dust.ani", 0, 1, 0); local currentAni = obj.getCurrentAnimation(); obj.setTimeEvent(1, currentAni.getDelaySum(false) / 11, 10, false); if(obj.getVar("darkstrike_bool").getBool(0) == false){ local skill_level = sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DARKSTRIKE); local hitMax = sq_GetLevelData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 0, skill_level); local hitTime = sq_GetIntData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 2); local sizeRate = sq_GetIntData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 3); local totalDamage = sq_GetLevelData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 1, skill_level); local totalDamage2 = sq_GetLevelData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 2, skill_level); local sub = sq_GetIntData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 6); local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, -175, -1, 70, obj.getDirection(), 2, SKILL_DEMONSLAYER_DARKSTRIKE, 1, totalDamage, hitMax, hitTime, sizeRate, sub, damageRate, 0, 0, 1); } break; case 4: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_DARKSTRIKEATTACK); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.sq_PlaySound("SUMMONDAIMUS_SWISH"); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(subState == 0 || subState == 4){ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_DARKSTRIKE, -1, 3, 1.0) + 100; //if(sq_GetIntData(obj, SKILL_DEMONSLAYER_BLOODDANCE, 5) > 0 || BLOODDANCE_STONE > 0) totalDamage = totalDamage * 225 / 100; if(subState == 0) sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 99)); else sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 100)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); } } function onEndCurrentAni_Darkstrike_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 3: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onTimeEvent_Darkstrike_bykk(obj, timeEventIndex, timeEventCount) { switch(timeEventIndex){ case 1: local offsetX = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 9); sq_setCurrentAxisPos(obj, 0, offsetX); break; case 2: local baseX = obj.getVar("darkstrike_move").getInt(10); local moveX = sq_GetIntData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 0) / 60; local moveZ = sq_GetAccel(obj.getVar("darkstrike_move").getInt(11), 100, timeEventCount, 30, true); if(timeEventCount > 30) moveZ = sq_GetAccel(100, 0, timeEventCount - 30, 30, false); local offsetX = sq_GetDistancePos(baseX, obj.getDirection(), moveX * timeEventCount); if(obj.isMovablePos(offsetX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, offsetX); sq_setCurrentAxisPos(obj, 2, moveZ); if(timeEventCount == 60){ obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_DARKSTRIKE, STATE_PRIORITY_IGNORE_FORCE, true); } break; } } function onAttack_Darkstrike_bykk(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return false; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ sq_AddDrawOnlyAniFromParent(damager, "character/swordman/effect/animation/atdarkstrike/hit1.ani", 0, 0, sq_GetCenterZPos(boundingBox)); if(!obj.getVar("Darkstrike_Target").is_obj_vector(damager)) obj.getVar("Darkstrike_Target").push_obj_vector(damager); } break; case 4: if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ sq_AddDrawOnlyAniFromParent(damager, "character/swordman/effect/animation/atdarkstrike/hit1.ani", 0, 0, sq_GetCenterZPos(boundingBox)); if(obj.getVar("darkstrike_bool").getBool(0) == false){ obj.getVar("darkstrike_bool").setBool(0, true); local skill_level = sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DARKSTRIKE); local hitMax = sq_GetLevelData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 0, skill_level); local hitTime = sq_GetIntData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 2); local sizeRate = sq_GetIntData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 3); local totalDamage = sq_GetLevelData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 1, skill_level); local totalDamage2 = sq_GetLevelData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 2, skill_level); local sub = sq_GetIntData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 6); local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); local id = sq_GetObjectId(damager); cearteSkillPassiveObj_AtSwordMan_bykk(obj, damager, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, -1, sq_GetZPos(damager) + sq_GetObjectHeight(damager) / 2, obj.getDirection(), 2, SKILL_DEMONSLAYER_DARKSTRIKE, 1, totalDamage, hitMax, hitTime, sizeRate, sub, damageRate, id, 0, 1); } } break; } } function onEnterFrame_Darkstrike_bykk(obj, frameIndex) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: switch(frameIndex){ case 4: obj.sq_PlaySound("CLAWBLADE_01"); if(obj.isMyControlObject()){ sq_flashScreen(obj, 1, 30, 40, 63, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 3, 200); } break; case 6: //`MakeForceDaimus` 175 -1 70 local skill_level = sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DARKSTRIKE); local hitMax = sq_GetLevelData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 0, skill_level); local hitTime = sq_GetIntData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 2); local sizeRate = sq_GetIntData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 3); local totalDamage = sq_GetLevelData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 1, skill_level); local totalDamage2 = sq_GetLevelData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 2, skill_level); local sub = sq_GetIntData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 6); local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); local offsetX = 175, offsetZ = 70, id = 0, offsetObj = obj; if(obj.getVar("Darkstrike_Target").get_obj_vector_size() > 0){ local targetObj = obj.getVar("Darkstrike_Target").get_obj_vector(0); if(targetObj){ offsetX = 0; offsetZ = sq_GetZPos(targetObj) + sq_GetObjectHeight(targetObj) / 2; offsetObj = targetObj; id = sq_GetObjectId(targetObj); } } cearteSkillPassiveObj_AtSwordMan_bykk(obj, offsetObj, PASSIVEOBJECT_BYKK_DEMONSLAYER, offsetX, -1, offsetZ, obj.getDirection(), 2, SKILL_DEMONSLAYER_DARKSTRIKE, 1, totalDamage, hitMax, hitTime, sizeRate, sub, damageRate, id, 0, 1); break; } break; } } function onEndState_Darkstrike_bykk(obj, newState) { if(!obj) return; } function onProc_Darkstrike_bykk(obj) { if(!obj) return; } function onKeyFrameFlag_Darkstrike_bykk(obj, flagIndex) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: if(flagIndex == 1){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_DARKSTRIKE, STATE_PRIORITY_IGNORE_FORCE, true); } break; } } function onProcCon_Darkstrike_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 2: if(obj.getVar("Darkstrike").getBool(0) == false){ obj.setSkillCommandEnable(SKILL_DEMONSLAYER_DARKSTRIKE, true); local EnterSkill = obj.sq_IsEnterSkill(SKILL_DEMONSLAYER_DARKSTRIKE); if(EnterSkill != -1){ obj.getVar("Darkstrike").setBool(0, true); obj.sq_IntVectClear(); obj.sq_IntVectPush(4); obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_DARKSTRIKE, STATE_PRIORITY_IGNORE_FORCE, true); } } break; } } function darkStrike_Attack(obj, damager) { if(sq_GetIntData(obj, SKILL_DEMONSLAYER_DARKSTRIKE, 8) < 1 && DARKSTRIKE_STONE < 1) return; if(obj.getVar("darkstrike_tar").get_obj_vector_size() > 0){ if(obj.getVar("darkstrike_tar").is_obj_vector(damager)) obj.getVar("darkstrike_tar").push_obj_vector(damager); } else{ obj.getVar("darkstrike_tar").clear_obj_vector(); obj.getVar("darkstrike_tar").push_obj_vector(damager); } if(obj.getVar("darkStrike_Attack").get_obj_vector_size() < 1){ cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, -1, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_DARKSTRIKE, 2, 100, 0, 0, 0, 0, 0, 0, 0, 0); } } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Phnom_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_PHNOM); if (isUse){ obj.sq_IntVectClear(); if(sq_GetIntData(obj, SKILL_DEMONSLAYER_PHNOM, 8) > 0 || PHNUM_STONE > 0) obj.sq_IntVectPush(4); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_PHNOM, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Phnom_bykk(obj) { if (!obj) return false; if(obj.getHp() < sq_GetLevelData(obj, SKILL_DEMONSLAYER_PHNOM, 0, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_PHNOM))) return false; local state = obj.sq_GetState(); if(state == 0 || state == 108 || state == 14) return true; return false; } function onSetState_Phnom_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); switch(subState){ case 0: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_PHNOMCAST); sq_SetCustomDamageType(obj, true, 1); break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_PHNOMKELKUS); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_PHNOM, -1, 1, 1.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 107)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 2: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_PHNOMDAIMUS); break; case 3: obj.stopTimeEvent(4); obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_PHNOMEXPLOSION); break; case 4: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_PHNOMFIXINGCAST); sq_SetCustomDamageType(obj, true, 1); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(subState == 1){ local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(0, 7); obj.setTimeEvent(1, delaySum, 1, false); } } function onEndCurrentAni_Phnom_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_PHNOM, STATE_PRIORITY_IGNORE_FORCE, true); break; case 3: case 4: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Phnom_bykk(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return false; } function onTimeEvent_Phnom_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return; switch(timeEventIndex){ case 1: local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(8, 31); local hitMax = sq_GetIntData(obj, SKILL_DEMONSLAYER_PHNOM, 1); if(sq_GetIntData(obj, SKILL_DEMONSLAYER_PHNOM, 4) > 0){ hitMax = hitMax + 7; } obj.setTimeEvent(2, delaySum / hitMax, hitMax -1, false); break; case 2: obj.resetHitObjectList(); break; case 3: obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_PHNOM, STATE_PRIORITY_IGNORE_FORCE, true); break; case 4: local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atphnom/daimus1_phnom_daimus.ani", 0, -1, 0); local speedRate = obj.getVar("phnomSet").getInt(10); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); break; } } function onEnterFrame_Phnom_bykk(obj, frameIndex) { if(!obj) return; } function onEndState_Phnom_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_DEMONSLAYER_PHNOM){ sq_SetCustomDamageType(obj, true, 0); } } function onProc_Phnom_bykk(obj) { if(!obj) return; } function onKeyFrameFlag_Phnom_bykk(obj, flagIndex) { if (!obj) return false; switch(flagIndex){ case 1000: //`SUMMONDAIMUS_APPEAR` local hitMax = sq_GetIntData(obj, SKILL_DEMONSLAYER_PHNOM, 0); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(37, 37); local speedRate = 6000 / delay; obj.getVar("phnomSet").setInt(10, speedRate); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_PHNOM, -1, 2, 1.0) + 100; local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_PHNOM, -1, 4, 1.0) + 100; local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); local sizeRate = 100; if(sq_GetIntData(obj, SKILL_DEMONSLAYER_PHNOM, 4) > 0){ sizeRate = sizeRate + 30; hitMax = hitMax + 3; } obj.setTimeEvent(3, delay / 30 * 200 * hitMax, 1, false); obj.setTimeEvent(4, delay / 30 * 200, hitMax, false); cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 1, 70, obj.getDirection(), 2, SKILL_DEMONSLAYER_PHNOM, 1, totalDamage, hitMax, sizeRate, damageRate, speedRate, 0, 0, 0, 1); break; } return true; } function onProcCon_Phnom_bykk(obj) { if(!obj) return; } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Blooddemonsword_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_BLOODDEMONSWORD); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_BLOODDEMONSWORD, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Blooddemonsword_bykk(obj) { if (!obj) return false; return true; } function onSetState_Blooddemonsword_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); switch(subState){ case 0: obj.sq_PlaySound("DL_QUICKPUNTO"); //BodyCalldaimus(obj, "blooddemonswordcast_body"); obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_BLOODDEMONSWORDCAST_BODY); // local dago = obj.sq_CreateCNRDAnimation("effect/animation/atblooddemonsword/daimus/daimuscast_body.ani"); // obj.sq_AddStateLayerAnimation(-1,dago, 0, 0); break; case 1: //BodyCalldaimus(obj, "blooddemonswordhit_body"); obj.sq_PlaySound("SW_MOON_LIGHT_SLASH_05"); obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_BLOODDEMONSWORDHIT_BODY); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_BLOODDEMONSWORD, -1, 0, 1.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 110)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local appath = [ "effect/animation/atblooddemonsword/daimus/daimushitback_00.ani", "effect/animation/atblooddemonsword/hitback_dust.ani", "effect/animation/atblooddemonsword/hitfront_07.ani", "effect/animation/atblooddemonsword/daimus/daimushit_body.ani" ]; foreach(path in appath) obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation(path), 0, 0); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Blooddemonsword_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_BLOODDEMONSWORD, STATE_PRIORITY_IGNORE_FORCE, true); break; case 1: local aniPath = "character/swordman/effect/animation/atblooddemonsword/daimus/daimusdisappear_body.ani"; sq_AddDrawOnlyAniFromParent(obj, aniPath, 0, 0, 0); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Blooddemonsword_bykk(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return false; } function onEnterFrame_Blooddemonsword_bykk(obj, frameIndex) { if(!obj || !obj.isMyControlObject()) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: switch(frameIndex){ case 1: sq_SetMyShake(obj,7,200); sq_flashScreen(obj,0,120,400,204,sq_RGB(255,255,255),GRAPHICEFFECT_NONE,ENUM_DRAWLAYER_CLOSEBACK); break; } } } function onEndState_Blooddemonsword_bykk(obj, newState) { if(!obj) return; } function onProc_Blooddemonsword_bykk(obj) { if(!obj) return; } function onKeyFrameFlag_Blooddemonsword_bykk(obj, flagIndex) { if (!obj) return; } function onProcCon_Blooddemonsword_bykk(obj) { if(!obj) return; } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Gigaslash_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_GIGASLASH); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_GIGASLASH, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Gigaslash_bykk(obj) { if (!obj) return false; return true; } function onSetState_Gigaslash_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); obj.sq_ZStop(); switch(subState){ case 0: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_GIGASLASHREADY); obj.getVar("gigaslashmove").setInt(11, sq_GetXPos(obj)); obj.getVar("gigaslashBool").setBool(0, false); break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_GIGASLASHSTART); obj.sq_PlaySound("SW_GIGASLASH"); obj.sq_PlaySound("GIGASLASH_JUMP"); sq_flashScreen(obj, 200, 550, 100, 102, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE,ENUM_DRAWLAYER_BOTTOM); break; case 2: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_GIGASLASHBLOW); obj.sq_PlaySound("GIGASLASH_SMASH"); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); switch(subState){ case 1: local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(0, 3); obj.setTimeEvent(1, delaySum / 10, 10, true); obj.setTimeEvent(3, delaySum, 1, false); break; } } function onEndCurrentAni_Gigaslash_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_GIGASLASH, STATE_PRIORITY_IGNORE_FORCE, true); break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Gigaslash_bykk(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return false; //Calldaimus_onAttack(obj,damager, boundingBox, isStuck); } function onEnterFrame_Gigaslash_bykk(obj, frameIndex) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 2: if(frameIndex == 1){ sq_SetMyShake(obj, 8, 200); sq_flashScreen(obj, 40, 100, 0, 155, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); } else if(frameIndex == 2){ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_GIGASLASH, -1, 0, 1.0) + 100; local xpos = 0; if(obj.getVar("gigaslashBool").getBool(0)) xpos = 30; cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, xpos, 0, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_GIGASLASH, 1, totalDamage, 0, 0, 0, 0, 0, 0, 0, 1); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atgigaslash/atgigaslash_blow_front_crack02.ani", 0, 1, 0); createOnlyDrawObject_AtSwordMan_bykk(obj,"character/swordman/effect/animation/atgigaslash/screeneffect/atgigaslash_screen01.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj),ENUM_DRAWLAYER_BOTTOM); } break; } } function onEndState_Gigaslash_bykk(obj, newState) { if(!obj) return; } function onProc_Gigaslash_bykk(obj) { if(!obj) return; } function onKeyFrameFlag_Gigaslash_bykk(obj, flagIndex) { if (!obj) return; } function onTimeEvent_Gigaslash_bykk(obj, timeEventIndex, timeEventCount) { switch(timeEventIndex){ case 1: local z = sq_GetUniformVelocity(0, 180, timeEventCount, 10); sq_setCurrentAxisPos(obj, 2, z); if(obj.getVar("gigaslashBool").getBool(0)){ local x = sq_GetUniformVelocity(0, obj.getVar("gigaslashmove").getInt(10) / 2, timeEventCount, 10); local xpos = sq_GetDistancePos(obj.getVar("gigaslashmove").getInt(11), obj.getDirection(), x); if(obj.isMovablePos(xpos, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, xpos); } if(timeEventCount >= 10) obj.getVar("gigaslashmove").setInt(11, sq_GetXPos(obj)); break; case 2: local z = sq_GetUniformVelocity(180, 0, timeEventCount, 10); sq_setCurrentAxisPos(obj, 2, z); if(obj.getVar("gigaslashBool").getBool(0)){ local x = sq_GetUniformVelocity(0, obj.getVar("gigaslashmove").getInt(10) / 2, timeEventCount, 10); local xpos = sq_GetDistancePos(obj.getVar("gigaslashmove").getInt(11), obj.getDirection(), x); if(obj.isMovablePos(xpos, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, xpos); } break; case 3: local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(4, 6); obj.setTimeEvent(2, delaySum / 10, 10, true); break; } } function onProcCon_Gigaslash_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(obj.getVar("gigaslashBool").getBool(0) == false){ if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP , ENUM_SUBKEY_TYPE_ALL)){ obj.getVar("gigaslashmove").setInt(10, 300); obj.getVar("gigaslashBool").setBool(0, true); } else if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT , ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 0) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT , ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == 1)){ obj.getVar("gigaslashmove").setInt(10, 200); obj.getVar("gigaslashBool").setBool(0, true); } } break; } } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Ultimateblade_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_ULTIMATEBLADE); if (isUse){ obj.getVar("Ultimateblade_target").clear_obj_vector(); obj.getVar("Ultimateblade_fixtarget").clear_obj_vector(); obj.getVar("Ultimateblade_bool").setBool(0, false); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_ULTIMATEBLADE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Ultimateblade_bykk(obj) { if (!obj) return false; return true; } function onSetState_Ultimateblade_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); switch(subState){ case 0://640 obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_ULTIMATEBLADE_START_GRAB); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 111)); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); local speedRate = 64000.0 / delaySum.tofloat(); if(speedRate > 150) speedRate = 150.0; currentAni.setSpeedRate(speedRate); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atultimateblade/start/start_grab_clawn02.ani", 0, 0, 0); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate); local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atultimateblade/start/start_grab_floor01.ani", 0, 0, 0); local pAni2 = pooledObj2.getCurrentAnimation(); pAni2.setSpeedRate(speedRate); break; case 1://320 obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_ULTIMATEBLADE_START_PULL); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); local speedRate = 32000.0 / delaySum.tofloat(); if(speedRate > 150) speedRate = 150.0; currentAni.setSpeedRate(speedRate); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atultimateblade/start/start_pull_floorn01.ani", 0, 0, 0); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate); local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atultimateblade/start/start_pull_clawn02.ani", 0, 0, 0); local pAni2 = pooledObj2.getCurrentAnimation(); pAni2.setSpeedRate(speedRate); break; case 2: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_ULTIMATEBLADE_BASIC_ATTACK01); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); local speedRate = 24000.0 / delaySum.tofloat(); if(speedRate > 150) speedRate = 150.0; currentAni.setSpeedRate(speedRate); local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"character/swordman/effect/animation/atultimateblade/attackbasic/basic_attack01_clawn03.ani", 0, 0, 0); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate); break; case 3: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_ULTIMATEBLADE_BASIC_ATTACK02); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); local speedRate = 24000.0 / delaySum.tofloat(); if(speedRate > 150) speedRate = 150.0; currentAni.setSpeedRate(speedRate); local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"character/swordman/effect/animation/atultimateblade/attackbasic/basic_attack02_clawn03.ani", 0, 0, 0); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate); break; case 4: // BodyCalldaimus(obj, "ultimateblade_basic_attack03"); obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_ULTIMATEBLADE_BASIC_ATTACK03); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); local speedRate = 24000.0 / delaySum.tofloat(); if(speedRate > 150) speedRate = 150.0; currentAni.setSpeedRate(speedRate); local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"character/swordman/effect/animation/atultimateblade/attackbasic/basic_attack03_clawn03.ani", 0, 0, 0); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate); break; case 5: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_ULTIMATEBLADE_BASIC_ATTACK04); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); local speedRate = 24000.0 / delaySum.tofloat(); if(speedRate > 150) speedRate = 150.0; currentAni.setSpeedRate(speedRate); local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"character/swordman/effect/animation/atultimateblade/attackbasic/basic_attack02_clawn03.ani", 0, 0, 0); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate); break; case 6: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_ULTIMATEBLADE_FINISH); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); local speedRate = 76000.0 / delaySum.tofloat(); if(speedRate > 150) speedRate = 150.0; currentAni.setSpeedRate(speedRate); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atultimateblade/finish/finish_floorn01.ani", 0, 0, 0); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate); local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj,"character/swordman/effect/animation/atultimateblade/finish/finish_dust02.ani", 0, 0, 0); local pAni2 = pooledObj2.getCurrentAnimation(); pAni2.setSpeedRate(speedRate); break; case 10: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_ULTIMATEBLADE_FAIL_FINISH); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); break; } } function onEndCurrentAni_Ultimateblade_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: local size = obj.getVar("Ultimateblade_target").get_obj_vector_size(),sub = 10; if(obj.getVar("Ultimateblade_fixtarget").get_obj_vector_size() > 0) sub = 1; else if(size > 0) sub = 1; obj.sq_IntVectClear(); obj.sq_IntVectPush(sub); obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_ULTIMATEBLADE, STATE_PRIORITY_IGNORE_FORCE, true); break; case 1: case 2: case 3: case 4: case 5: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_ULTIMATEBLADE, STATE_PRIORITY_IGNORE_FORCE, true); break; case 6: case 10: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Ultimateblade_bykk(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return false; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ // if(sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager) && !sq_IsFixture(damager)){ if(!obj.getVar("Ultimateblade_target").is_obj_vector(damager)) obj.getVar("Ultimateblade_target").push_obj_vector(damager); local apPath = "character/atswordman/2_demonslayer/ultimateblade/ap_ultimateblade.nut"; local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apPath, true); sq_HoldAndDelayDie(damager, obj, true, true, true, 100, 300, ENUM_DIRECTION_NEUTRAL, addAppendage); // } // else if(sq_IsFixture(damager)){ // if(!obj.getVar("Ultimateblade_fixtarget").is_obj_vector(damager)) obj.getVar("Ultimateblade_fixtarget").push_obj_vector(damager); // } } break; } } function onEnterFrame_Ultimateblade_bykk(obj, frameIndex) { if(!obj || !obj.isMyControlObject()) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: switch(frameIndex){ case 0: obj.sq_PlaySound("SW_ULTIMATE_BLADE_01"); sq_flashScreen(obj, 160, 0, 0, 102, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 2: obj.sq_PlaySound("ULTIMATE_BLADE_WALE"); sq_flashScreen(obj, 0, 0, 160, 102, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 3: obj.sq_PlaySound("ULTIMATE_BLADE_WALE"); break; case 4: sq_SetMyShake(obj, 4, 160); sq_flashScreen(obj, 0, 0, 160, 51, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; } break; case 1: switch(frameIndex){ case 0: sq_SetMyShake(obj, 3, 40); break; case 1: sq_SetMyShake(obj, 2, 80); break; case 2: sq_SetMyShake(obj, 1, 180); break; case 3: case 4: local sub = 0; if(frameIndex == 4) sub = 1; local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(frameIndex, frameIndex); Ultimateblade_bykk_pulltarget(obj,sub,delaySum); break; } break; case 2: switch(frameIndex){ case 0: obj.sq_PlaySound("SW_ULTIMATE_BLADE_02"); obj.sq_PlaySound("ULTIMATE_BLADE_LASHING"); sq_flashScreen(obj, 0, 0, 40, 25, sq_RGB(255, 255, 255), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 3, 40); Ultimateblade_bykk_rotate(obj, 1, -36, 0, 41); break; case 1: case 2: local sub = 2; if(frameIndex == 2) sub = 3; local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(frameIndex, frameIndex); Ultimateblade_bykk_pulltarget(obj,sub,delaySum); break; } break; case 3: case 4: case 5: switch(frameIndex){ case 0: obj.sq_PlaySound("ULTIMATE_BLADE_LASHING"); sq_flashScreen(obj, 0, 0, 40, 25, sq_RGB(255, 255, 255), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 3, 40); switch(subState){ case 3: Ultimateblade_bykk_rotate(obj, 1, 124, 0, 49); break; case 4: Ultimateblade_bykk_rotate(obj, 1, -88, 0, 43); break; case 5: Ultimateblade_bykk_rotate(obj, 1, 116, 0, 45); break; } break; case 1: case 2: local sub = 4 + (subState - 3) * 2; if(frameIndex == 2) sub = 5 + (subState - 3) * 2; local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(frameIndex, frameIndex); Ultimateblade_bykk_pulltarget(obj,sub,delaySum); break; } break; case 6: switch(frameIndex){ case 0: obj.sq_PlaySound("SW_ULTIMATE_BLADE_03"); sq_flashScreen(obj, 160, 0, 0, 153, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(0, 0); Ultimateblade_bykk_pulltarget(obj, 10, delaySum); break; case 1: local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(frameIndex, frameIndex); Ultimateblade_bykk_pulltarget(obj,11,delaySum); break; case 2: obj.sq_PlaySound("ULTIMATE_BLADE_FINISH"); sq_flashScreen(obj, 0, 0, 160, 153, sq_RGB(255, 255, 255), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 6, 240); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(0, 0); Ultimateblade_bykk_pulltarget(obj, 12, delaySum); Ultimateblade_bykk_rotate(obj, 2, 204, 0, 41); break; case 5: local size = obj.getVar("Ultimateblade_target").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("Ultimateblade_target").get_obj_vector(i); if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/2_demonslayer/ultimateblade/ap_ultimateblade.nut"); } } break; } break; } } function onChangeSkillEffect_Ultimateblade_bykk(obj, skillIndex, receiveData) { if(!obj || skillIndex != 165) return; } function onEndState_Ultimateblade_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_DEMONSLAYER_ULTIMATEBLADE){ local size = obj.getVar("Ultimateblade_target").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("Ultimateblade_target").get_obj_vector(i); if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/2_demonslayer/ultimateblade/ap_ultimateblade.nut"); } } } } function onProc_Ultimateblade_bykk(obj) { if(!obj) return; if(obj.isMyControlObject()){ if(obj.getVar("Ultimateblade_bool").getBool(0) == false){ if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT , ENUM_SUBKEY_TYPE_ALL)){ obj.getVar("Ultimateblade_dir").setInt(10, ENUM_DIRECTION_LEFT); obj.getVar("Ultimateblade_bool").setBool(0, true); } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT ,ENUM_SUBKEY_TYPE_ALL)){ obj.getVar("Ultimateblade_dir").setInt(10, ENUM_DIRECTION_RIGHT); obj.getVar("Ultimateblade_bool").setBool(0, true); } } } } function onKeyFrameFlag_Ultimateblade_bykk(obj, flagIndex) { if (!obj) return; } function onBeforeAttack_Ultimateblade_bykk(obj,damager,boundingBox,isStuck) { local subState = obj.getSkillSubState(); switch(subState){ case 0: if(sq_IsFixture(damager)){ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_ULTIMATEBLADE, -1, 1, 1.0) + 100; sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); } else{ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_ULTIMATEBLADE, -1, 0, 1.0) + 100; sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); } break; } } function Ultimateblade_bykk_pulltarget(obj,sub,time) { local xpos = [-37,-27,133,156,-87,-132,155,149,-90,-127,-47,-25,228]; local zpos = [148,182,130,197,166,171,124,171,168,170,-224,242,10]; local size = obj.getVar("Ultimateblade_target").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("Ultimateblade_target").get_obj_vector(i); local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); local addAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, "character/atswordman/2_demonslayer/ultimateblade/ap_ultimateblade.nut"); if(activeObj && addAppendage && !sq_IsFixture(activeObj)){ sq_MoveToAppendageForce(activeObj, obj, obj, xpos[sub], 0, zpos[sub], time / 4, true, addAppendage); } } } } function Ultimateblade_bykk_rotate(obj,sub,x,y,z) { local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_ULTIMATEBLADE, -1, 2, 1.0) + 100; if(sub > 1) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_ULTIMATEBLADE, -1, 4, 1.0) + 100; cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, x, y, z, obj.getDirection(), 2, SKILL_DEMONSLAYER_ULTIMATEBLADE, sub, totalDamage, 0, 0, 0, 0, 0, 0, 0, 1); } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Bloodoctopussword_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_BLOODOCTOPUSSWORD); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_BLOODOCTOPUSSWORD, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Bloodoctopussword_bykk(obj) { if (!obj) return false; return true; } function onSetState_Bloodoctopussword_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); switch(subState){ case 0: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_BLOODOCTOPUSSWORDBODY_BODY); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Bloodoctopussword_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Bloodoctopussword_bykk(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return false; } function onEnterFrame_Bloodoctopussword_bykk(obj, frameIndex) { if(!obj || !obj.isMyControlObject()) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: switch(frameIndex){ case 1: obj.sq_PlaySound("BLOOD_OCTOPUSSWORD_START"); obj.sq_PlaySound("R_SW_BLOOD_OCTOPUSSWORD_01"); break; case 12: local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(12, 14); obj.sq_SetXScrollStart(400, delaySum); break; case 13: local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(13, 13); local speedRate = 4000.0 / delaySum.tofloat(); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/demonslayer/animation/atbloodoctopussword/bloodoctopusswordbottom_21.ani", 0, 0, 0); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate); break; case 14: sq_flashScreen(obj, 0, 40, 0, 153, sq_RGB(255, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 5, 200); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(14, 14); local speedRate = 4000.0 / delaySum.tofloat(); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/demonslayer/animation/atbloodoctopussword/bloodoctopussword02_00.ani", 0, 50, 0); local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/demonslayer/animation/atbloodoctopussword/bloodoctopussword03_13.ani", 0, 1, 0); local pAni = pooledObj.getCurrentAnimation(); local pAni2 = pooledObj2.getCurrentAnimation(); pAni.setSpeedRate(speedRate); pAni2.setSpeedRate(speedRate); break; case 15: //`createSwordObject` 0 -1 0 local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_BLOODOCTOPUSSWORD, -1, 0, 1.0) + 100; local hitMax = sq_GetIntData(obj, SKILL_DEMONSLAYER_BLOODOCTOPUSSWORD, 1); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(15, 15); local speedRate = (4000.0 / delaySum.tofloat()).tointeger(); cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, -1, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_BLOODOCTOPUSSWORD, 1, totalDamage, hitMax, speedRate, 0, 0, 0, 0, 0, 1); //`createBackSwordEffect` 0 -90 0 local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/demonslayer/animation/atbloodoctopussword/bloodoctopusswordbottom_21.ani", 0, -90, 0); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); break; case 16: sq_flashScreen(obj, 0, 40, 0, 153, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 19: sq_flashScreen(obj, 0, 40, 0, 153, sq_RGB(255, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 35: sq_SetMyShake(obj, 2, 280); case 42: obj.sq_PlaySound("R_SW_BLOOD_OCTOPUSSWORD_02"); obj.sq_PlaySound("BLOOD_OCTOPUSSWORD_FIN"); sq_flashScreen(obj, 0, 40, 0, 153, sq_RGB(255, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 12, 300); //`createExpObject` 0 51 0 local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_BLOODOCTOPUSSWORD, -1, 1, 1.0) + 100; local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(42, 42); local speedRate = (4000.0 / delaySum.tofloat()).tointeger(); cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 51, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_BLOODOCTOPUSSWORD, 2, totalDamage, speedRate, 0, 0, 0, 0, 0, 0, 1); break; case 43: obj.sq_SetXScrollStop(0); break; case 44: sq_flashScreen(obj, 0, 40, 0, 153, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); //`EnableWhipSwordBal` break; } break; } } function onEndState_Bloodoctopussword_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_DEMONSLAYER_BLOODOCTOPUSSWORD) obj.sq_SetXScrollStop(0); } function onProc_Bloodoctopussword_bykk(obj) { if(!obj) return; } function onKeyFrameFlag_Bloodoctopussword_bykk(obj, flagIndex) { if (!obj) return; } function onProcCon_Bloodoctopussword_bykk(obj) { if(!obj) return; } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Gigablade_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_GIGABLADE); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_GIGABLADE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Gigablade_bykk(obj) { if (!obj) return false; if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH) < 1){ local state = obj.sq_GetState(); if(state == 0 || state == 108 || state == 14) return true; else return false; } return true; } function onSetState_Gigablade_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); local add_bonus = 1.0; if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_GIGABLADE) >= 3) add_bonus = 1.1; switch(subState){ case 0: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_GIGABLADEGATE); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_GIGABLADE, -1, 4, add_bonus) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 104)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_GIGABLADEDASH); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_GIGABLADE, -1, 0, add_bonus) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 102)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.getVar("gigablade_mive").setInt(10, sq_GetXPos(obj)); obj.getVar("gigablade_mive").setInt(11, 250); break; case 2: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_GIGABLADERETURNSWORD); obj.getVar("gigablade_mive").setInt(10, sq_GetXPos(obj)); obj.getVar("gigablade_mive").setInt(11, -250); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atgigablade/gigablade_dash_eff_d.ani", 0, 1, 0); break; case 3: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_GIGABLADEPOWERSLASH); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_GIGABLADE, -1, 1, add_bonus) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 105)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(subState == 1 || subState == 2){ local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); obj.setTimeEvent(2, delaySum / 10, 9, false); } } function onEndCurrentAni_Gigablade_bykk(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_DEMONSLAYER_GIGABLADE, STATE_PRIORITY_IGNORE_FORCE, true); break; case 3: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onTimeEvent_Gigablade_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return; switch(timeEventIndex){ case 1: obj.resetHitObjectList(); break; case 2: local srcX = obj.getVar("gigablade_mive").getInt(10); local moveX = obj.getVar("gigablade_mive").getInt(11); local v = sq_GetUniformVelocity(0, moveX, timeEventCount, 9); local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); sq_setCurrentAxisPos(obj, 0, dstX); break; } } function onAttack_Gigablade_bykk(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return false; local subState = obj.getSkillSubState(); //Calldaimus_onAttack(obj,damager, boundingBox, isStuck); local add_bonus = 1.0; if(sq_GetSkillLevel(obj, 160) >= 3) add_bonus = 1.1; switch(subState){ case 0: if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_GIGABLADE) >= 6){ if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ //creat_exp_obj local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_GIGABLADE, -1, 7, add_bonus) + 100; cearteSkillPassiveObj_AtSwordMan_bykk(obj, damager, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 0, sq_GetObjectHeight(damager) / 2 + sq_getRandom(-20, 20), obj.getDirection(), 2, SKILL_DEMONSLAYER_GIGABLADE, 1, totalDamage, 0, 0, 0, 0, 0, 0, 0, 1); } } break; } } function onEnterFrame_Gigablade_bykk(obj, frameIndex) { if(!obj) return; local subState = obj.getSkillSubState(); local add_bonus = 1.0; if(sq_GetSkillLevel(obj, 160) > 2) add_bonus = 1.1; switch(subState){ case 0: switch(frameIndex){ case 0: obj.sq_PlaySound("SW_GIGA"); obj.sq_PlaySound("GIGA_GATE_PUT"); break; case 10: local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(10, 28); local hitMax = sq_GetIntData(obj, SKILL_DEMONSLAYER_GIGABLADE, 9); obj.setTimeEvent(1, delay / (hitMax + 1), hitMax, true); sq_CreateParticle("character/swordman/particle/atgigabladegate.ptl", obj, -50, 0, 100, true, 10, 0, 30); break; case 29: obj.sq_PlaySound("GIGA_EVIL"); break; } break; case 1: switch(frameIndex){ case 0: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atgigablade/gigablade_dash_smoke_a.ani", 0, 1, 0); break; case 1: local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(1, 5); local hitMax = sq_GetIntData(obj, SKILL_DEMONSLAYER_GIGABLADE, 5); obj.setTimeEvent(1, delay / (hitMax + 1), hitMax, true); break; } break; case 2: if(frameIndex == 0) obj.sq_PlaySound("GIGA_BACKSTEP"); break; case 3: switch(frameIndex){ case 1: obj.sq_PlaySound("GIGA_SWORD_UP"); break; case 5: obj.sq_PlaySound("GIGA_SWORD_DOWN"); break; } break; } } function onEndState_Gigablade_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_DEMONSLAYER_GIGABLADE) sq_SimpleMoveToNearMovablePos(obj,200); } function onProc_Gigablade_bykk(obj) { if(!obj) return; } function onKeyFrameFlag_Gigablade_bykk(obj, flagIndex) { if (!obj) return false; switch(flagIndex){ case 1: if(obj.getSkillSubState() == 3){ //create EXP local sizeRate = 100, add_bonus = 1.0; if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_GIGABLADE) >= 6) add_bonus = 1.1; if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_GIGABLADE) >= 9) sizeRate = 200; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_GIGABLADE, -1, 7, add_bonus) + 100; cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 150, 0, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_GIGABLADE, 2, totalDamage, sizeRate, 0, 0, 0, 0, 0, 0, 1); sq_SetMyShake(obj, 10, 100); } break; } return true; } function onProcCon_Gigablade_bykk(obj) { if(!obj) return; } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Ragnarok_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_RAGNAROK); if (isUse){ obj.getVar("ragnarok_target").clear_obj_vector(); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_RAGNAROK, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Ragnarok_bykk(obj) { if (!obj) return false; return true; } function onSetState_Ragnarok_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); obj.sq_ZStop(); switch(subState){ case 0: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_FRENZYCAST); obj.sq_PlaySound("SW_RAGNAROK_01"); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(0, 3); obj.setTimeEvent(2, delaySum, 1, false); sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/demonslayer/animation/atragnarok/start/rstartmaina_00.ani", 0, 0, 0); createOnlyDrawObject_AtSwordMan_bykk(obj,"character/swordman/effect/animation/atragnarok/start/rstartfloor_11.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj),ENUM_DRAWLAYER_BOTTOM); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atragnarok/start/rstartmainc_10.ani", 0, -1, 0); sq_SetCustomDamageType(obj, true, 2); break; case 1: sq_setCurrentAxisPos(obj, 2, 0); obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_FRENZY); local flashScreenObj = obj.getVar("Ragnarok_flashobj").get_obj_vector(0); if(flashScreenObj){ local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); if(pflashScreen) pflashScreen.fadeOut(); } sq_flashScreen(obj, 0, 0, 200, 255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; } } function onEndCurrentAni_Ragnarok_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: sq_setCurrentAxisPos(obj, 2, 500); local flashScreenObj = sq_flashScreen(obj, 80, 99990, 300, 255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); obj.getVar("Ragnarok_flashobj").clear_obj_vector(); obj.getVar("Ragnarok_flashobj").push_obj_vector(flashScreenObj); obj.setTimeEvent(1, 4000, 1, false);//持續時間 obj.setTimeEvent(3, 500, 1, false);//轉變揮刀 obj.setTimeEvent(4, 1500, 1, false);//亂舞 obj.setTimeEvent(5, 2500, 1, false);//巨劍衝擊 obj.setTimeEvent(6, 3500, 1, false);//地面最後一擊 break; case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Ragnarok_bykk(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return false; } function onEnterFrame_Ragnarok_bykk(obj, frameIndex) { if(!obj) return; } function onEndState_Ragnarok_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_DEMONSLAYER_RAGNAROK){ sq_SetCustomDamageType(obj, true, 0); local size = obj.getVar("ragnarok_target").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("ragnarok_target").get_obj_vector(i); if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/2_demonslayer/ragnarok/ap_ragnarok.nut"); } } } } function onProc_Ragnarok_bykk(obj) { if(!obj) return; } function onKeyFrameFlag_Ragnarok_bykk(obj, flagIndex) { if (!obj) return; } function onTimeEvent_Ragnarok_bykk(obj, timeEventIndex, timeEventCount) { switch(timeEventIndex){ case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_RAGNAROK, STATE_PRIORITY_IGNORE_FORCE, true); break; case 2: local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(4, 5); sq_flashScreen(obj, 0, 0, delaySum, 255, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 3: obj.sq_PlaySound("SW_RAGNAROK_02"); createOnlyDrawObject_AtSwordMan_bykk(obj,"character/swordman/effect/animation/atragnarok/transformation/rtransformation_body.ani",true,ENUM_DIRECTION_RIGHT,sq_GetXPos(obj) - 400,sq_GetYPos(obj),500,ENUM_DRAWLAYER_COVER); break; case 4: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_RAGNAROK, -1, 0, 1.0) + 100; local hitMax = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_RAGNAROK, -1, 1, 1.0) + 100; cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 0, -500, ENUM_DIRECTION_RIGHT, 2, SKILL_DEMONSLAYER_RAGNAROK, 1, totalDamage, hitMax, 0, 0, 0, 0, 0, 0, 1); obj.setTimeEvent(10, 60, hitMax, true); break; case 5: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_RAGNAROK, -1, 2, 1.0) + 100; local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_RAGNAROK, -1, 3, 1.0) + 100; local hitMax = sq_GetIntData(obj, SKILL_DEMONSLAYER_RAGNAROK, 1); cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 0, -500, ENUM_DIRECTION_RIGHT, 2, SKILL_DEMONSLAYER_RAGNAROK, 2, totalDamage, hitMax, totalDamage2, 0, 0, 0, 0, 0, 1); break; case 6: createOnlyDrawObject_AtSwordMan_bykk(obj,"character/swordman/effect/animation/atragnarok/attack/ratkc_finisheffect.ani",true,ENUM_DIRECTION_RIGHT,sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL); break; case 10: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atragnarok/rrhiteff_01.ani", sq_getRandom(-250,250), 0, sq_getRandom(-500,-250)); break; } } function onProcCon_Ragnarok_bykk(obj) { if(!obj) return; } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_PredatorGaloa_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_PREDATORGALOA); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(89, STATE_PRIORITY_IGNORE_FORCE, true); obj.startSkillCoolTime(SKILL_DEMONSLAYER_PREDATORGALOA, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_PREDATORGALOA), -1); return true; } return false; } function checkCommandEnable_PredatorGaloa_bykk(obj) { if (!obj) return false; return true; } function onSetState_PredatorGaloa_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); switch(subState){ case 0: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_PREDATORGALOA); break; } } function onEndCurrentAni_PredatorGaloa_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_PredatorGaloa_bykk(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return false; } function onEnterFrame_PredatorGaloa_bykk(obj, frameIndex) { if(!obj) return; switch(frameIndex){ case 3: obj.sq_PlaySound("PREDATOR_READY"); break; case 12: obj.sq_PlaySound("SW_PREDATOR"); break; } } function onEndState_PredatorGaloa_bykk(obj, newState) { if(!obj) return; } function onProc_PredatorGaloa_bykk(obj) { if(!obj) return; } function onKeyFrameFlag_PredatorGaloa_bykk(obj, flagIndex) { if (!obj) return; switch(flagIndex){ case 1: local create_number = sq_GetIntData(obj, SKILL_DEMONSLAYER_PREDATORGALOA, 0); local skill_level = sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_PREDATORGALOA); local lifeTime = sq_GetLevelData(obj, SKILL_DEMONSLAYER_PREDATORGALOA, 0, skill_level); local catchMax = sq_GetIntData(obj, SKILL_DEMONSLAYER_PREDATORGALOA, 6); local hitMax = sq_GetIntData(obj, SKILL_DEMONSLAYER_PREDATORGALOA, 4); local hitTime = sq_GetIntData(obj, SKILL_DEMONSLAYER_PREDATORGALOA, 5); local range = sq_GetIntData(obj, SKILL_DEMONSLAYER_PREDATORGALOA, 3); local totalDamage = sq_GetLevelData(obj, SKILL_DEMONSLAYER_PREDATORGALOA, 1, skill_level); local totalDamage2 = sq_GetLevelData(obj, SKILL_DEMONSLAYER_PREDATORGALOA, 2, skill_level); local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); for(local i = 0; i < create_number; i++){ cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 0, 180, obj.getDirection(), 2, SKILL_DEMONSLAYER_PREDATORGALOA, 1, totalDamage, catchMax, hitMax, damageRate, lifeTime, hitTime, i, range, 1); } break; } } function onProcCon_PredatorGaloa_bykk(obj) { if(!obj) return; } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Atfrenzy_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_ATFRENZY); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_ATFRENZY, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Atfrenzy_bykk(obj) { if (!obj) return false; return true; } function onSetState_Atfrenzy_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); switch(subState){ case 0: obj.sq_StopMove(); obj.sq_PlaySound("FRENZY_CAST"); local castTime = sq_GetCastTime(obj, 150, sq_GetSkillLevel(obj, 150)); local animation = sq_GetCurrentAnimation(obj); local aniSumTime = sq_GetDelaySum(animation); local speedRate = aniSumTime.tofloat() / castTime.tofloat(); sq_StartDrawCastGauge(obj, castTime, true); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); BodyCalldaimus(obj, "frenzycast"); obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_FRENZYCAST); break; case 1: BodyCalldaimus(obj, "frenzy"); obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_FRENZY); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local bufftmime = sq_GetLevelData(obj,150, 2, sq_GetSkillLevel(obj, 150)); local append = "character/atswordman/2_demonslayer/atfrenzy/ap_atfrenzy.nut"; local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, append, false); if(bufftmime > 0) appendage.sq_SetValidTime(bufftmime); appendage.setEnableIsBuff(true); appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_DEMONSLAYER_ATFRENZY, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_ATFRENZY)); CNSquirrelAppendage.sq_Append(appendage, obj, obj, true); appendage.setBuffIconImage(146); local bonusRate = sq_GetLevelData(obj, SKILL_DEMONSLAYER_ATFRENZY, 9, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_ATFRENZY)) / 10; obj.getVar("apGetSetbyKK").setInt(0, bonusRate); break; } } function onEndCurrentAni_Atfrenzy_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_ATFRENZY, STATE_PRIORITY_IGNORE_FORCE, true); break; case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Atfrenzy_bykk(obj, damager, boundingBox, isStuck) { if(!obj) return; } function onEnterFrame_Atfrenzy_bykk(obj, frameIndex) { if(!obj) return; } function onEndState_Atfrenzy_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_DEMONSLAYER_ATFRENZY){ sq_EndDrawCastGauge(obj); } } function onProc_Atfrenzy_bykk(obj) { if(!obj) return; } function onKeyFrameFlag_Atfrenzy_bykk(obj, flagIndex) { if (!obj) return; } function onProcCon_Atfrenzy_bykk(obj) { if(!obj) return; } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_WillPower_bykk(obj) { if(!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_WILLPOWER); if(isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(200, STATE_PRIORITY_IGNORE_FORCE, true); return true; } } function checkCommandEnable_WillPower_bykk(obj) { if(!obj) return false; return true; } function onSetState_WillPower_bykk(obj, state, datas, isResetTimer) { if(!obj) return; obj.sq_StopMove(); obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_WILLPOWER); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onKeyFrameFlag_WillPower_bykk(obj, flagIndex) { if(!obj) return; if(flagIndex == 1){ local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, 252, false, "character/atswordman/2_demonslayer/WillPower/ap_WillPower.nut", true); local skillLevel = sq_GetSkillLevel(obj, 252); local validTime = sq_GetLevelData(obj, 252, 0, skillLevel); appendage.setBuffIconImage(152); appendage.setEnableIsBuff(true); appendage.sq_SetValidTime(validTime); appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), 252, skillLevel); CNSquirrelAppendage.sq_Append(appendage, obj, obj); } } function onEndCurrentAni_WillPower_bykk(obj) { obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); } function onStart_appendage_weaponmastery_bykk(appendage) { local parentObj = appendage.getParent(); local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); local weaponType = obj.getWeaponSubType(); if(weaponType == -1) return; local skillIndex = [SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY, SKILL_SWORDMASTER_BYKK_BLADEMASTERY, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY]; local bonus = [4, 7, 8, 9]; local skill_level = sq_GetSkillLevel(obj, skillIndex[weaponType]); if(skill_level > 0){ local bonusRate = sq_GetLevelData(obj, skillIndex[weaponType], bonus[weaponType], skill_level); if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_PROMISEOFANTIQUITY) > 0){ local bonus = [0, 2, 4, 6]; local skillLevel = sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_PROMISEOFANTIQUITY); bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_PROMISEOFANTIQUITY, bonus[weaponType], skillLevel); } local change_appendage = appendage.sq_getChangeStatus("weaponMastery"); if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("weaponMastery",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, bonusRate); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (bonusRate * 0.1).tofloat()); } } local apdPath = []; switch(weaponType){ case 0: apdPath = ["character/atswordman/1_swordmaster/blademastery/ap_blademastery.nut","character/atswordman/1_swordmaster/bluntmastery/ap_bluntmastery.nut","character/atswordman/1_swordmaster/heavyswordmastery/ap_heavyswordmastery.nut"]; break; case 1: apdPath = ["character/atswordman/1_swordmaster/bluntmastery/ap_bluntmastery.nut","character/atswordman/1_swordmaster/heavyswordmastery/ap_heavyswordmastery.nut"]; break; case 2: apdPath = ["character/atswordman/1_swordmaster/blademastery/ap_blademastery.nut","character/atswordman/1_swordmaster/heavyswordmastery/ap_heavyswordmastery.nut"]; break; case 3: apdPath = ["character/atswordman/1_swordmaster/bluntmastery/ap_bluntmastery.nut","character/atswordman/1_swordmaster/blademastery/ap_blademastery.nut"]; break; } for(local i = 0; i < apdPath.len(); i++){ if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath[i])) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath[i]); } if(weaponType != 0){ local effectObj = obj.getVar("elementalsword").get_obj_vector(0); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); local state = colObj.getState(); switch(state % 10){ case 0: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/fire/fireswordend_04.ani", 0, 0, 0); break; case 1: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/ice/iceswordend_04.ani", 0, 0, 0); break; case 2: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/dark/darkswordend_04.ani", 0, 0, 0); break; case 3: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/light/lightswordend_04.ani", 0, 0, 0); break; } colObj.setValid(false); } } } function proc_appendage_weaponmastery_bykk(appendage) { local parentObj = appendage.getParent(); if(!parentObj){appendage.setValid(false); return;} } function onAttackParent_appendage_Bladesoul_bykk(appendage, realAttacker, damager,boundingBox, isStuck) { if(isStuck) return; print("test"); if(damager.isObjectType(OBJECTTYPE_ACTIVE) && CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/atswordman/1_swordmaster/bladesoul/ap_bladesoultar.nut")){ print("test2"); CNSquirrelAppendage.sq_RemoveAppendage(damager, "character/atswordman/1_swordmaster/bladesoul/ap_bladesoultar.nut") local parentObj = appendage.getParent(); if(!parentObj){appendage.setValid(false); return;} local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); local skill_level = sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADESOUL) local bufftime = sq_GetLevelData(obj,SKILL_SWORDMASTER_BYKK_BLADESOUL, 1, skill_level); local apdPath = "character/atswordman/1_swordmaster/bladesoul/ap_bladesoulbuff.nut"; local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, apdPath); if(!addAppendage){ addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true); getDamageRate_Swordmaster_bykk(obj); } addAppendage.sq_SetValidTime(bufftime); addAppendage.setEnableIsBuff(true); addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), 15, sq_GetSkillLevel(obj, 15)); CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); } } function onEnd_appendage_weaponmastery_bykk(appendage) { local parentObj = appendage.getParent(); if(!parentObj){appendage.setValid(false); return;} local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD) > 0){ local loadSlot = obj.sq_GetSkillLoad(SKILL_SWORDMASTER_BYKK_DRAWSWORD); if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_SWORDMASTER_BYKK_DRAWSWORD); } if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT) > 0){ local loadSlot = obj.sq_GetSkillLoad(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT); if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT); } } function onAttackParent_appendage_Drawsword_bykk(appendage, realAttacker, damager, boundingBox, isStuck) { if(isStuck) return; local parentObj = appendage.getParent(); if(!parentObj){appendage.setValid(false); return;} local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); if(obj.getWeaponSubType() == 1 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY) > 0){ local timer = appendage.getVar("drawsword_time").get_ct_vector(0); local currentT = timer.Get(); if(currentT <= 300){ timer.Reset(); timer.Start(10000,0); if(appendage.getVar("drawsword_ap").getInt(10) >= sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY, 3)){ appendage.getVar("drawsword_ap").setInt(10, 0); local loadSlot = obj.sq_GetSkillLoad(SKILL_SWORDMASTER_BYKK_DRAWSWORD); if(!loadSlot) return; local skill_level = sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD); local maxCount = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD, 0, skill_level); if(loadSlot.getRemainLoadNumber() < maxCount) loadSlot.increaseLoadCount(1); } else appendage.getVar("drawsword_ap").setInt(10, appendage.getVar("drawsword_ap").getInt(10) + 1); } else appendage.getVar("drawsword_ap").setInt(10, 0); } } function onStart_appendage_Drawsword_bykk(appendage) { local parentObj = appendage.getParent(); if(!parentObj){appendage.setValid(false); return;} local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); appendage.getVar("drawsword_ap").setInt(10, 0); appendage.getVar("drawsword_time").clear_ct_vector(); appendage.getVar("drawsword_time").push_ct_vector(); } function proc_appendage_Drawsword_bykk(appendage) { local parentObj = appendage.getParent(); if(!parentObj){appendage.setValid(false); return;} local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); local skill_level = sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD); local maxCount = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD, 0, skill_level); local coolTime = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD, 1, skill_level); if(obj.getWeaponSubType() == 1 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY) > 0){ local bladeLevel = sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY); maxCount = maxCount + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY, 6, bladeLevel); coolTime = coolTime - sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY, 2); } if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE) > 0){ maxCount = maxCount + sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE, 0) } local loadSlot = obj.sq_GetSkillLoad(SKILL_SWORDMASTER_BYKK_DRAWSWORD); if(loadSlot){ local loadnumber = loadSlot.getRemainLoadNumber(); local skill_level = sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD); if(!loadSlot.isCooling()){ if(loadnumber < maxCount){ loadSlot.increaseLoadCount(1); if(loadSlot.getRemainLoadNumber() < maxCount) loadSlot.setStartCool(); } else if(loadnumber > maxCount) loadSlot.decreaseLoadCount(loadnumber - maxCount); } if(loadnumber > 0){ local sqrState = obj.getState(); local excludeState = [0,8,2,3,4,5,6,7,9,108,13,14,115,SKILL_SWORDMASTER_BYKK_OVERDRIVE,SKILL_SWORDMASTER_BYKK_CHANGESWORD]; for(local i = 0; i < excludeState.len(); i++){ if(sqrState == excludeState[i]) return; } // if(sqrState == 0 || sqrState == 8 || sqrState == 2 || sqrState == 3 || sqrState == 4 || sqrState == 5 || sqrState == 108 || sqrState == 6 || sqrState == 7 || sqrState == 14 || sqrState == 115 || sqrState == SKILL_SWORDMASTER_BYKK_OVERDRIVE || sqrState == SKILL_SWORDMASTER_BYKK_CHANGESWORD) return; if(sqrState == SKILL_SWORDMASTER_BYKK_JACKCATCH && obj.getSkillSubState() > 0 && obj.getSkillSubState() < 7){ for(local i = 0; i < 255; i++){ obj.setSkillCommandEnable(i, false); } return; } local skillIndex = [SKILL_SWORDMASTER_BYKK_ATFLASH, SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, SKILL_SWORDMASTER_BYKK_COUNTERSLASH, SKILL_SWORDMASTER_BYKK_DEVILSLASH, SKILL_SWORDMASTER_BYKK_DRAGONUPEX, SKILL_SWORDMASTER_BYKK_EXCALIBUR, SKILL_SWORDMASTER_BYKK_FUSIONBLADE, SKILL_SWORDMASTER_BYKK_HALFMOON, SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE, SKILL_SWORDMASTER_BYKK_JACKCATCH, SKILL_SWORDMASTER_BYKK_LAEVATEINN, SKILL_SWORDMASTER_BYKK_THUNDERSLASH, SKILL_SWORDMASTER_BYKK_TIMESLASH, SKILL_SWORDMASTER_BYKK_UPPERSLASH, 32,143,86,145]; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) skillIndex.push(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT); for(local i = 0; i < skillIndex.len(); i++){ if(!sq_GetSkill(obj, skillIndex[i]).isInCoolTime()){ obj.setSkillCommandEnable(skillIndex[i], true); local b_useskill = obj.sq_IsEnterSkill(skillIndex[i]); if(b_useskill != -1){ if(obj.getState() == 132) { if(skillIndex[i] == 32){ obj.getVar("DrawswordSet").setBool(0, true); return; } else{ obj.getVar("DrawswordSet").setBool(0, false); print("set here"); } } print("test : "+obj.getVar("DrawswordSet").getBool(0)); if(loadnumber == maxCount && obj.getVar("DrawswordSet").getBool(0) == false){ loadSlot.decreaseLoadCount(1); print("set decreaseLoadCount"); loadSlot.setStartCool(); } else if(obj.getVar("DrawswordSet").getBool(0) == false){ loadSlot.decreaseLoadCount(1); print("set decreaseLoadCount"); loadSlot.setStartCool(); } local skillbonusRate = 1; if(obj.getWeaponSubType() == 1 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY) > 0){ obj.getVar("Drawsword_cooltime").setBool(0, true); obj.getVar("Drawsword_skill").setBool(0, true); } local skill_level = sq_GetSkillLevel(obj, skillIndex[i]); obj.startSkillCoolTime(skillIndex[i], skill_level, -1); switch(sqrState){ case SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE://所有魔剑同时爆炸。 // sq_setCurrentAxisPos(obj, 2, 0); // local subState = obj.getSkillSubState(); // local circleObj = obj.getVar("breakSwordDance_circle").get_obj_vector(0); // if(circleObj){ // local colObj = sq_GetCNRDObjectToCollisionObject(circleObj); // colObj.addSetStatePacket(21, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); // } // for(local i = subState; i < 9; i++){ // local swrodObj = obj.getVar("breakSwordDance_sword"+i.tostring()).get_obj_vector(0); // if(swrodObj){ // local colObj = sq_GetCNRDObjectToCollisionObject(swrodObj); // colObj.addSetStatePacket(21, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); // } // } // local x = [0,210,147,99,153,142,234,250,250], y = [0,0,0,0,0,0,0,0,0], z = [0,61,156,47,94,75,12,55,0]; // local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, -1, 3, 1.0) + 100; // local element = 4; // local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); // if(AddAppendage) element = AddAppendage.getVar("elementIndex").getInt(10); // local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, 8); // if(obj.getVar("breaksworddance_stone").getBool(0)){ // totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, -1, 2, 1.0) + 100; // totalDamage = totalDamage * 250 / 100; // sizeRate = sizeRate + 30; // cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,x[8],y[8] + 1,z[8]-sq_GetZPos(obj),obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE,11,totalDamage,sizeRate,0,0,0,0,0,0,1); // } // else{ // for(local i = 1; i < 9; i++){ // if(i >= 1 && i <= 7) // cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,x[i],y[i],z[i],obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE,10,totalDamage,element,sizeRate,0,0,0,0,0,1); // else{ // totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, -1, 2, 1.0) + 100; // cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,x[i],y[i] + 1,z[i]-sq_GetZPos(obj),obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE,11,totalDamage,sizeRate,0,0,0,0,0,0,1); // } // } // } local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, -1, 2, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE).tofloat() / 100.0); local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, 9); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,375,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE,20,totalDamage,sizeRate,0,0,0,0,0,0,1); break; case SKILL_SWORDMASTER_BYKK_DEVILSLASH://释放最后爆炸 if(sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, 16) > 0 || DEVILSALSH_STONE > 0 || sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD, 31) > 0){ local attackObj = obj.getVar("devilSlash_atk").get_obj_vector(0); if(attackObj) attackObj.setValid(false); local element = 4; local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); if(AddAppendage) element = AddAppendage.getVar("elementIndex").getInt(10); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_DEVILSLASH, -1, 5, 1.0) + 100; local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DEVILSLASH, 18) + 30; if(obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0){ totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 3, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY))) / 100; sizeRate = sizeRate * sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY, 13, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY)) / 100; } cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,100,0,20,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_DEVILSLASH,2,totalDamage,sizeRate,element,0,0,0,0,0,1); } break; case SKILL_SWORDMASTER_BYKK_DRAGONUPEX://直接释放 break; case SKILL_SWORDMASTER_BYKK_JACKCATCH: sq_SimpleMoveToNearMovablePos(obj,400); local size = obj.getVar("jackCatch_tar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("jackCatch_tar").get_obj_vector(i); if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/1_swordmaster/jackcatch/ap_jackcatch.nut"); } } local effectObj = obj.getVar("jackCatch_circle").get_obj_vector(0); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); colObj.addSetStatePacket(22, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); } local VarName = ["jackCatch_circle_light","jackCatch_circle_fire","jackCatch_circle_ice","jackCatch_circle_dark"]; for(local i = 0; i < VarName.len(); i++){ local effectObj = obj.getVar(VarName[i]).get_obj_vector(0); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); colObj.setValid(false); } } break; case SKILL_SWORDMASTER_BYKK_LAEVATEINN: break; case SKILL_SWORDMASTER_BYKK_TIMESLASH: obj.sq_SetXScrollStop(0); local flashScreenObj = obj.getVar("flashobj").getObject(0); if(flashScreenObj){ local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); if(pflashScreen) pflashScreen.fadeOut(); } if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_TIMESLASH)) sq_SetCustomDamageType(obj, true, 0); break; } switch(skillIndex[i]){ case SKILL_SWORDMASTER_BYKK_ATFLASH: obj.sq_IntVectClear(); if(obj.getWeaponSubType() == 1 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY) > 0) obj.sq_IntVectPush(2); else obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_SWORDMASTER_BYKK_ATFLASH, STATE_PRIORITY_IGNORE_FORCE, true); break; case SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE: // obj.getVar("breaksworddance_tar").clear_obj_vector(); // if(sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, 7) > 0 || BREAKSWORDDANCE_STONE > 0 || sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD, 34) > 0) obj.getVar("breaksworddance_stone").setBool(0, true); // else obj.getVar("breaksworddance_stone").setBool(0, false); obj.sq_IntVectClear(); obj.sq_IntVectPush(10); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, STATE_PRIORITY_IGNORE_FORCE, true); break; case SKILL_SWORDMASTER_BYKK_COUNTERSLASH: obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(144, STATE_PRIORITY_IGNORE_FORCE, true); break; case SKILL_SWORDMASTER_BYKK_DEVILSLASH: if(obj.getWeaponSubType() == 1 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY) > 0){ obj.getVar("charge_devilslash").setInt(10, 2); obj.getVar("chargeatk_devilslash").setBool(0, true); obj.sq_IntVectClear(); obj.sq_IntVectPush(3); } else{ obj.getVar("charge_devilslash").setInt(10, 0); obj.sq_IsEnterSkillLastKeyUnits(SKILL_SWORDMASTER_BYKK_DEVILSLASH); obj.getVar("chargeatk_devilslash").setBool(0, false); obj.getVar("isDash_devilslash").setBool(0, false); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); } obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DEVILSLASH, STATE_PRIORITY_IGNORE_FORCE, true); break; case SKILL_SWORDMASTER_BYKK_DRAGONUPEX: obj.sq_IntVectClear(); if(sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAGONUPEX, 20) > 0 || DRAGONUPEX_STONE > 0 || sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD, 32) > 0) obj.sq_IntVectPush(3); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_DRAGONUPEX, STATE_PRIORITY_IGNORE_FORCE, true); break; case SKILL_SWORDMASTER_BYKK_EXCALIBUR: obj.sq_IntVectClear(); if(obj.getWeaponSubType() == 2 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY) > 0) obj.sq_IntVectPush(11); else obj.sq_IntVectPush(10); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_EXCALIBUR, STATE_PRIORITY_IGNORE_FORCE, true); break; case SKILL_SWORDMASTER_BYKK_FUSIONBLADE: obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_FUSIONBLADE, STATE_PRIORITY_IGNORE_FORCE, true); break; case SKILL_SWORDMASTER_BYKK_HALFMOON: if(obj.getWeaponSubType() == 1 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY) > 0){ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_ATFLASH, -1, 1, 1.0) + 100; local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_ATFLASH, 0); local sub = 4; local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); if(AddAppendage) sub = AddAppendage.getVar("elementIndex").getInt(10); sizeRate = sizeRate * 150 / 100; cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_ATFLASH,3,totalDamage,sizeRate,-30,sub,0,0,0,0,1); obj.getVar("halfmoon_max").setBool(0, true); obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_HALFMOON, STATE_PRIORITY_IGNORE_FORCE, true); } else{ obj.getVar("halfmoon_max").setBool(0, false); obj.getVar("halfmoon_bool").setBool(0, false); obj.getVar("halfmoon_bool").setBool(1, false); obj.sq_IsEnterSkillLastKeyUnits(SKILL_SWORDMASTER_BYKK_HALFMOON); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_HALFMOON, STATE_PRIORITY_IGNORE_FORCE, true); } break; case SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE: obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE, STATE_PRIORITY_IGNORE_FORCE, true); break; case SKILL_SWORDMASTER_BYKK_JACKCATCH: obj.getVar("jackCatch_tar").clear_obj_vector(); obj.sq_IntVectClear(); if(sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_JACKCATCH, 11) > 0 || JACKCATCH_STONE > 0 || sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD, 33) > 0) obj.sq_IntVectPush(7); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_JACKCATCH, STATE_PRIORITY_IGNORE_FORCE, true); break; case SKILL_SWORDMASTER_BYKK_LAEVATEINN: obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_LAEVATEINN, STATE_PRIORITY_IGNORE_FORCE, true); break; case SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT: if(sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 6) < 1 || MAGICSWORDSHOOT_STONE < 1) obj.sq_IsEnterSkillLastKeyUnits(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, STATE_PRIORITY_IGNORE_FORCE, true); break; case SKILL_SWORDMASTER_BYKK_THUNDERSLASH: obj.getVar("thunderslash_target").clear_obj_vector(); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_SWORDMASTER_BYKK_THUNDERSLASH, STATE_PRIORITY_IGNORE_FORCE, true); break; case SKILL_SWORDMASTER_BYKK_TIMESLASH: obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_TIMESLASH, STATE_PRIORITY_IGNORE_FORCE, true); break; case SKILL_SWORDMASTER_BYKK_UPPERSLASH: obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_UPPERSLASH, STATE_PRIORITY_IGNORE_FORCE, true); break; case 86: CheckUseAddloadDrawsword(obj,143,{[0] = true,[108] = true,[14] = true},0); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(86, STATE_PRIORITY_IGNORE_FORCE, true); break; case 143: CheckUseAddloadDrawsword(obj,143,{[0] = true,[108] = true,[14] = true},0); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(143, STATE_PRIORITY_IGNORE_FORCE, true); break; case 32: CheckUseAddloadDrawsword(obj,143,{[0] = true,[108] = true,[14] = true},0); obj.sq_StopMove(); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(132, STATE_PRIORITY_IGNORE_FORCE, true); local excount = 0; if(sq_GetSkillLevel(obj, 58) > 0) excount = 2; obj.getVar("Chainslash").clear_vector(); obj.getVar("Chainslash").push_vector(sq_GetLevelData(obj,32, 2, sq_GetSkillLevel(obj, 32))-1 + excount); break; case 145: obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(145, STATE_PRIORITY_IGNORE_FORCE, true); break; } } } } } } else obj.sq_AddSkillLoad(SKILL_SWORDMASTER_BYKK_DRAWSWORD, 50, maxCount, coolTime); } function onEnd_appendage_Drawsword_bykk(appendage) { local parentObj = appendage.getParent(); if(!parentObj){appendage.setValid(false); return;} local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); if(obj.sq_GetSkillLoad(SKILL_SWORDMASTER_BYKK_DRAWSWORD)) obj.sq_RemoveSkillLoad(SKILL_SWORDMASTER_BYKK_DRAWSWORD); } function onStart_appendage_Overdrive_bykk(appendage) { local parentObj = appendage.getParent(); local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); getDamageRate_Swordmaster_bykk(obj); local skill_level = sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_OVERDRIVE); local CRITICAL_HIT_RATE = obj.sq_GetLevelData(SKILL_SWORDMASTER_BYKK_OVERDRIVE, 2, skill_level); local CRITICAL_DAMAGE_RATE = obj.sq_GetLevelData(SKILL_SWORDMASTER_BYKK_OVERDRIVE, 1, skill_level); local change_appendage = appendage.sq_getChangeStatus("Overdrive"); if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("Overdrive",obj, obj, 0, 15, false, CRITICAL_HIT_RATE); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, CRITICAL_HIT_RATE.tofloat()); //change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_DAMAGE_RATE, false, (CRITICAL_DAMAGE_RATE * 0.1 / 0.667).tofloat()); } } function getSkillbounsRate_bykk(obj, skillIndex2) { local skillbonusRate = 100; local weaponType = obj.getWeaponSubType(); if(weaponType == 0 && obj.getVar("elementalsword").get_obj_vector_size() > 0){ skillbonusRate = 100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY, 5, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY)) / 10; print("skillbonusRate = "+skillbonusRate); return skillbonusRate; } local apdPath = ["","character/atswordman/1_swordmaster/blademastery/ap_blademastery.nut","character/atswordman/1_swordmaster/bluntmastery/ap_bluntmastery.nut","character/atswordman/1_swordmaster/heavyswordmastery/ap_heavyswordmastery.nut"]; local skillIndex = [-1,SKILL_SWORDMASTER_BYKK_BLADEMASTERY, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY]; local buffnumber = [0,5,13,12]; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath[weaponType])){ if(weaponType == 1) skillbonusRate = 100 + sq_GetLevelData(obj, skillIndex[weaponType], buffnumber[weaponType], sq_GetSkillLevel(obj, skillIndex[weaponType])); else skillbonusRate = 100 + sq_GetLevelData(obj, skillIndex[weaponType], buffnumber[weaponType], sq_GetSkillLevel(obj, skillIndex[weaponType])) / 10; } print("skillbonusRate = "+skillbonusRate); return skillbonusRate; } function blademastery_buff(obj) { local apdPath = "character/atswordman/1_swordmaster/blademastery/ap_blademastery.nut"; if(obj.getVar("Drawsword_skill").getBool(0)){ obj.getVar("Drawsword_skill").setBool(0, false); if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)){ local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true); addAppendage.setEnableIsBuff(true); addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_SWORDMASTER_BYKK_BLADEMASTERY, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY)); CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true); obj.getVar("Drawsword_skill").setBool(0, false); } } else{ if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath); } } function checkExecutableSkill_Atflash_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_ATFLASH); if(isUse){ obj.sq_IntVectClear(); if(obj.getWeaponSubType() == 1 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY) > 0) obj.sq_IntVectPush(2); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_SWORDMASTER_BYKK_ATFLASH, STATE_PRIORITY_IGNORE_FORCE, true); obj.startSkillCoolTime(SKILL_SWORDMASTER_BYKK_ATFLASH, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_ATFLASH), -1); return true; } return false; } function checkCommandEnable_Atflash_bykk(obj) { if (!obj) return false; return true; } function onSetState_Atflash_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); local aniSet = [93,94,95]; local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD), apdPath = "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath) && !skill.isSealFunction()) aniSet = [279,280,281]; local effSet = ["flash1","flash2","flash3_flash2"]; obj.sq_SetCurrentAnimation(aniSet[subState]); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); changeSwordEffect_bykk(obj, effSet[subState], SKILL_SWORDMASTER_BYKK_ATFLASH); if(subState == 0){ if(obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0) sq_SetCustomDamageType(obj, true, 1); } else obj.sq_PlaySound("SW_FLASH"); } function onEndCurrentAni_Atflash_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_SWORDMASTER_BYKK_ATFLASH, STATE_PRIORITY_IGNORE_FORCE, true); break; case 1: case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Atflash_bykk(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return false; if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ isMagicSwordUp_Attack(obj,damager,boundingBox); } } function onEnterFrame_Atflash_bykk(obj, frameIndex) { if(!obj) return; } function onEndState_Atflash_bykk(obj, newState) { if(!obj) return; if(newState != STATE_SWORDMASTER_BYKK_ATFLASH){ if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_HEAVYSWORDMASTERY) > 0 && obj.getWeaponSubType() == 3) sq_SetCustomDamageType(obj, true, 0); blademastery_buff(obj); } } function onKeyFrameFlag_Atflash_bykk(obj, flagIndex) { if (!obj) return; switch(flagIndex){ case 1: case 2: case 3: case 4: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_ATFLASH, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_ATFLASH).tofloat() / 100.0) + 100; local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_ATFLASH, 0); local sub = 4, level = sq_GetSkillLevel(obj, 174) + 5,prob = 0, time = 0, damage = 0; local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); if(AddAppendage) sub = AddAppendage.getVar("elementIndex").getInt(10); if(sub < 4){ local skill_level = sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_ATFLASH); switch(sub){ case 0: prob = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_ATFLASH, 3, skill_level); time = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_ATFLASH, 5, skill_level); damage = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_ATFLASH, 4, skill_level); break; case 1: prob = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_ATFLASH, 7, skill_level); time = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_ATFLASH, 9, skill_level); damage = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_ATFLASH, 8, skill_level); break; case 2: prob = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_ATFLASH, 15, skill_level); time = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_ATFLASH, 17, skill_level); break; case 3: prob = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_ATFLASH, 11, skill_level); time = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_ATFLASH, 13, skill_level); damage = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_ATFLASH, 12, skill_level); break; } if(obj.getWeaponSubType() == 0 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY) > 0){ local skillLevel = sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY); prob = prob * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY, 2, skillLevel)) / 100; damage = damage * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY, 3, skillLevel)) / 100; } } local roate = 0; if(flagIndex == 4){sizeRate = sizeRate * 130 / 100; roate = 10}; cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_ATFLASH,flagIndex,totalDamage,sizeRate,roate,sub,level,prob,time,damage,1); break; } } function onTimeEvent_Atflash_bykk(obj, timeEventIndex, timeEventCount) {} function onProcCon_Atflash_bykk(obj) { if(!obj) return; } function onProc_Atflash_bykk(obj) { if(!obj) return; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Atspeedslash_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(145); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(145, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Atspeedslash_bykk(obj) { if (!obj) return false; return true; } function onSetState_Atspeedslash_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); switch(subState){ case 0: obj.sq_StopMove(); local aniSet = [73]; local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD), apdPath = "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath) && !skill.isSealFunction()) aniSet = [317]; obj.sq_SetCurrentAnimation(aniSet[subState]); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local effSet = ["SpeedSlash"]; changeSwordEffect_bykk(obj, effSet[subState], 145); obj.sq_SetCurrentAttackInfo(59); local bonus = obj.sq_GetBonusRateWithPassive(145, -1, 0, 1.0) + 100; obj.sq_SetCurrentAttackBonusRate(bonus); local posX = sq_GetDistancePos(obj.getXPos(), obj.getDirection(), sq_GetLevelData(obj,145, 1, sq_GetSkillLevel(obj, 145))); obj.getVar("Atspeedslash").clear_vector(); obj.getVar("Atspeedslash").push_vector(posX); obj.getVar("Atspeedslash").setBool(0,false); setWeaponMaster_attackElement(obj); break; } } function onEndCurrentAni_Atspeedslash_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Atspeedslash_bykk(obj, damager, boundingBox, isStuck) { if(!obj) return false; if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ isMagicSwordUp_Attack(obj,damager,boundingBox); } local subState = obj.getSkillSubState(); switch(subState){ case 0: MagicswordupOccur(obj, damager, boundingBox, isStuck); //MagicSword_BasiconAttack(obj, damager, boundingBox, isStuck); local path = "character/atswordman/1_swordmaster/atspeedslash/ap_atspeedslash.nut"; local forceap = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, path, true); if(sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager) && !sq_IsFixture(damager)) if(forceap){ sq_HoldAndDelayDie(damager, obj, true, false, true, 200, 150, ENUM_DIRECTION_NEUTRAL, forceap); local appendageInfo = forceap.getAppendageInfo(); appendageInfo.setValidTime(500); } break; } } function onEnterFrame_Atspeedslash_bykk(obj, frameIndex) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState) { case 3: break; case 4: break; } } function onEndState_Atspeedslash_bykk(obj, newState) { if(!obj) return; if(newState != 145) blademastery_buff(obj); } function onChangeSkillEffect_Atspeedslash_bykk(obj, skillIndex, reciveData) { if(!obj || skillIndex != 145) return; if(obj.getVar("Atspeedslash").getBool(0)) return; obj.getVar("Atspeedslash").setBool(0,true); local curani = obj.getCurrentAnimation(); sq_SetAnimationCurrentTimeByFrame(curani, 5, true); } function onKeyFrameFlag_Atspeedslash_bykk(obj, flagIndex) {} function onTimeEvent_Atspeedslash_bykk(obj, timeEventIndex, timeEventCount) {} function onProcCon_Atspeedslash_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState) { case 0: if(obj.getVar("Atspeedslash").getBool(0)) return; local curani = obj.getCurrentAnimation(); local poleFrmIndex = obj.sq_GetCurrentFrameIndex(curani); obj.setSkillCommandEnable(145, true); if(obj.sq_IsEnterSkill(145) != -1 && poleFrmIndex < 4) { sq_BinaryStartWrite(); sq_SendChangeSkillEffectPacket(obj, 145); } break; } } function onProc_Atspeedslash_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState) { case 0: if(obj.getVar("Atspeedslash").getBool(0)) break; local XPOS = obj.getVar("Atspeedslash").get_vector(0); local curani = obj.getCurrentAnimation(); local aniSumTime = sq_GetDelaySum(curani); local ststeTime = obj.sq_GetStateTimer(); local CelXpos = sq_GetAccel(obj.getXPos(), XPOS, ststeTime, aniSumTime, false); if(obj.isMovablePos(CelXpos, obj.getYPos())) sq_setCurrentAxisPos(obj, 0, CelXpos); break; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Breaksworddance_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE); if (isUse){ // obj.getVar("breaksworddance_tar").clear_obj_vector(); // if(sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, 7) > 0 || BREAKSWORDDANCE_STONE > 0 || sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_DRAWSWORD, 34) > 0) obj.getVar("breaksworddance_stone").setBool(0, true); // else obj.getVar("breaksworddance_stone").setBool(0, false); obj.sq_IntVectClear(); obj.sq_IntVectPush(10); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Breaksworddance_bykk(obj) { if (!obj) return false; return true; } function onSetState_Breaksworddance_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); obj.sq_ZStop(); if(subState >= 10){ switch(subState){ case 10: obj.sq_SetCurrentAnimation(754); 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 = 6000 / currentAni.getDelaySum(0, 0); obj.getVar("breaksworddanceSet").setInt(0, speedRate); local aniPath = ["passiveobject/atswordman_bykk/newswordmaster/animation/atbreaksworddance/newatbreaksworddancefront_00.ani","passiveobject/atswordman_bykk/newswordmaster/animation/atbreaksworddance/newatbreaksworddanceback_00.ani","passiveobject/atswordman_bykk/newswordmaster/animation/atbreaksworddance/newatbreaksworddancebottom_00.ani"] for(local i = 0; i < 3; i++){ local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath[i], 375, 0, 0); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); if(i == 2) sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); } obj.sq_SetXScrollStart(375, 200); break; case 11: obj.sq_SetCurrentAnimation(752); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/10_atswordman_bykk/atbreaksworddance/newatbreaksworddancestarteffect_00.ani", -750, 0, 0); sq_flashScreen(obj, 40, 120, 40, 76, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_flashScreen(obj, 0, 600, 0, 127, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 5, 120); //[OFFSET] `EffectPos` 88 0 63 sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/10_atswordman_bykk/atbreaksworddance/newatbreaksworddancedasheffect_00.ani", 88, 0, 0); obj.sq_SetCurrentAttackInfo(238); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE).tofloat() / 100.0); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 12: obj.sq_SetCurrentAnimation(753); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); //[OFFSET] `EffectPos` 0 0 -47 local speedRate = obj.getVar("breaksworddanceSet").getInt(0); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/10_atswordman_bykk/atbreaksworddance/newatbreaksworddanceendeffect_00.ani", 0, 0, -47); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); sq_SetMyShake(obj, 5, 120); obj.sq_SetCurrentAttackInfo(239); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE).tofloat() / 100.0); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(0, 2); obj.setTimeEvent(10, delay / 10, 8, true); break; } return; } local aniSet = [135,136,137,138,139,140,141,142,143]; local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD), apdPath = "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath) && !skill.isSealFunction()) aniSet = [256,249,250,251,252,253,254,255,257]; local effSet = ["breaksworddance_cast","breaksworddance_attack1","breaksworddance_attack2","breaksworddance_attack3","breaksworddance_attack4","breaksworddance_attack5","breaksworddance_attack6","breaksworddance_attack7","breaksworddance_finishattack"]; obj.sq_SetCurrentAnimation(aniSet[subState]); changeSwordEffect_bykk(obj, effSet[subState], SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE); local currentAni = obj.getCurrentAnimation(); if(subState > 1){ obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local inputConut = obj.getRapidInputFrequency(); inputConut = inputConut.tointeger(); if(inputConut > 2) currentAni.setSpeedRate(180.0); } switch(subState){ case 0: local baseX = sq_GetXPos(obj); local baseY = sq_GetYPos(obj); local direction = obj.getDirection(); local moveX = [0,600,200,390,400,220,600,0], moveY = [0,0,65,-65,65,-65,0,0]; for(local i = 1; i < 8; i++){ obj.getVar("breakSwordDance_move").setInt(20 + i, sq_GetDistancePos(baseX ,direction, moveX[i])); obj.getVar("breakSwordDance_move").setInt(30 + i, baseY + moveY[i]); } obj.getVar("breakSwordDance_move").setInt(100, sq_GetXPos(obj)); obj.getVar("breakSwordDance_move").setInt(101, sq_GetYPos(obj)); local x = [100,100,200,200,300,400,400,500], y = [-25,15,-55,45,0,-55,45,0], sub = [7,8,5,2,1,3,4,6]; cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,300,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE,1,0,0,0,0,0,0,0,0,0); for(local i = 0; i < x.len(); i++){ cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,x[i],y[i],0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE,2,sub[i],0,0,0,0,0,0,0,0); } local flashObj = sq_flashScreen(obj,100,999999,0,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); obj.getVar("breakSwordDance_flash").clear_obj_vector(); obj.getVar("breakSwordDance_flash").push_obj_vector(flashObj); break; case 1: obj.getVar("breakSwordDance_move").setInt(1, sq_GetXPos(obj)); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(0,1); obj.setTimeEvent(1, delaySum / 11, 10, false); break; case 8: local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(0,2); obj.setTimeEvent(2, delaySum, 1, false); local circleObj = obj.getVar("breakSwordDance_circle").get_obj_vector(0); if(circleObj){ local colObj = sq_GetCNRDObjectToCollisionObject(circleObj); colObj.addSetStatePacket(21, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); } break; } if(subState > 1 && subState < 8){ local moveX = obj.getVar("breakSwordDance_move").getInt(20 + subState); local moveY = obj.getVar("breakSwordDance_move").getInt(30 + subState); sq_setCurrentAxisPos(obj, 0, moveX); sq_setCurrentAxisPos(obj, 1, moveY); if(subState % 2 == 0) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atbreaksworddance/atbreaksworddance_dash_dust.ani", 0, 0, 0); else sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atbreaksworddance/atbreaksworddance_dash_dust2.ani", 0, 0, 0); } if(subState > 0 && subState <= 8){ local swrodObj = obj.getVar("breakSwordDance_sword"+subState.tostring()).get_obj_vector(0); if(swrodObj){ local colObj = sq_GetCNRDObjectToCollisionObject(swrodObj); colObj.addSetStatePacket(21, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); } } } function onEndCurrentAni_Breaksworddance_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 10: case 11: if(subState == 7) sq_setCurrentAxisPos(obj, 2, 200); obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, STATE_PRIORITY_IGNORE_FORCE, true); break; case 12: case 8: sq_SimpleMoveToNearMovablePos(obj, 1200); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Breaksworddance_bykk(obj, damager, boundingBox, isStuck) { if(!obj) return false; if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ isMagicSwordUp_Attack(obj,damager,boundingBox); } } function onEnterFrame_Breaksworddance_bykk(obj, frameIndex) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: switch(frameIndex){ case 0: obj.sq_PlaySound("BREAK_SWORDDANCE_CAST"); obj.sq_PlaySound("SW_BREAK_SWORDDANCE_01"); break; } break; case 1: switch(frameIndex){ case 0: obj.sq_PlaySound("BREAK_SWORDDANCE_MOVE"); break; } break; case 8: switch(frameIndex){ case 0: obj.sq_PlaySound("SW_BREAK_SWORDDANCE_02"); break; } break; } } function onEndState_Breaksworddance_bykk(obj, newState) { if(!obj) return; local subState = obj.getSkillSubState(); if(newState != SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE){ obj.sq_SetXScrollStop(100); local flashScreenObj = obj.getVar("breakSwordDance_flash").get_obj_vector(0); if(flashScreenObj){ local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); if(pflashScreen) pflashScreen.fadeOut(); } sq_flashScreen(obj,0,0,300,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); blademastery_buff(obj); local includeState = [2,3,4,5,9]; for(local i = 0; i < includeState.len(); i++){ if(newState == includeState[i]){ local subState = 0; local circleObj = obj.getVar("breakSwordDance_circle").get_obj_vector(0); if(circleObj){ local colObj = sq_GetCNRDObjectToCollisionObject(circleObj); colObj.addSetStatePacket(21, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); } for(local i = subState; i < 9; i++){ local swrodObj = obj.getVar("breakSwordDance_sword"+i.tostring()).get_obj_vector(0); if(swrodObj){ local colObj = sq_GetCNRDObjectToCollisionObject(swrodObj); colObj.addSetStatePacket(21, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); } } } } } } function onProc_Breaksworddance_bykk(obj) { if(!obj) return; } function onKeyFrameFlag_Breaksworddance_bykk(obj, flagIndex) { if(!obj) return; local subState = obj.getSkillSubState(); switch(flagIndex){ case 1: obj.sq_PlaySound("R_SW_BREAK_SWORDDANCE_ATK"); local shekepower = [0,5,5,16,5,16,5,5,5], sheketime = [0,300,300,120,300,120,300,360,360], flash_alpha = [0,76,102,76,102,76,102,76,178]; sq_flashScreen(obj, 0, 60, 0, flash_alpha[subState], sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); if(subState >= 1 && subState < 6) sq_SetMyShake(obj, shekepower[subState], sheketime[subState]); else if(subState >= 6 && subState < 8) sq_SetShake(obj, shekepower[subState], sheketime[subState]); local x = [0,-210,147,-99,-153,142,-234,250,250], y = [0,0,0,0,0,0,0,0,0], z = [0,61,156,-47,94,-75,12,55,0]; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, -1, 1, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE).tofloat() / 100.0) + 100; local element = 4; local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); if(AddAppendage) element = AddAppendage.getVar("elementIndex").getInt(10); local sizeRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, 8); if(subState >= 1 && subState <= 7) cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,x[subState],y[subState],z[subState],obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE,10,totalDamage,element,sizeRate,0,0,0,0,0,1); else if(subState == 8){ totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, -1, 2, 1.0) + 100; if(obj.getVar("breaksworddance_stone").getBool(0)){ totalDamage = totalDamage * 250 / 100; sizeRate = sizeRate + 30; } cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,x[subState],y[subState] + 1,z[subState]-sq_GetZPos(obj),obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE,11,totalDamage,sizeRate,0,0,0,0,0,0,1); } break; case 11: sq_flashScreen(obj, 300, 300, 100, 127, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 6, 240); break; case 12: local xPos = sq_GetXPos(obj); obj.getVar("breakSwordDance_setmove").setInt(0, xPos); local dstX = sq_GetDistancePos(xPos, sq_GetDirection(obj), 750); sq_setCurrentAxisPos(obj, 0, dstX); obj.sq_SetCurrentAttackInfo(237); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, -1, 0, getSkillbounsRate_bykk(obj, SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE).tofloat() / 100.0); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.sq_PlaySound("SWORDMASTER_BREAK_SWORDDANCE_DASH_OUT"); obj.sq_PlaySound("SW_BREAK_SWORDDANCE_02"); break; case 21: sq_flashScreen(obj, 40, 120, 50, 102, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); local xPos = obj.getVar("breakSwordDance_setmove").getInt(0); sq_setCurrentAxisPos(obj, 0, xPos); break; } } function onTimeEvent_Breaksworddance_bykk(obj, timeEventIndex, timeEventCount) { switch(timeEventIndex){ case 1: local v = sq_GetUniformVelocity(obj.getVar("breakSwordDance_move").getInt(1), obj.getVar("breakSwordDance_move").getInt(21), timeEventCount, 10); sq_setCurrentAxisPos(obj, 0, v); if(timeEventCount >= 10 && obj.getVar("breaksworddance_stone").getBool(0)){ sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atbreaksworddance/atbreaksworddance_jump_dust.ani", 0, 0, 0); sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 50)); sq_setCurrentAxisPos(obj, 2, 200); obj.setTimeEvent(4, 600, 1, false); obj.sq_IntVectClear(); obj.sq_IntVectPush(8); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE, STATE_PRIORITY_IGNORE_FORCE, true); break; } break; case 2: local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(3,3); obj.getVar("breakSwordDance_move").setInt(3, sq_GetZPos(obj)); obj.setTimeEvent(3, delaySum / 20, 20, false); break; case 3: local v = sq_GetUniformVelocity(obj.getVar("breakSwordDance_move").getInt(3), 0, timeEventCount, 20); sq_setCurrentAxisPos(obj, 2, v); break; case 4: for(local i = 1; i < 9; i++){ local swrodObj = obj.getVar("breakSwordDance_sword"+i.tostring()).get_obj_vector(0); if(swrodObj){ local colObj = sq_GetCNRDObjectToCollisionObject(swrodObj); colObj.addSetStatePacket(21, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); } } break; case 10: obj.resetHitObjectList(); break; } } function onProcCon_Breaksworddance_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); if(subState <= 7){ sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Changesword_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_SWORDMASTER_BYKK_CHANGESWORD); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_IntVectPush(0); obj.sq_IntVectPush(SKILL_SWORDMASTER_BYKK_CHANGESWORD); obj.sq_IntVectPush(sq_GetCastTime(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD))); obj.sq_IntVectPush(500); obj.sq_IntVectPush(0); obj.sq_IntVectPush(4); obj.sq_IntVectPush(4); obj.sq_IntVectPush(1000); obj.sq_IntVectPush(1000); obj.sq_IntVectPush(-1); obj.sq_AddSetStatePacket(STATE_THROW, STATE_PRIORITY_USER, true); obj.sq_PlaySound("R_SW_CHANGESWORD"); return true; } return false; } function checkCommandEnable_Changesword_bykk(obj) { if (!obj) return false; return true; } function onSetState_Changesword_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); switch(subState){ case 100: local throwIndex = obj.sq_GetVectorData(datas, 1); local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); if(!AddAppendage){ AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD, false, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut", true); } AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_SWORDMASTER_BYKK_CHANGESWORD, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD)); AddAppendage.setEnableIsBuff(true); CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); AddAppendage.setBuffIconImage(58); if(throwIndex < 100){//0短1太2钝3巨 AddAppendage.getVar("elementIndex").setInt(10, throwIndex); } else{ local element = AddAppendage.getVar("elementIndex").getInt(10); AddAppendage.getVar("elementIndex").setInt(10, throwIndex - 100); if(obj.getVar("elementalsword").get_obj_vector_size() < 1){ cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,-50,0,30,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_CHANGESWORD,0,element,0,0,0,0,0,0,0,0); } else{ if(throwIndex - 100 == element) break; local effectObj = obj.getVar("elementalsword").get_obj_vector(0); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); colObj.getVar("changeSword").setInt(11,element); switch(element){ case 0: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/fire/fireswordend_04.ani", 0, 0, 0); break; case 1: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/ice/iceswordend_04.ani", 0, 0, 0); break; case 2: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/dark/darkswordend_04.ani", 0, 0, 0); break; case 3: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/light/lightswordend_04.ani", 0, 0, 0); break; } colObj.setTimeEvent(100, 200, 1, false); } } } switch(throwIndex){ case 0: obj.sq_SetCurrentAnimation(68);changeSwordEffect_bykk(obj, "ChangeSwordFire", SKILL_SWORDMASTER_BYKK_CHANGESWORD); break; case 1: obj.sq_SetCurrentAnimation(69);changeSwordEffect_bykk(obj, "ChangeSwordIce", SKILL_SWORDMASTER_BYKK_CHANGESWORD); break; case 2: obj.sq_SetCurrentAnimation(70);changeSwordEffect_bykk(obj, "ChangeSwordDark", SKILL_SWORDMASTER_BYKK_CHANGESWORD); break; case 3: obj.sq_SetCurrentAnimation(71);changeSwordEffect_bykk(obj, "ChangeSwordLight", SKILL_SWORDMASTER_BYKK_CHANGESWORD); break; case 100: obj.sq_SetCurrentAnimation(261);changeSwordEffect_bykk(obj, "ChangeSwordFire", SKILL_SWORDMASTER_BYKK_CHANGESWORD); break; case 101: obj.sq_SetCurrentAnimation(262);changeSwordEffect_bykk(obj, "ChangeSwordIce", SKILL_SWORDMASTER_BYKK_CHANGESWORD); break; case 102: obj.sq_SetCurrentAnimation(260);changeSwordEffect_bykk(obj, "ChangeSwordDark", SKILL_SWORDMASTER_BYKK_CHANGESWORD); break; case 103: obj.sq_SetCurrentAnimation(263);changeSwordEffect_bykk(obj, "ChangeSwordLight", SKILL_SWORDMASTER_BYKK_CHANGESWORD); break; } local timer = obj.getVar("isChangeSword").get_ct_vector(0); if(!timer){ obj.getVar("isChangeSword").clear_ct_vector(); obj.getVar("isChangeSword").push_ct_vector(); timer = obj.getVar("isChangeSword").get_ct_vector(0); timer.Reset(); timer.Start(10000,0); } break; case 101: obj.sq_SetCurrentAnimation(347); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Changesword_bykk(obj) { if(!obj) return; obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); } function onProcCon_Changesword_bykk(obj) { if(!obj) return; } function drawChangeswordCommon_bykk(obj) { local index = obj.getVar("ChangeswordCurId").getInt(0); local obj = sq_GetCNRDObjectToSQRCharacter(obj); if(index == 0 || obj.getWeaponSubType() != 0 || sq_GetSkillLevel(obj, 4) < 1) return; local drawpath = [ "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/fire/fireswordloop_01.ani", "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/ice/iceswordloop_01.ani", "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/dark/darkswordloop_01.ani", "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/light/lightswordloop_01.ani" ]; local aniarr = ["ChangeswordFire","ChangeswordIce","ChangeswordDark","ChangeswordLight"]; local add = 1; if(obj.getDirection() == 1) add = -1; local width = sq_GetWidthObject(obj); local height = sq_GetHeightObject(obj); local screenX = sq_GetScreenXPos(obj) + add*50;// - (width / 2); local screenY = sq_GetScreenYPos(obj) - 50; local sq_var = obj.getVar(); local AniObj2 = sq_var.GetAnimationMap(aniarr[index - 1], drawpath[index - 1]); sq_AnimationProc(AniObj2); sq_drawCurrentFrame(AniObj2, screenX,screenY, false); return; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Counterslash_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(144); if (isUse) { obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(144, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Counterslash_bykk(obj) { if (!obj) return false; local apPath = "character/atswordman/1_swordmaster/counterslash/ap_counterslash.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apPath)) return true; return false; } function onSetState_Counterslash_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); switch(subState) { case 0: obj.sq_StopMove(); BodyMagicSword(obj, "CounterSlash"); if(MagicSword_IsAppebd(obj)) obj.sq_SetCurrentAnimation(264); else obj.sq_SetCurrentAnimation(72); obj.sq_SetCurrentAttackInfo(0); local bonus = obj.sq_GetBonusRateWithPassive(144, -1, 0,getATSwordmanBonus(obj,1.0,144)); obj.sq_SetCurrentAttackBonusRate(bonus); setWeaponMaster_attackElement(obj); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Counterslash_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState) { case 0: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Counterslash_bykk(obj, damager, boundingBox, isStuck) { if(!obj) return false; local subState = obj.getSkillSubState(); MagicswordupOccur(obj, damager, boundingBox, isStuck); MagicSword_BasiconAttack(obj, damager, boundingBox, isStuck); } function onProc_Counterslash_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); } function onEnterFrame_Counterslash_bykk_bykk(obj, frameIndex) {} function onEndState_Counterslash_bykk(obj, newState) {} function onKeyFrameFlag_Counterslash_bykk(obj, flagIndex) {} function onTimeEvent_Counterslash_bykk(obj, timeEventIndex, timeEventCount) {} function onProcCon_Counterslash_bykk(obj) {}