//聖潔之光 function checkExecutableSkill_Holyflash(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HOLYFLASH); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_HOLYFLASH, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Holyflash(obj) { if (!obj) return false; return true; } function onSetState_Holyflash(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(ATPANI_BYKK_HOLYFLASH_BODY); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Holyflash(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_Holyflash(obj) { if(!obj) return; } function onKeyFrameFlag_Holyflash(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 101: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYFLASH, -1, 0, 1.0) + 100; local sizeRate = sq_GetIntData(obj, SKILL_BYKK_HOLYFLASH, 3); local moveX = sq_GetIntData(obj, SKILL_BYKK_HOLYFLASH, 5); // if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,47,1,94,obj.getDirection(),0,SKILL_BYKK_HOLYFLASH,1,totalDamage,sizeRate,moveX,0,0,0,0,0); break; } return true; } function onTimeEvent_Holyflash(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_Holyflash(obj, new_state) { if(!obj) return; } //治愈祈禱 function checkExecutableSkill_Prayerofheal(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PRAYEROFHEAL); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_PRAYEROFHEAL, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Prayerofheal(obj) { if (!obj) return false; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) return false; return true; } function onSetState_Prayerofheal(obj, state, datas, isResetTimer) { if(!obj) return;//126 local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); obj.sq_ZStop(); switch(subState){ case 0://normal obj.sq_SetCurrentAnimation(ATPANI_BYKK_PRAYEROFHEAL_BODY); obj.sq_PlaySound("R_PW_PRAYERHEAL");// //obj.sq_AddStateLayerAnimation(-1, obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atprayerofheal/groundrange_00.ani"), 0, 0); local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atprayerofheal/groundrange_00.ani"; local sizeRate = sq_GetIntData(obj, SKILL_BYKK_PRAYEROFHEAL, 1).tofloat() / 207.5; local pooledObj = createOnlyDrawObject_ATPriest_bykk(obj, aniPath, true, obj.getDirection(), sq_GetXPos(obj), sq_GetYPos(obj), 0, ENUM_DRAWLAYER_BOTTOM); local pAni = pooledObj.getCurrentAnimation(); pAni.setImageRateFromOriginal(sizeRate, sizeRate); pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); break; } 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(); obj.setTimeEvent(0, currentAni.getDelaySum(false) / 4 * 3, 1, false); } function onEndCurrentAni_Prayerofheal(obj) { if(!obj) return; obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); } function onProcCon_Prayerofheal(obj) { if(!obj) return; } function onKeyFrameFlag_Prayerofheal(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_Prayerofheal(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: local range = sq_GetIntData(obj, SKILL_BYKK_PRAYEROFHEAL, 1); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_PRAYEROFHEAL); local HP_heal = sq_GetLevelData(obj, SKILL_BYKK_PRAYEROFHEAL, 1, skillLevel); local apdPath = "character/demonicswordman/0_common/ap_prayerofheal.nut"; local objectManager = obj.getObjectManager(); local objectNumber = objectManager.getCollisionObjectNumber(); for (local i = 0; i < objectNumber; i++){ local object = objectManager.getCollisionObject(i); if (object && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) { local appendage = CNSquirrelAppendage.sq_AppendAppendage(object, obj, -1, false, apdPath, true); local change_appendage = appendage.sq_GetCNChangeHp("changehp"); if (!change_appendage) change_appendage = appendage.sq_AddCNChangeHp("changehp", object, obj, 0, HP_heal.tofloat(), 1000); appendage.sq_SetValidTime(1000); } } break; } } function onEndState_Prayerofheal(obj, new_state) { if(!obj) return; } //升空斬 function checkExecutableSkill_Risingslash(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_RISINGSLASH); if (isUse){ obj.sq_IntVectClear(); if(false) obj.sq_IntVectPush(1); else if(sq_GetSkillLevel(obj, SKILL_BYKK_CRUSADE) > 0) obj.sq_IntVectPush(3); else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(2); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_RISINGSLASH, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Risingslash(obj) { if (!obj) return false; return true; } function onSetState_Risingslash(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); obj.sq_ZStop(); switch(subState){ case 0://normal obj.sq_SetCurrentAnimation(ATPANI_BYKK_CRUSADERISINGSLASH_BODY); obj.sq_PlaySound("PW_RISING_SLASH"); break; case 1://FFF obj.sq_SetCurrentAnimation(ATPANI_BYKK_RISINGSLASH_BODY); obj.sq_PlaySound("PW_RISING_SLASH"); break; case 2: local ani = getCurrentAnimation_demonization(obj, "demonizationattack_basic_z_body", false); obj.setCurrentAnimation(ani); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_basic_z_eff01.ani"), 0, 0); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_basic_z_eff02.ani"), 0, 0); obj.sq_AddStateLayerAnimation(0,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_basic_z_eff03.ani"), 0, 0); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_basic_z_eff04.ani"), 0, 0); obj.sq_AddStateLayerAnimation(0,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_basic_z_eff05.ani"), 0, 0); obj.sq_PlaySound("R_PW_CUTINDASH_02"); obj.sq_PlaySound("CUTINDASH_SWISH"); break; case 3: obj.sq_SetCurrentAnimation(ATPANI_BYKK_CRUSADERISINGSLASH_BODY); obj.sq_PlaySound("PW_RISING_SLASH"); break; } 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_RISINGSLASH, -1, 1, 1.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_RISINGSLASH)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); sq_SetCurrentAttacknBackForce(attackInfo, 100); sq_SetCurrentAttacknUpForce(attackInfo, 600); if(obj.getDirection() == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, 100.0); else if(obj.getDirection() == ENUM_DIRECTION_LEFT) sq_SetVelocity(obj, 0, -100.0); } function onEndCurrentAni_Risingslash(obj) { if(!obj) return; obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); } function onProcCon_Risingslash(obj) { if(!obj) return; } function onKeyFrameFlag_Risingslash(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_Risingslash(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_Risingslash(obj, new_state) { if(!obj) return; } //净化 function checkExecutableSkill_Cure(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CURE); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_CURE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Cure(obj) { if (!obj) return false; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) return false; return true; } function onSetState_Cure(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(ATPANI_BYKK_CURE_CAST_BODY); break; case 1: obj.sq_SetCurrentAnimation(ATPANI_BYKK_CURE_START_BODY); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Cure(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_CURE, STATE_PRIORITY_AUTO, true); break; case 1: local range = sq_GetIntData(obj, SKILL_BYKK_CURE, 5); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CURE); local realeaseMax = sq_GetLevelData(obj, SKILL_BYKK_CURE, 0, skillLevel); local objectManager = obj.getObjectManager(); local objectNumber = objectManager.getCollisionObjectNumber(); for (local i = 0; i < objectNumber; i++){ local object = objectManager.getCollisionObject(i); if (object && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) { local activeObj = sq_GetCNRDObjectToActiveObject(object); local count = 0; for(local ui = 0; ui < 18; ui++){ if (sq_IsValidActiveStatus(activeObj, ui)){ sq_ReleaseActiveStatus(activeObj, ui); count = count + 1; if(count > realeaseMax) continue; } } } } obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Cure(obj) { if(!obj) return; } function onKeyFrameFlag_Cure(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_Cure(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_Cure(obj, new_state) { if(!obj) return; } //胜利之矛 function checkExecutableSkill_Spearofvictory(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SPEAROFVICTORY); if (isUse){ obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_SPEAROFVICTORY); obj.getVar("spv").setBool(0, false); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_SPEAROFVICTORY, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Spearofvictory(obj) { if (!obj) return false; return true; } function onSetState_Spearofvictory(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(ATPANI_BYKK_SPEAROFVICTORY_BODY_READY); break; case 1: obj.sq_SetCurrentAnimation(ATPANI_BYKK_SPEAROFVICTORY_BODY_CHARGELOOP); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atspearofvictory/spearnochargeloop_01.ani"), 0, -76); break; case 2: obj.sq_SetCurrentAnimation(ATPANI_BYKK_SPEAROFVICTORY_BODYSHOT_02); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Spearofvictory(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_SPEAROFVICTORY, STATE_PRIORITY_AUTO, true); break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Spearofvictory(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: local pAni = obj.getCurrentAnimation(); local chargeTime = sq_GetCurrentTime(pAni); if((chargeTime >= sq_GetIntData(obj, SKILL_BYKK_SPEAROFVICTORY, 0) || sq_GetSkillLevel(obj, SKILL_BYKK_LUCULENTUISANGEL) > 0) && obj.getVar("spv").getBool(0) == false){ obj.sq_PlaySound("WSPEAR_CREATE_BIG"); obj.getVar("spv").setBool(0, true); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atspearofvictory/speartchargeeff_01.ani", 0, 0, 76); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atspearofvictory/spearchargeokloop.ani"), 0, -76); } local bDownKey = obj.isDownSkillLastKey(); if(!bDownKey){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(STATE_BYKK_SPEAROFVICTORY, STATE_PRIORITY_AUTO, true); } break; } } function onKeyFrameFlag_Spearofvictory(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 101: local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atspearofvictory/spearstart_01.ani", 0, 0, 76); local pAni = pooledObj.getCurrentAnimation(); obj.setTimeEvent(0, pAni.getDelaySum(false), 1, false); obj.sq_PlaySound("PW_VICTORYSPEAR_01"); obj.sq_PlaySound("WSPEAR_CREATE"); break; case 102: obj.sq_PlaySound("VICTORYSPEAR"); break; case 103: if(obj.getVar("spv").getBool(0)) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atspearofvictory/shot_charge.ani", -40, 0, 145); else sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atspearofvictory/shot_normal.ani", -40, 0, 145); break; case 104: obj.sq_PlaySound("PW_VICTORYSPEAR_02"); obj.sq_PlaySound("SPEAR_THROW_BIG"); //`CreateSpear` 0 0 130 local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SPEAROFVICTORY, -1, 0, 1.0); local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SPEAROFVICTORY, -1, 2, 1.0); local holdTime = sq_GetIntData(obj, SKILL_BYKK_SPEAROFVICTORY, 2); local isCharge = 0; if(obj.getVar("spv").getBool(0) || sq_GetSkillLevel(obj, SKILL_BYKK_LUCULENTUISANGEL) > 0){holdTime = sq_GetIntData(obj, SKILL_BYKK_SPEAROFVICTORY, 3); isCharge = 1;} // if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,130,obj.getDirection(),1,SKILL_BYKK_SPEAROFVICTORY,0,power,power_exp,holdTime,isCharge,0,0,0,0); break; } return true; } function onTimeEvent_Spearofvictory(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atspearofvictory/spearnochargeloop_01.ani"), 0, -76); break; } } function onEndState_Spearofvictory(obj, new_state) { if(!obj) return; } //守护祝福 function checkExecutableSkill_Blessofprotection(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BLESSOFPROTECTION); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_BLESSOFPROTECTION, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Blessofprotection(obj) { if (!obj) return false; return true; } function onSetState_Blessofprotection(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(ATPANI_BYKK_BLESSOFPROTECTIONCAST_BODY); local castTime = sq_GetCastTime(obj, SKILL_BYKK_BLESSOFPROTECTION, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFPROTECTION)); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); local speedRate = delaySum.tofloat() / castTime.tofloat(); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); sq_StartDrawCastGauge(obj, castTime, true); break; case 1: sq_EndDrawCastGauge(obj); obj.sq_SetCurrentAnimation(ATPANI_BYKK_BLESSOFPROTECTIONSTART_BODY); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); break; } } function onEndCurrentAni_Blessofprotection(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_BLESSOFPROTECTION, STATE_PRIORITY_AUTO, true); break; case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Blessofprotection(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ } } function onKeyFrameFlag_Blessofprotection(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 101: obj.sq_PlaySound("PW_BLESSPROTECTION"); obj.sq_PlaySound("BLESSPROTECTION_CAST"); break; case 102: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atblessofprotection/start_sky.ani", 0, -1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atblessofprotection/start_front_4.ani", 0, 1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atblessofprotection/start_back_1.ani", 0, -1, 0); createOnlyDrawObject_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atblessofprotection/start_floor.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); if(!obj.isMyControlObject()) break; local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFPROTECTION); local range = sq_GetIntData(obj, SKILL_BYKK_BLESSOFPROTECTION, 0); local damageRate = sq_GetIntData(obj, SKILL_BYKK_BLESSOFPROTECTION, 1); local buffTime = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 0, skillLevel); local hpMax = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 6, skillLevel); local mpMax = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 7, skillLevel); local phDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 2, skillLevel); local mgDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 3, skillLevel); local phlDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 4, skillLevel); local mglDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 5, skillLevel); local now_mgAttack = sq_GetCharacterAttribute(0x2394);//1000;// now_mgAttack = now_mgAttack * (100 + sq_GetIntData(obj, 169, 102)) / 100; local addRate = now_mgAttack.tofloat() / sq_GetIntData(obj, SKILL_BYKK_BLESSOFCOURAGE, 1).tofloat(); if(addRate > 1){ hpMax = hpMax.tofloat() * (1.0 + addRate); mpMax = mpMax.tofloat() * (1.0 + addRate); phDefense = phDefense.tofloat() * (1.0 + addRate); mgDefense = mgDefense.tofloat() * (1.0 + addRate); } sq_BinaryStartWrite(); sq_BinaryWriteDword(1); sq_BinaryWriteDword(SKILL_BYKK_BLESSOFPROTECTION); sq_BinaryWriteDword(1); sq_BinaryWriteDword(skillLevel); sq_BinaryWriteDword(range); sq_BinaryWriteDword(buffTime); sq_BinaryWriteDword(hpMax.tointeger()); sq_BinaryWriteDword(mpMax.tointeger()); sq_BinaryWriteDword(phDefense.tointeger()); sq_BinaryWriteDword(mgDefense.tointeger()); sq_BinaryWriteDword(phlDefense); sq_BinaryWriteDword(mglDefense); sq_BinaryWriteDword(damageRate); sq_SendCreatePassiveObjectPacket(obj, PASSIVEOBJ_BYKK_ATPRIEST, 0, 0, 0, 0, obj.getDirection()); break; } return true; } function onTimeEvent_Blessofprotection(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: break; } } function onEndState_Blessofprotection(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_BLESSOFPROTECTION){ sq_EndDrawCastGauge(obj); } } function getImmuneTypeDamageRate_appendage_at_blessofprotection(appendage, damageRate, attacker) { local parentObj = appendage.getParent(); parentObj = sq_GetCNRDObjectToSQRCharacter(parentObj); local targetObj = appendage.getVar("source").get_obj_vector(0); if(targetObj && targetObj.getState() != STATE_DIE && !isSameObject(targetObj, parentObj)){ local new_damageRate = damageRate - appendage.getVar("custom").getInt(10); return new_damageRate; } else{ return damageRate; } } //圣光守护 function checkExecutableSkill_Holylight(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HOLYLIGHT); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_HOLYLIGHT, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Holylight(obj) { if (!obj) return false; return true; } function onSetState_Holylight(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); switch(subState){ case 0: if(sq_GetSkillLevel(obj, SKILL_BYKK_ARIA) > 0) obj.sq_SetCurrentAnimation(ATPANI_BYKK_HOLYLIGHTARIA_CAST_BODY); else obj.sq_SetCurrentAnimation(ATPANI_BYKK_HOLYLIGHT_CAST_BODY); local castTime = sq_GetCastTime(obj, SKILL_BYKK_HOLYLIGHT, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYLIGHT)); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); local speedRate = delaySum.tofloat() / castTime.tofloat(); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); sq_StartDrawCastGauge(obj, castTime, true); break; case 1: sq_EndDrawCastGauge(obj); if(sq_GetSkillLevel(obj, SKILL_BYKK_ARIA) > 0) obj.sq_SetCurrentAnimation(ATPANI_BYKK_HOLYLIGHTARIA_START_BODY); else obj.sq_SetCurrentAnimation(ATPANI_BYKK_HOLYLIGHT_START_BODY); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); break; } } function onEndCurrentAni_Holylight(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_HOLYLIGHT, STATE_PRIORITY_AUTO, true); break; case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Holylight(obj) { if(!obj) return; // local subState = obj.getSkillSubState(); // switch(subState){ // } } function onKeyFrameFlag_Holylight(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 101: obj.sq_PlaySound("PW_HOLYLIGHT"); obj.sq_PlaySound("CURE_CAST"); break; case 102: local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_HOLYLIGHT); local range = sq_GetIntData(obj, SKILL_BYKK_HOLYLIGHT, 0); local buffTime = sq_GetLevelData(obj, SKILL_BYKK_HOLYLIGHT, 0, skillLevel) + 720; local power_Chr = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYLIGHT, -1, 1, 1.0); local power_Pty = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYLIGHT, -1, 5, 1.0); local damageRate = sq_GetLevelData(obj, SKILL_BYKK_HOLYLIGHT, 2, skillLevel); local increaseRate = sq_GetIntData(obj, SKILL_BYKK_HOLYLIGHT, 4); local skillLevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFPROTECTION); local hpMax = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 6, skillLevel2) * (100 + increaseRate) / 100; local mpMax = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 7, skillLevel2) * (100 + increaseRate) / 100; local phDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 2, skillLevel2) * (100 + increaseRate) / 100; local mgDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 3, skillLevel2) * (100 + increaseRate) / 100; local phlDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 4, skillLevel2) * (100 + increaseRate) / 100; local mglDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 5, skillLevel2) * (100 + increaseRate) / 100; local objectManager = obj.getObjectManager(); local objectNumber = objectManager.getCollisionObjectNumber(); for (local i = 0; i < objectNumber; i++){ local object = objectManager.getCollisionObject(i); if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) { local activeObj = sq_GetCNRDObjectToActiveObject(object); if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_HOLYLIGHT)) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_HOLYLIGHT); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_HOLYLIGHT, true); if(buffTime > 0) AddAppendage.sq_SetValidTime(buffTime); AddAppendage.setBuffIconImage(44); AddAppendage.setEnableIsBuff(true); AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_HOLYLIGHT, skillLevel); CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, obj, true); AddAppendage.getVar("custom").setInt(10, damageRate); if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFPROTECTION)){ local ptcAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, APDPATH_BLESSOFPROTECTION); local change_appendage = ptcAppendage.sq_getChangeStatus("AT_Blessofprotection"); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_HP_MAX, false, (hpMax).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_MP_MAX, false, (mpMax).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, false, (phDefense).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, false, (mgDefense).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_DEFENSE, false, (phlDefense).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_DEFENSE, false, (mglDefense).tofloat()); } } local group = sq_GetGroup(activeObj); local uniqueId = sq_GetUniqueId(activeObj); local power = power_Pty; if(isSameObject(obj, activeObj)) power = power_Chr; // if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,activeObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,sq_GetHeightObject(activeObj) / 2,obj.getDirection(),1,SKILL_BYKK_HOLYLIGHT,0,power,buffTime,group,uniqueId,0,0,0,0); } } break; } return true; } function onTimeEvent_Holylight(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: break; } } function onEndState_Holylight(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_HOLYLIGHT){ sq_EndDrawCastGauge(obj); } } function getImmuneTypeDamageRate_appendage_at_holylight(appendage, damageRate, attacker) { local new_damageRate = damageRate - appendage.getVar("custom").getInt(10) / 10; return new_damageRate; } function onDamageParent_appendage_at_holylight(appendage ,attacker, boundingBox, isStuck) { if(!appendage) return; local parentObj = appendage.getParent(); parentObj = sq_GetCNRDObjectToSQRCharacter(parentObj); if (!parentObj) { appendage.setValid(false); return; } local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atholylight/barrier/hiteffect.ani"; local pooledObj = createOnlyDrawObject_ATPriest_bykk(parentObj,aniPath,true,attacker.getDirection(),sq_GetXPos(parentObj),sq_GetYPos(parentObj),sq_GetZPos(parentObj) + sq_GetHeightObject(parentObj) / 2,ENUM_DRAWLAYER_NORMAL); sq_moveWithParent(parentObj, pooledObj); } //洗礼之光 function checkExecutableSkill_Lightofhaptism(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_LIGHTOFHAPTISM); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_LIGHTOFHAPTISM, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Lightofhaptism(obj) { if (!obj) return false; return true; } function onSetState_Lightofhaptism(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(ATPANI_BYKK_ATLIGHTOFHAPTISM_CASTING_BODY); break; case 1: obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATLIGHTOFHAPTISM_SHOOT_BODY); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Lightofhaptism(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_LIGHTOFHAPTISM, STATE_PRIORITY_AUTO, true); break; case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Lightofhaptism(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ } } function onKeyFrameFlag_Lightofhaptism(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LIGHTOFHAPTISM, SKILL_BYKK_LIGHTOFHAPTISM, 0, 1.0); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_LIGHTOFHAPTISM, 0); // if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,250,0,0,obj.getDirection(),1,SKILL_BYKK_LIGHTOFHAPTISM,0,power,sizeRate,0,0,0,0,0,0); break; } return true; } function onTimeEvent_Lightofhaptism(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: break; } } function onEndState_Lightofhaptism(obj, new_state) { if(!obj) return; } //勇气祝福 function checkExecutableSkill_Blessofcourage(obj) { if (!obj) return false; if(obj.getVar("canUseSkill").getBool(0)) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BLESSOFCOURAGE); if (isUse){ if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_BLESSOFCOURAGE)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_BLESSOFCOURAGE); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_BLESSOFCOURAGE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Blessofcourage(obj) { if (!obj) return false; if(obj.getVar("canUseSkill").getBool(0)) return false; return true; } function onSetState_Blessofcourage(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(ATPANI_BYKK_BLESSOFCOURAGECAST_BODY); //if(obj.isMyControlObject()){ // obj.getVar("Save_mgAttack").setInt(10, now_mgAttack); //} break; case 1: obj.sq_SetCurrentAnimation(ATPANI_BYKK_BLESSOFCOURAGESTART_BODY); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atblessofcourage/starta_effect_front_d1.ani", 0, 0, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atblessofcourage/startb_effect_1.ani", 0, 0, 0); local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atblessofcourage/starta_effect_back_floor.ani"; local aniPath2 = "character/swordman/effect/animation/1_atpriest_bykk/atblessofcourage/starta_effect_back_glow.ani"; createOnlyDrawObject_ATPriest_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); createOnlyDrawObject_ATPriest_bykk(obj,aniPath2,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Blessofcourage(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_BLESSOFCOURAGE, STATE_PRIORITY_AUTO, true); break; case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Blessofcourage(obj) { if(!obj) return; // local subState = obj.getSkillSubState(); // switch(subState){ // } } function onKeyFrameFlag_Blessofcourage(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 101: obj.sq_PlaySound("PW_BLESSCOURAGE"); obj.sq_PlaySound("DAWN_BLESS_CAST"); break; case 102: local objectManager = obj.getObjectManager(); local objectNumber = objectManager.getCollisionObjectNumber(); local count = 0; for (local i = 0; i < objectNumber; i++){ local object = objectManager.getCollisionObject(i); if(object && !obj.isEnemy(object) && object.isObjectType(OBJECTTYPE_CHARACTER)){ local sqrChr = sq_GetCNRDObjectToSQRCharacter(object); if(sq_getJob(sqrChr) == ENUM_CHARACTERJOB_PRIEST && sq_getGrowType(sqrChr) == GROW_TYPE_CRUSADER) count = count + 1; } } print("count = "+count); if(count > 0){ obj.getVar("canUseSkill").setBool(0, true); return; } if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/priest/1crusader_bykk/ap_gloriousbless.nut")) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/priest/1crusader_bykk/ap_gloriousbless.nut"); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFVICTORIA)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_CRUXOFVICTORIA); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFCOURAGE); local range = sq_GetIntData(obj, SKILL_BYKK_BLESSOFCOURAGE, 0); local buffTime = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFCOURAGE, 0, skillLevel); local phAttack = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFCOURAGE, 1, skillLevel); local mgAttack = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFCOURAGE, 2, skillLevel); local adtAttack = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFCOURAGE, 3, skillLevel); local phlAttack = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFCOURAGE, 4, skillLevel); local mglAttack = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFCOURAGE, 5, skillLevel); local stuckRate = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFCOURAGE, 6, skillLevel); //local now_mgAttack = obj.getVar("Save_mgAttack").getInt(10); local now_mgAttack = obj.getVar("mgAttackSave").getInt(0); print("now_mgAttack = "+now_mgAttack); local addRate = now_mgAttack.tofloat() / sq_GetIntData(obj, SKILL_BYKK_BLESSOFCOURAGE, 1).tofloat(); if(addRate > 1){ phAttack = phAttack.tofloat() * (1.0 + addRate); mgAttack = mgAttack.tofloat() * (1.0 + addRate); adtAttack = adtAttack.tofloat() * (1.0 + addRate); phlAttack = phlAttack.tofloat() * (1.0 + addRate); mglAttack = mglAttack.tofloat() * (1.0 + addRate); } // print("addRate = "+addRate); sq_BinaryStartWrite(); sq_BinaryWriteDword(1); sq_BinaryWriteDword(SKILL_BYKK_BLESSOFCOURAGE); sq_BinaryWriteDword(1); sq_BinaryWriteDword(skillLevel); sq_BinaryWriteDword(range); sq_BinaryWriteDword(buffTime); sq_BinaryWriteDword(phAttack.tointeger()); sq_BinaryWriteDword(mgAttack.tointeger()); sq_BinaryWriteDword(adtAttack.tointeger()); sq_BinaryWriteDword(phlAttack.tointeger()); sq_BinaryWriteDword(mglAttack.tointeger()); sq_BinaryWriteDword(stuckRate); sq_SendCreatePassiveObjectPacket(obj, PASSIVEOBJ_BYKK_ATPRIEST, 0, 0, 0, 0, obj.getDirection()); setSkillBonusBate_Crusader_bykk(obj); break; case 103: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atblessofcourage/cast_effect_1.ani", 0, 1, 0); break; } return true; } function onTimeEvent_Blessofcourage(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: break; } } function onEndState_Blessofcourage(obj, new_state) { if(!obj) return; } function onEnd_appendage_at_blessofcourage(appendage) { if(!appendage) return; local parentObj = appendage.getParent(); if(!parentObj || parentObj.getState() == STATE_DIE){ appendage.setValid(false); return; } local sqrChr = sq_GetCNRDObjectToSQRCharacter(parentObj); if(sq_getJob(sqrChr) == ENUM_CHARACTERJOB_AT_MAGE && sq_getGrowType(sqrChr) == 1) setSkillBonusBate_Crusader_bykk(sqrChr); } //圣光烬盾 function checkExecutableSkill_Saintflash(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SAINTFLASH); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_SAINTFLASH, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Saintflash(obj) { if (!obj) return false; return true; } function onSetState_Saintflash(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(ATPANI_BYKK_SAINTFLASH_CAST_BODY); local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SAINTFLASH, -1, 4, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_SAINTWALLCAST)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); break; case 1: obj.sq_SetCurrentAnimation(ATPANI_BYKK_SAINTFLASH_SHOOT_BODY); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Saintflash(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_SAINTFLASH, STATE_PRIORITY_AUTO, true); break; case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Saintflash(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ } } function onKeyFrameFlag_Saintflash(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 101: obj.sq_PlaySound("R_PW_SAINTWALL_01"); obj.sq_PlaySound("SAINTWALL"); sq_SetMyShake(obj, 5, 200); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_SAINTFLASH, 0); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atsaintwall/saintwall_ready_creatshield.ani", 60, 0, 0); local currentAni = pooledObj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); break; case 102: obj.sq_PlaySound("FINALTEMPEST_MOVE_02"); obj.sq_PlaySound("R_PW_SAINTWALL_02"); local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SAINTFLASH, -1, 4, 1.0); local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SAINTFLASH, -1, 0, 1.0); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_SAINTFLASH, 0); // if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,60,0,0,obj.getDirection(),1,SKILL_BYKK_SAINTFLASH,0,power,power_exp,sizeRate,0,0,0,0,0); break; } return true; } function onTimeEvent_Saintflash(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: break; } } function onEndState_Saintflash(obj, new_state) { if(!obj) return; } //勇气圣歌 function checkExecutableSkill_Ariaofcourage(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_ARIAOFCOURAGE); if (isUse){ obj.getVar("hitCount").setInt(10, 0); obj.getVar("Ariaofcourage_Tar").clear_obj_vector(); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFCOURAGE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Ariaofcourage(obj) { if (!obj) return false; return true; } function onSetState_Ariaofcourage(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(ATPANI_BYKK_ARIAOFCOURAGESTART_BODY); obj.sq_PlaySound("R_PW_ARIACOURAGE"); obj.sq_PlaySound("ARIACOURAGE_CAST"); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atariaofcourage/ora/orastartfront_1.ani"), 0, 0); obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atariaofcourage/ora/orastartback_1.ani"), 0, 0); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_ARIAOFCOURAGE); local damageRate = sq_GetLevelData(obj, SKILL_BYKK_ARIAOFCOURAGE, 1, skillLevel); local allTolerance = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 9); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_ARIAOFCOURAGE, true); AddAppendage.getVar("custom").setInt(10, damageRate); local change_appendage = AddAppendage.sq_getChangeStatus("AT_Ariaofcourage"); if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Ariaofcourage",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_ACTIVESTATUS_TOLERANCE_ALL, false, (allTolerance).tofloat()); } break; case 1: obj.sq_SetCurrentAnimation(ATPANI_BYKK_ARIAOFCOURAGELOOP_BODY); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atariaofcourage/ora/oraloopfront_5.ani"), 0, 0); obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atariaofcourage/ora/oraloopback_1.ani"), 0, 0); //-270 -70 -4 540 140 300 local skill = sq_GetSkill(obj, SKILL_BYKK_ARIA); if(!skill.isSealFunction()){ local currentAni = obj.getCurrentAnimation(); sq_AddAttackBox(currentAni,-270, -70, -4, 540, 140, 300); } break; case 2: obj.stopSound(2001); obj.stopTimeEvent(2); obj.sq_SetCurrentAnimation(ATPANI_BYKK_ARIAOFCOURAGEEND_BODY); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atariaofcourage/ora/oraendfront_6.ani"), 0, 0); obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atariaofcourage/ora/oraendback_1.ani"), 0, 0); obj.sq_PlaySound("ARIACOURAGE_END"); local pooledObj = obj.getVar("Ariaofcourage_eff").get_obj_vector(0); local pooledObj2 = obj.getVar("Ariaofcourage_eff").get_obj_vector(1); if(pooledObj) pooledObj.setValid(false); if(pooledObj2) pooledObj2.setValid(false); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/ora/oraendfront_6.ani", 0, 1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/ora/oraendback_1.ani", 0, -1, 0); local floorObj = obj.getVar("ARIAOFCOURAGE_FLOOR").get_obj_vector(0); local effectObj = obj.getVar("ARIAOFCOURAGE_EFFECT").get_obj_vector(0); local musicObj = obj.getVar("ARIAOFCOURAGE_MUSIC").get_obj_vector(0); if(floorObj){ local colObj = sq_GetCNRDObjectToCollisionObject(floorObj); colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); } if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); } if(musicObj){ local colObj = sq_GetCNRDObjectToCollisionObject(musicObj); colObj.setValid(false); } break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Ariaofcourage(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: local isStone = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 13); if(isStone > 0) {//stone local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ARIAOFCOURAGE, -1, 0, 1.0); local hitTime = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 5); local hitMax = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 6); local range = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 7); if(sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL) > 0) range = range * (1000 + sq_GetLevelData(obj, SKILL_BYKK_BLESSOFRAPHAEL, 5, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL))) / 1000; if(isStone > 100) hitTime = hitTime / 2; print("range = "+range); local sizeRate = range * 100 / 275; local lifeTime = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 0); local increaseRate = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 8); local buffTime = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 12); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFSHAPIEL)) buffTime = buffTime + sq_GetLevelData(obj, SKILL_BYKK_CRUXOFSHAPIEL, 3, sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL)); // if(obj.isMyControlObject()){ createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFCOURAGE,4,sizeRate,power,hitTime,hitMax,lifeTime,range,increaseRate,buffTime); createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFCOURAGE,5,sizeRate,lifeTime,0,0,0,0,0,0); createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFCOURAGE,6,sizeRate,lifeTime,0,0,0,0,0,0); // } obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } local hitTime = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 5); local skill = sq_GetSkill(obj, SKILL_BYKK_ARIA); if(!skill.isSealFunction()){ local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ARIAOFCOURAGE, -1, 0, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_ARIAOFCOURAGEATTACK)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); obj.setTimeEvent(1, hitTime, 1, false); } else{ local lifeTime = hitTime * sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 6); obj.setTimeEvent(4, lifeTime, 1, false); } obj.setTimeEvent(2,20,-1,false); obj.setTimeEvent(3,hitTime,-1,true); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/buffeffect/buffloop_front.ani", 0, 0, 67); local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/buffeffect/buffloop_back.ani", 0, -1, 67); sq_moveWithParent(obj, pooledObj); sq_moveWithParent(obj, pooledObj2); obj.getVar("Ariaofcourage_eff").clear_obj_vector(); obj.getVar("Ariaofcourage_eff").push_obj_vector(pooledObj); obj.getVar("Ariaofcourage_eff").push_obj_vector(pooledObj2); local range = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 7); if(sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL) > 0) range = range * (1000 + sq_GetLevelData(obj, SKILL_BYKK_BLESSOFRAPHAEL, 5, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL))) / 1000; local sizeRate = range * 100 / 275; // if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFCOURAGE,3,sizeRate,0,0,0,0,0,0,0); obj.sq_PlaySound("ARIACOURAGE", 2001); obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFCOURAGE, STATE_PRIORITY_AUTO, true); break; case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFCOURAGE, STATE_PRIORITY_AUTO, true); break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Ariaofcourage(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 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_ARIAOFCOURAGE, STATE_PRIORITY_AUTO, true); } sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); if(sq_GetSkillLevel(obj, SKILL_BYKK_LIGHTOFHAPTISM) > 0 && !sq_GetSkill(obj, SKILL_BYKK_LIGHTOFHAPTISM).isInCoolTime()){ obj.setSkillCommandEnable(SKILL_BYKK_LIGHTOFHAPTISM,true); local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_LIGHTOFHAPTISM); if(b_useskill != -1){ obj.startSkillCoolTime(SKILL_BYKK_LIGHTOFHAPTISM, sq_GetSkillLevel(obj, SKILL_BYKK_LIGHTOFHAPTISM), -1); local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LIGHTOFHAPTISM, SKILL_BYKK_LIGHTOFHAPTISM, 0, 1.0); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_LIGHTOFHAPTISM, 0); // if(obj.isMyControlObject()){ local target = sq_FindTarget(obj, 0, 500, 500, 500); if(target) createSkillPassive_ATPriest_bykk(obj,target,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_LIGHTOFHAPTISM,0,power,sizeRate,0,0,0,0,0,0); else createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,250,0,0,obj.getDirection(),1,SKILL_BYKK_LIGHTOFHAPTISM,0,power,sizeRate,0,0,0,0,0,0); // } } } if(sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFANGEL) > 0 && !sq_GetSkill(obj, SKILL_BYKK_BLESSOFANGEL).isInCoolTime()){ obj.setSkillCommandEnable(SKILL_BYKK_BLESSOFANGEL,true); local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_BLESSOFANGEL); if(b_useskill != -1){ obj.startSkillCoolTime(SKILL_BYKK_BLESSOFANGEL, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFANGEL), -1); local range = sq_GetIntData(obj, SKILL_BYKK_BLESSOFANGEL, 1); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFANGEL); local buffTime = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 0, skillLevel); obj.sq_AddSkillLoad(SKILL_BYKK_BLESSOFANGEL, 111, 1, buffTime); local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_BLESSOFANGEL); if(loadSlot) loadSlot.setStartCool(); local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 2, skillLevel); local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 3, skillLevel); local castSpeed = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 4, skillLevel); local power_Chr = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLESSOFANGEL, -1, 1, 1.0); local power_Pty = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLESSOFANGEL, -1, 5, 1.0); local objectManager = obj.getObjectManager(); local objectNumber = objectManager.getCollisionObjectNumber(); for (local i = 0; i < objectNumber; i++){ local object = objectManager.getCollisionObject(i); if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) { local activeObj = sq_GetCNRDObjectToActiveObject(object); if(!obj.getVar("Blessofangel_sqr").is_obj_vector(activeObj)) obj.getVar("Blessofangel_sqr").push_obj_vector(activeObj); if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFANGEL)){ CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_BLESSOFANGEL); local effectObj = activeObj.getVar("Blessofangel_eff").get_obj_vector(0); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); colObj.setValid(false); } } local power = power_Pty; if(isSameObject(obj, activeObj)) power = power_Chr; local group = sq_GetGroup(activeObj); local uniqueId = sq_GetUniqueId(activeObj); // if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,activeObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,sq_GetHeightObject(activeObj) + 30,obj.getDirection(),1,SKILL_BYKK_BLESSOFANGEL,1,power,buffTime,group,uniqueId,0,0,0,0); if(obj.getVar("Blessofangel_Bool").getBool(0) == false) obj.getVar("Blessofangel_Bool").setBool(0, true); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_BLESSOFANGEL, true); AddAppendage.setBuffIconImage(131); AddAppendage.sq_SetValidTime(buffTime); AddAppendage.getVar("tar").clear_obj_vector(); AddAppendage.getVar("tar").push_obj_vector(obj); local change_appendage = AddAppendage.sq_getChangeStatus("AT_Blessofangel"); if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Blessofangel",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_CAST_SPEED, false, (castSpeed).tofloat()); } } } } } if(sq_GetSkillLevel(obj, SKILL_BYKK_PROTECTIONOFURIEL) > 0 && !sq_GetSkill(obj, SKILL_BYKK_PROTECTIONOFURIEL).isInCoolTime()){ obj.setSkillCommandEnable(SKILL_BYKK_PROTECTIONOFURIEL,true); local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_PROTECTIONOFURIEL); if(b_useskill != -1){ obj.startSkillCoolTime(SKILL_BYKK_PROTECTIONOFURIEL, sq_GetSkillLevel(obj, SKILL_BYKK_PROTECTIONOFURIEL), -1); local lifeTime = sq_GetIntData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 1); local range = sq_GetIntData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 4); local hitTime = sq_GetIntData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 2); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_PROTECTIONOFURIEL); local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 2, skillLevel); local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 3, skillLevel); local castSpeed = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 4, skillLevel); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFSHAPIEL)){ local addRate = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFSHAPIEL, 5, sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL)); attackSpeed = attackSpeed + addRate; moveSpeed = moveSpeed + addRate; castSpeed = castSpeed + addRate; } local damageRate = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 5, skillLevel) / 10; local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PROTECTIONOFURIEL, -1, 0, 1.0); // if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_PROTECTIONOFURIEL,1,power,lifeTime,hitTime,range,attackSpeed,moveSpeed,castSpeed,damageRate); } } if(sq_GetSkillLevel(obj, SKILL_BYKK_HOLYLIGHT) > 0 && !sq_GetSkill(obj, SKILL_BYKK_HOLYLIGHT).isInCoolTime()){ obj.setSkillCommandEnable(SKILL_BYKK_HOLYLIGHT,true); local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_HOLYLIGHT); if(b_useskill != -1){ local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_HOLYLIGHT); obj.startSkillCoolTime(SKILL_BYKK_HOLYLIGHT, skillLevel, -1); local range = sq_GetIntData(obj, SKILL_BYKK_HOLYLIGHT, 0); local buffTime = sq_GetLevelData(obj, SKILL_BYKK_HOLYLIGHT, 0, skillLevel) + 720; local power_Chr = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYLIGHT, -1, 1, 1.0); local power_Pty = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYLIGHT, -1, 5, 1.0); local damageRate = sq_GetLevelData(obj, SKILL_BYKK_HOLYLIGHT, 2, skillLevel); local increaseRate = sq_GetIntData(obj, SKILL_BYKK_HOLYLIGHT, 4); local skillLevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFPROTECTION); local hpMax = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 6, skillLevel2) * (100 + increaseRate) / 100; local mpMax = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 7, skillLevel2) * (100 + increaseRate) / 100; local phDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 2, skillLevel2) * (100 + increaseRate) / 100; local mgDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 3, skillLevel2) * (100 + increaseRate) / 100; local phlDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 4, skillLevel2) * (100 + increaseRate) / 100; local mglDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 5, skillLevel2) * (100 + increaseRate) / 100; local objectManager = obj.getObjectManager(); local objectNumber = objectManager.getCollisionObjectNumber(); for (local i = 0; i < objectNumber; i++){ local object = objectManager.getCollisionObject(i); if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) { local activeObj = sq_GetCNRDObjectToActiveObject(object); if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_HOLYLIGHT)) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_HOLYLIGHT); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_HOLYLIGHT, true); if(buffTime > 0) AddAppendage.sq_SetValidTime(buffTime); AddAppendage.setBuffIconImage(44); AddAppendage.setEnableIsBuff(true); AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_HOLYLIGHT, skillLevel); CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, obj, true); AddAppendage.getVar("custom").setInt(10, damageRate); if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFPROTECTION)){ local ptcAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, APDPATH_BLESSOFPROTECTION); local change_appendage = ptcAppendage.sq_getChangeStatus("AT_Blessofprotection"); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_HP_MAX, false, (hpMax).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_MP_MAX, false, (mpMax).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, false, (phDefense).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, false, (mgDefense).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_DEFENSE, false, (phlDefense).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_DEFENSE, false, (mglDefense).tofloat()); } } local group = sq_GetGroup(activeObj); local uniqueId = sq_GetUniqueId(activeObj); local power = power_Pty; if(isSameObject(obj, activeObj)) power = power_Chr; // if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,activeObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,sq_GetHeightObject(activeObj) / 2,obj.getDirection(),1,SKILL_BYKK_HOLYLIGHT,0,power,buffTime,group,uniqueId,0,0,0,0); } } } } if(sq_GetSkillLevel(obj, SKILL_BYKK_EDIFICATION) > 0 && !sq_GetSkill(obj, SKILL_BYKK_EDIFICATION).isInCoolTime()){ obj.setSkillCommandEnable(SKILL_BYKK_EDIFICATION,true); local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_EDIFICATION); if(b_useskill != -1){ local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_EDIFICATION); obj.startSkillCoolTime(SKILL_BYKK_HOLYLIGHT, skillLevel, -1); local buffTime = sq_GetLevelData(obj, SKILL_BYKK_EDIFICATION, 0, skillLevel); local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_EDIFICATION, 1, skillLevel); local objectManager = obj.getObjectManager(); local objectNumber = objectManager.getCollisionObjectNumber(); for (local i = 0; i < objectNumber; i++){ local object = objectManager.getCollisionObject(i); if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object)) { local activeObj = sq_GetCNRDObjectToActiveObject(object); if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_EDIFICATION)) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_EDIFICATION); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_EDIFICATION, true); AddAppendage.sq_SetValidTime(buffTime); AddAppendage.setBuffIconImage(128); AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_EDIFICATION, skillLevel); CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, obj, true); AddAppendage.getVar("custom").setInt(10, moveSpeed); local change_appendage = AddAppendage.sq_getChangeStatus("AT_Edification"); if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Edification",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed).tofloat()); } } } } } if(sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL) > 0 && !sq_GetSkill(obj, SKILL_BYKK_CRUXOFSHAPIEL).isInCoolTime()){ obj.setSkillCommandEnable(SKILL_BYKK_CRUXOFSHAPIEL,true); local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_CRUXOFSHAPIEL); if(b_useskill != -1){ local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL); obj.startSkillCoolTime(SKILL_BYKK_CRUXOFSHAPIEL, skillLevel, -1); obj.getVar("cruxofshapiel_obj").clear_obj_vector(); obj.getVar("cruxofshapiel_bool").setBool(0, false); local power_fall = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CRUXOFSHAPIEL, -1, 0, 1.0); local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CRUXOFSHAPIEL, -1, 1, 1.0); local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CRUXOFSHAPIEL, -1, 2, 1.0); local hitTime = sq_GetIntData(obj, SKILL_BYKK_CRUXOFSHAPIEL, 0); // if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,200,0,0,obj.getDirection(),1,SKILL_BYKK_CRUXOFSHAPIEL,1,power_fall,power,power_exp,hitTime,0,0,0,0); local buffTime = hitTime * 21 + 2080; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFSHAPIEL)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_CRUXOFSHAPIEL); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_CRUXOFSHAPIEL, true); AddAppendage.sq_SetValidTime(buffTime); AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_CRUXOFSHAPIEL, sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL)); CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); } } if(obj.getVar("cruxofshapiel_bool").getBool(0)){ obj.setSkillCommandEnable(SKILL_BYKK_CRUXOFSHAPIEL,true); local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_CRUXOFSHAPIEL); if(b_useskill != -1){ obj.getVar("cruxofshapiel_bool").setBool(0, false); local size = obj.getVar("cruxofshapiel_obj").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local aObj = obj.getVar("cruxofshapiel_obj").get_obj_vector(i); if(aObj){ local colObj = sq_GetCNRDObjectToCollisionObject(aObj); if(colObj.getVar("subtype").getInt(0) == 1) colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); else colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); } } } } } break; } } function onKeyFrameFlag_Ariaofcourage(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 103: if(sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 13) > 0) break; //stone local range = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 7); if(sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL) > 0) range = range * (1000 + sq_GetLevelData(obj, SKILL_BYKK_BLESSOFRAPHAEL, 5, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL))) / 1000; local sizeRate = range * 100 / 275; // if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFCOURAGE,1,sizeRate,0,0,0,0,0,0,0); // if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFCOURAGE,2,sizeRate,0,0,0,0,0,0,0); break; case 106: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/ora/orastartfront_1.ani", 0, 1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/ora/orastartback_1.ani", 0, -1, 0); break; } return true; } function onTimeEvent_Ariaofcourage(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: local inputConut = obj.getRapidInputFrequency(); inputConut = inputConut.tointeger(); local inputMax = 2; local gapByInputMin = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 5) / 2; local gapByInputMax = gapByInputMin * 2; local hitMax = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 6); if(obj.getVar("hitCount").getInt(10) + 1 >= hitMax){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFCOURAGE, STATE_PRIORITY_AUTO, true); break; } else obj.getVar("hitCount").setInt(10, obj.getVar("hitCount").getInt(10) + 1); if(inputConut >= inputMax) obj.setTimeEvent(1, gapByInputMin, 1, false); else obj.setTimeEvent(1, gapByInputMax, 1, false); obj.resetHitObjectList(); break; case 2: local xpos = sq_GetXPos(obj), ypos = sq_GetYPos(obj); if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(xpos,ypos - 1)) sq_setCurrentAxisPos(obj, 1, ypos - 2); if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(xpos - 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 2); return; } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(xpos + 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 2); return; } } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(xpos,ypos + 1)) sq_setCurrentAxisPos(obj, 1, ypos + 2); if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(xpos - 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 2); return; } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(xpos + 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 2); return; } } if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(xpos - 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 2); return; } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(xpos + 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 2); return; } break; case 3: local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_ARIAOFCOURAGE); local increaseRate = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 8); local buffTime = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 12); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFSHAPIEL)) buffTime = buffTime + sq_GetLevelData(obj, SKILL_BYKK_CRUXOFSHAPIEL, 3, sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL)); local range = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 7); if(sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL) > 0) range = range * (1000 + sq_GetLevelData(obj, SKILL_BYKK_BLESSOFRAPHAEL, 5, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL))) / 1000; local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ARIAOFCOURAGE, -1, 0, 1.0) / 2; local skill = sq_GetSkill(obj, SKILL_BYKK_ARIAOFCOURAGE); local isSeal = skill.isSealFunction(); local objectManager = obj.getObjectManager(); local objectNumber = objectManager.getCollisionObjectNumber(); for (local i = 0; i < objectNumber; i++){ local object = objectManager.getCollisionObject(i); if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) { local activeObj = sq_GetCNRDObjectToActiveObject(object); if(!obj.getVar("Ariaofcourage_Tar").is_obj_vector(activeObj)) obj.getVar("Ariaofcourage_Tar").push_obj_vector(activeObj); if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_ARIAOFCOURAGEBUFF)){ CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_ARIAOFCOURAGEBUFF); } local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_ARIAOFCOURAGEBUFF, true); if(!isSeal){ local change2_appendage = AddAppendage.sq_GetCNChangeHp("changehp"); if (!change2_appendage) change2_appendage = AddAppendage.sq_AddCNChangeHp("changehp", activeObj, obj, 0, power.tofloat(), 1000); AddAppendage.sq_SetValidTime(buffTime); AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_ARIAOFCOURAGE, skillLevel); CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, obj, true); } AddAppendage.getVar("custom").setInt(16, buffTime); AddAppendage.getVar("custom").setInt(17, range); AddAppendage.getVar("bool").setBool(0, true); if(!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFCOURAGE)) continue; local AddAppendage2 = CNSquirrelAppendage.sq_GetAppendage(activeObj, APDPATH_BLESSOFCOURAGE); local phAttack = AddAppendage2.getVar("custom").getInt(10); local mgAttack = AddAppendage2.getVar("custom").getInt(11); local adtAttack = AddAppendage2.getVar("custom").getInt(12); local phlAttack = AddAppendage2.getVar("custom").getInt(13); local mglAttack = AddAppendage2.getVar("custom").getInt(14); local stuckRate = AddAppendage2.getVar("custom").getInt(15); // print("phAttack = "+phAttack+"; mgAttack ="+mgAttack+"; adtAttack ="+adtAttack+"; phlAttack ="+phlAttack+"; mglAttack ="+mglAttack+"; stuckRate ="+stuckRate); local change_appendage = AddAppendage.sq_getChangeStatus("AT_AriaofcourageBuff"); if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_AriaofcourageBuff",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, false, (phAttack * increaseRate / 100).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, false, (mgAttack * increaseRate / 100).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_PHYSICAL_GENUINE_ATTACK, false, (adtAttack * increaseRate / 100).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_MAGICAL_GENUINE_ATTACK, false, (adtAttack * increaseRate / 100).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, false, (phlAttack * increaseRate / 100).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, (mglAttack * increaseRate / 100).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK, false, (stuckRate * -0.1 * increaseRate / 100).tofloat()); } } } break; case 4: obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFCOURAGE, STATE_PRIORITY_AUTO, true); break; } } function onEndState_Ariaofcourage(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_ARIAOFCOURAGE){ local size = obj.getVar("Ariaofcourage_Tar").get_obj_vector_size(); if(size > 0){ local buffTime = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 12); for(local i = 0; i < size; i++){ local targetObj = obj.getVar("Ariaofcourage_Tar").get_obj_vector(i); if(targetObj && targetObj.getState() != STATE_DIE){ local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, APDPATH_ARIAOFCOURAGEBUFF); local validT = AddAppendage.getAppendageInfo().getValidTime(); AddAppendage.getAppendageInfo().setValidTime(buffTime); } } } local floorObj = obj.getVar("ARIAOFCOURAGE_FLOOR").get_obj_vector(0); local effectObj = obj.getVar("ARIAOFCOURAGE_EFFECT").get_obj_vector(0); local musicObj = obj.getVar("ARIAOFCOURAGE_MUSIC").get_obj_vector(0); if(floorObj){ local colObj = sq_GetCNRDObjectToCollisionObject(floorObj); colObj.setValid(false); } if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); colObj.setValid(false); } if(musicObj){ local colObj = sq_GetCNRDObjectToCollisionObject(musicObj); colObj.setValid(false); } local pooledObj = obj.getVar("Ariaofcourage_eff").get_obj_vector(0); local pooledObj2 = obj.getVar("Ariaofcourage_eff").get_obj_vector(1); if(pooledObj) pooledObj.setValid(false); if(pooledObj2) pooledObj2.setValid(false); } } function getImmuneTypeDamageRate_appendage_at_ariaofcourage(appendage, damageRate, attacker) { local new_damageRate = damageRate - appendage.getVar("custom").getInt(10) / 10; return new_damageRate; } function proc_appendage_at_ariaofcouragebuff(appendage) { if(!appendage) return; local parentObj = appendage.getParent(); if(!CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, APDPATH_BLESSOFCOURAGE)){ appendage.setValid(false); return; } if((!parentObj || parentObj.getState() == STATE_DIE) && appendage.getVar("bool").getBool(1) == false){ appendage.getVar("bool").setBool(1, true); appendage.sq_SetValidTime(appendage.getVar("custom").getInt(16)); return; } local sourceObj = appendage.getSource(); if((!parentObj || parentObj.getState() == STATE_DIE) && appendage.getVar("bool").getBool(1) == false){ appendage.getVar("bool").setBool(1, true); appendage.sq_SetValidTime(appendage.getVar("custom").getInt(16)); return; } local range = appendage.getVar("custom").getInt(17); if(sq_Abs(sourceObj.getXPos() - parentObj.getXPos()) > range && sq_Abs(sourceObj.getYPos() - parentObj.getYPos()) > range / 2 && appendage.getVar("bool").getBool(0)){ appendage.getVar("bool").setBool(0, false); appendage.sq_SetValidTime(appendage.getVar("custom").getInt(16)); } } function onEnd_appendage_at_ariaofcouragebuff(appendage) { if(!appendage) return; local parentObj = appendage.getParent(); if(!parentObj || parentObj.getState() == STATE_DIE){ appendage.setValid(false); return; } } //神之教诲 function checkExecutableSkill_Edification(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_EDIFICATION); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_EDIFICATION, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Edification(obj) { if (!obj) return false; return true; } function onSetState_Edification(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(ATPANI_BYKK_EDIFICATION_CAST_BODY); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atedification/edification_top_angelbody.ani", 0, 1, 0); local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atedification/edification_bottom_glow.ani"; createOnlyDrawObject_ATPriest_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); obj.sq_PlaySound("R_PW_EDITICATION"); obj.sq_PlaySound("EDIFICATION_CAST"); break; case 1: obj.sq_SetCurrentAnimation(ATPANI_BYKK_EDIFICATION_START_BODY); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_EDIFICATION); local buffTime = sq_GetLevelData(obj, SKILL_BYKK_EDIFICATION, 0, skillLevel); local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_EDIFICATION, 1, skillLevel); local objectManager = obj.getObjectManager(); local objectNumber = objectManager.getCollisionObjectNumber(); for (local i = 0; i < objectNumber; i++){ local object = objectManager.getCollisionObject(i); if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object)) { local activeObj = sq_GetCNRDObjectToActiveObject(object); if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_EDIFICATION)) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_EDIFICATION); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_EDIFICATION, true); AddAppendage.sq_SetValidTime(buffTime); AddAppendage.setBuffIconImage(128); AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_EDIFICATION, skillLevel); CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, obj, true); AddAppendage.getVar("custom").setInt(10, moveSpeed); local change_appendage = AddAppendage.sq_getChangeStatus("AT_Edification"); if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Edification",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed).tofloat()); } } } break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Edification(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_EDIFICATION, STATE_PRIORITY_AUTO, true); break; case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Edification(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ } } function onKeyFrameFlag_Edification(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ } return true; } function onTimeEvent_Edification(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: break; } } function onEndState_Edification(obj, new_state) { if(!obj) return; } //神光惩戒 function checkExecutableSkill_Shinecross(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SHINECROSS); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_SHINECROSS, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Shinecross(obj) { if (!obj) return false; return true; } function onSetState_Shinecross(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(ATPANI_BYKK_SC_BODYA); local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHINECROSS, -1, 0, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_SHINECROSSATK1)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); break; case 1: obj.sq_SetCurrentAnimation(ATPANI_BYKK_SC_BODYB); local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHINECROSS, -1, 1, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_SHINECROSSATK2)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); break; case 2: obj.sq_SetCurrentAnimation(ATPANI_BYKK_SC_BODYC); local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHINECROSS, -1, 2, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_SHINECROSSATK3)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Shinecross(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_SHINECROSS, STATE_PRIORITY_AUTO, true); break; case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(STATE_BYKK_SHINECROSS, STATE_PRIORITY_AUTO, true); break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Shinecross(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ } } function onKeyFrameFlag_Shinecross(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 101: obj.sq_PlaySound("PW_1ATK_01"); break; case 103: obj.sq_PlaySound("SHINECROSS_01"); break; case 105: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atshinecross/sc_slasha_01.ani", 0, 1, 0); break; case 200: obj.sq_PlaySound("PW_3ATK_02"); obj.sq_PlaySound("SHINECROSS_02"); break; case 203: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atshinecross/sc_slashb_01.ani", 0, 1, 0); break; case 300: obj.sq_PlaySound("PW_RISING_SLASH"); break; case 301: obj.sq_PlaySound("SHINECROSS_03"); sq_flashScreen(obj,0,80,0,153, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 6, 100); break; case 310: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atshinecross/sc_slashc_01.ani", 0, 1, 0); break; } return true; } function onTimeEvent_Shinecross(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: break; } } function onEndState_Shinecross(obj, new_state) { if(!obj) return; } //神圣锁环 function checkExecutableSkill_Holycirclet(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HOLYCIRCLET); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_HOLYCIRCLET, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Holycirclet(obj) { if (!obj) return false; return true; } function onSetState_Holycirclet(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(ATPANI_BYKK_HOLYCIRCLET_A_BODY); break; case 1: obj.sq_SetCurrentAnimation(ATPANI_BYKK_HOLYCIRCLET_B_BODY); sq_SetMyShake(obj, 2, 40); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atholycirclet/holycirclet_b_bodyeff.ani", 0, 1, 0); break; } } function onEndCurrentAni_Holycirclet(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_HOLYCIRCLET, STATE_PRIORITY_AUTO, true); break; case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Holycirclet(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ } } function onKeyFrameFlag_Holycirclet(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 101: //`ShootHolyCirclet` 300 0 70 local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYCIRCLET, -1, 0, 1.0); local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYCIRCLET, -1, 1, 1.0); local hitTime = sq_GetIntData(obj, SKILL_BYKK_HOLYCIRCLET, 6); local subTime = sq_GetIntData(obj, SKILL_BYKK_HOLYCIRCLET, 0); local lifeTime = sq_GetIntData(obj, SKILL_BYKK_HOLYCIRCLET, 2); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_HOLYCIRCLET, 10); // if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,300,0,70,obj.getDirection(),1,SKILL_BYKK_HOLYCIRCLET,1,power,power_exp,hitTime,lifeTime,subTime,sizeRate,0,0); break; case 104: sq_SetMyShake(obj, 2, 80); break; } return true; } function onTimeEvent_Holycirclet(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: break; } } function onEndState_Holycirclet(obj, new_state) { if(!obj) return; } //复苏之光 function checkExecutableSkill_Revive(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CUTINDASH); if (isUse){ //obj.sq_IntVectClear(); //obj.sq_IntVectPush(0); //obj.sq_AddSetStatePacket(STATE_BYKK_CUTINDASH, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Revive(obj) { if (!obj) return false; // return true; return false; } function onSetState_Revive(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); switch(subState){ } } function onEndCurrentAni_Revive(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ } } function onProcCon_Revive(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ } } function onKeyFrameFlag_Revive(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ } return true; } function onTimeEvent_Revive(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: break; } } function onEndState_Revive(obj, new_state) { if(!obj) return; } //忏悔之雷 function checkExecutableSkill_Thunderofcleans(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_THUNDEROFCLEANS); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_THUNDEROFCLEANS, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Thunderofcleans(obj) { if (!obj) return false; return true; } function onSetState_Thunderofcleans(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(ATPANI_BYKK_ATTHUNDEROFCLEANS_CASTING_BODY); break; case 1: obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATTHUNDEROFCLEANS_START_BODY); if(sq_GetIntData(obj, SKILL_BYKK_THUNDEROFCLEANS, 23) < 1){//stone local createMax = sq_GetIntData(obj, SKILL_BYKK_THUNDEROFCLEANS, 2); local createTime = sq_GetIntData(obj, SKILL_BYKK_THUNDEROFCLEANS, 3); local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THUNDEROFCLEANS, -1, 3, 1.0); local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THUNDEROFCLEANS, -1, 0, 1.0); local minSizeRate = sq_GetIntData(obj, SKILL_BYKK_THUNDEROFCLEANS, 10); // if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,300,0,0,obj.getDirection(),1,SKILL_BYKK_THUNDEROFCLEANS,1,power,power_exp,createMax,createTime,0,minSizeRate,0,0); } else{ local createTime = sq_GetIntData(obj, SKILL_BYKK_THUNDEROFCLEANS, 3); local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THUNDEROFCLEANS, -1, 0, -1, 2.0); local sub = sq_GetIntData(obj, SKILL_BYKK_THUNDEROFCLEANS, 23); local speed = 200; if(sub > 50) speed = 300; // if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,200,0,0,obj.getDirection(),1,SKILL_BYKK_THUNDEROFCLEANS,1,0,power_exp,0,createTime,sub,0,speed,0); obj.setTimeEvent(0, 100, 1, false); } break; } } function onEndCurrentAni_Thunderofcleans(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_THUNDEROFCLEANS, STATE_PRIORITY_AUTO, true); break; case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Thunderofcleans(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ } } function onKeyFrameFlag_Thunderofcleans(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ } return true; } function onTimeEvent_Thunderofcleans(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onEndState_Thunderofcleans(obj, new_state) { if(!obj) return; } //新生圣歌 function checkExecutableSkill_Ariaofregeneration(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_ARIAOFREGENERATION); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFREGENERATION, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Ariaofregeneration(obj) { if (!obj) return false; return true; } function onSetState_Ariaofregeneration(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(ATPANI_BYKK_ARIAOFREGENERATIONSTART_BODY); obj.sq_PlaySound("R_PW_ARIAREGENERATION"); obj.sq_PlaySound("ARIAREGENERATION", 2001); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_ARIAOFREGENERATION); local damageRate = sq_GetLevelData(obj, SKILL_BYKK_ARIAOFREGENERATION, 1, skillLevel); local allTolerance = sq_GetIntData(obj, SKILL_BYKK_ARIAOFREGENERATION, 9); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_ARIAOFCOURAGE, true); AddAppendage.getVar("custom").setInt(10, damageRate); local change_appendage = AddAppendage.sq_getChangeStatus("AT_Ariaofcourage"); if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Ariaofcourage",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_ACTIVESTATUS_TOLERANCE_ALL, false, (allTolerance).tofloat()); } break; case 1: obj.sq_SetCurrentAnimation(ATPANI_BYKK_ARIAOFREGENERATIONLOOP_BODY); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atariaofregeneration/ora/oraloopfront_1.ani"), 0, -67); obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atariaofregeneration/ora/oraloopback_glow.ani"), 0, -67); break; case 2: obj.sq_SetCurrentAnimation(ATPANI_BYKK_ARIAOFREGENERATIONEND_BODY); obj.stopSound(2001); obj.removeAllTimeEvent(); local floorObj = obj.getVar("ARIAOFREGENERATION_FLOOR").get_obj_vector(0); local effectObj = obj.getVar("ARIAOFREGENERATION_EFFECT").get_obj_vector(0); local musicObj = obj.getVar("ARIAOFREGENERATION_MUSIC").get_obj_vector(0); if(floorObj){ local colObj = sq_GetCNRDObjectToCollisionObject(floorObj); colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); } if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); } if(musicObj){ local colObj = sq_GetCNRDObjectToCollisionObject(musicObj); colObj.setValid(false); } break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Ariaofregeneration(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(sq_GetIntData(obj, SKILL_BYKK_ARIAOFREGENERATION, 13) > 0) {//stone local range = sq_GetIntData(obj, SKILL_BYKK_ARIAOFREGENERATION, 5); if(sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL) > 0) range = range * (1000 + sq_GetLevelData(obj, SKILL_BYKK_BLESSOFRAPHAEL, 7, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL))) / 1000; local sizeRate = range * 100 / 275; local lifeTime = sq_GetIntData(obj, SKILL_BYKK_ARIAOFREGENERATION, 0); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_ARIAOFREGENERATION); local HP_healRate = sq_GetLevelData(obj, SKILL_BYKK_ARIAOFREGENERATION, 0, skillLevel); local decreaseMax = sq_GetIntData(obj, SKILL_BYKK_ARIAOFREGENERATION, 0) / 1000; // if(obj.isMyControlObject()){ createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFREGENERATION,4,sizeRate,lifeTime,HP_healRate,decreaseMax,range,0,0,0); createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFREGENERATION,5,sizeRate,lifeTime,0,0,0,0,0,0); createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFREGENERATION,6,sizeRate,lifeTime,0,0,0,0,0,0); // } obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } local lifeTime = sq_GetIntData(obj, SKILL_BYKK_ARIAOFREGENERATION, 0); obj.setTimeEvent(1,lifeTime,1,false); obj.setTimeEvent(2,20,-1,false); obj.setTimeEvent(3,1000,-1,true); obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFREGENERATION, STATE_PRIORITY_AUTO, true); break; case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFREGENERATION, STATE_PRIORITY_AUTO, true); break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Ariaofregeneration(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 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_ARIAOFREGENERATION, STATE_PRIORITY_AUTO, true); } if(sq_GetSkillLevel(obj, SKILL_BYKK_LIGHTOFHAPTISM) > 0 && !sq_GetSkill(obj, SKILL_BYKK_LIGHTOFHAPTISM).isInCoolTime()){ obj.setSkillCommandEnable(SKILL_BYKK_LIGHTOFHAPTISM,true); local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_LIGHTOFHAPTISM); if(b_useskill != -1){ obj.startSkillCoolTime(SKILL_BYKK_LIGHTOFHAPTISM, sq_GetSkillLevel(obj, SKILL_BYKK_LIGHTOFHAPTISM), -1); local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LIGHTOFHAPTISM, SKILL_BYKK_LIGHTOFHAPTISM, 0, -1, 1.0); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_LIGHTOFHAPTISM, 0); // if(obj.isMyControlObject()){ local target = sq_FindTarget(obj, 0, 500, 500, 500); if(target) createSkillPassive_ATPriest_bykk(obj,target,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_LIGHTOFHAPTISM,0,power,sizeRate,0,0,0,0,0,0); else createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,250,0,0,obj.getDirection(),1,SKILL_BYKK_LIGHTOFHAPTISM,0,power,sizeRate,0,0,0,0,0,0); // } } } if(sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFANGEL) > 0 && !sq_GetSkill(obj, SKILL_BYKK_BLESSOFANGEL).isInCoolTime()){ obj.setSkillCommandEnable(SKILL_BYKK_BLESSOFANGEL,true); local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_BLESSOFANGEL); if(b_useskill != -1){ obj.startSkillCoolTime(SKILL_BYKK_BLESSOFANGEL, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFANGEL), -1); local range = sq_GetIntData(obj, SKILL_BYKK_BLESSOFANGEL, 1); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFANGEL); local buffTime = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 0, skillLevel); obj.sq_AddSkillLoad(SKILL_BYKK_BLESSOFANGEL, 111, 1, buffTime); local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_BLESSOFANGEL); if(loadSlot) loadSlot.setStartCool(); local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 2, skillLevel); local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 3, skillLevel); local castSpeed = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 4, skillLevel); local power_Chr = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLESSOFANGEL, -1, 1, 1.0); local power_Pty = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLESSOFANGEL, -1, 5, 1.0); local objectManager = obj.getObjectManager(); local objectNumber = objectManager.getCollisionObjectNumber(); for (local i = 0; i < objectNumber; i++){ local object = objectManager.getCollisionObject(i); if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) { local activeObj = sq_GetCNRDObjectToActiveObject(object); if(!obj.getVar("Blessofangel_sqr").is_obj_vector(activeObj)) obj.getVar("Blessofangel_sqr").push_obj_vector(activeObj); if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFANGEL)){ CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_BLESSOFANGEL); local effectObj = activeObj.getVar("Blessofangel_eff").get_obj_vector(0); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); colObj.setValid(false); } } local power = power_Pty; if(isSameObject(obj, activeObj)) power = power_Chr; local group = sq_GetGroup(activeObj); local uniqueId = sq_GetUniqueId(activeObj); // if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,activeObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,sq_GetHeightObject(activeObj) + 30,obj.getDirection(),1,SKILL_BYKK_BLESSOFANGEL,1,power,buffTime,group,uniqueId,0,0,0,0); if(obj.getVar("Blessofangel_Bool").getBool(0) == false) obj.getVar("Blessofangel_Bool").setBool(0, true); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_BLESSOFANGEL, true); AddAppendage.setBuffIconImage(131); AddAppendage.sq_SetValidTime(buffTime); AddAppendage.getVar("tar").clear_obj_vector(); AddAppendage.getVar("tar").push_obj_vector(obj); local change_appendage = AddAppendage.sq_getChangeStatus("AT_Blessofangel"); if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Blessofangel",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_CAST_SPEED, false, (castSpeed).tofloat()); } } } } } if(sq_GetSkillLevel(obj, SKILL_BYKK_PROTECTIONOFURIEL) > 0 && !sq_GetSkill(obj, SKILL_BYKK_PROTECTIONOFURIEL).isInCoolTime()){ obj.setSkillCommandEnable(SKILL_BYKK_PROTECTIONOFURIEL,true); local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_PROTECTIONOFURIEL); if(b_useskill != -1){ obj.startSkillCoolTime(SKILL_BYKK_PROTECTIONOFURIEL, sq_GetSkillLevel(obj, SKILL_BYKK_PROTECTIONOFURIEL), -1); local lifeTime = sq_GetIntData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 1); local range = sq_GetIntData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 4); local hitTime = sq_GetIntData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 2); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_PROTECTIONOFURIEL); local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 2, skillLevel); local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 3, skillLevel); local castSpeed = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 4, skillLevel); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFSHAPIEL)){ local addRate = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFSHAPIEL, 5, sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL)); attackSpeed = attackSpeed + addRate; moveSpeed = moveSpeed + addRate; castSpeed = castSpeed + addRate; } local damageRate = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 5, skillLevel) / 10; local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PROTECTIONOFURIEL, -1, 0, 1.0); // if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_PROTECTIONOFURIEL,1,power,lifeTime,hitTime,range,attackSpeed,moveSpeed,castSpeed,damageRate); } } if(sq_GetSkillLevel(obj, SKILL_BYKK_HOLYLIGHT) > 0 && !sq_GetSkill(obj, SKILL_BYKK_HOLYLIGHT).isInCoolTime()){ obj.setSkillCommandEnable(SKILL_BYKK_HOLYLIGHT,true); local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_HOLYLIGHT); if(b_useskill != -1){ local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_HOLYLIGHT); obj.startSkillCoolTime(SKILL_BYKK_HOLYLIGHT, skillLevel, -1); local range = sq_GetIntData(obj, SKILL_BYKK_HOLYLIGHT, 0); local buffTime = sq_GetLevelData(obj, SKILL_BYKK_HOLYLIGHT, 0, skillLevel) + 720; local power_Chr = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYLIGHT, -1, 1, 1.0); local power_Pty = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYLIGHT, -1, 5, 1.0); local damageRate = sq_GetLevelData(obj, SKILL_BYKK_HOLYLIGHT, 2, skillLevel); local increaseRate = sq_GetIntData(obj, SKILL_BYKK_HOLYLIGHT, 4); local skillLevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFPROTECTION); local hpMax = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 6, skillLevel2) * (100 + increaseRate) / 100; local mpMax = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 7, skillLevel2) * (100 + increaseRate) / 100; local phDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 2, skillLevel2) * (100 + increaseRate) / 100; local mgDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 3, skillLevel2) * (100 + increaseRate) / 100; local phlDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 4, skillLevel2) * (100 + increaseRate) / 100; local mglDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 5, skillLevel2) * (100 + increaseRate) / 100; local objectManager = obj.getObjectManager(); local objectNumber = objectManager.getCollisionObjectNumber(); for (local i = 0; i < objectNumber; i++){ local object = objectManager.getCollisionObject(i); if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) { local activeObj = sq_GetCNRDObjectToActiveObject(object); if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_HOLYLIGHT)) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_HOLYLIGHT); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_HOLYLIGHT, true); if(buffTime > 0) AddAppendage.sq_SetValidTime(buffTime); AddAppendage.setBuffIconImage(44); AddAppendage.setEnableIsBuff(true); AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_HOLYLIGHT, skillLevel); CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, obj, true); AddAppendage.getVar("custom").setInt(10, damageRate); if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFPROTECTION)){ local ptcAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, APDPATH_BLESSOFPROTECTION); local change_appendage = ptcAppendage.sq_getChangeStatus("AT_Blessofprotection"); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_HP_MAX, false, (hpMax).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_MP_MAX, false, (mpMax).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, false, (phDefense).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, false, (mgDefense).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_DEFENSE, false, (phlDefense).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_DEFENSE, false, (mglDefense).tofloat()); } } local group = sq_GetGroup(activeObj); local uniqueId = sq_GetUniqueId(activeObj); local power = power_Pty; if(isSameObject(obj, activeObj)) power = power_Chr; // if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,activeObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,sq_GetHeightObject(activeObj) / 2,obj.getDirection(),1,SKILL_BYKK_HOLYLIGHT,0,power,buffTime,group,uniqueId,0,0,0,0); } } } } if(sq_GetSkillLevel(obj, SKILL_BYKK_EDIFICATION) > 0 && !sq_GetSkill(obj, SKILL_BYKK_EDIFICATION).isInCoolTime()){ obj.setSkillCommandEnable(SKILL_BYKK_EDIFICATION,true); local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_EDIFICATION); if(b_useskill != -1){ local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_EDIFICATION); obj.startSkillCoolTime(SKILL_BYKK_HOLYLIGHT, skillLevel, -1); local buffTime = sq_GetLevelData(obj, SKILL_BYKK_EDIFICATION, 0, skillLevel); local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_EDIFICATION, 1, skillLevel); local objectManager = obj.getObjectManager(); local objectNumber = objectManager.getCollisionObjectNumber(); for (local i = 0; i < objectNumber; i++){ local object = objectManager.getCollisionObject(i); if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object)) { local activeObj = sq_GetCNRDObjectToActiveObject(object); if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_EDIFICATION)) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_EDIFICATION); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_EDIFICATION, true); AddAppendage.sq_SetValidTime(buffTime); AddAppendage.setBuffIconImage(128); AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_EDIFICATION, skillLevel); CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, obj, true); AddAppendage.getVar("custom").setInt(10, moveSpeed); local change_appendage = AddAppendage.sq_getChangeStatus("AT_Edification"); if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Edification",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed).tofloat()); } } } } } if(sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL) > 0 && !sq_GetSkill(obj, SKILL_BYKK_CRUXOFSHAPIEL).isInCoolTime()){ obj.setSkillCommandEnable(SKILL_BYKK_CRUXOFSHAPIEL,true); local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_CRUXOFSHAPIEL); if(b_useskill != -1){ local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL); obj.startSkillCoolTime(SKILL_BYKK_CRUXOFSHAPIEL, skillLevel, -1); obj.getVar("cruxofshapiel_obj").clear_obj_vector(); obj.getVar("cruxofshapiel_bool").setBool(0, false); local power_fall = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CRUXOFSHAPIEL, -1, 0, 1.0); local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CRUXOFSHAPIEL, -1, 1, 1.0); local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CRUXOFSHAPIEL, -1, 2, 1.0); local hitTime = sq_GetIntData(obj, SKILL_BYKK_CRUXOFSHAPIEL, 0); // if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,200,0,0,obj.getDirection(),1,SKILL_BYKK_CRUXOFSHAPIEL,1,power_fall,power,power_exp,hitTime,0,0,0,0); local buffTime = hitTime * 21 + 2080; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFSHAPIEL)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_CRUXOFSHAPIEL); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_CRUXOFSHAPIEL, true); AddAppendage.sq_SetValidTime(buffTime); AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_CRUXOFSHAPIEL, sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL)); CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); } } if(obj.getVar("cruxofshapiel_bool").getBool(0)){ obj.setSkillCommandEnable(SKILL_BYKK_CRUXOFSHAPIEL,true); local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_CRUXOFSHAPIEL); if(b_useskill != -1){ obj.getVar("cruxofshapiel_bool").setBool(0, false); local size = obj.getVar("cruxofshapiel_obj").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local aObj = obj.getVar("cruxofshapiel_obj").get_obj_vector(i); if(aObj){ local colObj = sq_GetCNRDObjectToCollisionObject(aObj); if(colObj.getVar("subtype").getInt(0) == 1) colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); else colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); } } } } } break; } } function onKeyFrameFlag_Ariaofregeneration(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 103: //`StartEffect` 61 0 60 if(sq_GetIntData(obj, SKILL_BYKK_ARIAOFREGENERATION, 13) > 0) break; local range = sq_GetIntData(obj, SKILL_BYKK_ARIAOFREGENERATION, 5); if(sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL) > 0) range = range * (1000 + sq_GetLevelData(obj, SKILL_BYKK_BLESSOFRAPHAEL, 7, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL))) / 1000; local sizeRate = range * 100 / 275; // if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFREGENERATION,1,sizeRate,0,0,0,0,0,0,0); // if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFREGENERATION,2,sizeRate,0,0,0,0,0,0,0); break; case 106: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atariaofregeneration/ora/orastartfront_1.ani", 0, 1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atariaofregeneration/ora/orastartback_backlight.ani", 0, -1, 0); break; case 300: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atariaofregeneration/ora/oraendfront_1.ani", 0, 1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atariaofregeneration/ora/oraendback_1.ani", 0, -1, 0); break; } return true; } function onTimeEvent_Ariaofregeneration(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFREGENERATION, STATE_PRIORITY_AUTO, true); break; case 2: local xpos = sq_GetXPos(obj), ypos = sq_GetYPos(obj); if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(xpos,ypos - 1)) sq_setCurrentAxisPos(obj, 1, ypos - 2); if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(xpos - 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 2); return; } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(xpos + 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 2); return; } } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(xpos,ypos + 1)) sq_setCurrentAxisPos(obj, 1, ypos + 2); if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(xpos - 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 2); return; } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(xpos + 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 2); return; } } if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(xpos - 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 2); return; } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(xpos + 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 2); return; } break; case 3: local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_ARIAOFREGENERATION); local HP_healRate = sq_GetLevelData(obj, SKILL_BYKK_ARIAOFREGENERATION, 0, skillLevel); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFSHAPIEL)) HP_healRate = HP_healRate + sq_GetLevelData(obj, SKILL_BYKK_CRUXOFSHAPIEL, 4, sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL)) / 10; local decreaseMax = sq_GetIntData(obj, SKILL_BYKK_ARIAOFREGENERATION, 0) / 1000; local range = sq_GetIntData(obj, SKILL_BYKK_ARIAOFREGENERATION, 5); if(sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL) > 0) range = range * (1000 + sq_GetLevelData(obj, SKILL_BYKK_BLESSOFRAPHAEL, 7, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL))) / 1000; local objectManager = obj.getObjectManager(); local objectNumber = objectManager.getCollisionObjectNumber(); for (local i = 0; i < objectNumber; i++){ local object = objectManager.getCollisionObject(i); if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) { local activeObj = sq_GetCNRDObjectToActiveObject(object); local hp = activeObj.getHp() * HP_healRate / 100; local appendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_ARIAOFREGENERATIONBUFF, true); local change_appendage = appendage.sq_GetCNChangeHp("changehp"); if (!change_appendage) change_appendage = appendage.sq_AddCNChangeHp("changehp", activeObj, obj, 0, hp.tofloat(), 800); appendage.sq_SetValidTime(500); local activeStatus = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 15, 16]; local count = 0; for(local ui = 0; ui < activeStatus.len(); ui++){ if (sq_IsValidActiveStatus(activeObj, activeStatus[ui])){ if(count + 1 < decreaseMax){ sq_ReleaseActiveStatus(activeObj, activeStatus[ui]); count = count + 1; } } } } } break; } } function onEndState_Ariaofregeneration(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_ARIAOFREGENERATION){ local floorObj = obj.getVar("ARIAOFREGENERATION_FLOOR").get_obj_vector(0); local effectObj = obj.getVar("ARIAOFREGENERATION_EFFECT").get_obj_vector(0); local musicObj = obj.getVar("ARIAOFREGENERATION_MUSIC").get_obj_vector(0); if(floorObj){ local colObj = sq_GetCNRDObjectToCollisionObject(floorObj); colObj.setValid(false); } if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); colObj.setValid(false); } if(musicObj){ local colObj = sq_GetCNRDObjectToCollisionObject(musicObj); colObj.setValid(false); } } } //神光十字 function checkExecutableSkill_Grandcrosscrash(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_GRANDCROSSCRASH); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_GRANDCROSSCRASH, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Grandcrosscrash(obj) { if (!obj) return false; return true; } function onSetState_Grandcrosscrash(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(ATPANI_BYKK_ATGRANDCROSSCRASH_READY_BODY); break; case 1: obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATGRANDCROSSCRASH_SMASH_BODY); local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GRANDCROSSCRASH, -1, 2, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_GRANDCROSSCRASHATTACK)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); obj.sq_PlaySound("PW_GRANDCROSS_02"); obj.sq_PlaySound("HOLYSANCTUARY_EXP"); sq_SetMyShake(obj, 15, 300); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(subState == 1){ local currentAni = obj.getCurrentAnimation(); local speedRate = 5000.0 / currentAni.getDelaySum(0, 0).tofloat(); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atgrandcrosscrash/screen/atgrandcrosscrash_screen.ani", 302, 10, 0); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate); } } function onEndCurrentAni_Grandcrosscrash(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_GRANDCROSSCRASH, STATE_PRIORITY_AUTO, true); break; case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Grandcrosscrash(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ } } function onKeyFrameFlag_Grandcrosscrash(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: //75 0 5 local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GRANDCROSSCRASH, -1, 0, 1.0); // if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,75,0,5,obj.getDirection(),1,SKILL_BYKK_GRANDCROSSCRASH,1,power_exp,0,0,0,0,0,0,0); break; case 2: local lifeTime = sq_GetIntData(obj, SKILL_BYKK_GRANDCROSSCRASH, 1); local addTime = sq_GetLevelData(obj, SKILL_BYKK_GRANDCROSSCRASH, 1, sq_GetSkillLevel(obj, SKILL_BYKK_GRANDCROSSCRASH)); // if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,74,0,5,obj.getDirection(),1,SKILL_BYKK_GRANDCROSSCRASH,2,lifeTime,addTime,0,0,0,0,0,0); break; } return true; } function onTimeEvent_Grandcrosscrash(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: break; } } function onEndState_Grandcrosscrash(obj, new_state) { if(!obj) return; } //圣光天启 function checkExecutableSkill_Cruxofvictoria(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CRUXOFVICTORIA); if (isUse){ if(sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFVICTORIA) >= 6) sq_SetCustomDamageType(obj, true, 2); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_CRUXOFVICTORIA, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Cruxofvictoria(obj) { if (!obj) return false; return true; } function onSetState_Cruxofvictoria(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); obj.sq_ZStop(); switch(subState){ case 0: obj.sq_SetCurrentAnimation(ATPANI_BYKK_VICTORY1); if(obj.isMyControlObject()) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcruxofvictoria/ready/covreadyeff_skylight.ani", 0, 1, 0); break; case 1: obj.sq_SetCurrentAnimation(ATPANI_BYKK_VICTORY2); if(obj.isMyControlObject()) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcruxofvictoria/fly/covflyeff_01.ani", 0, 1, 0); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcruxofvictoria/fly/covflycross_01.ani", 0, -1, -50); obj.getVar("Cruxofvictoria_Eff").clear_obj_vector(); obj.getVar("Cruxofvictoria_Eff").push_obj_vector(pooledObj); break; case 2: obj.sq_SetCurrentAnimation(ATPANI_BYKK_VICTORY3); local pooledObj = obj.getVar("Cruxofvictoria_Eff").get_obj_vector(0); if(pooledObj) pooledObj.setValid(false); if(obj.isMyControlObject()) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcruxofvictoria/crosscatch/covsetupeff_feather_00.ani", 0, 1, 0); sq_flashScreen(obj,100,500,100,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); break; case 3: obj.sq_SetCurrentAnimation(ATPANI_BYKK_VICTORY_ITEM4); sq_SetMyShake(obj, 5, 320); break; case 4: obj.sq_SetCurrentAnimation(ATPANI_BYKK_COVBUFFFINISHBODY_BODY); sq_SetMyShake(obj, 5, 320); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(subState == 1){ local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(false); obj.setTimeEvent(0, delay / 50, 40, true); } else if(subState == 3){ local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(0, 1); // obj.getVar("Cruxofvictoria_move").setInt(10, sq_GetZPos(obj)); obj.setTimeEvent(1, delay / 10, 10, true); } } function onEndCurrentAni_Cruxofvictoria(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: case 2: case 3: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(STATE_BYKK_CRUXOFVICTORIA, STATE_PRIORITY_AUTO, true); break; case 4: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Cruxofvictoria(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ } } function onKeyFrameFlag_Cruxofvictoria(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 101: obj.sq_PlaySound("R_PW_CRUXVICTORIA"); obj.sq_PlaySound("CRUXVICTORIA_CAST"); break; case 104: //`CreateBuffChaser` 40 0 150 local objectManager = obj.getObjectManager(); local objectNumber = objectManager.getCollisionObjectNumber(); for (local i = 0; i < objectNumber; i++){ local object = objectManager.getCollisionObject(i); if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object)) { local sqrChr = sq_GetCNRDObjectToSQRCharacter(object); if(sq_getJob(sqrChr) == ENUM_CHARACTERJOB_PRIEST && sq_getGrowType(sqrChr) == GROW_TYPE_CRUSADER) continue; local activeObj = sq_GetCNRDObjectToActiveObject(object); local group = sq_GetGroup(activeObj); local uniqueId = sq_GetUniqueId(activeObj); // if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,10,0,50,obj.getDirection(),1,SKILL_BYKK_CRUXOFVICTORIA,2,group,uniqueId,0,0,0,0,0,0); } } obj.setTimeEvent(2, 1100, 1, false); break; case 404: sq_SetMyShake(obj, 2, 2400); local bonusRate = 1.0; local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFVICTORIA); if(skillLevel >= 3) bonusRate = 1.1; local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CRUXOFVICTORIA, -1, 0, bonusRate); local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CRUXOFVICTORIA, -1, 1, bonusRate); local hitTime = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFVICTORIA, 12, skillLevel); // if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,10,0,-sq_GetZPos(obj),obj.getDirection(),1,SKILL_BYKK_CRUXOFVICTORIA,1,power,power_exp,hitTime,0,0,0,0,0); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; case 427: //`AddFlash` 62 0 131 break; case 439: sq_SetMyShake(obj, 5, 400); //`FinishExplosion` 69 0 47 break; } return true; } function onTimeEvent_Cruxofvictoria(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: local v = sq_GetUniformVelocity(0, 150, timeEventCount, 40); sq_setCurrentAxisPos(obj, 2, v); break; case 1: local v = sq_GetUniformVelocity(150, 0, timeEventCount, 4); sq_setCurrentAxisPos(obj, 2, v); break; case 2: local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFVICTORIA); local buffTime = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFVICTORIA, 11, skillLevel); if(skillLevel >= 9) buffTime = buffTime + 3000; local phAttack = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFVICTORIA, 4, skillLevel); local mgAttack = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFVICTORIA, 5, skillLevel); local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFVICTORIA, 2, skillLevel); local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFVICTORIA, 3, skillLevel); local phDefense = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFVICTORIA, 6, skillLevel); local mgDefense = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFVICTORIA, 7, skillLevel); local now_mgAttack = sq_GetCharacterAttribute(0x2394);//1000;// now_mgAttack = now_mgAttack * (100 + sq_GetIntData(obj, 169, 102)) / 100; // print("now_mgAttack = "+now_mgAttack); local addRate = now_mgAttack.tofloat() / sq_GetIntData(obj, SKILL_BYKK_CRUXOFVICTORIA, 1).tofloat(); // print("addRate = "+addRate); if(addRate > 1){ phAttack = (phAttack.tofloat() * (1.0 + addRate)).tointeger(); mgAttack = (mgAttack.tofloat() * (1.0 + addRate)).tointeger(); } sq_BinaryStartWrite(); sq_BinaryWriteDword(1); sq_BinaryWriteDword(SKILL_BYKK_CRUXOFVICTORIA); sq_BinaryWriteDword(3); sq_BinaryWriteDword(skillLevel); sq_BinaryWriteDword(buffTime); sq_BinaryWriteDword(phAttack.tointeger()); sq_BinaryWriteDword(mgAttack.tointeger()); sq_BinaryWriteDword(attackSpeed); sq_BinaryWriteDword(moveSpeed); sq_BinaryWriteDword(phDefense); sq_BinaryWriteDword(mgDefense); sq_SendCreatePassiveObjectPacket(obj, PASSIVEOBJ_BYKK_ATPRIEST, 0, 0, 0, 0, obj.getDirection()); break; } } function onEndState_Cruxofvictoria(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_CRUXOFVICTORIA){ sq_SetCustomDamageType(obj, true, 0); } } //忏悔重击 function checkExecutableSkill_Repentencesmash(obj) { if (!obj) return false; local isStone = sq_GetIntData(obj, SKILL_BYKK_REPENTENCESMASH, 10); if(isStone > 0 && isStone != 5000){ local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_REPENTENCESMASH); if(loadSlot){ local getNumber = loadSlot.getRemainLoadNumber() if(getNumber > 0){ loadSlot.decreaseLoadCount(1); loadSlot.setStartCool(); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_REPENTENCESMASH, STATE_PRIORITY_IGNORE_FORCE, true); return true; } else return false; } else return false; } local isUse = obj.sq_IsUseSkill(SKILL_BYKK_REPENTENCESMASH); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_REPENTENCESMASH, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Repentencesmash(obj) { if (!obj) return false; return true; } function onSetState_Repentencesmash(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(ATPANI_BYKK_ATREPENTENCESMASH_READY_BODY); obj.sq_PlaySound("PW_REPENTENCE_01"); obj.sq_PlaySound("THUNDERHAMMER"); break; case 1: obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATREPENTENCESMASH_SMASH01_BODY); local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_REPENTENCESMASH, -1, 0, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_REPENTENCESMASHATK1)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); break; case 2: obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATREPENTENCESMASH_SMASH02_BODY); local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_REPENTENCESMASH, -1, 1, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_REPENTENCESMASHATK2)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power); obj.sq_PlaySound("PW_REPENTENCE_02"); obj.sq_PlaySound("IMPACT_SMASH"); break; case 3: obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATREPENTENCESMASH_END_BODY); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(subState == 0){ local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atrepentencesmash/atrepentencesmash_ready_front.ani", 0, 0, 0); local currentAni = obj.getCurrentAnimation(); local speedRate = 10000.0 / currentAni.getDelaySum(0, 0).tofloat(); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate); } } function onEndCurrentAni_Repentencesmash(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: case 2: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(STATE_BYKK_REPENTENCESMASH, STATE_PRIORITY_AUTO, true); break; case 3: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Repentencesmash(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ } } function onKeyFrameFlag_Repentencesmash(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 101: sq_SetMyShake(obj, 12, 100); break; case 1: sq_flashScreen(obj,0,80,0,89, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 15, 300); break; case 2: sq_flashScreen(obj,0,200,200,127, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; } return true; } function onTimeEvent_Repentencesmash(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: break; } } function onEndState_Repentencesmash(obj, new_state) { if(!obj) return; } function onAttack_Repentencesmash(obj, damager, boundingBox, isStuck) { if(!obj) return; if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: sq_AddDrawOnlyAniFromParent(damager, "character/swordman/effect/animation/1_atpriest_bykk/atrepentencesmash/atrepentencesmash_hit_normal.ani", 0, 0, sq_GetCenterZPos(boundingBox)); break; case 2: sq_AddDrawOnlyAniFromParent(damager, "character/swordman/effect/animation/1_atpriest_bykk/atrepentencesmash/atrepentencesmash_hit_finish.ani", 0, 0, sq_GetCenterZPos(boundingBox) - 75); break; } if(sq_IsFixture(damager)) return; if(sq_GetIntData(obj, SKILL_BYKK_REPENTENCESMASH, 10) > 0){ //APDPATH_REPENTENCESMASH if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, APDPATH_REPENTENCESMASH)){ local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, APDPATH_REPENTENCESMASH, true); AddAppendage.sq_SetValidTime(500); sq_MoveToAppendageForce(damager, obj, obj, 200, 0, damager.getZPos(), 300, true, AddAppendage); } } } //圣佑之阵 function checkExecutableSkill_Protectionofuriel(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PROTECTIONOFURIEL); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_PROTECTIONOFURIEL, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Protectionofuriel(obj) { if (!obj) return false; return true; } function onSetState_Protectionofuriel(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(ATPANI_BYKK_PROTECTIONOFURIEL_CAST_BODY); obj.sq_PlaySound("R_PW_URIEL"); obj.sq_PlaySound("URIEL_CAST"); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Protectionofuriel(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_Protectionofuriel(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ } } function onKeyFrameFlag_Protectionofuriel(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 101: //`CreateProtection` 0 0 0 local lifeTime = sq_GetIntData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 1); local range = sq_GetIntData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 4); local hitTime = sq_GetIntData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 2); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_PROTECTIONOFURIEL); local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 2, skillLevel); local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 3, skillLevel); local castSpeed = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 4, skillLevel); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFSHAPIEL)){ local addRate = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFSHAPIEL, 5, sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL)); attackSpeed = attackSpeed + addRate; moveSpeed = moveSpeed + addRate; castSpeed = castSpeed + addRate; } local damageRate = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 5, skillLevel) / 10; local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PROTECTIONOFURIEL, -1, 0, 1.0); // if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_PROTECTIONOFURIEL,1,power,lifeTime,hitTime,range,attackSpeed,moveSpeed,castSpeed,damageRate); break; } return true; } function onTimeEvent_Protectionofuriel(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: break; } } function onEndState_Protectionofuriel(obj, new_state) { if(!obj) return; } function getImmuneTypeDamageRate_appendage_at_protectionofuriel(appendage, damageRate, attacker) { local new_damageRate = damageRate - appendage.getVar("custom").getInt(10); return new_damageRate; } function onEnd_appendage_at_protectionofuriel(appendage) { local parentObj = appendage.getParent(); local sqrChr = sq_GetCNRDObjectToSQRCharacter(parentObj); if(sqrChr && sqrChr.getState() != STATE_DIE){ sq_SendMessage(sqrChr, 0, 0, 0); } } //圣洁之翼 function checkExecutableSkill_Blessofangel(obj) { if (!obj) return false; if(obj.getVar("Blessofangel_Bool").getBool(0)){ obj.getVar("Blessofangel_Bool").setBool(0, false); local size = obj.getVar("Blessofangel_sqr").get_obj_vector_size();// if(size > 0){ obj.sq_PlaySound("URIEL_END"); local power_Chr = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLESSOFANGEL, -1, 1, 1.0); local power_Pty = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLESSOFANGEL, -1, 5, 1.0); local sizeRate = 100; local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_BLESSOFANGEL); if(loadSlot){ local count = loadSlot.getRemainLoadNumber(); if(count > 1) sizeRate = sizeRate * (100 + sq_GetIntData(obj, SKILL_BYKK_BLESSOFANGEL, 0) * count) / 100; obj.sq_RemoveSkillLoad(SKILL_BYKK_BLESSOFANGEL); } for(local i = 0; i < size; i++){ local targetObj = obj.getVar("Blessofangel_sqr").get_obj_vector(i); if(!targetObj || targetObj.getState() == STATE_DIE) continue; local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_BLESSOFANGEL); local power = power_Pty; if(isSameObject(obj, activeObj)) power = power_Chr; // if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,activeObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_BLESSOFANGEL,2,power,sizeRate,0,0,0,0,0,0); } print("testsize = "+obj.getVar("Blessofangel_eff").get_obj_vector_size()); local size2 = obj.getVar("Blessofangel_eff").get_obj_vector_size(); if(size2 > 0){ for(local i = 0; i < size2; i++){ local effect = obj.getVar("Blessofangel_eff").get_obj_vector(i); if(effect){ local colObj = sq_GetCNRDObjectToCollisionObject(effect); colObj.setValid(false); } } } } 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_BLESSOFANGEL); if (isUse){ obj.getVar("Blessofangel_sqr").clear_obj_vector(); obj.getVar("Blessofangel_eff").clear_obj_vector(); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_BLESSOFANGEL, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Blessofangel(obj) { if (!obj) return false; return true; } function onSetState_Blessofangel(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(ATPANI_BYKK_BLESSOFANGEL_PHASE1_BODY); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.sq_PlaySound("R_PW_URIEL"); obj.sq_PlaySound("URIEL_CAST"); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atblessofangel/blessofangel_phase1bottom_feather02.ani", 0, -1 ,0); local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atblessofangel/blessofangel_phase1top_sparkle02.ani", 0, 1 ,0); sq_moveWithParent(obj, pooledObj); sq_moveWithParent(obj, pooledObj2); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(0, 0); local speedRate = 15000.0 / delay.tofloat(); local pAni = pooledObj.getCurrentAnimation(); local pAni2 = pooledObj2.getCurrentAnimation(); pAni.setSpeedRate(speedRate); pAni2.setSpeedRate(speedRate); break; } } function onEndCurrentAni_Blessofangel(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_Blessofangel(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ } } function onKeyFrameFlag_Blessofangel(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: local range = sq_GetIntData(obj, SKILL_BYKK_BLESSOFANGEL, 1); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFANGEL); local buffTime = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 0, skillLevel); obj.sq_AddSkillLoad(SKILL_BYKK_BLESSOFANGEL, 111, 1, buffTime); local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_BLESSOFANGEL); if(loadSlot) loadSlot.setStartCool(); local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 2, skillLevel); local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 3, skillLevel); local castSpeed = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 4, skillLevel); // local power_Chr = obj.sq_GetPowerWithPassive(SKILL_BYKK_BLESSOFANGEL, -1, 1, -1, 1.0); // local power_Pty = obj.sq_GetPowerWithPassive(SKILL_BYKK_BLESSOFANGEL, -1, 5, -1, 1.0); print("size = "+obj.getVar("Blessofangel_eff").get_obj_vector_size()); local size2 = obj.getVar("Blessofangel_eff").get_obj_vector_size(); if(size2 > 0){ for(local i = 0; i < size2; i++){ local effect = obj.getVar("Blessofangel_eff").get_obj_vector(i); if(effect){ local colObj = sq_GetCNRDObjectToCollisionObject(effect); colObj.setValid(false); } } } local objectManager = obj.getObjectManager(); local objectNumber = objectManager.getCollisionObjectNumber(); for (local i = 0; i < objectNumber; i++){ local object = objectManager.getCollisionObject(i); if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) { local activeObj = sq_GetCNRDObjectToActiveObject(object); if(!obj.getVar("Blessofangel_sqr").is_obj_vector(activeObj)) obj.getVar("Blessofangel_sqr").push_obj_vector(activeObj); if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFANGEL)){ CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_BLESSOFANGEL); } // local power = power_Pty; // if(isSameObject(obj, activeObj)) power = power_Chr; local group = sq_GetGroup(activeObj); local uniqueId = sq_GetUniqueId(activeObj); // if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,activeObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,sq_GetHeightObject(activeObj) + 30,obj.getDirection(),1,SKILL_BYKK_BLESSOFANGEL,1,0,buffTime,group,uniqueId,0,0,0,0); if(obj.getVar("Blessofangel_Bool").getBool(0) == false) obj.getVar("Blessofangel_Bool").setBool(0, true); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_BLESSOFANGEL, true); AddAppendage.setBuffIconImage(131); AddAppendage.sq_SetValidTime(buffTime); AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_BLESSOFANGEL, skillLevel); CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, obj, true); AddAppendage.getVar("tar").clear_obj_vector(); AddAppendage.getVar("tar").push_obj_vector(obj); local change_appendage = AddAppendage.sq_getChangeStatus("AT_Blessofangel"); if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Blessofangel",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_CAST_SPEED, false, (castSpeed).tofloat()); } } } break; } return true; } function onTimeEvent_Blessofangel(obj, timeEventIndex, timeEventCount) { if(!obj) return false; // switch(timeEventIndex){ // case 0: // break; // } } function onEndState_Blessofangel(obj, new_state) { if(!obj) return; } function onAttackParent_appendage_at_blessofangel(appendage, realAttacker, damager, boundingBox, isStuck) { if(!appendage) return; if(isStuck) return; local parentObj = appendage.getParent(); if(!parentObj || parentObj.getState() == STATE_DIE){ appendage.setValid(false); return; } local targetObj = appendage.getVar("tar").get_obj_vector(0); if(!targetObj || targetObj.getState() == STATE_DIE){ appendage.setValid(false); return; } if(!isSameObject(targetObj, parentObj)) return; if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; if(parentObj.getState() == STATE_ATTACK) return; local sqrChr = sq_GetCNRDObjectToSQRCharacter(targetObj); local loadSlot = sqrChr.sq_GetSkillLoad(SKILL_BYKK_BLESSOFANGEL); local maxCount = sq_GetIntData(sqrChr, SKILL_BYKK_BLESSOFANGEL, 3); if(loadSlot){ local count = loadSlot.getRemainLoadNumber(); if(count + 1 <= maxCount) loadSlot.increaseLoadCount(1); } } function onEnd_appendage_at_blessofangel(appendage) { if(!appendage) return; local parentObj = appendage.getParent(); if(!parentObj || parentObj.getState() == STATE_DIE){ appendage.setValid(false); return; } local targetObj = appendage.getVar("tar").get_obj_vector(0); if(!targetObj || targetObj.getState() == STATE_DIE){ appendage.setValid(false); return; } if(!isSameObject(targetObj, parentObj)) return; local sqrChr = sq_GetCNRDObjectToSQRCharacter(targetObj); local loadSlot = sqrChr.sq_GetSkillLoad(SKILL_BYKK_BLESSOFANGEL); if(loadSlot) sqrChr.sq_RemoveSkillLoad(SKILL_BYKK_BLESSOFANGEL); sqrChr.getVar("Blessofangel_Bool").setBool(0, false); }