// function cearteSkillPassiveObj_AtSwordMan_bykk(obj,passiveObj,objnum,x,y,z,direction,job,skillIndex,subtype,pushv1,pushv2,pushv3,pushv4,pushv5,pushv6,pushv7,pushv8,bonusnum) { if(!obj || !passiveObj) return; if(pushv1 == null) pushv1 = 0; if(pushv2 == null) pushv2 = 0; if(pushv3 == null) pushv3 = 0; if(pushv4 == null) pushv4 = 0; if(pushv5 == null) pushv5 = 0; if(pushv6 == null) pushv6 = 0; if(pushv7 == null) pushv7 = 0; if(pushv8 == null) pushv8 = 0; if(bonusnum > 0 && obj.isObjectType(OBJECTTYPE_CHARACTER)){ local bonusRate = 1.0; if(job == 4){ if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS) > 0){ bonusRate = bonusRate + setpassiveObjbounsRate(obj, skillIndex, 1).tofloat() / 1000.0; } if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_INCARNATION) > 0){ bonusRate = bonusRate + setpassiveObjbounsRate(obj, skillIndex, 2).tofloat() / 1000.0; } } else if(job == 2){ if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH) > 0 && skillIndex != SKILL_DEMONSLAYER_DARKSTRIKE && skillIndex != SKILL_DEMONSLAYER_WILDWHIP && skillIndex != SKILL_DEMONSLAYER_CLAWBLADE && skillIndex != SKILL_DEMONSLAYER_BLOODDANCE){ bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH, 9, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH)).tofloat() / 1000.0; } if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_QUEENOFMINE) > 0 && skillIndex != SKILL_DEMONSLAYER_CLAWBLADE){ bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_QUEENOFMINE, 0, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_QUEENOFMINE)).tofloat() / 1000.0; } } switch (bonusnum) { case 1: pushv1 = (pushv1.tofloat() * bonusRate).tointeger(); break; case 2: pushv2 = (pushv2.tofloat() * bonusRate).tointeger(); break; case 3: pushv3 = (pushv3.tofloat() * bonusRate).tointeger(); break; case 4: pushv4 = (pushv4.tofloat() * bonusRate).tointeger(); break; case 5: pushv5 = (pushv5.tofloat() * bonusRate).tointeger(); break; case 6: pushv6 = (pushv6.tofloat() * bonusRate).tointeger(); break; case 7: pushv7 = (pushv7.tofloat() * bonusRate).tointeger(); break; case 8: pushv8 = (pushv8.tofloat() * bonusRate).tointeger(); break; } } local destX_01 = 0; local destY_01 = 0; if(!isSameObject(obj, passiveObj)){ destX_01 = passiveObj.getXPos() - obj.getXPos(); destY_01 = passiveObj.getYPos() - obj.getYPos(); z = z - obj.getZPos(); if(direction == ENUM_DIRECTION_LEFT) destX_01 = obj.getXPos() - passiveObj.getXPos(); } sq_BinaryStartWrite(); sq_BinaryWriteDword(job); sq_BinaryWriteDword(skillIndex); sq_BinaryWriteDword(subtype); sq_BinaryWriteDword(pushv1); sq_BinaryWriteDword(pushv2); sq_BinaryWriteDword(pushv3); sq_BinaryWriteDword(pushv4); sq_BinaryWriteDword(pushv5); sq_BinaryWriteDword(pushv6); sq_BinaryWriteDword(pushv7); sq_BinaryWriteDword(pushv8); sq_SendCreatePassiveObjectPacket(obj, objnum, 0, destX_01 + x, destY_01 + y, z, direction); } function setpassiveObjbounsRate(obj, skillIndex, sub) { switch(sub){ case 1: if(skillIndex == SKILL_DARKEMPLER_MADNESS) return 0; else if(skillIndex == SKILL_DARKEMPLER_SHADOWHARVEST) return 0; else if(skillIndex == SKILL_DARKEMPLER_BUCKSHOT) return 0; else{ local bonusRate = sq_GetLevelData(obj, SKILL_DARKEMPLER_VESPERS, 4, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS)); return bonusRate; } break; case 2: if(skillIndex == SKILL_DARKEMPLER_SHADOWPUPPET) return 0; else if(skillIndex == SKILL_DARKEMPLER_SHADOWHARVEST) return 0; else{ local bonusRate = sq_GetLevelData(obj, SKILL_DARKEMPLER_INCARNATION, 0, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_INCARNATION)); return bonusRate; } break; } } function createOnlyDrawObject_AtSwordMan_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer) { local ani = sq_CreateAnimation("",aniPath); local pooledObj = sq_CreatePooledObject(ani,isTrue); sq_SetCurrentDirection(pooledObj, direction); pooledObj.setCurrentPos(x,y,z); pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer); sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false); return pooledObj; } function createOnlyDrawObjectEX_AtSwordMan_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer,sizeRateX,sizeRateY) { local ani = sq_CreateAnimation("",aniPath); local pooledObj = sq_CreatePooledObject(ani,isTrue); sq_SetCurrentDirection(pooledObj, direction); pooledObj.setCurrentPos(x,y,z); local currentAni = pooledObj.getCurrentAnimation(); sizeRateX = sizeRateX.tofloat() / 100.0; sizeRateY = sizeRateY.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRateX, sizeRateY); pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer); sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false); return pooledObj; } function isFrontObject(obj,object) { if((obj.getDirection() == ENUM_DIRECTION_RIGHT && sq_GetXPos(obj) > sq_GetXPos(object)) || (obj.getDirection() == ENUM_DIRECTION_LEFT && sq_GetXPos(obj) < sq_GetXPos(object))) return false; return true; } function darkEmpler_Evolve(obj,increaseCount,decreaseCount) { local loadSlot = obj.sq_GetSkillLoad(SKILL_DARKEMPLER_EVOLVE); if(!loadSlot) return; if(increaseCount > 0){ local maxCount = obj.sq_GetLevelData(SKILL_DARKEMPLER_EVOLVE, 0, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_EVOLVE)); //if(maxCount >= 99) maxCount = 99; local soulnum = loadSlot.getRemainLoadNumber(); if(soulnum >= maxCount) return; if(maxCount - soulnum > increaseCount) loadSlot.increaseLoadCount(increaseCount); else loadSlot.increaseLoadCount(maxCount - soulnum); sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atevolve/absorb.ani", 0, -1, 0); } if(decreaseCount > 0){ if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/4_darktempler/doomsday/ap_doomsdaybuff.nut")) return; loadSlot.decreaseLoadCount(decreaseCount); } } function getDamageRate_DarkTempler_bykk(obj) { local bonusRate = 1000; if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_EVOLVE) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj,SKILL_DARKEMPLER_EVOLVE, 1, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_EVOLVE))) / 1000; print("bonusRate1 = "+bonusRate); if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_USIR) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj,SKILL_DARKEMPLER_USIR, 3, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_USIR))) / 1000; print("bonusRate2 = "+bonusRate); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/4_darktempler/congest/ap_congest.nut")) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj,SKILL_DARKEMPLER_CONGEST, 0, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_CONGEST))) / 1000; print("bonusRate3 = "+bonusRate); obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); } function getDamageRate_VagaBond_bykk(obj) { local bonusRate = 0; if(sq_GetSkillLevel(obj, SKILL_VAGABOND_THREEFLOWER) > 0) bonusRate += sq_GetLevelData(obj, SKILL_VAGABOND_THREEFLOWER, 0, sq_GetSkillLevel(obj, SKILL_VAGABOND_THREEFLOWER)); if(sq_GetSkillLevel(obj, SKILL_VAGABOND_BUDCLIMB) > 0) bonusRate += sq_GetLevelData(obj, SKILL_VAGABOND_BUDCLIMB, 0, sq_GetSkillLevel(obj, SKILL_VAGABOND_BUDCLIMB)); if(sq_GetSkillLevel(obj, SKILL_VAGABOND_ECSTASY) > 0) bonusRate += sq_GetLevelData(obj, SKILL_VAGABOND_ECSTASY, 6, sq_GetSkillLevel(obj, SKILL_VAGABOND_ECSTASY)); if(sq_GetSkillLevel(obj, SKILL_VAGABOND_GODDESSOFSWORD) > 0) bonusRate += sq_GetLevelData(obj, SKILL_VAGABOND_GODDESSOFSWORD, 0, sq_GetSkillLevel(obj, SKILL_VAGABOND_GODDESSOFSWORD)); return bonusRate; } function setSkillDamageRate_VagaBond_bykk(obj) { local bonusRate = 1000; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/3_vagabond/fivecircle/ap_fivecircle.nut")) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_VAGABOND_FIVECIRCLE, 4, sq_GetSkillLevel(obj, SKILL_VAGABOND_FIVECIRCLE))) / 1000; print("bonusRate1 = "+bonusRate); if(sq_GetSkillLevel(obj, SKILL_VAGABOND_THREEFLOWER) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_VAGABOND_THREEFLOWER, 0, sq_GetSkillLevel(obj, SKILL_VAGABOND_THREEFLOWER))) / 1000; print("bonusRate2 = "+bonusRate); if(sq_GetSkillLevel(obj, SKILL_VAGABOND_BUDCLIMB) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_VAGABOND_BUDCLIMB, 0, sq_GetSkillLevel(obj, SKILL_VAGABOND_BUDCLIMB))) / 1000; print("bonusRate3 = "+bonusRate); if(sq_GetSkillLevel(obj, SKILL_VAGABOND_ECSTASY) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_VAGABOND_ECSTASY, 6, sq_GetSkillLevel(obj, SKILL_VAGABOND_ECSTASY))) / 1000; print("bonusRate4 = "+bonusRate); if(sq_GetSkillLevel(obj, SKILL_VAGABOND_GODDESSOFSWORD) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_VAGABOND_GODDESSOFSWORD, 0, sq_GetSkillLevel(obj, SKILL_VAGABOND_GODDESSOFSWORD))) / 1000; print("bonusRate5 = "+bonusRate); obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); //sq_SetSkillAttackBonus(obj, bonusRate); } function getDamageRate_Demonslayer_bykk(obj) { local bonusRate = 1000; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/2_demonslayer/atfrenzy/ap_atfrenzy.nut")) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_DEMONSLAYER_ATFRENZY, 9, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_ATFRENZY))) / 1000; print("bonusRate1 = "+bonusRate); if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_CALLDAIMUS) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_DEMONSLAYER_CALLDAIMUS, 5, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_CALLDAIMUS))) / 1000; print("bonusRate2 = "+bonusRate); obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); } function getDamageRate_Swordmaster_bykk(obj) { local bonusRate = 1000; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/bladesoul/ap_bladesoulbuff.nut")) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLADESOUL, 0, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADESOUL))) / 1000; print("bonusRate1 = "+bonusRate); if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE, 0, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE))) / 1000; print("bonusRate2 = "+bonusRate); if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SWORDMAGIC) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_SWORDMAGIC, 0, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SWORDMAGIC))) / 1000; print("bonusRate3 = "+bonusRate); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/overdrive/ap_overdrive.nut")) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_OVERDRIVE, 1, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_OVERDRIVE))) / 1000; print("bonusRate4 = "+bonusRate); obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); //sq_SetSkillAttackBonus(obj, bonusRate); //return bonusRate; } function procPassiveSkill_Darktempler_bykk(obj, skill_index, skill_level) { switch(skill_index){ case 65: local apPath = "character/atswordman/4_darktempler/evolve/ap_evolve.nut"; if(skill_level > 0) local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, true); break; case 228: local apPath = "character/atswordman/4_darktempler/incarnation/ap_incarnation.nut"; if(skill_level > 0) local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, true); break; case 77: local apPath = "character/atswordman/4_darktempler/vespers/ap_vespers.nut"; if(skill_level > 0) local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, true); break; case 40: local apPath = "character/atswordman/4_darktempler/loyalslave/ap_loyalslave.nut"; if(skill_level > 0) local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, true); break; } } function procPassiveSkill_Vagabond_bykk(obj, skill_index, skill_level) { switch(skill_index){ case SKILL_VAGABOND_THREEFLOWER: local apPath = "character/atswordman/3_vagabond/threeflower/ap_threeflower.nut"; if(skill_level > 0) local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, true); break; case SKILL_VAGABOND_EQUIPLIGHTSWORD: local apPath = "character/atswordman/3_vagabond/equiplightsword/ap_equiplightsword.nut"; if(skill_level > 0) local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, true); break; } } function procPassiveSkill_Swordmaster_bykk(obj, skill_index, skill_level) { switch(skill_index){ case SKILL_SWORDMASTER_BYKK_MAGICSWORDUP: local apPath = "character/atswordman/1_swordmaster/magicswordup/ap_magicswordup.nut"; if(skill_level > 0) local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, true); break; case SKILL_SWORDMASTER_BYKK_INNERBLADE: local apPath = "character/atswordman/1_swordmaster/ap_weaponmastery.nut"; if(skill_level > 0) local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, true); break; case SKILL_SWORDMASTER_BYKK_DRAWSWORD: local apPath = "character/atswordman/1_swordmaster/drawsword/ap_drawsword.nut"; if(skill_level > 0) local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, true); break; case SKILL_SWORDMASTER_BYKK_BLADESOUL: local apPath = "character/atswordman/1_swordmaster/bladesoul/ap_bladesoul.nut"; if(skill_level > 0) local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, true); break; } } function CreateAimPointMark(parentObj) { local job = sq_getJob(parentObj); local ani = null; if(job == ENUM_CHARACTERJOB_AT_MAGE){ ani = sq_CreateAnimation("", "Common/CommonEffect/Animation/atmage_cussor/AimPointMark.ani"); ani.setRGBA(0, 78, 255, 255); } else if(job == 10){ local CurSkill = AIMPOINT_ATSWORDMAN; if(CurSkill == 69) ani = sq_CreateAnimation("", "passiveobject/atswordman_bykk/vagabond/animation/magiccircle.ani"); else if(CurSkill == 82) ani = sq_CreateAnimation("", "character/swordman/effect/animation/atjihad/jihad_targettingloop_a.ani"); } return ani; } function CNAimPointMarkCustomAnimation(obj, parentObj) { if(!obj) return false; local job = sq_getJob(parentObj); if(job == ENUM_CHARACTERJOB_AT_MAGE){ local ani1 = sq_CreateAnimation("", "Common/CommonEffect/Animation/atmage_cussor/AimPointMarkDisable.ani"); local ani2 = sq_CreateAnimation("", "Common/CommonEffect/Animation/atmage_cussor/AimPointMarkVanish.ani"); local ani3 = sq_CreateAnimation("", "Common/CommonEffect/Animation/atmage_cussor/AimPointMarkDisableVanish.ani"); local ani4 = sq_CreateAnimation("", "Common/CommonEffect/Animation/atmage_cussor/AimPointMarkEnable.ani"); if(ani1 && ani2 && ani3 && ani4){ ani1.setRGBA(0, 78, 255, 255); ani2.setRGBA(0, 78, 255, 255); ani3.setRGBA(0, 78, 255, 255); ani4.setRGBA(0, 78, 255, 255); obj.addCustomAnimation(ani1); obj.addCustomAnimation(ani2); obj.addCustomAnimation(ani3); obj.addCustomAnimation(ani4); return true; } } else if(job == 10){ local CurSkill = AIMPOINT_ATSWORDMAN; if(CurSkill == 69){ local ani1 = sq_CreateAnimation("", "passiveobject/atswordman_bykk/vagabond/animation/magiccircle.ani"); local ani2 = sq_CreateAnimation("", "passiveobject/atswordman_bykk/vagabond/animation/magiccircle.ani"); local ani3 = sq_CreateAnimation("", "passiveobject/atswordman_bykk/vagabond/animation/magiccircle.ani"); local ani4 = sq_CreateAnimation("", "passiveobject/atswordman_bykk/vagabond/animation/magiccircle.ani"); ani2.setLoop(false); if(ani1 && ani2 && ani3 && ani4){ obj.addCustomAnimation(ani1); obj.addCustomAnimation(ani2); obj.addCustomAnimation(ani3); obj.addCustomAnimation(ani4); return true; } } else if(CurSkill == 82){ local ani1 = sq_CreateAnimation("", "character/swordman/effect/animation/atjihad/jihad_targettingloop_a.ani"); local ani2 = sq_CreateAnimation("", "character/swordman/effect/animation/atjihad/jihad_targettingloop_a.ani"); local ani3 = sq_CreateAnimation("", "character/swordman/effect/animation/atjihad/jihad_targettingloop_a.ani"); local ani4 = sq_CreateAnimation("", "character/swordman/effect/animation/atjihad/jihad_targettingloop_a.ani"); if(ani1 && ani2 && ani3 && ani4){ obj.addCustomAnimation(ani1); obj.addCustomAnimation(ani2); obj.addCustomAnimation(ani3); obj.addCustomAnimation(ani4); return true; } } } return false; } function drawCustomSkillani_ATSwordman(obj) { if(!obj.getVar("MoonlightslashDraw").getBool(0))//???????關 return; local Xpos = 0; Skill_DrawAni(obj,"Moonlightslash","etc/ultimateskillani/atsword_swordempress2nd.ani",1.0,1.0,255,Xpos, 50,"MoonlightslashDraw"); return; } function Skill_DrawAni(obj,aniName,AniPath,Xrate,Yrate,alpaha,Xpos,Ypos,VarName) { local sq_var = obj.getVar(); local AniObj2 = sq_var.GetAnimationMap( aniName , AniPath ); if(obj.getDirection() == 1){ Xrate = -Xrate; Xpos = Xpos + 800; } if(sq_IsEnd(AniObj2)){ if(obj.getVar(VarName).getBool(1)){ sq_Rewind(AniObj2); obj.getVar(VarName).setBool(1,false); } else obj.getVar(VarName).setBool(0,false); } else{ sq_AnimationProc(AniObj2); AniObj2.setImageRate(Xrate,Yrate); AniObj2.setRGBA(255, 255, 255, alpaha); sq_drawCurrentFrame(AniObj2, Xpos,Ypos, false); obj.getVar(VarName).setBool(1,false); } } function isMovablePos_CNAimPointMark(obj, parentObj, xPos, yPos) { if(!obj) return true; if(!parentObj) return true; local job = sq_getJob(parentObj); if(job == ENUM_CHARACTERJOB_AT_MAGE) return sq_IsMovablePosCollisionObject(parentObj, xPos, yPos); else if(job == 10) sq_IsMovablePosCollisionObject(parentObj, xPos, yPos); return true; } function onSetState_AtSwordman_Basic5_bykk(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); if(subState == 40){//進圖獲取攻擊屬性用 obj.sq_SetCurrentAnimation(708); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0)); return; } local basicbonus = obj.sq_GetBonusRateWithPassive(174, -1, 0, 0.1) + 100; obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj), obj.getState()); local aniIndex = subState; local attackIndex = subState; if(sq_getGrowType(obj) == 1 && sq_GetSkillLevel(obj, 3) > 0){ aniIndex = SWORDMASTER_ANIINDEX[subState]; local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()) aniIndex = SWORDMASTER_MAGIC_ANIINDEX[subState]; attackIndex = SWORDMASTER_ATTACKINDEX[subState]; changeSwordEffect_bykk(obj, "InnerBladeAttack" + (subState + 1).tostring(), 108); } else if(sq_getGrowType(obj) == 2 && sq_GetSkillLevel(obj, 202) > 0){ local weaponType = getDualWeaponType(obj); aniIndex = DUALWEAPON_ANIINDEX[weaponType * 3 + subState]; attackIndex = DUALWEAPON_ATTACKINDEX[weaponType * 3 + subState]; basicbonus = basicbonus * (100 + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 0, sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON))) / 100; if(weaponType == 3) basicbonus = basicbonus + basicbonus * sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 8, sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON)) / 100; } else if(sq_getGrowType(obj) == 3 && sq_GetSkillLevel(obj, 148) > 0){ aniIndex = DEMONSLAYER_ANIINDEX[subState]; attackIndex = DEMONSLAYER_ATTACKINDEX[subState]; BodyCalldaimus(obj, DEMONSLAYER_ATTACKEFFECTINDEX[subState]); } else if(sq_getGrowType(obj) == 4 && sq_GetSkillLevel(obj, 62) > 0){ aniIndex = HIDDENBLADE_ANIINDEX[subState]; attackIndex = HIDDENBLADE_ATTACKINDEX[subState]; basicbonus = basicbonus * (100 + sq_GetLevelData(obj, SKILL_DARKEMPLER_HIDDENBLADE, 0, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_HIDDENBLADE))) / 100; } obj.sq_SetCurrentAnimation(aniIndex); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), basicbonus); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(sq_getGrowType(obj) == 1){ if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")){ local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); local element = addAppendage.getVar("elementIndex").getInt(10); local elemantalInfo = [ENUM_ELEMENT_FIRE,ENUM_ELEMENT_WATER,ENUM_ELEMENT_DARK,ENUM_ELEMENT_LIGHT]; local attackInfo = sq_GetCurrentAttackInfo(obj); if(!attackInfo.isValidElement(elemantalInfo[element])) attackInfo.setElement(elemantalInfo[element]); } local effectObj = obj.getVar("elementalsword").get_obj_vector(0); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); local element = colObj.getVar("custom").getInt(10); local elemantalInfo = [ENUM_ELEMENT_FIRE,ENUM_ELEMENT_WATER,ENUM_ELEMENT_DARK,ENUM_ELEMENT_LIGHT]; local attackInfo = sq_GetCurrentAttackInfo(obj); if(!attackInfo.isValidElement(elemantalInfo[element])) attackInfo.setElement(elemantalInfo[element]); } } obj.getVar("attackBool").setBool(10, false); switch(subState){ case 0: obj.getVar("attackBool").setBool(12, false); break; case 1: obj.getVar("attackBool").setBool(13, false); break; } } function onProcCon_AtSwordman_Basic5_bykk(obj) { if(!obj) return; if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL) && sq_IsKeyDown(OPTION_HOTKEY_JUMP, ENUM_SUBKEY_TYPE_ALL)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(1); obj.sq_IntVectPush(200); obj.sq_AddSetStatePacket(6, STATE_PRIORITY_IGNORE_FORCE, true); } local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: case 2: case 3: case 4: local speedRate = [0,0,0,300,20]; local growType = sq_getGrowType(obj); switch(growType){ case 1: speedRate = [0,200,10,0,0]; break; case 2: speedRate = [0,100,10,0,0]; break; case 3: speedRate = [0,0,0,200,10]; break; case 4: speedRate = [0,0,100,0,0]; break; } if((obj.getVar("attackBool").getBool(12) && subState >= 0) || (obj.getVar("attackBool").getBool(13) && subState >= 1)) break; if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT)){ if(obj.getVar("attackBool").getBool(12) == false) obj.getVar("attackBool").setBool(12, true); if(obj.getVar("attackBool").getBool(13) == false) obj.getVar("attackBool").setBool(13, true); speedRate = [0,0,0]; } else if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT)){ for(local i = 0; i < speedRate.len(); i++){ speedRate[i] = speedRate[i] * 150 / 100; } } obj.sq_StartWrite(); obj.sq_WriteDword(obj.getDirection()); obj.sq_WriteDword(speedRate[subState]); sq_SendChangeSkillEffectPacket(obj, 108); break; } if(obj.getVar("attackBool").getBool(10)){ sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(108, STATE_PRIORITY_IGNORE_FORCE, true); print("test"); } } } function onChangeSkillEffect_AtSwordman_Basic5(obj, skillIndex, reciveData) { if(!obj) return; local direction = reciveData.readDword(); local speedRate = reciveData.readDword(); if(speedRate <= 0) return; if(direction == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speedRate.tofloat()); else if(direction == ENUM_DIRECTION_LEFT) sq_SetVelocity(obj, 0, -speedRate.tofloat()); } function onKeyFrameFlag_AtSwordman_Basic5(obj, flagIndex) { if(!obj) return false; local substate = obj.getSkillSubState(); print("substate = "+substate); print("flagIndex = "+flagIndex); print("set = "+obj.getVar("attackBool").getBool(10)); local growType = sq_getGrowType(obj); local stateMax = 4; switch(growType){ case 1: stateMax = 2; break; case 2: stateMax = 2; break; case 3: stateMax = 4; break; case 4: stateMax = 2; break; } if(flagIndex == 1000 && substate < stateMax){ print("test2"); obj.getVar("attackBool").setBool(10, true); } return true; } function onAttack_AtSwordman_Basic5_bykk(obj, damager, boundingBox, isStuck) { if(!obj || isStuck) return false; //local substate = obj.getSkillSubState(); local growType = sq_getGrowType(obj); switch(growType){ case 1: if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ isChangeSword_Attack(obj,damager,boundingBox); } if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ isMagicSwordUp_Attack(obj,damager,boundingBox); } break; case 2: if(sq_GetSkillLevel(obj, 202) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ local weaponType = getDualWeaponType(obj); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON); switch(weaponType){ case 0://光 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 13, skill_level), time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 14, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_LIGHTNING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); break; case 1://鈍 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 2, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 3, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 1, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_STUN, prob.tofloat(), level.tointeger(), false, time.tointeger()); break; case 2://太 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 5, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 6, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLEEDING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); break; case 4://短 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 10, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 11, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 9, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_HOLD, prob.tofloat(), level.tointeger(), false, time.tointeger()); break; } } break; case 3: Calldaimus_onAttack(obj, damager, boundingBox, isStuck); break; } //MagicSword_BasiconAttack(obj, damager, boundingBox, isStuck); } function getDualWeaponType(obj) { local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/3_vagabond/dualweapon/ap_dualweapon.nut"); if(addAppendage){ local weaponType = addAppendage.getVar().getInt(10); return weaponType; } else return 0; } function procSkill_vagabond_bykk(obj) { if(!obj) return; if(obj.getVar("rapid_step_enable").getBool(0) && !sq_GetSkill(obj, SKILL_VAGABOND_RAPIDSTEP).isInCoolTime()){ obj.setSkillCommandEnable(SKILL_VAGABOND_RAPIDSTEP, true); if(obj.sq_IsEnterSkill(SKILL_VAGABOND_RAPIDSTEP) != -1){ obj.getVar("rapid_step_enable").setBool(0, false); obj.getVar("EnableHermitTripleStep").setBool(0, false); obj.startSkillCoolTime(SKILL_VAGABOND_RAPIDSTEP, sq_GetSkillLevel(obj, SKILL_VAGABOND_RAPIDSTEP), -1); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_VAGABOND_RAPIDSTEP, STATE_PRIORITY_IGNORE_FORCE, true); } } if(obj.getVar("EnableHermitTripleStep").getBool(0) && !sq_GetSkill(obj, SKILL_VAGABOND_HERMITTRIPLESTEP).isInCoolTime()){ obj.setSkillCommandEnable(SKILL_VAGABOND_HERMITTRIPLESTEP, true); if(obj.sq_IsEnterSkill(SKILL_VAGABOND_HERMITTRIPLESTEP) != -1){ obj.getVar("rapid_step_enable").setBool(0, false); obj.getVar("EnableHermitTripleStep").setBool(0, false); obj.startSkillCoolTime(SKILL_VAGABOND_HERMITTRIPLESTEP, sq_GetSkillLevel(obj, SKILL_VAGABOND_HERMITTRIPLESTEP), -1); obj.getVar("hermittriplestep").setBool(0, false); obj.getVar("hermittriplestep_move").setInt(10, sq_GetXPos(obj)); obj.getVar("hermittriplestep_move").setInt(11, sq_GetYPos(obj)); obj.getVar("hermittriplestep_tar").clear_obj_vector(); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_VAGABOND_HERMITTRIPLESTEP, STATE_PRIORITY_IGNORE_FORCE, true); } } } function onAttack_ATSwordman(obj, damager, bounding_box, is_stuck) { if(!obj || is_stuck) return false; //enableClearDeadEnemies(obj, damager); if(sq_getGrowType(obj) == 3 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ darkStrike_Attack(obj, damager); } } function onStartMap_Demonslayer_bykk(obj) { local size = obj.getVar("predatorgaloaObj").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local predatorgaloaObj = obj.getVar("predatorgaloaObj").get_obj_vector(i); if(predatorgaloaObj && predatorgaloaObj.getState() != 25){ local colObj = sq_GetCNRDObjectToCollisionObject(predatorgaloaObj); colObj.getVar().setBool(0, false); colObj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); } } } } function onStartMap_Swordmaster_bykk(obj) { return; } function onStartMap_DarkTempler_bykk(obj) { local apdPath = "character/atswordman/4_darktempler/shadowharvest/ap_shadowharvest.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath); return; } function dungeonStart_ATSwordman_Swordmaster(obj) { if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT) > 0){ local loadSlot = obj.sq_GetSkillLoad(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT); if(!loadSlot) obj.sq_AddSkillLoad(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 101, 0, sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 9)); } if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0){ obj.getVar("isMagicSwordUp").clear_ct_vector(); obj.getVar("isMagicSwordUp").push_ct_vector(); local timer = obj.getVar("isMagicSwordUp").get_ct_vector(0); timer.Reset(); timer.Start(10000,0); } obj.getVar("isReset").setInt(0, 1); getDamageRate_Swordmaster_bykk(obj); } function reset_AtSwordman_bykk(obj) { local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/atswordman/4_darktempler/shadowharvest/ap_shadowharvest.nut"); if(addAppendage) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/atswordman/4_darktempler/shadowharvest/ap_shadowharvest.nut"); if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT) > 0){ local loadSlot = obj.sq_GetSkillLoad(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT); if(!loadSlot) obj.sq_AddSkillLoad(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 101, 0, sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 9)); } if(sq_getGrowType(obj) == 1 && obj.getVar("isReset").getInt(0) == 0) getDamageRate_Swordmaster_bykk(obj); if(obj.getVar("isReset").getInt(0) == 0){ if(sq_getGrowType(obj) == 1) dungeonStart_ATSwordman_Swordmaster(obj); else if(sq_getGrowType(obj) == 4) StartDungeon_AtSwordmanAddEvolve(obj) else if(sq_getGrowType(obj) == 2){ StartDungeon_AtSwordmanDualweapon(obj); DungeonStart_ATSwordman_Ecstasy(obj); setSkillDamageRate_VagaBond_bykk(obj); } } } //通用 function checkExecutableSkill_Liftslash(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(86); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(86, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Liftslash(obj) { if (!obj) return false; local state = obj.sq_GetState(); if (state == 0||state == 8||state == 14||state == 108) return true; return true; } function onSetState_Liftslash(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); switch(subState){ case 0: obj.sq_StopMove(); local growType = sq_getGrowType(obj); switch(growType){ case 1: local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ obj.sq_SetCurrentAnimation(218); changeSwordEffect_bykk(obj, "liftslash", 86); } else obj.sq_SetCurrentAnimation(6); break; case 3: obj.sq_SetCurrentAnimation(392); BodyCalldaimus(obj, "liftslash"); break; default: obj.sq_SetCurrentAnimation(6); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.sq_SetCurrentAttackInfo(5); local bonus = obj.sq_GetBonusRateWithPassive(86, -1, 0, 1.0); obj.sq_SetCurrentAttackBonusRate(bonus); sq_SetCurrentAttacknUpForce(sq_GetCurrentAttackInfo(obj),sq_GetLevelData(obj,86, 2, sq_GetSkillLevel(obj, 86))); obj.sq_SetMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL); obj.sq_SetStaticMoveInfo(0, 120, 120, false); obj.sq_PlaySound("R_SW_LIFTSLASH"); break; } } function onEndCurrentAni_Liftslash(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Liftslash(obj, damager, boundingBox, isStuck) { if(!obj) return false; local growType = sq_getGrowType(obj); switch(growType){ case 1: if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ isChangeSword_Attack(obj,damager,boundingBox); } if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ isMagicSwordUp_Attack(obj,damager,boundingBox); } break; case 2: if(sq_GetSkillLevel(obj, 202) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ local weaponType = getDualWeaponType(obj); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON); switch(weaponType){ case 0://光 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 13, skill_level), time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 14, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_LIGHTNING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); break; case 1://鈍 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 2, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 3, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 1, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_STUN, prob.tofloat(), level.tointeger(), false, time.tointeger()); break; case 2://太 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 5, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 6, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLEEDING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); break; case 4://短 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 10, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 11, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 9, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_HOLD, prob.tofloat(), level.tointeger(), false, time.tointeger()); break; } } break; case 3: Calldaimus_onAttack(obj, damager, boundingBox, isStuck); break; } } function checkExecutableSkill_Darkslash(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(143); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(143, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Darkslash(obj) { if (!obj) return false; local state = obj.sq_GetState(); if (state == 0 || state == 14 || state == 108) return true; return true; } function onSetState_Darkslash(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); local growType = sq_getGrowType(obj); switch(subState){ case 0: switch(growType){ case 1: local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ obj.sq_SetCurrentAnimation(209); changeSwordEffect_bykk(obj, "darkslash1", 143); } else obj.sq_SetCurrentAnimation(7); break; case 3: obj.sq_SetCurrentAnimation(383); BodyCalldaimus(obj, "darkslash1"); break; default: obj.sq_SetCurrentAnimation(7); break; } obj.sq_PlaySound("SW_DARKSLASH"); obj.sq_PlaySound("DARKSLASH_01"); break; case 1: switch(growType){ case 1: local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ obj.sq_SetCurrentAnimation(210); changeSwordEffect_bykk(obj, "darkslash2", 143); } else obj.sq_SetCurrentAnimation(8); break; case 3: obj.sq_SetCurrentAnimation(384); BodyCalldaimus(obj, "darkslash2"); break; default: obj.sq_SetCurrentAnimation(8); break; } obj.sq_PlaySound("DARKSLASH_02"); obj.sq_PlaySound("DARKSLASH_02"); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.sq_SetCurrentAttackInfo(6 + subState); local bonus = obj.sq_GetBonusRateWithPassive(143, -1, 0, 1.0); obj.sq_SetCurrentAttackBonusRate(bonus); } function onEndCurrentAni_Darkslash(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(143, STATE_PRIORITY_IGNORE_FORCE, true); break; case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onAttack_Darkslash(obj, damager, boundingBox, isStuck) { if(!obj) return false; local growType = sq_getGrowType(obj); switch(growType){ case 1: if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ isChangeSword_Attack(obj,damager,boundingBox); } if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ isMagicSwordUp_Attack(obj,damager,boundingBox); } break; case 2: if(sq_GetSkillLevel(obj, 202) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ local weaponType = getDualWeaponType(obj); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON); switch(weaponType){ case 0://光 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 13, skill_level), time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 14, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_LIGHTNING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); break; case 1://鈍 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 2, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 3, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 1, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_STUN, prob.tofloat(), level.tointeger(), false, time.tointeger()); break; case 2://太 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 5, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 6, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLEEDING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); break; case 4://短 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 10, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 11, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 9, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_HOLD, prob.tofloat(), level.tointeger(), false, time.tointeger()); break; } } break; case 3: Calldaimus_onAttack(obj, damager, boundingBox, isStuck); break; } } function checkExecutableSkill_Gorecross(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(94); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(94, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Gorecross(obj) { if (!obj) return false; local state = obj.sq_GetState(); if (state == 0 || state == 14 || state == 108) return true; return true; } function onSetState_Gorecross(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); print("subState = "+subState); obj.setSkillSubState(subState); obj.sq_StopMove(); local growType = sq_getGrowType(obj); switch(subState){ case 0: obj.getVar("Gorecross").setBool(0,false); obj.sq_PlaySound("SW_1ATK_02"); obj.sq_PlaySound("TRIPLE_STEP_12"); switch(growType){ case 1: local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ obj.sq_SetCurrentAnimation(214); changeSwordEffect_bykk(obj, "gorecross", 94); } else obj.sq_SetCurrentAnimation(9); break; case 3: obj.sq_SetCurrentAnimation(388); BodyCalldaimus(obj, "gorecross"); break; default: obj.sq_SetCurrentAnimation(9); break; } break; case 1: obj.sq_PlaySound("HALFMOON"); obj.sq_PlaySound("SW_DASHATK"); switch(growType){ case 1: local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ obj.sq_SetCurrentAnimation(215); changeSwordEffect_bykk(obj, "gorecross_finish", 94); } else obj.sq_SetCurrentAnimation(10); break; case 3: obj.sq_SetCurrentAnimation(389); BodyCalldaimus(obj, "gorecross_finish"); break; default: obj.sq_SetCurrentAnimation(10); break; } break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.sq_SetCurrentAttackInfo(8 + subState); local bonus = obj.sq_GetBonusRateWithPassive(94, -1, 0, 1.0); if(subState == 1) bonus = obj.sq_GetBonusRateWithPassive(94, -1, 4, 1.0); obj.sq_SetCurrentAttackBonusRate(bonus); } function onEndCurrentAni_Gorecross(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onProcCon_Gorecross(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(obj.getVar("Gorecross").getBool(0) == false){ obj.setSkillCommandEnable(94,true); if(obj.sq_IsEnterSkill(94) != -1){ obj.getVar("Gorecross").setBool(0, true); } } break; } } function onKeyFrameFlag_Gorecross(obj, flagIndex) { if(!obj) return false; local subState = obj.getSkillSubState(); switch(subState){ case 0: switch(flagIndex){ case 0: local totalDamage = obj.sq_GetBonusRateWithPassive(94, -1, 2, 1.0); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,75,0,55,obj.getDirection(),0,94,1,totalDamage,0,0,0,0,0,0,0,1); break; case 1: if(obj.getVar("Gorecross").getBool(0)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(94, STATE_PRIORITY_IGNORE_FORCE, true); } break; } break; case 1: switch(flagIndex){ case 0: local totalDamage = obj.sq_GetBonusRateWithPassive(94, -1, 6, 1.0); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,75,0,55,obj.getDirection(),0,94,2,totalDamage,0,0,0,0,0,0,0,1); break; } break; } return true; } function onAttack_Gorecross(obj, damager, boundingBox, isStuck) { if(!obj) return false; local growType = sq_getGrowType(obj); switch(growType){ case 1: if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ isChangeSword_Attack(obj,damager,boundingBox); } if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ isMagicSwordUp_Attack(obj,damager,boundingBox); } break; case 2: if(sq_GetSkillLevel(obj, 202) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ local weaponType = getDualWeaponType(obj); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON); switch(weaponType){ case 0://光 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 13, skill_level), time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 14, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_LIGHTNING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); break; case 1://鈍 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 2, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 3, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 1, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_STUN, prob.tofloat(), level.tointeger(), false, time.tointeger()); break; case 2://太 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 5, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 6, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLEEDING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); break; case 4://短 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 10, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 11, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 9, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_HOLD, prob.tofloat(), level.tointeger(), false, time.tointeger()); break; } } break; case 3: Calldaimus_onAttack(obj, damager, boundingBox, isStuck); break; } } function checkExecutableSkill_Siryun(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(88); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(88, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Siryun(obj) { if (!obj) return false; local state = obj.sq_GetState(); if (state == 0 || state == 14 || state == 108) return true; return true; } function onSetState_Siryun(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); local growType = sq_getGrowType(obj); switch(subState){ case 0: obj.sq_PlaySound("SW_1ATK_02"); obj.sq_PlaySound("TRIPLE_STEP_12"); switch(growType){ case 1: local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ obj.sq_SetCurrentAnimation(222); changeSwordEffect_bykk(obj, "Siryun", 94); } else obj.sq_SetCurrentAnimation(11); break; case 3: obj.sq_SetCurrentAnimation(396); BodyCalldaimus(obj, "Siryun"); break; default: obj.sq_SetCurrentAnimation(11); break; } break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.sq_PlaySound("SW_SIRYUN"); } function onEndCurrentAni_Siryun(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onKeyFrameFlag_Siryun(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: obj.sq_PlaySound("SIRYUN_01"); local totalDamage = obj.sq_GetBonusRateWithPassive(88, -1, 0, 1.0); local hitMax = obj.sq_GetBonusRateWithPassive(88, -1, 2, 1.0) + 100; cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,120,0,75,obj.getDirection(),0,88,1,totalDamage,hitMax,0,0,0,0,0,0,1); break; case 2: obj.sq_PlaySound("SIRYUN_02"); local totalDamage = obj.sq_GetBonusRateWithPassive(88, -1, 0, 1.0); local hitMax = obj.sq_GetBonusRateWithPassive(88, -1, 2, 1.0) + 100; cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,125,0,35,obj.getDirection(),0,88,1,totalDamage,hitMax,0,0,0,0,0,0,1); obj.getVar("EnableHermitTripleStep").setBool(0, true); break; } return true; } function checkExecutableSkill_Mountaincrash(obj) { if (!obj) return false; local state = obj.sq_GetState(); if(state == 6 || state == 147){ if(sq_GetZPos(obj) < sq_GetIntData(obj, 87, 2)) return false; } local isUse = obj.sq_IsUseSkill(87); if (isUse){ obj.sq_IntVectClear(); if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY) > 0) obj.sq_IntVectPush(2); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(87, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Mountaincrash(obj) { if (!obj) return false; local state = obj.sq_GetState(); if (state == 0 || state == 14 || state == 108){ if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY) < 1) return false; } return true; } function onSetState_Mountaincrash(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); print("subState = "+subState); obj.setSkillSubState(subState); obj.sq_StopMove(); obj.sq_ZStop(); local growType = sq_getGrowType(obj); switch(subState){ case 0: switch(growType){ case 1: local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ obj.sq_SetCurrentAnimation(221); changeSwordEffect_bykk(obj, "mountaincrashhold", 94); } else obj.sq_SetCurrentAnimation(13); break; case 3: obj.sq_SetCurrentAnimation(395); BodyCalldaimus(obj, "mountaincrashhold"); break; default: obj.sq_SetCurrentAnimation(13); break; } obj.getVar("MountaincrashSet").setInt(0, sq_GetZPos(obj)); break; case 1: switch(growType){ case 1: local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ obj.sq_SetCurrentAnimation(219); changeSwordEffect_bykk(obj, "mountaincrash", 94); } else obj.sq_SetCurrentAnimation(12); break; case 3: obj.sq_SetCurrentAnimation(393); BodyCalldaimus(obj, "mountaincrash"); break; default: obj.sq_SetCurrentAnimation(12); break; } break; case 2: switch(growType){ case 1: local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ obj.sq_SetCurrentAnimation(220); changeSwordEffect_bykk(obj, "mountaincrashblunt", 94); } else obj.sq_SetCurrentAnimation(14); break; case 3: obj.sq_SetCurrentAnimation(394); BodyCalldaimus(obj, "mountaincrashblunt"); break; default: obj.sq_SetCurrentAnimation(14); break; } break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(subState < 1) return; obj.sq_SetCurrentAttackInfo(11); local bonus = obj.sq_GetBonusRateWithPassive(87, -1, 0, 1.0); obj.sq_SetCurrentAttackBonusRate(bonus); } function onEndCurrentAni_Mountaincrash(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(87, STATE_PRIORITY_IGNORE_FORCE, true); break; case 1: case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onProc_Mountaincrash(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 1: local stateTime = obj.sq_GetStateTimer(); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(0, 1); if(stateTime > delaySum){ if(sq_GetZPos(obj) > 0) sq_setCurrentAxisPos(obj, 2, 0); return; } local vz = sq_GetUniformVelocity(obj.getVar("MountaincrashSet").getInt(0), 0, stateTime, delaySum); sq_setCurrentAxisPos(obj, 2, vz); break; } } function onKeyFrameFlag_Mountaincrash(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: local totalDamage = obj.sq_GetBonusRateWithPassive(87, -1, 1, 1.0); local sizeRate = obj.sq_GetBonusRateWithPassive(87, -1, 2, 1.0) + 100; cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,120,0,-sq_GetZPos(obj),obj.getDirection(),0,87,1,totalDamage,sizeRate,0,0,0,0,0,0,1); break; } return true; } function onAttack_Mountaincrash(obj, damager, boundingBox, isStuck) { if(!obj) return false; local growType = sq_getGrowType(obj); switch(growType){ case 1: if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ isChangeSword_Attack(obj,damager,boundingBox); } if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ isMagicSwordUp_Attack(obj,damager,boundingBox); } break; case 2: if(sq_GetSkillLevel(obj, 202) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ local weaponType = getDualWeaponType(obj); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON); switch(weaponType){ case 0://光 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 13, skill_level), time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 14, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_LIGHTNING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); break; case 1://鈍 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 2, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 3, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 1, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_STUN, prob.tofloat(), level.tointeger(), false, time.tointeger()); break; case 2://太 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 5, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 6, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLEEDING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); break; case 4://短 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 10, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 11, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 9, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_HOLD, prob.tofloat(), level.tointeger(), false, time.tointeger()); break; } } break; case 3: Calldaimus_onAttack(obj, damager, boundingBox, isStuck); break; } } function checkExecutableSkill_Snakeshadow(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(91); if (isUse){ obj.sq_IntVectClear(); if(sq_getGrowType(obj) == 5) obj.sq_IntVectPush(2); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(91, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Snakeshadow(obj) { if (!obj) return false; return true; } function onSetState_Snakeshadow(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); local growType = sq_getGrowType(obj); switch(subState){ case 0: switch(growType){ case 1: local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ obj.sq_SetCurrentAnimation(224); changeSwordEffect_bykk(obj, "SnakeShadow_Ready", 91); } else obj.sq_SetCurrentAnimation(20); break; case 3: obj.sq_SetCurrentAnimation(398); BodyCalldaimus(obj, "SnakeShadow_Ready"); break; default: obj.sq_SetCurrentAnimation(20); break; } obj.getVar("SnakeshadowSet").setInt(0, 0); break; case 1: local sub = obj.getVar("SnakeshadowSet").getInt(0); switch(growType){ case 1: local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ switch(sub){ case 0: obj.sq_SetCurrentAnimation(225); changeSwordEffect_bykk(obj, "SnakeShadow_Side_Body", 91); break; case 1: obj.sq_SetCurrentAnimation(226); changeSwordEffect_bykk(obj, "SnakeShadow_Up_Body", 91); break; case 2: obj.sq_SetCurrentAnimation(223); changeSwordEffect_bykk(obj, "SnakeShadow_Down_Body", 91); break; } } else{ switch(sub){ case 0: obj.sq_SetCurrentAnimation(18); break; case 1: obj.sq_SetCurrentAnimation(17); break; case 2: obj.sq_SetCurrentAnimation(19); break; } } break; case 3: switch(sub){ case 0: obj.sq_SetCurrentAnimation(399); BodyCalldaimus(obj, "mountaincrash"); break; case 1: obj.sq_SetCurrentAnimation(400); BodyCalldaimus(obj, "mountaincrash"); break; case 2: obj.sq_SetCurrentAnimation(397); BodyCalldaimus(obj, "mountaincrash"); break; } break; default: switch(sub){ case 0: obj.sq_SetCurrentAnimation(18); break; case 1: obj.sq_SetCurrentAnimation(17); break; case 2: obj.sq_SetCurrentAnimation(19); break; } break; } local atkIndex = [13, 12, 14]; obj.sq_SetCurrentAttackInfo(atkIndex[sub]); local bonus = obj.sq_GetBonusRateWithPassive(91, -1, 0, 1.0); obj.sq_SetCurrentAttackBonusRate(bonus); break; case 2: switch(growType){ case 1: local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ obj.sq_SetCurrentAnimation(220); changeSwordEffect_bykk(obj, "mountaincrashblunt", 94); } else obj.sq_SetCurrentAnimation(17); break; case 3: obj.sq_SetCurrentAnimation(394); BodyCalldaimus(obj, "mountaincrashblunt"); break; default: obj.sq_SetCurrentAnimation(17); break; } break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_Snakeshadow(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(91, STATE_PRIORITY_IGNORE_FORCE, true); break; case 1: case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onProcCon_Snakeshadow(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(obj.getVar("SnakeshadowSet").getInt(0) == 0){ if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ sq_BinaryStartWrite(); sq_BinaryWriteDword(2); sq_SendChangeSkillEffectPacket(obj, 91); } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ sq_BinaryStartWrite(); sq_BinaryWriteDword(1); sq_SendChangeSkillEffectPacket(obj, 91); } } break; } } function onChangeSkillEffect_Snakeshadow(obj, skillIndex, reciveData) { if(!obj) return; local sub = reciveData.readDword(); obj.getVar("SnakeshadowSet").setInt(0, sub); } function onAttack_Snakeshadow(obj, damager, boundingBox, isStuck) { if(!obj) return false; local subState = obj.getSkillSubState(); switch(subState){ case 1: local sub = obj.getVar("SnakeshadowSet").getInt(0); if(sub == 2){ if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ local apdPath = "character/atswordman/snakeshadow/ap_snakeshadow.nut"; local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true); AddAppendage.sq_SetValidTime(500); sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); sq_MoveToAppendageForce(damager, obj, obj, 120, 0, damager.getZPos(), 300, true, AddAppendage); } } break; } local growType = sq_getGrowType(obj); switch(growType){ case 1: if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ isChangeSword_Attack(obj,damager,boundingBox); } if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ isMagicSwordUp_Attack(obj,damager,boundingBox); } break; case 2: if(sq_GetSkillLevel(obj, 202) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ local weaponType = getDualWeaponType(obj); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON); switch(weaponType){ case 0://光 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 13, skill_level), time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 14, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_LIGHTNING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); break; case 1://鈍 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 2, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 3, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 1, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_STUN, prob.tofloat(), level.tointeger(), false, time.tointeger()); break; case 2://太 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 5, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 6, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLEEDING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); break; case 4://短 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 10, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 11, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 9, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_HOLD, prob.tofloat(), level.tointeger(), false, time.tointeger()); break; } } break; case 3: Calldaimus_onAttack(obj, damager, boundingBox, isStuck); break; } } //索魂刺 function checkExecutableSkill_AtExecution(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(34); if (isUse){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(134, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_AtExecution(obj) { if (!obj) return false; return true; } function onSetState_AtExecution(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); local growType = sq_getGrowType(obj); switch(subState){ case 0: switch(growType){ case 1: local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ obj.sq_SetCurrentAnimation(213); changeSwordEffect_bykk(obj, "Execution_body", 34); } else obj.sq_SetCurrentAnimation(23); break; case 3: obj.sq_SetCurrentAnimation(387); BodyCalldaimus(obj, "Execution_body"); break; default: obj.sq_SetCurrentAnimation(23); break; } obj.getVar("SnakeshadowSet").setInt(0, 0); break; case 1: switch(growType){ case 1: local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ obj.sq_SetCurrentAnimation(212); changeSwordEffect_bykk(obj, "ExecutionLoop_body", 34); } else obj.sq_SetCurrentAnimation(24); break; case 3: obj.sq_SetCurrentAnimation(386); BodyCalldaimus(obj, "ExecutionLoop_body"); break; default: obj.sq_SetCurrentAnimation(24); break; } break; case 2: switch(growType){ case 1: local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ obj.sq_SetCurrentAnimation(211); changeSwordEffect_bykk(obj, "ExecutionAttack_body", 34); } else obj.sq_SetCurrentAnimation(25); break; case 3: obj.sq_SetCurrentAnimation(385); BodyCalldaimus(obj, "ExecutionAttack_body"); break; default: obj.sq_SetCurrentAnimation(25); break; } obj.sq_SetCurrentAttackInfo(19); local bonus = obj.sq_GetBonusRateWithPassive(34, -1, 0, 1.0); obj.sq_SetCurrentAttackBonusRate(bonus); local size = obj.getVar("executionTar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("executionTar").get_obj_vector(i); local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/atswordman/execution/ap_execution.nut"); if(addAppendage){ addAppendage.sq_SetValidTime(1000); } } } local effObj = obj.getVar("executionObj").get_obj_vector(0); if(effObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effObj); colObj.setTimeEvent(1, 1000, 1, true); } break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } function onEndCurrentAni_AtExecution(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(subState + 1); obj.sq_AddSetStatePacket(134, STATE_PRIORITY_IGNORE_FORCE, true); break; case 2: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onKeyFrameFlag_AtExecution(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 100: obj.getVar("executionObj").clear_obj_vector(); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,100,0,0,obj.getDirection(),0,34,1,0,0,0,0,0,0,0,0,1); break; } return true; } function onEndState_AtExecution(obj, newState) { if(newState != 134){ local size = obj.getVar("executionTar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("executionTar").get_obj_vector(i); local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/atswordman/execution/ap_execution.nut"); if(addAppendage){ CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/execution/ap_execution.nut"); } } } local effObj = obj.getVar("executionObj").get_obj_vector(0); if(effObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effObj); colObj.setTimeEvent(1, 1000, 1, true); } } } function onAttack_AtExecution(obj, damager, boundingBox, isStuck) { if(!obj) return false; local growType = sq_getGrowType(obj); switch(growType){ case 1: if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ isChangeSword_Attack(obj,damager,boundingBox); } if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ isMagicSwordUp_Attack(obj,damager,boundingBox); } break; case 2: if(sq_GetSkillLevel(obj, 202) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ local weaponType = getDualWeaponType(obj); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON); switch(weaponType){ case 0://光 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 13, skill_level), time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 14, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_LIGHTNING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); break; case 1://鈍 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 2, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 3, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 1, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_STUN, prob.tofloat(), level.tointeger(), false, time.tointeger()); break; case 2://太 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 5, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 6, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLEEDING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); break; case 4://短 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 10, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 11, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 9, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_HOLD, prob.tofloat(), level.tointeger(), false, time.tointeger()); break; } } break; case 3: Calldaimus_onAttack(obj, damager, boundingBox, isStuck); break; } } function checkExecutableSkill_Chainslash(obj) { if (!obj) return false; local isUse = obj.sq_IsUseSkill(32); if (isUse){ obj.getVar("chainslashBool").setBool(0, true); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(132, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_Chainslash(obj) { if (!obj) return false; return true; } function onSetState_Chainslash(obj, state, datas, isResetTimer) { if(!obj) return; local subState = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(subState); obj.sq_StopMove(); local set = [[31, 32],[207, 208],["chainslashtp01_body", "chainslashtp02_body"],[381, 382], ["chainslashtp01_body", "chainslashtp02_body"],[6500, 6000]]; local growType = sq_getGrowType(obj); switch(subState){ case 0: switch(growType){ case 1: local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){ obj.sq_SetCurrentAnimation(set[1][obj.getVar("ChainslashSet").getInt(3)]); changeSwordEffect_bykk(obj, set[2][obj.getVar("ChainslashSet").getInt(3)], 91); } else obj.sq_SetCurrentAnimation(set[0][obj.getVar("ChainslashSet").getInt(3)]); break; case 3: obj.sq_SetCurrentAnimation(set[3][obj.getVar("ChainslashSet").getInt(3)]); BodyCalldaimus(obj, set[4][obj.getVar("ChainslashSet").getInt(3)]); break; default: obj.sq_SetCurrentAnimation(set[0][obj.getVar("ChainslashSet").getInt(3)]); break; } if(obj.getVar("chainslashBool").getBool(0)){ obj.getVar("chainslashBool").setBool(0, false); local hitMax = obj.sq_GetBonusRateWithPassive(32, -1, 2, 1.0) + 100; if(sq_GetSkillLevel(obj, 58) > 0) hitMax = hitMax + 2; obj.getVar("ChainslashSet").setInt(0, hitMax); obj.getVar("ChainslashSet").setInt(1, 1); obj.getVar("ChainslashSet").setInt(2, 1); } break; } obj.getVar("chainslashBool").setBool(1, false); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); obj.sq_SetCurrentAttackInfo(20 + subState); local bonus = obj.sq_GetBonusRateWithPassive(32, -1, 0, 1.0); obj.sq_SetCurrentAttackBonusRate(bonus); local currentAni = obj.getCurrentAnimation(); local speedRate = (set[5][obj.getVar("ChainslashSet").getInt(3)] / currentAni.getDelaySum(0, 0)).tofloat(); local speed = 4.0 * speedRate; if(speedRate <= 150) speed = 6.0 * speedRate; if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); else sq_SetVelocity(obj, 0, -speed); if(obj.getVar("ChainslashSet").getInt(3) == 0) obj.getVar("ChainslashSet").setInt(3, 1); else if(obj.getVar("ChainslashSet").getInt(3) == 1) obj.getVar("ChainslashSet").setInt(3, 0); } function onEndCurrentAni_Chainslash(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onProcCon_Chainslash(obj) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(obj.getVar("chainslashBool").getBool(1) == false){ local hitMax = obj.getVar("ChainslashSet").getInt(0); local hitCount = obj.getVar("ChainslashSet").getInt(1); if(hitCount + 1 <= hitMax){ obj.setSkillCommandEnable(32,true); sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(obj.sq_IsEnterSkill(32) != -1 || sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){ // print("hitCount = "+hitCount); obj.getVar("chainslashBool").setBool(1, true); } } } else{ local frameIndex = sq_GetCurrentFrameIndex(obj); if(frameIndex >= 3){ local hitCount = obj.getVar("ChainslashSet").getInt(1); obj.getVar("ChainslashSet").setInt(1, hitCount + 1); if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(132, STATE_PRIORITY_IGNORE_FORCE, true); } } break; } } function onKeyFrameFlag_Chainslash(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 100: // obj.getVar("chainslashBool").setBool(1, true); break; } return true; } function onAttack_Chainslash(obj, damager, boundingBox, isStuck) { if(!obj) return false; local subState = obj.getSkillSubState(); switch(subState){ case 1: local sub = obj.getVar("SnakeshadowSet").getInt(0); if(sub == 2){ if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ local apdPath = "character/atswordman/snakeshadow/ap_snakeshadow.nut"; local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true); AddAppendage.sq_SetValidTime(500); sq_MoveToAppendageForce(damager, obj, obj, 120, 0, damager.getZPos(), 300, true, AddAppendage); } } break; } local growType = sq_getGrowType(obj); switch(growType){ case 1: if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ isChangeSword_Attack(obj,damager,boundingBox); } if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ isMagicSwordUp_Attack(obj,damager,boundingBox); } break; case 2: if(sq_GetSkillLevel(obj, 202) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ local weaponType = getDualWeaponType(obj); local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON); switch(weaponType){ case 0://光 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 13, skill_level), time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 14, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_LIGHTNING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); break; case 1://鈍 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 2, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 3, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 1, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_STUN, prob.tofloat(), level.tointeger(), false, time.tointeger()); break; case 2://太 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 5, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 6, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLEEDING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger()); break; case 4://短 local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 10, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 11, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 9, skill_level); sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_HOLD, prob.tofloat(), level.tointeger(), false, time.tointeger()); break; } } break; case 3: Calldaimus_onAttack(obj, damager, boundingBox, isStuck); break; } } /* function getCurrentModuleDamageRate_CreatorMage(obj) { local rate = 0.0; if (obj.sq_GetSkillLevel(15) > 0){ rate = rate * (100 + sq_GetLevelData(obj, 15, 0, obj.sq_GetSkillLevel(15)) / 10) / 100; } if(sq_getGrowType(obj) == 4) rate += getDamageRate_DarkTempler_bykk(obj).tofloat(); else if(sq_getGrowType(obj) == 2) rate += getDamageRate_VagaBond_bykk(obj).tofloat(); else if(sq_getGrowType(obj) == 3) rate += getDamageRate_Demonslayer_bykk(obj).tofloat(); if (obj.sq_GetSkillLevel(169) > 0) rate = rate * (100.0 + sq_GetLevelData(obj, 169, 0, obj.sq_GetSkillLevel(169)).tofloat() / 10.0) / 100.0; if (obj.sq_GetSkillLevel(169) > 0) rate = rate * (100.0 + sq_GetLevelData(obj, 169, 1, obj.sq_GetSkillLevel(169)).tofloat() / 10.0) / 100.0; return rate / 1000.0 + 1.0; } */ function onSetState_ATSwordmanThrow(obj, state, datas, isResetTimer) { if(!obj) return; local skillIndex = obj.getThrowIndex() local substate = obj.sq_GetVectorData(datas, 0) obj.setSkillSubState(substate) if(skillIndex == SKILL_SWORDMASTER_BYKK_CHANGESWORD){ switch(substate){ case 0: obj.sq_SetCurrentAnimation(66); break; } } } function onAfterSetState_ATSwordmanThrow_bykk(obj, state, datas, isResetTimer) { if(!obj.isMyControlObject()) return; local skillIndex = obj.getThrowIndex(); if(skillIndex == SKILL_SWORDMASTER_BYKK_CHANGESWORD){ local throwState = obj.getThrowState(); switch(throwState){ case 0: obj.setIsCustomSelectSkill(true); break; case 1: local element = obj.getThrowElement(); if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")){ obj.sq_IntVectClear(); obj.sq_IntVectPush(100); obj.sq_IntVectPush(element); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_CHANGESWORD, STATE_PRIORITY_IGNORE_FORCE, true); } else{ local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); local element2 = addAppendage.getVar("elementIndex").getInt(10); if(element == element2){ obj.sq_IntVectClear(); obj.sq_IntVectPush(100); obj.sq_IntVectPush(element); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_CHANGESWORD, STATE_PRIORITY_IGNORE_FORCE, true); break; } if(obj.getWeaponSubType() == 0 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY) > 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(100); obj.sq_IntVectPush(element + 100); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_CHANGESWORD, STATE_PRIORITY_IGNORE_FORCE, true); } else{ obj.sq_IntVectClear(); obj.sq_IntVectPush(100); obj.sq_IntVectPush(element); obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_CHANGESWORD, STATE_PRIORITY_IGNORE_FORCE, true); } } break; } } } function onEndState_ATSwordmanThrow(obj, newState) { if(newState == STATE_STAND){ if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); local effectObj = obj.getVar("elementalsword").get_obj_vector(0); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); local element = colObj.getVar("custom").getInt(10); switch(element){ case 0: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/fire/fireswordend_04.ani", 0, 0, 0); break; case 1: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/ice/iceswordend_04.ani", 0, 0, 0); break; case 2: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/dark/darkswordend_04.ani", 0, 0, 0); break; case 3: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/light/lightswordend_04.ani", 0, 0, 0); break; } colObj.setValid(false); } } } function changeSwordEffect_bykk(obj, AniName, skillIndex) { local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) return; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) return; local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); local element = addAppendage.getVar("elementIndex").getInt(10); local elementArr = [ ["_fire_x.ani","_fire_a.ani","_fire_b.ani"], ["_ice_x.ani","_ice_a.ani","_ice_b.ani"], ["_dark_b1.ani","_dark_a.ani","_dark_a2.ani","_dark_b.ani","_dark_b2.ani"], ["_light_x.ani","_light_a.ani","_light_b.ani"] ]; local aniPath = []; for(local i = 0; i < elementArr[element].len(); ++i){ aniPath.push("effect/animation/atchangeswordweapon/" + AniName + elementArr[element][i]); } local drawLayer = 1; if(skillIndex == 96) drawLayer = 1; else if(skillIndex == 141) drawLayer = -1; foreach(key,path in aniPath){ obj.sq_AddStateLayerAnimation(drawLayer,obj.sq_CreateCNRDAnimation(path), 0, 0); } } function getStayAni_ATSwordman(obj) { if(!obj) return null; local sq_var = obj.getVar(); local ani = obj.sq_GetStayAni(); local growType = sq_getGrowType(obj); switch(growType){ case 1: local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break; local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); local element = addAppendage.getVar("elementIndex").getInt(10); switch(element){ case 0: ani = obj.sq_GetCustomAni(194); break; case 1: ani = obj.sq_GetCustomAni(193); break; case 2: ani = obj.sq_GetCustomAni(196); break; case 3: ani = obj.sq_GetCustomAni(195); break; } break; case 3: if(sq_GetSkillLevel(obj, 148) > 0) ani = obj.sq_GetCustomAni(361); break; } return ani; } function getRestAni_ATSwordman(obj) { if(!obj) return null; local ani = obj.sq_GetRestAni(); local growType = sq_getGrowType(obj); switch(growType){ case 1: local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break; local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); local element = addAppendage.getVar("elementIndex").getInt(10); switch(element){ case 0: ani = obj.sq_GetCustomAni(186); break; case 1: ani = obj.sq_GetCustomAni(185); break; case 2: ani = obj.sq_GetCustomAni(188); break; case 3: ani = obj.sq_GetCustomAni(187); break; } break; case 3: if(sq_GetSkillLevel(obj, 148) > 0) ani = obj.sq_GetCustomAni(359); break; case 0: if(sq_GetSkillLevel(obj, 127) > 0) ani = obj.sq_GetCustomAni(708); break; } return ani; } function getMoveAni_ATSwordman(obj) { if(!obj) return null; local sq_var = obj.getVar(); local ani = obj.sq_GetMoveAni(); local growType = sq_getGrowType(obj); switch(growType){ case 1: local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break; local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); local element = addAppendage.getVar("elementIndex").getInt(10); switch(element){ case 0: ani = obj.sq_GetCustomAni(178); break; case 1: ani = obj.sq_GetCustomAni(177); break; case 2: ani = obj.sq_GetCustomAni(180); break; case 3: ani = obj.sq_GetCustomAni(179); break; } break; case 3: if(sq_GetSkillLevel(obj, 148) > 0) ani = obj.sq_GetCustomAni(357); break; } return ani; } function getSitAni_ATSwordman(obj) { if(!obj) return null; local ani = obj.sq_GetSitAni(); local growType = sq_getGrowType(obj); switch(growType){ case 1: local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break; local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); local element = addAppendage.getVar("elementIndex").getInt(10); switch(element){ case 0: ani = obj.sq_GetCustomAni(190); break; case 1: ani = obj.sq_GetCustomAni(189); break; case 2: ani = obj.sq_GetCustomAni(192); break; case 3: ani = obj.sq_GetCustomAni(191); break; } break; case 3: if(sq_GetSkillLevel(obj, 148) > 0) ani = obj.sq_GetCustomAni(360); break; } return ani; } function getDamageAni_ATSwordman(obj, index) { if(!obj) return null; local ani = obj.sq_GetDamageAni(index); local growType = sq_getGrowType(obj); switch(growType){ case 1: local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break; local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); local element = addAppendage.getVar("elementIndex").getInt(10); switch(index){ case 0: switch(element){ case 0: ani = obj.sq_GetCustomAni(145); break; case 1: ani = obj.sq_GetCustomAni(146); break; case 2: ani = obj.sq_GetCustomAni(148); break; case 3: ani = obj.sq_GetCustomAni(147); break; } break; case 1: switch(element){ case 0: ani = obj.sq_GetCustomAni(149); break; case 1: ani = obj.sq_GetCustomAni(150); break; case 2: ani = obj.sq_GetCustomAni(152); break; case 3: ani = obj.sq_GetCustomAni(151); break; } break; } break; case 3: if(sq_GetSkillLevel(obj, 148) > 0){ if(index == 0) ani = obj.sq_GetCustomAni(350); else if(index == 1) ani = obj.sq_GetCustomAni(351); } break; } return ani; } function getDownAni_ATSwordman(obj) { if(!obj) return null; local ani = obj.sq_GetDownAni(); local growType = sq_getGrowType(obj); switch(growType){ case 1: local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break; local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); local element = addAppendage.getVar("elementIndex").getInt(10); switch(element){ case 0: ani = obj.sq_GetCustomAni(162); break; case 1: ani = obj.sq_GetCustomAni(161); break; case 2: ani = obj.sq_GetCustomAni(164); break; case 3: ani = obj.sq_GetCustomAni(163); break; } break; case 3: if(sq_GetSkillLevel(obj, 148) > 0) ani = obj.sq_GetCustomAni(353); break; } return ani; } function getOverturnAni_ATSwordman(obj) { if(!obj) return null; local sq_var = obj.getVar(); local ani = obj.sq_GetOverturnAni(); local growType = sq_getGrowType(obj); switch(growType){ case 1: local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break; local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); local element = addAppendage.getVar("elementIndex").getInt(10); switch(element){ case 0: ani = obj.sq_GetCustomAni(182); break; case 1: ani = obj.sq_GetCustomAni(181); break; case 2: ani = obj.sq_GetCustomAni(184); break; case 3: ani = obj.sq_GetCustomAni(183); break; } break; case 3: if(sq_GetSkillLevel(obj, 148) > 0) ani = obj.sq_GetCustomAni(358); break; } return ani; } function getJumpAni_ATSwordman(obj) { if(!obj) return null; local sq_var = obj.getVar(); local ani = obj.sq_GetJumpAni(); local growType = sq_getGrowType(obj); switch(growType){ case 1: local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break; local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); local element = addAppendage.getVar("elementIndex").getInt(10); switch(element){ case 0: ani = obj.sq_GetCustomAni(170); break; case 1: ani = obj.sq_GetCustomAni(169); break; case 2: ani = obj.sq_GetCustomAni(172); break; case 3: ani = obj.sq_GetCustomAni(171); break; } break; case 3: if(sq_GetSkillLevel(obj, 148) > 0) ani = obj.sq_GetCustomAni(355); break; } return ani; } function getJumpAttackAni_ATSwordman(obj) { if(!obj) return null; local ani = obj.sq_GetJumpAttackAni(); local growType = sq_getGrowType(obj); switch(growType){ case 1: local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break; local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); local element = addAppendage.getVar("elementIndex").getInt(10); switch(element){ case 0: ani = obj.sq_GetCustomAni(174); break; case 1: ani = obj.sq_GetCustomAni(173); break; case 2: ani = obj.sq_GetCustomAni(176); break; case 3: ani = obj.sq_GetCustomAni(175); break; } break; case 3: if(sq_GetSkillLevel(obj, 148) > 0) ani = obj.sq_GetCustomAni(356); break; case 4: if(sq_GetSkillLevel(obj, 62) > 0) ani = obj.sq_GetCustomAni(513); break; case 0: if(sq_GetSkillLevel(obj, 127) > 0) ani = obj.sq_GetCustomAni(630); break; } return ani; } function getDashAni_ATSwordman(obj) { if(!obj) return null; local ani = obj.sq_GetDashAni(); local growType = sq_getGrowType(obj); switch(growType){ case 1: local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break; local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); local element = addAppendage.getVar("elementIndex").getInt(10); switch(element){ case 0: ani = obj.sq_GetCustomAni(154); break; case 1: ani = obj.sq_GetCustomAni(153); break; case 2: ani = obj.sq_GetCustomAni(156); break; case 3: ani = obj.sq_GetCustomAni(155); break; } break; case 3: if(sq_GetSkillLevel(obj, 148) > 0) ani = obj.sq_GetCustomAni(352); break; } return ani; } function getGetItemAni_ATSwordman(obj) { if(!obj) return null; local sq_var = obj.getVar(); local ani = obj.sq_GetGetItemAni(); local growType = sq_getGrowType(obj); switch(growType){ case 1: local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD); if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break; local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); local element = addAppendage.getVar("elementIndex").getInt(10); switch(element){ case 0: ani = obj.sq_GetCustomAni(166); break; case 1: ani = obj.sq_GetCustomAni(165); break; case 2: ani = obj.sq_GetCustomAni(168); break; case 3: ani = obj.sq_GetCustomAni(167); break; } break; case 3: if(sq_GetSkillLevel(obj, 148) > 0) ani = obj.sq_GetCustomAni(354); break; } return ani; } function isChangeSword_Attack(obj,damager,bounding_box) { if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) return; local timer = obj.getVar("isChangeSword").get_ct_vector(0); if(!timer){ obj.getVar("isChangeSword").clear_ct_vector(); obj.getVar("isChangeSword").push_ct_vector(); timer = obj.getVar("isChangeSword").get_ct_vector(0); timer.Reset(); timer.Start(10000,0); } local currentT = timer.Get(); local coolTime = 300; if(obj.getWeaponSubType() == 0 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY) > 0) coolTime = coolTime * (100 - sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY, 1, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY))) / 100; if(currentT >= coolTime){ timer.Reset();//初始化 timer.Start(10000,0);//计时开始 local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); local element = addAppendage.getVar("elementIndex").getInt(10); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_CHANGESWORD, -1, 2, 1.0); switch(element){ case 1: totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_CHANGESWORD, -1, 2, 1.0); break; case 2: totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_CHANGESWORD, -1, 9, 1.0); break; case 3: totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_CHANGESWORD, -1, 6, 1.0); break; } if(obj.getWeaponSubType() == 1 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY) > 0) totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY, 9, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY))) / 100; else if(obj.getVar("elementalsword").get_obj_vector_size() > 0) totalDamage = totalDamage * (100 + sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY, 0)) / 100; local z = sq_GetCenterZPos(bounding_box); if(element == 3) z = 0; local group = sq_GetGroup(damager); local uniqueId = sq_GetUniqueId(damager); // if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/magicswordup/ap_magicswordup.nut")){ // if(obj.getWeaponSubType() == 0) cearteSkillPassiveObj_AtSwordMan_bykk(obj,damager,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,z,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_CHANGESWORD,1,totalDamage,element,group,uniqueId,0,0,0,0,1); // } // else cearteSkillPassiveObj_AtSwordMan_bykk(obj,damager,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,z,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_CHANGESWORD,1,totalDamage,element,group,uniqueId,0,0,0,0,1); local weaponType = obj.getWeaponSubType();//0短1太2钝3巨 switch(weaponType){ case 0: if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY) < 0) break; local effectObj = obj.getVar("elementalsword").get_obj_vector(0); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); local element = colObj.getVar("custom").getInt(10); totalDamage = totalDamage * sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY, 0) / 100; if(element == 3) z = 0; else if(z == 0 && element != 3) z = sq_GetCenterZPos(bounding_box); cearteSkillPassiveObj_AtSwordMan_bykk(obj,damager,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,z,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_CHANGESWORD,1,totalDamage,element,group,uniqueId,0,0,0,0,1); } break; case 1: case 2: case 3: local effectObj = obj.getVar("elementalsword").get_obj_vector(0); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); local state = colObj.getState(); switch(state % 10){ case 0: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/fire/fireswordend_04.ani", 0, 0, 0); break; case 1: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/ice/iceswordend_04.ani", 0, 0, 0); break; case 2: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/dark/darkswordend_04.ani", 0, 0, 0); break; case 3: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/light/lightswordend_04.ani", 0, 0, 0); break; } colObj.setValid(false); } break; } } } function isMagicSwordUp_Attack(obj,damager,bounding_box) { if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/magicswordup/ap_magicswordup.nut")) return; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) return; local timer = obj.getVar("isMagicSwordUp").get_ct_vector(0); if(!timer){ obj.getVar("isMagicSwordUp").clear_ct_vector(); obj.getVar("isMagicSwordUp").push_ct_vector(); timer = obj.getVar("isMagicSwordUp").get_ct_vector(0); timer.Reset(); timer.Start(10000,0); } local currentT = timer.Get(); local coolTime = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 4); if(obj.getWeaponSubType() == 0 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY) > 0) coolTime = coolTime * (100 - sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY, 1, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY))) / 100; print("coolTime = "+coolTime); if(currentT >= coolTime){ timer.Reset();//初始化 timer.Start(10000,0);//计时开始 local loadSlot = obj.sq_GetSkillLoad(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT); if(loadSlot && loadSlot.getRemainLoadNumber() < sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 0)) loadSlot.increaseLoadCount(1); local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); local element = addAppendage.getVar("elementIndex").getInt(10); local skill_level = sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 5, 1.0) + 100, level = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 2, skill_level), prob = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 7, skill_level), time = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 9, skill_level), damage = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 8, skill_level); switch(element){ case 1://冰 totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 1, 1.0) + 100; prob = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 4, skill_level); time = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 3, skill_level); break; case 2://暗 totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 0, 1.0) + 100; prob = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 13, skill_level); time = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 11, skill_level); break; case 3: totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 10, 1.0) + 100; break;//光 } if(obj.getWeaponSubType() == 0 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY) > 0) totalDamage = totalDamage * (1000 + sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY, 1)) / 1000; local z = sq_GetCenterZPos(bounding_box); local x = 0; if(element == 1){x = 50;z = z - 30;} cearteSkillPassiveObj_AtSwordMan_bykk(obj,damager,PASSIVEOBJECT_BYKK_SWORDMASTER,x,0,z + sq_getRandom(-10, 10),obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_MAGICSWORDUP,element,totalDamage,level,prob,time,damage,0,0,0,1); if(obj.getWeaponSubType() == 0 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY) > 0){ local effectObj = obj.getVar("elementalsword").get_obj_vector(0); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); local element = colObj.getVar("custom").getInt(10); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 5, 1.0) + 100, level = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 2, skill_level), prob = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 7, skill_level), time = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 9, skill_level), damage = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 8, skill_level); switch(element){ case 1://冰 totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 1, 1.0) + 100; prob = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 4, skill_level); time = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 3, skill_level); break; case 2://暗 totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 0, 1.0) + 100; prob = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 13, skill_level); time = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 11, skill_level); break; case 3: totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 10, 1.0) + 100; break;//光 } local x = 0; totalDamage = totalDamage * sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY, 0) / 100; if(element == 1){x = 50;z = z - 30;} cearteSkillPassiveObj_AtSwordMan_bykk(obj,damager,PASSIVEOBJECT_BYKK_SWORDMASTER,x,0,z + sq_getRandom(-10, 10),obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_MAGICSWORDUP,element,totalDamage,level,prob,time,damage,0,0,0,1); } } } } function setWeaponMaster_attackElement(obj) { if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")){ local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"); local element = addAppendage.getVar("elementIndex").getInt(10); local elemantalInfo = [ENUM_ELEMENT_FIRE,ENUM_ELEMENT_WATER,ENUM_ELEMENT_DARK,ENUM_ELEMENT_LIGHT]; local attackInfo = sq_GetCurrentAttackInfo(obj); if(!attackInfo.isValidElement(elemantalInfo[element])) attackInfo.setElement(elemantalInfo[element]); } local effectObj = obj.getVar("elementalsword").get_obj_vector(0); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); local element = colObj.getVar("custom").getInt(10); local elemantalInfo = [ENUM_ELEMENT_FIRE,ENUM_ELEMENT_WATER,ENUM_ELEMENT_DARK,ENUM_ELEMENT_LIGHT]; local attackInfo = sq_GetCurrentAttackInfo(obj); if(!attackInfo.isValidElement(elemantalInfo[element])) attackInfo.setElement(elemantalInfo[element]); } } function startSkillCoolTime_SwordMaster_bykk(obj, skillIndex, skillLevel, currentCoolTime) { if(obj.getVar("Drawsword_cooltime").getBool(0)){ obj.getVar("Drawsword_cooltime").setBool(0, false); local decreaseRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY, 1); local coolTime = currentCoolTime * (100 - decreaseRate) / 100; return coolTime; } } function SetAddskillLevel_bykk(obj) { // if(sq_GetSkillLevel(obj, 254) > 0){ if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/gunner/latentability/ap_addskilllevel.nut")) CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/gunner/latentability/ap_addskilllevel.nut", true); } /**/ } function resetDungeonStart_bykk(obj, moduleType, resetReason, isDeadTower, isResetSkillUserCount) { // // if(sq_GetSkillLevel(obj, 254) > 0){ // if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/gunner/latentability/ap_addskilllevel.nut")) CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/gunner/latentability/ap_addskilllevel.nut", true); // else{ // local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/gunner/latentability/ap_addskilllevel.nut"); // if(addAppendage) addAppendage.getVar("value").setInt(0, 0); // } // } } function proc_appendage_addskilllevelbykk(appendage) { if(!appendage) return; local obj = appendage.getParent(); local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj); if(!sqrChr || sqrChr.getState() == STATE_DIE){ appendage.setValid(false); return; } local t = appendage.getVar("time").get_timer_vector(0); local currentT = appendage.getTimer().Get(); if(t && t.isOnEvent(currentT)){ local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_LATENTABILITY); local value = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 50, skillLevel); //1-50級技能等級 local sqrJob = sq_getJob(sqrChr); if(ADD_SKILLLEVEL.rawget(sqrJob) && value > 0){ // if(value != appendage.getVar("value").getInt(0)){ // appendage.getVar("value").setInt(0, value); foreach(sklindex in ADD_SKILLLEVEL.rawget(sqrJob)){ addSkillLevelTime(sqrChr, sklindex, value, 3000); } return; // } } } } function onStart_appendage_addskilllevelbykk(appendage) { if(!appendage) return; appendage.getVar("time").clear_timer_vector(); appendage.getVar("time").push_timer_vector(); local t_01 = appendage.getVar("time").get_timer_vector(0); t_01.setParameter(3000, -1); t_01.resetInstant(0); appendage.getVar("value").setInt(0, 0); print("load"); } function onEnd_appendage_addskilllevelbykk(appendage) { if(!appendage) return; }