//BlackMirror function checkExecutableSkill_BlackMirror_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_BLACKMIRROR); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_BLACKMIRROR, STATE_PRIORITY_IGNORE_FORCE, true); AIMPOINT_ATSWORDMAN = 69; return 1; } return 0; } function onSetState_BlackMirror_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_SetCurrentAnimation(ANIMATION_DARKEMPLER_BLACKMIRRORCAST); obj.sq_PlaySound("SW_BLACK_MIRROR"); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local DelaySum = sq_GetDelaySum(obj.getCurrentAnimation()); sq_StartDrawCastGauge(obj, DelaySum, true); local timeRate = 104000 / DelaySum; local offsetX = 100; offsetX = obj.sq_GetDistancePos(obj.getXPos(), obj.sq_GetDirection(), offsetX); local vX = sq_GetIntData(obj, SKILL_DARKEMPLER_BLACKMIRROR, 2) * timeRate / 100; local vY = sq_GetIntData(obj, SKILL_DARKEMPLER_BLACKMIRROR, 2) / 2 * timeRate / 100; obj.sq_AddAimPointMark(offsetX, obj.getYPos(), vX, vY); break; } } function onEndCurrentAni_BlackMirror_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: local Xpos = obj.sq_GetAimPosX(obj.getXPos(), obj.getYPos(), false) - sq_GetXPos(obj); local Ypos = obj.sq_GetAimPosY(obj.getXPos(), obj.getYPos(), false) - sq_GetYPos(obj); local offsetX = obj.sq_GetAimPosX(obj.getXPos(), obj.getYPos(), false); local offsetY = obj.sq_GetAimPosY(obj.getXPos(), obj.getYPos(), false); obj.sq_RemoveAimPointMark(); local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_BLACKMIRROR); local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_BLACKMIRROR, 0, skill_level); local passive_hp = sq_GetLevelData(obj, SKILL_DARKEMPLER_BLACKMIRROR, 2, skill_level); local totalDamage2 = sq_GetLevelData(obj, SKILL_DARKEMPLER_BLACKMIRROR, 3, skill_level); local time = sq_GetLevelData(obj, SKILL_DARKEMPLER_BLACKMIRROR, 4, skill_level); local count = sq_GetLevelData(obj, SKILL_DARKEMPLER_BLACKMIRROR, 5, skill_level); local decreaseRate = sq_GetIntData(obj, SKILL_DARKEMPLER_BLACKMIRROR, 0); local speedRate = sq_GetIntData(obj, SKILL_DARKEMPLER_BLACKMIRROR, 79); local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,Xpos,Ypos,0,ENUM_DIRECTION_RIGHT,4,SKILL_DARKEMPLER_BLACKMIRROR,1,totalDamage,passive_hp,time,count,decreaseRate,speedRate,damageRate,0,1); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onEnterFrame_BlackMirror_bykk(obj, frameIndex) { if(!obj) return; } function onEndState_BlackMirror_bykk(obj, newState) { if(!obj) return; sq_EndDrawCastGauge(obj); obj.sq_RemoveAimPointMark(); } function onProc_BlackMirror_bykk(obj) { if(!obj) return; } function onProcCon_BlackMirror_bykk(obj) { if(!obj) return; } function getScrollBasisPos_BlackMirror_bykk(obj) { if (!obj) return false; local subState = obj.getSkillSubState(); if (!obj.isMyControlObject()) return false; local posX = obj.getXPos(); local posY = obj.getYPos(); obj.sq_SetCameraScrollPosition(posX, posY, 0); return true; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //BuckShot function checkExecutableSkill_BuckShot_bykk(obj) { if (!obj) return 0; local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_BUCKSHOT); local createMin = sq_GetLevelData(obj, SKILL_DARKEMPLER_BUCKSHOT, 0, skill_level); local createMax = sq_GetLevelData(obj, SKILL_DARKEMPLER_BUCKSHOT, 1, skill_level); local enemyMax = sq_GetIntData(obj, SKILL_DARKEMPLER_BUCKSHOT, 13); local soulnum = sq_GetIntData(obj, SKILL_DARKEMPLER_BUCKSHOT, 3); if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_BUCKSHOTEX) > 0) soulnum = soulnum - 1; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_BUCKSHOT, SKILL_DARKEMPLER_BUCKSHOT, 2, 1.0); local loadSlot = obj.sq_GetSkillLoad(SKILL_DARKEMPLER_EVOLVE); local slotCount = loadSlot.getRemainLoadNumber(); if(!loadSlot || slotCount < soulnum) return 0; local range = sq_GetIntData(obj, SKILL_DARKEMPLER_BUCKSHOT, 1); obj.getVar("targetBoss").clear_obj_vector(); obj.getVar("targetNamed").clear_obj_vector(); obj.getVar("targetNormal").clear_obj_vector(); local objectManager = obj.getObjectManager(); local objectNumber = objectManager.getCollisionObjectNumber(); for(local i = 0; i < objectNumber; i++){ local object = objectManager.getCollisionObject(i); if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object)){ local activeObj = sq_GetCNRDObjectToActiveObject(object); if(sq_Abs(sq_GetXPos(activeObj) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(activeObj) - sq_GetYPos(obj)) <= range / 2 && isFrontObject(obj,activeObj)){ if(sq_IsBoss(activeObj)) obj.getVar("targetBoss").push_obj_vector(activeObj); else if(sq_IsNamed(activeObj)) obj.getVar("targetNamed").push_obj_vector(activeObj); else obj.getVar("targetNormal").push_obj_vector(activeObj); } } } local boss_number = obj.getVar("targetBoss").get_obj_vector_size(); local named_number = obj.getVar("targetNamed").get_obj_vector_size(); local normal_number = obj.getVar("targetNormal").get_obj_vector_size(); local all_number = boss_number + named_number + normal_number; if(all_number < 0) return 0; local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_BUCKSHOT); if (isUse){ cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,-80,0,sq_GetZPos(obj)+60,obj.getDirection(),4,SKILL_DARKEMPLER_BUCKSHOT,3,totalDamage,obj.getDirection(),createMin,createMax,enemyMax,soulnum,0,0,0); } return 0; } function checkCommandEnable_BuckShot_bykk(obj) { if (!obj) return 0; local loadSlot = obj.sq_GetSkillLoad(SKILL_DARKEMPLER_EVOLVE); if(!loadSlot) return 0; local count = loadSlot.getRemainLoadNumber(); local soulnum = sq_GetIntData(obj, SKILL_DARKEMPLER_BUCKSHOT, 3); if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_BUCKSHOTEX) > 0) soulnum = soulnum - 1; if(count < soulnum) return 0; return 1; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //congest function checkExecutableSkill_Congest_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_CONGEST); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(102, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function checkCommandEnable_Congest_bykk(obj) { if (!obj) return 0; return 1; } function onSetState_Congest_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_SetCurrentAnimation(ANIMATION_DARKEMPLER_CONGEST_ON_BODY); obj.sq_PlaySound("SW_SHADOW_BINDING"); local castTime = sq_GetCastTime(obj, SKILL_DARKEMPLER_CONGEST, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_CONGEST)); sq_StartDrawCastGauge(obj, castTime, true); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); local speedRate = delaySum.tofloat() / castTime.tofloat() * 100.0; currentAni.setSpeedRate(speedRate); break; } } function onEndCurrentAni_Congest_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: local apPath = "character/atswordman/4_darktempler/congest/ap_congest.nut"; local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, false); appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_DARKEMPLER_CONGEST, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_CONGEST)); appendage.setEnableIsBuff(true); CNSquirrelAppendage.sq_Append(appendage, obj, obj, true); local bonusRate = sq_GetLevelData(obj,SKILL_DARKEMPLER_CONGEST, 0, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_CONGEST)) / 10; obj.getVar("apGetSetbyKK").setInt(0, bonusRate); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onEndState_Congest_bykk(obj, new_state) { if(new_state != 102){ sq_EndDrawCastGauge(obj); } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //DeadlyCape function startSkillCoolTime_atSwordman_bykk(obj, skillIndex, skillLevel, currentCoolTime) { local state = obj.getState(); if(state == SKILL_DARKEMPLER_DEADLYCAPE && skillIndex == SKILL_DARKEMPLER_BUCKSHOT){ local newCoolTime = currentCoolTime * (100 - sq_GetLevelData(obj, SKILL_DARKEMPLER_DEADLYCAPE, 2, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_DEADLYCAPE))) / 100; return newCoolTime; } return currentCoolTime; } function checkExecutableSkill_DeadlyCape_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_DEADLYCAPE); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DEADLYCAPE, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function checkCommandEnable_DeadlyCape_bykk(obj) { if (!obj) return 0; return 1; } function onSetState_DeadlyCape_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_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEADLYCAPECAST); obj.sq_PlaySound("SW_DEDLY_CAPE"); obj.sq_SetCurrentAttackInfo(125); local bonus = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_DEADLYCAPE, SKILL_DARKEMPLER_DEADLYCAPE, 0, 1.0); obj.sq_SetCurrentAttackBonusRate(bonus); obj.getVar("deadlycape_target").clear_obj_vector(); local hitMax = sq_GetIntData(obj, SKILL_DARKEMPLER_DEADLYCAPE, 0) * 5; if(sq_GetIntData(obj, SKILL_DARKEMPLER_DEADLYCAPE, 6) > 0) hitMax = hitMax - 9;//护石 obj.getVar("DeadlyCapeCount").clear_vector(); obj.getVar("DeadlyCapeCount").push_vector(0); obj.getVar("DeadlyCapeCount").push_vector(hitMax); obj.sq_SetXScrollStart(150, 100); break; case 1://多段1 obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEADLYCAPECROSSATTACK1); obj.resetHitObjectList(); obj.getVar("DeadlyCapeCount").set_vector(0,obj.getVar("DeadlyCapeCount").get_vector(0)+1); break; case 2: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEADLYCAPECROSSATTACK2); obj.resetHitObjectList(); obj.getVar("DeadlyCapeCount").set_vector(0,obj.getVar("DeadlyCapeCount").get_vector(0)+1); break; case 3: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEADLYCAPECROSSATTACK3); obj.resetHitObjectList(); obj.getVar("DeadlyCapeCount").set_vector(0,obj.getVar("DeadlyCapeCount").get_vector(0)+1); break; case 4: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEADLYCAPECROSSATTACK4); obj.resetHitObjectList(); obj.getVar("DeadlyCapeCount").set_vector(0,obj.getVar("DeadlyCapeCount").get_vector(0)+1); break; case 5://多段5 obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEADLYCAPECROSSATTACK5); obj.resetHitObjectList(); obj.getVar("DeadlyCapeCount").set_vector(0,obj.getVar("DeadlyCapeCount").get_vector(0)+1); break; case 6: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEADLYCAPELASTCAST); local effectObj = obj.getVar("deadlycape_effect").get_obj_vector(0); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); } break; case 7: if(obj.isMyControlObject()) sq_SetMyShake(obj,8,500); obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEADLYCAPELASTEXPLOSION); break; } local speedRate = 1.0; if(sq_GetIntData(obj, SKILL_DARKEMPLER_DEADLYCAPE, 6) > 0) speedRate = 1.2; obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); } function onEndCurrentAni_DeadlyCape_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(obj.getVar("deadlycape_target").get_obj_vector_size() < 1){ local effectObj = obj.getVar("deadlycape_effect").get_obj_vector(0); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); } obj.sq_SetXScrollStop(100); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DEADLYCAPE, STATE_PRIORITY_IGNORE_FORCE, true); break; case 1: case 2: case 3: case 4: case 5: if(obj.getVar("DeadlyCapeCount").get_vector(0) > obj.getVar("DeadlyCapeCount").get_vector(1)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(6); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DEADLYCAPE, STATE_PRIORITY_IGNORE_FORCE, true); return; } obj.sq_IntVectClear(); if(subState == 5) obj.sq_IntVectPush(1); else obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DEADLYCAPE, STATE_PRIORITY_IGNORE_FORCE, true); break; case 6: obj.sq_IntVectClear(); obj.sq_IntVectPush(7); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DEADLYCAPE, STATE_PRIORITY_IGNORE_FORCE, true); break; case 7: obj.sq_SetXScrollStop(100); local size = obj.getVar("deadlycape_target").get_obj_vector_size(); for(local i = 0; i < size; i++){ local targetObj = obj.getVar("deadlycape_target").get_obj_vector(i); if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/4_darktempler/deadlycape/ap_deadlycape.nut"); } obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onProcCon_DeadlyCape_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: case 2: case 3: case 4: case 5: sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ obj.sq_SetXScrollStop(100); obj.sq_IntVectClear(); obj.sq_IntVectPush(6); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DEADLYCAPE, STATE_PRIORITY_IGNORE_FORCE, true); } break; } } function onKeyFrameFlag_DeadlyCape_bykk(obj, flagIndex) { local subState = obj.getSkillSubState(); switch(flagIndex){ case 0: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_DEADLYCAPE, SKILL_DARKEMPLER_DEADLYCAPE, 1, 1.0); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,137,0,68,obj.getDirection(),4,SKILL_DARKEMPLER_DEADLYCAPE,2,totalDamage,0,0,0,0,0,0,0,1); break; case 1: sq_SetMyShake(obj,3,50); switch(subState){ case 1: case 2: case 3: case 4: case 5: sq_AddDrawOnlyAniFromParent(obj,"character/swordman/effect/animation/atdeadlycape/att/loop/att"+subState+"_glow.ani",137,-1,68); sq_AddDrawOnlyAniFromParent(obj,"character/swordman/effect/animation/atdeadlycape/att/loop/att_back_black1.ani",137,-1,68); break; } break; case 10: cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,137,0,68,obj.getDirection(),4,SKILL_DARKEMPLER_DEADLYCAPE,1,0,0,0,0,0,0,0,0,1); break; } } function onAttack_DeadlyCape_bykk(obj, damager, boundingBox, isStuck) { local subState = obj.getSkillSubState(); switch(subState){ case 0: if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ obj.getVar("deadlycape_target").push_obj_vector(damager); if(!sq_IsFixture(damager)){// && sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager) local apdPath = "character/atswordman/4_darktempler/deadlycape/ap_deadlycape.nut"; local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true); sq_HoldAndDelayDie(damager, obj, true, true, true, 0, 100, ENUM_DIRECTION_NEUTRAL, AddAppendage); } } break; } } function onEndState_DeadlyCape(obj, newState) { if(!obj) return; if(newState != SKILL_DARKEMPLER_DEADLYCAPE){ obj.sq_SetXScrollStop(0); local size = obj.getVar("deadlycape_target").get_obj_vector_size(); for(local i = 0; i < size; i++){ local targetObj = obj.getVar("deadlycape_target").get_obj_vector(i); if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/4_darktempler/deadlycape/ap_deadlycape.nut"); } } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Destroyer function checkExecutableSkill_Destroyer_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_DESTROYER); if(isUse){ obj.sq_IntVectClear(); if(obj.getState() == 6) obj.sq_IntVectPush(1); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DESTROYER, STATE_PRIORITY_IGNORE_FORCE, true); obj.getVar("DestroyerCount").setInt(10,0); local countMax = sq_GetIntData(obj, SKILL_DARKEMPLER_DESTROYER, 1); if(sq_GetIntData(obj, SKILL_DARKEMPLER_DESTROYER, 12) > 0 || DESTROYER_STONE > 0) countMax = countMax * 2;//护石 obj.getVar("DestroyerCount").setInt(11,countMax); return 1; } return 0; } function checkCommandEnable_Destroyer_bykk(obj) { if (!obj) return 0; return 1; } function onSetState_Destroyer_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_DARKEMPLER_DESTROYERJUMP); sq_GetCurrentAnimation(obj).setSpeedRate(300.0); break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DESTROYERSTART); obj.setTimeEvent(1,60,-1,false); break; case 2: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DESTROYERLOOP); break; case 3: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DESTROYEREXRAYSTART_BODY); break; case 4: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DESTROYEREXRAYSTART_BODY); break; case 5: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DESTROYEREXRAYSTART_BODY); break; } if(subState != 0){ local speedRate = 1.0; if(sq_GetIntData(obj, SKILL_DARKEMPLER_DESTROYER, 12) > 0 || DESTROYER_STONE > 0) speedRate = 2.0; obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); } else{ local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); obj.sq_SetXScrollStart(350, delaySum); } if(subState == 3){ local totalDamage = (obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_DESTROYER, -1, 1, 1.0).tofloat() * 2.25 + 759).tointeger(); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(0,0); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,75,0,sq_GetZPos(obj) - 130,obj.getDirection(),4,SKILL_DARKEMPLER_DESTROYER,2,totalDamage,delay,0,0,0,0,0,0,1); } } function onTimeEvent_Destroyer_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return; switch(timeEventIndex){ case 1: local sizeRate = sq_GetIntData(obj, SKILL_DARKEMPLER_DESTROYER, 2).tofloat() / 120.0; sq_AddDrawOnlyAniFromParent(obj,"passiveobject/atswordman_bykk/darktempler/animation/atdestroyer/boom/boom_00_07.ani",sq_getRandom(100,(600.0 * sizeRate).tointeger()),sq_getRandom(-50,20),-sq_GetZPos(obj)); sq_AddDrawOnlyAniFromParent(obj,"passiveobject/atswordman_bykk/darktempler/animation/atdestroyer/boom/boom_00_07.ani",sq_getRandom(100,(600.0 * sizeRate).tointeger()),sq_getRandom(0,50),-sq_GetZPos(obj)); break; } } function onProcCon_Destroyer_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); local CelXpos = sq_GetAccel(obj.getZPos(), 200, obj.sq_GetStateTimer(), delaySum, false); sq_setCurrentAxisPos(obj, 2, CelXpos); break; } } function onEndCurrentAni_Destroyer_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DESTROYER, STATE_PRIORITY_IGNORE_FORCE, true); break; case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DESTROYER, STATE_PRIORITY_IGNORE_FORCE, true); break; case 3: case 4: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DESTROYER, STATE_PRIORITY_IGNORE_FORCE, true); break; case 5: obj.sq_SetXScrollStop(200); obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(0); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(6, STATE_PRIORITY_IGNORE_FORCE, true); local increaseCount = sq_GetIntData(obj, SKILL_DARKEMPLER_DESTROYER, 36); darkEmpler_Evolve(obj,increaseCount,0); return; } } function onKeyFrameFlag_Destroyer_bykk(obj, flagIndex) { if (!obj) return; local count = obj.getVar("DestroyerCount").getInt(10); if(count >= obj.getVar("DestroyerCount").getInt(11)){ obj.removeAllTimeEvent(); if(sq_GetIntData(obj, SKILL_DARKEMPLER_DESTROYER, 12) > 0 || DESTROYER_STONE > 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DESTROYER, STATE_PRIORITY_IGNORE_FORCE, true); return; } obj.sq_SetXScrollStop(200); obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(0); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(6, STATE_PRIORITY_IGNORE_FORCE, true); local increaseCount = sq_GetIntData(obj, SKILL_DARKEMPLER_DESTROYER, 36); darkEmpler_Evolve(obj,increaseCount,0); return; } local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_DESTROYER, -1, 1, 1.0); local sizeRate = sq_GetIntData(obj, SKILL_DARKEMPLER_DESTROYER, 2).tofloat() / 120.0; switch(flagIndex){ case 0: case 2: case 4: if(sq_GetIntData(obj, SKILL_DARKEMPLER_DESTROYER, 12) > 0 || DESTROYER_STONE > 0) totalDamage = totalDamage / 2; cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,-sq_GetZPos(obj),obj.getDirection(),4,SKILL_DARKEMPLER_DESTROYER,1,totalDamage,(sizeRate*100).tointeger(),0,0,0,0,0,0,1); obj.getVar("DestroyerCount").setInt(10, count + 1); break; case 1: case 3: case 5: if(sq_GetIntData(obj, SKILL_DARKEMPLER_DESTROYER, 12) > 0 || DESTROYER_STONE > 0){ totalDamage = totalDamage / 2; cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,-sq_GetZPos(obj),obj.getDirection(),4,SKILL_DARKEMPLER_DESTROYER,1,totalDamage,(sizeRate*100).tointeger(),0,0,0,0,0,0,1); obj.getVar("DestroyerCount").setInt(10, count + 1); } break; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //DeusExray function checkExecutableSkill_DeusExray_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_DEUSEXRAY); if (isUse){ obj.sq_IsEnterSkillLastKeyUnits(SKILL_DARKEMPLER_DEUSEXRAY); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DEUSEXRAY, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function checkCommandEnable_DeusExray_bykk(obj) { if (!obj) return 0; return 1; } function onSetState_DeusExray_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_StopMove(); obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEUSEXRAY_BODY1); obj.sq_PlaySound("SW_EXRAY_01"); obj.getVar("deuexray_count").setInt(10,0); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,180,0,70,obj.getDirection(),4,SKILL_DARKEMPLER_DEUSEXRAY,1,0,0,0,0,0,0,0,0,0); if(sq_GetIntData(obj, SKILL_DARKEMPLER_DEUSEXRAY, 4) > 0 || DEUSEXRAY_STONE > 0){ sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/darktempler/animation/atdeusexray/talisman/spirit_talisman_spirit_04a.ani", 180, 0, 70); } break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEUSEXRAY_BODY2);//蓄氣動作 obj.getVar("deusexrayb").setBool(0, true); local interval = sq_GetIntData(obj, SKILL_DARKEMPLER_DEUSEXRAY, 0); local soulMax = sq_GetIntData(obj, SKILL_DARKEMPLER_DEUSEXRAY, 1); local loadSlot = obj.sq_GetSkillLoad(SKILL_DARKEMPLER_EVOLVE); if(!loadSlot) return; local soulnum = loadSlot.getRemainLoadNumber(); if(soulnum < soulMax) soulMax = soulnum; obj.setTimeEvent(1,interval,soulMax,false); break; case 2: // if(obj.isMyControlObject()) sq_SetMyShake(obj,8,400); obj.removeAllTimeEvent(); obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEUSEXRAY_BODY3);//引爆 local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_DEUSEXRAY); local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_DEUSEXRAY, 0, skill_level); local addRate = sq_GetLevelData(obj, SKILL_DARKEMPLER_DEUSEXRAY, 3, skill_level) * 10 / 100; local deuexray_count = obj.getVar("deuexray_count").getInt(10); if(deuexray_count > 0) totalDamage = totalDamage * (100 + deuexray_count * addRate) / 100; cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,180,0,70,obj.getDirection(),4,SKILL_DARKEMPLER_DEUSEXRAY,2,totalDamage,0,0,0,0,0,0,0,1); if(sq_GetIntData(obj, SKILL_DARKEMPLER_DEUSEXRAY, 4) > 0 || DEUSEXRAY_STONE > 0){ cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,-50,-30,120,obj.getDirection(),4,SKILL_DARKEMPLER_DEUSEXRAY,3,totalDamage * 3 / 100,0,0,0,0,0,0,0,1); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,-50,30,120,obj.getDirection(),4,SKILL_DARKEMPLER_DEUSEXRAY,3,totalDamage * 3 / 100,0,0,0,0,0,0,0,1); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,-50,-30,20,obj.getDirection(),4,SKILL_DARKEMPLER_DEUSEXRAY,3,totalDamage * 3 / 100,0,0,0,0,0,0,0,1); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,-50,30,20,obj.getDirection(),4,SKILL_DARKEMPLER_DEUSEXRAY,3,totalDamage * 3 / 100,0,0,0,0,0,0,0,1); } break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_DeusExray_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState) { case 0: if(sq_GetIntData(obj, SKILL_DARKEMPLER_DEUSEXRAY, 4) > 0 || DEUSEXRAY_STONE > 0){ local chargeObj = obj.getVar("deusexray").get_obj_vector(0); if(chargeObj){ local colObj = sq_GetCNRDObjectToCollisionObject(chargeObj); colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); } obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DEUSEXRAY, STATE_PRIORITY_IGNORE_FORCE, true); local soulMax = sq_GetIntData(obj, SKILL_DARKEMPLER_DEUSEXRAY, 1); local loadSlot = obj.sq_GetSkillLoad(SKILL_DARKEMPLER_EVOLVE); if(!loadSlot) break; local soulnum = loadSlot.getRemainLoadNumber(); if(soulnum < soulMax) soulMax = soulnum; darkEmpler_Evolve(obj, 0, soulMax); obj.getVar("deuexray_count").setInt(10, soulMax); break; } obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DEUSEXRAY, STATE_PRIORITY_IGNORE_FORCE, true); break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onProcCon_DeusExray_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); if(subState == 1){ local bDownKey = obj.isDownSkillLastKey() if(!bDownKey){ local chargeObj = obj.getVar("deusexray").get_obj_vector(0); if(chargeObj){ local colObj = sq_GetCNRDObjectToCollisionObject(chargeObj); colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); } obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DEUSEXRAY, STATE_PRIORITY_IGNORE_FORCE, true); } } } function onKeyFrameFlag_DeusExray_bykk(obj, flagIndex) { if (!obj) return; switch(flagIndex){ case 1: sq_flashScreen(obj,0, 80, 0, 255, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); sq_flashScreen(obj,0, 0, 160,255, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); break; } } function onTimeEvent_DeusExray_bykk(obj, timeEventIndex, timeEventCount) { switch(timeEventIndex){ case 1: local count = timeEventCount; if(timeEventCount > 10) count = timeEventCount % 10; sq_AddDrawOnlyAniFromParent(obj,"character/swordman/effect/animation/atdeusexray/spirit/spirit_"+timeEventCount.tostring()+"b.ani",180,0,70); sq_AddDrawOnlyAniFromParent(obj,"character/swordman/effect/animation/atdeusexray/spirit/spirit_"+(timeEventCount+10).tostring()+"b.ani",180,0,70); sq_AddDrawOnlyAniFromParent(obj,"character/swordman/effect/animation/atdeusexray/spirit/spirit_"+(timeEventCount+20).tostring()+"b.ani",180,0,70); darkEmpler_Evolve(obj,0,1); obj.getVar("deuexray_count").setInt(10,obj.getVar("deuexray_count").getInt(10) + 1); break; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Doomsday function checkExecutableSkill_Doomsday_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_DOOMSDAY); if(isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DOOMSDAY, STATE_PRIORITY_IGNORE_FORCE, true); obj.getVar("DoomsdayEnermy").clear_vector(); local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_DOOMSDAY); if(skill_level >= 3){ local time = sq_GetLevelData(obj, SKILL_DARKEMPLER_DOOMSDAY, 5, skill_level); local hitrate = sq_GetLevelData(obj, SKILL_DARKEMPLER_DOOMSDAY, 4, skill_level)/10; local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_HIT_RATE, false, hitrate.tofloat(), 0); if(ap){ ap.getAppendageInfo().setValidTime(time); ap.sq_Append(obj, obj); } } return 1; } return 0; } function checkCommandEnable_Doomsday_bykk(obj) { if (!obj) return 0; return 1; } function onSetState_Doomsday_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_DARKEMPLER_DOOMSDAYBODYCASTATTACK); obj.sq_PlaySound("SW_DOOMSDAY"); local bonusRate = 1.0; local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_DOOMSDAY); if(skill_level >= 6) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DARKEMPLER_DOOMSDAY, 10, skill_level).tofloat() / 100.0; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_DOOMSDAY, SKILL_DARKEMPLER_DOOMSDAY, 0, bonusRate); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 119)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.getVar("doomsday_move").setInt(10,sq_GetXPos(obj)); obj.getVar("doomsday_move").setInt(11,100); local appendage = sq_AttractToMe(obj, 1500, 100, 1000); obj.getVar("doomsday").setAppendage(0,appendage);//设置ap break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DOOMSDAYBODYATTACK1_BODY); local bonusRate = 1.0; local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_DOOMSDAY); if(skill_level >= 6) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DARKEMPLER_DOOMSDAY, 10, skill_level).tofloat() / 100.0; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_DOOMSDAY, SKILL_DARKEMPLER_DOOMSDAY, 1, bonusRate); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 120)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 2: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DOOMSDAYBODYATTACK2_BODY); break; case 3: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DOOMSDAYBODYATTACK3_BODY); break; case 4: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DOOMSDAYBODYREADYFINISHATTACK); break; case 5: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DOOMSDAYBODYFINISHFIRST_BODY); break; case 6: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DOOMSDAYBODYFINISHSECOND_BODY); break; case 7: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DOOMSDAYBODYFINISHLAST_BODY); local bonusRate = 1.0; local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_DOOMSDAY); if(skill_level >= 6) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DARKEMPLER_DOOMSDAY, 10, skill_level).tofloat() / 100.0; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_DOOMSDAY, SKILL_DARKEMPLER_DOOMSDAY, 9, bonusRate); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 123)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.getVar("doomsday_move").setInt(10,sq_GetXPos(obj)); obj.getVar("doomsday_move").setInt(11,500); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Doomsday_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: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DOOMSDAY, STATE_PRIORITY_IGNORE_FORCE, true); break; case 7: if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_DOOMSDAY) >= 9){ local aptime = sq_GetLevelData(obj, SKILL_DARKEMPLER_DOOMSDAY, 8, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_DOOMSDAY)); local apdPath = "character/atswordman/4_darktempler/doomsday/ap_doomsdaybuff.nut"; local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath , false); appendage.sq_SetValidTime(aptime); appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_DARKEMPLER_DOOMSDAY, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_DOOMSDAY)); appendage.setEnableIsBuff(true); CNSquirrelAppendage.sq_Append(appendage, obj, obj, true); } obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onTimeEvent_Doomsday_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return; switch(timeEventIndex){ case 1: obj.resetHitObjectList(); break; case 10: local addRate = 0; if(sq_GetSkillLevel(obj, 74)>5) addRate = obj.sq_GetLevelData(74, 10, sq_GetSkillLevel(obj, 74))/100.0; sq_SetMyShake(obj,6,500); sq_flashScreen(obj, 10, 50, 10, 255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); obj.sq_StartWrite(); obj.sq_WriteDword(74); obj.sq_WriteDword(0); obj.sq_WriteDword(obj.sq_GetBonusRateWithPassive(74, -1, 0, getATSwordmanBonus(obj,1.0,74)+addRate)); obj.sq_WriteDword(obj.sq_GetBonusRateWithPassive(74, -1, 9, getATSwordmanBonus(obj,1.0,74)+addRate)); obj.sq_SendCreatePassiveObjectPacket(24381, 0, 200, 0, 74); break; case 11: local addRate = 0; if(sq_GetSkillLevel(obj, 74)>5) addRate = obj.sq_GetLevelData(74, 10, sq_GetSkillLevel(obj, 74))/100.0; obj.sq_SetCurrentAttackBonusRate(obj.sq_GetBonusRateWithPassive(74, -1, 3, getATSwordmanBonus(obj,1.0,74)+addRate)); for(local i = 0; i < obj.getVar("DoomsdayEnermy").size_vector(); i++) { local object = sq_GetObjectByObjectId(obj, obj.getVar("DoomsdayEnermy").get_vector(i)); local z = object.getZPos() + object.getObjectHeight()/2; local aniPPath = "character/swordman/effect/animation/atsouldrain/loopboom_01.ani"; DarktemplerCreateAniPooledObj(object,aniPPath,true,true,object.getXPos(), object.getYPos(),z, 1.0); sq_SendHitObjectPacket(obj,object,0,0,z); } break; } } function onProc_Doomsday_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: local pAni = obj.getCurrentAnimation(); local currentT = sq_GetCurrentTime(pAni); local fireT1 = pAni.getDelaySum(0, 8); local fireT2 = pAni.getDelaySum(9, 11); if(currentT <= fireT1) return; local appendage = obj.getVar("doomsday").getAppendage(0); if(appendage) appendage.setValid(false); if(currentT > fireT1 + fireT2) return; local srcX = obj.getVar("doomsday_move").getInt(10); local MoveX = obj.getVar("doomsday_move").getInt(11); local v = sq_GetUniformVelocity(0, MoveX, currentT - fireT1, fireT2); local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); else{ obj.getVar("doomsday_move").setInt(10,sq_GetXPos(obj)); obj.getVar("doomsday_move").setInt(11,0); } break; case 7: local pAni = obj.getCurrentAnimation(); local currentT = sq_GetCurrentTime(pAni); local fireT = pAni.getDelaySum(0,5); local srcX = obj.getVar("doomsday_move").getInt(10); local MoveX = obj.getVar("doomsday_move").getInt(11); local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT); local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); else{ obj.getVar("doomsday_move").setInt(10,sq_GetXPos(obj)); obj.getVar("doomsday_move").setInt(11,0); } break; } } function onAttack_Doomsday_bykk(obj, damager, boundingBox, isStuck) { if (!obj) return false; local subState = obj.getSkillSubState(); if (!obj.isMyControlObject()) return false; switch(subState){ case 0: if(damager.isObjectType(OBJECTTYPE_ACTIVE) && !sq_IsFixture(damager)){ local apdPath = "character/atswordman/4_darktempler/doomsday/ap_doomsday.nut"; local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, SKILL_DARKEMPLER_DOOMSDAY, false, apdPath, true); sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); sq_MoveToAppendageForce(damager, obj, obj, 526, 0, 0, 300, true, AddAppendage); AddAppendage.sq_SetValidTime(3000); } break; case 7: if(damager.isObjectType(OBJECTTYPE_ACTIVE)) sq_AddDrawOnlyAniFromParent(damager, "character/swordman/effect/animation/atdoomsday/finishhiteffect.ani", 0, 1, sq_GetHeightObject(damager) / 3); break; } } function onKeyFrameFlag_Doomsday_bykk(obj, flagIndex) { switch(flagIndex){ case 10: sq_flashScreen(obj, 30, 10, 70, 100, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj,2,100); local pAni = obj.getCurrentAnimation(); local delaySum = pAni.getDelaySum(8,13); obj.sq_SetXScrollStart(200, delaySum); break; case 11: sq_SetMyShake(obj,2,100); break; case 12: //[OFFSET] `forward` 0 0 0 break; case 13: sq_flashScreen(obj, 10, 20, 30, 100, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj,10,100); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,326,-1,73,obj.getDirection(),4,SKILL_DARKEMPLER_DOOMSDAY,2,0,0,0,0,0,0,0,0,1); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,326,-1,0,obj.getDirection(),4,SKILL_DARKEMPLER_DOOMSDAY,3,0,0,0,0,0,0,0,0,1); //[OFFSET] `boom` 201 0 73 break; case 14: sq_SetMyShake(obj,1,700); break; case 15: sq_SetMyShake(obj,10,100); break; case 16: //[OFFSET] `backward` 0 0 0 break; case 21: obj.sq_SetXScrollStop(100); sq_flashScreen(obj, 30, 50, 70, 100, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); sq_SetMyShake(obj,5,100); //[OFFSET] `attack boom` 21 0 2 sq_AddDrawOnlyAniFromParent(obj,"passiveobject/atswordman_bykk/darktempler/animation/atdoomsday/domehit01_01.ani",41,-1,73); break; case 31: obj.resetHitObjectList(); sq_flashScreen(obj, 30, 50, 70, 100, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); sq_SetMyShake(obj,5,100); sq_AddDrawOnlyAniFromParent(obj,"passiveobject/atswordman_bykk/darktempler/animation/atdoomsday/domehit02_03.ani",41,-1,73); //[OFFSET] `attack boom` 0 0 -11 break; case 41: obj.resetHitObjectList(); sq_flashScreen(obj, 30, 50, 70, 100, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); sq_SetMyShake(obj,5,100); //[OFFSET] `finish attack boom` 1 0 -9 break; case 51: sq_flashScreen(obj, 0, 180, 200, 255, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); local bonusRate = 1.0; local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_DOOMSDAY); if(skill_level >= 6) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DARKEMPLER_DOOMSDAY, 10, skill_level).tofloat() / 100.0; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_DOOMSDAY, SKILL_DARKEMPLER_DOOMSDAY, 3, bonusRate); local hitMax = sq_GetIntData(obj, SKILL_DARKEMPLER_DOOMSDAY, 20); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,5,1,5,obj.getDirection(),4,SKILL_DARKEMPLER_DOOMSDAY,1,totalDamage,hitMax,0,0,0,0,0,0,1); local effectObj = obj.getVar("doomsday_effect").get_obj_vector(0); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); } local effectObj2 = obj.getVar("doomsday_effect_b").get_obj_vector(0); if(effectObj2){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj2); colObj.setValid(false); } //[OFFSET] `finish boom` 5 0 5 //[OFFSET] `finish attack boom` 2 0 -19 break; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Immolation function checkExecutableSkill_Immolation_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_IMMOLATION); if (isUse){ if(sq_GetIntData(obj, SKILL_DARKEMPLER_IMMOLATION, 9) > 0 || IMMOLATION_STONE > 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_IMMOLATION, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } obj.sq_IsEnterSkillLastKeyUnits(SKILL_DARKEMPLER_IMMOLATION); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_IMMOLATION, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function checkCommandEnable_Immolation_bykk(obj) { if (!obj) return 0; return 1; } function onSetState_Immolation_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_DARKEMPLER_IMMOLATIONCAST); local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_IMMOLATION); local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_IMMOLATION, 0, skill_level); local level = sq_GetLevelData(obj, SKILL_DARKEMPLER_IMMOLATION, 1, skill_level); local time = sq_GetIntData(obj, SKILL_DARKEMPLER_IMMOLATION, 1); local hitTime = sq_GetIntData(obj, SKILL_DARKEMPLER_IMMOLATION, 3); local vespers_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS); if(vespers_level > 0){ local decreaseRate = sq_GetLevelData(obj, SKILL_DARKEMPLER_VESPERS, 3, vespers_level); hitTime = (hitTime * (100.0 + decreaseRate.tofloat()) / 100.0).tointeger(); } cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,-1,0,obj.getDirection(),4,SKILL_DARKEMPLER_IMMOLATION,2,totalDamage,hitTime,level,time,0,0,0,0,1); break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_IMMOLATIONLOOP); break; case 2: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_IMMOLATIONEND); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(0,0); obj.setTimeEvent(2, delay, 1, false); sq_AddDrawOnlyAniFromParent(obj,"character/swordman/effect/animation/atimmolation/end_magiccircle_01.ani",0,0,0); break; case 3: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_IMMOLATIONFIXINGCAST); local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_IMMOLATION); local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_IMMOLATION, 0, skill_level); local totalDamage2 = sq_GetLevelData(obj, SKILL_DARKEMPLER_IMMOLATION, 3, skill_level); if(sq_GetIntData(obj, SKILL_DARKEMPLER_IMMOLATION, 9) > 0 || IMMOLATION_STONE > 0){ totalDamage2 = (totalDamage2.tofloat() * 1.27 * 1.19).tointeger() } local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); local level = sq_GetLevelData(obj, SKILL_DARKEMPLER_IMMOLATION, 1, skill_level); local time = sq_GetIntData(obj, SKILL_DARKEMPLER_IMMOLATION, 1); local hitTime = sq_GetIntData(obj, SKILL_DARKEMPLER_IMMOLATION, 3); local lifeTime = sq_GetIntData(obj, SKILL_DARKEMPLER_IMMOLATION, 6); local vespers_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS); if(vespers_level > 0){ local decreaseRate = sq_GetLevelData(obj, SKILL_DARKEMPLER_VESPERS, 3, vespers_level); hitTime = (hitTime * (100.0 + decreaseRate.tofloat()) / 100.0).tointeger(); lifeTime = (lifeTime * (100.0 + decreaseRate.tofloat()) / 100.0).tointeger(); } cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,250,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_IMMOLATION,3,totalDamage,hitTime,level,time,damageRate,lifeTime,0,0,1); break; } local vespers_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS); if(vespers_level > 0 && subState != 2){ local decreaseRate = sq_GetLevelData(obj, SKILL_DARKEMPLER_VESPERS, 3, vespers_level); local currentAni = obj.getCurrentAnimation(); sq_ClearAttackBox(currentAni); local speedRate = 10000.0 / (100 + decreaseRate).tofloat(); currentAni.setSpeedRate(speedRate); local attackObj = obj.getVar("immolation_magiccircle").get_obj_vector(0); if(attackObj){ local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); local pAni = colObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate); } } } function onProcCon_Immolation_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: local stateTime = obj.sq_GetStateTimer(); local minTime = sq_GetIntData(obj, SKILL_DARKEMPLER_IMMOLATION, 6); local MaxTime = sq_GetIntData(obj, SKILL_DARKEMPLER_IMMOLATION, 2); local vespers_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS); if(vespers_level > 0){ local decreaseRate = sq_GetLevelData(obj, SKILL_DARKEMPLER_VESPERS, 3, vespers_level); minTime = (minTime * (100.0 + decreaseRate.tofloat()) / 100.0).tointeger(); MaxTime = (MaxTime * (100.0 + decreaseRate.tofloat()) / 100.0).tointeger(); } if(stateTime < minTime) return; local bDownKey = obj.isDownSkillLastKey(); if(!bDownKey || stateTime >= MaxTime){ if(stateTime >= MaxTime) obj.getVar("immolation").setBool(0, true); local attackObj = obj.getVar("immolation_magiccircle").get_obj_vector(0); if(attackObj){ local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); } obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_IMMOLATION, STATE_PRIORITY_IGNORE_FORCE, true); } break; } } function onAttack_Immolation_bykk(obj, damager, boundingBox, isStuck) { if(!obj) return; local level = obj.sq_GetLevelData(168, 1, sq_GetSkillLevel(obj, 168)); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_SLOW, 100.0, level, false, sq_GetIntData(obj, 168, 1)); local path = "character/atswordman/4_darktempler/immolation/ap_immolation.nut"; local forceap = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, path, true); if(sq_IsHoldable(obj,damager) && !sq_IsFixture(damager)) if(forceap){ sq_MoveToAppendageForce(damager, obj, obj, 0, 0, damager.getZPos(), 3000, true, forceap,true); local appendageInfo = forceap.getAppendageInfo(); appendageInfo.setValidTime(600); } } function onTimeEvent_Immolation_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return; switch(timeEventIndex){ case 1: obj.resetHitObjectList(); break; case 2: local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_IMMOLATION); local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_IMMOLATION, 2, skill_level); if(obj.getVar("immolation").getBool(0)) totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_IMMOLATION, 3, skill_level); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,-1,73,obj.getDirection(),4,SKILL_DARKEMPLER_IMMOLATION,1,totalDamage,0,0,0,0,0,0,0,1); break; } } function onEndCurrentAni_Immolation_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: local attackObj = obj.getVar("immolation_magiccircle").get_obj_vector(0); if(attackObj){ local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); } obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_IMMOLATION, STATE_PRIORITY_IGNORE_FORCE, true); break; case 2: case 3: obj.getVar("immolation").setBool(0, false); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Jihad function checkExecutableSkill_Jihad_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_JIHAD); if (isUse){ AIMPOINT_ATSWORDMAN = SKILL_DARKEMPLER_JIHAD; obj.sq_IsEnterSkillLastKeyUnits(SKILL_DARKEMPLER_JIHAD); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_JIHAD, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function checkCommandEnable_Jihad_bykk(obj) { if (!obj) return 0; return 1; } function onSetState_Jihad_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_DARKEMPLER_JIHAD_START_BODY); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.sq_PlaySound("SW_JIHAD"); obj.getVar("jihad_count").setInt(10,0); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); sq_StartDrawCastGauge(obj, delaySum, true); break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_JIHAD_CASTING_BODY); local offsetX = 100; offsetX = obj.sq_GetDistancePos(obj.getXPos(), obj.sq_GetDirection(), offsetX); local vX = 500; local vY = 250; obj.sq_AddAimPointMark(offsetX, obj.getYPos(), vX, vY); local interval = sq_GetIntData(obj, SKILL_DARKEMPLER_JIHAD, 0); local soulMax = sq_GetLevelData(obj, SKILL_DARKEMPLER_JIHAD, 2, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_JIHAD)); local loadSlot = obj.sq_GetSkillLoad(SKILL_DARKEMPLER_EVOLVE); if(!loadSlot) break; local soulnum = loadSlot.getRemainLoadNumber(); if(soulnum < soulMax) soulMax = soulnum; obj.setTimeEvent(1,interval,soulMax,false); break; case 2: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_JIHAD_CASTINGEND_BODY); sq_flashScreen(obj, 400, 0, 0, 191, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); local isStone = obj.sq_GetVectorData(datas, 1); if(isStone > 0){ obj.getVar("targetBoss").clear_obj_vector(); obj.getVar("targetNamed").clear_obj_vector(); obj.getVar("targetNormal").clear_obj_vector(); local objectManager = obj.getObjectManager(); local objectNumber = objectManager.getCollisionObjectNumber(); for(local i = 0; i < objectNumber; i++){ local object = objectManager.getCollisionObject(i); if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object)){ local activeObj = sq_GetCNRDObjectToActiveObject(object); if(sq_IsBoss(activeObj)) obj.getVar("targetBoss").push_obj_vector(activeObj); else if(sq_IsNamed(activeObj)) obj.getVar("targetNamed").push_obj_vector(activeObj); else obj.getVar("targetNormal").push_obj_vector(activeObj); } } local offset_x = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 250); local offset_y = sq_GetYPos(obj); if(obj.getVar("targetBoss").get_obj_vector_size() > 0){ local targetObj = obj.getVar("targetBoss").get_obj_vector(0); if(targetObj){ offset_x = sq_GetXPos(targetObj) - sq_GetXPos(obj); offset_y = sq_GetYPos(targetObj) - sq_GetYPos(obj); } } else if(obj.getVar("targetNamed").get_obj_vector_size() > 0){ local targetObj = obj.getVar("targetNamed").get_obj_vector(0); if(targetObj){ offset_x = sq_GetXPos(targetObj) - sq_GetXPos(obj); offset_y = sq_GetYPos(targetObj) - sq_GetYPos(obj); } } else if(obj.getVar("targetNormal").get_obj_vector_size() > 0){ local targetObj = obj.getVar("targetNormal").get_obj_vector(0); if(targetObj){ offset_x = sq_GetXPos(targetObj) - sq_GetXPos(obj); offset_y = sq_GetYPos(targetObj) - sq_GetYPos(obj); } } local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_JIHAD, SKILL_DARKEMPLER_JIHAD, 0, 1.0) + 100; local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_JIHAD, SKILL_DARKEMPLER_JIHAD, 1, 1.0) + 100; local addRate = sq_GetLevelData(obj, SKILL_DARKEMPLER_JIHAD, 3, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_JIHAD)) / 10; local interval = sq_GetIntData(obj, SKILL_DARKEMPLER_JIHAD, 0); local soulMax = sq_GetLevelData(obj, SKILL_DARKEMPLER_JIHAD, 2, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_JIHAD)); local loadSlot = obj.sq_GetSkillLoad(SKILL_DARKEMPLER_EVOLVE); if(loadSlot){ local soulnum = loadSlot.getRemainLoadNumber(); if(soulnum < soulMax) soulMax = soulnum; if(soulMax > 0){ darkEmpler_Evolve(obj,0,soulMax); totalDamage = (totalDamage.tofloat() * (100 + soulMax * addRate).tofloat() / 100.0).tointeger(); totalDamage2 = (totalDamage2.tofloat() * (100 + soulMax * addRate).tofloat() / 100.0).tointeger(); } } local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,offset_x,offset_y,0,ENUM_DIRECTION_RIGHT,4,SKILL_DARKEMPLER_JIHAD,1,totalDamage,damageRate,0,0,0,0,0,0,1); createOnlyDrawObject_AtSwordMan_bykk(obj,"passiveobject/atswordman_bykk/darktempler/animation/atjihad/jihad_summon_magiccirclea.ani",true,ENUM_DIRECTION_RIGHT,offset_x + sq_GetXPos(obj),offset_y + sq_GetYPos(obj), 0, ENUM_DRAWLAYER_BOTTOM); } break; case 3: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_JIHAD_ATTACKBODY_A); break; } } function onEndState_Jihad_bykk(obj, new_state) { if(!obj) return; if(new_state != SKILL_DARKEMPLER_JIHAD){ sq_EndDrawCastGauge(obj); obj.sq_RemoveAimPointMark(); } } function onProc_Jihad_bykk(obj) { if(!obj) return; local SubState = obj.getSkillSubState(); switch(SubState){ case 1: local bDownKey = obj.isDownSkillLastKey(); if(!bDownKey){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_JIHAD, STATE_PRIORITY_IGNORE_FORCE, true); local Xpos = obj.sq_GetAimPosX(sq_GetXPos(obj), sq_GetYPos(obj), false) - sq_GetXPos(obj); local Ypos = obj.sq_GetAimPosY(sq_GetXPos(obj), sq_GetYPos(obj), false) - sq_GetYPos(obj); obj.sq_RemoveAimPointMark(); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_JIHAD, SKILL_DARKEMPLER_JIHAD, 0, 1.0) + 100; local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_JIHAD, SKILL_DARKEMPLER_JIHAD, 1, 1.0) + 100; local addRate = sq_GetLevelData(obj, SKILL_DARKEMPLER_JIHAD, 3, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_JIHAD)) / 10; local jihad_count = obj.getVar("jihad_count").getInt(10); if(jihad_count > 0){ totalDamage = (totalDamage.tofloat() * (100 + jihad_count * addRate).tofloat() / 100.0).tointeger(); totalDamage2 = (totalDamage2.tofloat() * (100 + jihad_count * addRate).tofloat() / 100.0).tointeger(); } local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,Xpos,Ypos,0,ENUM_DIRECTION_RIGHT,4,SKILL_DARKEMPLER_JIHAD,1,totalDamage,damageRate,0,0,0,0,0,0,1); createOnlyDrawObject_AtSwordMan_bykk(obj,"passiveobject/atswordman_bykk/darktempler/animation/atjihad/jihad_summon_magiccirclea.ani",true,ENUM_DIRECTION_RIGHT,Xpos + sq_GetXPos(obj),Ypos + sq_GetYPos(obj), 0, ENUM_DRAWLAYER_BOTTOM); } break; } } function onEndCurrentAni_Jihad_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 2: if(subState == 0 && (JIHAD_STONE > 0)){//sq_GetIntData(obj, SKILL_DARKEMPLER_JIHAD, 5) > 0 || obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_JIHAD, STATE_PRIORITY_IGNORE_FORCE, true); break; } obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_JIHAD, STATE_PRIORITY_IGNORE_FORCE, true); break; case 3: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onTimeEvent_Jihad_bykk(obj, timeEventIndex, timeEventCount) { switch(timeEventIndex){ case 1: darkEmpler_Evolve(obj,0,1); obj.getVar("jihad_count").setInt(10,obj.getVar("jihad_count").getInt(10) + 1); break; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Lacerthorns function checkExecutableSkill_Lacerthorns_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_LACERTHORNS); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_LACERTHORNS, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function checkCommandEnable_Lacerthorns_bykk(obj) { if (!obj) return 0; return 1; } function onSetState_Lacerthorns_bykk(obj, state, datas, isResetTimer) { local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); switch(subState){ case 0: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_ATLACERTHORNSCASTING_BODY); obj.getVar("target_Lacerthorns").clear_obj_vector(); obj.sq_PlaySound("LACERTHORNS_CAST"); obj.sq_PlaySound("SW_LACERTHORNS_01"); break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_ATLACERTHORNSSTARTMOTION_BODY); local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_LACERTHORNS); local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_LACERTHORNS, 0, skill_level); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 232)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atlacerthorns/atlacerthornsdash_00.ani", 0, 0, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atlacerthorns/atlacerthornsstartfront_00.ani", 0, 0, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atlacerthorns/atlacerthornsstartback_00.ani", 0, -1, -1); break; case 2: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_ATLACERTHORNSFINISH_BODY); local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_LACERTHORNS); local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_LACERTHORNS, 1, skill_level); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 231)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.setTimeEvent(1, 100, 1, false); obj.sq_PlaySound("LACERTHORNS_SUCCESS"); obj.sq_PlaySound("R_SW_LACERTHORNS_02"); sq_flashScreen(obj,0,0,30,191, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); if(obj.isMyControlObject()) sq_flashScreen(obj,0,0,30,178, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); sq_SetMyShake(obj, 20, 400); break; case 3: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_ATLACERTHORNSFAIL_BODY); break; } } function onEndCurrentAni_Lacerthorns_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_LACERTHORNS, STATE_PRIORITY_IGNORE_FORCE, true); break; case 1: obj.sq_IntVectClear(); if(obj.getVar("target_Lacerthorns").get_obj_vector_size() > 0) obj.sq_IntVectPush(2); else obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_LACERTHORNS, STATE_PRIORITY_IGNORE_FORCE, true); break; case 2: case 3: if(subState == 2){ local soulnum = sq_GetIntData(obj, SKILL_DARKEMPLER_LACERTHORNS, 11); darkEmpler_Evolve(obj, soulnum, 0); } obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onEndState_Lacerthorns_bykk(obj, new_state) { if(!obj) return; if(new_state != SKILL_DARKEMPLER_LACERTHORNS){ // } } function onEnterFrame_Lacerthorns(obj, frameIndex) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: switch(frameIndex){ case 3: if(obj.isMyControlObject()) sq_flashScreen(obj,100,1000,0,178, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); break; case 4: sq_SetMyShake(obj, 15, 120); break; } break; } } function onTimeEvent_Lacerthorns_bykk(obj, timeEventIndex, timeEventCount) { switch(timeEventIndex){ case 1: local size = obj.getVar("target_Lacerthorns").get_obj_vector_size(); for(local i = 0; i < size; i++){ local activeObj = obj.getVar("target_Lacerthorns").get_obj_vector(i); if(activeObj){ sq_SendHitObjectPacket(obj,activeObj,0,0,sq_GetObjectHeight(activeObj) / 2); CNSquirrelAppendage.sq_RemoveAppendage(activeObj, "character/atswordman/4_darktempler/lacerthorns/ap_lacerthorns.nut"); cearteSkillPassiveObj_AtSwordMan_bykk(obj,activeObj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,sq_GetObjectHeight(activeObj) / 2,obj.getDirection(),4,SKILL_DARKEMPLER_LACERTHORNS,1,0,0,0,0,0,0,0,0,0); } } break; } } function onAttack_Lacerthorns_bykk(obj, damager, boundingBox, isStuck) { local subState = obj.getSkillSubState(); switch(subState){ case 1: if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ obj.getVar("target_Lacerthorns").push_obj_vector(damager); local apdPath = "character/atswordman/4_darktempler/lacerthorns/ap_lacerthorns.nut"; local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true); sq_HoldAndDelayDie(damager, obj, true, true, true, 0, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); sq_AddDrawOnlyAniFromParent(damager, "character/swordman/effect/animation/atlacerthorns/atlacerthornsshot_00.ani", 0, 0, sq_GetObjectHeight(damager) / 2); } break; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Madness function checkExecutableSkill_Madness_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_MADNESS); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_MADNESS, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function checkCommandEnable_Madness_bykk(obj) { if (!obj) return 0; local loadSlot = obj.sq_GetSkillLoad(SKILL_DARKEMPLER_EVOLVE); if(!loadSlot) return 0; local count = loadSlot.getRemainLoadNumber(); local mincount = obj.sq_GetLevelData(SKILL_DARKEMPLER_MADNESS, 0, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_MADNESS)); if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS) > 0){ local decase = obj.sq_GetLevelData(SKILL_DARKEMPLER_VESPERS, 1, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS)); mincount = (mincount*(100.0 - decase.tofloat()) / 100.0).tointeger(); } if(count < mincount) return 0; return 1; } function onSetState_Madness_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_SetCurrentAnimation(ANIMATION_DARKEMPLER_MADNESS_BODY); obj.sq_PlaySound("SW_MADNESS"); local currentAni = obj.getCurrentAnimation(); local DelaySum = currentAni.getDelaySum(false); local castSum = currentAni.getDelaySum(0,7); local expSum = currentAni.getDelaySum(0,7); obj.sq_SetXScroll(300, castSum, DelaySum - castSum - expSum, expSum); obj.getVar("madness_target").clear_obj_vector(); local loadSlot = obj.sq_GetSkillLoad(SKILL_DARKEMPLER_EVOLVE); local mincount = obj.sq_GetLevelData(SKILL_DARKEMPLER_MADNESS, 0, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_MADNESS)); if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS) > 0){ local decase = obj.sq_GetLevelData(SKILL_DARKEMPLER_VESPERS, 1, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS)); mincount = (mincount*(100.0 - decase.tofloat()) / 100.0).tointeger(); } loadSlot.decreaseLoadCount(mincount); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Madness_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 onKeyFrameFlag_Madness_bykk(obj, flagIndex) { if (!obj) return false; switch(flagIndex){ case 0://生成阵 sq_flashScreen(obj, 0, 60, 60, 204, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 5, 120); local range = sq_GetIntData(obj, SKILL_DARKEMPLER_MADNESS, 0); local currentAni = obj.getCurrentAnimation(); local DelaySum = currentAni.getDelaySum(8,22); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_MADNESS, SKILL_DARKEMPLER_MADNESS, 1, 1.0) + 100; cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,300,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_MADNESS,1,range,DelaySum,totalDamage,0,0,0,0,0,1); break; case 1://发射激光 local currentAni = obj.getCurrentAnimation(); local DelaySum = currentAni.getDelaySum(15,15); local speedRate = 6000 / DelaySum; local offsetX = [-30,25,85,120,80,-30,25,85,120,80]; local offsetZ = [150,145,112,60,30,150,145,112,60,30]; local disX = [580,560,490,440,375,340,290,330,280,260]; local disY = [15,-10,30,20,-20,-30,25,10,-15,-25]; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_MADNESS, SKILL_DARKEMPLER_MADNESS, 1, 1.0) + 100; local range = sq_GetIntData(obj, SKILL_DARKEMPLER_MADNESS, 0); for(local i = 0; i < 10; i++){ local disPosX = sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(),disX[i] - 150); local disPosY = sq_GetYPos(obj) + disY[i]; cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,offsetX[i],0,offsetZ[i],obj.getDirection(),4,SKILL_DARKEMPLER_MADNESS,2,speedRate,sq_getRandom(1,8),obj.getDirection(),disPosX,disPosY,0,0,0,1); } cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,300,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_MADNESS,3,speedRate,totalDamage,range,0,0,0,0,0,1); break; case 3: local attackObj = sq_GetCNRDObjectToCollisionObject(obj.getVar("madness").get_obj_vector(0)); local size = obj.getVar("madness_target").get_obj_vector_size(); break; } return true; } function onEndState_Madness_bykk(obj, new_state) { if(!obj) return; if(new_state != SKILL_DARKEMPLER_MADNESS){ local attackObj = sq_GetCNRDObjectToCollisionObject(obj.getVar("madness").get_obj_vector(0)); if(attackObj) attackObj.setValid(false); local size = obj.getVar("madness_target").get_obj_vector_size(); for(local i = 0; i < size; i++){ local activeObj = obj.getVar("madness_target").get_obj_vector(i); if(activeObj) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, "character/atswordman/4_darktempler/madness/ap_madness.nut"); } } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Punishment function checkExecutableSkill_Punishment_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_PUNISHMENT); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_PUNISHMENT, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function checkCommandEnable_Punishment_bykk(obj) { if (!obj) return 0; return 1; } function onSetState_Punishment_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_DARKEMPLER_PUNISHMENT_CASTING_BODY1); obj.sq_PlaySound("SW_PUNISHMENT"); obj.sq_SetXScrollStart(400, 500); obj.getVar("punishment_quick").setBool(0,false); obj.getVar("punishment_base").setInt(10, sq_GetXPos(obj)); obj.getVar("punishment_target").clear_obj_vector(); 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("punishment_speed").setInt(0, speedRate); break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_PUNISHMENT_ATTACK_MOTION1); local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_PUNISHMENT); local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_PUNISHMENT, 0, skill_level); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 115)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_PUNISHMENT,2,0,0,0,0,0,0,0,0,0); obj.setTimeEvent(3,150,1,false); break; case 2: obj.removeAllTimeEvent(); obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_PUNISHMENT_FINISH_MOTION_BODY1); obj.sq_PlaySound("SW_PUNISHMENT_FIN"); local pooledObj = createOnlyDrawObject_AtSwordMan_bykk(obj, "character/swordman/effect/animation/atpunishment/finish/atpunishment_finish_bottom1.ani",true,obj.getDirection(), sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 350),sq_GetYPos(obj), 100, ENUM_DRAWLAYER_BOTTOM); local pAni = pooledObj.getCurrentAnimation(); pAni.setImageRateFromOriginal(3.0, 1.2); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(0,5); obj.setTimeEvent(1, delaySum, 1, false); local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_PUNISHMENT); local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_PUNISHMENT, 1, skill_level); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 116)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.setTimeEvent(2, 1800, 1, false); break; } } function onTimeEvent_Punishment_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return; switch(timeEventIndex){ case 0: //sq_flashScreen(obj, 200, 100, 100, 255, sq_RGB(255,255,255), GRAPHICEFFECT_SPACE_DISTORT, ENUM_DRAWLAYER_CONTACT); break; case 1: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atpunishment/finish/atpunishment_finish_top_eff2_dodge.ani", 350, 1, 100); break; case 2: attack_Punishment_bykk(obj); sq_SetMyShake(obj, 15, 500); break; case 3: local inputConut = obj.getRapidInputFrequency(); inputConut = inputConut.tointeger(); local inputMax = 5; local gapByInputMin = sq_GetIntData(obj,SKILL_DARKEMPLER_PUNISHMENT,4); local gapByInputMax = sq_GetIntData(obj,SKILL_DARKEMPLER_PUNISHMENT,5); if(inputConut >= inputMax){ obj.setTimeEvent(3, gapByInputMin, 1,false); local currentAni = obj.getCurrentAnimation(); local speedRate = obj.getVar("punishment_speed").getInt(0) * 2; currentAni.setSpeedRate(speedRate.tofloat()); obj.getVar("punishment_quick").setBool(0,true); local passiveObj = obj.getVar("punishment_attack").get_obj_vector(0); if(passiveObj){ local pAni = passiveObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); } local passiveObj2 = obj.getVar("punishment_attack2").get_obj_vector(0); if(passiveObj2){ local pAni = passiveObj2.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); } local passiveObj3 = obj.getVar("punishment_attack3").get_obj_vector(0); if(passiveObj3){ local pAni = passiveObj3.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); } } else{ obj.setTimeEvent(3, gapByInputMax, 1,false); local currentAni = obj.getCurrentAnimation(); local speedRate = obj.getVar("punishment_speed").getInt(0); currentAni.setSpeedRate(speedRate.tofloat()); local passiveObj = obj.getVar("punishment_attack").get_obj_vector(0); if(passiveObj){ local pAni = passiveObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); } local passiveObj2 = obj.getVar("punishment_attack2").get_obj_vector(0); if(passiveObj2){ local pAni = passiveObj2.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); } local passiveObj3 = obj.getVar("punishment_attack3").get_obj_vector(0); if(passiveObj3){ local pAni = passiveObj3.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); } } break; } } function onProc_Punishment_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); break; } } function onEndCurrentAni_Punishment_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_DARKEMPLER_PUNISHMENT, STATE_PRIORITY_IGNORE_FORCE, true); break; case 2: obj.sq_SetXScrollStop(200); local flashScreenObj = obj.getVar("flashobj").get_obj_vector(0); if(flashScreenObj) flashScreenObj.setValid(false); local size = obj.getVar("punishment_target").get_obj_vector_size(); for(local i = 0; i < size; i++){ local activeObj = obj.getVar("punishment_target").get_obj_vector(i); if(activeObj) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, "character/atswordman/4_darktempler/punishment/ap_punishment.nut"); } obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onKeyFrameFlag_Punishment_bykk(obj, flagIndex) { if(!obj) return; local subState = obj.getSkillSubState(); switch(flagIndex){ case 0: switch(subState){ case 0: local range = sq_GetIntData(obj, SKILL_DARKEMPLER_PUNISHMENT, 0); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,350,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_PUNISHMENT,1,range,0,0,0,0,0,0,0,0); local flashScreenObj = sq_flashScreen(obj, 800, 99990, 0, 255, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); obj.getVar("flashobj").clear_obj_vector(); obj.getVar("flashobj").push_obj_vector(flashScreenObj); obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_PUNISHMENT, STATE_PRIORITY_IGNORE_FORCE, true); break; } break; case 30: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atpunishment/attack/atpunishment_attack_eff1.ani", 350, 1, 100); attack_Punishment_bykk(obj); break; case 36: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atpunishment/attack/atpunishment_attack_slash_eff.ani", 350, 1, 100); attack_Punishment_bykk(obj); break; case 40: cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,350,0,100,obj.getDirection(),4,SKILL_DARKEMPLER_PUNISHMENT,3,0,0,0,0,0,0,0,0,0); break; case 66: // if(obj.getVar("punishment_quick").getBool(0)) //sendAwakeCutinInfo(obj,35); case 41: case 48: case 57: case 76: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atpunishment/attack/atpunishment_attack_slash_eff.ani", sq_getRandom(150,350), 1, sq_getRandom(0,100)); attack_Punishment_bykk(obj); break; } } function attack_Punishment_bykk(obj) { local size = obj.getVar("punishment_target").get_obj_vector_size(); for(local i = 0; i < size; i++){ local activeObj = obj.getVar("punishment_target").get_obj_vector(i); if(activeObj) sq_SendHitObjectPacket(obj,activeObj,0,0,sq_GetObjectHeight(activeObj) / 2); } } function onEndState_Punishment_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_DARKEMPLER_PUNISHMENT){ obj.sq_SetXScrollStop(0); local flashScreenObj = obj.getVar("flashobj").get_obj_vector(0); if(flashScreenObj) flashScreenObj.setValid(false); local size = obj.getVar("punishment_target").get_obj_vector_size(); for(local i = 0; i < size; i++){ local activeObj = obj.getVar("punishment_target").get_obj_vector(i); if(activeObj) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, "character/atswordman/4_darktempler/punishment/ap_punishment.nut"); } } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Scaffold function checkExecutableSkill_Scaffold_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_SCAFFOLD); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SCAFFOLD, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function checkCommandEnable_Scaffold_bykk(obj) { if (!obj) return 0; return 1; } function onSetState_Scaffold_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_SetCurrentAnimation(ANIMATION_DARKEMPLER_SCAFFOLD); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atscaffold/start_00_cast.ani", 0, -3, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atscaffold/start_01_cast.ani", 0, -2, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atscaffold/start_02_cast.ani", 0, 1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atscaffold/start_03_cast.ani", 0, -1, 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_Scaffold_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 onKeyFrameFlag_Scaffold_bykk(obj, flagIndex) { switch(flagIndex){ case 0: local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_SCAFFOLD); local lifeTime = sq_GetLevelData(obj, SKILL_DARKEMPLER_SCAFFOLD, 0, skill_level); local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_SCAFFOLD, 1, skill_level); local totalDamage2 = sq_GetLevelData(obj, SKILL_DARKEMPLER_SCAFFOLD, 2, skill_level); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,50,0,90,obj.getDirection(),4,SKILL_DARKEMPLER_SCAFFOLD,1,totalDamage,totalDamage2,lifeTime,0,0,0,0,0,1); break; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //ShadowBinding function checkExecutableSkill_ShadowBinding_bykk(obj) { if (!obj) return 0; if(obj.getVar("bindingObj").get_obj_vector_size() > 0 && obj.getVar("ShadowBindingBool").getBool(0)){ local bindingObj = obj.getVar("bindingObj").get_obj_vector(0); if(bindingObj){ obj.getVar("ShadowBindingBool").setBool(0, false); local colObj = sq_GetCNRDObjectToCollisionObject(bindingObj); colObj.getVar().setBool(100, true); colObj.stopTimeEvent(1); colObj.setTimeEvent(1,100,1,true); } return 0; } local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_SHADOWBINDING); if(isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWBINDING, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function checkCommandEnable_ShadowBinding_bykk(obj) { if (!obj) return 0; return 1; } function onSetState_ShadowBinding_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); switch(subState){ case 0: obj.sq_PlaySound("SW_SHADOW_BINDING"); obj.sq_StopMove(); obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWBINDING); obj.getVar("ShadowBindingBool").setBool(0, true); local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_SHADOWBINDING); local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWBINDING, 0, skill_level); local totalDamage2 = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWBINDING, 1, skill_level); local lifeTime = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWBINDING, 2, skill_level); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_SHADOWBINDING,1,totalDamage,totalDamage2,lifeTime,0,0,0,0,0,1); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_ShadowBinding_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 onProcCon_ShadowBinding_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: break; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //ShadowHarvest function checkExecutableSkill_ShadowHarvest_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(64); if(isUse){ obj.sq_IntVectClear(); if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(1); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWHARVEST, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function checkCommandEnable_ShadowHarvest_bykk(obj) { if (!obj) return 0; return 1; } function onSetState_ShadowHarvest_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_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWHARVESTSHOOTGROUND); break; case 1: obj.sq_StopMove(); obj.sq_ZStop(); obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWHARVESTSHOOT); local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(200.0); break; } } function onEndCurrentAni_ShadowHarvest_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(0, STATE_PRIORITY_USER, true); break; case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(0); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(6, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onKeyFrameFlag_ShadowHarvest_bykk(obj, flagIndex) { if (!obj) return false; switch(flagIndex){ case 0: local isSeal = 0,skill = sq_GetSkill(obj, SKILL_DARKEMPLER_SHADOWHARVEST),skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_SHADOWHARVEST); if(!skill.isSealFunction()) isSeal = 1; local passive_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_SHADOWHARVEST); local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWHARVEST, 0, skill_level); local totalDamage2 = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWHARVEST, 6, skill_level); local range = 170 + 170 * sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWHARVEST, 1, skill_level) / 2 / 100; local lifeTime = sq_GetIntData(obj, SKILL_DARKEMPLER_SHADOWHARVEST, 4); local hitTime = sq_GetIntData(obj, SKILL_DARKEMPLER_SHADOWHARVEST, 5); switch(obj.getSkillSubState()){ case 0: cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,30,0,80,obj.getDirection(),4,SKILL_DARKEMPLER_SHADOWHARVEST,1,totalDamage,totalDamage2,range,lifeTime,hitTime,isSeal,passive_level,0,1); break; case 1: cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,30,0,30,obj.getDirection(),4,SKILL_DARKEMPLER_SHADOWHARVEST,1,totalDamage,totalDamage2,range,lifeTime,hitTime,isSeal,passive_level,0,1); break; } break; } return true; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //ShadowHiding function checkExecutableSkill_ShadowHiding_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_SHADOWHIDING); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWHIDING, STATE_PRIORITY_IGNORE_FORCE, true); obj.getVar("ShadowHiding").clear_vector(); obj.getVar("ShadowHiding").push_vector(obj.getXPos()); obj.getVar("ShadowHiding").push_vector(obj.getYPos()); obj.getVar("ShadowHiding").push_vector(obj.getXPos()); obj.getVar("ShadowHiding").push_vector(obj.getYPos()); return 1; } return 0; } function checkCommandEnable_ShadowHiding_bykk(obj) { if (!obj) return 0; return 1; } function onSetState_ShadowHiding_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_DARKEMPLER_SHADOWHIDINGCAST); break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWHIDINGMOVE); local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_SHADOWHIDING); local time = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWHIDING, 0, skill_level); obj.setTimeEvent(0, time, 1, false); obj.setTimeEvent(1, 25, -1, false); CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_DARKEMPLER_SHADOWHIDING, false, "character/atswordman/4_darktempler/shadowhiding/ap_shadowhiding.nut", true); break; case 2: obj.removeAllTimeEvent(); obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWHIDINGEND); CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/atswordman/4_darktempler/shadowhiding/ap_shadowhiding.nut"); break; } } function onEndCurrentAni_ShadowHiding_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWHIDING, STATE_PRIORITY_IGNORE_FORCE, true); break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onProcCon_ShadowHiding_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: obj.setSkillCommandEnable(SKILL_DARKEMPLER_SHADOWHIDING, true); if(obj.sq_IsEnterSkill(SKILL_DARKEMPLER_SHADOWHIDING) != -1){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWHIDING, STATE_PRIORITY_IGNORE_FORCE, true); } break; } } function onTimeEvent_ShadowHiding_bykk(obj, timeEventIndex, timeEventCount) { switch(timeEventIndex){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWHIDING, STATE_PRIORITY_IGNORE_FORCE, true); break; case 1: if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(obj.getXPos(),obj.getYPos() - 5)) sq_setCurrentAxisPos(obj, 1, obj.getYPos() - 5); } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(obj.getXPos(),obj.getYPos() + 5)) sq_setCurrentAxisPos(obj, 1, obj.getYPos() + 5); } if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(obj.getXPos() - 10,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, obj.getXPos() - 10); } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(obj.getXPos() + 10,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, obj.getXPos() + 10); } break; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //ShadowLancer function checkExecutableSkill_ShadowLancer_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(63); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWLANCER, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function checkCommandEnable_ShadowLancer_bykk(obj) { if (!obj) return 0; return 1; } function onSetState_ShadowLancer_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_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWLANCERREADY); obj.sq_PlaySound("SW_SHADOW_LANCER"); break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWLANCER); obj.getVar("move").setInt(0, sq_GetXPos(obj)); obj.getVar("move").setInt(1, 135); local hitMax = sq_GetIntData(obj, SKILL_DARKEMPLER_SHADOWLANCER, 4); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_SHADOWLANCER, SKILL_DARKEMPLER_SHADOWLANCER, 0, 1.0) + 100; local currentAni = obj.getCurrentAnimation(); local DelaySum = currentAni.getDelaySum(false); local speedRate = 36000 / DelaySum; cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,60,obj.getDirection(),4,SKILL_DARKEMPLER_SHADOWLANCER,1,totalDamage,hitMax,speedRate,0,0,0,0,0,1); local pooledObj = createOnlyDrawObject_AtSwordMan_bykk(obj,"character/swordman/effect/animation/atshadowlancer/13_dust.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj) + 1,sq_GetZPos(obj),ENUM_DRAWLAYER_NORMAL); sq_moveWithParent(obj, pooledObj); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_ShadowLancer_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState) { case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWLANCER, STATE_PRIORITY_IGNORE_FORCE, true); break; case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(1); obj.sq_IntVectPush(200); obj.sq_AddSetStatePacket(6, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onProc_ShadowLancer_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: local baseX = obj.getVar("move").getInt(0); local moveX = obj.getVar("move").getInt(1); local stateTime = obj.sq_GetStateTimer(); local currentAni = obj.getCurrentAnimation(); local DelaySum = currentAni.getDelaySum(false); local CelXpos = sq_GetAccel(0, moveX, stateTime, DelaySum, true); local destX = sq_GetDistancePos(baseX, obj.getDirection(), CelXpos); if(obj.isMovablePos(destX,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, destX); else obj.getVar("move").setInt(1, 0); break; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //ShadowPuppet function checkExecutableSkill_ShadowPuppet_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_SHADOWPUPPET); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWPUPPET, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function checkCommandEnable_ShadowPuppet_bykk(obj) { if (!obj) return 0; return 1; } function onSetState_ShadowPuppet_bykk(obj, state, datas, isResetTimer) { if(!obj) return; obj.sq_StopMove(); local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); switch(subState){ case 0: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWPUPPETCASTING); obj.sq_PlaySound("SW_SHADOW_PUPPET"); break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWPUPPETCHARGESTART); break; case 2: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWPUPPETCHARGELOOP); break; case 3: obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWPUPPETFINISH); local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_SHADOWPUPPET); local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWPUPPET, 2, skill_level); local lifeTime = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWPUPPET, 1, skill_level); local hitTime = sq_GetIntData(obj, SKILL_DARKEMPLER_SHADOWPUPPET, 1); if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS) > 0){ totalDamage = totalDamage + sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWPUPPET, 0, skill_level); hitTime = hitTime / 2; } cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,30,0,70,obj.getDirection(),4,SKILL_DARKEMPLER_SHADOWPUPPET,1,totalDamage,lifeTime,hitTime,0,0,0,0,0,1); break; } } function onEndCurrentAni_ShadowPuppet_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_DARKEMPLER_SHADOWPUPPET, STATE_PRIORITY_IGNORE_FORCE, true); break; case 3: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onKeyFrameFlag_ShadowPuppet_bykk(obj, flagIndex) { local subState = obj.getSkillSubState(); if(subState == 0 && flagIndex == 0){ if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_INCARNATION) > 0){ local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_SHADOWPUPPET); local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWPUPPET, 2, skill_level); local lifeTime = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWPUPPET, 1, skill_level) / 2; local hitTime = sq_GetIntData(obj, SKILL_DARKEMPLER_SHADOWPUPPET, 1) / 2; local balance = 20; totalDamage = totalDamage * balance / 100; cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,400,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_SHADOWPUPPET,2,totalDamage,lifeTime,hitTime,sq_GetOppositeDirection(obj.getDirection()),1,0,0,0,0); obj.setTimeEvent(1,100,1,false); } else if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS) > 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWPUPPET, STATE_PRIORITY_IGNORE_FORCE, true); } else{ local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_SHADOWPUPPET); local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWPUPPET, 2, skill_level); local lifeTime = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWPUPPET, 1, skill_level); local hitTime = sq_GetIntData(obj, SKILL_DARKEMPLER_SHADOWPUPPET, 0); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,400,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_SHADOWPUPPET,2,totalDamage,lifeTime,hitTime,sq_GetOppositeDirection(obj.getDirection()),0,0,0,0,0); } } } function onTimeEvent_ShadowPuppet_bykk(obj, timeEventIndex, timeEventCount) { switch(timeEventIndex){ case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWPUPPET, STATE_PRIORITY_IGNORE_FORCE, true); break; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //SoulDrain function checkExecutableSkill_SoulDrain_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(59); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SOULDRAIN, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function checkCommandEnable_SoulDrain_bykk(obj) { if (!obj) return 0; return 1; } function onSetState_SoulDrain_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_SetCurrentAnimation(ANIMATION_DARKEMPLER_SOULDRAIN); local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_SOULDRAIN); local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_SOULDRAIN, 3, skill_level); local lifeTime = sq_GetLevelData(obj, SKILL_DARKEMPLER_SOULDRAIN, 0, skill_level); local enemyMax = sq_GetLevelData(obj, SKILL_DARKEMPLER_SOULDRAIN, 4, skill_level); local hitMax = sq_GetLevelData(obj, SKILL_DARKEMPLER_SOULDRAIN, 2, skill_level); local range = sq_GetLevelData(obj, SKILL_DARKEMPLER_SOULDRAIN, 1, skill_level) * 2; local hitTime = sq_GetIntData(obj, SKILL_DARKEMPLER_SOULDRAIN, 0); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,-1,0,obj.getDirection(),4,SKILL_DARKEMPLER_SOULDRAIN,1,totalDamage,lifeTime,enemyMax,hitMax,range,hitTime,0,0,1); if(obj.getVar("souldrain").get_obj_vector_size() < 1) obj.getVar("souldrain").clear_obj_vector(); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_SoulDrain_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; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //StarFall function checkExecutableSkill_StarFall_bykk(obj) { if (!obj) return 0; local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_STARFALL); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_STARFALL, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function checkCommandEnable_StarFall_bykk(obj) { if (!obj) return 0; return 1; } function onSetState_StarFall_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_SetCurrentAnimation(ANIMATION_DARKEMPLER_STARFALL); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_StarFall_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 onKeyFrameFlag_StarFall_bykk(obj, flagIndex) { if (!obj) return false; switch(flagIndex){ case 1: local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_STARFALL); local create_number = sq_GetLevelData(obj, SKILL_DARKEMPLER_STARFALL, 0, skill_level); obj.setTimeEvent(1,50,create_number,true); break; } return true; } function onTimeEvent_StarFall_bykk(obj, timeEventIndex, timeEventCount) { local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_STARFALL); local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_STARFALL, 1, skill_level); local range = sq_GetIntData(obj, SKILL_DARKEMPLER_STARFALL, 0); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,100,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_STARFALL,1,totalDamage,range,timeEventCount,0,0,0,0,0,1); } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Whipswordbal_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_WHIPSWORDBAL); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_WHIPSWORDBAL, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Whipswordbal_bykk(obj) { if (!obj) return false; local state = obj.sq_GetState(); if(state == 0 || state == 108 || state == 14) return true; else return false; } function onSetState_Whipswordbal_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); switch(subState){ case 0: obj.sq_PlaySound("SW_WHIPSWORDBAL"); if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH) > 0) obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_WHIPSWORDBAL1_DEVIL); else obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_WHIPSWORDBAL1); obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("effect/animation/atwhipswordbal/bal_cast.ani"), 0, 0); local bonusRate = 1.0; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/2_demonslayer/WillPower/ap_WillPower.nut")) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_WILLPOWER, 5, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_WILLPOWER)).tofloat() / 1000.0; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_WHIPSWORDBAL, SKILL_DEMONSLAYER_WHIPSWORDBAL, 0, bonusRate) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 86)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_WHIPSWORDBAL2); break; case 2: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_WHIPSWORDBAL3); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Whipswordbal_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_WHIPSWORDBAL, STATE_PRIORITY_IGNORE_FORCE, true); break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Whipswordbal_bykk(obj, damager, boundingBox, isStuck) { if(!obj) return false; // Calldaimus_onAttack(obj,damager, boundingBox, isStuck); } function onEnterFrame_Whipswordbal_bykk(obj, frameIndex) { if(!obj) return; switch(frameIndex){ case 4: local count = sq_GetIntData(obj,SKILL_DEMONSLAYER_WHIPSWORDBAL, 0), isSub2 = 0; if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_QUEENOFMINE) > 0){ if(count < 6) count = 6; isSub2 = 1; } local offsetX = sq_GetIntData(obj,SKILL_DEMONSLAYER_WHIPSWORDBAL, 1), offsetY = 0, isSub = 0; local skill_level = sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH); if(skill_level > 0){offsetY = 40; isSub = 1;} local bonusRate = 1.0; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/2_demonslayer/WillPower/ap_WillPower.nut")) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_WILLPOWER, 5, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_WILLPOWER)).tofloat() / 1000.0; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_WHIPSWORDBAL, SKILL_DEMONSLAYER_WHIPSWORDBAL, 0, bonusRate) + 100; for (local i = 0; i < count ; i++){ cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 135 + offsetX * i, offsetY, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_WHIPSWORDBAL, 1, totalDamage, isSub, isSub2, 0, 0, 0, 0, 0, 1); if(skill_level > 0) cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 135 + offsetX * i, -40, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_WHIPSWORDBAL, 1, totalDamage, 1, isSub2, 0, 0, 0, 0, 0, 1); } break; } } function onEndState_Whipswordbal_bykk(obj, newState) { if(!obj) return; } function onKeyFrameFlag_Whipswordbal_bykk(obj, flagIndex) { if (!obj) return; } function onProcCon_Whipswordbal_bykk(obj) { if(!obj) return; } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Snakedance_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_SNAKEDANCE); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_SNAKEDANCE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Snakedance_bykk(obj) { if (!obj) return false; local state = obj.sq_GetState(); if(state == 0 || state == 108 || state == 14) return true; else return false; } function onSetState_Snakedance_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_SNAKEDANCE1); obj.sq_PlaySound("SW_SNAKEDANCE_01"); break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_SNAKEDANCE2); obj.sq_PlaySound("SW_SNAKEDANCE_02"); break; case 2: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_SNAKEDANCE3); obj.sq_PlaySound("SW_SNAKEDANCE_03"); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local bonusRate = 1.0; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/2_demonslayer/WillPower/ap_WillPower.nut")) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_WILLPOWER, 2, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_WILLPOWER)).tofloat() / 1000.0; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_SNAKEDANCE, SKILL_DEMONSLAYER_SNAKEDANCE, subState, bonusRate) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 112 + subState)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); } function onEndCurrentAni_Snakedance_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_SNAKEDANCE, STATE_PRIORITY_IGNORE_FORCE, true); break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Snakedance_bykk(obj, damager, boundingBox, isStuck) { if(!obj) return; } function onEnterFrame_Snakedance_bykk(obj, frameIndex) { if(!obj) return; } function onEndState_Snakedance_bykk(obj, newState) { if(!obj) return; } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Clawblade_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_CLAWBLADE); if (isUse){ obj.getVar("Clawblade").clear_obj_vector(); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_CLAWBLADE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Clawblade_bykk(obj) { if (!obj) return false; return true; } function onSetState_Clawblade_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_CLAWBLADE1); obj.sq_PlaySound("SW_CLAWBLADE"); obj.getVar("clawblade_target").clear_obj_vector(); local bonusRate = 1.0; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/2_demonslayer/WillPower/ap_WillPower.nut")) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_WILLPOWER, 1, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_WILLPOWER)).tofloat() / 1000.0; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_CLAWBLADE, SKILL_DEMONSLAYER_CLAWBLADE, 0, bonusRate) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 90)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_CLAWBLADE2); local bonusRate = 1.0; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/2_demonslayer/WillPower/ap_WillPower.nut")) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_WILLPOWER, 1, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_WILLPOWER)).tofloat() / 1000.0; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_CLAWBLADE, SKILL_DEMONSLAYER_CLAWBLADE, 1, bonusRate) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 91)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 2: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_CLAWBLADE3); break; case 3: obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_CLAWBLADEENDATTACK_BODY); local bonusRate = 1.0; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/2_demonslayer/WillPower/ap_WillPower.nut")) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_WILLPOWER, 1, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_WILLPOWER)).tofloat() / 1000.0; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_CLAWBLADE, -1, 0, bonusRate) + obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_CLAWBLADE, -1, 1, bonusRate) + 200; local damageRate = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_QUEENOFMINE, -1, 0, 1.0) + 100; local totalDamage2 = totalDamage * damageRate / 1000; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 90)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage2); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(subState == 2){ local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(150.0); } } function onEndCurrentAni_Clawblade_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_CLAWBLADE, STATE_PRIORITY_IGNORE_FORCE, true); break; case 2: if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_QUEENOFMINE) > 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_CLAWBLADE, STATE_PRIORITY_IGNORE_FORCE, true); break; } case 3: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Clawblade_bykk(obj, damager, boundingBox, isStuck) { if(!obj) return false; local subState = obj.getSkillSubState(); //Calldaimus_onAttack(obj,damager, boundingBox, isStuck); switch(subState){ case 0: local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); local stateTime = obj.sq_GetStateTimer(); if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH) > 0){ local bonusRate = 1.0; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/2_demonslayer/WillPower/ap_WillPower.nut")) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_WILLPOWER, 1, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_WILLPOWER)).tofloat() / 1000.0; local totalDamage = (obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_CLAWBLADE, -1, 0, bonusRate) + 100) * (obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_DEVILSWORDTECH, -1, 5, bonusRate) + 100 ) / 100; local id = sq_GetObjectId(damager); local hitMax = sq_GetIntData(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH, 3); cearteSkillPassiveObj_AtSwordMan_bykk(obj, damager, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 0, sq_GetObjectHeight(damager) / 2, obj.getDirection(), 2, SKILL_DEMONSLAYER_CLAWBLADE, 2, totalDamage, id, hitMax, 0, 0, 0, 0, 0, 1); } if(sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager) && !sq_IsFixture(damager)){ obj.getVar("clawblade_target").push_obj_vector(damager); local apdPath = "character/atswordman/2_demonslayer/clawblade/ap_clawblade.nut"; local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true); if(addAppendage){ sq_HoldAndDelayDie(damager, obj, true, true, false, 100, 100, ENUM_DIRECTION_NEUTRAL, addAppendage); sq_MoveToAppendageForce(damager, obj, obj, 200, 0, 0, delaySum - stateTime, true, addAppendage); } } } break; } } function onEnterFrame_Clawblade_bykk(obj, frameIndex) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: switch(frameIndex){ case 0: local size = obj.getVar("clawblade_target").get_obj_vector_size(); if(size > 0){ local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); local apdPath = "character/atswordman/2_demonslayer/clawblade/ap_clawblade.nut"; for(local i = 0; i < size; i++){ local damager = obj.getVar("clawblade_target").get_obj_vector(i); if(damager){ local addAppendage = CNSquirrelAppendage.sq_GetAppendage(damager, apdPath); sq_MoveToAppendageForce(damager, obj, obj, 150, 0, 100, delaySum, true, addAppendage); } } } break; case 3: case 5: case 7: obj.resetHitObjectList(); break; } case 2: switch(frameIndex){ case 0: local size = obj.getVar("clawblade_target").get_obj_vector_size(); if(size > 0){ local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(0,2); local apdPath = "character/atswordman/2_demonslayer/clawblade/ap_clawblade.nut"; for(local i = 0; i < size; i++){ local damager = obj.getVar("clawblade_target").get_obj_vector(i); if(damager){ local addAppendage = CNSquirrelAppendage.sq_GetAppendage(damager, apdPath); sq_MoveToAppendageForce(damager, obj, obj, 180, 0, 0, delaySum, true, addAppendage); } } } break; case 3: local apdPath = "character/atswordman/2_demonslayer/clawblade/ap_clawblade.nut"; local size = obj.getVar("clawblade_target").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local damager = obj.getVar("clawblade_target").get_obj_vector(i); if(damager){ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_CLAWBLADE, -1, 1, 1.0); cearteSkillPassiveObj_AtSwordMan_bykk(obj, damager, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 0, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_CLAWBLADE, 1, totalDamage, 0, 0, 0, 0, 0, 0, 0, 1); CNSquirrelAppendage.sq_RemoveAppendage(damager, apdPath); } } } break; } } } function onEndState_Clawblade_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_DEMONSLAYER_CLAWBLADE){ local size = obj.getVar("clawblade_target").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("clawblade_target").get_obj_vector(i); if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/2_demonslayer/clawblade/ap_clawblade.nut"); } } } } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Pikesword_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_PIKESWORD); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_PIKESWORD, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Pikesword_bykk(obj) { if (!obj) return false; local state = obj.sq_GetState(); if(state == 0 || state == 108 || state == 14) return true; else return false; } function onSetState_Pikesword_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: if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH) > 0) obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_PIKESWORD_START_BODY); else obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_PIKESWORD); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_PIKESWORD, -1, 0, 1.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 89)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 1: if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH) > 0) obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_PIKESWORD_END_BODY); else obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_PIKESWORDDRAG); local bonusRate = 1.0; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/2_demonslayer/WillPower/ap_WillPower.nut")) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_WILLPOWER, 3, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_WILLPOWER)).tofloat() / 1000.0; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_PIKESWORD, -1, 1, bonusRate) + 100; local attackIndex = 87; if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH) > 0) attackIndex = 88; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Pikesword_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_PIKESWORD, STATE_PRIORITY_IGNORE_FORCE, true); break; case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Pikesword_bykk(obj, damager, boundingBox, isStuck) { if(!obj) return; } function onEnterFrame_Pikesword_bykk(obj, frameIndex) { if(!obj) return; } function onEndState_Pikesword_bykk(obj, newState) { if(!obj) return; } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Wildwhip_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_WILDWHIP); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_WILDWHIP, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Wildwhip_bykk(obj) { if (!obj) return false; local state = obj.sq_GetState(); if(state == 0 || state == 108 || state == 14) return true; else return false; } function onSetState_Wildwhip_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: // BodyCalldaimus(obj, "wildwhip1"); obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_WILDWHIP1); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); break; case 1: // BodyCalldaimus(obj, "wildwhip2"); obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_WILDWHIP2); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.sq_PlaySound("WILDWHIP_SPIRAL_LOOP", 2021); obj.setTimeEvent(1, 100, 1, false); local bonusRate = 1.0; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/2_demonslayer/WillPower/ap_WillPower.nut")) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_WILLPOWER, 4, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_WILLPOWER)).tofloat() / 1000.0; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_WILDWHIP, -1, 1, bonusRate) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 89)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH) > 0){ totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH, 3, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH)) / 100; local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(0, 0); cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 0, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_WILDWHIP, 1, totalDamage, delay, 0, 0, 0, 0, 0, 0, 1); } break; case 2: obj.stopSound(2021); obj.removeAllTimeEvent(); obj.sq_PlaySound("WILDWHIP_SPIRAL_FINISH"); // BodyCalldaimus(obj, "wildwhip3"); obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_WILDWHIP3); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); break; } } function onEndCurrentAni_Wildwhip_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_WILDWHIP, STATE_PRIORITY_IGNORE_FORCE, true); break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onTimeEvent_Wildwhip_bykk(obj, timeEventIndex, timeEventCount) { switch(timeEventIndex){ case 1: local inputConut = obj.getRapidInputFrequency(); inputConut = inputConut.tointeger(); local currentAni = obj.getCurrentAnimation(); local speedRate = 100; local inputMax = 2; if(inputConut >= inputMax){ speedRate = sq_GetIntData(obj, SKILL_DEMONSLAYER_WILDWHIP, 0); obj.getVar("wildwhip").setBool(0, true); } else obj.getVar("wildwhip").setBool(0, false); currentAni.setSpeedRate(speedRate.tofloat()); local attackObj = obj.getVar("wildwhip_obj").get_obj_vector(0); if(attackObj){ local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); local pAni = colObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); } obj.setTimeEvent(1, 100, 1, false); break; } } function onAttack_Wildwhip_bykk(obj, damager, boundingBox, isStuck) { if(!obj) return; } function onEnterFrame_Wildwhip_bykk(obj, frameIndex) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: if(frameIndex % 3 == 0){ if(obj.isMyControlObject()) obj.sq_SetShake(obj, 2, 85); } break; } } function onEndState_Wildwhip_bykk(obj, newState) { if(!obj) return; if(newState != 153){ obj.stopSound(2021); local attackObj = obj.getVar("wildwhip_obj").get_obj_vector(0); if(attackObj) attackObj.setValid(false); } } function onProcCon_Wildwhip_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } break; } } function onKeyFrameFlag_Wildwhip_bykk(obj, flagIndex) { if (!obj) return; switch(flagIndex){ case 1: obj.resetHitObjectList(); break; case 2: if(obj.getVar("wildwhip").getBool(0)) obj.resetHitObjectList(); break; } } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Blooddance_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_BLOODDANCE); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_BLOODDANCE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Blooddance_bykk(obj) { if (!obj) return false; local state = obj.sq_GetState(); if(state == 0 || state == 108 || state == 14) return true; else return false; } function onSetState_Blooddance_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); switch(subState){ case 0: obj.sq_PlaySound("SW_BLOODDANCE_01"); obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_BLOODDANCESTART); obj.getVar("blooddance_count").setInt(10, 1); break; case 1: obj.sq_PlaySound("BLOODDANCE_LOOP", 2022); obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_BLOODDANCELOOP); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_BLOODDANCE, -1, 0, 1.0) + 100; if(sq_GetIntData(obj, SKILL_DEMONSLAYER_BLOODDANCE, 5) > 0 || BLOODDANCE_STONE > 0) totalDamage = totalDamage * 56 / 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 94)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.setTimeEvent(1, 100, 1, false); break; case 2: obj.stopSound(2022); obj.removeAllTimeEvent(); obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_BLOODDANCEFINISH); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_BLOODDANCE, -1, 5, 1.0) + 100; if(sq_GetIntData(obj, SKILL_DEMONSLAYER_BLOODDANCE, 5) > 0 || BLOODDANCE_STONE > 0) totalDamage = totalDamage * 225 / 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 96)); 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(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH) > 0){ if(subState == 1){ local totalDamage = (obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_BLOODDANCE, -1, 0, 1.0) + 100) * sq_GetLevelData(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH, 4, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH)) / 100; if(sq_GetIntData(obj, SKILL_DEMONSLAYER_BLOODDANCE, 5) > 0 || BLOODDANCE_STONE > 0) totalDamage = totalDamage * 56 / 100; local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(0, 0); cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 0, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_BLOODDANCE, 1, totalDamage, delay, 0, 0, 0, 0, 0, 0, 1); } else if(subState == 2){ local attackObj = obj.getVar("blooddance_obj").get_obj_vector(0); if(attackObj) attackObj.setValid(false); local totalDamage = (obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_BLOODDANCE, -1, 5, 1.0) + 100) * sq_GetLevelData(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH, 4, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH)) / 100; if(sq_GetIntData(obj, SKILL_DEMONSLAYER_BLOODDANCE, 5) > 0 || BLOODDANCE_STONE > 0) totalDamage = totalDamage * 225 / 100; cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 0, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_BLOODDANCE, 2, totalDamage, 0, 0, 0, 0, 0, 0, 0, 1); } } } function onEndCurrentAni_Blooddance_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_BLOODDANCE, STATE_PRIORITY_IGNORE_FORCE, true); break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onTimeEvent_Blooddance_bykk(obj, timeEventIndex, timeEventCount) { switch(timeEventIndex){ case 1: local inputConut = obj.getRapidInputFrequency(); inputConut = inputConut.tointeger(); local currentAni = obj.getCurrentAnimation(); local speedRate = 100; local hitMax = sq_GetIntData(obj, SKILL_DEMONSLAYER_BLOODDANCE, 1); local inputMax = 2; if(inputConut >= inputMax){ hitMax = sq_GetIntData(obj, SKILL_DEMONSLAYER_BLOODDANCE, 2); speedRate = 180; } if(sq_GetIntData(obj, SKILL_DEMONSLAYER_BLOODDANCE, 5) > 0 || BLOODDANCE_STONE > 0) hitMax = hitMax * 2; if(obj.getVar("blooddance_count").getInt(10) + 1 > hitMax){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_BLOODDANCE, STATE_PRIORITY_IGNORE_FORCE, true); break; } else{ obj.getVar("blooddance_count").setInt(10, obj.getVar("blooddance_count").getInt(10) + 1) } currentAni.setSpeedRate(speedRate.tofloat()); local attackObj = obj.getVar("blooddance_obj").get_obj_vector(0); if(attackObj){ local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); local pAni = colObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); colObj.resetHitObjectList(); } obj.resetHitObjectList(); obj.setTimeEvent(1, 100, 1, false); break; } } function onAttack_Blooddance_bykk(obj, damager, boundingBox, isStuck) { if(!obj) return ; } function onEnterFrame_Blooddance_bykk(obj, frameIndex) { if(!obj) return; } function onEndState_Blooddance_bykk(obj, newState) { if(!obj) return; if(newState != SKILL_DEMONSLAYER_BLOODDANCE){ obj.stopSound(2022); local attackObj = obj.getVar("blooddance_obj").get_obj_vector(0); if(attackObj) attackObj.setValid(false); } } function onProc_Blooddance_bykk(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_BLOODDANCE, STATE_PRIORITY_IGNORE_FORCE, true); break; } break; } } function onKeyFrameFlag_Blooddance_bykk(obj, flagIndex) { if (!obj) return; switch(flagIndex){ case 1: if(obj.getSkillSubState() == 2){ obj.sq_PlaySound("BLOODDANCE_02"); obj.sq_PlaySound("SW_BLOODDANCE_02"); } break; } } function onProcCon_Blooddance_bykk(obj) { if(!obj) return; } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_BloodSeal_bykk(obj) { if(!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_BLOODSEAL); if(isUse){ obj.sq_AddSetStatePacket(84, STATE_PRIORITY_USER, false); return true; } return false; } function checkCommandEnable_BloodSeal_bykk(obj) { if(!obj) return false; local hp = obj.getHp(); local hpMin = sq_GetLevelData(obj, SKILL_DEMONSLAYER_BLOODSEAL, 4, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_BLOODSEAL)); if(hp < hpMin) return false; return true; } function onSetState_BloodSeal_bykk(obj, state, datas, isResetTimer) { if(!obj) return; obj.sq_StopMove(); obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_BLOODSEAL); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local hp = obj.getHp(); local hpMin = sq_GetLevelData(obj, SKILL_DEMONSLAYER_BLOODSEAL, 4, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_BLOODSEAL)); obj.sq_SendSetHpPacket(hp - hpMin, true, obj); } function onKeyFrameFlag_BloodSeal_bykk(obj, flagIndex) { if(!obj) return; if(flagIndex == 1){ local skill_level = sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_BLOODSEAL); local totalDamage = sq_GetLevelData(obj, SKILL_DEMONSLAYER_BLOODSEAL, 0, skill_level);//迦羅亞多段物理攻擊力 local totalDamage2 = obj.sq_GetPowerWithPassive(SKILL_DEMONSLAYER_BLOODSEAL, SKILL_DEMONSLAYER_BLOODSEAL, 2, -1, 1.0);//印痕多段物理攻擊力 local totalDamage3 = sq_GetLevelData(obj, SKILL_DEMONSLAYER_BLOODSEAL, 3, skill_level);//爆炸物理攻擊力 local sizeRate = sq_GetIntData(obj, SKILL_DEMONSLAYER_BLOODSEAL, 7) * 10;//印痕大小比率 local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger();//印痕多段物理攻擊力百分比 local damageRate2 = (totalDamage3.tofloat() / totalDamage.tofloat() * 100.0).tointeger();//爆炸物理攻擊力百分比 cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 50, 0, 75, obj.getDirection(), 2, SKILL_DEMONSLAYER_BLOODSEAL, 1, totalDamage, sizeRate, damageRate, damageRate2, 0, 0, 0, 0, 1); } } function onEndCurrentAni_BloodSeal_bykk(obj) { obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function checkExecutableSkill_Groupdance_bykk(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_GROUPDANCE); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_GROUPDANCE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Groupdance_bykk(obj) { if (!obj) return false; return true; } function onSetState_Groupdance_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: // BodyCalldaimus(obj, "groupdance"); obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_GROUPDANCE); obj.sq_PlaySound("DANCE_APPEAR"); obj.sq_PlaySound("SW_DANCE"); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Groupdance_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_Groupdance_bykk(obj, damager, boundingBox, isStuck) { if(!obj) return; } function onEnterFrame_Groupdance_bykk(obj, frameIndex) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: switch(frameIndex){ case 0: obj.getVar("groupdance_boss").clear_obj_vector(); obj.getVar("groupdance_named").clear_obj_vector(); obj.getVar("groupdance_normal").clear_obj_vector(); obj.getVar("groupdance_target").clear_obj_vector(); local objectManager = obj.getObjectManager(); local objectNumber = objectManager.getCollisionObjectNumber(); local range = sq_GetIntData(obj, SKILL_DEMONSLAYER_GROUPDANCE, 0); for (local i = 0; i < objectNumber; i++){ local object = objectManager.getCollisionObject(i); if(object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) < range && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) < range / 2){ local activeObj = sq_GetCNRDObjectToActiveObject(object); if(sq_IsBoss(activeObj)) obj.getVar("groupdance_boss").push_obj_vector(activeObj); else if(sq_IsNamed(activeObj)) obj.getVar("groupdance_named").push_obj_vector(activeObj); else obj.getVar("groupdance_normal").push_obj_vector(activeObj); } } if(obj.getVar("groupdance_boss").get_obj_vector_size() > 0){ for(local i = 0; i < obj.getVar("groupdance_boss").get_obj_vector_size(); i++){ local targetObj = obj.getVar("groupdance_boss").get_obj_vector(i); if(targetObj) obj.getVar("groupdance_target").push_obj_vector(targetObj); } } if(obj.getVar("groupdance_named").get_obj_vector_size() > 0){ for(local i = 0; i < obj.getVar("groupdance_named").get_obj_vector_size(); i++){ local targetObj = obj.getVar("groupdance_named").get_obj_vector(i); if(targetObj) obj.getVar("groupdance_target").push_obj_vector(targetObj); } } if(obj.getVar("groupdance_normal").get_obj_vector_size() > 0){ for(local i = 0; i < obj.getVar("groupdance_normal").get_obj_vector_size(); i++){ local targetObj = obj.getVar("groupdance_normal").get_obj_vector(i); if(targetObj) obj.getVar("groupdance_target").push_obj_vector(targetObj); } } break; case 6: local target_number = obj.getVar("groupdance_target").get_obj_vector_size(); local create_number = sq_GetIntData(obj, SKILL_DEMONSLAYER_GROUPDANCE, 1); local targetMax = 5; obj.getVar("groupdance_sub").setInt(10, 0); if(sq_GetIntData(obj, SKILL_DEMONSLAYER_GROUPDANCE, 14) > 10 || GROUPDANCE_STONE > 0){targetMax = 10; create_number = create_number + 10;} local baseangle = sq_getRandom(0,60); if(target_number > 0){ for(local ui = 0; ui < target_number; ui++){ local targetObj = obj.getVar("groupdance_target").get_obj_vector(ui); if(targetObj){ local id = sq_GetObjectId(targetObj); for(local i = 0; i < targetMax; i++){ if(obj.getVar("groupdance_sub").getInt(10) >= create_number) return; obj.getVar("groupdance_sub").setInt(10, obj.getVar("groupdance_sub").getInt(10) + 1); local angle = 360 / targetMax * i + baseangle; local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 150.0).tointeger(); local y = (sq_Sin(sq_ToRadian(angle.tofloat())) * 50.0).tointeger(); local sub = i % 5;//2;// if(sq_GetIntData(obj, SKILL_DEMONSLAYER_GROUPDANCE, 14) > 10 || GROUPDANCE_STONE > 0) sub = i % 5; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_GROUPDANCE, -1, 0, 1.0) + 100;//破 switch(sub){ case 1: totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_GROUPDANCE, -1, 1, 1.0) + 100; break;//舞 case 2: totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_GROUPDANCE, -1, 2, 1.0) + 100; break;//刺 case 3: totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_GROUPDANCE, -1, 3, 1.0) + 100; break;//滅 case 4: totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_GROUPDANCE, -1, 4, 1.0) + 100; break;//血飲狂舞 } // print("sub = "+sub+" , totalDamage = "+totalDamage); sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/demonslayer/animation/atgroupdance/appear_dance_fog.ani", x, y, 0); cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, x, y, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_GROUPDANCE, 1, totalDamage, sub, id, 0, 0, 0, 0, 0, 1); } } } } break; } break; } } function onEndState_Groupdance_bykk(obj, newState) { if(!obj) return; } function onProc_Groupdance_bykk(obj) { if(!obj) return; } function onKeyFrameFlag_Groupdance_bykk(obj, flagIndex) { if (!obj) return; } function onProcCon_Groupdance_bykk(obj) { if(!obj) return; } function setGroupdance_AtSwordman_bykk(obj, drawObj, targetObj) { if(!obj) return; local X = drawObj.getXPos(); local Y = drawObj.getYPos(); local posX = obj.getVar("move").getInt(12); local posY = targetObj.getYPos(); local offsetX = sq_Abs(X - posX); local offsetY = Y - posY; local atan = sq_Atan2(offsetX.tofloat(), offsetY.tofloat()) + 1.57; if((X < posX && obj.getDirection() == ENUM_DIRECTION_LEFT) || (X > posX && obj.getDirection() == ENUM_DIRECTION_RIGHT)){ if(Y < posY) atan = atan + 2.355; else atan = atan - 1.57; } local pAni = drawObj.getCurrentAnimation(); sq_SetfRotateAngle(pAni, -atan); }