//圣光普照 function checkExecutableSkill_Miraclechine(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_MIRACLECHINE); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_MIRACLECHINE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Miraclechine(obj) { if (!obj) return false; return true; } function onSetState_Miraclechine(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_MIRACLESHINE01_02); 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_MIRACLESHINE"); obj.sq_PlaySound("MIRACLESHINE_CAST"); break; case 1: obj.sq_SetCurrentAnimation(ATPANI_BYKK_MIRACLESHINE02_02); sq_flashScreen(obj,0,80,0,127, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); local targetMax = sq_GetIntData(obj, SKILL_BYKK_MIRACLECHINE, 10); local firstTargetXRange = sq_GetIntData(obj, SKILL_BYKK_MIRACLECHINE, 1); local firstTargetYRange = sq_GetIntData(obj, SKILL_BYKK_MIRACLECHINE, 2); local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_MIRACLECHINE, -1, 1, 1.0); local hitTime = sq_GetIntData(obj, SKILL_BYKK_MIRACLECHINE, 8); local hitMax = sq_GetIntData(obj, SKILL_BYKK_MIRACLECHINE, 9); local addRate = sq_GetIntData(obj, SKILL_BYKK_MIRACLECHINE, 13) / 10; local HP_healRate = sq_GetLevelData(obj, SKILL_BYKK_MIRACLECHINE, 0, sq_GetSkillLevel(obj, SKILL_BYKK_MIRACLECHINE)); // if(obj.isMyControlObject()){ if(sq_GetLevelData(obj, SKILL_BYKK_MIRACLECHINE, 2, sq_GetSkillLevel(obj, SKILL_BYKK_MIRACLECHINE)) > 0){//stone createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,250,0,100,obj.getDirection(),1,SKILL_BYKK_MIRACLECHINE,10,power,hitTime,hitMax,HP_healRate,0,0,0,0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atmiracleshine/userhealing02_end02.ani", 40, 0, 95); obj.setTimeEvent(0, 500, 1, false); break; } createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,40,0,95,obj.getDirection(),1,SKILL_BYKK_MIRACLECHINE,1,targetMax,firstTargetXRange,firstTargetYRange,power,hitTime,hitMax,addRate,HP_healRate); // } local stateTime = hitTime * hitMax; local currentAni = obj.getCurrentAnimation(); sq_SetFrameDelayTime(currentAni, 1, stateTime); break; } } function onEndCurrentAni_Miraclechine(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_MIRACLECHINE, STATE_PRIORITY_AUTO, true); break; case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Miraclechine(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ } } function onKeyFrameFlag_Miraclechine(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 201: sq_flashScreen(obj,0,0,480,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; } return true; } function onTimeEvent_Miraclechine(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_Miraclechine(obj, new_state) { if(!obj) return; } function setLightning_atp_Miraclechine_bykk(obj, drawObj, targetObj) { if(!obj) return; //if(!pTargetChr) return; local X = drawObj.getXPos(); local Y = drawObj.getYPos(); local Z = drawObj.getZPos(); local pAni = drawObj.getCurrentAnimation(); local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); local posX = activeObj.getXPos(); local posY = activeObj.getYPos() + 1; local posZ = activeObj.getZPos() + (sq_GetObjectHeight(activeObj) / 2); if(posX == -1) return; local offset = posX - X; if(offset < 0) drawObj.setCurrentDirection(ENUM_DIRECTION_LEFT); else drawObj.setCurrentDirection(ENUM_DIRECTION_RIGHT); local distance = sq_GetDistance( X, Y - Z, posX, posY - posZ, true); local w = posX - X; if(w < 0) w = -w; local h = (posY) - (Y); local width = sq_Abs(posX - X); local angle = sq_Atan2( h.tofloat(), width.tofloat()); angle = -angle; local nRevision = distance; local cos = nRevision.tofloat() * sq_Cos(angle); local sin = nRevision.tofloat() * sq_Sin(angle); local nX = sq_Abs( cos.tointeger() ); local nY = sq_Abs( sin.tointeger() ); sq_SetfRotateAngle(pAni, angle); local dis = 300; local cos_x = dis.tofloat() * sq_Cos(angle); local sin_y = dis.tofloat() * sq_Sin(angle); local nW = sq_Abs( cos_x.tointeger() ); local nH = sq_Abs( sin_y.tointeger() ); local wRate = width.tofloat() / nW.tofloat(); local hRate = h.tofloat() / nH.tofloat(); pAni.setImageRate(wRate.tofloat(), hRate.tofloat()); } //救赎彼岸:惩戒圣枪 function checkExecutableSkill_Brionac(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BRIONAC); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_BRIONAC, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Brionac(obj) { if (!obj) return false; return true; } function onSetState_Brionac(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_BRIONACBODY_BODY); obj.sq_PlaySound("R_PW_BRUNAQ"); obj.sq_PlaySound("BRUNAQ_CAST"); break; } // obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(0, 5); local delay2 = currentAni.getDelaySum(5, 11); sq_flashScreen(obj,delay,delay2,delay,150, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); } function onEndCurrentAni_Brionac(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_Brionac(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ } } function onKeyFrameFlag_Brionac(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 102: //`HoldStart` 18 0 -50 obj.getVar("Brionac_Tar").clear_obj_vector(); local objectManager = obj.getObjectManager(); local objectNumber = objectManager.getCollisionObjectNumber(); for (local i = 0; i < objectNumber; i++){ local object = objectManager.getCollisionObject(i); if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj)){ if(!obj.getVar("Brionac_Tar").is_obj_vector(object)) obj.getVar("Brionac_Tar").push_obj_vector(object); local AddAppendage; if(CNSquirrelAppendage.sq_IsAppendAppendage(object, APDPATH_BRIONAC)) AddAppendage = CNSquirrelAppendage.sq_GetAppendage(object, APDPATH_BRIONAC); else AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(object, obj, -1, false, APDPATH_BRIONAC, true); sq_HoldAndDelayDie(object, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); sq_AddDrawOnlyAniFromParent(object, "character/swordman/effect/animation/1_atpriest_bykk/atbrionac/hold/bbholdlight_eff01.ani", 0, 0, sq_GetHeightObject(object) / 2); sq_AddDrawOnlyAniFromParent(object, "character/swordman/effect/animation/1_atpriest_bykk/atbrionac/hold/bbholdaa_eff01.ani", 0, 0, sq_GetHeightObject(object) / 2); sq_AddDrawOnlyAniFromParent(object, "character/swordman/effect/animation/1_atpriest_bykk/atbrionac/hold/bbholdab_eff11.ani", 0, 0, sq_GetHeightObject(object) / 2); } } break; case 104: //`CutIn` 20 0 -42 local currentAni = obj.getCurrentAnimation(); local speedRate = 6000.0 / currentAni.getDelaySum(0, 0).tofloat(); local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atbrionac/cutin/brionaccutina_eff01.ani"; local aniPath2 = "character/swordman/effect/animation/1_atpriest_bykk/atbrionac/cutin/brionaccutinc_bg05.ani"; local pooledObj = createOnlyDrawObject_ATPriest_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj)+142,ENUM_DRAWLAYER_BOTTOM); local pooledObj2 = createOnlyDrawObject_ATPriest_bykk(obj,aniPath2,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj) - 1,sq_GetZPos(obj)+142,ENUM_DRAWLAYER_BOTTOM); local sizeRate = 1.2; local pAni = pooledObj.getCurrentAnimation(); pAni.setImageRateFromOriginal(sizeRate, sizeRate); pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); local pAni2 = pooledObj2.getCurrentAnimation(); pAni2.setImageRateFromOriginal(sizeRate, sizeRate); pAni2.setAutoLayerWorkAnimationAddSizeRate(sizeRate); pAni.setSpeedRate(speedRate); pAni2.setSpeedRate(speedRate); break; case 110: local currentAni = obj.getCurrentAnimation(); local speedRate = 6000.0 / currentAni.getDelaySum(0, 0).tofloat(); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atbrionac/body/brionacbody_eff09.ani", 0, -1, 0); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate); break; case 111: //`FlyStart` 0 0 0 local currentAni = obj.getCurrentAnimation(); obj.setTimeEvent(1, currentAni.getDelaySum(11, 14) / 60, 60, true); break; case 113: sq_SetMyShake(obj, 5, 80); break; case 132: //`DrawSpearCircle` 0 0 0 sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atbrionac/spear/brionaclanceeff_eff08.ani", 0, 0, 0); break; case 152: //`ThrowSpear` 100 -2 0 local currentAni = obj.getCurrentAnimation(); local speedRate = 6000.0 / currentAni.getDelaySum(0, 0).tofloat(); local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BRIONAC, -1, 0, 1.0); local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BRIONAC, -1, 1, 1.0); // if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,-50,-2,sq_GetZPos(obj) - 10,obj.getDirection(),1,SKILL_BYKK_BRIONAC,1,power,power_exp,speedRate.tointeger(),0,0,0,0,0); break; case 153: //`SlowDown` 17 0 1 //`MoveScroll` -8 0 -40 obj.sq_SetXScrollStart(300, 200); break; case 162: //`FlyEnd` -5 0 -27 local currentAni = obj.getCurrentAnimation(); obj.setTimeEvent(2, currentAni.getDelaySum(62, 65) / 60, 60, true); obj.setTimeEvent(3, currentAni.getDelaySum(62, 64), 1, false); break; } return true; } function onTimeEvent_Brionac(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: local v = sq_GetAccel(0, 42, timeEventCount, 30, true); sq_setCurrentAxisPos(obj, 2, v); break; case 2: local v = sq_GetAccel(42, 0, timeEventCount, 60, false); sq_setCurrentAxisPos(obj, 2, v); // if(timeEventCount == 10) obj.setTimeEvent(3, 1000, 1, true); break; case 3: sq_flashScreen(obj,80,200,0,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); sq_SetMyShake(obj, 24, 600); local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BRIONAC, -1, 1, 1.0); createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,150,1,-sq_GetZPos(obj),obj.getDirection(),1,SKILL_BYKK_BRIONAC,2,power_exp,0,0,0,0,0,0,0); break; } } function onEndState_Brionac(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_BRIONAC){ obj.sq_SetXScrollStop(200); local size = obj.getVar("Brionac_Tar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("Brionac_Tar").get_obj_vector(i); if(targetObj){ local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_BRIONAC); } } } } } //圣言十字 function checkExecutableSkill_Cruxofshapiel(obj) { if (!obj) return false; if(obj.getVar("cruxofshapiel_bool").getBool(0)){ 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, ""); } } } return false; } local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CRUXOFSHAPIEL); if (isUse){ obj.getVar("cruxofshapiel_obj").clear_obj_vector(); obj.getVar("cruxofshapiel_bool").setBool(0, false); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_CRUXOFSHAPIEL, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Cruxofshapiel(obj) { if (!obj) return false; return true; } function onSetState_Cruxofshapiel(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_CRUXOFSHAPIELREADY_BODY); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); local speedRate = 4100.0 / currentAni.getDelaySum(0, 0).tofloat(); local delay1 = 150 / speedRate.tointeger() * 100, delay2 = 1800 / speedRate.tointeger() * 100, delay3 = 400 / speedRate.tointeger() * 100; sq_flashScreen(obj,delay1,delay2,delay3,204, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); } function onEndCurrentAni_Cruxofshapiel(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_Cruxofshapiel(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ } } function onKeyFrameFlag_Cruxofshapiel(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 108: obj.sq_PlaySound("R_PW_CRUXOFSHAPIEL"); obj.sq_PlaySound("CRUXOFSHAPIEL_SHOT"); break; case 109: //`CreateCruxOfShapiel` 0 0 0 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); break; } return true; } function onTimeEvent_Cruxofshapiel(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: break; } } function onEndState_Cruxofshapiel(obj, new_state) { if(!obj) return; } ////////////////////女圣骑设置 function setSkillBonusBate_Crusader_bykk(obj) { local bonusRate = 1000; if(sq_GetSkillLevel(obj, SKILL_BYKK_CRUSADE) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_CRUSADE, 6, sq_GetSkillLevel(obj, SKILL_BYKK_CRUSADE))) / 1000; print("bonusRate1 = "+bonusRate); if(sq_GetSkillLevel(obj, SKILL_BYKK_LUCULENTUISANGEL) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_LUCULENTUISANGEL, 0, sq_GetSkillLevel(obj, SKILL_BYKK_LUCULENTUISANGEL))) / 1000; print("bonusRate2 = "+bonusRate); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_BLESSOFCOURAGE)) bonusRate * (1000 + bonusRate + sq_GetLevelData(obj, SKILL_BYKK_BLESSOFCOURAGE, 7, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFCOURAGE))) / 1000; print("bonusRate3 = "+bonusRate); obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); //sq_SetSkillAttackBonus(obj, bonusRate); } function onStartDungeon_Crusader_bykk(obj) { local apdPath = [APDPATH_BLESSOFCOURAGE, APDPATH_BLESSOFPROTECTION, APDPATH_HOLYLIGHT, APDPATH_EDIFICATION]; for(local i = 0; i < apdPath.len(); i++){ local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, apdPath[i]); if(AddAppendage) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath[i]); } setSkillBonusBate_Crusader_bykk(obj); local now_mgAttack = sq_GetCharacterAttribute(0x2394);//1000;// now_mgAttack = now_mgAttack * (100 + sq_GetIntData(obj, 169, 102)) / 100; obj.getVar("isReset").setInt(0, 1); obj.getVar("mgAttackSave").setInt(0, now_mgAttack); print("now_mgAttack = "+now_mgAttack); } function retset_Crusader_bykk(obj) { setSkillBonusBate_Crusader_bykk(obj); if(obj.getVar("mgAttackSave").getInt(0) > 0) return; local now_mgAttack = sq_GetCharacterAttribute(0x2394);//1000;// now_mgAttack = now_mgAttack * (100 + sq_GetIntData(obj, 169, 102)) / 100; obj.getVar("mgAttackSave").setInt(0, now_mgAttack); print("now_mgAttack = "+now_mgAttack); } function procSkill_Crusader_bykk(obj) { if(obj.getVar("canUseSkill").getBool(0)){ obj.setSkillCommandEnable(SKILL_BYKK_BLESSOFCOURAGE, false); // obj.setSkillCommandEnable(SKILL_BYKK_CRUXOFVICTORIA, false); } if(sq_GetIntData(obj, SKILL_BYKK_REPENTENCESMASH, 10) > 0 && sq_GetIntData(obj, SKILL_BYKK_REPENTENCESMASH, 10) != 5000){ local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_REPENTENCESMASH); if(loadSlot){ if(!loadSlot.isCooling()){ local getNumber = loadSlot.getRemainLoadNumber(); if(getNumber + 1 <= 2){ loadSlot.increaseLoadCount(1); } } } else{ local coolTime = 15000; if(sq_GetIntData(obj, SKILL_BYKK_REPENTENCESMASH, 10) > 5000) coolTime = 10000; obj.sq_AddSkillLoad(SKILL_BYKK_REPENTENCESMASH, 112, 2, coolTime); } } else{ local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_REPENTENCESMASH); if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_REPENTENCESMASH); } } function setState_Crusader_canUseSkill(obj, state, datas, isResetTimer) { if(state == 13 && (sq_GetVectorData(datas, 2) == 7 || sq_GetVectorData(datas, 2) == 53)){ print("test"); 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(!CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_BLESSOFCOURAGEBOOL)) CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, APDPATH_BLESSOFCOURAGEBOOL, true); if(sq_getJob(sqrChr) == ENUM_CHARACTERJOB_AT_MAGE && sq_getGrowType(sqrChr) == 1){ sqrChr.getVar("canUseSkill").setBool(0, true); count = count + 1; } } } if(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(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_BLESSOFCOURAGE)) CNSquirrelAppendage.sq_RemoveAppendage(sqrChr, APDPATH_BLESSOFCOURAGE); } } } } } /////////////////////////////被动 function onStart_appendage_atpriest_aria(appendage) { if(!appendage) return; local parentObj = appendage.getParent(); local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); if(!obj || obj.getState() == STATE_DIE) return; local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_ARIA); local mgAttack = sq_GetLevelData(obj, SKILL_BYKK_ARIA, 0, skillLevel); local change_appendage = appendage.sq_getChangeStatus("atpriest_aria"); if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("atpriest_aria", obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, (mgAttack).tofloat()); } } function onStart_appendage_atpriest_blessofraphael(appendage) { if(!appendage) return; local parentObj = appendage.getParent(); local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); if(!obj || obj.getState() == STATE_DIE) return; local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL); local mgAttack = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFRAPHAEL, 0, skillLevel); local mgctlRate = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFRAPHAEL, 1, skillLevel); local mgctldmgRate = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFRAPHAEL, 2, skillLevel); local change_appendage = appendage.sq_getChangeStatus("atpriest_blessofraphael"); if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("atpriest_blessofraphael", obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, (mgAttack).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_HIT_RATE, false, (mgctlRate * 0.1).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_DAMAGE_RATE, false, (mgAttack * 0.1 / 0.667).tofloat()); } } function onStart_appendage_atcrusader_weaponmastery(appendage) { if(!appendage) return; local parentObj = appendage.getParent(); local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); if(!obj || obj.getState() == STATE_DIE) return; local weaponType = obj.getWeaponSubType(); if(weaponType == -1) return; if(weaponType == 0){ local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CROSSMASTERY); local adtEquAttack = sq_GetLevelData(obj, SKILL_BYKK_CROSSMASTERY, 0, skillLevel); local castSpeed = sq_GetLevelData(obj, SKILL_BYKK_CROSSMASTERY, 1, skillLevel); local mgctlRate = sq_GetLevelData(obj, SKILL_BYKK_CROSSMASTERY, 2, skillLevel); local change_appendage = appendage.sq_getChangeStatus("crossmastery"); if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("crossmastery",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK , true, (adtEquAttack * 0.1).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_CAST_SPEED, false, (castSpeed * 0.1).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_BACK_ATTACK_CRITICAL, false, (mgctlRate * 0.1).tofloat()); } } } function onStart_appendage_atpriest_crusade(appendage) { if(!appendage) return; local parentObj = appendage.getParent(); local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); if(!obj || obj.getState() == STATE_DIE) return; local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CRUSADE); local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_CRUSADE, 5, skillLevel); local change_appendage = appendage.sq_getChangeStatus("atpriest_crusade"); if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("atpriest_crusade", obj, 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 * 0.1).tofloat()); } } function onStart_appendage_atpriest_graceofdevine(appendage) { if(!appendage) return; local parentObj = appendage.getParent(); local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); if(!obj || obj.getState() == STATE_DIE) return; local lightTolerance = sq_GetIntData(obj, SKILL_BYKK_GRACEOFDEVINE, 2); local actTolerance = sq_GetIntData(obj, SKILL_BYKK_GRACEOFDEVINE, 3); local countMax = sq_GetIntData(obj, SKILL_BYKK_GRACEOFDEVINE, 0); local debuffTime = sq_GetIntData(obj, SKILL_BYKK_GRACEOFDEVINE, 1); local decrease = sq_GetLevelData(obj, SKILL_BYKK_GRACEOFDEVINE, 0, sq_GetSkillLevel(obj, SKILL_BYKK_GRACEOFDEVINE)); appendage.getVar("custom").setInt(10, countMax); appendage.getVar("custom").setInt(11, debuffTime); appendage.getVar("custom").setInt(12, decrease); local change_appendage = appendage.sq_getChangeStatus("atpriest_graceofdevine"); if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("atpriest_graceofdevine", obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_LIGHT, false, (lightTolerance).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_ACTIVESTATUS_TOLERANCE_ALL, false, (actTolerance).tofloat()); } } function onAttackParent_appendage_atpriest_graceofdevine(appendage, realAttacker, damager, boundingBox, isStuck) { if(!appendage) return; return; if(isStuck) return; local parentObj = appendage.getParent(); local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); if(!obj || obj.getState() == STATE_DIE) return; if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; local activeObj = sq_GetCNRDObjectToActiveObject(damager); local AddAppendage; if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_GRACEOFDEVINEDEBUFF)) AddAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, APDPATH_GRACEOFDEVINEDEBUFF); else{ AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_GRACEOFDEVINEDEBUFF, true); AddAppendage.getVar("debuffTime").setInt(10, appendage.getVar("custom").getInt(11)); } local timer = AddAppendage.getVar().get_ct_vector(0); if(!timer){ AddAppendage.getVar().clear_ct_vector(); AddAppendage.getVar().push_ct_vector(); timer = AddAppendage.getVar().get_ct_vector(0); } timer.Reset(); timer.Start(10000,0); if(AddAppendage.getVar("count").getInt(10) < appendage.getVar("custom").getInt(10)){ AddAppendage.getVar("count").setInt(10, AddAppendage.getVar("count").getInt(10) + 1); } local decrease = appendage.getVar("custom").getInt(12) * AddAppendage.getVar("count").getInt(10); local change_appendage = AddAppendage.sq_getChangeStatus("atpriest_graceofdevine"); if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("atpriest_graceofdevine", activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_ALL, false, (decrease * -1).tofloat()); } } function proc_appendage_graceofdevinedebuff(appendage) { if(!appendage) return; local parentObj = appendage.getParent(); if(!parentObj || parentObj.getState() == STATE_DIE){ appendage.setValid(false); return; } local timer = appendage.getVar().get_ct_vector(0); if(timer){ local currentT = timer.Get(); if(currentT > appendage.getVar("debuffTime").getInt(10)){ appendage.getVar("count").setInt(10, 0); timer.Reset(); timer.Start(10000,0); } } } function onStart_appendage_atpriest_luculentuisangel(appendage) { if(!appendage) return; local parentObj = appendage.getParent(); local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); if(!obj || obj.getState() == STATE_DIE) return; local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_LUCULENTUISANGEL); local mgAttack = sq_GetLevelData(obj, SKILL_BYKK_LUCULENTUISANGEL, 1, skillLevel); local change_appendage = appendage.sq_getChangeStatus("atpriest_luculentuisangel"); if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("atpriest_luculentuisangel", obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, (mgAttack).tofloat()); } } function onStart_appendage_atpriest_zealoffaith(appendage) { if(!appendage) return; local parentObj = appendage.getParent(); local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_ZEALOFFAITH); local addAttack = sq_GetLevelData(obj, SKILL_BYKK_ZEALOFFAITH, 0, skillLevel); local addDefense = sq_GetLevelData(obj, SKILL_BYKK_ZEALOFFAITH, 1, skillLevel); local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_ZEALOFFAITH, 2, skillLevel); local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_ZEALOFFAITH, 3, skillLevel); // local addTime = sq_GetIntData(obj, SKILL_BYKK_ZEALOFFAITH, 1); // appendage.getVar("custom").setInt(10, addAttack); // appendage.getVar("custom").setInt(11, addDefense); // appendage.getVar("custom").setInt(12, attackSpeed); // appendage.getVar("custom").setInt(13, moveSpeed); // appendage.getVar("custom").setInt(14, addTime); // appendage.getVar("user").clear_obj_vector(); // appendage.getVar().clear_timer_vector(); // appendage.getVar().push_timer_vector(); // local t = appendage.getVar().get_timer_vector(0); // t.setParameter(1000, -1); // t.resetInstant(0); local change_appendage = appendage.sq_getChangeStatus("atpriest_luculentuisangel"); if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("atpriest_luculentuisangel", obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, false, (addAttack).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, (addAttack).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_DEFENSE, false, (addDefense).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_DEFENSE, false, (addDefense).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed).tofloat()); } } function proc_appendage_atpriest_zealoffaith(appendage) { if(!appendage) return; // if(sq_GetCurrentModuleType() != 3) return; local parentObj = appendage.getParent(); local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); if(!obj || obj.getState() == STATE_DIE){ appendage.setValid(false); return; } // local t = appendage.getVar().get_timer_vector(0); // local currentT = appendage.getTimer().Get(); // if(t && t.isOnEvent(currentT)){ // local addAttack = appendage.getVar("custom").getInt(10); // local addDefense = appendage.getVar("custom").getInt(11); // local attackSpeed = appendage.getVar("custom").getInt(12); // local moveSpeed = appendage.getVar("custom").getInt(13); // 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)){// && isSameObject(obj, object) // local sqrChr = sq_GetCNRDObjectToSQRCharacter(object); // if(sqrChr.getState() == STATE_DIE || sqrChr.getHp() <= 0) continue; // if(!CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_ZEALOFFAITHBUFF)){ // if(!appendage.getVar("user").is_obj_vector(sqrChr)) appendage.getVar("user").push_obj_vector(sqrChr); // local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, APDPATH_ZEALOFFAITHBUFF, true); // AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_ZEALOFFAITH, sq_GetSkillLevel(obj, SKILL_BYKK_ZEALOFFAITH)); // CNSquirrelAppendage.sq_Append(AddAppendage, sqrChr, obj, true); // local tiaozheng = 1; // if(isSameObject(obj, sqrChr)){ // tiaozheng = 0; // } // local change_appendage = AddAppendage.sq_getChangeStatus("atpriest_zealoffaithbuff"); // if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("atpriest_zealoffaithbuff", sqrChr, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); // if(change_appendage){ // change_appendage.clearParameter(); // change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, false, (addAttack * tiaozheng).tofloat()); // change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, (addAttack * tiaozheng).tofloat()); // change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_DEFENSE, false, (addDefense).tofloat()); // change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_DEFENSE, false, (addDefense).tofloat()); // change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed).tofloat()); // change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed).tofloat()); // } // } // } // } // } } function onAttackParent_appendage_atpriest_zealoffaith(appendage, realAttacker, damager, boundingBox, isStuck) { if(!appendage) return; return; // if(isStuck) return; // local parentObj = appendage.getParent(); // local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); // if(!obj || obj.getState() == STATE_DIE) return; // if(obj.getState() == STATE_ATTACK || obj.getState() == STATE_DASH_ATTACK || obj.getState() == STATE_JUMP_ATTACK) return; // if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; // local size = appendage.getVar("user").get_obj_vector_size(); // if(size > 0){ // local addTime = appendage.getVar("custom").getInt(14); // for(local i = 0; i < size; i++){ // local sqr = appendage.getVar("user").get_obj_vector(i); // if(sqr){ // local activeObj = sq_GetCNRDObjectToActiveObject(sqr); // if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFCOURAGE)){ // local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, APDPATH_BLESSOFCOURAGE); // if(AddAppendage){ // local useTime = AddAppendage.getTimer().Get(); // local validT = AddAppendage.getAppendageInfo().getValidTime(); // AddAppendage.sq_SetValidTime(validT + addTime - useTime); // print(validT + addTime - useTime); // AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_BLESSOFCOURAGE, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFCOURAGE)); // CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, obj, true); // local phAttack = AddAppendage.getVar("custom").getInt(10); // local mgAttack = AddAppendage.getVar("custom").getInt(11); // local adtAttack = AddAppendage.getVar("custom").getInt(12); // local phlAttack = AddAppendage.getVar("custom").getInt(13); // local mglAttack = AddAppendage.getVar("custom").getInt(14); // local stuckRate = AddAppendage.getVar("custom").getInt(15); // local change_appendage = AddAppendage.sq_getChangeStatus("AT_Blessofcourage"); // if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Blessofcourage",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).tofloat()); // change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, false, (mgAttack).tofloat()); // change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_PHYSICAL_GENUINE_ATTACK, false, (adtAttack).tofloat()); // change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_MAGICAL_GENUINE_ATTACK, false, (adtAttack).tofloat()); // change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, false, (phlAttack).tofloat()); // change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, (mglAttack).tofloat()); // change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK, false, (stuckRate * -0.1).tofloat()); // } // } // } // if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFPROTECTION)){ // local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, APDPATH_BLESSOFPROTECTION); // if(AddAppendage){ // local useTime = AddAppendage.getTimer().Get(); // local validT = AddAppendage.getAppendageInfo().getValidTime(); // AddAppendage.sq_SetValidTime(validT + addTime - useTime); // AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_BLESSOFPROTECTION, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFPROTECTION)); // CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, obj, true); // local hpMax = AddAppendage.getVar("custom").getInt(11); // local mpMax = AddAppendage.getVar("custom").getInt(12); // local phDefense = AddAppendage.getVar("custom").getInt(13); // local mgDefense = AddAppendage.getVar("custom").getInt(14); // local phlDefense = AddAppendage.getVar("custom").getInt(15); // local mglDefense = AddAppendage.getVar("custom").getInt(16); // local change_appendage = AddAppendage.sq_getChangeStatus("AT_Blessofprotection"); // if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Blessofprotection",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); // 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()); // } // } // } // } // } // } } function proc_appendage_atpriest_zealoffaithbuff(appendage) { if(!appendage) return; local parentObj = appendage.getParent(); if(!parentObj || parentObj.getState() == STATE_DIE){ appendage.setValid(false); return; } local sourceObj = appendage.getSource(); if(!sourceObj || sourceObj.getState() == STATE_DIE){ appendage.setValid(false); return; } } //////////////////////////////////////////////////////////////// function getAttackAni_DemonicSwordman(obj, index) { if(!obj) return null; local ani = obj.sq_GetAttackAni(index); if(sq_GetSkillLevel(obj, SKILL_BYKK_BODYPRESSEDSIN) > 0){ ani = sq_GetCustomAni(obj, ATPANI_BYKK_MISTRESS_ATTACK1 + index); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ local aniName = ["demonizationattack_basic_a_body","demonizationattack_basic_b_body","demonizationattack_basic_c_body"]; ani = getCurrentAnimation_demonization(obj, aniName[index], false); } } else if(sq_GetSkillLevel(obj, SKILL_BYKK_CRUSADE) > 0){ ani = sq_GetCustomAni(obj, ATPANI_BYKK_CRUSADEATTACK1_BODY + index); } else if(sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0){ ani = sq_GetCustomAni(obj, ATPANI_BYKK_INQUISITOR_ATTACK1 + index); } return ani; } function getStayAni_DemonicSwordman(obj) { if(!obj) return null; local ani = obj.sq_GetStayAni(); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ ani = getCurrentAnimation_demonization(obj, "demonization_stay", false); return ani; } return ani; } function getMoveAni_DemonicSwordman(obj) { if(!obj) return null; local ani = obj.sq_GetMoveAni(); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ ani = getCurrentAnimation_demonization(obj, "demonization_move", false); return ani; } return ani; } function getSitAni_DemonicSwordman(obj) { if(!obj) return null; local ani = obj.sq_GetSitAni(); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ ani = getCurrentAnimation_demonization(obj, "demonization_sit", false); return ani; } return ani; } function getDamageAni_DemonicSwordman(obj, index) { if(!obj) return null; local ani = obj.sq_GetDamageAni(index); local aniName = ["demonization_damage1","demonization_damage2"]; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ ani = getCurrentAnimation_demonization(obj, aniName[index], false); return ani; } return ani; } function getDownAni_DemonicSwordman(obj) { if(!obj) return null; local ani = obj.sq_GetDownAni(); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ ani = getCurrentAnimation_demonization(obj, "demonization_down", false); return ani; } return ani; } function getOverturnAni_DemonicSwordman(obj) { if(!obj) return null; local ani = obj.sq_GetOverturnAni(); return ani; } function getJumpAni_DemonicSwordman(obj) { if(!obj) return null; local ani = obj.sq_GetJumpAni(); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ ani = getCurrentAnimation_demonization(obj, "demonization_jump", false); return ani; } return ani; } function getJumpAttackAni_DemonicSwordman(obj) { if(!obj) return null; local ani = obj.sq_GetJumpAttackAni(); if(sq_GetSkillLevel(obj, SKILL_BYKK_CRUSADE) > 0){ ani = sq_GetCustomAni(obj, ATPANI_BYKK_CRUSADEJUMPATTACK_BODY); } else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ ani = getCurrentAnimation_demonization(obj, "demonizationattack_jump_body", false); return ani; } return ani; } function getRestAni_DemonicSwordman(obj) { if(!obj) return null; local ani = obj.sq_GetRestAni(); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ ani = getCurrentAnimation_demonization(obj, "demonization_stay", false); return ani; } return ani; } function getThrowChargeAni_DemonicSwordman(obj, index) { if(!obj) return null; local ani = obj.sq_GetThrowChargeAni(index); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ ani = getCurrentAnimation_demonization(obj, "demonization_throw1", false); return ani; } return ani; } function getThrowShootAni_DemonicSwordman(obj, index) { if(!obj) return null; local ani = obj.sq_GetThrowShootAni(index); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ ani = getCurrentAnimation_demonization(obj, "demonization_throw2", false); return ani; } return ani; } function getDashAni_DemonicSwordman(obj) { if(!obj) return null; local ani = obj.sq_GetDashAni(); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ ani = getCurrentAnimation_demonization(obj, "demonization_dash", false); return ani; } return ani; } function getDashAttackAni_DemonicSwordman(obj) { if(!obj) return null; local ani = obj.sq_GetDashAttackAni(); if(sq_GetSkillLevel(obj, SKILL_BYKK_CRUSADE) > 0){ ani = sq_GetCustomAni(obj, ATPANI_BYKK_CRUSADEDASHATTACK_BODY); } else if(sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0){ ani = sq_GetCustomAni(obj, ATPANI_BYKK_HOLYFLAME_FRONT_BODY); } else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ ani = getCurrentAnimation_demonization(obj, "demonizationattack_dash_body", false); return ani; } return ani; } function getGetItemAni_DemonicSwordman(obj) { if(!obj) return null; local ani = obj.sq_GetGetItemAni(); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ ani = getCurrentAnimation_demonization(obj, "demonization_sit", false); return ani; } return ani; } function getBuffAni_DemonicSwordman(obj) { if(!obj) return null; local ani = obj.sq_GetBuffAni(); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ ani = getCurrentAnimation_demonization(obj, "demonization_buff", false); return ani; } return ani; } function getDefaultAttackInfo_DemonicSwordman(obj, index) { if (!obj) return null; local attackInfo = obj.sq_GetDefaultAttackInfo(index); local growType = sq_getGrowType(obj); switch(growType){ case 1: if(index == 4) index = 0; attackInfo = sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_CRUSADERATTACK1 + index); break; case 2: attackInfo = sq_GetCustomAttackInfo(obj, ATPATK_BYKK_INQUISITOR_ATTACK1 + index); break; } return attackInfo; } function getDashAttackInfo_DemonicSwordman(obj) { if (!obj) return null; local attackInfo = obj.sq_GetDashAttackInfo(); if(sq_getGrowType(obj) == 1){ attackInfo = sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_CRUSADERDASHATTACK); } return attackInfo; } function getJumpAttackInfo_DemonicSwordman(obj) { if (!obj) return null; local attackInfo = obj.sq_GetJumpAttackInfo(); if(sq_getGrowType(obj) == 1){ attackInfo = sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_CRUSADERJUMPATTACK); } return attackInfo; } function onSetState_ATPriestAttack(obj, state, datas, isResetTimer) { if(sq_getGrowType(obj) == 4){ if(sq_GetVectorData(datas, 0) != 0) return; if(sq_GetSkillLevel(obj, SKILL_BYKK_BODYPRESSEDSIN) > 0){ //print("test"); obj.sq_IntVectClear(); obj.sq_IntVectPush(10); obj.sq_AddSetStatePacket(STATE_BYKK_DEPRAVITYSEVENSINS, STATE_PRIORITY_IGNORE_FORCE, true); } } else if(sq_getGrowType(obj) == 1) { local attackIndex = sq_GetVectorData(datas, 0); switch(attackIndex){ case 0: obj.sq_PlaySound("R_PW_1ATK"); break; case 1: obj.sq_PlaySound("R_PW_2ATK"); break; case 2: obj.sq_PlaySound("R_PW_3ATK"); break; } } } function onAfterSetState_ATPriestAttack(obj, state, datas, isResetTimer) { // local growType = sq_getGrowType(obj); switch(growType){ case 2: if(sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0){ local attackIndex = obj.getAttackIndex(); switch(attackIndex){ case 0: obj.sq_PlaySound("R_PW_INQUISITOR_READING_01"); obj.sq_PlaySound("R_PW_1ATK"); break; case 1: obj.sq_PlaySound("R_PW_INQUISITOR_READING_02"); obj.sq_PlaySound("R_PW_2ATK"); break; case 2: obj.sq_PlaySound("R_PW_INQUISITOR_READING_03"); obj.sq_PlaySound("R_PW_3ATK"); break; } local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); if(loadSlot){ local attackInfo = sq_GetCurrentAttackInfo(obj); attackInfo.setElement(ENUM_ELEMENT_LIGHT); attackInfo.setElement(ENUM_ELEMENT_FIRE); switch(attackIndex){ case 0: obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/attack1.ani"), 0, 0); sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atwillofinquisitor/attack1_holyflamea_1hitsmokea.ani", 0, 1, 0); break; case 1: obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/attack2.ani"), 0, 0); sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atwillofinquisitor/attack2_holyflame_2hitsmoke.ani", 0, 1, 0); local currentAni = obj.getCurrentAnimation(); obj.setTimeEvent(1, currentAni.getDelaySum(0, 3), 1, false); break; case 2: obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/attack3.ani"), 0, 0); sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atwillofinquisitor/attack3_holyflame_3hitsmoke.ani", 0, 1, 0); local currentAni = obj.getCurrentAnimation(); obj.setTimeEvent(1, currentAni.getDelaySum(0, 6), 1, false); break; } } } break; } obj.getVar("cansetAttackInfo").setBool(0, true); } function onTimeEvent_ATPriestAttack(obj, timeEventIndex, timeEventCount) { if(!obj) return false; local growType = sq_getGrowType(obj); switch(growType){ case 2: switch(timeEventIndex){ case 1: local epObj = obj.getVar("EssenceofPhlegeObj").get_obj_vector(0); if(epObj){ local colObj = sq_GetCNRDObjectToCollisionObject(epObj); if(((sq_GetXPos(colObj) - sq_GetXPos(obj)) <= 200 && sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT || (sq_GetXPos(obj) - sq_GetXPos(colObj)) <= 200 && sq_GetDirection(obj) == ENUM_DIRECTION_LEFT) && sq_Abs(sq_GetYPos(colObj) - sq_GetYPos(obj)) <= 40){ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ESSENCEOFPHLEGE, -1, 1, 1.0); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 13); createSkillPassive_ATPriest_bykk(obj,colObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,-sq_GetZPos(obj) + 100,obj.getDirection(),2,SKILL_BYKK_ESSENCEOFPHLEGE,5,totalDamage,sizeRate,0,0,0,0,0,0); sq_SetMyShake(obj, 2, 100); colObj.setTimeEvent(1, 1000, 1, true); return; } } break; } break; } } function onBeforeAttack_ATPriestAttack(obj,damager,boundingBox,isStuck) { if(obj.getVar("cansetAttackInfo").getBool(0)){ obj.getVar("cansetAttackInfo").setBool(0, false); obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),obj.getState()); sq_SetCurrentAttackInfo(obj, sq_GetCurrentAttackInfo(obj)); } local growType = sq_getGrowType(obj); switch(growType){ case 1: if(sq_GetSkillLevel(obj, SKILL_BYKK_GRACEOFDEVINE) > 0){ local attackInfo = sq_GetCurrentAttackInfo(obj); attackInfo.setElement(ENUM_ELEMENT_LIGHT); } break; } } function onAttack_ATPriestAttack(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return; if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); if(loadSlot) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); } } function getAttackCancelStartFrameSize_DemonicSwordman(obj) { local maxAttackNumber = obj.sq_GetAttackCancelStartFrameSize(); if(sq_getGrowType(obj) == 2){ if(sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0) maxAttackNumber = 2; } return maxAttackNumber; } function getAttackCancelStartFrame_DemonicSwordman(obj, index) { if(!obj) return null; local growType = sq_getGrowType(obj); local frm = obj.sq_GetAttackCancelStartFrame(index); switch(growType){ case 1: switch(index){ case 0: frm = 2; break; case 1: frm = 3; break; } break; case 2: frm = 3; break; } return frm; } function onSetState_ATPriestDashAttack(obj, state, datas, isResetTimer) { if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ obj.sq_PlaySound("PW_DASHATK_DM"); obj.sq_PlaySound("R_SCYTHE"); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_dash_glow.ani"), 0, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_dash_staydusta.ani", 0, -1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_dash_staydustb.ani", 0, -1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_dash_staydustc.ani", 0, -1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_dash_stayrosea.ani", 0, 1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_dash_stayroseb.ani", 0, 1, 0); } else obj.sq_PlaySound("R_PW_3ATK"); } function onAfterSetState_ATPriestDashAttack(obj, state, datas, isResetTimer) { local growType = sq_getGrowType(obj); switch(growType){ case 2: if(sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0){ obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atwillofinquisitor/dashattack_effect_dashtail.ani"), 0, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atwillofinquisitor/dashattack_effect_dashdust.ani", 0, 1, 0); obj.sq_PlaySound("R_PW_3ATK"); local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); if(loadSlot){ obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/dashattack.ani"), 0, 0); sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atholyflame/holyflame_beffect2_bdodge2.ani", 125, 0, 0); local currentAni = obj.getCurrentAnimation(); obj.setTimeEvent(1, currentAni.getDelaySum(0, 1), 1, false); } } break; } obj.getVar("cansetAttackInfo").setBool(0, true); } function onTimeEvent_ATPriestDashAttack(obj, timeEventIndex, timeEventCount) { if(!obj) return false; local growType = sq_getGrowType(obj); switch(growType){ case 2: switch(timeEventIndex){ case 1: local epObj = obj.getVar("EssenceofPhlegeObj").get_obj_vector(0); if(epObj){ local colObj = sq_GetCNRDObjectToCollisionObject(epObj); if(((sq_GetXPos(colObj) - sq_GetXPos(obj)) <= 200 && sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT || (sq_GetXPos(obj) - sq_GetXPos(colObj)) <= 200 && sq_GetDirection(obj) == ENUM_DIRECTION_LEFT) && sq_Abs(sq_GetYPos(colObj) - sq_GetYPos(obj)) <= 40){ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ESSENCEOFPHLEGE, -1, 1, 1.0); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 13); createSkillPassive_ATPriest_bykk(obj,colObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,-sq_GetZPos(obj) + 100,obj.getDirection(),2,SKILL_BYKK_ESSENCEOFPHLEGE,5,totalDamage,sizeRate,0,0,0,0,0,0); sq_SetMyShake(obj, 2, 100); colObj.setTimeEvent(1, 1000, 1, true); return; } } break; } break; } } function onBeforeAttack_ATPriestDashAttack(obj,damager,boundingBox,isStuck) { if(obj.getVar("cansetAttackInfo").getBool(0)){ obj.getVar("cansetAttackInfo").setBool(0, false); obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),obj.getState()); sq_SetCurrentAttackInfo(obj, sq_GetCurrentAttackInfo(obj)); local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); if(loadSlot){ local attackInfo = sq_GetCurrentAttackInfo(obj); attackInfo.setElement(ENUM_ELEMENT_LIGHT); attackInfo.setElement(ENUM_ELEMENT_FIRE); } } if(sq_GetSkillLevel(obj, SKILL_BYKK_GRACEOFDEVINE) > 0){ local attackInfo = sq_GetCurrentAttackInfo(obj); attackInfo.setElement(ENUM_ELEMENT_LIGHT); } } function onAttack_ATPriestDashAttack(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return; if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); if(loadSlot) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); } } function onKeyFrameFlag_ATPriestDashAttack(obj, flagIndex) {} function onSetState_ATPriestJumpAttack(obj, state, datas, isResetTimer) { // print("state = "+state); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){ obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_jump_effb01.ani"), 0, 0); obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_jump_stayrosea.ani"), 0, 0); obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_jump_stayroseb.ani"), 0, 0); obj.sq_PlaySound("PW_JUMPATK_DM"); obj.sq_PlaySound("R_SCYTHE"); } else obj.sq_PlaySound("PW_JUMPATK"); } function onAfterSetState_ATPriestJumpAttack(obj, state, datas, isResetTimer) { local growType = sq_getGrowType(obj); switch(growType){ case 2: if(sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0){ obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atwillofinquisitor/jumpattack_effect_jumptail.ani"), 0, 0); local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); if(loadSlot){ obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/jumpattack.ani"), 0, 0); sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atwillofinquisitor/jumpattack_holyflame_jumpsmoke.ani", 0, 1, 0); } } break; } obj.getVar("cansetAttackInfo").setBool(0, true); } function onBeforeAttack_ATPriestJumpAttack(obj,damager,boundingBox,isStuck) { if(obj.getVar("cansetAttackInfo").getBool(0)){ obj.getVar("cansetAttackInfo").setBool(0, false); obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),obj.getState()); sq_SetCurrentAttackInfo(obj, sq_GetCurrentAttackInfo(obj)); local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); if(loadSlot){ local attackInfo = sq_GetCurrentAttackInfo(obj); attackInfo.setElement(ENUM_ELEMENT_LIGHT); attackInfo.setElement(ENUM_ELEMENT_FIRE); } } if(sq_GetSkillLevel(obj, SKILL_BYKK_GRACEOFDEVINE) > 0){ local attackInfo = sq_GetCurrentAttackInfo(obj); attackInfo.setElement(ENUM_ELEMENT_LIGHT); } } function onAttack_ATPriestJumpAttack(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return; if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); if(loadSlot) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); } } function onKeyFrameFlag_ATPriestJumpAttack(obj, flagIndex) { } function onAfterSetState_ATPriestJump(obj, state, datas, isResetTimer) { local growType = sq_getGrowType(obj); switch(growType){ case 2: local isBackStep = sq_GetVectorData(datas, 1); if(isBackStep == 1 && sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0){ local timer = obj.getVar("ATPriestJumpTimer").get_ct_vector(0); if(!timer){ obj.getVar("ATPriestJumpTimer").clear_ct_vector(); obj.getVar("ATPriestJumpTimer").push_ct_vector(); timer = obj.getVar("ATPriestJumpTimer").get_ct_vector(0); timer.Reset(); timer.Start(10000,0); } obj.getVar("ATPriestJumpSet").setBool(0, true); } local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); if(loadSlot){ obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/jump.ani"), 0, 0); } break; } } function onProc_ATPriestJump(obj) { if(!obj) return; if(obj.getVar("ATPriestJumpSet").getBool(0)){ local timer = obj.getVar("ATPriestJumpTimer").get_ct_vector(0); if(timer){ local currentT = timer.Get(); local coolTime = sq_GetIntData(obj, SKILL_BYKK_WILLOFINQUISITOR, 14); if(currentT >= coolTime){ obj.setSkillCommandEnable(SKILL_BYKK_PATROLBOMB,true); if(obj.sq_IsEnterSkill(SKILL_BYKK_PATROLBOMB) != -1){ obj.getVar("ATPriestJumpSet").setBool(0, false); timer.Reset(); timer.Start(10000,0); obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_PATROLBOMB, STATE_PRIORITY_IGNORE_FORCE, true); return; } obj.setSkillCommandEnable(SKILL_BYKK_ESSENCEOFPHLEGE,true); if(obj.sq_IsEnterSkill(SKILL_BYKK_ESSENCEOFPHLEGE) != -1){ obj.getVar("ATPriestJumpSet").setBool(0, false); timer.Reset(); timer.Start(10000,0); obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_ESSENCEOFPHLEGE, STATE_PRIORITY_IGNORE_FORCE, true); return; } sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){ obj.getVar("ATPriestJumpSet").setBool(0, false); timer.Reset(); timer.Start(10000,0); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_JUMP_ATTACK, STATE_PRIORITY_IGNORE_FORCE, true); return; } } } } } function onEndState_ATPriestJump(obj, new_state) { if(!obj) return; local growType = sq_getGrowType(obj); switch(growType){ case 2: if(obj.getVar("ATPriestJumpSet").getBool(0)) obj.getVar("ATPriestJumpSet").setBool(0, false); break; } } function onAfterSetState_ATPriestStand(obj, state, datas, isResetTimer) { local growType = sq_getGrowType(obj); switch(growType){ case 2: obj.getVar("StaySet").setInt(0, 0); break; } } function onProc_ATPriestStand(obj) { if(!obj) return; local growType = sq_getGrowType(obj); switch(growType){ case 2: local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); if(loadSlot && CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/demonicswordman/2_inquistor/ap_holyflame_buff.nut")){ local poleAni = obj.getCurrentAnimation(); local poleAniFrameNumber = sq_GetAniFrameNumber(poleAni, 0); if(poleAniFrameNumber != obj.getVar("StaySet").getInt(0)){ obj.getVar("StaySet").setInt(0, poleAniFrameNumber); local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/demonicswordman/2_inquistor/ap_holyflame_buff.nut"); if(addAppendage){ addAppendage.sq_DeleteEffectFront(); switch(poleAniFrameNumber){ case 15: addAppendage.sq_AddEffectFront("character/swordman/effect/animation/1_atpriest_bykk/holyflameweaponeffect/rest.ani"); break;//rest case 4: addAppendage.sq_AddEffectFront("character/swordman/effect/animation/1_atpriest_bykk/holyflameweaponeffect/stay.ani"); break;//stay case 8: addAppendage.sq_AddEffectFront("character/swordman/effect/animation/1_atpriest_bykk/holyflameweaponeffect/move.ani"); break;//move } } } } break; } } function onEndState_ATPriestStand(obj, new_state) { if(!obj) return; local growType = sq_getGrowType(obj); switch(growType){ case 2: local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/demonicswordman/2_inquistor/ap_holyflame_buff.nut"); if(addAppendage){ addAppendage.sq_DeleteEffectFront(); obj.getVar("StaySet").setInt(0, 0); } break; } } function onAfterSetState_ATPriestDash(obj, state, datas, isResetTimer) { local growType = sq_getGrowType(obj); switch(growType){ case 2: local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); if(loadSlot){ obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/dash.ani"), 0, 0); } break; } } function onStartDungeon_AtPriest_2bykk(obj) { if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/demonicswordman/2_inquistor/ap_holyflame_buff.nut")) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/demonicswordman/2_inquistor/ap_holyflame_buff.nut"); local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_HOLYFLAME); obj.getVar("isReset").setInt(0, 1); } ////////////////////团长 function onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox) { if(damager.isObjectType(OBJECTTYPE_ACTIVE) && damager.getState() != STATE_DIE){ local activeObj = sq_GetCNRDObjectToActiveObject(damager); local epObj = activeObj.getVar("EssenceofPhlege").get_obj_vector(0); if(epObj){ //character/demonicswordman/2_inquistor/ap_holyflame_hold.nut local colObj = sq_GetCNRDObjectToCollisionObject(epObj); if(colObj.getState() >= 20) return; if(colObj.isExistTimeEvent(1)) colObj.stopTimeEvent(1); if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut")) CNSquirrelAppendage.sq_RemoveAppendage(damager, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut"); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, colObj, -1, false, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut", true); sq_HoldAndDelayDie(damager, colObj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); local lifeTimeForBurning = colObj.getVar("custom").getInt(0); AddAppendage.sq_SetValidTime(lifeTimeForBurning); sq_EffectLayerAppendage(damager,sq_RGB(0,0,0),255,0,0,lifeTimeForBurning + 500); sq_SendHitObjectPacket(colObj,damager,0,0,0); colObj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); colObj.setTimeEvent(2, lifeTimeForBurning - 500, 1, false); } } } //净化火焰瓶 function checkExecutableSkill_PatrolBomb(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PATROLBOMB); if (isUse){ obj.sq_IntVectClear(); if(sq_GetSkillLevel(obj, SKILL_BYKK_POURESSENCE) > 0 && (sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT)) obj.sq_IntVectPush(2); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_PATROLBOMB, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_PatrolBomb(obj) { if (!obj) return false; return true; } function onSetState_PatrolBomb(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_PETROLBOMB_STANDING_BODY); obj.sq_PlaySound("R_PW_PETROL_BOMB"); obj.sq_PlaySound("PETROL_BOMB_READY"); local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); if(loadSlot){ if(loadSlot.getRemainLoadNumber() > 0){ obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/petrolbomb_standing_body.ani"), 0, 0); obj.getVar("PatrolBombSet").setInt(0, 1); loadSlot.decreaseLoadCount(1); } else obj.getVar("PatrolBombSet").setInt(0, 0); } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); obj.setTimeEvent(1, currentAni.getDelaySum(0, 7), 1, false); break; case 1: obj.sq_SetCurrentAnimation(ATPANI_BYKK_PETROLBOMB_BACKSTEP_BODY); obj.sq_PlaySound("R_PW_PETROL_BOMB"); obj.sq_PlaySound("PETROL_BOMB_READY"); local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); if(loadSlot){ if(loadSlot.getRemainLoadNumber() > 0){ obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/petrolbomb_backstep_body.ani"), 0, 0); obj.getVar("PatrolBombSet").setInt(0, 1); loadSlot.decreaseLoadCount(1); } else obj.getVar("PatrolBombSet").setInt(0, 0); } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); obj.setTimeEvent(1, currentAni.getDelaySum(0, 4), 1, false); break; case 2: obj.sq_SetCurrentAnimation(ATPANI_BYKK_MALLEUSMALEFICARUM); obj.sq_PlaySound("PW_PETROL_BOMB"); obj.sq_PlaySound("ESSENCE_PHLEGE_EXP"); local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); if(loadSlot){ if(loadSlot.getRemainLoadNumber() > 0){ obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/petrolbomb_backstep_body.ani"), 0, 0); obj.getVar("PatrolBombSet").setInt(0, 1); loadSlot.decreaseLoadCount(1); } else obj.getVar("PatrolBombSet").setInt(0, 0); } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); obj.setTimeEvent(2, currentAni.getDelaySum(0, 4), 1, false); break; } } function onEndCurrentAni_PatrolBomb(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(0); obj.sq_IntVectPush(sq_GetZPos(obj)); obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_PatrolBomb(obj) { if(!obj) return; } function onKeyFrameFlag_PatrolBomb(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_PatrolBomb(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PATROLBOMB, -1, 0, 1.0); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_PATROLBOMB, 5); local isFire = obj.getVar("PatrolBombSet").getInt(0); if(obj.getSkillSubState() == 0) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,51,0,97,obj.getDirection(),2,SKILL_BYKK_PATROLBOMB,1,totalDamage,sizeRate,isFire,0,0,0,0,0); else createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,31,1,97,obj.getDirection(),2,SKILL_BYKK_PATROLBOMB,1,totalDamage,sizeRate,isFire,0,0,0,0,0); break; case 2: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PATROLBOMB, -1, 0, 1.0); local isFire = obj.getVar("PatrolBombSet").getInt(0); createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,-50,0,0,obj.getDirection(),2,SKILL_BYKK_PATROLBOMB,4,totalDamage,isFire,0,0,0,0,0,0); break; } } function onEndState_PatrolBomb(obj, new_state) { if(!obj) return; } //裁决之击 function checkExecutableSkill_PunishmentBlow(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PUNISHMENTBLOW); if (isUse){ local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); if(loadSlot){ if(loadSlot.getRemainLoadNumber() > 0){ obj.getVar("PunishmentBlowBool").setBool(2, true); loadSlot.decreaseLoadCount(1); } else obj.getVar("PunishmentBlowBool").setBool(2, false); } else obj.getVar("PunishmentBlowBool").setBool(2, false); obj.sq_IntVectClear(); if(obj.getState() == STATE_JUMP){ obj.getVar("PunishmentBlowSet").setInt(1, sq_GetZPos(obj)); obj.sq_IntVectPush(1); } else if(sq_GetSkillLevel(obj, SKILL_BYKK_FIRECONFESSION) > 0) obj.sq_IntVectPush(3); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_PUNISHMENTBLOW, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_PunishmentBlow(obj) { if (!obj) return false; return true; } function onSetState_PunishmentBlow(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_PUNISHMENTBLOW_BODY_A); obj.getVar("PunishmentBlowSet").setInt(0, sq_GetXPos(obj)); obj.getVar("PunishmentBlowBool").setBool(0, true); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); local speedRate = 3000 / currentAni.getDelaySum(0, 0); currentAni.setSpeedRate(speedRate.tofloat() * 2.0); obj.sq_PlaySound("R_PW_PUNISHMENT_BLOW_01"); obj.sq_PlaySound("PUNISHMENT_BLOW_JUMP"); if(obj.getVar("PunishmentBlowBool").getBool(2)) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/punishmentblow_body_a.ani"), 0, 0); break; case 1: obj.sq_SetCurrentAnimation(ATPANI_BYKK_PUNISHMENTBLOW_BODY_B); obj.getVar("PunishmentBlowSet").setInt(0, sq_GetXPos(obj)); obj.getVar("PunishmentBlowBool").setBool(0, true); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); local speedRate = 3000 / currentAni.getDelaySum(0, 0); currentAni.setSpeedRate(speedRate.tofloat() * 3.0); if(obj.getVar("PunishmentBlowBool").getBool(2)) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/punishmentblow_body_b.ani"), 0, 0); break; case 2: obj.sq_SetCurrentAnimation(ATPANI_BYKK_PUNISHMENTBLOW_BODY_ATTACK); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); local speedRate = 6000 / currentAni.getDelaySum(0, 0); print(speedRate); currentAni.setSpeedRate(speedRate * 3.0); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PATROLBOMB, -1, 0, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_PUNISHMENTBLOW_ATTACK)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); if(obj.getVar("PunishmentBlowBool").getBool(2)) { totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; obj.getVar("holyflameDamageSet").setInt(0, totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); attackInfo.setElement(ENUM_ELEMENT_FIRE); attackInfo.setElement(ENUM_ELEMENT_LIGHT); } sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atpunishmentblow/pslash_01.ani", 0, 2, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atpunishmentblow/pslash_02.ani", 0, 1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atpunishmentblow/floor.ani", 0, -1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atpunishmentblow/dust.ani", 0, -2, 0); obj.sq_PlaySound("R_PW_PUNISHMENT_BLOW_02"); if(obj.getVar("PunishmentBlowBool").getBool(2)){ sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atpunishmentblow/psaintfire_01.ani", 0, 2, 0); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/punishmentblow_body_attack.ani"), 0, 0); obj.sq_PlaySound("PUNISHMENT_BLOW_FLAME"); } else obj.sq_PlaySound("PUNISHMENT_BLOW"); break; case 3: obj.sq_SetCurrentAnimation(ATPANI_BYKK_PUNISHMENTBLOWDASH_BODY); obj.sq_PlaySound("PUNISHMENT_BLOW_DASH"); if(obj.getVar("PunishmentBlowBool").getBool(2)){ sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atpunishmentblow/pendfire_01.ani", -200, 2, 0); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/punishmentblowdash_body.ani"), 0, 0); } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.getVar("PunishmentBlowSet").setInt(0, sq_GetXPos(obj)); obj.getVar("PunishmentBlowBool").setBool(0, true); local currentAni = obj.getCurrentAnimation(); sq_AddAttackBox(currentAni, -50, -30, -5, 250, 60, 155); local bonusRate = sq_GetLevelData(obj, SKILL_BYKK_FIRECONFESSION, 3, sq_GetSkillLevel(obj, SKILL_BYKK_FIRECONFESSION)); bonusRate = bonusRate.tofloat() / 1000.0; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PATROLBOMB, -1, 0, bonusRate); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_PUNISHMENTBLOW_DASHATTACK)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); if(obj.getVar("PunishmentBlowBool").getBool(2)) { totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; obj.getVar("holyflameDamageSet").setInt(0, totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); attackInfo.setElement(ENUM_ELEMENT_FIRE); attackInfo.setElement(ENUM_ELEMENT_LIGHT); } break; case 4: obj.sq_SetCurrentAnimation(ATPANI_BYKK_PUNISHMENTBLOWDASHATTACK_BODY); if(obj.getVar("PunishmentBlowBool").getBool(2)){ sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atfireconfession/punishmentblowdashattack_dashsmokea.ani", 0, 2, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atfireconfession/punishmentblowdashattack_dashsmokeb.ani", 0, -1, 0); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/punishmentblowdashattack_body.ani"), 0, 0); } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PATROLBOMB, -1, 0, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_PUNISHMENTBLOW_ATTACK)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); if(obj.getVar("PunishmentBlowBool").getBool(2)) { totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; obj.getVar("holyflameDamageSet").setInt(0, totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); attackInfo.setElement(ENUM_ELEMENT_FIRE); attackInfo.setElement(ENUM_ELEMENT_LIGHT); } break; } } function onEndCurrentAni_PunishmentBlow(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.getVar("PunishmentBlowSet").setInt(1, sq_GetZPos(obj)); case 1: case 3: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(STATE_BYKK_PUNISHMENTBLOW, STATE_PRIORITY_AUTO, true); break; case 2: case 4: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_PunishmentBlow(obj) { if(!obj) return; } function onProc_PunishmentBlow(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: local stateTime = obj.sq_GetStateTimer(); local currentAni = obj.getCurrentAnimation(); local fullTime = currentAni.getDelaySum(false); if(obj.getVar("PunishmentBlowBool").getBool(0)){ local vx = sq_GetUniformVelocity(0, 50, stateTime, fullTime); local dstX = sq_GetDistancePos(obj.getVar("PunishmentBlowSet").getInt(0), sq_GetDirection(obj), vx); if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); else obj.getVar("PunishmentBlowBool").setBool(0, false); } local vz = sq_GetAccel(0, 100, stateTime, fullTime / 2, true); sq_setCurrentAxisPos(obj, 2, vz); break; case 1: local stateTime = obj.sq_GetStateTimer(); local currentAni = obj.getCurrentAnimation(); local fullTime = currentAni.getDelaySum(false); if(obj.getVar("PunishmentBlowBool").getBool(0)){ local vx = sq_GetUniformVelocity(0, 50, stateTime, fullTime); local dstX = sq_GetDistancePos(obj.getVar("PunishmentBlowSet").getInt(0), sq_GetDirection(obj), vx); if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); else obj.getVar("PunishmentBlowBool").setBool(0, false); } local vz = sq_GetAccel(obj.getVar("PunishmentBlowSet").getInt(1), 0, stateTime, fullTime, false); sq_setCurrentAxisPos(obj, 2, vz); break; case 3: local stateTime = obj.sq_GetStateTimer(); local currentAni = obj.getCurrentAnimation(); local fullTime = currentAni.getDelaySum(false); if(obj.getVar("PunishmentBlowBool").getBool(0)){ local vx = sq_GetUniformVelocity(0, 200, stateTime, fullTime); local dstX = sq_GetDistancePos(obj.getVar("PunishmentBlowSet").getInt(0), sq_GetDirection(obj), vx); if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); else obj.getVar("PunishmentBlowBool").setBool(0, false); } obj.setSkillCommandEnable(SKILL_BYKK_PUNISHMENTBLOW,true); if(obj.sq_IsEnterSkill(SKILL_BYKK_PUNISHMENTBLOW) != -1){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_PUNISHMENTBLOW, STATE_PRIORITY_AUTO, true); return false; } break; } } function onKeyFrameFlag_PunishmentBlow(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 101: obj.getVar("HolyFlameEnable").setBool(0, true); obj.getVar("PurificationEnable").setBool(0, true); break; } return true; } function onTimeEvent_PunishmentBlow(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_PunishmentBlow(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_PUNISHMENTBLOW){ sq_SimpleMoveToNearMovablePos(obj,200); obj.getVar("PunishmentBlowBool").setBool(1, false); } } function onAttack_PunishmentBlow(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return; if(damager.isObjectType(OBJECTTYPE_ACTIVE) && obj.getSkillSubState() == 2){ if(obj.getVar("PunishmentBlowBool").getBool(2)) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); } } //火焰精华 function checkExecutableSkill_EssenceofPhlege(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_ESSENCEOFPHLEGE); if (isUse){ obj.sq_IntVectClear(); if(sq_GetSkillLevel(obj, SKILL_BYKK_POURESSENCE) > 0 && (sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT)) obj.sq_IntVectPush(2); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_ESSENCEOFPHLEGE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_EssenceofPhlege(obj) { if (!obj) return false; return true; } function onSetState_EssenceofPhlege(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_ESSENCEOFPHLEGE_BODY); break; case 1: obj.sq_SetCurrentAnimation(ATPANI_BYKK_ESSENCEOFPHLEGEAIR_BODY); break; case 2: obj.sq_SetCurrentAnimation(ATPANI_BYKK_POURESSENCE_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_EssenceofPhlege(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(0); obj.sq_IntVectPush(sq_GetZPos(obj)); obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_EssenceofPhlege(obj) { if(!obj) return; } function onKeyFrameFlag_EssenceofPhlege(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 101://`throw bottle` 56 0 95 obj.getVar("EssenceofPhlegeObj").clear_obj_vector(); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ESSENCEOFPHLEGE, -1, 1, 1.0); local lifeTimeForTarget = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 3); local lifeTimeForBurning = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 4); local lifeTimeForLanding = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 9); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 13); createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,56,0,95,obj.getDirection(),2,SKILL_BYKK_ESSENCEOFPHLEGE,1,totalDamage,lifeTimeForTarget,lifeTimeForBurning,lifeTimeForLanding,sizeRate,0,0,0); break; case 102://`throw bottle` 38 0 89 obj.getVar("EssenceofPhlegeObj").clear_obj_vector(); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ESSENCEOFPHLEGE, -1, 1, 1.0); local lifeTimeForTarget = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 3); local lifeTimeForBurning = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 4); local lifeTimeForLanding = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 9); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 13); createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,38,0,89,obj.getDirection(),2,SKILL_BYKK_ESSENCEOFPHLEGE,1,totalDamage,lifeTimeForTarget,lifeTimeForBurning,lifeTimeForLanding,sizeRate,0,0,0); break; case 103:// local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ESSENCEOFPHLEGE, -1, 1, 1.0); local lifeTimeForTarget = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 3); local lifeTimeForBurning = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 4); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 19); createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),2,SKILL_BYKK_ESSENCEOFPHLEGE,2,totalDamage,lifeTimeForTarget,lifeTimeForBurning,sizeRate,0,0,0,0); break; } return true; } function onTimeEvent_EssenceofPhlege(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_EssenceofPhlege(obj, new_state) { if(!obj) return; } //神焰 function checkExecutableSkill_HolyFlame(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HOLYFLAME); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_HOLYFLAME, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_HolyFlame(obj) { if (!obj) return false; return true; } function onSetState_HolyFlame(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_HOLYFLAME_BODY); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local currentAni = obj.getCurrentAnimation(); local speedRate = 4000 / currentAni.getDelaySum(0, 0); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYFLAME, -1, 1, 1.0); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_HOLYFLAME, 10); createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),2,SKILL_BYKK_HOLYFLAME,1,totalDamage,sizeRate,speedRate,0,0,0,0,0); obj.sq_PlaySound("R_PW_HOLY_FLAME"); break; } } function onEndCurrentAni_HolyFlame(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_HolyFlame(obj) { if(!obj) return; } function onKeyFrameFlag_HolyFlame(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 102: sq_SetMyShake(obj, 2, 100); sq_flashScreen(obj,20,100,80,150, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); if(!loadSlot){ local loadNumber = sq_GetIntData(obj, SKILL_BYKK_HOLYFLAME, 0); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BRANDOFHERESY); if(skillLevel > 0) loadNumber = loadNumber + sq_GetLevelData(obj, SKILL_BYKK_BRANDOFHERESY, 0, skillLevel); if(sq_GetSkillLevel(obj, SKILL_BYKK_FIRECONFESSION) > 0) loadNumber = loadNumber + 2; obj.sq_AddSkillLoad(SKILL_BYKK_HOLYFLAME, 147, loadNumber, 5000); if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/demonicswordman/2_inquistor/ap_holyflame_buff.nut")){ local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/demonicswordman/2_inquistor/ap_holyflame_buff.nut", true); local burnTime = sq_GetIntData(obj, SKILL_BYKK_HOLYFLAME, 1); AddAppendage.getVar("custom").setInt(0, burnTime); } } else{ local nowNumber = loadSlot.getRemainLoadNumber(); local loadNumber = sq_GetIntData(obj, SKILL_BYKK_HOLYFLAME, 0); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BRANDOFHERESY); if(skillLevel > 0) loadNumber = loadNumber + sq_GetLevelData(obj, SKILL_BYKK_BRANDOFHERESY, 0, skillLevel); if(sq_GetSkillLevel(obj, SKILL_BYKK_FIRECONFESSION) > 0) loadNumber = loadNumber + 2; if(nowNumber < loadNumber){ loadSlot.increaseLoadCount(loadNumber - nowNumber); } // obj.sq_RemoveSkillLoad(SKILL_BYKK_HOLYFLAME); } break; } return true; } function onTimeEvent_HolyFlame(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_HolyFlame(obj, new_state) { if(!obj) return; } //审判重击 function checkExecutableSkill_JudgmentBlow(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_JUDGMENTBLOW); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_JUDGMENTBLOW, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_JudgmentBlow(obj) { if (!obj) return false; return true; } function onSetState_JudgmentBlow(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); switch(subState){ case 0: local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); local atkIndex = ATPATK_BYKK_JUDGMENTBLOW; if(loadSlot){ if(loadSlot.getRemainLoadNumber() > 0){ obj.sq_SetCurrentAnimation(ATPANI_BYKK_HOLYFLAME_JUDGMENTBLOW); atkIndex = ATPATK_BYKK_HOLYFLAME_JUDGMENTBLOW; loadSlot.decreaseLoadCount(1); obj.getVar("JudgmentBlowSet").setInt(0, 1); } else{ obj.sq_SetCurrentAnimation(ATPANI_BYKK_JUDGMENTBLOW_BODY); obj.getVar("JudgmentBlowSet").setInt(0, 0); } } else{ obj.sq_SetCurrentAnimation(ATPANI_BYKK_JUDGMENTBLOW_BODY); obj.getVar("JudgmentBlowSet").setInt(0, 0); } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_JUDGMENTBLOW, -1, 0, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); if(obj.getVar("JudgmentBlowSet").getInt(0) > 0) { totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; obj.getVar("holyflameDamageSet").setInt(0, totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); attackInfo.setElement(ENUM_ELEMENT_FIRE); attackInfo.setElement(ENUM_ELEMENT_LIGHT); } break; } } function onEndCurrentAni_JudgmentBlow(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_JudgmentBlow(obj) { if(!obj) return; } function onKeyFrameFlag_JudgmentBlow(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 101: obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atholyflame/atjudgmentblow/atjudgmentblow_att1_01.ani"), 0, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atholyflame/atjudgmentblow/atjudgmentblow_stone_6.ani", 0, 1, 0); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_JUDGMENTBLOW, -1, 1, 1.0); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_JUDGMENTBLOW, 0); local isFire = obj.getVar("JudgmentBlowSet").getInt(0); createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,185,0,0,obj.getDirection(),2,SKILL_BYKK_JUDGMENTBLOW,1,totalDamage,sizeRate,isFire,0,0,0,0,0); sq_SetMyShake(obj, 5, 80); break; case 102: obj.getVar("HolyFlameEnable").setBool(0, true); obj.getVar("PurificationEnable").setBool(0, true); obj.sq_PlaySound("JUDGMENT_BLOW"); break; case 111://69 sq_SetMyShake(obj, 2, 120); sq_flashScreen(obj,0,80,40,204, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 112: obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atholyflame/atjudgmentblow/atjudgmentblow_att2_02.ani"), 0, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atholyflame/atjudgmentblow/atjudgmentblow_stone_6.ani", 0, 1, 0); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_JUDGMENTBLOW, -1, 1, 1.0); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_JUDGMENTBLOW, 0); local isFire = obj.getVar("JudgmentBlowSet").getInt(0); createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,185,0,0,obj.getDirection(),2,SKILL_BYKK_JUDGMENTBLOW,1,totalDamage,sizeRate,isFire,0,0,0,0,0); sq_SetMyShake(obj, 12, 120); local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_FIRECONFESSION); if(skillLevel > 0){ local addTime = sq_GetIntData(obj, SKILL_BYKK_FIRECONFESSION, 11); local hitMax = sq_GetIntData(obj, SKILL_BYKK_FIRECONFESSION, 12); local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_JUDGMENTBLOW, -1, 0, 1.0); totalDamage = totalDamage + totalDamage2 local bonusRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FIRECONFESSION, -1, 4, 1.0); totalDamage = totalDamage * bonusRate / 1000; createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,185,0,0,obj.getDirection(),2,SKILL_BYKK_JUDGMENTBLOW,2,totalDamage,sizeRate,isFire,hitMax,addTime,0,0,0); createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,185,0,0,obj.getDirection(),2,SKILL_BYKK_JUDGMENTBLOW,3,sizeRate,0,0,0,0,0,0,0); } break; case 113: obj.sq_PlaySound("JUDGMENT_BLOW_FLAME"); break; } return true; } function onTimeEvent_JudgmentBlow(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_JudgmentBlow(obj, new_state) { if(!obj) return; } function onAttack_JudgmentBlow(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return; if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ if(obj.getVar("JudgmentBlowSet").getInt(0) > 0) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); } } //神焰斩 function checkExecutableSkill_Summarytiral(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SUMMARYTIRAL); if (isUse){ obj.getVar("Summarytiral").setInt(1, 0); local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); if(loadSlot){ if(loadSlot.getRemainLoadNumber() > 0){ loadSlot.decreaseLoadCount(1); obj.getVar("Summarytiral").setInt(1, 1); } } obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_SUMMARYTIRAL, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Summarytiral(obj) { if (!obj) return false; return true; } function onSetState_Summarytiral(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_SUMMARYTIRAL_BODY_PIERCE_ATK1); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.getVar("Summarytiral").setInt(0, 0); obj.getVar("SummarytiralTar").clear_obj_vector(); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SUMMARYTIRAL, -1, 0, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_SUMMARYTIRALPIERCE)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); print("test : "+obj.getVar("Summarytiral").getInt(1)); if(obj.getVar("Summarytiral").getInt(1) > 0) { totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; obj.getVar("holyflameDamageSet").setInt(0, totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); attackInfo.setElement(ENUM_ELEMENT_FIRE); attackInfo.setElement(ENUM_ELEMENT_LIGHT); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/summarytiral_body_pierce_atk1.ani"), 0, 0); } break; case 1: obj.sq_SetCurrentAnimation(ATPANI_BYKK_SUMMARYTIRAL_BODY_NOMAL_ATTACK2); 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_SUMMARYTIRAL, -1, 1, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_SUMMARYTIRALNOMALSWING)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); if(obj.getVar("Summarytiral").getInt(1) > 0){ totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; obj.getVar("holyflameDamageSet").setInt(0, totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); attackInfo.setElement(ENUM_ELEMENT_FIRE); attackInfo.setElement(ENUM_ELEMENT_LIGHT); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/summarytiral_body_nomal_attack2.ani"), 0, 0); local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 2); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atsummarytiral/normal/statk1fire_firedodge.ani", 0, 1, 0); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat() * 0.9); } break; case 2: obj.sq_SetCurrentAnimation(ATPANI_BYKK_SUMMARYTIRAL_BODY_INCINERATION_ATTACK2); 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_SUMMARYTIRAL, -1, 2, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_SUMMARYTIRALINCINERATIONSWING)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); if(obj.getVar("Summarytiral").getInt(1) > 0){ totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; obj.getVar("holyflameDamageSet").setInt(0, totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); attackInfo.setElement(ENUM_ELEMENT_FIRE); attackInfo.setElement(ENUM_ELEMENT_LIGHT); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/summarytiral_body_incineration_attack2.ani"), 0, 0); local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 2); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atsummarytiral/incineration/statk2fire_fire01.ani", 0, 1, 0); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); } break; } } function onEndCurrentAni_Summarytiral(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(obj.getVar("SummarytiralTar").get_obj_vector_size() > 0){ obj.setTimeEvent(1, 200, 1, false); return; } case 1: case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Summarytiral(obj) { if(!obj) return; } function onKeyFrameFlag_Summarytiral(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 201: if(obj.getVar("Summarytiral").getInt(1) > 0) obj.sq_PlaySound("SUMMARY_TIRAL_SWISH_FLAME"); else obj.sq_PlaySound("SUMMARY_TIRAL_SWISH"); break; case 202: sq_SetMyShake(obj, 5, 240); break; case 203: //`purification enable` obj.getVar("PurificationEnable").setBool(0, true); break; case 204: //`SwingEndHolyFlameEffect` -11 0 -21 if(obj.getVar("Summarytiral").getInt(1) > 0) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atsummarytiral/normal/statk1endfire_01.ani", -11, 0, -21); //`holy flame enable` obj.getVar("HolyFlameEnable").setBool(0, true); obj.getVar("PurificationEnable").setBool(0, true); break; case 301://flag=2 //`HoldMonsterMovePos` 166 0 -20 local size = obj.getVar("SummarytiralTar").get_obj_vector_size(); if(size > 0){ local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(2, 2); for(local i = 0; i < size; i++){ local targetObj = obj.getVar("SummarytiralTar").get_obj_vector(i); if(targetObj && targetObj.getState() != STATE_DIE){ local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut"); if(!sq_IsFixture(targetObj)) sq_MoveToAppendageForce(targetObj, obj, obj, 166, 0, -20, delay, true, addAppendage); } } } //`CreateHoleEffect` 136 0 -66 //`CreateDustEffect` 108 0 -103 break; case 302://flag=3 sq_SetMyShake(obj, 5, 160); //`HoldMonsterMovePos` 153 0 -40 local size = obj.getVar("SummarytiralTar").get_obj_vector_size(); if(size > 0){ local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(3, 3); for(local i = 0; i < size; i++){ local targetObj = obj.getVar("SummarytiralTar").get_obj_vector(i); if(targetObj && targetObj.getState() != STATE_DIE){ local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut"); if(!sq_IsFixture(targetObj)) sq_MoveToAppendageForce(targetObj, obj, obj, 153, 0, -40, delay, true, addAppendage); } } } if(obj.getVar("Summarytiral").getInt(1) > 0) obj.sq_PlaySound("SUMMARY_TIRAL_DOWN_FLAME"); else obj.sq_PlaySound("SUMMARY_TIRAL_DOWN"); break; case 303://flag=7 local size = obj.getVar("SummarytiralTar").get_obj_vector_size(); if(size > 0){ local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(7, 7); for(local i = 0; i < size; i++){ local targetObj = obj.getVar("SummarytiralTar").get_obj_vector(i); if(targetObj && targetObj.getState() != STATE_DIE){ local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut"); if(!sq_IsFixture(targetObj)) sq_MoveToAppendageForce(targetObj, obj, obj, 213, 0, 10, delay, true, addAppendage); } } } //`HoldMonsterMovePos` 213 0 10 //`CreateDustEffect` 192 0 -43 //`RemoveHoleEffect` 162 0 -91 if(obj.getVar("Summarytiral").getInt(1) > 0) obj.sq_PlaySound("SUMMARY_TIRAL_UP_FLAME"); else obj.sq_PlaySound("SUMMARY_TIRAL_UP"); break; case 304://flag=8 local size = obj.getVar("SummarytiralTar").get_obj_vector_size(); if(size > 0){ local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(8, 8); for(local i = 0; i < size; i++){ local targetObj = obj.getVar("SummarytiralTar").get_obj_vector(i); if(targetObj && targetObj.getState() != STATE_DIE){ local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut"); if(!sq_IsFixture(targetObj)) sq_MoveToAppendageForce(targetObj, obj, obj, 199, 0, 50, delay, true, addAppendage); } } } //`HoldMonsterMovePos` 199 0 50 //`HoldMonsterCutting` 192 0 14 break; case 305://flag=9 sq_flashScreen(obj,0,80,240,204, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); break; case 306://flag=10 sq_SetMyShake(obj, 5, 240); break; case 307://flag=11 //`holy flame enable` 0 0 0 obj.getVar("HolyFlameEnable").setBool(0, true); //`purification enable` 0 0 0 obj.getVar("PurificationEnable").setBool(0, true); break; } return true; } function onTimeEvent_Summarytiral(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: obj.sq_IntVectClear(); if(obj.getVar("Summarytiral").getInt(0) > 0) obj.sq_IntVectPush(2); else obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_SUMMARYTIRAL, STATE_PRIORITY_AUTO, true); break; } } function onEndState_Summarytiral(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_SUMMARYTIRAL){ local size = obj.getVar("SummarytiralTar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("SummarytiralTar").get_obj_vector(i); if(targetObj && targetObj.getState() != STATE_DIE){ // local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut"); // if(AddAppendage && !sq_IsFixture(targetObj)) sq_MoveToAppendageForce(targetObj, obj, targetObj, 0, 0, -sq_GetZPos(targetObj), 300, true, AddAppendage); CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/demonicswordman/2_inquistor/ap_summarytiral_hold.nut"); } } } } } function onAttack_Summarytiral(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ if(obj.getVar("Summarytiral").getInt(1) > 0) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); if(!obj.getVar("SummarytiralTar").is_obj_vector(damager)) obj.getVar("SummarytiralTar").push_obj_vector(damager); local currentAni = obj.getCurrentAnimation(); local frameIndex = sq_GetCurrentFrameIndex(obj); local delay = currentAni.getDelaySum(frameIndex, 4); if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut")){ if(obj.getVar("Summarytiral").getInt(0) != 1) obj.getVar("Summarytiral").setInt(0, 1); local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(damager, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut"); if(!sq_IsFixture(damager)) sq_MoveToAppendageForce(damager, obj, obj, 151, 0, 52, delay, true, AddAppendage); return; } else{ local apdPath = "character/demonicswordman/2_inquistor/ap_summarytiral_hold.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(damager, apdPath); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true); sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); if(!sq_IsFixture(damager)) sq_MoveToAppendageForce(damager, obj, obj, 151, 0, 52, delay, true, AddAppendage); } } break; } } //神焰洗礼 function checkExecutableSkill_FlameOfBaptism(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_FLAMEOFBAPTISM); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_FLAMEOFBAPTISM, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_FlameOfBaptism(obj) { if (!obj) return false; return true; } function onSetState_FlameOfBaptism(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_FLAMEOFBAPTISM_BODY); obj.sq_PlaySound("PW_FLAME_BAPTISM_01"); obj.sq_PlaySound("FLAME_BAPTISM_SPLASH"); obj.getVar("FlameOfBaptism").setInt(0, 0); local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); if(loadSlot){ if(loadSlot.getRemainLoadNumber() > 0){ obj.getVar("FlameOfBaptism").setInt(0, 1); loadSlot.decreaseLoadCount(1); } } break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_FlameOfBaptism(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_FlameOfBaptism(obj) { if(!obj) return; } function onKeyFrameFlag_FlameOfBaptism(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 101: local currentAni = obj.getCurrentAnimation(); local speedRate = 5000 / currentAni.getDelaySum(0, 0); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLAMEOFBAPTISM, -1, 0, 1.0); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_FLAMEOFBAPTISM, 2); local sub = obj.getVar("FlameOfBaptism").getInt(0); createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),2,SKILL_BYKK_FLAMEOFBAPTISM,1,totalDamage,sizeRate,speedRate,sub,0,0,0,0); break; case 102: local currentAni = obj.getCurrentAnimation(); local speedRate = 5000 / currentAni.getDelaySum(0, 0); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atflameofbaptism/flameofbaptismback_24.ani", 0, -1, 0); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); if(obj.getVar("FlameOfBaptism").getInt(0) > 0){ local sizeRate = sq_GetIntData(obj, SKILL_BYKK_FLAMEOFBAPTISM, 2); local rangeX = 290 * sizeRate / 100, rangeY = 70 * sizeRate / 100;; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ESSENCEOFPHLEGE, -1, 1, 1.0); local lifeTimeForTarget = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 3); local lifeTimeForBurning = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 4); sizeRate = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 19); local sub = obj.getVar("FlameOfBaptism").getInt(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_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) <= rangeX && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= rangeY) { local group = sq_GetGroup(object); local uniqueId = sq_GetUniqueId(object); local aObj = object.getVar("EssenceofPhlege").get_obj_vector(0); if(aObj){ local colObj = sq_GetCNRDObjectToCollisionObject(aObj); if(colObj.getState() >= 20) continue; else colObj.setTimeEvent(1, 1000, 1, true); } createSkillPassive_ATPriest_bykk(obj,object,PASSIVEOBJ_BYKK_ATPRIEST,0,1,sq_GetZPos(object) + sq_GetHeightObject(object) / 2 - sq_GetZPos(obj),obj.getDirection(),2,SKILL_BYKK_ESSENCEOFPHLEGE,3,totalDamage,lifeTimeForTarget,lifeTimeForBurning,sizeRate,group,uniqueId,0,0); } } } break; case 103: sq_SetShake(obj, 3, 250); break; case 104: obj.sq_PlaySound("PW_FLAME_BAPTISM_02"); obj.sq_PlaySound("FLAME_BAPTISM_FIRE"); break; } return true; } function onTimeEvent_FlameOfBaptism(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_FlameOfBaptism(obj, new_state) { if(!obj) return; } //神焰怒火 function checkExecutableSkill_Virtuousfury(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_VIRTUOUSFURY); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_VIRTUOUSFURY, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Virtuousfury(obj) { if (!obj) return false; return true; } function onSetState_Virtuousfury(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.getVar("FlameOfBaptism").setInt(0, 0); local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); if(loadSlot){ if(loadSlot.getRemainLoadNumber() > 0){ obj.getVar("FlameOfBaptism").setInt(0, 1); loadSlot.decreaseLoadCount(1); local flashScreenObj = sq_flashScreen(obj,80,99990,240,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); obj.getVar("Virtuousfury_Flashobj").clear_obj_vector(); obj.getVar("Virtuousfury_Flashobj").push_obj_vector(flashScreenObj); } } if(obj.getVar("FlameOfBaptism").getInt(0) > 0){ obj.sq_SetCurrentAnimation(ATPANI_BYKK_VIRTUOUSFURY_HOLYFLAME_BODY); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/virtuousfury_holyflame_body.ani"), 0, 0); } else obj.sq_SetCurrentAnimation(ATPANI_BYKK_VIRTUOUSFURY_NORMAL_BODY); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.getVar("VirtuousfuryBool").setBool(0, true); break; } } function onEndCurrentAni_Virtuousfury(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_Virtuousfury(obj) { if(!obj) return; if(obj.getVar("VirtuousfuryBool").getBool(0)){ sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ obj.getVar("VirtuousfuryBool").setBool(0, false); obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); } } } function onKeyFrameFlag_Virtuousfury(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 103: case 203: local atkIndex = ATPATK_BYKK_VIRTUOUSFURY_NORMAL; if(obj.getVar("FlameOfBaptism").getInt(0) > 0) atkIndex = ATPATK_BYKK_VIRTUOUSFURY_HOLYFLAME; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_VIRTUOUSFURY, -1, 0, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); if(obj.getVar("FlameOfBaptism").getInt(0) > 0){ totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; obj.getVar("holyflameDamageSet").setInt(0, totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); attackInfo.setElement(ENUM_ELEMENT_FIRE); attackInfo.setElement(ENUM_ELEMENT_LIGHT); } break; case 104: case 204: //`loop start` break; case 107: case 207: case 113: case 213: case 117: case 217: case 119: case 219: obj.resetHitObjectList(); break; case 124: case 224: if(obj.getVar("VirtuousfuryBool").getBool(0)) obj.getVar("VirtuousfuryBool").setBool(0, false); break; case 125: case 225: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_VIRTUOUSFURY, -1, 1, 1.0); local atkIndex = ATPATK_BYKK_VIRTUOUSFURY_LAST_NORMAL; if(obj.getVar("FlameOfBaptism").getInt(0) > 0) atkIndex = ATPATK_BYKK_VIRTUOUSFURY_LAST_HOLYFLAME; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); if(obj.getVar("FlameOfBaptism").getInt(0) > 0){ totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; obj.getVar("holyflameDamageSet").setInt(0, totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); attackInfo.setElement(ENUM_ELEMENT_FIRE); attackInfo.setElement(ENUM_ELEMENT_LIGHT); } obj.sq_PlaySound("R_PW_VIRTUOUS_FURY"); break; case 126: case 226: if(obj.getVar("FlameOfBaptism").getInt(0) > 0){ //`off flash` local flashScreenObj = obj.getVar("Virtuousfury_Flashobj").get_obj_vector(0); local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); if(pflashScreen) pflashScreen.fadeOut(); sq_flashScreen(obj,0,80,160,204, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); } else sq_flashScreen(obj,0,60,300,204, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 5, 360); obj.resetHitObjectList(); break; case 128: case 228: //`holy flame enable` obj.getVar("HolyFlameEnable").setBool(0, true); obj.getVar("PurificationEnable").setBool(0, true); break; case 230: //`add holy flame off effect` if(obj.getVar("FlameOfBaptism").getInt(0) > 0){ sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atvirtuousfury/holyflame/vfsaintendfire_endfire01.ani", 0, 1, 0); } //`remove holy flame weapon effect` break; } return true; } function onTimeEvent_Virtuousfury(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_Virtuousfury(obj, new_state) { if(!obj) return; } function onAttack_Virtuousfury(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return; if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ if(obj.getVar("FlameOfBaptism").getInt(0) > 0) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); } } //行刑 function checkExecutableSkill_Decollation(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DECOLLATION); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_DECOLLATION, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Decollation(obj) { if (!obj) return false; return true; } function onSetState_Decollation(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.getVar("Decollation").setInt(0, 0); local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); if(loadSlot){ if(loadSlot.getRemainLoadNumber() > 0){ obj.getVar("Decollation").setInt(0, 1); loadSlot.decreaseLoadCount(1); } } if(obj.getVar("Decollation").getInt(0) > 0){ obj.sq_SetCurrentAnimation(ATPANI_BYKK_DECOLLATIONFIREBODY_BODY); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/decollationfirebody_body.ani"), 0, 0); } else obj.sq_SetCurrentAnimation(ATPANI_BYKK_DECOLLATIONNORMAL_BODY); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Decollation(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_Decollation(obj) { if(!obj) return; } function onKeyFrameFlag_Decollation(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 102: sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_DECOLLATION_PUSH)); obj.getVar("DecollationBool").setBool(0, true); break; case 107: sq_SetMyShake(obj, 2, 160); local flashScreenObj = sq_flashScreen(obj,80,99990,240,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); obj.getVar("Decollation_Flashobj").clear_obj_vector(); obj.getVar("Decollation_Flashobj").push_obj_vector(flashScreenObj); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(7, 10); local delay2 = currentAni.getDelaySum(11, 12); sq_flashScreen(obj,120,delay,delay2,102, sq_RGB(255,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 115: obj.getVar("DecollationBool").setBool(0, false); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DECOLLATION, -1, 0, 1.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_DECOLLATION)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); if(obj.getVar("Decollation").getInt(0) > 0){ totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000; obj.getVar("holyflameDamageSet").setInt(0, totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); attackInfo.setElement(ENUM_ELEMENT_FIRE); attackInfo.setElement(ENUM_ELEMENT_LIGHT); } break; case 116: sq_SetMyShake(obj, 5, 320); //off flash local flashScreenObj = obj.getVar("Decollation_Flashobj").get_obj_vector(0); local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); if(pflashScreen) pflashScreen.fadeOut(); // sq_flashScreen(obj,0,0,80,102, sq_RGB(255,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_flashScreen(obj,0,0,320,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 117: //`holy flame enable` obj.getVar("HolyFlameEnable").setBool(0, true); obj.getVar("PurificationEnable").setBool(0, true); break; case 120: //`add holy flame off effect` if(obj.getVar("Decollation").getInt(0) > 0){ sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdecollation/decollationendfire_endfire_01.ani", 0, 1, 0); } break; } return true; } function onTimeEvent_Decollation(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_Decollation(obj, new_state) { if(!obj) return; } function onAttack_Decollation(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return; if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ if(obj.getVar("Decollation").getInt(0) > 0) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); if(obj.getVar("DecollationBool").getBool(0)){ } } } //神焰漩涡 function checkExecutableSkill_VortexOfHellFire(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_VORTEXOFHELLFIRE); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_VORTEXOFHELLFIRE, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_VortexOfHellFire(obj) { if (!obj) return false; return true; } function onSetState_VortexOfHellFire(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_VORTEXOFHELLFIREBODYREADY_00); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.getVar("VortexOfHellFire").setInt(0, 0); local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); if(loadSlot){ if(loadSlot.getRemainLoadNumber() > 0){ obj.getVar("VortexOfHellFire").setInt(0, 1); loadSlot.decreaseLoadCount(1); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/vortexofhellfirebodyready_00.ani"), 0, 0); } } obj.startRapidInput(); obj.getVar("VortexOfHellFire").setInt(1, 0); obj.getVar("VortexOfHellFire").setInt(2, 0); break; case 1: // local atkIndex = ATPATK_BYKK_VORTEXOFHELLFIRELOOP; local sub = obj.getVar("VortexOfHellFire").getInt(0); if(sub > 0){ obj.sq_SetCurrentAnimation(ATPANI_BYKK_VORTEXOFHELLFIREBODYLOOP_00_HOLYFRAME); // atkIndex = ATPATK_BYKK_VORTEXOFHELLFIRELOOP_HOLYFRAME; obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/vortexofhellfirebodyloop_00_holyframe.ani"), 0, 0); } else obj.sq_SetCurrentAnimation(ATPANI_BYKK_VORTEXOFHELLFIREBODYLOOP_00); // obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atvortexofhellfire/loop/vortexofhellfireeffloop_00.ani"), 0, 0); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_VORTEXOFHELLFIRE, -1, 0, 1.0); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VORTEXOFHELLFIRE, 14); local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 0); sq_ClearAttackBox(currentAni); createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),2,SKILL_BYKK_VORTEXOFHELLFIRE,1,totalDamage,sizeRate,speedRate,sub,0,0,0,0); if(obj.getVar("VortexOfHellFire").getInt(2) == 0){ obj.getVar("VortexOfHellFire").setInt(2, 1); local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/loop/vortexofhellfireeffloop_00.ani"; local pooledObj = createOnlyDrawObjectEX_ATPriest_bykk(obj,aniPath,false,sq_GetDirection(obj),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); sq_moveWithParent(obj, pooledObj); local pAni = pooledObj.getCurrentAnimation(); pAni.setLoop(true); pAni.setSpeedRate(speedRate.tofloat()); obj.getVar("VortexOfHellFireEffect").clear_obj_vector(); obj.getVar("VortexOfHellFireEffect").push_obj_vector(pooledObj); } if(!obj.isExistTimeEvent(1)) obj.setTimeEvent(1, 20, -1, false); break; case 2: obj.stopTimeEvent(1); local sub = obj.getVar("VortexOfHellFire").getInt(0); if(sub > 0){ obj.sq_SetCurrentAnimation(ATPANI_BYKK_VORTEXOFHELLFIREBODYEND_00_HOLYFRAME); obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/vortexofhellfirebodyend_00_holyframe.ani"), 0, 0); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VORTEXOFHELLFIRE, 14); local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj); createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/endfire/vortexofhellfireatkfire_01.ani",true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/endfire/vortexofhellfireatksmoke_01.ani",true,direction,xPos,yPos - 1,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); } else obj.sq_SetCurrentAnimation(ATPANI_BYKK_VORTEXOFHELLFIREBODYEND_00); 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_VORTEXOFHELLFIRE, -1, 1, 1.0); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VORTEXOFHELLFIRE, 14); local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 0); sq_ClearAttackBox(currentAni); createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),2,SKILL_BYKK_VORTEXOFHELLFIRE,2,totalDamage,sizeRate,speedRate,sub,0,0,0,0); createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/end/vortexofhellfirebodyend_eff.ani",true,sq_GetDirection(obj),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/end/vortexofhellfirebodyend_smoke00.ani", 0, -1, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/end/vortexofhellfirebodyend_smoke01.ani", 0, -1, 0); break; } } function onEndCurrentAni_VortexOfHellFire(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: sq_SetMyShake(obj, 3, 80); obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_VORTEXOFHELLFIRE, STATE_PRIORITY_AUTO, true); break; case 1: local roundMax = 5; if(obj.getRapidInputFrequency() > 0) roundMax = 10; if(obj.getVar("VortexOfHellFire").getInt(1) + 1 >= roundMax){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(STATE_BYKK_VORTEXOFHELLFIRE, STATE_PRIORITY_AUTO, true); } else{ obj.getVar("VortexOfHellFire").setInt(1, obj.getVar("VortexOfHellFire").getInt(1) + 1); obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_VORTEXOFHELLFIRE, STATE_PRIORITY_AUTO, true); } break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_VortexOfHellFire(obj) { if(!obj) return; } function onProc_VortexOfHellFire(obj) { if(!obj) return; sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); obj.setSkillCommandEnable(SKILL_BYKK_VORTEXOFHELLFIRE,true); if(obj.sq_IsEnterSkill(SKILL_BYKK_VORTEXOFHELLFIRE) != -1 || sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); } function onKeyFrameFlag_VortexOfHellFire(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 0: obj.resetHitObjectList(); local currentAni = obj.getCurrentAnimation(); local speedRate = 8000 / currentAni.getDelaySum(0, 0); if(obj.getRapidInputFrequency() > 0){ currentAni.setSpeedRate(speedRate.tofloat() * 1.5); local pooledObj = obj.getVar("VortexOfHellFireEffect").get_obj_vector(0); if(pooledObj){ local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat() * 1.5); } } if(obj.getVar("VortexOfHellFire").getInt(0) > 0){ local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VORTEXOFHELLFIRE, 14); local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj); createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/loopfire/vortexofhellfireloopfirea_01.ani",true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/loopfire/vortexofhellfireloopsmokea_01.ani",true,direction,xPos,yPos - 1,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); } break; case 1: if(obj.getVar("VortexOfHellFire").getInt(0) > 0){ local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VORTEXOFHELLFIRE, 14); local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj); createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/loopfire/vortexofhellfireloopfireb_01.ani",true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/loopfire/vortexofhellfireloopsmokeb_01.ani",true,direction,xPos,yPos - 1,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); } break; case 2: // if(obj.getRapidInputFrequency() > 0) obj.resetHitObjectList(); if(obj.getVar("VortexOfHellFire").getInt(0) > 0){ local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VORTEXOFHELLFIRE, 14); local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj); createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/loopfire/vortexofhellfireloopfirec_01.ani",true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/loopfire/vortexofhellfireloopsmokec_01.ani",true,direction,xPos,yPos - 1,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); } break; case 3: if(obj.getVar("VortexOfHellFire").getInt(0) > 0){ local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VORTEXOFHELLFIRE, 14); local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj); createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/loopfire/vortexofhellfireloopfired_01.ani",true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/loopfire/vortexofhellfireloopsmoked_01.ani",true,direction,xPos,yPos - 1,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); } break; case 100: //`EndEffectCorrection` local pooledObj = obj.getVar("VortexOfHellFireEffect").get_obj_vector(0); if(pooledObj) pooledObj.setValid(false); break; case 101: obj.sq_PlaySound("PW_VORTEX_HELL_FIRE"); sq_SetMyShake(obj, 8, 200); break; case 102: //`holy flame enable` obj.getVar("HolyFlameEnable").setBool(0, true); obj.getVar("PurificationEnable").setBool(0, true); break; case 106: //`add holy flame end effect` if(obj.getVar("VortexOfHellFire").getInt(0) > 0){ sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/end/vortexofhellfirebodyend_fireend01.ani", 0, 0, 0); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/end/vortexofhellfirebodyend_fireend02.ani", 0, -1, 0); } break; } return true; } function onTimeEvent_VortexOfHellFire(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 1: if(obj.isMyControlObject()){ local speed = 400.0; if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)) sq_SetVelocity(obj, 0, speed); else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)) sq_SetVelocity(obj, 0, -speed); else sq_SetVelocity(obj, 0, 0.0); if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) sq_SetVelocity(obj, 1, -speed * 0.2); else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) sq_SetVelocity(obj, 1, speed * 0.2); else sq_SetVelocity(obj, 1, 0.0); } break; } } function onEndState_VortexOfHellFire(obj, new_state) { if(!obj) return; if(new_state != STATE_BYKK_VORTEXOFHELLFIRE){ local pooledObj = obj.getVar("VortexOfHellFireEffect").get_obj_vector(0); if(pooledObj) pooledObj.setValid(false); } } function onAttack_VortexOfHellFire(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return; if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ if(obj.getVar("VortexOfHellFire").getInt(0) > 0) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox); } } //净化之焰 function checkExecutableSkill_Purification(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PURIFICATION); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_BYKK_PURIFICATION, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Purification(obj) { if (!obj) return false; return true; } function onSetState_Purification(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_PURIFICATION_LOOP_BODY); obj.getVar("PurificationSet").setInt(0, 0); obj.getVar("PurificationTar").clear_obj_vector(); local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); if(loadSlot){ obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/purification_loop_body.ani"), 0, 0); } break; case 1: obj.sq_SetCurrentAnimation(ATPANI_BYKK_PURIFICATION_END_BODY); local sub = 0; local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME); if(loadSlot){ sub = 1; obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/purification_end_body.ani"), 0, 0); } local size = obj.getVar("PurificationTar").get_obj_vector_size(); print("size = "+size); if(size > 0){ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PURIFICATION, -1, 0, 1.0); local sizeRate = sq_GetIntData(obj, SKILL_BYKK_PURIFICATION, 2); for(local i = 0; i < size; i++){ local targetObj = obj.getVar("PurificationTar").get_obj_vector(i); if(targetObj && targetObj.getState() != STATE_DIE) createSkillPassive_ATPriest_bykk(obj,targetObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),2,SKILL_BYKK_PURIFICATION,1,totalDamage,sizeRate,sub,0,0,0,0,0); } } break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Purification(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true); break; } } function onProcCon_Purification(obj) { if(!obj) return; } function onKeyFrameFlag_Purification(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 101: local objectManager = obj.getObjectManager();//得到對象管理器 for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ local object = objectManager.getCollisionObject(i);//得到控制類對象 if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj)){ if(CNSquirrelAppendage.sq_IsAppendAppendage(object, "character/demonicswordman/2_inquistor/passiveskill/ap_brandofheresy_debuff.nut") || CNSquirrelAppendage.sq_IsAppendAppendage(object, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut")){ if(!CNSquirrelAppendage.sq_IsAppendAppendage(object, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut")){ local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(object, obj, -1, false, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut", true); sq_HoldAndDelayDie(object, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); AddAppendage.sq_SetValidTime(1500); } if(!obj.getVar("PurificationTar").is_obj_vector(object)) obj.getVar("PurificationTar").push_obj_vector(object); obj.getVar("PurificationSet").setInt(0, obj.getVar("PurificationSet").getInt(0) + 1); } } } if(obj.getVar("PurificationSet").getInt(0) > 3){ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(STATE_BYKK_PURIFICATION, STATE_PRIORITY_IGNORE_FORCE, true); } else obj.getVar("PurificationSet").setInt(0, obj.getVar("PurificationSet").getInt(0) + 1); break; } return true; } function onTimeEvent_Purification(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_Purification(obj, new_state) { if(!obj) return; }