function onKeyFrameFlag_po_priest_bykk(obj, flagIndex) { if(!obj) return true; local job = obj.getVar("job").getInt(0); local skillIndex = obj.getVar("skillIndex").getInt(0); local subtype = obj.getVar("subtype").getInt(0); local state = obj.getVar("state").getInt(0); switch(job){ case 0: break; case 1: switch(skillIndex){ case 1: sq_SendDestroyPacketPassiveObject(obj); break; case SKILL_BYKK_ASTRAFE: local totalDamage = obj.getVar("custom").getInt(0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 51)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sq_SetAddWeaponDamage(sq_GetCurrentAttackInfo(obj), true); break; } break; case 2: break; case 3: switch(skillIndex){ case SKILL_BYKK_ADVANCEDDRAGON: local sub = obj.getVar("custom").getInt(0); switch(sub){ case 1: switch(flagIndex){ case 1: //`create blue dragon` 201 0 0 local lifeTime = obj.getVar("custom").getInt(5); local range = obj.getVar("custom").getInt(3); local sizeRate = range.tofloat() / 310.0; local offset = (201 * sizeRate).tointeger(); createSkillPassive_Priest_3exorcist_bykk(obj,obj,643040,offset,0,0,sq_GetDirection(obj),5,1,lifeTime,0,0,0,0,0); break; case 2: //`create white tiger` -206 0 0 local lifeTime = obj.getVar("custom").getInt(5); local range = obj.getVar("custom").getInt(3); local sizeRate = range.tofloat() / 310.0; local offset = (-206 * sizeRate).tointeger(); createSkillPassive_Priest_3exorcist_bykk(obj,obj,643040,offset,0,0,sq_GetDirection(obj),5,2,lifeTime,0,0,0,0,0); break; case 3: //`create hyunmu` 0 60 0 local lifeTime = obj.getVar("custom").getInt(5); local range = obj.getVar("custom").getInt(3); local sizeRate = range.tofloat() / 310.0; local offset = (60 * sizeRate).tointeger(); createSkillPassive_Priest_3exorcist_bykk(obj,obj,643040,0,offset,0,sq_GetDirection(obj),5,3,lifeTime,0,0,0,0,0); break; case 4: //`create phoenix` 0 -60 0 local lifeTime = obj.getVar("custom").getInt(5); local range = obj.getVar("custom").getInt(3); local sizeRate = range.tofloat() / 310.0; local offset = (-60 * sizeRate).tointeger(); createSkillPassive_Priest_3exorcist_bykk(obj,obj,643040,0,offset,0,sq_GetDirection(obj),5,4,lifeTime,0,0,0,0,0); break; } break; case 2: switch(flagIndex){ case 1: local speedRate = obj.getVar("custom").getInt(1); local delay = 170000 / speedRate; sq_SetMyShake(obj, 3, delay); break; case 2: //`create physic flash` 8 0 8 local flashScreenObj = sq_flashScreen(obj,100,99999,30,178, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); obj.getVar("flashobj").clear_obj_vector();//清除 obj.getVar("flashobj").push_obj_vector(flashScreenObj);//加入 break; case 3: sq_flashScreen(obj,100,0,30,178, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); local speedRate = obj.getVar("custom").getInt(1); local delay = 45000 / speedRate; sq_SetMyShake(obj, 20, delay); //`dragon shout sound` 4 0 -4 obj.sq_PlaySound("ADVANCED_DRAGON_START"); break; case 4: //`swing sound` obj.sq_PlaySound("ADVANCED_DRAGON_SWISH"); break; case 5: sq_flashScreen(obj,100,100,30,178, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); local speedRate = obj.getVar("custom").getInt(1); local delay = 50000 / speedRate; sq_SetMyShake(obj, 20, delay); //`create physic attack dust` local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/advanceddragon/advanceddragon_passion/ground_bottom_attack_end_crack_normal.ani", 0, 0, 0); sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); break; case 6: //`destroy axe` -300 0 4 break; case 7: //`physic flash fade out` local flashScreenObj = obj.getVar("flashobj").get_obj_vector(0);//得到 local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj);//转为闪屏类 if(pflashScreen) pflashScreen.fadeOut();//为真 销毁 break; } break; } break; } break; case 4: switch(skillIndex){ case SKILL_DireStream: local Id = obj.getVar("avenger_ID").get_vector(0); local pChrOBJ = obj.getTopCharacter(); pChrOBJ = sq_GetCNRDObjectToSQRCharacter(pChrOBJ); local x = sq_GetXPos(obj); local y = sq_GetYPos(obj); local z = sq_GetZPos(obj); local isMyControlObject = pChrOBJ.sq_IsMyControlObject(); if(Id == AVG_OBJ_Ear_Attack){ sq_BinaryStartWrite(); sq_BinaryWriteDword(AVG_OBJ_Ear_Explosion); sq_SendCreatePassiveObjectPacketPos(obj, 24349, 0, x, y, z + 25); } else if(Id == AVG_OBJ_SpinCutter_Attack){ local skillLevel = pChrOBJ.sq_GetSkillLevel(SKILL_SPINCUTTER); local BonusRate = pChrOBJ.sq_GetLevelData(SKILL_SPINCUTTER, 0, skillLevel); local attackInfo = sq_GetCustomAttackInfo(obj, 3); sq_SetCurrentAttackInfo(obj, attackInfo); attackInfo = sq_GetCurrentAttackInfo(obj); sq_SetCurrentAttackBonusRate(attackInfo, BonusRate); obj.setTimeEvent(OBJ_SpinCutter_get_Attack,80,4,false); } else if(Id == AVG_OBJ_DireStream_Lase){ if(flagIndex == 10){ local Type = obj.getVar("DireStream_Lase").get_vector(0); if(pChrOBJ.isMyControlObject()){ if(Type == 0) { //Common_Image_Als(obj,"passiveobject/4_priest_bykk/4avenger/animation/direstream/normal/direstream_passivefront.ani", 300, -1, 0, 0, 80, 1, 1.0); sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/4avenger/animation/direstream/normal/direstream_passivefront.ani", 300, -1, 0); } else if(Type == 1) { //Common_Image_Als(obj,"passiveobject/4_priest_bykk/4avenger/animation/direstream/devilgauge/direstream2_passivefront.ani", 300, -1, 0, 0, 80, 1, 1.0) sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/4avenger/animation/direstream/devilgauge/direstream2_passivefront.ani", 300, -1, 0); } //Common_Image_Als(obj,"passiveobject/4_priest_bykk/4avenger/animation/direstream/direstream_passiveback.ani", 450, -1, 0, 0, 80, 1, 1.0) sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/4avenger/animation/direstream/direstream_passiveback.ani", 450, -1, 0); } } if(flagIndex == 11){ sq_BinaryStartWrite(); sq_BinaryWriteDword(AVG_OBJ_DireStream_LaseEnd); sq_SendCreatePassiveObjectPacketPos(obj, 24349, 0, x, y, z); } } break; case SKILL_PRIEST_RIGHTEOUSDEVILIZE: switch(subtype){ case 1: local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(14, 21); local hitMax = obj.getVar("custom").getInt(0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 50)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(4)); obj.setTimeEvent(1, delay / (hitMax + 1), hitMax, true); break; } break; } break; } return true; } function onAttack_po_priest_bykk(obj, damager, boundingBox, isStuck) { if(!obj) return; local job = obj.getVar("job").getInt(0); local skillIndex = obj.getVar("skillIndex").getInt(0); local subtype = obj.getVar("subtype").getInt(0); local state = obj.getVar("state").getInt(0); switch(job){ case 0: break; case 1: break; case 2: break; case 3: switch(skillIndex){ case SKILL_BYKK_THUNDERBOLTTALISMAN: switch(subtype){ case 1: if(obj.getVar("custom").getInt(6) > 0) return; local skillLevel = obj.getVar("custom").getInt(5); local aniPath = ["passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalisman/thunderbolt1.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalisman/thunderbolt2.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalisman/thunderbolt3.ani"]; if(skillLevel > 0){ aniPath = ["passiveobject/4_priest_bykk/3exorcist_bykk/animation/chakraofgod/thunder/a_thunder_a.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/chakraofgod/thunder/b_thunder_b.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/chakraofgod/thunder/c_thunder_c.ani"]; } sq_AddDrawOnlyAniFromParent(damager, aniPath[sq_getRandom(0, 2)], 0, 0, sq_GetObjectHeight(damager) / 2); if(obj.getVar("bool").getBool(1)){ obj.getVar("bool").setBool(1, false); sq_SetMyShake(obj, 3, 80); } break; } break; case SKILL_BYKK_HYUNMOO: if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; local sub = obj.getVar("custom").getInt(0); local atkTarget = obj.getVar("atkTarget").get_obj_vector(0); if(sub == 0 && obj.getVar("atkBool").getBool(0) && isSameObject(atkTarget, damager)){ sq_setCurrentAxisPos(obj, 0, sq_GetXPos(damager)); sq_setCurrentAxisPos(obj, 1, sq_GetYPos(damager) + 3); local activeObj = sq_GetCNRDObjectToActiveObject(damager); local apdPath = "character/priest/3exorcist_bykk/ap_hyunmoohold.nut"; if(!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, apdPath)){ local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, apdPath, true); sq_HoldAndDelayDie(activeObj, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); AddAppendage.getVar("custom").setInt(0, sq_GetXPos(activeObj)); AddAppendage.getVar("custom").setInt(1, sq_GetYPos(activeObj)); AddAppendage.getVar("custom").setInt(2, sq_GetZPos(activeObj)); local holdTime = obj.getVar("custom").getInt(2); local changeRate = obj.getVar("custom").getInt(7); if(sq_IsBoss(activeObj) || sq_IsNamed(activeObj) || sq_IsAiCharacter(activeObj) || sq_IsHellMonster(activeObj)){ holdTime = holdTime * changeRate / 100; } print("holdTime = "+holdTime); AddAppendage.sq_SetValidTime(holdTime); obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); obj.setTimeEvent(3, holdTime, 1, false); obj.sq_PlaySound("HYUN_LOCK_LOOP", 2333); } obj.getVar("atkBool").setBool(0, false); } break; case SKILL_BYKK_DESTROYSPIRITTALISMAN: switch(subtype){ case 1: if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; local activeObj = sq_GetCNRDObjectToActiveObject(damager); if(activeObj.getVar("dsTalisman").getBool(0) == false){ activeObj.getVar("dsTalisman").setBool(0, true); local group = sq_GetGroup(activeObj); local uniqueId = sq_GetUniqueId(activeObj); local totalDamage = obj.getVar("custom").getInt(1); local lifeTime = obj.getVar("custom").getInt(2); local hitTime = obj.getVar("custom").getInt(3); local sizeRate = obj.getVar("custom").getInt(4); local height = sq_GetObjectHeight(activeObj); createSkillPassive_Priest_3exorcist_bykk(obj,activeObj,643014,0,1,height / 3,sq_GetDirection(obj),group,uniqueId,totalDamage,lifeTime,hitTime,sizeRate,0,0); } break; } break; case SKILL_BYKK_GROUNDCRASH: if(isStuck) return; if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; if(sq_IsFixture(damager)) return; if(obj.getVar("custom").getInt(0) > 0){ local apdPath = "character/priest/3exorcist_bykk/ap_groundcrash_suck.nut"; if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, apdPath)){ local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true); AddAppendage.sq_SetValidTime(300); sq_MoveToAppendageForce(damager, obj, obj, 0, 0, damager.getZPos(), 200, true, AddAppendage); } } break; case SKILL_BYKK_THROWWEAPON: if(isStuck) return; if(obj.getVar().getBool(1) == false){ obj.getVar().setBool(1, true); obj.stopTimeEvent(1); obj.setTimeEvent(1, 300, 1, false); } sq_AddDrawOnlyAniFromParent(damager, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/throwweapon/hit.ani", 0, 0, sq_GetCenterZPos(boundingBox)); break; case SKILL_BYKK_ATOMICSMASH: sq_AddDrawOnlyAniFromParent(damager, "character/priest/effect/animation/3exorcist_bykk/atomicsmash/hit2final.ani", -150, 1, 50); break; case SKILL_BYKK_DANGEROUSSCALE: local sub = obj.getVar("custom").getInt(0); switch(sub){ case 1: if(obj.getVar("custom").getInt(1) <= 0) break; if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ local aniPath = "appendage/ap_common_hold.nut"; if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, aniPath)){ local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, aniPath, true); sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 600, ENUM_DIRECTION_NEUTRAL , AddAppendage); AddAppendage.sq_SetValidTime(2000); local group = sq_GetGroup(damager); local uniqueId = sq_GetUniqueId(damager); createSkillPassive_Priest_3exorcist_bykk(obj,damager,643023,0,1,0,sq_GetDirection(obj),2,group,uniqueId,0,0,0,0,0); } } break; } break; case SKILL_BYKK_THEBEST7HIT: switch(subtype){ case 1: if(isStuck) return; if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ if(obj.getVar().getBool(0) == false){ obj.getVar().setBool(0, true); sq_AddDrawOnlyAniFromParent(damager, "character/priest/effect/animation/3exorcist_bykk/thebest7hit/powerstrikeseven_crasha.ani", 0, 1, sq_GetCenterZPos(boundingBox)); sq_AddDrawOnlyAniFromParent(damager, "character/priest/effect/animation/3exorcist_bykk/thebest7hit/powerstrikeseven_crashb.ani", 0, 1, sq_GetCenterZPos(boundingBox)); } local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); if(sqrChr && sqrChr.getState() != STATE_DIE){ if(!sqrChr.getVar("Thebest7hitTar").is_obj_vector(damager)){ sqrChr.getVar("Thebest7hitTar").push_obj_vector(damager); local apdPath = "character/priest/3exorcist_bykk/ap_thebest7hit_hold.nut"; if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, apdPath)){ local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, sqrChr, -1, false, apdPath, true); sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); } } } } break; } break; case SKILL_BYKK_ADVANCEDDRAGON: if(isStuck) return; if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ local sub = obj.getVar("custom").getInt(0); switch(sub){ case 3: local apdPath = "character/priest/3exorcist_bykk/ap_advanceddragon_hold.nut"; local lifeTime = obj.getVar("custom").getInt(2) + 200; if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, apdPath)){ local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true); sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); AddAppendage.sq_SetValidTime(lifeTime); } break; case 2: sq_AddDrawOnlyAniFromParent(damager, "character/priest/effect/animation/3exorcist_bykk/advanceddragon_passion/hit/hit_hitdodge.ani", 0, 0, sq_GetCenterZPos(boundingBox)); break; } } break; } break; case 4: break; } } function procAppend_po_priest_bykk(obj) { if(!obj) return; local job = obj.getVar("job").getInt(0); local skillIndex = obj.getVar("skillIndex").getInt(0); local subtype = obj.getVar("subtype").getInt(0); local state = obj.getVar("state").getInt(0); switch(job){ case 0: break; case 1: break; case 2: break; case 3: switch(skillIndex){ case SKILL_BYKK_VERMILIONBIRDTALISMAN: switch(subtype){ case 2: local sub = obj.getVar("custom").getInt(0); if(sub == 1 && state == 20){ local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); if(sqrChr && sqrChr.getState() != STATE_DIE){ local direction = sq_GetDirection(sqrChr); local offSetX = sq_GetDistancePos(sq_GetXPos(sqrChr), direction, -50); local offSetY = sq_GetYPos(sqrChr); sq_setCurrentAxisPos(obj, 0, offSetX); sq_setCurrentAxisPos(obj, 1, offSetY); sq_SetCurrentDirection(obj, direction); } else{ obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); return; } local time = sq_GetObjectTime(obj); if(time >= 10000){ sqrChr.getVar("vermilionbirdtalismanBool").setBool(0, false); obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); } } else if(sub == 2 && state == 20){ local time = sq_GetObjectTime(obj); local lifeTime = obj.getVar("custom").getInt(2); if(time >= lifeTime){ obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); } } break; } break; case SKILL_BYKK_THUNDERBOLTTALISMAN: switch(subtype){ case 1: switch(state){ case 21: if(obj.getVar("bool").getBool(0)) return; if(obj.getVar("custom").getInt(6) > 0) return; local timer = obj.getVar().get_ct_vector(0); if(timer){ local currentT = timer.Get(); if(currentT >= obj.getVar("custom").getInt(2)){ obj.getVar("bool").setBool(0, true); print("time = "+obj.getVar("custom").getInt(2)); local size = obj.getVar("eff").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local pooledObj = obj.getVar("eff").get_obj_vector(i); if(pooledObj) pooledObj.setValid(false); } } obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); } } else{ obj.getVar("bool").setBool(0, true); local size = obj.getVar("eff").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local pooledObj = obj.getVar("eff").get_obj_vector(i); if(pooledObj) pooledObj.setValid(false); } } obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); } break; } break; case 2: break; } break; case SKILL_BYKK_HYUNMOO: local sub = obj.getVar("custom").getInt(0); switch(sub){ case 0: local time = sq_GetObjectTime(obj); if(time >= obj.getVar("custom").getInt(3) && state == 21 && obj.getVar("disappear").getBool(0) == false){ obj.getVar("disappear").setBool(0, true); obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); } local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); if((!sqrChr || sqrChr.getState() == STATE_DIE) && obj.getVar("disappear").getBool(0) == false){ obj.getVar("disappear").setBool(0, true); obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); } break; case 1: local targetObj = obj.getVar("tar").get_obj_vector(0); if(!targetObj || targetObj.getState() == 26){ sq_SendDestroyPacketPassiveObject(obj); } local offsetX = sq_GetDistancePos(sq_GetXPos(targetObj), sq_GetDirection(obj), 200); sq_setCurrentAxisPos(obj, 0, offsetX); sq_setCurrentAxisPos(obj, 1, sq_GetYPos(targetObj) + 125); break; } break; case SKILL_BYKK_SHIKIGAMI: local sub = obj.getVar("custom").getInt(0); switch(sub){ case 1: local time = sq_GetObjectTime(obj); if(time >= obj.getVar("custom").getInt(4) + 500 && obj.getVar().getBool(0) == false){ obj.getVar().setBool(0, true); local totalDamage = obj.getVar("custom").getInt(2); local sizeRate = obj.getVar("custom").getInt(6); createSkillPassive_Priest_3exorcist_bykk(obj,obj,643012,250,0,-sq_GetZPos(obj),sq_GetDirection(obj),3,totalDamage,sizeRate,0,0,0,0,0); sq_SendDestroyPacketPassiveObject(obj); } break; case 2: local time = sq_GetObjectTime(obj); if(time >= obj.getVar("custom").getInt(1) - 350){ if(obj.isExistTimeEvent(2)) obj.stopTimeEvent(2); if(obj.isExistTimeEvent(3)) obj.stopTimeEvent(3); } if(time >= obj.getVar("custom").getInt(1)){ sq_SendDestroyPacketPassiveObject(obj); } break; case 5: local randomNum = obj.getVar("custom").getInt(1); local randomNum2 = obj.getVar("custom").getInt(4); local time = sq_GetObjectTime(obj); if(time <= 300 + randomNum){ local vz = sq_GetUniformVelocity(obj.getVar("custom").getInt(3), obj.getVar("custom").getInt(3) - 150 + randomNum2 * 5, time, 300 + randomNum); local angle = sq_GetUniformVelocity(-35 + randomNum2, 0, time, 300); sq_setCurrentAxisPos(obj, 2, vz); sq_SetCustomRotate(obj, sq_ToRadian(angle.tofloat())); } else{ local vz = sq_GetUniformVelocity(obj.getVar("custom").getInt(3) - 150 + randomNum2 * 5, obj.getVar("custom").getInt(3), time, 300 + randomNum + obj.getVar("custom").getInt(2)); local angle = sq_GetUniformVelocity(0, 35 + randomNum2, time, 300); sq_setCurrentAxisPos(obj, 2, vz); sq_SetCustomRotate(obj, sq_ToRadian(angle.tofloat())); if(time >= obj.getVar("custom").getInt(2) + 300 && obj.getVar().getBool(0) == false){ obj.getVar().setBool(0, true); local pooledObj; if(randomNum > 50){ pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/birddisappearw.ani", 0, 0, 0); sq_SetCustomRotate(pooledObj, sq_ToRadian(-20.0, 20.0)); } else{ local angle = sq_ToRadian(-20.0, 20.0); pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/birddisappearb1.ani", 0, 0, 0); sq_SetCustomRotate(pooledObj, angle); pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/birddisappearb2.ani", 0, 1, 1); sq_SetCustomRotate(pooledObj, angle); } sq_SendDestroyPacketPassiveObject(obj); } } break; } break; case SKILL_BYKK_DESTROYSPIRITTALISMAN: switch(subtype){ case 1: local sub = obj.getVar("custom").getInt(0); switch(sub){ case 1: local time = sq_GetObjectTime(obj); if(time >= 1500 && obj.getVar().getBool(0) == false){ obj.getVar().setBool(0, true); sq_SendDestroyPacketPassiveObject(obj); } break; } break; case 2: local targetObj = obj.getVar("tar").get_obj_vector(0); local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); if(!activeObj || activeObj.getState() == STATE_DIE || activeObj.getHp() <= 0) sq_SendDestroyPacketPassiveObject(obj); break; } break; case SKILL_BYKK_THROWWEAPON: local time = sq_GetObjectTime(obj); if(time >= obj.getVar("custom").getInt(1) && obj.getVar().getBool(0) == false){ obj.getVar().setBool(0, true); sq_SendDestroyPacketPassiveObject(obj); local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/throwweapon/disappear.ani"; local direction = sq_GetDirection(obj), x = sq_GetXPos(obj), y = sq_GetYPos(obj), z = sq_GetZPos(obj); local sizeRate = obj.getVar("custom").getInt(0); createOnlyDrawObjectEX_Priest_bykk(obj,aniPath,true,direction,x,y,z,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate) } break; case SKILL_BYKK_DANGEROUSSCALE: if(obj.getVar("custom").getInt(0) == 1) return; local state = obj.getVar("state").getInt(0); switch(state){ case 21: local targetObj = obj.getVar("tar").get_obj_vector(0); local aniPath = "appendage/ap_common_hold.nut"; if(targetObj && !CNSquirrelAppendage.sq_IsAppendAppendage(targetObj, aniPath)){ obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); } break; } break; case SKILL_BYKK_PENTAGON: switch(subtype){ case 1: switch(state){ case 22: local timer = obj.getVar().get_ct_vector(0);//得到 if(timer){ local currentT = timer.Get();//得到时间 if(currentT >= obj.getVar("custom").getInt(3) && obj.getVar().getBool(0) == false){ obj.getVar().setBool(0, true); obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); } } } break; case 2: local sub = obj.getVar("custom").getInt(0); local sizeRate = obj.getVar("custom").getInt(1); switch(sub){ case 2: local time = sq_GetObjectTime(obj); local sizeRate = sq_GetUniformVelocity(100, 50 * sizeRate / 100, time, 250); local currentAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); break; } break; case 3: break; case 4: break; case 5: break; case 6: break; case 7: break; case 8: break; case 9: break; } break; case SKILL_BYKK_FOURGODPOWER: switch(subtype){ case 1: break; case 2: switch(state){ case 21: local timer = obj.getVar().get_ct_vector(0);//得到 if(timer){ local currentT = timer.Get();//得到时间 local isStrong = obj.getVar("custom").getInt(4); local lifeTime = obj.getVar("custom").getInt(5); if(isStrong > 0) lifeTime = lifeTime / 2; if(currentT >= lifeTime && obj.getVar().getBool(0) == false){ obj.getVar().setBool(0, true); obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); } } } break; case 3: switch(state){ case 21: local timer = obj.getVar().get_ct_vector(0);//得到 if(timer){ local currentT = timer.Get();//得到时间 local isStrong = obj.getVar("custom").getInt(4); local lifeTime = obj.getVar("custom").getInt(5); if(isStrong > 0) lifeTime = lifeTime / 2; if(currentT >= lifeTime && obj.getVar().getBool(0) == false){ obj.getVar().setBool(0, true); obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); } } } break; case 4: break; } break; case SKILL_BYKK_BLUEDRAGON: local sub = obj.getVar("custom").getInt(0); if(sub == 1){ switch(state){ default: if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){ obj.getVar().setBool(0, true); obj.sq_RemoveMoveParticle(); local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); local destX_01 = obj.getXPos() - sqrChr.getXPos(); local destY_01 = obj.getYPos() - sqrChr.getYPos(); if(sq_GetDirection(obj) == ENUM_DIRECTION_LEFT) destX_01 = sqrChr.getXPos() - obj.getXPos(); sq_BinaryStartWrite(); sq_BinaryWriteDword(100); sq_BinaryWriteDword(30); sq_BinaryWriteDword(30); sq_BinaryWriteDword(30); sq_BinaryWriteDword(30); sq_BinaryWriteDword(30); sq_SendCreatePassiveObjectPacket(sqrChr, 24030, 0, destX_01, destY_01, 0, sq_GetDirection(sqrChr)); local totalDamage = obj.getVar("custom").getInt(1); local sizeRate = obj.getVar("custom").getInt(2); createSkillPassive_Priest_3exorcist_bykk(obj,obj,643039,0,0,0,sq_GetDirection(obj),2,totalDamage,sizeRate,0,0,0,0,0); sq_SendDestroyPacketPassiveObject(obj); } else if(sq_GetZPos(obj) > 0 && sq_GetObjectTime(obj) >= 3000) sq_SendDestroyPacketPassiveObject(obj); break; } } break; case SKILL_BYKK_ADVANCEDDRAGON: local sub = obj.getVar("custom").getInt(0); if(sub == 1){ local time = sq_GetObjectTime(obj); local lifeTime = obj.getVar("custom").getInt(5); local speedRate = obj.getVar("custom").getInt(6); lifeTime = lifeTime + 200000 / speedRate; if(time >= lifeTime && obj.getVar().getBool(0) == false){ obj.getVar().setBool(0, true); local range = obj.getVar("custom").getInt(3); local sizeRate = range.tofloat() / 310.0; local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/advanceddragon/advanceddragon_bright/endmagiccircle_1.ani", 0, 0, 0); local pAni = pooledObj.getCurrentAnimation(); pAni.setImageRateFromOriginal(sizeRate, sizeRate); pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SendDestroyPacketPassiveObject(obj); } } else if(sub == 3){ switch(state){ case 21: local timer = obj.getVar().get_ct_vector(0); if(timer){ local currentT = timer.Get(); if(currentT >= obj.getVar("custom").getInt(2)){ obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); } } break; } } break; } break; case 4: switch(skillIndex){ case SKILL_DireStream: local Id = obj.getVar("avenger_ID").get_vector(0); local pChrOBJ = obj.getTopCharacter(); pChrOBJ = sq_GetCNRDObjectToSQRCharacter(pChrOBJ); local state = pChrOBJ.getState(); if(Id == AVG_OBJ_SpinCutter_Attack){ local pAni = obj.getCurrentAnimation(); local frmIndex = sq_GetAnimationFrameIndex(pAni); local t = obj.getVar("SpinCutter_Attack_HitTime").get_ct_vector(0); if (!t){ obj.getVar("SpinCutter_Attack_HitTime").clear_ct_vector(); obj.getVar("SpinCutter_Attack_HitTime").push_ct_vector(); t = obj.getVar("SpinCutter_Attack_HitTime").get_ct_vector(0); t.Reset(); t.Start(10000,0); return true; } local currentT = t.Get(); local end_frmIndex = 7; pAni.setSpeedRate(150.0); if(frmIndex >= 0 && frmIndex <= end_frmIndex){ local Dis_xpos = obj.getVar("SpinCutter_Attack").get_vector(0); local End_xpos = sq_GetDistancePos(Dis_xpos, obj.getDirection(), 350); local xpos = sq_GetUniformVelocity(Dis_xpos, End_xpos, currentT, 300); obj.setCurrentPos(xpos, obj.getYPos(), obj.getZPos()); obj.getVar("SpinCutter_Attack").set_vector(1,xpos); } if(frmIndex == end_frmIndex + 6){ obj.getVar("SpinCutter_Attack_HitTime").clear_ct_vector(); local pIntVec = sq_GetGlobalIntVector(); sq_IntVectorClear(pIntVec); sq_IntVectorPush(pIntVec, 11); pChrOBJ.addSetStatePacket(STATE_SPINCUTTER, pIntVec, STATE_PRIORITY_IGNORE_FORCE, false, ""); } if(frmIndex >= end_frmIndex + 7){ local Dis_xpos = obj.getVar("SpinCutter_Attack").get_vector(1); local End_xpos = sq_GetDistancePos(Dis_xpos, obj.getDirection(), -350); local xpos = sq_GetUniformVelocity(Dis_xpos, End_xpos, currentT, 300); obj.setCurrentPos(xpos, obj.getYPos(), obj.getZPos()); } if(state != STATE_SPINCUTTER){ sq_SendDestroyPacketPassiveObject(obj); } } break; case SKILL_PRIEST_RIGHTEOUSDEVILIZE: switch(subtype){ case 1: local frameIndex = sq_GetCurrentFrameIndex(obj); local time = sq_GetObjectTime(obj); local currentAni = obj.getCurrentAnimation(); if(frameIndex < 21){ if(frameIndex > 13){ local fireT = currentAni.getDelaySum(14, 21); local currentT = time - currentAni.getDelaySum(0, 13); local vx = sq_GetUniformVelocity(obj.getVar("custom").getInt(3), obj.getVar("custom").getInt(2), currentT, fireT); sq_setCurrentAxisPos(obj, 0, vx); } else{ local fireT = currentAni.getDelaySum(0, 13); local vx = sq_GetUniformVelocity(0, obj.getVar("custom").getInt(1), time, fireT); local dstX = sq_GetDistancePos(obj.getVar("custom").getInt(2), obj.getDirection(), vx); sq_setCurrentAxisPos(obj, 0, dstX); obj.getVar("custom").setInt(3, dstX); } } break; } break; } break; } } //驱魔 function onAttack_Priest_3exorcist(obj, damager, bounding_box, is_stuck) { if(is_stuck) return; if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; if(obj.getVar("vermilionbirdtalismanBool").getBool(0)){ obj.getVar("vermilionbirdtalismanBool").setBool(0, false); local size = obj.getVar("VermilionbirdtalismanObj").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local aObj = obj.getVar("VermilionbirdtalismanObj").get_obj_vector(i); if(aObj){ local colObj = sq_GetCNRDObjectToCollisionObject(aObj); if(colObj.getState() != 21) colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); } } } local activeObj = sq_GetCNRDObjectToActiveObject(damager); 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_VERMILIONBIRDTALISMAN, -1, 2, bonusRate); local lifeTime = sq_GetIntData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 3); local hitTime = sq_GetIntData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 5); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 2); createSkillPassive_Priest_3exorcist_bykk(obj,activeObj,643005,0,0,50,sq_GetDirection(obj),2,totalDamage,lifeTime,hitTime,sizeRate,0,0,0); } } function createOnlyDrawObject_Priest_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer) { local ani = sq_CreateAnimation("",aniPath); local pooledObj = sq_CreatePooledObject(ani,isTrue); sq_SetCurrentDirection(pooledObj, direction); pooledObj.setCurrentPos(x,y,z); pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer); sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false); return pooledObj; } function createOnlyDrawObjectEX_Priest_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer,sizeRateX,sizeRateY) { local ani = sq_CreateAnimation("",aniPath); local pooledObj = sq_CreatePooledObject(ani,isTrue); sq_SetCurrentDirection(pooledObj, direction); pooledObj.setCurrentPos(x,y,z); local currentAni = pooledObj.getCurrentAnimation(); sizeRateX = sizeRateX.tofloat() / 100.0; sizeRateY = sizeRateY.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRateX, sizeRateY); pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer); sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false); return pooledObj; } function createSkillPassive_Priest_3exorcist_bykk(obj,passiveObj,objnum,x,y,z,direction,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(); } local skillIndex = 0; local subtype = 0; switch(objnum){ case 643001: skillIndex = SKILL_BYKK_CHAKRAOFGOD; subtype = 1; break; case 643002: skillIndex = SKILL_BYKK_CHAKRAOFGOD; subtype = 2; break; case 643003: skillIndex = SKILL_BYKK_ENTERINGNIRVANA; subtype = 1; break; case 643004: skillIndex = SKILL_BYKK_VERMILIONBIRDTALISMAN; subtype = 1; break; case 643005: skillIndex = SKILL_BYKK_VERMILIONBIRDTALISMAN; subtype = 2; break; case 643006: skillIndex = SKILL_BYKK_VERMILIONBIRDTALISMAN; subtype = 3; break; case 643007: skillIndex = SKILL_BYKK_BAEKHO; subtype = 1; break; case 643008: skillIndex = SKILL_BYKK_BAEKHO; subtype = 2; break; case 643009: skillIndex = SKILL_BYKK_THUNDERBOLTTALISMAN; subtype = 1; break; case 643010: skillIndex = SKILL_BYKK_THUNDERBOLTTALISMAN; subtype = 2; break; case 643011: skillIndex = SKILL_BYKK_HYUNMOO; subtype = 1; break; case 643012: skillIndex = SKILL_BYKK_SHIKIGAMI; subtype = 1; break; case 643013: skillIndex = SKILL_BYKK_DESTROYSPIRITTALISMAN; subtype = 1; break; case 643014: skillIndex = SKILL_BYKK_DESTROYSPIRITTALISMAN; subtype = 2; break; case 643015: skillIndex = SKILL_BYKK_DESTROYSPIRITTALISMAN; subtype = 3; break; case 643016: skillIndex = SKILL_BYKK_ANTIAIRUPPER; subtype = 1; break; case 643017: skillIndex = SKILL_BYKK_ANTIAIRUPPER; subtype = 2; break; case 643018: skillIndex = SKILL_BYKK_GROUNDCRASH; subtype = 1; break; case 643019: skillIndex = SKILL_BYKK_CUTTINGDARKNESS; subtype = 1; break; case 643020: skillIndex = SKILL_BYKK_THROWWEAPON; subtype = 1; break; case 643021: skillIndex = SKILL_BYKK_REPEATEDSMASH; subtype = 1; break; case 643022: skillIndex = SKILL_BYKK_ATOMICSMASH; subtype = 1; break; case 643023: skillIndex = SKILL_BYKK_DANGEROUSSCALE; subtype = 1; break; case 643024: skillIndex = SKILL_BYKK_THEBEST7HIT; subtype = 1; break; case 643025: skillIndex = SKILL_BYKK_THEBEST7HIT; subtype = 2; break; case 643026: skillIndex = SKILL_BYKK_PENTAGON; subtype = 1; break; case 643027: skillIndex = SKILL_BYKK_PENTAGON; subtype = 2; break; case 643028: skillIndex = SKILL_BYKK_PENTAGON; subtype = 3; break; case 643029: skillIndex = SKILL_BYKK_PENTAGON; subtype = 4; break; case 643030: skillIndex = SKILL_BYKK_PENTAGON; subtype = 5; break; case 643031: skillIndex = SKILL_BYKK_PENTAGON; subtype = 6; break; case 643032: skillIndex = SKILL_BYKK_PENTAGON; subtype = 7; break; case 643033: skillIndex = SKILL_BYKK_PENTAGON; subtype = 8; break; case 643034: skillIndex = SKILL_BYKK_PENTAGON; subtype = 9; break; case 643035: skillIndex = SKILL_BYKK_FOURGODPOWER; subtype = 1; break; case 643036: skillIndex = SKILL_BYKK_FOURGODPOWER; subtype = 2; break; case 643037: skillIndex = SKILL_BYKK_FOURGODPOWER; subtype = 3; break; case 643038: skillIndex = SKILL_BYKK_FOURGODPOWER; subtype = 4; break; case 643039: skillIndex = SKILL_BYKK_BLUEDRAGON; subtype = 1; break; case 643040: skillIndex = SKILL_BYKK_ADVANCEDDRAGON; subtype = 1; break; } if(skillIndex == 0 && subtype == 0) return; sq_BinaryStartWrite(); sq_BinaryWriteDword(3); 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, PASSIVEOBJECT_PRIESTBYKK, 0, destX_01 + x, destY_01 + y, z, direction); } function getAttackCancelStartFrameSize_Priest_3exorcist(obj) { return 2; } function getAttackCancelStartFrame_Priest_3exorcist(obj, Index) { if(Index == 0) return 7; else if(Index == 1) return 6; else if(Index == 2) return 6; } function onAttack_priest_attack_3exorcist(obj, damager, boundingBox, isStuck) { if(isStuck) return; } function onAfterSetState_priest_attack_3exorcist(obj, state, datas, isResetTimer) { if(!obj) return; local attackIndex = obj.getAttackIndex(); 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)){ switch(attackIndex){ case 0: obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/exorcistattack1_attack.ani"), 0, 0); break; case 1: obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/exorcistattack2_attack2.ani"), 0, 0); break; case 2: obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/exorcistattack3_attack3.ani"), 0, 0); break; } } if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ switch(attackIndex){ case 0: obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/exorcistattack1_attack.ani"), 0, 0); break; case 1: obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/exorcistattack2_attack2.ani"), 0, 0); break; case 2: obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/exorcistattack3_attack3.ani"), 0, 0); break; } } } } function onKeyFrameFlag_priest_attack_3exorcist(obj, flagIndex) { if(!obj) return; // print("flagIndex = "+flagIndex); switch(flagIndex){ case 1000: if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){ // print("test2222"); 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)); bonusRate = bonusRate.tofloat() / 100.0; local totalDamage = obj.sq_GetBonusRateWithPassive(174, -1, 0, bonusRate) + 100; local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON); local sizeRate = sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 2, skillLevel); if(skillLevel > 0) createSkillPassive_Priest_3exorcist_bykk(obj,obj,643017,150,0,0,sq_GetDirection(obj),totalDamage,sizeRate,0,0,0,0,0,0); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)) createSkillPassive_Priest_3exorcist_bykk(obj,obj,643001,125,0,30,sq_GetDirection(obj),totalDamage,1,0,0,0,0,0,0); else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ createSkillPassive_Priest_3exorcist_bykk(obj,obj,643001,125,0,30,sq_GetDirection(obj),totalDamage,0,0,0,0,0,0,0); if(sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT) > 0 && sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON) > 0){ setStageofhermitAppendage(obj); } } } break; } return true; } //脉轮 : 圣光 function checkExecutableSkill_Chakraofcalmness(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CHAKRAOFCALMNESS); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_IntVectPush(SKILL_BYKK_CHAKRAOFCALMNESS); obj.sq_AddSetStatePacket(STATE_BYKK_CHAKRAOFCALMNESS, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Chakraofcalmness(obj) { if (!obj) return false; return true; } function onSetState_Chakraofcalmness(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(1); obj.setCurrentAnimation(Ani); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); local skillIndex = obj.sq_GetVectorData(datas, 1); obj.getVar("mailunSet").setInt(0, skillIndex); local skill_level = sq_GetSkillLevel(obj, skillIndex); local castTime = sq_GetCastTime(obj, skillIndex, skill_level); local timeRate = delaySum * 100 / castTime; print("timeRate = "+timeRate); obj.getVar("mailunSet").setInt(1, timeRate); currentAni.setSpeedRate(timeRate.tofloat()); sq_StartDrawCastGauge(obj, castTime, true);//开始读条 switch(skillIndex){ case SKILL_BYKK_CHAKRAOFCALMNESS: if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofcalmness/90lvrosary/chakracasting_f.ani"), 0, 0); else obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofcalmness/cast.ani"), 0, 0); break; case SKILL_BYKK_CHAKRAOFPASSION: if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofpassion/90lvrosary/chakracasting_f.ani"), 0, 0); else obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofpassion/cast.ani"), 0, 0); break; } break; case 1: sq_EndDrawCastGauge(obj); local Ani = obj.sq_GetThrowShootAni(1); obj.setCurrentAnimation(Ani); local speed = 500 * obj.getVar("mailunSet").getInt(1) / 100; obj.setTimeEvent(1, speed, 1, false); local skillIndex = obj.getVar("mailunSet").getInt(0); switch(skillIndex){ case SKILL_BYKK_CHAKRAOFCALMNESS: if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) <= 0) sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/start.ani", 0, 0, 0); break; case SKILL_BYKK_CHAKRAOFPASSION: if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) <= 0) sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/chakraofpassion/start.ani", 0, 0, 0); break; } local skillLevel = sq_GetSkillLevel(obj, skillIndex); 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_RemoveAppendage(obj, apdPath1); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath2); switch(skillIndex){ case SKILL_BYKK_CHAKRAOFCALMNESS: local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skillIndex, false, apdPath1, true); local buffTime = sq_GetLevelData(obj, skillIndex, 0, skillLevel); // local mgAttack = sq_GetLevelData(obj, skillIndex, 1, skillLevel); local castTime = sq_GetLevelData(obj, skillIndex, 2, skillLevel); if(buffTime > 0) AddAppendage.sq_SetValidTime(buffTime); AddAppendage.setBuffIconImage(46); AddAppendage.setEnableIsBuff(true); AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), skillIndex, skillLevel); CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); obj.getVar("element_kk").setInt(1, 100); local change_appendage = AddAppendage.sq_getChangeStatus("chakraofcalmness"); if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("chakraofcalmness",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); if(change_appendage){ change_appendage.clearParameter(); // change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (mgAttack).tofloat() * 0.1); change_appendage.addParameter(CHANGE_STATUS_TYPE_CAST_SPEED, false, (castTime).tofloat()); } AddAppendage.sq_DeleteEffectFront(); AddAppendage.sq_DeleteEffectBack(); local chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); if(false){//chakraofgodLevel > 0 AddAppendage.sq_AddEffectBack("character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/90lvrosary/chakraofcalmnessroop_03.ani"); AddAppendage.sq_AddEffectBack("character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/90lvrosary/chakraofcalmnessroop_04.ani"); AddAppendage.sq_AddEffectFront("character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/90lvrosary/chakraofcalmnessroop_01.ani"); AddAppendage.sq_AddEffectFront("character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/90lvrosary/chakraofcalmnessroop_02.ani"); } else{ AddAppendage.sq_AddEffectFront("character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/front-dodge.ani"); AddAppendage.sq_AddEffectFront("character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/front-glow.ani"); AddAppendage.sq_AddEffectFront("character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/front-normal.ani"); AddAppendage.sq_AddEffectBack("character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/back-dodge.ani"); AddAppendage.sq_AddEffectBack("character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/back-glow.ani"); AddAppendage.sq_AddEffectBack("character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/back-normal.ani"); } setSkillBonusRate_3Exorcist_bykk(obj); obj.sq_PlaySound("PR_CHA_COLD"); break; case SKILL_BYKK_CHAKRAOFPASSION: local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skillIndex, false, apdPath2, true); local buffTime = sq_GetLevelData(obj, skillIndex, 0, skillLevel); // local phAttack = sq_GetLevelData(obj, skillIndex, 1, skillLevel); local stuckRate = sq_GetLevelData(obj, skillIndex, 2, skillLevel); local hitReRate = sq_GetLevelData(obj, skillIndex, 3, skillLevel); if(buffTime > 0) AddAppendage.sq_SetValidTime(buffTime); AddAppendage.setBuffIconImage(47); AddAppendage.setEnableIsBuff(true); AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), skillIndex, skillLevel); CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); obj.getVar("element_kk").setInt(0, 100); local change_appendage = AddAppendage.sq_getChangeStatus("chakraofcalmness"); if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("chakraofcalmness",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); if(change_appendage){ change_appendage.clearParameter(); // change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (phAttack).tofloat() * 0.1); change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK, false, (stuckRate).tofloat() * -0.1); change_appendage.addParameter(CHANGE_STATUS_TYPE_RIGIDITY, false, (hitReRate).tofloat()); } AddAppendage.sq_DeleteEffectFront(); AddAppendage.sq_DeleteEffectBack(); local chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD); if(false){//chakraofgodLevel > 0 AddAppendage.sq_AddEffectBack("character/priest/effect/animation/3exorcist_bykk/chakraofpassion/90lvrosary/chakraofpassionroop_03.ani"); AddAppendage.sq_AddEffectBack("character/priest/effect/animation/3exorcist_bykk/chakraofpassion/90lvrosary/chakraofpassionroop_04.ani"); AddAppendage.sq_AddEffectFront("character/priest/effect/animation/3exorcist_bykk/chakraofpassion/90lvrosary/chakraofpassionroop_01.ani"); AddAppendage.sq_AddEffectFront("character/priest/effect/animation/3exorcist_bykk/chakraofpassion/90lvrosary/chakraofpassionroop_02.ani"); } else{ AddAppendage.sq_AddEffectBack("character/priest/effect/animation/3exorcist_bykk/chakraofpassion/back-dodge.ani"); AddAppendage.sq_AddEffectBack("character/priest/effect/animation/3exorcist_bykk/chakraofpassion/back-glow.ani"); AddAppendage.sq_AddEffectBack("character/priest/effect/animation/3exorcist_bykk/chakraofpassion/back-normal.ani"); AddAppendage.sq_AddEffectFront("character/priest/effect/animation/3exorcist_bykk/chakraofpassion/front-dodge.ani"); AddAppendage.sq_AddEffectFront("character/priest/effect/animation/3exorcist_bykk/chakraofpassion/front-glow.ani"); AddAppendage.sq_AddEffectFront("character/priest/effect/animation/3exorcist_bykk/chakraofpassion/front-normal.ani"); } setSkillBonusRate_3Exorcist_bykk(obj); obj.sq_PlaySound("PR_CHA_HOT"); break; } break; } } function onEndCurrentAni_Chakraofcalmness(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_CHAKRAOFCALMNESS, STATE_PRIORITY_AUTO, true); break; case 0: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onTimeEvent_Chakraofcalmness(obj, timeEventIndex, timeEventCount) { if(!obj) return false; if(timeEventIndex == 1){ obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); } } function onEndState_Chakraofcalmness(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_CHAKRAOFCALMNESS){ sq_EndDrawCastGauge(obj); } } function drawAppend_appendage_chakraofcalmness(appendage, isOver, x, y, isFlip) { if(!appendage) return; local parentObj = appendage.getParent(); local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); if (!obj || obj.getState() == STATE_DIE) { appendage.setValid(false); return; } } function drawAppend_appendage_chakraofpassion(appendage, isOver, x, y, isFlip) { local parentObj = appendage.getParent(); local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); if (!obj || obj.getState() == STATE_DIE) { appendage.setValid(false); return; } } //脉轮 : 烈焰 function checkExecutableSkill_Chakraofpassion(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CHAKRAOFPASSION); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_IntVectPush(SKILL_BYKK_CHAKRAOFPASSION); obj.sq_AddSetStatePacket(STATE_BYKK_CHAKRAOFCALMNESS, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Chakraofpassion(obj) { if (!obj) return false; return true; } function onSetState_Chakraofpassion(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(0); break; } } function onEndCurrentAni_Chakraofpassion(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 checkExecutableSkill_Enteringnirvana(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_ENTERINGNIRVANA); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_ENTERINGNIRVANA, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Enteringnirvana(obj) { if (!obj) return false; return true; } function onSetState_Enteringnirvana(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(0); obj.setCurrentAnimation(Ani); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_ENTERINGNIRVANA); local castTime = sq_GetCastTime(obj, SKILL_BYKK_ENTERINGNIRVANA, skill_level); local timeRate = delaySum * 100 / castTime; print("timeRate = "+timeRate); currentAni.setSpeedRate(timeRate.tofloat()); sq_StartDrawCastGauge(obj, castTime, true);//开始读条 obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_ENTERINGNIRVANA); break; case 1: sq_EndDrawCastGauge(obj); local Ani = obj.sq_GetThrowShootAni(0); obj.setCurrentAnimation(Ani); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 0); obj.getVar("setEnteringnirvana").setInt(0, speedRate); local delaySum = currentAni.getDelaySum(0, 2); obj.setTimeEvent(1, delaySum, 1, false); if(sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT) > 0 && CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut")){ setStageofhermitAppendage(obj); } obj.sq_PlaySound("BUDD_LIGHTBALL"); } } function onEndCurrentAni_Enteringnirvana(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_ENTERINGNIRVANA, STATE_PRIORITY_AUTO, true); break; case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Enteringnirvana(obj) { if(!obj) return; } function onKeyFrameFlag_Enteringnirvana(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_Enteringnirvana(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: local hitMax = sq_GetIntData(obj, SKILL_BYKK_ENTERINGNIRVANA, 3); 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; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ENTERINGNIRVANA, -1, 0, bonusRate); local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ENTERINGNIRVANA, -1, 12, 1.0) + 100; local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_ENTERINGNIRVANA); local prob = sq_GetLevelData(obj, SKILL_BYKK_ENTERINGNIRVANA, 1, skillLevel); local time = sq_GetLevelData(obj, SKILL_BYKK_ENTERINGNIRVANA, 3, skillLevel); local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_ENTERINGNIRVANA, 4, skillLevel); local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_ENTERINGNIRVANA, 5, skillLevel); local subtype = 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)) subtype = 1; else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)) subtype = 2; local offSetX = 50; if(obj.isDownSkillLastKey()){ local speedRate = obj.getVar("setEnteringnirvana").getInt(0); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/enteringnirvana/talisman1.ani", 0, 1, 61); local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/enteringnirvana/talisman2.ani", 0, 0, 60); local pAni = pooledObj.getCurrentAnimation(); local pAni2 = pooledObj2.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); pAni2.setSpeedRate(speedRate.tofloat()); offSetX = 150; } createSkillPassive_Priest_3exorcist_bykk(obj,obj,643003,offSetX,0,70,sq_GetDirection(obj),hitMax,totalDamage,sizeRate,prob,time,moveSpeed,attackSpeed,subtype); break; } } function onEndState_Enteringnirvana(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_ENTERINGNIRVANA) sq_EndDrawCastGauge(obj); } //朱雀符 function checkExecutableSkill_Vermilionbirdtalisman(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_VERMILIONBIRDTALISMAN); if (isUse){ if(sq_GetSkillLevel(obj, SKILL_BYKK_GODOFEXORCISM) > 0 && CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/priest/3exorcist_bykk/ap_chakraofpassion.nut")){ obj.startSkillCoolTime(SKILL_BYKK_VERMILIONBIRDTALISMAN, sq_GetSkillLevel(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN), -1); local size = obj.getVar("VermilionbirdtalismanObj").get_obj_vector_size(); if(size <= 0){ obj.getVar("VermilionbirdtalismanObj").clear_obj_vector(); obj.getVar("vermilionbirdtalismanBool").setBool(0, true); createSkillPassive_Priest_3exorcist_bykk(obj,obj,643005,-50,0,100,sq_GetDirection(obj),1,0,0,0,0,0,0,0); } local state = obj.getState(); if(state == STATE_STAND || state == STATE_DASH){ obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true); } return true; } obj.startSkillCoolTime(SKILL_BYKK_VERMILIONBIRDTALISMAN, sq_GetSkillLevel(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN), -1); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_VERMILIONBIRDTALISMAN, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Vermilionbirdtalisman(obj) { if (!obj) return false; return true; } function onSetState_Vermilionbirdtalisman(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); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN); local castTime = sq_GetCastTime(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, skill_level); local timeRate = delaySum * 100 / castTime; currentAni.setSpeedRate(timeRate.tofloat()); sq_StartDrawCastGauge(obj, castTime, true);//开始读条 break; case 1: sq_EndDrawCastGauge(obj); 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); break; } } function onEndCurrentAni_Vermilionbirdtalisman(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_VERMILIONBIRDTALISMAN, STATE_PRIORITY_AUTO, true); break; case 1: if(sq_GetSkillLevel(obj, SKILL_BYKK_GODOFEXORCISM) > 0 && CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut")){ obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); } break; } } function onProcCon_Vermilionbirdtalisman(obj) { if(!obj) return; } function onKeyFrameFlag_Vermilionbirdtalisman(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1000: local delay = sq_GetIntData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 3); if(sq_GetSkillLevel(obj, SKILL_BYKK_GODOFEXORCISM) <= 0 || !CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut")){ obj.setTimeEvent(1, delay + 500, 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_VERMILIONBIRDTALISMAN, -1, 0, bonusRate); local lifeTime = sq_GetIntData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 3); local hitTime = sq_GetIntData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 4); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 2); createSkillPassive_Priest_3exorcist_bykk(obj,obj,643004,50,0,90,sq_GetDirection(obj),totalDamage,lifeTime,hitTime,sizeRate,0,0,0,0); } else{ sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/godofexorcism/godofexorcism_vermilionbirdtalisman_spawn_magic_body.ani", -45, 0, 95); 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_VERMILIONBIRDTALISMAN, -1, 1, bonusRate); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 2); createSkillPassive_Priest_3exorcist_bykk(obj,obj,643006,50,0,90,sq_GetDirection(obj),totalDamage,sizeRate,0,0,0,0,0,0); } break; } return true; } function onTimeEvent_Vermilionbirdtalisman(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 onEndState_Vermilionbirdtalisman(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_VERMILIONBIRDTALISMAN) sq_EndDrawCastGauge(obj); } //式神 : 白虎 function checkExecutableSkill_Baekho(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BAEKHO); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_BAEKHO, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Baekho(obj) { if (!obj) return false; return true; } function onSetState_Baekho(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); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_BAEKHO); local castTime = sq_GetCastTime(obj, SKILL_BYKK_BAEKHO, skill_level); local timeRate = delaySum * 100 / castTime; currentAni.setSpeedRate(timeRate.tofloat()); sq_StartDrawCastGauge(obj, castTime, true);//开始读条 break; case 1: sq_EndDrawCastGauge(obj); local Ani = obj.sq_GetThrowShootAni(2); obj.setCurrentAnimation(Ani); obj.sq_PlaySound("R_PR_VO_BEAKHO"); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT) > 0 && CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut")){ setStageofhermitAppendage(obj); } break; } } function onEndCurrentAni_Baekho(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_BAEKHO, STATE_PRIORITY_AUTO, true); break; case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Baekho(obj) { if(!obj) return; } function onKeyFrameFlag_Baekho(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1000: 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_BAEKHO, -1, 0, bonusRate); local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BAEKHO, -1, 0, 4.4 * bonusRate); local hitTime = sq_GetIntData(obj, SKILL_BYKK_BAEKHO, 0); local hitMax = sq_GetIntData(obj, SKILL_BYKK_BAEKHO, 1); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_BAEKHO, 2); if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){ hitTime = hitTime - sq_GetIntData(obj, SKILL_BYKK_CHAKRAOFGOD, 4); sizeRate = sizeRate * (1000 + sq_GetIntData(obj, SKILL_BYKK_CHAKRAOFGOD, 5)) / 1000; } // print("hitTime = "+hitTime); // print("hitMax = "+hitMax); // print("sizeRate = "+sizeRate); local apdSet = 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)) apdSet = 1; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)) apdSet = 2; createSkillPassive_Priest_3exorcist_bykk(obj,obj,643007,50,0,0,sq_GetDirection(obj),totalDamage,totalDamageExp,hitTime,hitMax,sizeRate,apdSet,0,0); break; } return true; } function onTimeEvent_Baekho(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_Baekho(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_BAEKHO) sq_EndDrawCastGauge(obj); } //落雷符 function checkExecutableSkill_Thunderbolttalisman(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_THUNDERBOLTTALISMAN); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_THUNDERBOLTTALISMAN, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Thunderbolttalisman(obj) { if (!obj) return false; return true; } function onSetState_Thunderbolttalisman(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); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_THUNDERBOLTTALISMAN); local castTime = sq_GetCastTime(obj, SKILL_BYKK_THUNDERBOLTTALISMAN, skill_level); local timeRate = delaySum * 100 / castTime; currentAni.setSpeedRate(timeRate.tofloat()); sq_StartDrawCastGauge(obj, castTime, true);//开始读条 break; case 1: sq_EndDrawCastGauge(obj); 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); if(sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT) > 0 && CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut")){ setStageofhermitAppendage(obj); } obj.sq_PlaySound("PR_LIGHT"); break; } } function onEndCurrentAni_Thunderbolttalisman(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_THUNDERBOLTTALISMAN, STATE_PRIORITY_AUTO, true); break; case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Thunderbolttalisman(obj) { if(!obj) return; } function onKeyFrameFlag_Thunderbolttalisman(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1000: local hitTime = sq_GetIntData(obj, SKILL_BYKK_THUNDERBOLTTALISMAN, 2); 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_THUNDERBOLTTALISMAN, -1, 1, bonusRate); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_THUNDERBOLTTALISMAN); local lifeTime = sq_GetLevelData(obj, SKILL_BYKK_THUNDERBOLTTALISMAN, 0, skillLevel); local prob = sq_GetLevelData(obj, SKILL_BYKK_THUNDERBOLTTALISMAN, 0, skillLevel); local time = sq_GetLevelData(obj, SKILL_BYKK_THUNDERBOLTTALISMAN, 0, skillLevel); local level = sq_GetSkillLevel(obj, 174) + 10; local sizeRate = sq_GetIntData(obj, SKILL_BYKK_THUNDERBOLTTALISMAN, 1); if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0) sizeRate = sizeRate * (100 + sq_GetIntData(obj, SKILL_BYKK_CHAKRAOFGOD, 8)) / 100; local isTalisman = 0; if(sq_GetIntData(obj, SKILL_BYKK_THUNDERBOLTTALISMAN, 15) > 0) isTalisman = 1; print("isTalisman = "+isTalisman); createSkillPassive_Priest_3exorcist_bykk(obj,obj,643009,50,0,0,sq_GetDirection(obj),hitTime,totalDamage,lifeTime,prob,time,level,sizeRate,isTalisman); break; } return true; } function onTimeEvent_Thunderbolttalisman(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_Thunderbolttalisman(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_THUNDERBOLTTALISMAN) sq_EndDrawCastGauge(obj); } //式神 : 玄武 function checkExecutableSkill_Hyunmoo(obj) { if (!obj) return false; local hyunmooObj = obj.getVar("hyunmooObj").get_obj_vector(0); if (hyunmooObj){ local state = obj.getState(); if(state == 0 || state == 14){ obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true); } return false; } local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HYUNMOO); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_HYUNMOO, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Hyunmoo(obj) { if (!obj) return false; return true; } function onSetState_Hyunmoo(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(1); obj.setCurrentAnimation(Ani); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_HYUNMOO); local castTime = sq_GetCastTime(obj, SKILL_BYKK_HYUNMOO, skill_level); local timeRate = delaySum * 100 / castTime; currentAni.setSpeedRate(timeRate.tofloat()); sq_StartDrawCastGauge(obj, castTime, true);//开始读条 break; case 1: sq_EndDrawCastGauge(obj); local Ani = obj.sq_GetThrowShootAni(1); obj.setCurrentAnimation(Ani); 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_HYUNMU"); obj.getVar("hyunmooObj").clear_obj_vector(); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_HYUNMOO, 1); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_HYUNMOO); local holdTime = sq_GetLevelData(obj, SKILL_BYKK_HYUNMOO, 1, skillLevel); local lifeTime = sq_GetLevelData(obj, SKILL_BYKK_HYUNMOO, 0, skillLevel); local mpRestore = sq_GetLevelData(obj, SKILL_BYKK_HYUNMOO, 3, skillLevel); local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_HYUNMOO, 8, skillLevel); local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_HYUNMOO, 9, skillLevel); local changeRate = sq_GetIntData(obj, SKILL_BYKK_HYUNMOO, 6); createSkillPassive_Priest_3exorcist_bykk(obj,obj,643011,-50,0,0,sq_GetDirection(obj),0,sizeRate,holdTime,lifeTime,mpRestore,attackSpeed,moveSpeed,changeRate); obj.endSkillCoolTime(SKILL_BYKK_HYUNMOO); break; } } function onEndCurrentAni_Hyunmoo(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_HYUNMOO, STATE_PRIORITY_AUTO, true); break; case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onEndState_Hyunmoo(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_HYUNMOO) sq_EndDrawCastGauge(obj); } function proc_appendage_hyunmoobuff(appendage) { if(!appendage) return; local parentObj = appendage.getParent(); if(!parentObj || parentObj.getState() == STATE_DIE){ appendage.setValid(false); return; } local sourceObj = appendage.getSource(); local distance = appendage.getVar("custom").getInt(0); local xPos = sq_GetXPos(sourceObj), yPos = sq_GetYPos(sourceObj); if(sq_GetDistance(xPos, yPos, parentObj.getXPos(), parentObj.getYPos(), true) > distance / 2){ appendage.setValid(false); return; } } function proc_appendage_hyunmoohold(appendage) { if(!appendage) return; local parentObj = appendage.getParent(); local activeObj = sq_GetCNRDObjectToActiveObject(parentObj); if(!activeObj || activeObj.getState() == STATE_DIE || activeObj.getHp() <= 0){ appendage.setValid(false); return; } sq_setCurrentAxisPos(activeObj, 0, appendage.getVar("custom").getInt(0)); sq_setCurrentAxisPos(activeObj, 1, appendage.getVar("custom").getInt(1)); sq_setCurrentAxisPos(activeObj, 2, appendage.getVar("custom").getInt(2)); local sourceObj = appendage.getSource(); local colObj = sq_GetCNRDObjectToCollisionObject(sourceObj); if(colObj.getState() != 24 && colObj.getState() != 23){ appendage.setValid(false); return; } } function procSkill_Hyunmoo(obj) { local hyunmooObj = obj.getVar("hyunmooObj").get_obj_vector(0); if(!sq_GetSkill(obj, SKILL_BYKK_HYUNMOO).isInCoolTime() && hyunmooObj){ obj.setSkillCommandEnable(SKILL_BYKK_HYUNMOO,true); local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_HYUNMOO); if(b_useskill != -1){ obj.startSkillCoolTime(SKILL_BYKK_HYUNMOO, sq_GetSkillLevel(obj, SKILL_BYKK_HYUNMOO), -1); local colObj = sq_GetCNRDObjectToCollisionObject(hyunmooObj); if(colObj.getState() == 21 || colObj.getState() == 22){ local distance = sq_GetIntData(obj, SKILL_BYKK_HYUNMOO, 1); local xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj); obj.getVar("HyunmooTar_boss").clear_obj_vector(); obj.getVar("HyunmooTar_named").clear_obj_vector(); obj.getVar("HyunmooTar_normal").clear_obj_vector(); obj.getVar("HyunmooTar").clear_obj_vector(); local objectManager = obj.getObjectManager(); for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ local object = objectManager.getCollisionObject(i); if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && sq_GetDistance(xPos, yPos, object.getXPos(), object.getYPos(), true) <= distance / 2){ local activeObj = sq_GetCNRDObjectToActiveObject(object); if(sq_IsBoss(activeObj)){ obj.getVar("HyunmooTar_boss").push_obj_vector(activeObj); continue; } else if(sq_IsNamed(activeObj)){ obj.getVar("HyunmooTar_named").push_obj_vector(activeObj); continue; } else{ obj.getVar("HyunmooTar_normal").push_obj_vector(activeObj); continue; } } } local bossSize = obj.getVar("HyunmooTar_boss").get_obj_vector_size(); local namedSize = obj.getVar("HyunmooTar_named").get_obj_vector_size(); local normalSize = obj.getVar("HyunmooTar_normal").get_obj_vector_size(); if(bossSize > 0){ for(local i = 0; i < bossSize; i++){ local targetObj = obj.getVar("HyunmooTar_boss").get_obj_vector(i); if(targetObj) obj.getVar("HyunmooTar").push_obj_vector(targetObj); } } if(namedSize > 0){ for(local i = 0; i < namedSize; i++){ local targetObj = obj.getVar("HyunmooTar_named").get_obj_vector(i); if(targetObj) obj.getVar("HyunmooTar").push_obj_vector(targetObj); } } if(normalSize > 0){ for(local i = 0; i < normalSize; i++){ local targetObj = obj.getVar("HyunmooTar_normal").get_obj_vector(i); if(targetObj) obj.getVar("HyunmooTar").push_obj_vector(targetObj); } } if(obj.getVar("HyunmooTar").get_obj_vector_size() > 0){ local targetObj = obj.getVar("HyunmooTar").get_obj_vector(0); colObj.getVar("atkTarget").clear_obj_vector(); colObj.getVar("atkTarget").push_obj_vector(targetObj); colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); } } else if(colObj.getState() == 24){ colObj.stopTimeEvent(3); colObj.setTimeEvent(3, 1000, 1, true); } } } } //式神·殇 function checkExecutableSkill_Shikigami(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SHIKIGAMI); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_SHIKIGAMI, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Shikigami(obj) { if (!obj) return false; return true; } function onSetState_Shikigami(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); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_SHIKIGAMI); local castTime = sq_GetCastTime(obj, SKILL_BYKK_SHIKIGAMI, skill_level) *0+100; local timeRate = delaySum * 100 / castTime; currentAni.setSpeedRate(timeRate.tofloat()); sq_StartDrawCastGauge(obj, castTime, true);//开始读条 break; case 1: sq_EndDrawCastGauge(obj); 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); 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_SHIKIGAMI, -1, 0, bonusRate); local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHIKIGAMI, -1, 1, bonusRate); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SHIKIGAMI); local hitTime = sq_GetIntData(obj, SKILL_BYKK_SHIKIGAMI, 2); local lifeTime = sq_GetIntData(obj, SKILL_BYKK_SHIKIGAMI, 3); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_SHIKIGAMI, 7); local sizeRateExp = sq_GetIntData(obj, SKILL_BYKK_SHIKIGAMI, 6); createSkillPassive_Priest_3exorcist_bykk(obj,obj,643012,-75,-1,200,sq_GetDirection(obj),1,totalDamage,totalDamageExp,hitTime,lifeTime,sizeRate,sizeRateExp,0); local apdPath = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)){ obj.setTimeEvent(1, 50, 1, false); } else{ obj.setTimeEvent(1, lifeTime + 800, 1, false); obj.getVar("shikigamiBool").setBool(0, false); obj.getVar("shikigamiObj").clear_obj_vector(); } break; } } function onEndCurrentAni_Shikigami(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_SHIKIGAMI, STATE_PRIORITY_AUTO, true); break; case 1: // obj.sq_IntVectClear(); // obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Shikigami(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: local apdPath = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) return; sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); if(sq_IsEnterCommand(obj, E_JUMP_COMMAND) && obj.getVar("shikigamiBool").getBool(0) == false){ obj.getVar("shikigamiBool").setBool(0, true); obj.setTimeEvent(2, 50, 1, true); } break; } } function onKeyFrameFlag_Shikigami(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_Shikigami(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; case 2: local size = obj.getVar("shikigamiObj").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local atkObj = obj.getVar("shikigamiObj").get_obj_vector(0); if(atkObj){ local colObj = sq_GetCNRDObjectToCollisionObject(atkObj); colObj.setTimeEvent(4, 1000, 1, true); } } } obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onEndState_Shikigami(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_SHIKIGAMI) sq_EndDrawCastGauge(obj); } //灭魂符 function checkExecutableSkill_Destroyspirittalisman(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DESTROYSPIRITTALISMAN); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_DESTROYSPIRITTALISMAN, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Destroyspirittalisman(obj) { if (!obj) return false; return true; } function onSetState_Destroyspirittalisman(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_DESTROYSPIRITTALISMAN); break; } } function onEndCurrentAni_Destroyspirittalisman(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_Destroyspirittalisman(obj) { if(!obj) return; } function onKeyFrameFlag_Destroyspirittalisman(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: 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_DESTROYSPIRITTALISMAN, -1, 1, bonusRate); local lifeTime = sq_GetIntData(obj, SKILL_BYKK_DESTROYSPIRITTALISMAN, 0); local hitTime = sq_GetIntData(obj, SKILL_BYKK_DESTROYSPIRITTALISMAN, 23); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_DESTROYSPIRITTALISMAN, 28); createSkillPassive_Priest_3exorcist_bykk(obj,obj,643013,50,0,90,sq_GetDirection(obj),0,totalDamage,lifeTime,hitTime,sizeRate,0,0,0); break; } return true; } function onTimeEvent_Destroyspirittalisman(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_Destroyspirittalisman(obj, new_state) { if(!obj) return; } //空斩打 function checkExecutableSkill_Antiairupper(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_ANTIAIRUPPER); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_ANTIAIRUPPER, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Antiairupper(obj) { if (!obj) return false; return true; } function onSetState_Antiairupper(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_ANTIAIRUPPER); obj.sq_PlaySound("PR_ANTIAIR"); 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; local upForceSet = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIAIRUPPER, -1, 1, 0.75) + 100; local isCharge = 0; if(sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON) > 0) isCharge = 1; if(isCharge > 0){ obj.getVar("isCharge").setBool(0, true); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON); bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 5, skillLevel).tofloat() / 100.0; upForceSet = upForceSet * (100 + sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 6, skillLevel)) / 100; } local totalDamage = obj.sq_GetBonusRateWithPassive(174, -1, 0, bonusRate) + 100; obj.getVar("Charge").setInt(0, totalDamage); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 2)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setChakraAttackInfo(obj); local attackInfo = sq_GetCurrentAttackInfo(obj); sq_SetCurrentAttacknUpForce(attackInfo, upForceSet); if(isCharge > 0){ local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(0, 1); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/chargeweapon.ani", -75, 1, 15); local pAni = pooledObj.getCurrentAnimation(); local speedRate = pAni.getDelaySum(false) * 100 / delay; pAni.setSpeedRate(speedRate.tofloat()); } break; } } function onEndCurrentAni_Antiairupper(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 onKeyFrameFlag_Antiairupper(obj, flagIndex) { if(!obj) return false; obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/antiairupper/front.ani"), 0, 0); obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/antiairupper/back.ani"), 0, 0); if(obj.getVar("isCharge").getBool(0)){ local totalDamage = obj.getVar("Charge").getInt(0); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON); local sizeRate = sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 8, skillLevel); local bonusRate = sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 7, skillLevel); totalDamage = totalDamage * bonusRate / 100; createSkillPassive_Priest_3exorcist_bykk(obj,obj,643016,0,0,0,sq_GetDirection(obj),totalDamage,0,0,0,0,0,0,0); createSkillPassive_Priest_3exorcist_bykk(obj,obj,643017,-165,0,0,sq_GetDirection(obj),totalDamage,sizeRate,0,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.getVar("Charge").getInt(0) * bonusRate / 100; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/antiairupper_a.ani"), 0, 0); createSkillPassive_Priest_3exorcist_bykk(obj,obj,643001,-165,0,30,sq_GetDirection(obj),totalDamage,1,0,0,0,0,0,0); } else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/antiairupper_a.ani"), 0, 0); createSkillPassive_Priest_3exorcist_bykk(obj,obj,643001,-165,0,30,sq_GetDirection(obj),totalDamage,0,0,0,0,0,0,0); if(sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT) > 0 && sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON) > 0){ setStageofhermitAppendage(obj); } } } return true; } //疾风打 function checkExecutableSkill_Galesmash(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_GALESMASH); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_GALESMASH, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Galesmash(obj) { if (!obj) return false; return true; } function onSetState_Galesmash(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_GALESMASH1); // 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); local speed = 10.0 * speedRate.tofloat(); if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); else sq_SetVelocity(obj, 0, -speed); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GALESMASH, -1, 0, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_GALESMASH1)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setChakraAttackInfo(obj); break; case 1: obj.getVar("galeCancel").setBool(1, true); obj.sq_SetCurrentAnimation(PRANI_BYKK_GALESMASH2); 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_GALESMASH, -1, 1, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_GALESMASH2)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setChakraAttackInfo(obj); 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/galesmash_smashg.ani"), 0, 0); else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/galesmash_smashg.ani"), 0, 0); obj.sq_PlaySound("PR_RWIND"); obj.sq_PlaySound("CROSS_SWING"); break; } local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_GALESMASH); local prob = sq_GetLevelData(obj, SKILL_BYKK_GALESMASH, 2, skillLevel); local time = sq_GetLevelData(obj, SKILL_BYKK_GALESMASH, 4, skillLevel); local level = sq_GetSkillLevel(obj, 174) + 20; local attackInfo = sq_GetCurrentAttackInfo(obj); sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_STUN, prob, level, time); } function onEndCurrentAni_Galesmash(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_GALESMASH, STATE_PRIORITY_AUTO, true); break; case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Galesmash(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(sq_GetCurrentFrameIndex(obj) >= 2){ sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_GALESMASH, STATE_PRIORITY_AUTO, true); } } break; } } function onKeyFrameFlag_Galesmash(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: obj.getVar("skillCancel").setBool(0, true); break; } return true; } function onEndState_Galesmash(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_GALESMASH){ obj.getVar("skillCancel").setBool(0, false); obj.getVar("galeCancel").setBool(1, false); } } function onAttack_Galesmash(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return; if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0 && obj.getVar("galeCancel").getBool(1)){ obj.getVar("galeCancel").setBool(1, false); 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_GALESMASH, -1, 1, 1.0) * bonusRate / 100; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ createSkillPassive_Priest_3exorcist_bykk(obj,damager,643001,0,0,sq_GetCenterZPos(boundingBox),sq_GetDirection(obj),totalDamage,1,1,0,0,0,0,0); print(1); } else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ createSkillPassive_Priest_3exorcist_bykk(obj,damager,643001,0,0,sq_GetCenterZPos(boundingBox),sq_GetDirection(obj),totalDamage,0,1,0,0,0,0,0); print(2); } } break; } } //断空捶击 function checkExecutableSkill_Groundcrash(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_GROUNDCRASH); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_GROUNDCRASH, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Groundcrash(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_Groundcrash(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_GROUNDCRASH); 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; local chargeLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON); if(chargeLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 17, chargeLevel).tofloat() / 100.0; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GROUNDCRASH, -1, 0, bonusRate); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_GROUNDCRASH1)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setChakraAttackInfo(obj); break; case 1: obj.sq_SetCurrentAnimation(PRANI_BYKK_GROUNDCRASHFINAL); 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; local chargeLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON); if(chargeLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 17, chargeLevel).tofloat() / 100.0; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GROUNDCRASH, -1, 1, bonusRate); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_GROUNDCRASH2)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setChakraAttackInfo(obj); break; } } function onEndCurrentAni_Groundcrash(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_GROUNDCRASH, STATE_PRIORITY_AUTO, true); break; case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onKeyFrameFlag_Groundcrash(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: if(sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON) > 0){ local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(6, 6); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/chargeweapon.ani", -50, 0, 80); local pAni = pooledObj.getCurrentAnimation(); local speedRate = pAni.getDelaySum(false) * 100 / delay; pAni.setSpeedRate(speedRate.tofloat()); } break; case 2: local bonusRate = 1.0; local chargeLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON); local sizeRate = 100; local isSuck = 0; if(chargeLevel > 0){ bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 17, chargeLevel).tofloat() / 100.0; sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GROUNDCRASH, -1, 2, 1.0) + 100; sizeRate = sizeRate * (100 + sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 18, sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON))) / 100; } print("bonusRate = "+bonusRate); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GROUNDCRASH, -1, 3, bonusRate); print("totalDamage = "+totalDamage); print("sizeRate = "+sizeRate); createSkillPassive_Priest_3exorcist_bykk(obj,obj,643018,155,0,0,sq_GetDirection(obj),totalDamage,sizeRate,isSuck,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)); totalDamage = totalDamage * bonusRate / 100; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ createSkillPassive_Priest_3exorcist_bykk(obj,obj,643001,155,0,30,sq_GetDirection(obj),totalDamage,1,0,0,0,0,0,0); } else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ createSkillPassive_Priest_3exorcist_bykk(obj,obj,643001,155,0,30,sq_GetDirection(obj),totalDamage,0,0,0,0,0,0,0); isSuck = 1; if(sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT) > 0 && sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON) > 0){ setStageofhermitAppendage(obj); } } } break; } return true; } //星落打 function checkExecutableSkill_Homerun(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HOMERUN); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_HOMERUN, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Homerun(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_Homerun(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_HOMERUNGRAB); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/homerun/homerun_grab_eff01.ani"), 0, 0); obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/homerun/homerun_grab_eff02.ani"), 0, 0); obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/homerun/homerun_grab_eff03.ani"), 0, 0); obj.sq_AddStateLayerAnimation(4,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/homerun/homerun_grab_eff04.ani"), 0, 0); obj.sq_AddStateLayerAnimation(4,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/homerun/homerun_grab_floor_eff01.ani"), 0, 0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_HOMERUNGRAB)); obj.getVar("homerunAtk").setBool(0, true); obj.getVar("homerunselect").setBool(0, true); obj.getVar("homerunselect2").setInt(0, 0); obj.getVar("homerunTar").clear_obj_vector(); obj.getVar("homerunObj").clear_obj_vector(); obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_HOMERUN); break; case 1: obj.sq_SetCurrentAnimation(PRANI_BYKK_HOMERUNCHARGE); 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 = 30000 / currentAni.getDelaySum(0, 0); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/homerun/homerun_chargeholdtarget_upeff01.ani", 145, 1, 0); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/homerun/homerun_charge_front_dust.ani", 0, 1, 0); local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/homerun/homerun_charge_back_dust02.ani", 0, -1, 0); obj.getVar("homerunEff").clear_obj_vector(); obj.getVar("homerunEff").push_obj_vector(pooledObj); obj.getVar("homerunEff").push_obj_vector(pooledObj2); local range = sq_GetIntData(obj, SKILL_BYKK_HOMERUN, 3) / 2; local appendage = sq_AttractToMe(obj, range, 145, 1000); obj.getVar("homerun").setAppendage(0,appendage); return; break; case 2: local size = obj.getVar("homerunTar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("homerunTar").get_obj_vector(i); if(targetObj && targetObj.getState() != STATE_DIE) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/priest/3exorcist_bykk/ap_homerun_hold.nut"); } } local size = obj.getVar("homerunEff").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local pooledObj = obj.getVar("homerunEff").get_obj_vector(i); if(pooledObj) pooledObj.setValid(false); } } obj.sq_SetCurrentAnimation(PRANI_BYKK_HOMERUNSMASH); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMERUN, -1, 2, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_HOMERUNSMASH)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setChakraAttackInfo(obj); local directionSelect = obj.sq_GetVectorData(datas, 1); local isFullCharge = obj.sq_GetVectorData(datas, 2); local attackInfo = sq_GetCurrentAttackInfo(obj); switch(directionSelect){ case 0: sq_SetCurrentAttacknBackForce(attackInfo, 100); sq_SetCurrentAttacknUpForce(attackInfo, 100); break; case 1: sq_SetCurrentAttacknBackForce(attackInfo, 500); sq_SetCurrentAttacknUpForce(attackInfo, 300); break; case 2: sq_SetCurrentAttacknBackForce(attackInfo, 500); sq_SetCurrentAttacknUpForce(attackInfo, 500); break; } if(isFullCharge > 0) sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/homerun/homerun_hit_fullcharge_eff01.ani", 0, 0, 0); sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/homerun/homerun_smasha_rockhit_back09.ani", 0, -1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/homerun/homerun_smasha_rockhit_front09.ani", 0, 1, 0); sq_flashScreen(obj,80,100,240,150, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 5, 120); local appendage = obj.getVar("homerun").getAppendage(0); if(appendage) appendage.setValid(false); obj.getVar("homerunAtk").setBool(1, true); break; case 3: obj.sq_SetCurrentAnimation(PRANI_BYKK_HOMERUN_SMASHA_BODY); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMERUN, -1, 2, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_HOMERUNSMASH)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setChakraAttackInfo(obj); sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/homerun/homerun_smasha_rockhit_back09.ani", 0, -1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/homerun/homerun_smasha_rockhit_front09.ani", 0, 1, 0); sq_SetMyShake(obj, 5, 60); break; case 4: local zPos = obj.sq_GetVectorData(datas, 1); local stateTime = obj.sq_GetVectorData(datas, 2); local isFullCharge = obj.sq_GetVectorData(datas, 3); obj.getVar("homerunSet").setInt(0, zPos); obj.getVar("homerunSet").setInt(1, stateTime); obj.getVar("homerunSet").setInt(2, isFullCharge); obj.sq_SetCurrentAnimation(PRANI_BYKK_HOMERUNCHARGEHOLDTARGET); local currentAni = obj.getCurrentAnimation(); sq_SetFrameDelayTime(currentAni, 0, stateTime); // 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/homerun_smashe.ani"), 0, 0); // } // else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ // obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/homerun_smashe.ani"), 0, 0); // } // } return; break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Homerun(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(obj.getVar("homerunAtk").getBool(0) == false){ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_HOMERUN, STATE_PRIORITY_AUTO, true); } else { obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); } break; case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(4); obj.sq_AddSetStatePacket(STATE_BYKK_HOMERUN, STATE_PRIORITY_AUTO, true); break; case 2: case 3: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; case 4: obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_IntVectPush(obj.getVar("homerunselect2").getInt(0)); obj.sq_IntVectPush(obj.getVar("homerunSet").getInt(2)); obj.sq_AddSetStatePacket(STATE_BYKK_HOMERUN, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Homerun(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: local stateTime = obj.sq_GetStateTimer(); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); local speedRate = 201800 / delaySum; if(stateTime >= 30000 / speedRate){ local targetObj = obj.getVar("homerunTar").get_obj_vector(0); local zPos = sq_GetZPos(targetObj); if(!obj.isDownSkillLastKey()){ obj.sq_IntVectClear(); obj.sq_IntVectPush(4); obj.sq_IntVectPush(zPos); obj.sq_IntVectPush(stateTime); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_HOMERUN, STATE_PRIORITY_AUTO, true); } if(stateTime >= delaySum / 2){ obj.sq_IntVectClear(); obj.sq_IntVectPush(4); obj.sq_IntVectPush(zPos); obj.sq_IntVectPush(stateTime); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_HOMERUN, STATE_PRIORITY_AUTO, true); } } case 4: if(obj.getVar("homerunselect").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("homerunselect").setBool(0, false); obj.getVar("homerunselect2").setInt(0, 1); } else if( sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ obj.getVar("homerunselect").setBool(0, false); obj.getVar("homerunselect2").setInt(0, 2); } } break; } } function onProc_Homerun(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: local stateTime = obj.sq_GetStateTimer(); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); local targetObj = obj.getVar("homerunTar").get_obj_vector(0); local zPos = sq_GetAccel(obj.getVar("homerunSet").getInt(0), 400, stateTime, delaySum / 2, true); sq_setCurrentAxisPos(targetObj, 2, zPos); break; case 4: local stateTime = obj.sq_GetStateTimer(); local targetObj = obj.getVar("homerunTar").get_obj_vector(0); local zPos = sq_GetAccel(obj.getVar("homerunSet").getInt(0), 0, stateTime, obj.getVar("homerunSet").getInt(1), false); sq_setCurrentAxisPos(targetObj, 2, zPos); break; } } function onEndState_Homerun(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_HOMERUN){ local size = obj.getVar("homerunTar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("homerunTar").get_obj_vector(i); if(targetObj && targetObj.getState() != STATE_DIE) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/priest/3exorcist_bykk/ap_homerun_hold.nut"); } } local size = obj.getVar("homerunEff").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local pooledObj = obj.getVar("homerunEff").get_obj_vector(i); if(pooledObj) pooledObj.setValid(false); } } local appendage = obj.getVar("homerun").getAppendage(0); if(appendage) appendage.setValid(false); } } function onAttack_Homerun(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return; if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; if(obj.getVar("homerunAtk").getBool(0)){ obj.getVar("homerunAtk").setBool(0, false); if(sq_IsFixture(damager)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(STATE_BYKK_HOMERUN, STATE_PRIORITY_AUTO, true); } else{ obj.getVar("homerunTar").push_obj_vector(damager); local apdPath = "character/priest/3exorcist_bykk/ap_homerun_hold.nut"; if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, apdPath)){ local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true); sq_HoldAndDelayDie(damager, obj, true, true, false, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); local stateTime = obj.sq_GetStateTimer(); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); local time = delaySum - stateTime; if(time > 100) time = 100; sq_MoveToAppendageForce(damager, obj, obj, 145, 0, 0, time, true, AddAppendage); obj.getVar("homerunSet").setInt(0, sq_GetZPos(damager)); } else{ obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(STATE_BYKK_HOMERUN, STATE_PRIORITY_AUTO, true); } } } if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) <= 0) return; if(obj.getVar("homerunAtk").getBool(1)){ obj.getVar("homerunAtk").setBool(1, false); 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_HOMERUN, -1, 2, 1.0) * bonusRate / 100; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ createSkillPassive_Priest_3exorcist_bykk(obj,damager,643001,0,0,sq_GetCenterZPos(boundingBox),sq_GetDirection(obj),totalDamage,1,1,0,0,0,0,0); } else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ createSkillPassive_Priest_3exorcist_bykk(obj,damager,643001,0,0,sq_GetCenterZPos(boundingBox),sq_GetDirection(obj),totalDamage,0,1,0,0,0,0,0); } } } //黑暗切割 function checkExecutableSkill_Cuttingdarkness(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CUTTINGDARKNESS); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_CUTTINGDARKNESS, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Cuttingdarkness(obj) { if (!obj) return false; return true; } function onSetState_Cuttingdarkness(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_CUTTINGDARKNESSCHARGE); 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(PRANI_BYKK_CUTTINGDARKNESSFULLSMASH); 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; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CUTTINGDARKNESS, -1, 1, bonusRate); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_CUTTINGDARKNESS)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setChakraAttackInfo(obj); obj.sq_PlaySound("PR_STAR_THROW"); break; } } function onEndCurrentAni_Cuttingdarkness(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_CUTTINGDARKNESS, STATE_PRIORITY_AUTO, true); break; case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onKeyFrameFlag_Cuttingdarkness(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: 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_CUTTINGDARKNESS, -1, 2, bonusRate); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_CUTTINGDARKNESS, 1); createSkillPassive_Priest_3exorcist_bykk(obj,obj,643019,175,0,60,sq_GetDirection(obj),totalDamage,sizeRate,0,0,0,0,0,0); break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } return true; } //巨旋风 function checkExecutableSkill_Throwweapon(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_THROWWEAPON); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_THROWWEAPON, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Throwweapon(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_Throwweapon(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_THROWWEAPONREADY); break; case 1: obj.sq_SetCurrentAnimation(PRANI_BYKK_THROWWEAPONTHROW); local chargeLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON); local bonusRate = 1.0; if(chargeLevel > 0){ bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 11, chargeLevel).tofloat() / 100.0; } local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THROWWEAPON, -1, 0, bonusRate); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_THROWWEAPONSECOND)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setChakraAttackInfo(obj); 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/throwweapon_chargethrowh2.ani"), 0, 0); } else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/throwweapon_chargethrowh2.ani"), 0, 0); } } obj.sq_PlaySound("PR_SPIN_FIN"); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Throwweapon(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_THROWWEAPON, STATE_PRIORITY_AUTO, true); break; case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onKeyFrameFlag_Throwweapon(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: local hitTime = sq_GetIntData(obj, SKILL_BYKK_THROWWEAPON, 2); local lifeTime = sq_GetIntData(obj, SKILL_BYKK_THROWWEAPON, 1); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_THROWWEAPON, 5); local chargeLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON); local bonusRate = 1.0; if(chargeLevel > 0){ bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 12, chargeLevel).tofloat() / 100.0; lifeTime = lifeTime + sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 14, chargeLevel); sizeRate = sq_GetIntData(obj, SKILL_BYKK_THROWWEAPON, 6); } local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THROWWEAPON, -1, 1, bonusRate); local sub = 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)) sub = 1; else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ sub = 2; if(sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT) > 0 && sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON) > 0){ setStageofhermitAppendage(obj); } } } createSkillPassive_Priest_3exorcist_bykk(obj,obj,643020,75,0,60,sq_GetDirection(obj),totalDamage,lifeTime,hitTime,sizeRate,sub,0,0,0); break; } return true; } //狂乱锤击 function checkExecutableSkill_Repeatedsmash(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_REPEATEDSMASH); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_REPEATEDSMASH, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Repeatedsmash(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_Repeatedsmash(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_REPEATEDSMASHSTART); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/repeatedsmash/swingstart.ani"), 150, 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/repeatedsmash_swingstart.ani"), 150, 0); } else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/repeatedsmash_swingstart.ani"), 150, 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_REPEATEDSMASH, -1, 0, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_REPEATEDSMASH)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setChakraAttackInfo(obj); obj.getVar("repeatedsmashSet").setInt(0, 0); obj.startRapidInput(); local currentAni = obj.getCurrentAnimation(); local speedRate = 7000 / currentAni.getDelaySum(0, 0); local time = 15000 / speedRate; obj.getVar("repeatedsmashSet").setInt(2, time); obj.getVar("repeatedsmashSet").setInt(3, speedRate); obj.setTimeEvent(1, time, 1, false); sq_SetMyShake(obj, 2, 100); obj.sq_PlaySound("PR_RATK"); break; case 1: if(obj.getVar("repeatedsmashSet").getInt(0) > 0){ obj.sq_SetCurrentAnimation(PRANI_BYKK_REPEATEDSMASHUPGRADE); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/repeatedsmash/crashrepeat1.ani"), 150, 0); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/repeatedsmash/crashrepeat2.ani", 150, 0, 0); sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); } else obj.sq_SetCurrentAnimation(PRANI_BYKK_REPEATEDSMASH); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/repeatedsmash/swingrepeat.ani"), 150, 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/repeatedsmash_swingrepeat.ani"), 150, 0); } else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/repeatedsmash_swingrepeat.ani"), 150, 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_REPEATEDSMASH, -1, 0, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_REPEATEDSMASH)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setChakraAttackInfo(obj); sq_SetMyShake(obj, 2, 100); obj.sq_PlaySound("PR_RATK"); break; case 2: obj.sq_SetCurrentAnimation(PRANI_BYKK_REPEATEDSMASHFINAL); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/repeatedsmash/swingfinal.ani"), 150, 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/repeatedsmash_swingfinalc.ani"), 150, 0); } else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/repeatedsmash_swingfinalc.ani"), 150, 0); } } 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 = 7000 / currentAni.getDelaySum(0, 0); if(speedRate >= 130){ speedRate = 130; currentAni.setSpeedRate(130.0); } obj.getVar("repeatedsmashSetSpeed").setInt(0, speedRate); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_REPEATEDSMASH, -1, 1, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_REPEATEDSMASHFINAL)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setChakraAttackInfo(obj); obj.sq_PlaySound("PR_MUSSANG_FIN"); break; } } function onEndCurrentAni_Repeatedsmash(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.getVar("repeatedsmashSet").setInt(1, 1); obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_REPEATEDSMASH, STATE_PRIORITY_AUTO, true); break; case 1: local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_REPEATEDSMASH); local hitMax = sq_GetLevelData(obj, SKILL_BYKK_REPEATEDSMASH, 2, skillLevel); if(obj.getVar("repeatedsmashSet").getInt(0) > 0) hitMax = sq_GetLevelData(obj, SKILL_BYKK_REPEATEDSMASH, 3, skillLevel); obj.getVar("repeatedsmashSet").setInt(1, obj.getVar("repeatedsmashSet").getInt(1) + 1); print("hitcount = "+obj.getVar("repeatedsmashSet").getInt(1)); print("hitMax = "+hitMax); obj.sq_IntVectClear(); if(obj.getVar("repeatedsmashSet").getInt(1) >= hitMax) obj.sq_IntVectPush(2); else obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_REPEATEDSMASH, STATE_PRIORITY_AUTO, true); break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProc_Repeatedsmash(obj) { if(!obj) return; sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); } function onProcCon_Repeatedsmash(obj) { if(!obj) return; local subState = obj.getSkillSubState(); if(subState == 1){ sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(STATE_BYKK_REPEATEDSMASH, STATE_PRIORITY_AUTO, true); } if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT) obj.setTimeEvent(2, 1000, 1, true); } } function onKeyFrameFlag_Repeatedsmash(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 0: local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/repeatedsmash/charge.ani", -50, 1, 30); local pAni = pooledObj.getCurrentAnimation(); local speedRate = obj.getVar("repeatedsmashSetSpeed").getInt(0); pAni.setSpeedRate(speedRate.tofloat()); break; case 1: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_REPEATEDSMASH, -1, 5, 1.0); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_REPEATEDSMASH); local prob = sq_GetLevelData(obj, SKILL_BYKK_REPEATEDSMASH, 6, skillLevel); local level = sq_GetSkillLevel(obj, 174) + 20; local time = sq_GetLevelData(obj, SKILL_BYKK_REPEATEDSMASH, 8, skillLevel); local size = sq_GetLevelData(obj, SKILL_BYKK_REPEATEDSMASH, 4, skillLevel); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_REPEATEDSMASH, 6); createSkillPassive_Priest_3exorcist_bykk(obj,obj,643021,150,0,0,sq_GetDirection(obj),totalDamage,prob,level,time,size,sizeRate,0,0); break; } return true; } function onTimeEvent_Repeatedsmash(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: local rapidInput = obj.getRapidInputFrequency(); if(rapidInput > 2){ if(obj.getVar("repeatedsmashSet").getInt(0) == 0) obj.getVar("repeatedsmashSet").setInt(0, 1); local delay = obj.getVar("repeatedsmashSet").getInt(2); local speedRate = obj.getVar("repeatedsmashSet").getInt(3); obj.setTimeEvent(1, delay, 1, false); local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(speedRate.tofloat() * 2.0); } else{ local delay = obj.getVar("repeatedsmashSet").getInt(2); local speedRate = obj.getVar("repeatedsmashSet").getInt(3); obj.setTimeEvent(1, delay, 1, false); local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(speedRate.tofloat()); } break; case 2: sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); break; } } function onEndState_Repeatedsmash(obj, new_state) { if(!obj) return; } //疾空旋风破 function checkExecutableSkill_Giantswing(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_GIANTSWING); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_GIANTSWING, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Giantswing(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_Giantswing(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); print("subState = "+subState); obj.setSkillSubState(subState); obj.sq_StopMove(); switch(subState){ case 0: obj.sq_SetCurrentAnimation(PRANI_BYKK_GIANTSWINGREADY); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.startRapidInput(); obj.sq_PlaySound("PR_SPIN"); obj.sq_PlaySound("WIND_SPIN"); break; case 1: obj.sq_SetCurrentAnimation(PRANI_BYKK_GIANTSWING); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/giantswing/weaponloop.ani"), 0, 0); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/giantswing/dustloop1.ani"), 0, 0); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/giantswing/dustloop2.ani"), 0, 0); obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/giantswing/giantswing_talisman/sphereloop_01.ani"), 0, 0); local appendage = sq_AttractToMe(obj, 250, 100, 1000); obj.getVar("giantswingAp").setAppendage(0, appendage); 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/giantswing_weaponloopi.ani"), 0, 0); } else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/giantswing_weaponloopi.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 chargeLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON); local currentAni = obj.getCurrentAnimation(); local speedRate = 9000 / currentAni.getDelaySum(0, 0); if(speedRate >= 130) speedRate = 130; print("speedRate = "+speedRate); if(chargeLevel > 0){ speedRate = speedRate * (100 + sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 22, chargeLevel)) / 100; } local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(speedRate.tofloat()); local delay = currentAni.getDelaySum(false) / 2; obj.getVar("giantswingSet").setInt(0, delay); obj.getVar("giantswingSet").setInt(1, speedRate); obj.getVar("giantswingSet").setInt(2, 0); obj.getVar("giantswingSet").setInt(3, 0); obj.setTimeEvent(1, delay, 1, false); local time = (3000 / speedRate).tointeger(); if(time < 20) time = 30; obj.setTimeEvent(3, time, -1, true); break; case 2: obj.stopTimeEvent(2); obj.stopTimeEvent(3); obj.getVar("GiantswingAtk").setBool(1, true); obj.sq_SetCurrentAnimation(PRANI_BYKK_GIANTSWINGFINAL); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/giantswing/weaponfinal.ani"), 0, 0); sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/giantswing/finish.ani", 0, 0, 0); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/giantswing/dustfinal1.ani", 0, -1, -1); sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/giantswing/dustfinal2.ani", 0, -1, -1); sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); 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/giantswing_weaponfinali.ani"), 0, 0); } else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/giantswing_weaponfinali.ani"), 0, 0); } } local animation = obj.getCurrentAnimation(); sq_SetFrameDelayTime(animation, 6, 300); 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_GIANTSWING, -1, 1, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_GIANTSWINGFINAL)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setChakraAttackInfo(obj); obj.sq_PlaySound("PR_SPIN_FIN"); local appendage = obj.getVar("giantswingAp").getAppendage(0); if(appendage) appendage.setValid(false); break; } } function onEndCurrentAni_Giantswing(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GIANTSWING, -1, 0, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_GIANTSWING)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); setChakraAttackInfo(obj); obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_GIANTSWING, STATE_PRIORITY_AUTO, true); break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProc_Giantswing(obj) { if(!obj) return; sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); } function onProcCon_Giantswing(obj) { if(!obj) return; local subState = obj.getSkillSubState(); if(subState == 1){ sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(STATE_BYKK_GIANTSWING, STATE_PRIORITY_AUTO, true); } } } function onKeyFrameFlag_Giantswing(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: if(obj.isExistTimeEvent(2)) return; if(obj.getVar("giantswingSet").getInt(3) == 0){ obj.getVar("giantswingSet").setInt(3, obj.getVar("giantswingSet").getInt(3) + 1); break; } else obj.getVar("giantswingSet").setInt(3, obj.getVar("giantswingSet").getInt(3) + 1); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_GIANTSWING); local hitMax = sq_GetLevelData(obj, SKILL_BYKK_GIANTSWING, 2, skillLevel); if(obj.getVar("giantswingSet").getInt(2) > 0) hitMax = sq_GetLevelData(obj, SKILL_BYKK_GIANTSWING, 3, skillLevel); if(sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON) > 0) hitMax = hitMax + sq_GetIntData(obj, SKILL_BYKK_CHARGEWEAPON, 2); if(obj.getVar("giantswingSet").getInt(3) + 1 >= hitMax){ obj.setTimeEvent(2, 100, 1, false); } else obj.resetHitObjectList(); break; } return true; } function onTimeEvent_Giantswing(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: local rapidInput = obj.getRapidInputFrequency(); if(rapidInput > 2){ if(obj.getVar("giantswingSet").getInt(2) == 0) obj.getVar("giantswingSet").setInt(2, 1); local delay = obj.getVar("giantswingSet").getInt(0); local speedRate = obj.getVar("giantswingSet").getInt(1); obj.setTimeEvent(1, delay, 1, false); local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(speedRate.tofloat() * 2.0); } else{ local delay = obj.getVar("giantswingSet").getInt(0); local speedRate = obj.getVar("giantswingSet").getInt(1); obj.setTimeEvent(1, delay, 1, false); local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(speedRate.tofloat()); } break; case 2: obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(STATE_BYKK_GIANTSWING, STATE_PRIORITY_AUTO, true); break; case 3: if(obj.isMyControlObject()){ local speedRate = obj.getVar("giantswingSet").getInt(1); local xSpeed = 130 * speedRate / 100; local ySpeed = speedRate * 80 / 100; if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)) xSpeed = xSpeed; else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)) xSpeed = -xSpeed; else xSpeed = 0; if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) ySpeed = ySpeed; else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) ySpeed = -ySpeed; else ySpeed = 0; obj.sq_StartWrite(); obj.sq_WriteDword(xSpeed); obj.sq_WriteDword(ySpeed); sq_SendChangeSkillEffectPacket(obj, STATE_BYKK_GIANTSWING); } break; } } function onChangeSkillEffect_Giantswing(obj, skillIndex, reciveData) { if(!obj) return; local xSpeed = reciveData.readDword(); local ySpeed = reciveData.readDword(); sq_SetVelocity(obj, 0, xSpeed.tofloat()); sq_SetVelocity(obj, 1, ySpeed.tofloat()); } function onEndState_Giantswing(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_GIANTSWING){ local appendage = obj.getVar("giantswingAp").getAppendage(0); if(appendage) appendage.setValid(false); } } function onAttack_Giantswing(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return; if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) <= 0) return; if(obj.getVar("GiantswingAtk").getBool(1)){ obj.getVar("GiantswingAtk").setBool(1, false); 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_GIANTSWING, -1, 1, 1.0) * bonusRate / 100; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){ createSkillPassive_Priest_3exorcist_bykk(obj,damager,643001,0,0,sq_GetCenterZPos(boundingBox),sq_GetDirection(obj),totalDamage,1,1,0,0,0,0,0); } else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){ createSkillPassive_Priest_3exorcist_bykk(obj,damager,643001,0,0,sq_GetCenterZPos(boundingBox),sq_GetDirection(obj),totalDamage,0,1,0,0,0,0,0); if(sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT) > 0 && sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON) > 0){ setStageofhermitAppendage(obj); } } } }