//无双击 function checkExecutableSkill_Atomicsmash(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_ATOMICSMASH); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_ATOMICSMASH, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Atomicsmash(obj) { if (!obj) return false; if(obj.getState() == STATE_BYKK_GALESMASH){ if(obj.getVar("skillCancel").getBool(0)) return true; else return false; } return true; } function onSetState_Atomicsmash(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(PRANI_BYKK_ATOMICSMASHREADY); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.getVar("atomicsmashTar").clear_obj_vector(); break; case 1: obj.sq_SetCurrentAnimation(PRANI_BYKK_ATOMICSMASH); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/atomicsmash/effect.ani"), 0, 0); if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){ local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/atomicsmash_effecth2.ani"), 0, 0); } else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/atomicsmash_effecth2.ani"), 0, 0); } } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ATOMICSMASH, -1, 0, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_ATOMICSMASHSMASH)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setChakraAttackInfo(obj); break; case 2: obj.sq_SetCurrentAnimation(PRANI_BYKK_ATOMICSMASHFINISH); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/atomicsmash/effectfinal.ani"), 0, 0); if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){ local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/atomicsmash_effectfinalc.ani"), 0, 0); } else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/atomicsmash/lv75chakraofgod/chakragodslash_dodge.ani"), 0, 0); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/atomicsmash_effectfinalc.ani"), 0, 0); } } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); break; } } function onEndCurrentAni_Atomicsmash(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(STATE_BYKK_ATOMICSMASH, STATE_PRIORITY_AUTO, true); break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Atomicsmash(obj) { if(!obj) return; } function onKeyFrameFlag_Atomicsmash(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: local subState = obj.getSkillSubState(); switch(subState){ case 1: local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(1,1); local size = obj.getVar("atomicsmashTar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("atomicsmashTar").get_obj_vector(i); if(targetObj && targetObj.getState() != STATE_DIE){ local masterAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/priest/3exorcist_bykk/ap_atomicsmash_hold.nut"); sq_MoveToAppendageForce(targetObj, obj, obj, -50, 0, 180, delay, true, masterAppendage); } } } break; case 2: local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 0); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ATOMICSMASH, -1, 1, 1.0); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_ATOMICSMASH, 1); local apdPath = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)){ sizeRate = sizeRate * (100 + sq_GetIntData(obj, SKILL_BYKK_ATOMICSMASH, 3) / 10) / 100; local bonusRate = 1.0 + sq_GetIntData(obj, SKILL_BYKK_ATOMICSMASH, 2).tofloat() / 1000.0; totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ATOMICSMASH, -1, 1, bonusRate); } createSkillPassive_Priest_3exorcist_bykk(obj,obj,643022,0,0,0,sq_GetDirection(obj),totalDamage,sizeRate,speedRate,0,0,0,0,0); if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){ local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; local bonusRate = sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 0, sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD)); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ATOMICSMASH, -1, 1, 1.0); totalDamage = totalDamage * bonusRate / 100; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ createSkillPassive_Priest_3exorcist_bykk(obj,obj,643001,160,1,50,sq_GetDirection(obj),totalDamage,1,0,1,0,0,0,0); } else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ createSkillPassive_Priest_3exorcist_bykk(obj,obj,643001,160,1,50,sq_GetDirection(obj),totalDamage,0,0,1,0,0,0,0); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/atomicsmash/lv20chakraofpassion/shockwave_00.ani", 150, 0, 0); sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/atomicsmash/lv20chakraofpassion/atomicsmashpassionfloor_00.ani", 150, 0, 0); sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/atomicsmash/lv20chakraofpassion/passiondust_00.ani", 150, 1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/atomicsmash/lv20chakraofpassion/passionstone.ani", 150, 1, 0); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/atomicsmash/lv75chakraofgod/atomicsmashgodfloor_00.ani", 150, 0, 0); sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/atomicsmash/lv75chakraofgod/atomicsmashfloorchakra_00.ani", 150, 1, 0); if(sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT) > 0 && sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON) > 0){ setStageofhermitAppendage(obj); } } } sq_SetMyShake(obj, 12, 300); break; } break; case 2: case 3: case 4: case 5: local frameIndex = [3, 5, 7, 11]; local offSet = [[-140,0],[0,15],[130,0],[130,0]]; local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(frameIndex[flagIndex - 2],frameIndex[flagIndex - 2]); local size = obj.getVar("atomicsmashTar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("atomicsmashTar").get_obj_vector(i); if(targetObj && targetObj.getState() != STATE_DIE){ local masterAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/priest/3exorcist_bykk/ap_atomicsmash_hold.nut"); sq_MoveToAppendageForce(targetObj, obj, obj, offSet[flagIndex - 2][0], offSet[flagIndex - 2][1], flagIndex==5?150:0, delay, true, masterAppendage); } } } break; case 6: local size = obj.getVar("atomicsmashTar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("atomicsmashTar").get_obj_vector(i); if(targetObj && targetObj.getState() != STATE_DIE){ local masterAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/priest/3exorcist_bykk/ap_atomicsmash_hold.nut"); if(masterAppendage) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/priest/3exorcist_bykk/ap_atomicsmash_hold.nut"); } } } local currentAni = obj.getCurrentAnimation(); local speedRate = 6000 / currentAni.getDelaySum(12, 12); speedRate = 18000 / speedRate; local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/atomicsmash/start.ani", -50, 1, 30); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); break; } return true; } function onTimeEvent_Atomicsmash(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_Atomicsmash(obj, new_state) { if(!obj) return; } function onAttack_Atomicsmash(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return; if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: if(sq_IsHoldable(obj,damager) && !sq_IsFixture(damager) && sq_IsGrabable(obj,damager)){ if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/priest/3exorcist_bykk/ap_atomicsmash_hold.nut")){ obj.getVar("atomicsmashTar").push_obj_vector(damager); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/priest/3exorcist_bykk/ap_atomicsmash_hold.nut", true); sq_HoldAndDelayDie(damager, obj, true, true, false, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); } } break; case 2: break; } } //逆鳞震 function checkExecutableSkill_Dangerousscale(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DANGEROUSSCALE); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_DANGEROUSSCALE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Dangerousscale(obj) { if (!obj) return false; if(obj.getState() == STATE_BYKK_GALESMASH){ if(obj.getVar("skillCancel").getBool(0)) return true; else return false; } return true; } function onSetState_Dangerousscale(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(PRANI_BYKK_DANGEROUSSCALE01_BODY); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); // obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_DANGEROUSSCALE); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/dangerousscale/dangerousscale01_casting.ani"), -150, -75); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/dangerousscale/dangerousscalecasting_00.ani"), -150, -75); break; case 1: obj.sq_SetCurrentAnimation(PRANI_BYKK_DANGEROUSSCALE02_BODY); 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 = 3800 / currentAni.getDelaySum(0 ,0); currentAni.setSpeedRate(speedRate.tofloat() * 2.0); sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/dangerousscale/dangerousscale02_after_00.ani", 0, 0, 0); sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/dangerousscale/dangerousscale02dust_front.ani", 0, 1, 1); sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/dangerousscale/dangerousscale02dust_back.ani", 0, -1, -1); break; case 2: sq_setCurrentAxisPos(obj, 2, 0); obj.sq_SetCurrentAnimation(PRANI_BYKK_DANGEROUSSCALE03_BODY); 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, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; print("bonusRate = "+ bonusRate); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DANGEROUSSCALE, -1, 0, bonusRate); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_DANGEROUSSCALE, 4); sizeRate = sizeRate * sq_GetIntData(obj, SKILL_BYKK_DANGEROUSSCALE, 3) / 100; local isTalisman = 0; if(sq_GetIntData(obj, SKILL_BYKK_DANGEROUSSCALE, 15) > 0){ isTalisman = 1; totalDamage = totalDamage * 110 / 100; sizeRate = sizeRate * 125 / 100; } createSkillPassive_Priest_3exorcist_bykk(obj,obj,643023,0,0,0,sq_GetDirection(obj),1,totalDamage,sizeRate,isTalisman,0,0,0,0); if(sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT) > 0 && sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON) > 0){ setStageofhermitAppendage(obj); } break; } } function onEndCurrentAni_Dangerousscale(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(STATE_BYKK_DANGEROUSSCALE, STATE_PRIORITY_AUTO, true); break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProc_Dangerousscale(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); local stateTime = obj.sq_GetStateTimer(); local vz = sq_GetUniformVelocity(0, 250, stateTime, delaySum); sq_setCurrentAxisPos(obj, 2, vz); break; } } THEBEST7HIT_STONE <- 0 //逆龙七杀 function checkExecutableSkill_Thebest7hit(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_THEBEST7HIT); if (isUse){ local isTalisman = 0,skill = sq_GetSkill(obj, SKILL_BYKK_THEBEST7HIT); if(sq_GetIntData(obj, SKILL_BYKK_THEBEST7HIT, 10) > 0) isTalisman = 1; obj.sq_IntVectClear(); if(THEBEST7HIT_STONE > 0 || isTalisman > 0) obj.sq_IntVectPush(7); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_THEBEST7HIT, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Thebest7hit(obj) { if (!obj) return false; if(obj.getState() == STATE_BYKK_GALESMASH){ if(obj.getVar("skillCancel").getBool(0)) return true; else return false; } return true; } function onSetState_Thebest7hit(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(PRANI_BYKK_THEBEST7HIT_ATK1BODY); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/thebest7hit/atk1slash_eff_b.ani"), 0, 0); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.getVar("Thebest7hitTar").clear_obj_vector(); obj.getVar("Thebest7hitBool").setBool(0, true); obj.getVar("Thebest7hitBool").setBool(1, false); obj.sq_PlaySound("R_PR_BESTSEVEN"); sq_SetMyShake(obj, 2, 80); break; case 1: local speedUp = obj.sq_GetVectorData(datas, 1); obj.sq_SetCurrentAnimation(PRANI_BYKK_THEBEST7HIT_ATK2BODY_01); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/thebest7hit/atk2slash_eff_b.ani"), 0, 0); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(speedUp > 0){ print("speed up!"); obj.getVar("Thebest7hitBool").setBool(1, true); local currentAni = obj.getCurrentAnimation(); local speedRate = 8000.0 / currentAni.getDelaySum(0, 0).tofloat(); currentAni.setSpeedRate(speedRate * 1.3); } obj.sq_PlaySound("R_PR_BESTSEVEN"); break; case 2: obj.sq_SetCurrentAnimation(PRANI_BYKK_THEBEST7HIT_ATK3BODY_01); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/thebest7hit/atk3slash_eff_a.ani"), 0, 0); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(obj.getVar("Thebest7hitBool").getBool(1)){ local currentAni = obj.getCurrentAnimation(); local speedRate = 8000.0 / currentAni.getDelaySum(0, 0).tofloat(); currentAni.setSpeedRate(speedRate * 1.3); } obj.sq_PlaySound("R_PR_BESTSEVEN"); break; case 3: obj.sq_SetCurrentAnimation(PRANI_BYKK_THEBEST7HIT_ATK4BODY); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/thebest7hit/atk4slash_eff_a.ani"), 0, 0); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(obj.getVar("Thebest7hitBool").getBool(1)){ local currentAni = obj.getCurrentAnimation(); local speedRate = 8000.0 / currentAni.getDelaySum(0, 0).tofloat(); currentAni.setSpeedRate(speedRate * 1.3); } obj.sq_PlaySound("R_PR_BESTSEVEN"); break; case 4: obj.sq_SetCurrentAnimation(PRANI_BYKK_THEBEST7HIT_ATK5BODY); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/thebest7hit/atk5slash_eff_b.ani"), 0, 0); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(obj.getVar("Thebest7hitBool").getBool(1)){ local currentAni = obj.getCurrentAnimation(); local speedRate = 8000.0 / currentAni.getDelaySum(0, 0).tofloat(); currentAni.setSpeedRate(speedRate * 1.3); } obj.sq_PlaySound("PR_BESTSEVEN_09"); break; case 5: obj.sq_ZStop(); obj.sq_SetCurrentAnimation(PRANI_BYKK_THEBEST7HIT_ATK6BODY); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/thebest7hit/atk6slash_eff_c.ani"), 0, 0); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(obj.getVar("Thebest7hitBool").getBool(1)){ local currentAni = obj.getCurrentAnimation(); local speedRate = 8000.0 / currentAni.getDelaySum(0, 0).tofloat(); currentAni.setSpeedRate(speedRate * 1.3); } obj break; case 6: sq_setCurrentAxisPos(obj, 2, 0); obj.sq_SetCurrentAnimation(PRANI_BYKK_THEBEST7HIT_ATK7BODY_BODY); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(obj.getVar("Thebest7hitBool").getBool(1)){ local currentAni = obj.getCurrentAnimation(); local speedRate = 8000.0 / currentAni.getDelaySum(0, 0).tofloat(); currentAni.setSpeedRate(speedRate * 1.3); } obj.sq_PlaySound("PR_BESTSEVEN_FIN"); break; case 7: obj.sq_SetCurrentAnimation(PRANI_BYKK_THEBEST7HIT_TALISMAN_THEBEST7HIT_TALISMANBODY); local currentAni = obj.getCurrentAnimation(); sq_SetFrameDelayTime(currentAni, 10, 400); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.sq_PlaySound("BEST_SEVEN_01"); sq_SetMyShake(obj, 5, 300); break; } } function onEndCurrentAni_Thebest7hit(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(obj.getVar("Thebest7hitTar").get_obj_vector_size() > 0){ local isDownSkillLastKey = 0; if(obj.getVar("Thebest7hitBool").getBool(0) == false) isDownSkillLastKey = 1; obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(isDownSkillLastKey); obj.sq_AddSetStatePacket(STATE_BYKK_THEBEST7HIT, STATE_PRIORITY_AUTO, true); } else{ obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); } break; case 1: case 2: case 3: case 4: case 5: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(STATE_BYKK_THEBEST7HIT, STATE_PRIORITY_AUTO, true); break; case 6: case 7: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProc_Thebest7hit(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 5: local stateTime = obj.sq_GetStateTimer(); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); local vz = sq_GetUniformVelocity(0, 200, stateTime, delaySum); sq_setCurrentAxisPos(obj, 2, vz); break; } } function onProcCon_Thebest7hit(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(obj.getVar("Thebest7hitBool").getBool(0)){ obj.setSkillCommandEnable(SKILL_BYKK_THEBEST7HIT, true); local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_THEBEST7HIT); sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND) || b_useskill != -1){ obj.getVar("Thebest7hitBool").setBool(0, false); } } break; } } function onKeyFrameFlag_Thebest7hit(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 101: obj.sq_PlaySound("BEST_SEVEN_01"); sq_flashScreen(obj,0,160,80,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 8, 560); local currentAni = obj.getCurrentAnimation(); local speedRate = 6000 / currentAni.getDelaySum(0, 0); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/thebest7hit/atk1text_b.ani", 0, 1, 1); sq_SetCurrentDirection(pooledObj, ENUM_DIRECTION_RIGHT); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; print("bonusRate = "+ bonusRate); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THEBEST7HIT, -1, 0, bonusRate); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_THEBEST7HIT, 3); createSkillPassive_Priest_3exorcist_bykk(obj,obj,643024,0,0,0,sq_GetDirection(obj),totalDamage,sizeRate,1,speedRate,0,0,0,0); break; case 201: obj.sq_PlaySound("BEST_SEVEN_02"); sq_flashScreen(obj,0,160,80,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 5, 320); local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 0); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/thebest7hit/atk2text_b.ani", 0, 1, 1); sq_SetCurrentDirection(pooledObj, ENUM_DIRECTION_RIGHT); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; print("bonusRate = "+ bonusRate); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THEBEST7HIT, -1, 1, bonusRate); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_THEBEST7HIT, 3); createSkillPassive_Priest_3exorcist_bykk(obj,obj,643024,0,0,0,sq_GetDirection(obj),totalDamage,sizeRate,2,speedRate,0,0,0,0); break; case 301: obj.sq_PlaySound("BEST_SEVEN_03"); sq_flashScreen(obj,0,160,80,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 7, 240); local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 0); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/thebest7hit/atk3text_b.ani", 0, 1, 1); sq_SetCurrentDirection(pooledObj, ENUM_DIRECTION_RIGHT); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; print("bonusRate = "+ bonusRate); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THEBEST7HIT, -1, 2, bonusRate); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_THEBEST7HIT, 3); createSkillPassive_Priest_3exorcist_bykk(obj,obj,643024,0,0,0,sq_GetDirection(obj),totalDamage,sizeRate,3,speedRate,0,0,0,0); break; case 401: obj.sq_PlaySound("BEST_SEVEN_04"); sq_flashScreen(obj,0,160,80,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 5, 240); local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 0); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/thebest7hit/atk4text_a.ani", 0, 1, 1); sq_SetCurrentDirection(pooledObj, ENUM_DIRECTION_RIGHT); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; print("bonusRate = "+ bonusRate); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THEBEST7HIT, -1, 3, bonusRate); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_THEBEST7HIT, 3); createSkillPassive_Priest_3exorcist_bykk(obj,obj,643024,0,0,0,sq_GetDirection(obj),totalDamage,sizeRate,4,speedRate,0,0,0,0); break; case 501: obj.sq_PlaySound("BEST_SEVEN_05"); sq_flashScreen(obj,0,160,80,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 7, 160); local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 0); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/thebest7hit/atk5text_b.ani", 0, 1, 1); sq_SetCurrentDirection(pooledObj, ENUM_DIRECTION_RIGHT); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; print("bonusRate = "+ bonusRate); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THEBEST7HIT, -1, 4, bonusRate); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_THEBEST7HIT, 3); createSkillPassive_Priest_3exorcist_bykk(obj,obj,643024,0,0,0,sq_GetDirection(obj),totalDamage,sizeRate,5,speedRate,0,0,0,0); break; case 601: obj.sq_PlaySound("BEST_SEVEN_06"); sq_flashScreen(obj,0,160,80,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 7, 240); local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 0); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/thebest7hit/atk6text_b.ani", 0, 1, 1); sq_SetCurrentDirection(pooledObj, ENUM_DIRECTION_RIGHT); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; print("bonusRate = "+ bonusRate); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THEBEST7HIT, -1, 5, bonusRate); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_THEBEST7HIT, 3); createSkillPassive_Priest_3exorcist_bykk(obj,obj,643024,0,0,0,sq_GetDirection(obj),totalDamage,sizeRate,6,speedRate,0,0,0,0); sq_SetMyShake(obj, 6, 150); break; case 701: obj.sq_PlaySound("BEST_SEVEN_07"); sq_flashScreen(obj,0,160,400,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 7, 320); local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 0); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/thebest7hit/atk7finish_word_7th.ani", 0, 1, 1); sq_SetCurrentDirection(pooledObj, ENUM_DIRECTION_RIGHT); // local pAni = pooledObj.getCurrentAnimation(); // pAni.setSpeedRate(speedRate.tofloat()); local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; print("bonusRate = "+ bonusRate); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THEBEST7HIT, -1, 6, bonusRate); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_THEBEST7HIT, 3); createSkillPassive_Priest_3exorcist_bykk(obj,obj,643024,0,0,0,sq_GetDirection(obj),totalDamage,sizeRate,7,speedRate,0,0,0,0); sq_SetMyShake(obj, 10, 500); local size = obj.getVar("Thebest7hitTar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("Thebest7hitTar").get_obj_vector(i); if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/priest/3exorcist_bykk/ap_thebest7hit_hold.nut"); } } break; case 1001: //`create talisman charge effect` local currentAni = obj.getCurrentAnimation(); local speedRate = 6000 / currentAni.getDelaySum(0, 0); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thebest7hit/thebest1hit_castingend_02.ani", -50, 1, 30); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thebest7hit/thebest1hit_atk1text.ani", 0, 0, 0); else pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thebest7hit/thebest1hit_atk1textleftlook.ani", 0, 0, 0); sq_SetCurrentDirection(pooledObj, ENUM_DIRECTION_RIGHT); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_THEBEST7HIT); local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_THEBEST7HIT, 0, skillLevel) + sq_GetLevelData(obj, SKILL_BYKK_THEBEST7HIT, 1, skillLevel) + sq_GetLevelData(obj, SKILL_BYKK_THEBEST7HIT, 2, skillLevel) + sq_GetLevelData(obj, SKILL_BYKK_THEBEST7HIT, 3, skillLevel) + sq_GetLevelData(obj, SKILL_BYKK_THEBEST7HIT, 4, skillLevel) + sq_GetLevelData(obj, SKILL_BYKK_THEBEST7HIT, 5, skillLevel) + sq_GetLevelData(obj, SKILL_BYKK_THEBEST7HIT, 6, skillLevel) - 100; local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; print("bonusRate = "+ bonusRate); totalDamage = (totalDamage.tofloat() * bonusRate).tointeger(); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_THEBEST7HIT, 3) * 110 / 100; createSkillPassive_Priest_3exorcist_bykk(obj,obj,643025,0,0,0,sq_GetDirection(obj),totalDamage,sizeRate,speedRate,0,0,0,0,0); break; case 1002: obj.sq_PlaySound("PR_BESTSEVEN_FIN"); break; case 1003: obj.sq_PlaySound("BEST_SEVEN_07"); sq_flashScreen(obj,0,300,100,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 8, 560); break; } return true; } function onTimeEvent_Thebest7hit(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_Thebest7hit(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_THEBEST7HIT){ local size = obj.getVar("Thebest7hitTar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("Thebest7hitTar").get_obj_vector(i); if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/priest/3exorcist_bykk/ap_thebest7hit_hold.nut"); } } } } //式神封灵阵 function checkExecutableSkill_Pentagon(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PENTAGON); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_PENTAGON, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Pentagon(obj) { if (!obj) return false; return true; } function onSetState_Pentagon(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); switch(subState){ case 0: local Ani = obj.sq_GetThrowChargeAni(2); obj.setCurrentAnimation(Ani); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/pentagon/pentagonobject/cast/pentagoncast01.ani"), 0, 0); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_PENTAGON); local castTime = sq_GetCastTime(obj, SKILL_BYKK_PENTAGON, skill_level); local timeRate = delaySum * 100 / castTime; currentAni.setSpeedRate(timeRate.tofloat()); sq_StartDrawCastGauge(obj, castTime, true); break; case 1: sq_EndDrawCastGauge(obj); obj.sq_PlaySound("PR_PENTAGON"); local Ani = obj.sq_GetThrowShootAni(2); obj.setCurrentAnimation(Ani); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/pentagon/pentagonobject/cast/pentagoncastafter.ani", 0, 0, 0); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_PENTAGON, 12); local lifeTime = sq_GetIntData(obj, SKILL_BYKK_PENTAGON, 19); local hitTime = sq_GetIntData(obj, SKILL_BYKK_PENTAGON, 15); local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; print("bonusRate = "+ bonusRate); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PENTAGON, -1, 1, bonusRate); local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PENTAGON, -1, 2, bonusRate); createSkillPassive_Priest_3exorcist_bykk(obj,obj,643026,250,25,0,sq_GetDirection(obj),totalDamage,totalDamageExp,sizeRate,lifeTime,hitTime,0,0,0); break; } } function onEndCurrentAni_Pentagon(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(STATE_BYKK_PENTAGON, STATE_PRIORITY_AUTO, true); break; case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Pentagon(obj) { if(!obj) return; } function onKeyFrameFlag_Pentagon(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_Pentagon(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_Pentagon(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_PENTAGON) sq_EndDrawCastGauge(obj); } //式神灭却·合 function checkExecutableSkill_Fourgodpower(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_FOURGODPOWER); if (isUse){ local state = 0; local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ state = 10; } else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ state = 20; } obj.sq_IntVectClear(); obj.sq_IntVectPush(state); obj.sq_AddSetStatePacket(STATE_BYKK_FOURGODPOWER, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Fourgodpower(obj) { if (!obj) return false; local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1) && !CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ return false; } return true; } function onSetState_Fourgodpower(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); switch(subState){ case 10: obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_MAGICALTYPE_CAST_BODY); obj.getVar("fourgodpowerBool").setBool(0, true); obj.getVar("fourgodpowerBool").setBool(1, true); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); break; case 11: local isRemote = obj.sq_GetVectorData(datas, 1); local isStrong = obj.sq_GetVectorData(datas, 2); obj.getVar("fourgodpowerSet").setInt(0, isRemote); obj.getVar("fourgodpowerSet").setInt(1, isStrong); if(isRemote > 0) obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_MAGICALTYPE_START_REMOTE_BODY); else obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_MAGICALTYPE_START_BODY); obj.sq_PlaySound("FOURGODPOWER_WATER_1"); obj.sq_PlaySound("PR_FOURGODPOWER_WATER_01"); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); break; case 12: local isRemote = obj.getVar("fourgodpowerSet").getInt(0); local isStrong = obj.getVar("fourgodpowerSet").getInt(1); if(isRemote > 0){ if(isStrong > 0) obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_MAGICALTYPE_LOOPSTRONG_REMOTE_BODY); else obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_MAGICALTYPE_LOOPBASIC_REMOTE_BODY); } else{ if(isStrong > 0) obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_MAGICALTYPE_LOOPSTRONG_BODY); else obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_MAGICALTYPE_LOOPBASIC_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("FOURGODPOWER_WATER_2", 2333); if(isStrong > 0) sq_SetMyShake(obj, 2, 3120); local hitMax = sq_GetIntData(obj, SKILL_BYKK_FOURGODPOWER, 8); local hitTime = sq_GetIntData(obj, SKILL_BYKK_FOURGODPOWER, 7); local lifeTime = 350 + hitMax * hitTime; if(isStrong > 0) lifeTime = 350 + hitMax * hitTime / 2; if(isRemote > 0) lifeTime = 350; obj.setTimeEvent(1, lifeTime, 1, false); local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; print("bonusRate = "+ bonusRate); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FOURGODPOWER, -1, 4, bonusRate); local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FOURGODPOWER, -1, 5, bonusRate); if(isRemote > 0) createSkillPassive_Priest_3exorcist_bykk(obj,obj,643037,60,0,0,sq_GetDirection(obj),totalDamage,totalDamageExp,hitTime,hitMax,isStrong,0,0,0); else createSkillPassive_Priest_3exorcist_bykk(obj,obj,643036,0,0,0,sq_GetDirection(obj),totalDamage,totalDamageExp,hitTime,hitMax,isStrong,0,0,0); break; case 13: obj.stopSound(2333); local isRemote = obj.getVar("fourgodpowerSet").getInt(0); local isStrong = obj.getVar("fourgodpowerSet").getInt(1); if(isRemote > 0) obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_MAGICALTYPE_END_REMOTE_BODY); else obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_MAGICALTYPE_END_BODY); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); sq_flashScreen(obj,0,60,20,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(0, 0); obj.setTimeEvent(2, delay, 1, false); break; case 20: obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_PYSICALTYPE_START_BODY); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); local speedRate = 4000 / currentAni.getDelaySum(0, 0); print("speedRate = "+speedRate); if(speedRate > 200) speedRate = 200; obj.getVar("fourgodpowerSet").setInt(2, speedRate); currentAni.setSpeedRate(speedRate.tofloat()); sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/start/start_front_00.ani", 0, 1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/start/start_back_00.ani", 0, -1, 0); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/start/start_bottom_00.ani", 0, 0, 0); sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); obj.sq_PlaySound("FOURGODPOWER_FIRE_1"); break; case 21: obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_PYSICALTYPE_1STATTACK_BODY); local currentAni = obj.getCurrentAnimation(); local speedRate = obj.getVar("fourgodpowerSet").getInt(2); currentAni.setSpeedRate(speedRate.tofloat()); local aniPath = ["character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/1stattack/1stattack_front_00.ani", "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/1stattack/1stattack_back_00.ani", "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/1stattack/1stattack_bottom_00.ani"]; for(local i = 0; i < aniPath.len(); i++){ local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath[0], 0, i==0?1:0, 0); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); if(i == 2) sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); } sq_flashScreen(obj,0,80,0,178, sq_RGB(255,90,0), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_CLOSEBACK); sq_SetMyShake(obj, 15, 250); if(sq_getRandom(1, 100) > 50) obj.sq_PlaySound("PR_FOURGODPOWER_FIRE_01"); else obj.sq_PlaySound("PR_FOURGODPOWER_FIRE_04"); local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; print("bonusRate = "+ bonusRate); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FOURGODPOWER, -1, 0, bonusRate); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_FOURGODPOWER_1STATTACK)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setChakraAttackInfo(obj); break; case 22: obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_PYSICALTYPE_2NDATTACK_BODY); local currentAni = obj.getCurrentAnimation(); local speedRate = obj.getVar("fourgodpowerSet").getInt(2); currentAni.setSpeedRate(speedRate.tofloat()); local aniPath = ["character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/2ndattack/2ndattack_startfront_00.ani", "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/2ndattack/2ndattack_startbottom_00.ani"]; for(local i = 0; i < aniPath.len(); i++){ local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath[0], 0, i==0?1:0, 0); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); if(i == 1) sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); } obj.sq_PlaySound("FOURGODPOWER_FIRE_2"); obj.sq_PlaySound("PR_FOURGODPOWER_FIRE_02"); local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; print("bonusRate = "+ bonusRate); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FOURGODPOWER, -1, 1, bonusRate); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_FOURGODPOWER_2NDATTACK)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setChakraAttackInfo(obj); break; case 23: obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_PYSICALTYPE_3RDATTACK_BODY); local currentAni = obj.getCurrentAnimation(); local speedRate = obj.getVar("fourgodpowerSet").getInt(2); currentAni.setSpeedRate(speedRate.tofloat()); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/3rdattack/3rdattackhit_speedline_00.ani", 0, 0, 0); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); obj.sq_PlaySound("FOURGODPOWER_FIRE_3"); if(sq_getRandom(1, 100) > 50) obj.sq_PlaySound("PR_FOURGODPOWER_FIRE_05"); else obj.sq_PlaySound("PR_FOURGODPOWER_FIRE_03"); sq_flashScreen(obj,240,0,0,178, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); break; } } function onEndCurrentAni_Fourgodpower(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 10: case 11: case 12: case 20: case 21: case 22: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); if(subState == 10){ if(obj.getVar("fourgodpowerBool").getBool(0) == false) obj.sq_IntVectPush(1); else obj.sq_IntVectPush(0); if(obj.getVar("fourgodpowerBool").getBool(1) == false) obj.sq_IntVectPush(1); else obj.sq_IntVectPush(0); } obj.sq_AddSetStatePacket(STATE_BYKK_FOURGODPOWER, STATE_PRIORITY_AUTO, true); break; case 13: case 23: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Fourgodpower(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 10: if(obj.getVar("fourgodpowerBool").getBool(0)){ if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT){ obj.getVar("fourgodpowerBool").setBool(0, false); } } if(obj.getVar("fourgodpowerBool").getBool(1)){ obj.setSkillCommandEnable(SKILL_BYKK_FOURGODPOWER, true); local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_FOURGODPOWER); sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND) || b_useskill != -1){ obj.getVar("fourgodpowerBool").setBool(1, false); } } break; } } function onKeyFrameFlag_Fourgodpower(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 21: //`Rise Stone` local speedRate = obj.getVar("fourgodpowerSet").getInt(2); local aniPath = ["character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/2ndattack/2ndattack_risefront_00.ani", "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/2ndattack/2ndattack_riseback_00.ani", "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/2ndattack/2ndattack_risebottom_00.ani"]; for(local i = 0; i < aniPath.len(); i++){ local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath[0], i==2?-300:0, i==0?1:0, 0); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); if(i == 2) sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); } break; case 22: sq_SetMyShake(obj, 30, 200); break; case 23: //`Create Wave` local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; print("bonusRate = "+ bonusRate); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FOURGODPOWER, -1, 2, bonusRate); createSkillPassive_Priest_3exorcist_bykk(obj,obj,643038,0,0,0,sq_GetDirection(obj),totalDamage,0,0,0,0,0,0,0); break; case 31: sq_flashScreen(obj,0,100,0,178, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); break; case 32: sq_flashScreen(obj,0,160,0,178, sq_RGB(255,90,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); sq_SetMyShake(obj, 30, 400); //`Create Stone` sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/3rdattack/3rdattack_groundhit_00.ani", 0, 1, 1); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/3rdattack/3rdattack_flash_00.ani", 0, -1, -1); sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/3rdattack/3rdattack_hit_bottom_00.ani", 0, 0, 0); sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; print("bonusRate = "+ bonusRate); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FOURGODPOWER, -1, 3, bonusRate); local hitMax = sq_GetIntData(obj, SKILL_BYKK_FOURGODPOWER, 1); createSkillPassive_Priest_3exorcist_bykk(obj,obj,643035,0,0,0,sq_GetDirection(obj),totalDamage,hitMax,0,0,0,0,0,0); break; case 33: sq_flashScreen(obj,0,0,120,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); break; } return true; } function onTimeEvent_Fourgodpower(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(13); obj.sq_AddSetStatePacket(STATE_BYKK_FOURGODPOWER, STATE_PRIORITY_AUTO, true); break; case 2: obj.sq_PlaySound("FOURGODPOWER_WATER_3"); sq_flashScreen(obj,0,10,250,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 12, 350); break; } } function onEndState_Fourgodpower(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_FOURGODPOWER) obj.stopSound(2333); } //苍龙逐日 function checkExecutableSkill_Bluedragon(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BLUEDRAGON); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_BLUEDRAGON, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Bluedragon(obj) { if (!obj) return false; local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1) && !CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ return false; } return true; } function onSetState_Bluedragon(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(PRANI_BYKK_BLUEDRAGON_START_BODY); local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ 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 = 8000 / currentAni.getDelaySum(0, 0); obj.getVar("bluedragonTotem").clear_obj_vector(); obj.getVar("bluedragonSet").setInt(0, -60); //obj.setTimeEvent(1, 20, -1, false); local bonusRate = 1.0; local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLUEDRAGON); if(skillLevel >= 3) sq_SendMessage(obj, 0, 1, 0); if(skillLevel >= 9) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_BLUEDRAGON, 3, skillLevel).tofloat() / 1000.0; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLUEDRAGON, -1, 1, bonusRate); local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLUEDRAGON, -1, 2, 1.0) + 1100; createSkillPassive_Priest_3exorcist_bykk(obj,obj,643039,100,0,150,sq_GetDirection(obj),1,totalDamage,sizeRate,speedRate,0,0,0,0); break; } } function onEndCurrentAni_Bluedragon(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Bluedragon(obj) { if(!obj) return; } function onKeyFrameFlag_Bluedragon(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 0: //`dragonTotemCreate` break; case 2: //`dragonCreate` obj.sq_PlaySound("PR_DRAGONSPEAR"); break; case 16: //`dragonDown` obj.stopTimeEvent(1); local totemObj = obj.getVar("bluedragonTotem").get_obj_vector(0); if(totemObj){ local colObj = sq_GetCNRDObjectToCollisionObject(totemObj); // colObj.getVar("custom").setInt(3, -60); colObj.setTimeEvent(1, 1000, 1, true); } break; case 17: //`cameraBack` break; case 18: obj.sq_PlaySound("PR_DRAGONSPEAR_SHOT"); break; } return true; } function onCreateObject_Bluedragon(obj, createObject) { if(!obj) return; if(createObject.isObjectType(OBJECTTYPE_PASSIVE)){ // local colObj = sq_GetCNRDObjectToCollisionObject(createObject); // local index = colObj.getCollisionObjectIndex(); // print("index = "+index); // if(index == 24030){ // } } } function onTimeEvent_Bluedragon(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: // if(obj.isMyControlObject()){ // local angle = obj.getVar("bluedragonSet").getInt(0); // local angleSave = angle; // if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT){ // angle = angle + 1; // } // else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT){ // angle = angle - 1; // } // if(angle > -30) angle = -20; // else if(angle < -60) angle = -80; // obj.getVar("bluedragonSet").setInt(0, angle); // if(angle != angleSave){ // obj.sq_StartWrite(); // obj.sq_WriteDword(angle); // sq_SendChangeSkillEffectPacket(obj, SKILL_BYKK_BLUEDRAGON); // } // } break; } } function onChangeSkillEffect_Bluedragon(obj, skillIndex, reciveData) { if(!obj) return; local angle = reciveData.readDword(); print("angle = "+angle); // local totemObj = obj.getVar("bluedragonTotem").get_obj_vector(0); // if(totemObj){ // local colObj = sq_GetCNRDObjectToCollisionObject(totemObj); // colObj.getVar("custom").setInt(3, angle); // sq_SetCustomRotate(colObj, sq_ToRadian(angle.tofloat())); // } } function onEndState_Bluedragon(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_BLUEDRAGON){ local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLUEDRAGON); if(skillLevel >= 3) sq_SendMessage(obj, 0, 0, 0); } } //真龙焚天 function checkExecutableSkill_Advanceddragon(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_ADVANCEDDRAGON); if (isUse){ local state = 0; local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)) state = 1; else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)) state = 2; obj.sq_IntVectClear(); obj.sq_IntVectPush(state); obj.sq_AddSetStatePacket(STATE_BYKK_ADVANCEDDRAGON, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Advanceddragon(obj) { if (!obj) return false; local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1) && !CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ return false; } return true; } function onSetState_Advanceddragon(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); switch(subState){ case 1: obj.sq_SetCurrentAnimation(PRANI_BYKK_ADVANCEDDRAGON_BRIGHT_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("PR_ADVANCED_DRAGON"); break; case 2: obj.sq_SetCurrentAnimation(PRANI_BYKK_ADVANCEDDRAGON_PASSION_ATTACK); 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 = 5000 / currentAni.getDelaySum(0, 0); local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; print("bonusRate = "+ bonusRate); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ADVANCEDDRAGON, -1, 2, bonusRate); createSkillPassive_Priest_3exorcist_bykk(obj,obj,643040,0,0,0,sq_GetDirection(obj),2,totalDamage,speedRate,0,0,0,0,0); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/advanceddragon/advanceddragon_passion/front/attack_dust_front_normal.ani", 0, 1, 0); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); obj.sq_PlaySound("PR_ADVANCED_DRAGON"); break; case 100: local ani = obj.sq_GetStayAni(); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0)); local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) obj.getVar("element_kk").setInt(0, 100); else obj.getVar("element_kk").setInt(0, 0); if(attackInfo.isValidElement(ENUM_ELEMENT_WATER)) obj.getVar("element_kk").setInt(1, 100); else obj.getVar("element_kk").setInt(1, 0); if(attackInfo.isValidElement(ENUM_ELEMENT_DARK)) obj.getVar("element_kk").setInt(2, 100); else obj.getVar("element_kk").setInt(2, 0); if(attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) obj.getVar("element_kk").setInt(3, 100); else obj.getVar("element_kk").setInt(3, 0); obj.setTimeEvent(1, 50, 1, false); print("getatkelement_success"); break; } } function onEndCurrentAni_Advanceddragon(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Advanceddragon(obj) { if(!obj) return; } function onKeyFrameFlag_Advanceddragon(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: local currentAni = obj.getCurrentAnimation(); local speedRate = 5000 / currentAni.getDelaySum(0, 0); local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000; print("bonusRate = "+ bonusRate); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ADVANCEDDRAGON, -1, 0, bonusRate); local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ADVANCEDDRAGON, -1, 1, bonusRate); local range = sq_GetIntData(obj, SKILL_BYKK_ADVANCEDDRAGON, 2); local hitTime = sq_GetIntData(obj, SKILL_BYKK_ADVANCEDDRAGON, 4); local lifeTime = sq_GetIntData(obj, SKILL_BYKK_ADVANCEDDRAGON, 3); if(speedRate >= 150) speedRate = 150; createSkillPassive_Priest_3exorcist_bykk(obj,obj,643040,250,0,0,sq_GetDirection(obj),1,totalDamage,totalDamageExp,range,hitTime,lifeTime,speedRate,0); break; case 2: sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/advanceddragon_passion/dust/attack_dusta7.ani", 0, 0, 0); break; } return true; } function onTimeEvent_Advanceddragon(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } //////// function onStart_appendage_bigweaponmastery(appendage)//巨兵精通 1/4 { if(!appendage) return; local parentObj = appendage.getParent(); if(!parentObj || parentObj.getState() == STATE_DIE) { appendage.setValid(false); return; } local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); local weaponSubType = obj.getWeaponSubType(); if(weaponSubType != 1 && weaponSubType != 4) return; local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BIGWEAPONMASTERY); local stuckRate = sq_GetLevelData(obj, SKILL_BYKK_BIGWEAPONMASTERY, 0, skillLevel); local pysicalAtkRate = sq_GetLevelData(obj, SKILL_BYKK_BIGWEAPONMASTERY, 1, skillLevel); local magicalAtkRate = sq_GetLevelData(obj, SKILL_BYKK_BIGWEAPONMASTERY, 3, skillLevel); local cooltimeRate = sq_GetLevelData(obj, SKILL_BYKK_BIGWEAPONMASTERY, 4, skillLevel); local change_appendage = appendage.sq_getChangeStatus("prBigweaponmastery"); if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("prBigweaponmastery",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK, false, -(stuckRate * 0.1).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (pysicalAtkRate * 0.1).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (magicalAtkRate * 0.1).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_COOLTIME_DECLINE, true, (cooltimeRate * -0.1).tofloat()); } } function onStart_appendage_forceofexorcism(appendage)//驱魔震慑 { if(!appendage) return; local parentObj = appendage.getParent(); if(!parentObj || parentObj.getState() == STATE_DIE) { appendage.setValid(false); return; } local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); local attackRate = sq_GetIntData(obj, SKILL_BYKK_FORCEOFEXORCISM, 0); local moveSpeed = sq_GetIntData(obj, SKILL_BYKK_FORCEOFEXORCISM, 1); local change_appendage = appendage.sq_getChangeStatus("prForceofexorcism"); if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("prForceofexorcism",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, moveSpeed.tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (attackRate * 0.1).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (attackRate * 0.1).tofloat()); } } function onStart_appendage_stageofhermit_magic(appendage)//式神之力_魔法 { if(!appendage) return; local parentObj = appendage.getParent(); if(!parentObj || parentObj.getState() == STATE_DIE) { appendage.setValid(false); return; } local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT); local attackRate = sq_GetLevelData(obj, SKILL_BYKK_STAGEOFHERMIT, 2, skillLevel); local hitRate = sq_GetLevelData(obj, SKILL_BYKK_STAGEOFHERMIT, 3, skillLevel); local change_appendage = appendage.sq_getChangeStatus("prStageofhermit_magic"); if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("prStageofhermit_magic",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_HIT_RATE, false, (hitRate * 0.1).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (attackRate * 0.1).tofloat()); } } function onStart_appendage_stageofhermit_pysic(appendage)//式神之力_力量 { if(!appendage) return; local parentObj = appendage.getParent(); if(!parentObj || parentObj.getState() == STATE_DIE) { appendage.setValid(false); return; } local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT); local attackRate = sq_GetLevelData(obj, SKILL_BYKK_STAGEOFHERMIT, 0, skillLevel); local hitRate = sq_GetLevelData(obj, SKILL_BYKK_STAGEOFHERMIT, 1, skillLevel); local change_appendage = appendage.sq_getChangeStatus("prStageofhermit_magic"); if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("prStageofhermit_magic",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, (hitRate * 0.1).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (attackRate * 0.1).tofloat()); } } function setStageofhermitAppendage(obj) { local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT); if(skillLevel > 0){ local buffTime = sq_GetIntData(obj, SKILL_BYKK_STAGEOFHERMIT, 2); local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ local apdPath = "character/priest/3exorcist_bykk/passiveskill/ap_stageofhermit_magic.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/priest/3exorcist_bykk/passiveskill/ap_stageofhermit_pysic.nut")) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/priest/3exorcist_bykk/passiveskill/ap_stageofhermit_pysic.nut"); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true); AddAppendage.sq_SetValidTime(buffTime); AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_STAGEOFHERMIT, skillLevel); CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); } else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ local apdPath = "character/priest/3exorcist_bykk/passiveskill/ap_stageofhermit_pysic.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/priest/3exorcist_bykk/passiveskill/ap_stageofhermit_magic.nut")) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/priest/3exorcist_bykk/passiveskill/ap_stageofhermit_magic.nut"); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true); AddAppendage.sq_SetValidTime(buffTime); AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_STAGEOFHERMIT, skillLevel); CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); } } } function setSkillBonusRate_3Exorcist_bykk(obj) { local bonusRate = 1000; if(sq_GetSkillLevel(obj, SKILL_BYKK_BOOKOFEXOCISM) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_BOOKOFEXOCISM, 0, sq_GetSkillLevel(obj, SKILL_BYKK_BOOKOFEXOCISM))) / 1000; print("bonusRate1 = "+bonusRate); if(sq_GetSkillLevel(obj, SKILL_BYKK_RADIATEFIGHTINGAURA) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_RADIATEFIGHTINGAURA, 2, sq_GetSkillLevel(obj, SKILL_BYKK_RADIATEFIGHTINGAURA))) / 1000; print("bonusRate2 = "+bonusRate); if(sq_GetSkillLevel(obj, SKILL_BYKK_GODOFEXORCISM) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_GODOFEXORCISM, 0, sq_GetSkillLevel(obj, SKILL_BYKK_GODOFEXORCISM))) / 1000; print("bonusRate3 = "+bonusRate); local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFCALMNESS, 1, sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFCALMNESS))) / 1000; } else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFPASSION, 1, sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFPASSION))) / 1000; } print("bonusRate4 = "+bonusRate); obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); //sq_SetSkillAttackBonus(obj, bonusRate); } function onStartDungeon_PrExorcist_bykk(obj) { obj.getVar("isReset").setInt(0, 1); setSkillBonusRate_3Exorcist_bykk(obj); obj.sq_IntVectClear(); obj.sq_IntVectPush(100); obj.sq_AddSetStatePacket(STATE_BYKK_ADVANCEDDRAGON, STATE_PRIORITY_IGNORE_FORCE, true); } function reset_Priest(obj) { if(!obj) return; if(sq_getGrowType(obj) == 3){ if(obj.getVar("isReset").getInt(0) == 0) setSkillBonusRate_3Exorcist_bykk(obj); } } function ProcPassiveSkill_3PrExorcist_bykk(obj, skill_index, skill_level) { switch(skill_index){ case SKILL_BYKK_BIGWEAPONMASTERY: local append = "character/priest/3exorcist_bykk/passiveskill/ap_bigweaponmastery.nut"; if (skill_level > 0) { local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, append, true); appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), skill_index, skill_level); CNSquirrelAppendage.sq_Append(appendage, obj, obj, true); } else { if (CNSquirrelAppendage.sq_IsAppendAppendage(obj, append)) { CNSquirrelAppendage.sq_RemoveAppendage(obj, append); } } break; case SKILL_BYKK_FORCEOFEXORCISM: local append = "character/priest/3exorcist_bykk/passiveskill/ap_forceofexorcism.nut"; if (skill_level > 0) { local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, append, true); appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), skill_index, skill_level); CNSquirrelAppendage.sq_Append(appendage, obj, obj, true); } else { if (CNSquirrelAppendage.sq_IsAppendAppendage(obj, append)) { CNSquirrelAppendage.sq_RemoveAppendage(obj, append); } } break; } } function setChakraAttackInfo(obj) { local skill = sq_GetSkill(obj, SKILL_BYKK_FORCEOFEXORCISM); if(skill.isSealFunction()) sq_setAttackInfoType(obj, ATTACKTYPE_MAGICAL); else sq_setAttackInfoType(obj, ATTACKTYPE_PHYSICAL); local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo){ local element_kk_fire = obj.getVar("element_kk").getInt(0); local element_kk_water = obj.getVar("element_kk").getInt(1); local element_kk_dark = obj.getVar("element_kk").getInt(2); local element_kk_light = obj.getVar("element_kk").getInt(3); if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE); if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER); if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK); if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT); } } function setAttackType_2Exorcist(sqrChr, obj) { if(sqrChr && sqrChr.getState() != STATE_DIE){ local skill = sq_GetSkill(sqrChr, SKILL_BYKK_FORCEOFEXORCISM); if(skill.isSealFunction()){ sq_setAttackInfoType(obj, ATTACKTYPE_MAGICAL); obj.getVar("atkType").setInt(0, 1); } else{ sq_setAttackInfoType(obj, ATTACKTYPE_PHYSICAL); obj.getVar("atkType").setInt(0, 0); } local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo){ local element_kk_fire = sqrChr.getVar("element_kk").getInt(0); local element_kk_water = sqrChr.getVar("element_kk").getInt(1); local element_kk_dark = sqrChr.getVar("element_kk").getInt(2); local element_kk_light = sqrChr.getVar("element_kk").getInt(3); if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE); if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER); if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK); if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT); } } } function onStart_appendage_prchakraofgod(appendage) { if(!appendage) return; local parentObj = appendage.getParent(); if(!parentObj || parentObj.getState() == STATE_DIE) { appendage.setValid(false); return; } local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); sq_clearSkillData(); local bonusRate = sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD)) / 10; print("bonusRate = "+bonusRate); sq_setLevelData(obj, SKILL_BYKK_ENTERINGNIRVANA, 0, bonusRate, 1); sq_setLevelData(obj, SKILL_BYKK_CUTTINGDARKNESS, 1, bonusRate, 1); sq_setLevelData(obj, SKILL_BYKK_CUTTINGDARKNESS, 2, bonusRate, 1); sq_setLevelData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 0, bonusRate, 1); sq_setLevelData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 1, bonusRate, 1); sq_setLevelData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 2, bonusRate, 1); sq_setLevelData(obj, SKILL_BYKK_BAEKHO, 0, bonusRate, 1); sq_setLevelData(obj, SKILL_BYKK_THUNDERBOLTTALISMAN, 1, bonusRate, 1); sq_setLevelData(obj, SKILL_BYKK_SHIKIGAMI, 0, bonusRate, 1); sq_setLevelData(obj, SKILL_BYKK_SHIKIGAMI, 1, bonusRate, 1); sq_setLevelData(obj, SKILL_BYKK_SHIKIGAMI, 1, bonusRate, 1); sq_setLevelData(obj, SKILL_BYKK_DESTROYSPIRITTALISMAN, 1, bonusRate, 1); sq_setLevelData(obj, SKILL_BYKK_DANGEROUSSCALE, 0, bonusRate, 1); sq_setLevelData(obj, SKILL_BYKK_PENTAGON, 1, bonusRate, 1); sq_setLevelData(obj, SKILL_BYKK_PENTAGON, 2, bonusRate, 1); sq_setLevelData(obj, SKILL_BYKK_THEBEST7HIT, 0, bonusRate, 1); sq_setLevelData(obj, SKILL_BYKK_THEBEST7HIT, 1, bonusRate, 1); sq_setLevelData(obj, SKILL_BYKK_THEBEST7HIT, 2, bonusRate, 1); sq_setLevelData(obj, SKILL_BYKK_THEBEST7HIT, 3, bonusRate, 1); sq_setLevelData(obj, SKILL_BYKK_THEBEST7HIT, 4, bonusRate, 1); sq_setLevelData(obj, SKILL_BYKK_THEBEST7HIT, 5, bonusRate, 1); sq_setLevelData(obj, SKILL_BYKK_THEBEST7HIT, 6, bonusRate, 1); sq_setLevelData(obj, SKILL_BYKK_ADVANCEDDRAGON, 0, bonusRate, 1); sq_setLevelData(obj, SKILL_BYKK_ADVANCEDDRAGON, 1, bonusRate, 1); sq_setLevelData(obj, SKILL_BYKK_ADVANCEDDRAGON, 2, bonusRate, 1); sq_setLevelData(obj, SKILL_BYKK_FOURGODPOWER, 0, bonusRate, 1); sq_setLevelData(obj, SKILL_BYKK_FOURGODPOWER, 1, bonusRate, 1); sq_setLevelData(obj, SKILL_BYKK_FOURGODPOWER, 2, bonusRate, 1); sq_setLevelData(obj, SKILL_BYKK_FOURGODPOWER, 3, bonusRate, 1); sq_setLevelData(obj, SKILL_BYKK_FOURGODPOWER, 4, bonusRate, 1); sq_setLevelData(obj, 99, 0, bonusRate, 1); sq_setLevelData(obj, 99, 3, 10, 1); } function setCustomData_po_2nd_priest(obj, receiveData) { setCustomData_po_qq506807329new_priest_24374(obj, receiveData); } function setState_po_2nd_priest(obj, state, datas) { setState_po_qq506807329new_priest_24374(obj, state, datas); } function onEndCurrentAni_po_2nd_priest(obj) { onEndCurrentAni_po_qq506807329new_priest_24374(obj); } function onTimeEvent_po_2nd_priest(obj, timeEventIndex, timeEventCount) { onTimeEvent_po_qq506807329new_priest_24374(obj, timeEventIndex, timeEventCount); } function onKeyFrameFlag_po_2nd_priest(obj, flagIndex) { onKeyFrameFlag_po_qq506807329new_priest_24374(obj, flagIndex); } function onAttack_po_2nd_priest(obj, damager, boundingBox, isStuck) { onAttack_po_qq506807329new_priest_24374(obj, damager, boundingBox, isStuck); } function getCustomHitEffectFileName_po_2nd_priest(obj, isAttachOnDamager) { getCustomHitEffectFileName_po_qq506807329new_priest_24374(obj, isAttachOnDamager); } function onChangeSkillEffect_po_2nd_priest(obj, skillIndex, reciveData) { onChangeSkillEffect_po_qq506807329new_priest_24374(obj, skillIndex, reciveData); } function destroy_po_2nd_priest(obj) { destroy_po_qq506807329new_priest_24374(obj); } function procAppend_po_2nd_priest(obj) { procAppend_po_qq506807329new_priest_24374(obj); } //////////////////////2 //正义铁拳 function checkExecutableSkill_AggressiveJudgement(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_AGGRESSIVEJUDGEMENT); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_BYKK_AGGRESSIVEJUDGEMENT, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_AggressiveJudgement(obj) { if (!obj) return false; return true; } function onSetState_AggressiveJudgement(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(378); if(sq_IsMyControlObject(obj)) sq_flashScreen(obj,150,0,0,204, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); break; case 1: obj.sq_SetCurrentAnimation(379); obj.setTimeEvent(1, 200, -1, false); 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 = 3200 / currentAni.getDelaySum(0, 0); createSkillPassive_Priest_bykk(obj,obj,PASSIVEOBJECT_PRIESTBYKK,300,0,0,sq_GetDirection(obj),2,SKILL_BYKK_AGGRESSIVEJUDGEMENT,3,speedRate,0,0,0,0,0,0,0); break; case 2: obj.sq_SetCurrentAnimation(381); break; case 3: obj.sq_SetCurrentAnimation(382); obj.sq_PlaySound("R_PR_AGGRESSIVE_JUDGEMENT_03"); obj.sq_PlaySound("AGGRESSIVE_JUDGEMENT_FINISH"); sq_flashScreen(obj,0,50,600,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); sq_SetMyShake(obj, 20, 400); //`createHitSuccessEffect` 84 0 66 sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/2infighter_bykk/aggressivejudgement/dlasthit/dfront_00.ani", 84, 0, 66); sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/2infighter_bykk/aggressivejudgement/dlasthit/dback_04.ani", 84, -1, 65); //`stopMultiHitSound` obj.stopTimeEvent(1); obj.stopSound(2333); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AGGRESSIVEJUDGEMENT, -1, 2, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 186)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; } } function onEndCurrentAni_AggressiveJudgement(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: case 2: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(SKILL_BYKK_AGGRESSIVEJUDGEMENT, STATE_PRIORITY_AUTO, true); break; case 3: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_AggressiveJudgement(obj) { if(!obj) return; } function onKeyFrameFlag_AggressiveJudgement(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 103: obj.sq_PlaySound("R_PR_AGGRESSIVE_JUDGEMENT_01"); obj.sq_PlaySound("AGGRESSIVE_JUDGEMENT_START"); sq_SetMyShake(obj, 13, 300); //`createGroundExpObject` 115 0 0 local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AGGRESSIVEJUDGEMENT, -1, 0, 1.0); createSkillPassive_Priest_bykk(obj,obj,PASSIVEOBJECT_PRIESTBYKK,115,0,0,sq_GetDirection(obj),2,SKILL_BYKK_AGGRESSIVEJUDGEMENT,1,totalDamage,0,0,0,0,0,0,0); break; case 202: sq_SetMyShake(obj, 2, 32); //`createMultiHitObject` 112 0 73 local currentAni = obj.getCurrentAnimation(); local time = currentAni.getDelaySum(2, 48); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AGGRESSIVEJUDGEMENT, -1, 1, 1.0); local hitMax = sq_GetIntData(obj, SKILL_BYKK_AGGRESSIVEJUDGEMENT, 6); local hitTime = time / (hitMax + 1); print("hitMax = "+hitMax); print("hitTime = "+hitTime); createSkillPassive_Priest_bykk(obj,obj,PASSIVEOBJECT_PRIESTBYKK,112,0,73,sq_GetDirection(obj),2,SKILL_BYKK_AGGRESSIVEJUDGEMENT,2,totalDamage,hitMax,hitTime,0,0,0,0,0); break; case 203: local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(3, 48); sq_SetMyShake(obj, 2, delay); break; case 303: sq_flashScreen(obj,250,0,250,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); break; } return true; } function onTimeEvent_AggressiveJudgement(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: obj.sq_PlaySound("AGGRESSIVE_JUDGEMENT_BEAT", 2333); break; } } function onEndState_AggressiveJudgement(obj, new_state) { if(!obj) return; if(new_state != SKILL_BYKK_AGGRESSIVEJUDGEMENT){ } } ///////////////////////////////1 //神罚之锤 : 天怒 function checkExecutableSkill_Astrafe(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_ASTRAFE); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_BYKK_ASTRAFE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Astrafe(obj) { if (!obj) return false; return true; } function onSetState_Astrafe(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); obj.sq_ZStop(); switch(subState){ case 0: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/new_priest/jupiter/ap_jupiter.nut") == true) obj.sq_SetCurrentAnimation(385); else obj.sq_SetCurrentAnimation(377); obj.getVar("AstrafeJump").setBool(0, false); sq_flashScreen(obj,0,0,300,127, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/1crusader_bykk/astrafe/startfront_00.ani", 0, 1, 1); sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/1crusader_bykk/astrafe/startback_01.ani", 0, -1, -1); sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/1crusader_bykk/astrafe/startback_04.ani", 0, -1, -1); obj.sq_PlaySound("PR_ASTRAPE_V1_01"); break; case 1: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/new_priest/jupiter/ap_jupiter.nut") == true) obj.sq_SetCurrentAnimation(384); else obj.sq_SetCurrentAnimation(376); local isBigJump = obj.sq_GetVectorData(datas, 1); if(isBigJump > 0) sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/1crusader_bykk/astrafe/jump_bigfeather.ani", 0, 0, 0); sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/1crusader_bykk/astrafe/jumpfeather_00.ani", 0, 0, 0); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1crusader_bykk/astrafe/userbuff_front.ani"), 0, 0); obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/1crusader_bykk/astrafe/userbuffback_03.ani"), 0, 0); sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/1crusader_bykk/astrafe/buffarea_00.ani", 0, 1, 1); local speed = 300.0; if(isBigJump > 0) speed = 500.0; if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); else sq_SetVelocity(obj, 0, -speed); //`buff` break; case 2: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/new_priest/jupiter/ap_jupiter.nut") == true) obj.sq_SetCurrentAnimation(383); else obj.sq_SetCurrentAnimation(375); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1crusader_bykk/astrafe/boombodyfront_01.ani"), 0, 0); obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/1crusader_bykk/astrafe/boombody_back.ani"), 0, 0); obj.setTimeEvent(1, 5, 9, false); //`sound1` obj.sq_PlaySound("R_PR_ASTRAPE_V2_02"); break; } } function onEndCurrentAni_Astrafe(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); if(subState == 1){ if(obj.getVar("AstrafeJump").getBool(0)) obj.sq_IntVectPush(1); else obj.sq_IntVectPush(0); } obj.sq_AddSetStatePacket(SKILL_BYKK_ASTRAFE, STATE_PRIORITY_AUTO, true); break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Astrafe(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(obj.getVar("AstrafeJump").getBool(0) == false){ if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT){ obj.sq_StartWrite(); obj.sq_WriteDword(1); sq_SendChangeSkillEffectPacket(obj, SKILL_BYKK_ASTRAFE); } } break; } } function onProc_Astrafe(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: local stateTime = obj.sq_GetStateTimer(); local currentAni = obj.getCurrentAnimation(); local fireT = currentAni.getDelaySum(false); local vz = sq_GetUniformVelocity(0, 250, stateTime, fireT); sq_setCurrentAxisPos(obj, 2, vz); break; } } function onChangeSkillEffect_Astrafe(obj, skillIndex, reciveData) { if(!obj) return; local set = reciveData.readDword(); if(set == 1) obj.getVar("AstrafeJump").setBool(0, true); } function onKeyFrameFlag_Astrafe(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 110: sq_SetMyShake(obj, 1, 200); break; case 0: sq_SetMyShake(obj, 25, 300); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/1crusader_bykk/astrafe/boombodyfront_04.ani", 0, 1, -sq_GetZPos(obj)); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/1crusader_bykk/astrafe/boomback_00.ani", 0, -1, -sq_GetZPos(obj)); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ASTRAFE, -1, 0, 1.0); local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ASTRAFE, -1, 1, 1.0); createSkillPassive_Priest_bykk(obj,obj,PASSIVEOBJECT_PRIESTBYKK,200,0,0,sq_GetDirection(obj),1,SKILL_BYKK_ASTRAFE,1,totalDamage,totalDamageExp,0,0,0,0,0,0); break; } return true; } function onTimeEvent_Astrafe(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: local vz = sq_GetUniformVelocity(250, 0, timeEventCount, 9); sq_setCurrentAxisPos(obj, 2, vz); break; } } function onEndState_Astrafe(obj, new_state) { if(!obj) return; if(new_state != SKILL_BYKK_ASTRAFE){ } } function createSkillPassive_Priest_bykk(obj,passiveObj,objnum,x,y,z,direction,job,skillIndex,subtype,pushv1,pushv2,pushv3,pushv4,pushv5,pushv6,pushv7,pushv8) { if(!obj || !passiveObj || obj.getState() == STATE_DIE) return; local destX_01 = 0; local destY_01 = 0; if(!isSameObject(obj, passiveObj)){ destX_01 = passiveObj.getXPos() - obj.getXPos(); destY_01 = passiveObj.getYPos() - obj.getYPos(); if(direction == ENUM_DIRECTION_LEFT) destX_01 = obj.getXPos() - passiveObj.getXPos(); } sq_BinaryStartWrite(); sq_BinaryWriteDword(job); sq_BinaryWriteDword(skillIndex); sq_BinaryWriteDword(subtype); sq_BinaryWriteDword(pushv1); sq_BinaryWriteDword(pushv2); sq_BinaryWriteDword(pushv3); sq_BinaryWriteDword(pushv4); sq_BinaryWriteDword(pushv5); sq_BinaryWriteDword(pushv6); sq_BinaryWriteDword(pushv7); sq_BinaryWriteDword(pushv8); sq_SendCreatePassiveObjectPacket(obj, objnum, 0, destX_01 + x, destY_01 + y, z, direction); }