function onTimeEvent_po_thief_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return; local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); local job = obj.getVar("job").getInt(0); local skillIndex = obj.getVar("skillIndex").getInt(0); local subtype = obj.getVar("subtype").getInt(0); local state = obj.getVar("state").getInt(0); switch(job){ case 0: break; case 1: break; case 2: if(timeEventIndex < 5){ switch(timeEventIndex){ case 0: obj.resetHitObjectList(); break; case 1: sq_SendDestroyPacketPassiveObject(obj); break; } } else{ switch(skillIndex){ case SKILL_BYKK_SUMMONNICOLAS: switch(timeEventIndex){ case 10: obj.sq_SetMoveParticle("particle/daggerdown.ptl", 0.0, 0.0); break; case 11: local totalDamage = obj.getVar("custom").getInt(10); local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/nicolas/animation/nicolastp_spider_fire.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 33)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; } break; case SKILL_BYKK_NICOLASBLACKAREA: switch(timeEventIndex){ case 10: if(!sqrChr || sqrChr.getState() == STATE_DIE) break; local bDownKey = sqrChr.isDownSkillLastKey(); if(bDownKey){ obj.getVar("custom").setInt(0, obj.getVar("custom").getInt(0) + 1); if(timeEventCount >= 10){ if(obj.getVar("custom").getInt(0) >= 8) obj.stopTimeEvent(11); } } else{ if(obj.getVar("custom").getInt(0) >= 8) obj.stopTimeEvent(11); } break; case 11: local targetObj = obj.getVar("tar").get_obj_vector(0); if(targetObj){ sq_setCurrentAxisPos(obj, 0, sq_GetXPos(targetObj)); sq_setCurrentAxisPos(obj, 1, sq_GetYPos(targetObj)); } else sq_SendDestroyPacketPassiveObject(obj); break; } break; case SKILL_BYKK_NICOLASSUMMONZOMBIE: switch(timeEventIndex){ case 11: case 12: case 13: case 14: local sizeRate = obj.getVar("custom").getInt(0); sizeRate = sizeRate.tofloat() / 100.0; switch(timeEventIndex){ case 11: local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/darkexplosionparticle1.ani", sq_getRandom(-10,10), sq_getRandom(-10,10), sq_getRandom(-10,10)); local currentAni = pooledObj.getCurrentAnimation(); currentAni.setImageRateFromOriginal(sizeRate, sizeRate); break; case 12: local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/darkexplosionparticle2.ani", 0, 2, 0); local currentAni = pooledObj.getCurrentAnimation(); currentAni.setImageRateFromOriginal(sizeRate, sizeRate); break; case 13: local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/darkexplosionparticle3.ani", 0, 1, 1); local currentAni = pooledObj.getCurrentAnimation(); local angle = sq_ToRadian(360.0 * timeEventCount / 16); sq_SetfRotateAngle(currentAni, angle); currentAni.setImageRateFromOriginal(sizeRate * 2.0, sizeRate * 2.0); break; case 14: local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/darkexplosionparticle4.ani", sq_getRandom(-30,30), sq_getRandom(-30,30), sq_getRandom(-30,30)); local currentAni = pooledObj.getCurrentAnimation(); currentAni.setImageRateFromOriginal(sizeRate, sizeRate); break; } break; } break; case SKILL_BYKK_NICOLASBLACKARACHNIA: switch(timeEventIndex){ case 10: local targetObj = obj.getVar("tar").get_obj_vector(0); if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); break; case 11: local targetObj = obj.getVar("tar").get_obj_vector(0); if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, APDPATH_NICOLAS_BLACKWAVE); sq_SendDestroyPacketPassiveObject(obj); break; } break; case SKILL_BYKK_APPORTBALLACRE: switch(timeEventIndex){ case 10: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; case 11: if(!sqrChr || sqrChr.getState() == STATE_DIE) sq_SendDestroyPacketPassiveObject(obj); local offsetX = sq_GetDistancePos(sq_GetXPos(sqrChr), sq_GetDirection(sqrChr), -25), offsetY = sq_GetYPos(sqrChr) - 1, offsetZ = sq_GetZPos(sqrChr); if(sqrChr.getState() == STATE_JUMP_ATTACK) offsetY = offsetY + 2; sq_setCurrentAxisPos(obj, 0, offsetX); sq_setCurrentAxisPos(obj, 1, offsetY); sq_setCurrentAxisPos(obj, 2, offsetZ); sq_SetCurrentDirection(obj, sq_GetDirection(sqrChr)); break; case 12: local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(2, 7); local speedRate = obj.getVar("setSpeedRate").getFloat(0); if(speedRate > 100.0) delay = (delay.tofloat() / speedRate * 100.0).tointeger(); obj.setTimeEvent(0, delay / 10, 4, false); break; case 13: local v = sq_GetUniformVelocity(0, 500, timeEventCount, 100); local dstX = sq_GetDistancePos(obj.getVar("move").getInt(0), obj.getDirection(), v); sq_setCurrentAxisPos(obj, 0, dstX); if(timeEventCount >= 100) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; case 14: if(!sqrChr || sqrChr.getState() == STATE_DIE) sq_SendDestroyPacketPassiveObject(obj); local offsetX = sq_GetDistancePos(sq_GetXPos(sqrChr), sq_GetDirection(sqrChr), -25), offsetY = sq_GetYPos(sqrChr) + 1, offsetZ = sq_GetZPos(sqrChr) + 30; sq_setCurrentAxisPos(obj, 0, offsetX); sq_setCurrentAxisPos(obj, 1, offsetY); break; case 15: if(!sqrChr || sqrChr.getState() == STATE_DIE) sq_SendDestroyPacketPassiveObject(obj); local subX = sq_GetUniformVelocity(-25, 15, timeEventCount, 5), subY = -1; switch(timeEventCount){ case 2: subY = 0; break; case 3: subY = 1; break; case 4: subY = 1; break; case 5: subY = 1; break; } local offsetX = sq_GetDistancePos(sq_GetXPos(sqrChr), sq_GetDirection(sqrChr), subX), offsetY = sq_GetYPos(sqrChr) + subY; sq_setCurrentAxisPos(obj, 0, offsetX); sq_setCurrentAxisPos(obj, 1, offsetY); break; case 16: if(!sqrChr || sqrChr.getState() == STATE_DIE) sq_SendDestroyPacketPassiveObject(obj); local v = sq_GetUniformVelocity(15, 50, timeEventCount, 5); local offsetX = sq_GetDistancePos(sq_GetXPos(sqrChr), sq_GetDirection(sqrChr), v); sq_setCurrentAxisPos(obj, 0, offsetX); break; case 17: if(!sqrChr || sqrChr.getState() == STATE_DIE) sq_SendDestroyPacketPassiveObject(obj); local v = sq_GetYPos(sqrChr) + sq_GetUniformVelocity(-1, 1, timeEventCount, 3); sq_setCurrentAxisPos(obj, 1, v); break; case 18: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; case 20: local v = sq_GetUniformVelocity(0, 400, timeEventCount, 50); local dstX = sq_GetDistancePos(obj.getVar("move").getInt(0), obj.getDirection(), v); sq_setCurrentAxisPos(obj, 0, dstX); if(timeEventCount >= 50) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_BYKK_PHANTOMSTROM: switch(timeEventIndex){ case 10: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; case 11: local flashScreenObj = sqrChr.getVar("flashobj").get_obj_vector(0); local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj); if(pflashScreen){ pflashScreen.fadeOut(); sq_flashScreen(obj,0,0,240,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); } local totalDamage = obj.getVar("custom").getInt(1); createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,0,0,100,obj.getDirection(),2,SKILL_BYKK_PHANTOMSTROM,3,totalDamage,0,0,0,0,0,0,0); sq_SendDestroyPacketPassiveObject(obj); break; case 12: case 13: case 14: case 15: local sizeRate = 3.0; switch(timeEventIndex){ case 11: local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/darkexplosionparticle1.ani", sq_getRandom(-10,10), sq_getRandom(-10,10), sq_getRandom(-10,10)); local currentAni = pooledObj.getCurrentAnimation(); currentAni.setImageRateFromOriginal(sizeRate, sizeRate); break; case 12: local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/darkexplosionparticle2.ani", 0, 2, 0); local currentAni = pooledObj.getCurrentAnimation(); currentAni.setImageRateFromOriginal(sizeRate, sizeRate); break; case 13: local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/darkexplosionparticle3.ani", 0, 1, 1); local currentAni = pooledObj.getCurrentAnimation(); local angle = sq_ToRadian(360.0 * timeEventCount / 16); sq_SetfRotateAngle(currentAni, angle); currentAni.setImageRateFromOriginal(sizeRate * 2.0, sizeRate * 2.0); break; case 14: local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/darkexplosionparticle4.ani", sq_getRandom(-30,30), sq_getRandom(-30,30), sq_getRandom(-30,30)); local currentAni = pooledObj.getCurrentAnimation(); currentAni.setImageRateFromOriginal(sizeRate, sizeRate); break; } break; case 20: obj.sq_PlaySound("R_PHANTOMBLADE_GHOST_ATK"); obj.sq_PlaySound("BLADE_PHANTOM_RISE"); obj.sq_PlaySound("BLADE_PHANTOM_SWISH"); break; } break; case SKILL_BYKK_DARKSOUL: switch(timeEventIndex){ case 10: local offsetY = obj.getVar("custom").getInt(3); local targetObj = obj.sq_FindFirstTarget(50, 150, offsetY, 100); if(targetObj){ obj.sq_RemoveMoveParticle(); obj.getVar("tat").clear_obj_vector(); obj.getVar("tat").push_obj_vector(targetObj); obj.getVar("move").setInt(0, sq_GetXPos(obj)); obj.getVar("move").setInt(1, sq_GetYPos(obj)); obj.setTimeEvent(11, 5, 50, true); } break; case 11: local targetObj = obj.getVar("tat").get_obj_vector(0); if(targetObj){ local vx = sq_GetUniformVelocity(obj.getVar("move").getInt(0), sq_GetXPos(targetObj), timeEventCount, 50); local vy = sq_GetUniformVelocity(obj.getVar("move").getInt(1), sq_GetYPos(targetObj) + 1, timeEventCount, 50); sq_setCurrentAxisPos(obj, 0, vx); sq_setCurrentAxisPos(obj, 1, vy); if(timeEventCount >= 50){ if(subtype <= 2){ sq_moveWithParent(targetObj, obj); local attackIndex = 19; if(subtype == 2) attackIndex = 20; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(0)); obj.setTimeEvent(0, obj.getVar("custom").getInt(4), obj.getVar("custom").getInt(2), false); obj.setTimeEvent(13, obj.getVar("custom").getInt(4) * (obj.getVar("custom").getInt(2) + 1) + 100, 1, false); } else{ sq_AddDrawOnlyAniFromParent(targetObj, "passiveobject/6_thief_bykk/necromancer_bykk/animation/darksoul/lv95keyofaceron/passiveskeletonhit_00.ani", 0, 0, sq_GetHeightObject(targetObj) / 2); obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); local totalDamage = obj.getVar("custom").getInt(0); local totalDamage_exp = obj.getVar("custom").getInt(1); local hitMax = obj.getVar("custom").getInt(2); local hitTime = obj.getVar("custom").getInt(4); local group = sq_GetGroup(targetObj); local uniqueId = sq_GetUniqueId(targetObj); createSkillPassive_Theif_bykk(obj,targetObj,PASSIVEOBJ_NUM_THIEF,0,0,sq_GetHeightObject(targetObj) / 2,obj.getDirection(),2,SKILL_BYKK_DARKSOUL,4,totalDamage,totalDamage_exp,hitMax,0,hitTime,group,uniqueId,0); } } } else{ obj.stopTimeEvent(11); obj.sq_SetMoveParticle("particle/darksoul.ptl", 0.0, 0.0); } break; case 12: createOnlyDrawObjectEX_Theif_bykk(obj,"passiveobject/6_thief_bykk/necromancer_bykk/animation/darksoul/lv95keyofaceron/passivetrail01_00.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj),ENUM_DRAWLAYER_NORMAL,80,70); break; case 13: local totalDamage = obj.getVar("custom").getInt(1); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,obj.getDirection(),2,SKILL_BYKK_NICOLASSUMMONZOMBIE,3,totalDamage,100,0,0,0,0,-1,0); sq_SendDestroyPacketPassiveObject(obj); break; case 14: obj.resetHitObjectList(); if(timeEventCount >= obj.getVar("custom").getInt(2) - 1) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_BYKK_DARKLURE: switch(timeEventIndex){ case 10: obj.getVar().setBool(0, true); obj.sq_RemoveMoveParticle(); obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_BYKK_BLAMEOFDEAD: switch(timeEventIndex){ case 1: sq_SendDestroyPacketPassiveObject(obj); break; case 10: local targetObj = obj.getVar("tar").get_obj_vector(0); if(targetObj && targetObj.getState() != STATE_DIE){ sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); sq_AddDrawOnlyAniFromParent(targetObj, "character/thief/effect/animation/blameofdead/bonehandhitrnormal.ani", 0, 0, sq_GetHeightObject(targetObj) / 2); } else{ sq_SendDestroyPacketPassiveObject(obj); break; } if(timeEventCount >= obj.getVar("custom").getInt(0)) sq_SendDestroyPacketPassiveObject(obj); break; } break; case SKILL_BYKK_LIVINGDEAD: switch(timeEventIndex){ case 10: obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); break; case 11: local lifeTime = obj.getVar("custom").getInt(0); local sizeRate = obj.getVar("custom").getInt(1); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,-10 * timeEventCount,0,0,obj.getDirection(),2,SKILL_BYKK_LIVINGDEAD,5,lifeTime,sizeRate,0,0,0,0,0,0); break; } break; case SKILL_BYKK_BLAMEOFDEADEX: switch(timeEventIndex){ case 10: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_BYKK_HATEFULGHOST: switch(timeEventIndex){ case 10: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; case 11: local dstX = sq_GetDistancePos(sq_GetXPos(sqrChr), sqrChr.getDirection(), -75); local vx = sq_GetUniformVelocity(obj.getVar("move").getInt(0), dstX, timeEventCount, 50); local vy = sq_GetUniformVelocity(obj.getVar("move").getInt(1), sq_GetYPos(sqrChr), timeEventCount, 50); sq_setCurrentAxisPos(obj, 0, vx); sq_setCurrentAxisPos(obj, 1, vy); local aniPath = ["passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/moveeffecta.ani", "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/moveeffectb.ani", "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/moveeffectc.ani", "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/moveeffectd.ani"]; createOnlyDrawObject_Theif_bykk(obj,aniPath[sq_getRandom(0, 3)],true,obj.getDirection(),vx,vy - 1,0,ENUM_DRAWLAYER_BOTTOM); if(timeEventCount >= 50) obj.setTimeEvent(12, 10, -1, false); break; case 12: local xPos = sq_GetDistancePos(sq_GetXPos(sqrChr), sqrChr.getDirection(), -75), yPos = sq_GetYPos(sqrChr); sq_setCurrentAxisPos(obj, 0, xPos); sq_setCurrentAxisPos(obj, 1, yPos); sq_SetCurrentDirection(obj, sq_GetDirection(sqrChr)); local aniPath = ["passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/moveeffecta.ani", "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/moveeffectb.ani", "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/moveeffectc.ani", "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/moveeffectd.ani"]; createOnlyDrawObject_Theif_bykk(obj,aniPath[sq_getRandom(0, 3)],true,obj.getDirection(),xPos,yPos - 1,0,ENUM_DRAWLAYER_BOTTOM); break; case 13: local dstX = sq_GetDistancePos(sq_GetXPos(sqrChr), sqrChr.getDirection(), 150); local vx = sq_GetUniformVelocity(obj.getVar("move").getInt(0), dstX, timeEventCount, 50); local vy = sq_GetUniformVelocity(obj.getVar("move").getInt(1), sq_GetYPos(sqrChr), timeEventCount, 50); sq_setCurrentAxisPos(obj, 0, vx); sq_setCurrentAxisPos(obj, 1, vy); local aniPath = ["passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/moveeffecta.ani", "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/moveeffectb.ani", "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/moveeffectc.ani", "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/moveeffectd.ani"]; createOnlyDrawObject_Theif_bykk(obj,aniPath[sq_getRandom(0, 3)],true,obj.getDirection(),vx,vy - 1,0,ENUM_DRAWLAYER_BOTTOM); if(timeEventCount >= 50){ local setState = obj.getVar("setState").getInt(0); obj.addSetStatePacket(setState, null, STATE_PRIORITY_AUTO, false, ""); } break; case 20: local totalDamage = obj.getVar("custom").getInt(3); local sizeRate = obj.getVar("custom").getInt(5); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,100,0,0,obj.getDirection(),2,SKILL_BYKK_HATEFULGHOST,2,totalDamage,sizeRate,0,0,0,0,1,0); break; case 21: local currentAni = obj.getCurrentAnimation(); obj.setTimeEvent(0, currentAni.getDelaySum(2, 8) / 4, 2, false); break; case 22: local currentAni = obj.getCurrentAnimation(); obj.setTimeEvent(0, currentAni.getDelaySum(2, 19) / 6, 2, false); break; case 23: local currentAni = obj.getCurrentAnimation(); obj.setTimeEvent(0, currentAni.getDelaySum(3, 22) / 6, 2, false); break; } break; case SKILL_BYKK_COCONOFUNDEAD: switch(timeEventIndex){ case 10: sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/necromancer_bykk/animation/cocoonofundead/cocoonafront.ani", 0, 1, 0); sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/necromancer_bykk/animation/cocoonofundead/cocoonaback.ani", 0, -1, 0); break; case 11: createOnlyDrawObject_Theif_bykk(obj,"passiveobject/6_thief_bykk/necromancer_bykk/animation/cocoonofundead/cocoonabottom.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); break; case 12: obj.addSetStatePacket(25, null, STATE_PRIORITY_AUTO, false, ""); break; case 13: local size = obj.getVar("tar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("tar").get_obj_vector(i); if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); } } break; case 14://if(!sq_IsFixture(damager)) sq_MoveToAppendageForce(damager, obj, obj, 0, -1, 125, 1200, true, AddAppendage); local size = obj.getVar("tar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("tar").get_obj_vector(i); if(targetObj){ local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, APDPATH_COCONOFUNDEAD_HOLD); if(!sq_IsFixture(targetObj)) sq_MoveToAppendageForce(targetObj, obj, obj, 0, -1, 75, 300, true, AddAppendage); } } } break; } break; } } break; case 3: switch(skillIndex){ case SKILL_THBYKK_FLAMEBALL: switch(timeEventIndex){ case 1: obj.resetHitObjectList(); break; case 2: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; case 3: sq_SendDestroyPacketPassiveObject(obj); break; } break; case SKILL_THBYKK_BIGKUNAI: switch(timeEventIndex){ case 1: obj.resetHitObjectList(); break; case 2: obj.removeAllTimeEvent(); local totalDamage = obj.getVar("custom").getInt(1); local sizeRate = obj.getVar("custom").getInt(4); local offSet = [[],[0, 0, 0], [0, 0, 30]]; local isBlue = obj.getVar("custom").getInt(8); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,offSet[subtype][0],offSet[subtype][1],offSet[subtype][2],sq_GetDirection(obj),3,SKILL_THBYKK_BIGKUNAI,3,totalDamage,sizeRate,subtype,isBlue,0,0,0,0); if(obj.getVar("custom").getInt(9) > 0){ if(sqrChr && sqrChr.getState() != STATE_DIE){ sqrChr.getVar("bigkunaiMoveBool").setBool(0, false); sqrChr.getVar("bigkunaiMoveBool").setBool(1, false); } } sq_SendDestroyPacketPassiveObject(obj); break; case 3: local vx = sq_GetUniformVelocity(0, obj.getVar("custom").getInt(7), timeEventCount, 30); local vz = sq_GetUniformVelocity(obj.getVar("custom").getInt(6), 0, timeEventCount, 30); local dstX = sq_GetDistancePos(obj.getVar("custom").getInt(5), sq_GetDirection(obj), vx); sq_setCurrentAxisPos(obj, 0, dstX); sq_setCurrentAxisPos(obj, 2, vz); if(timeEventCount >= 30) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_THBYKK_FLAMETORNADO: switch(timeEventIndex){ case 1: obj.resetHitObjectList(); break; case 2: local totalDamage = obj.getVar("custom").getInt(1); local sizeRate = obj.getVar("custom").getInt(6); local isBlue = obj.getVar("custom").getInt(7); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,sq_GetDirection(obj),3,SKILL_THBYKK_FLAMETORNADO,2,totalDamage,sizeRate,isBlue,0,0,0,0,0); if(sqrChr && sqrChr.getState() != STATE_DIE) CNSquirrelAppendage.sq_RemoveAppendage(sqrChr, APDPATH_FLAMETORNADO_SUCK); sq_SendDestroyPacketPassiveObject(obj); break; case 3: local speed = 30.0; if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); else sq_SetVelocity(obj, 0, -speed); sq_SetVelocity(obj, 1, 0.0); break; case 4: local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flametornado/floor/floor_01.ani"; if(obj.getVar("custom").getInt(7) > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flametornado/bluefloor/bluefloor_01.ani"; local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath, 0, 0, 0); sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); break; } break; case SKILL_THBYKK_ILUSIONSHURIKEN: switch(subtype){ case 3: case 4: switch(timeEventIndex){ case 1: case 2: case 3: local totalDamage = obj.getVar("custom").getInt(0); local reboundCount = obj.getVar("custom").getInt(1); local isBlue = obj.getVar("custom").getInt(5); local offSet = [[],[72,0,66],[78,0,68],[87,0,67]]; if(subtype == 4) offSet = [[],[42,0,58],[36,0,61],[41,0,58]]; createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,offSet[timeEventIndex][0],offSet[timeEventIndex][1],offSet[timeEventIndex][2],sq_GetDirection(obj),3,SKILL_THBYKK_ILUSIONSHURIKEN,subtype - 2,totalDamage,reboundCount,isBlue,0,0,0,0,0); if(subtype == 3) sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/3kunoichi_bykk/illusionshuriken/particle_dust.ani", 0, 0, 0); obj.sq_PlaySound("R_GHOSTKUNAI_THROW"); break; case 4: sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/3kunoichi_bykk/illusionshuriken/end_smoke.ani", 0, 1, 0); sq_SendDestroyPacketPassiveObject(obj); break; } break; } break; case SKILL_THBYKK_MIGAWARI: switch(timeEventIndex){ case 1: local totalDamage = obj.getVar("custom").getInt(0); local sizeRate = obj.getVar("custom").getInt(1); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 1, 30,sq_GetDirection(obj),3,SKILL_THBYKK_MIGAWARI,3,totalDamage,sizeRate,0,0,0,0,0,0); sq_SendDestroyPacketPassiveObject(obj); break; } break; case SKILL_THBYKK_SKYROADS: switch(timeEventIndex){ case 1: local totalDamage = obj.getVar("custom").getInt(1); local sizeRate = obj.getVar("custom").getInt(2); local time = obj.getVar("custom").getInt(3); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_SKYROADS,5,totalDamage,sizeRate,time,0,0,0,0,0); break; } break; case SKILL_THBYKK_FLYINGSWALLOW: switch(timeEventIndex){ case 1: obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: local targetObj = obj.getVar("tar").get_obj_vector(0); if(targetObj && targetObj.getState() != STATE_DIE){ if(!CNSquirrelAppendage.sq_IsAppendAppendage(targetObj, APDPATH_FLYINGSWALLOW_HOLD)){ obj.removeAllTimeEvent(); obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); } } else sq_SendDestroyPacketPassiveObject(obj); break; case 3: local totalDamage = obj.getVar("custom").getInt(0); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flyingswallow/swallow_kunai1_attack.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 83)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; } break; case SKILL_THBYKK_DOOMFIELD: switch(timeEventIndex){ case 1: local totalDamage = obj.getVar("custom").getInt(0); local sizeRate = obj.getVar("custom").getInt(2); local isBlue = obj.getVar("custom").getInt(3); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_DOOMFIELD,6,totalDamage,sizeRate,isBlue,0,0,0,0,0); sq_SendDestroyPacketPassiveObject(obj); break; case 2: obj.resetHitObjectList(); break; } break; case SKILL_THBYKK_YAMATAOROCHI: switch(timeEventIndex){ case 1: obj.resetHitObjectList(); break; case 2: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; case 3: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; case 4: sq_flashScreen(obj,0,80,160,102, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); sq_SetMyShake(obj, 4, 200); break; case 5: sq_flashScreen(obj,0,80,160,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); break; case 6: sq_flashScreen(obj,0,80,320,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK); sq_SetMyShake(obj, 1, 500); break; } break; case SKILL_THBYKK_AMATERAS: switch(timeEventIndex){ case 1: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: sq_SendDestroyPacketPassiveObject(obj); break; case 3: local size = obj.getVar("tar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("tar").get_obj_vector(i); if(targetObj && targetObj.getState() != STATE_DIE){ sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); } } } break; case 4: if(sqrChr && sqrChr.getState() != STATE_DIE){ local size = sqrChr.getVar("AmaterasObj").get_obj_vector_size(); if(size > 0){ local aObj = sqrChr.getVar("Amateras").get_obj_vector(0); if(aObj){ local colObj = sq_GetCNRDObjectToCollisionObject(aObj); colObj.setTimeEvent(1, 2000, 1, false); } local laserMax = obj.getVar("custom").getInt(2); local totalDamage_laser = obj.getVar("custom").getInt(1); local offSet = [[210,130],[-210,130],[180,90],[-180,90],[130,60],[-130,60],[90,5],[-90,4]]; for(local i = 0; i < laserMax; i++){ createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, offSet[i][0], 0, offSet[i][1],sq_GetDirection(obj),3,SKILL_THBYKK_AMATERAS,3,totalDamage_laser,i,0,0,0,0,0,0); } } else{ local aObj = sqrChr.getVar("Amateras").get_obj_vector(0); if(aObj){ local colObj = sq_GetCNRDObjectToCollisionObject(aObj); colObj.setTimeEvent(1, 1500, 1, true); } } } sq_SendDestroyPacketPassiveObject(obj); break; case 5: obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 6: local targetObj = obj.getVar("tar").get_obj_vector(0); if(targetObj && targetObj.getState() != STATE_DIE){ local baseX = obj.getVar("custom").getInt(0); local baseY = obj.getVar("custom").getInt(1); local baseZ = obj.getVar("custom").getInt(2); local vx = sq_GetUniformVelocity(baseX, sq_GetXPos(targetObj), timeEventCount, 10); local vy = sq_GetUniformVelocity(baseY, sq_GetYPos(targetObj), timeEventCount, 10); local vz = sq_GetUniformVelocity(baseZ, sq_GetZPos(targetObj) + obj.getVar("custom").getInt(3), timeEventCount, 10); sq_setCurrentAxisPos(obj, 0, vx); sq_setCurrentAxisPos(obj, 1, vy); sq_setCurrentAxisPos(obj, 2, vz); if(timeEventCount == 10){ sq_AddDrawOnlyAniFromParent(targetObj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/amateras/laser/amateras_boom_dodge.ani", 0, 0, obj.getVar("custom").getInt(3)); sq_SendDestroyPacketPassiveObject(obj); } } else sq_SendDestroyPacketPassiveObject(obj); break; } break; case SKILL_THBYKK_FUUMASHURIKEN: switch(timeEventIndex){ case 0: sq_SendDestroyPacketPassiveObject(obj); break; case 1: obj.resetHitObjectList(); break; case 2: sq_SetVelocity(obj, 0, 0.0); sq_SetVelocity(obj, 1, 0.0); obj.getVar("custom").setInt(3, sq_GetXPos(obj)); obj.getVar("custom").setInt(4, sq_GetYPos(obj)); obj.setTimeEvent(3, 100, 1, false); break; case 3: obj.setTimeEvent(4, 10, obj.getVar("custom").getInt(0) / 10, true); break; case 4: local vx = sq_GetUniformVelocity(obj.getVar("custom").getInt(3), obj.getVar("custom").getInt(1), timeEventCount, 30); local vy = sq_GetUniformVelocity(obj.getVar("custom").getInt(4), obj.getVar("custom").getInt(2), timeEventCount, 30); sq_setCurrentAxisPos(obj, 0, vx); sq_setCurrentAxisPos(obj, 1, vy); if(timeEventCount >= 30){ if(obj.getVar("custom").getInt(5) < 1){ if(sqrChr && (sqrChr.getState() == 0 || sqrChr.getState() == 8 || sqrChr.getState() == 14)){ local atkObj = sqrChr.getVar("FuumaShuriken").get_obj_vector(0); if(atkObj){ local colObj = sq_GetCNRDObjectToCollisionObject(atkObj); colObj.setTimeEvent(0, 1000, 1, true); } sqrChr.sq_IntVectClear(); sqrChr.sq_IntVectPush(2); sqrChr.sq_AddSetStatePacket(STATE_THBYKK_FUUMASHURIKEN, STATE_PRIORITY_IGNORE_FORCE, true); } } sq_SendDestroyPacketPassiveObject(obj); } break; case 5: local totalDamage = obj.getVar("custom").getInt(0); local sizeRate = obj.getVar("custom").getInt(1); local isBlue = obj.getVar("custom").getInt(2); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_FUUMASHURIKEN,5,totalDamage,sizeRate,0,isBlue,0,0,0,0); sq_SendDestroyPacketPassiveObject(obj); break; } break; case SKILL_THBYKK_JADEKAMAITACHI: switch(timeEventIndex){ case 1: obj.resetHitObjectList(); break; case 2: createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 10,sq_GetDirection(obj),3,SKILL_THBYKK_JADEKAMAITACHI,3,0,0,0,0,0,0,0,0); sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/jadekamaitachi/renewal/finalattack_18.ani", 0, 0, 10); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/jadekamaitachi/renewal/finalattackbottom_00.ani"; createOnlyDrawObject_Theif_bykk(obj,aniPath,true,sq_GetDirection(obj),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); local totalDamage = obj.getVar("custom").getInt(0); local addNumber = obj.getVar("custom").getInt(0); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 10,sq_GetDirection(obj),3,SKILL_THBYKK_JADEKAMAITACHI,2,totalDamage,addNumber,0,0,0,0,0,0); break; case 4: sq_flashScreen(obj,0,30,0,204, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetShake(obj, 20, 200); break; } break; case SKILL_THBYKK_SWORDOFKUSANAGI: switch(timeEventIndex){ case 1: sq_flashScreen(obj,0,40,320,255, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 8, 300); break; case 2: local totalDamage = obj.getVar("custom").getInt(1); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, -1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_SWORDOFKUSANAGI,2,totalDamage,0,0,0,0,0,0,0); break; case 3: if(sqrChr.getVar("SwordOfKusanagiBool").getBool(0)) sqrChr.getVar("SwordOfKusanagiBool").setBool(0, false); sq_SendDestroyPacketPassiveObject(obj); break; case 4: obj.resetHitObjectList(); sq_SetMyShake(obj, 6, 300); break; case 5: obj.resetHitObjectList(); sq_SetMyShake(obj, 12, 300); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/swordofkusanagi/kkfinishfl_ff_a.ani"; local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath, 0, 0, 0); sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); break; } break; case SKILL_THBYKK_LEAVETRACE: switch(subtype){ case SKILL_THBYKK_FLAMEBALL: switch(timeEventIndex){ case 1: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_THBYKK_SKYROADS: switch(timeEventIndex){ case 1: local v = sq_GetAccel(0, 150, timeEventCount, 24, true); sq_setCurrentAxisPos(obj, 2, v); break; } break; case SKILL_THBYKK_FLAMEFLOWER: switch(timeEventIndex){ case 1: obj.addSetStatePacket(27, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: obj.resetHitObjectList(); break; } break; } break; case SKILL_THBYKK_DEITIESREBIRTH: switch(timeEventIndex){ case 1: obj.resetHitObjectList(); break; } break; case SKILL_THBYKK_FIREMARK: switch(timeEventIndex){ case 1: sq_SendDestroyPacketPassiveObject(obj); break; case 2: local targetObj = obj.getVar("tar").get_obj_vector(0); if(targetObj && targetObj.getState() != STATE_DIE){ sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetZPos(obj)); } else sq_SendDestroyPacketPassiveObject(obj); break; case 3: obj.removeAllTimeEvent(); obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case 255: switch(timeEventIndex){ case 1: obj.getVar("custom").setInt(3, timeEventCount); local allDamage = obj.getVar("damage").getInt(0); local count = obj.getVar("custom").getInt(2); local damage = allDamage / count; local targetObj = obj.getVar("tar").get_obj_vector(0); // print("timeEventCount = "+timeEventCount); // print("allDamage = "+allDamage+",,damage = "+damage); if(targetObj && targetObj.getState() != STATE_DIE){ local group = obj.getVar("custom").getInt(0); local uniqueId = obj.getVar("custom").getInt(1); local height = sq_GetHeightObject(targetObj) / 2; if(height > 75) height = 75; createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, height,sq_GetDirection(obj),3,255,2,group,uniqueId,damage,0,0,0,0,0); // obj.getVar("damage").setInt(0, allDamage - damage); if(timeEventCount == 1){ local time = obj.getVar("time").getInt(0); sq_EffectLayerAppendage(targetObj,sq_RGB(0,0,0),195,0,0,time + 2000); } if(timeEventCount == count){ obj.getVar("damage").setInt(0, 0); obj.getVar("damage").setInt(1, 0); } } else{ sq_SendDestroyPacketPassiveObject(obj); return; } if(obj.getVar("damage").getInt(0) != obj.getVar("damage").getInt(1)){ local newDamage = allDamage - damage * obj.getVar("custom").getInt(3); // print("newDamage = "+newDamage); if(newDamage < 0) newDamage = 0; obj.getVar("damage").setInt(0, newDamage); obj.getVar("damage").setInt(1, newDamage); obj.stopTimeEvent(1); obj.setTimeEvent(1, 500, count, false); } break; case 2: local targetObj = obj.getVar("tar").get_obj_vector(0); if(targetObj && targetObj.getState() != STATE_DIE){ local height = sq_GetObjectHeight(targetObj) / 2; if(height > 75) height = 75; sq_SendHitObjectPacket(obj,targetObj,0,0,height); obj.sq_PlaySound("BURN_VINE"); } break; case 3: local targetObj = obj.getVar("tar").get_obj_vector(0); if(targetObj && targetObj.getState() != STATE_DIE){ sq_EffectLayerAppendage(targetObj,sq_RGB(255,192,130),66,0,0,300); local allDamage = obj.getVar("damage").getInt(0); // print("PoisonDamageExp = "+allDamage); local group = obj.getVar("custom").getInt(0); local uniqueId = obj.getVar("custom").getInt(1); local height = sq_GetHeightObject(targetObj) / 2; if(height > 75) height = 75; createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, height,sq_GetDirection(obj),3,255,2,group,uniqueId,allDamage,0,0,0,0,0); } break; } break; } break; case 4: break; } } function onAttack_po_thief_bykk(obj, damager, boundingBox, isStuck) { if(!obj) return; local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); local job = obj.getVar("job").getInt(0); local skillIndex = obj.getVar("skillIndex").getInt(0); local subtype = obj.getVar("subtype").getInt(0); local state = obj.getVar("state").getInt(0); switch(job){ case 0: break; case 1: break; case 2: switch(skillIndex){ case SKILL_BYKK_SUMMONNICOLAS: switch(subtype){ case 3: if(obj.getVar().getBool(0) == false){ obj.getVar().setBool(0, true); obj.sq_RemoveMoveParticle(); obj.setTimeEvent(1, 1000, 1, false); } break; } break; case SKILL_BYKK_NICOLASSUMMONZOMBIE: switch(subtype){ case 2: if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ local targetObj = obj.getVar("targetObj").get_obj_vector(0); if(targetObj){ local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); if(!activeObj.getVar("tar").is_obj_vector(damager)) activeObj.getVar("tar").push_obj_vector(damager); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, APDPATH_ZOMBIE_HOLD, true); AddAppendage.sq_SetValidTime(5000); sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); } } break; } break; case SKILL_BYKK_NICOLASBLACKWAVE: switch(subtype){ case 1: if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ sq_AddDrawOnlyAniFromParent(damager, "monster/newmonsters/thief/nicolas/animation/effect/blackwave/hitnormal.ani", 0, 0, sq_GetCenterZPos(boundingBox) - sq_GetZPos(damager)); if(!sqrChr.getVar("blackwave_tar").is_obj_vector(damager)) sqrChr.getVar("blackwave_tar").push_obj_vector(damager); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, sqrChr, -1, false, APDPATH_NICOLAS_BLACKWAVE, true); AddAppendage.sq_SetValidTime(5000); sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); } break; } break; case SKILL_BYKK_NICOLASBLACKARACHNIA: switch(subtype){ case 1: if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ if(!sqrChr.getVar("blacjarachnia_tar").is_obj_vector(damager)){ sqrChr.getVar("blacjarachnia_tar").push_obj_vector(damager); local totalDamage = obj.getVar("custom").getInt(0); local holdTime = obj.getVar("custom").getInt(1); local hitTime = obj.getVar("custom").getInt(2); local sub = obj.getVar("custom").getInt(3); local group = sq_GetGroup(damager); local uniqueId = sq_GetUniqueId(damager); createSkillPassive_Theif_bykk(sqrChr,damager,PASSIVEOBJ_NUM_THIEF,0,0,0,obj.getDirection(),2,SKILL_BYKK_NICOLASBLACKARACHNIA,3,totalDamage,holdTime,hitTime,group,uniqueId,sub,0,0); } } break; } break; case SKILL_BYKK_APPORTBALLACRE: switch(subtype){ case 1: switch(state){ case 27: if(isStuck) break; if(damager.isObjectType(OBJECTTYPE_ACTIVE) && !sq_IsFixture(damager) && sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager)){ if(!obj.getVar("anjiquan_tar").is_obj_vector(damager)){ obj.getVar("anjiquan_tar").push_obj_vector(damager); local frameIndex = sq_GetCurrentFrameIndex(obj); if(frameIndex <= 5){ local currentAni = obj.getCurrentAnimation(); local delay = 80; local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, APDPATH_BALLACRE_HOLD, true); AddAppendage.sq_SetValidTime(5000); sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); sq_MoveToAppendageForce(damager, obj, obj, 30, -1, 150, delay, true, AddAppendage); } } } break; } break; } break; case SKILL_BYKK_BALLACREADVENT: switch(subtype){ case 1: if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ if(!sqrChr.getVar("Ballacreadvent_Tar").is_obj_vector(damager)) sqrChr.getVar("Ballacreadvent_Tar").push_obj_vector(damager); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, APDPATH_BALLACRE_HOLD, true); AddAppendage.sq_SetValidTime(5000); sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); } break; } break; case SKILL_BYKK_BLAMEOFDEAD: switch(subtype){ case 1: if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ local totalDamage = obj.getVar("custom").getInt(0); local lifeTime = obj.getVar("custom").getInt(1); local hitMax = obj.getVar("custom").getInt(2); local activeObj = sq_GetCNRDObjectToActiveObject(damager); local group = sq_GetGroup(activeObj); local uniqueId = sq_GetUniqueId(activeObj); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,obj.getDirection(),2,SKILL_BYKK_BLAMEOFDEAD,2,totalDamage,lifeTime,hitMax,group,uniqueId,0,0,0); } break; } break; case SKILL_BYKK_LIVINGDEAD: switch(subtype){ case 1: if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ if(obj.getVar("custom").getInt(2) == 0) sq_AddDrawOnlyAniFromParent(damager, "passiveobject/6_thief_bykk/necromancer_bykk/animation/livingdead/damageeffect01_03.ani", 0, 0, sq_GetCenterZPos(boundingBox)); else sq_AddDrawOnlyAniFromParent(damager, "passiveobject/6_thief_bykk/necromancer_bykk/animation/livingdead/damageeffect02_03.ani", 0, 0, sq_GetCenterZPos(boundingBox)); } break; } break; case SKILL_BYKK_COCONOFUNDEAD: switch(subtype){ case 1: switch(state){ case 20: if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ if(!obj.getVar("tar").is_obj_vector(damager)) obj.getVar("tar").push_obj_vector(damager); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, APDPATH_COCONOFUNDEAD_HOLD, true); AddAppendage.sq_SetValidTime(5000); sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); if(!sq_IsFixture(damager)) sq_MoveToAppendageForce(damager, obj, obj, 0, 0, 0, 750, true, AddAppendage); } break; } break; } break; } break; case 3: switch(skillIndex){ case SKILL_THBYKK_BIGKUNAI: switch(subtype){ case 1: switch(state){ case 20: local speed = 80.0; if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); else sq_SetVelocity(obj, 0, -speed); if(damager.isObjectType(OBJECTTYPE_ACTIVE) && !sq_IsFixture(damager) && sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager)) sq_moveWithParent(obj, damager); obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; } break; } if(subtype <= 2 && obj.getVar("custom").getInt(9) > 0){ if(sqrChr && sqrChr.getState() != STATE_DIE && sqrChr.getVar("bigkunaiMoveBool").getBool(0) == false){ sqrChr.getVar("bigkunaiMoveBool").setBool(0, true); sqrChr.getVar("bigkunaiMoveBool").setBool(1, true); sqrChr.getVar("bigkunaiMove").setInt(0, sq_GetXPos(obj)); sqrChr.getVar("bigkunaiMove").setInt(1, sq_GetYPos(obj)); } } break; case SKILL_THBYKK_ILUSIONSHURIKEN: switch(subtype){ case 1: if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ sq_AddDrawOnlyAniFromParent(damager, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/illusionshuriken/hit_"+sq_getRandom(0, 2).tostring()+".ani", 0, 0, sq_GetCenterZPos(boundingBox)); local reboundCount = obj.getVar("custom").getInt(0); if(reboundCount > 0){ obj.getVar("custom").setInt(0, reboundCount - 1); local speed = 1000.0; if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, -speed); else sq_SetVelocity(obj, 0, speed); sq_SetVelocity(obj, 1, sq_getRandom(-150, 150).tofloat()); } else sq_SendDestroyPacketPassiveObject(obj); } else sq_SendDestroyPacketPassiveObject(obj); break; } break; case SKILL_THBYKK_MIGAWARI: switch(subtype){ case 1: if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) break; local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, true, APDPATH_MIGAWARI_HOLD, true); sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); if(!sq_IsFixture(damager) && sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager)) sq_MoveToAppendageForce(damager, obj, obj, 0, -2, damager.getZPos(), 200, true, AddAppendage); local time = 200000 / obj.getVar("custom").getInt(0); AddAppendage.sq_SetValidTime(time); break; } break; case SKILL_THBYKK_SKYROADS: switch(subtype){ case 5: if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) break; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SKYROADS_HOLD)){ local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, APDPATH_SKYROADS_HOLD, true); sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); if(!sq_IsFixture(damager) && sq_GetZPos(obj) > 0) sq_MoveToAppendageForce(damager, obj, damager, 0, 0, -damager.getZPos(), 200, true, AddAppendage); AddAppendage.sq_SetValidTime(2000); } break; } break; case SKILL_THBYKK_FLYINGSWALLOW: switch(subtype){ case 1: if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) break; if(!sqrChr.getVar("FlyingSwallowTar").is_obj_vector(damager)){ sqrChr.getVar("FlyingSwallowTar").push_obj_vector(damager); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, APDPATH_FLYINGSWALLOW_HOLD, true); sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); if(!sq_IsFixture(damager)) sq_MoveToAppendageForce(damager, obj, obj, 0, 0, 0, 200, true, AddAppendage); local group = sq_GetGroup(damager); local uniqueId = sq_GetUniqueId(damager); createSkillPassive_Theif_bykk(obj,damager,PASSIVEOBJ_NUM_THIEF,0, 1, sq_GetHeightObject(damager) / 2,sq_GetDirection(obj),3,SKILL_THBYKK_FLYINGSWALLOW,2,group,uniqueId,0,0,0,0,0,0); } break; } break; case SKILL_THBYKK_DOOMFIELD: switch(subtype){ case 3: if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) break; if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, APDPATH_DOOMFIELD_HOLD)){ local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, sqrChr, -1, false, APDPATH_DOOMFIELD_HOLD, true); sq_HoldAndDelayDie(damager, sqrChr, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); if(!sq_IsFixture(damager)) sq_MoveToAppendageForce(damager, sqrChr, obj, 0, 0, 0, 200, true, AddAppendage); } break; } break; case SKILL_THBYKK_AMATERAS: switch(subtype){ case 2: if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) break; if(!sqrChr.getVar("AmaterasObj").is_obj_vector(damager)){ sqrChr.getVar("AmaterasObj").push_obj_vector(damager); } break; } break; case SKILL_THBYKK_FIREMARK: switch(subtype){ case 1: if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) break; if(damager.getVar("firemark").getBool(0) == false){ damager.getVar("firemark").setBool(0, true); local rangeNear = obj.getVar("custom").getInt(0); local dis = sq_GetDistance(sq_GetXPos(obj), sq_GetYPos(obj), sq_GetXPos(damager), sq_GetYPos(damager), true); if(dis < rangeNear){ local totalDamage = obj.getVar("custom").getInt(1); local totalDamage_exp = obj.getVar("custom").getInt(2); local hitTime = obj.getVar("custom").getInt(3); local lifeTime = obj.getVar("custom").getInt(4); local group = sq_GetGroup(damager); local uniqueId = sq_GetUniqueId(damager); createSkillPassive_Theif_bykk(obj,damager,PASSIVEOBJ_NUM_THIEF, 0, 0, sq_GetZPos(damager) + sq_GetHeightObject(damager) / 2,sq_GetDirection(obj),3,SKILL_THBYKK_FIREMARK,2,totalDamage,totalDamage_exp,hitTime,lifeTime,group,uniqueId,0,0); } else{ local totalDamage = obj.getVar("custom").getInt(6); local totalDamage_exp = obj.getVar("custom").getInt(7); local hitTime = obj.getVar("custom").getInt(8); local lifeTime = obj.getVar("custom").getInt(9); local group = sq_GetGroup(damager); local uniqueId = sq_GetUniqueId(damager); createSkillPassive_Theif_bykk(obj,damager,PASSIVEOBJ_NUM_THIEF, 0, 0, sq_GetZPos(damager) + sq_GetHeightObject(damager) / 2,sq_GetDirection(obj),3,SKILL_THBYKK_FIREMARK,3,totalDamage,totalDamage_exp,hitTime,lifeTime,group,uniqueId,0,0); } } break; } break; case SKILL_THBYKK_JADEKAMAITACHI: if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) return; if(!sqrChr || sqrChr.getState() == STATE_DIE) return; if(damager.getVar("markofFlameObj").get_obj_vector_size() > 0 && obj.getVar().getBool(0) == false && subtype == 2){ local markofFlameObj = damager.getVar("markofFlameObj").get_obj_vector(0); if(markofFlameObj){ obj.getVar().setBool(0, true); local colObj = sq_GetCNRDObjectToCollisionObject(markofFlameObj); if(colObj.isExistTimeEvent(1)) colObj.stopTimeEvent(1); colObj.setTimeEvent(3, 500, 1, true); } } break; } if(obj.getVar("markofFlame").getBool(0)){ local burnDamage = obj.getVar("markofFlameSet").getInt(3); local burnTime = obj.getVar("markofFlameSet").getInt(2); if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) return; if(!sqrChr || sqrChr.getState() == STATE_DIE) return; if(damager.getVar("markofFlameObj").get_obj_vector_size() > 0){ local markofFlameObj = damager.getVar("markofFlameObj").get_obj_vector(0); if(markofFlameObj){ local colObj = sq_GetCNRDObjectToCollisionObject(markofFlameObj); // print("add = "+burnDamage); local baseDamage = colObj.getVar("damage").getInt(0); colObj.getVar("damage").setInt(0, baseDamage + burnDamage); } } else{ local group = sq_GetGroup(damager); local uniqueId = sq_GetUniqueId(damager); local burnTime = obj.getVar("markofFlameSet").getInt(2); local baseDamage = obj.getVar("markofFlameSet").getInt(3); createSkillPassive_Theif_bykk(sqrChr,damager,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,255,1,group,uniqueId,burnTime,baseDamage,0,0,0,0); } } break; case 4: break; } } function onKeyFrameFlag_po_thief_bykk(obj, flagIndex) { if(!obj) return; local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); local job = obj.getVar("job").getInt(0); local skillIndex = obj.getVar("skillIndex").getInt(0); local subtype = obj.getVar("subtype").getInt(0); local state = obj.getVar("state").getInt(0); if(flagIndex == 1000 && sq_GetZPos(obj) > 1100){ local parentObj = obj.getParent(); if(!parentObj) sq_SendDestroyPacketPassiveObject(obj); local id = parentObj.getCollisionObjectIndex(); // print("id:" + id); if(sq_IsMyControlObject(sqrChr)) { sq_BinaryStartWrite(); sq_BinaryWriteDword(1); sq_BinaryWriteDword(id); sq_BinaryWriteDword(sq_GetGroup(parentObj)); sq_BinaryWriteDword(sq_GetUniqueId(parentObj)); sq_SendChangeSkillEffectPacket(sqrChr, SKILL_BYKK_SUMMONNICOLAS); sq_SendDestroyPacketPassiveObject(obj); } return true; } switch(job){ case 0: break; case 1: break; case 2: switch(skillIndex){ case SKILL_BYKK_NICOLASBLACKAREA: switch(subtype){ case 1: switch(flagIndex){ case 1001: if(obj.getVar().getBool(0) == false){ obj.getVar().setBool(0, true); local sizeRate = obj.getVar("custom").getInt(0) / 2; local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/blackarea/floorappear.ani"; local pooledObj = createOnlyDrawObjectEX_Theif_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj),ENUM_DRAWLAYER_BOTTOM,sizeRate,sizeRate); obj.getVar("effect").clear_obj_vector(); obj.getVar("effect").push_obj_vector(pooledObj); // print("test"); } break; case 1004: if(obj.getVar().getBool(1) == false){ obj.getVar().setBool(1, true); local pooledObj = obj.getVar("effect").get_obj_vector(0); if(pooledObj) pooledObj.setValid(false); // print("test2"); } break; } break; } break; case SKILL_BYKK_NICOLASSUMMONZOMBIE: switch(subtype){ case 1: switch(flagIndex){ case 1: local level = obj.getVar("custom").getInt(0); local summonTime = obj.getVar("custom").getInt(1); local summonMax = obj.getVar("custom").getInt(2); for(local i = 0; i < summonMax; i++){ summonmonster_necromancer_bykk(sqrChr,obj,sq_getRandom(-15,15),sq_getRandom(-15,15),0,0,MONSTER_ID_ZOMBIE,summonTime,level,0); } break; } break; } break; case SKILL_BYKK_NICOLASBLACKARACHNIA: switch(subtype){ case 4: switch(flagIndex){ case 101: local totalDamage2 = obj.getVar("custom").getInt(0); local holdTime = obj.getVar("custom").getInt(1); local hitTime = obj.getVar("custom").getInt(2); local totalDamage = obj.getVar("custom").getInt(3); local sizeRate = obj.getVar("custom").getInt(4); sq_flashScreen(obj,0,200,200,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/nicolasblackarachnia/talisman/black_attack_webgrounddodge1.ani"; createOnlyDrawObjectEX_Theif_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM,sizeRate,sizeRate); createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,142,0,0,obj.getDirection(),2,SKILL_BYKK_NICOLASBLACKARACHNIA,1,totalDamage,sizeRate,totalDamage2,holdTime,hitTime,1,0,0); break; } break; } break; case SKILL_BYKK_APPORTBALLACRE: switch(subtype){ case 1: switch(flagIndex){ case 2801: obj.resetHitObjectList(); break; case 307: case 404: case 605: sqrChr.getVar("ballacre_strongattack_bool").setBool(0, true); break; case 500: obj.sq_PlaySound("BALAC_STRONGATTACK"); obj.sq_PlaySound("BAL_STRONGATTACK"); break; case 502: local offsetX = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 225); local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/strong_attack_ground01.ani"; createOnlyDrawObject_Theif_bykk(obj,aniPath,true,obj.getDirection(),offsetX,sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/strong_attack_up01.ani"; createOnlyDrawObject_Theif_bykk(obj,aniPath,true,obj.getDirection(),offsetX,sq_GetYPos(obj) + 1,0,ENUM_DRAWLAYER_BOTTOM); break; case 503: sq_SetMyShake(obj, 8, 240); break; case 608: local size = obj.getVar("anjiquan_tar").get_obj_vector_size(); if(size > 0){ obj.sq_PlaySound("BALAC_DASHATK_EXP"); local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_APPORTBALLACRE, -1, 14, 1.0) + 100; local sizeRate = sq_GetIntData(sqrChr, SKILL_BYKK_APPORTBALLACRE, 8); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,15,1,200,obj.getDirection(),2,SKILL_BYKK_NICOLASSUMMONZOMBIE,3,totalDamage,sizeRate,0,0,0,0,0,0); sq_SetMyShake(obj, 5, 240); } break; case 610: local size = obj.getVar("anjiquan_tar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("anjiquan_tar").get_obj_vector(i); if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, APDPATH_BALLACRE_HOLD); } } break; case 703://`createSwordSpirit` 200 10 100 local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_APPORTBALLACRE, -1, 12, 0.72) + 100; local hitMax = 5; createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,200,10,100,obj.getDirection(),2,SKILL_BYKK_APPORTBALLACRE,2,totalDamage,hitMax,0,0,0,0,0,0); break; case 803://生成 local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_AMBITIONOFBALLACRE, -1, 0, 1.0) + 100; local totalDamage2 = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_AMBITIONOFBALLACRE, -1, 2, 1.0) + 100; local sizeRate = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_AMBITIONOFBALLACRE, -1, 5, 1.0) + 100; local speedRate = obj.getVar("setSpeedRate").getFloat(0); createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,200,0,0,obj.getDirection(),2,SKILL_BYKK_AMBITIONOFBALLACRE,1,totalDamage,totalDamage2,sizeRate,(speedRate * 100.0).tointeger(),0,0,0,0); sq_SetMyShake(obj, 10, 240); sq_flashScreen(obj,240,0,240,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 902://护石 local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_AMBITIONOFBALLACRE, -1, 0, 1.0) + sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_AMBITIONOFBALLACRE, -1, 2, 1.0) + 200; local sizeRate = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_AMBITIONOFBALLACRE, -1, 5, 1.0) + 100; local speedRate = obj.getVar("setSpeedRate").getFloat(0); createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,200,0,0,obj.getDirection(),2,SKILL_BYKK_AMBITIONOFBALLACRE,2,totalDamage,sizeRate,(speedRate * 100.0).tointeger(),0,0,0,0,0); sq_SetMyShake(obj, 10, 240); sq_flashScreen(obj,240,0,240,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 1005://冲击波 local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_GUILLOTINE, -1, 4, 1.0) + 100; local sizeRate = sq_GetIntData(sqrChr, SKILL_BYKK_GUILLOTINE, 10); createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,350,0,0,obj.getDirection(),2,SKILL_BYKK_GUILLOTINE,1,totalDamage,sizeRate,0,0,0,0,0,0); sq_SetMyShake(obj, 10, 300); break; case 1011://抓地多段 obj.sq_PlaySound("BAL_GUILLOTINE_GET"); local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_GUILLOTINE, -1, 6, 1.0) + 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 53)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(11, 14); local hitMax = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_GUILLOTINE, -1, 7, 1.0) + 100; obj.setTimeEvent(0, delay / (hitMax + 2), hitMax, true); break; case 1013: local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotine/guillotine_hand_drag_normal.ani"; local offsetX = [115,100,85], offsetY = [-37,-8,23]; local direction = sq_GetDirection(obj); for(local i = 0; i < offsetX.len(); i++){ local xPos = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), offsetX[i]); local yPos = sq_GetYPos(obj) + offsetY[i]; createOnlyDrawObject_Theif_bykk(obj,aniPath,true,direction,xPos,yPos,0,ENUM_DRAWLAYER_BOTTOM); } break; case 1104: local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_GUILLOTINE, -1, 5, 1.0) + 100; if(obj.getVar("guillotine_bool").getBool(0)){ totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_GUILLOTINE, -1, 5, 1.8) + 100; } local sizeRate = sq_GetIntData(sqrChr, SKILL_BYKK_GUILLOTINE, 10); createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,325,1,0,obj.getDirection(),2,SKILL_BYKK_GUILLOTINE,1,totalDamage,sizeRate,1,0,0,0,0,0); sq_SetMyShake(obj, 15, 400); break; case 1214: if(obj.getVar("phantom_bool").getBool(0)){ obj.getVar("phantom_bool").setBool(0, false); obj.setTimeEvent(18, 1000, 1, false); obj.sq_PlaySound("BALAC_FANTOM_FIN"); local totalDamage1 = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_PHANTOMSTROM, -1, 0, 1.0) + 100; local totalDamage2 = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_PHANTOMSTROM, -1, 1, 1.0) + 100; local totalDamage3 = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_PHANTOMSTROM, -1, 2, 1.0) + 100; local stromTime = sq_GetIntData(sqrChr, SKILL_BYKK_PHANTOMSTROM, 0); local stromHitTime = sq_GetIntData(sqrChr, SKILL_BYKK_PHANTOMSTROM, 8); local strom2Time = sq_GetIntData(sqrChr, SKILL_BYKK_PHANTOMSTROM, 1); local strom2HitTime = sq_GetIntData(sqrChr, SKILL_BYKK_PHANTOMSTROM, 9); createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,0,1,sq_GetHeightObject(obj) / 2,obj.getDirection(),2,SKILL_BYKK_PHANTOMSTROM,1,totalDamage1,totalDamage2,totalDamage3,stromTime,stromHitTime,strom2Time,strom2HitTime,0); } break; case 1304: sq_SetMyShake(obj, 3, 120); break; case 1316: sq_flashScreen(obj,0,120,320,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 5, 240); //`creatDustEffect` 50 0 50 local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_EXECUTIONERSLASH, -1, 0, 1.0) + 100; local sizeRate = sq_GetIntData(sqrChr, SKILL_BYKK_EXECUTIONERSLASH, 5); local speedRate = obj.getVar("setSpeedRate").getFloat(0); speedRate = (speedRate * 100.0).tointeger(); local sub = 1; if(obj.getVar("isStone_executionerslash").getBool(0)) sub = 2; createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,obj.getDirection(),2,SKILL_BYKK_EXECUTIONERSLASH,sub,totalDamage,sizeRate,speedRate,0,0,0,0,0); break; } break; } break; case SKILL_BYKK_GUILLOTINE: switch(flagIndex){ case 101: local aniPath = ["passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotinesub/guillotine_light_pillar01.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotinesub/guillotine_light_pillar02.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotinesub/guillotine_light_pillar03.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotinesub/guillotine_light_pillar04.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotinesub/guillotine_light_pillar05.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotinesub/guillotine_big_sub_dust1.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotinesub/guillotine_big_sub_dust2.ani"]; local direction = sq_GetDirection(obj), xPos = sq_GetDistancePos(sq_GetXPos(obj), direction, 26), yPos = sq_GetYPos(obj) + 22; for(local i = 0; i < aniPath.len(); i++){ createOnlyDrawObject_Theif_bykk(obj,aniPath[i],true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL); } break; case 102: local aniPath = ["passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotinesub/guillotine_sub01.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotinesub/guillotine_sub02.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotinesub/guillotine_sub03.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotinesub/guillotine_sub04.ani"]; local offsetX = [0,0,15,15]; local direction = sq_GetDirection(obj), yPos = sq_GetYPos(obj) + 1; for(local i = 0; i < aniPath.len(); i++){ local xPos = sq_GetDistancePos(sq_GetXPos(obj), direction, offsetX[i]); createOnlyDrawObject_Theif_bykk(obj,aniPath[i],true,direction,xPos,yPos,0,ENUM_DRAWLAYER_BOTTOM); } break; } break; case SKILL_BYKK_BALLACREADVENT: switch(flagIndex){ case 1004: sq_flashScreen(obj,0,210,140,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 8, 140); sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/2_necromancer_bykk/ballacreadvent/ballacrecast/ballacrecast01_set02d03.ani", 0, 1, 1); local totalDamage_start = obj.getVar("custom").getInt(0); local totalDamage_multihit = obj.getVar("custom").getInt(1); local totalDamage_finish = obj.getVar("custom").getInt(2); local hitMax = obj.getVar("custom").getInt(3); local speedRate = obj.getVar("custom").getInt(4); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,-2,0,obj.getDirection(),2,SKILL_BYKK_BALLACREADVENT,6,speedRate,0,0,0,0,0,0,0); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,-1,0,obj.getDirection(),2,SKILL_BYKK_BALLACREADVENT,3,totalDamage_multihit,hitMax,speedRate,totalDamage_finish,0,0,0,0); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,obj.getDirection(),2,SKILL_BYKK_BALLACREADVENT,4,speedRate,0,0,0,0,0,0,0); break; case 2011: //`add effect` 0 0 0 local pAni = obj.getCurrentAnimation(); local delay = pAni.getDelaySum(11, 26); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,135,3,75,obj.getDirection(),2,SKILL_BYKK_BALLACREADVENT,7,delay,0,0,0,0,0,0,0); break; case 3015: //`createAttraction` 0 0 0 local speedRate = obj.getVar("custom").getInt(2); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,135,2,75,obj.getDirection(),2,SKILL_BYKK_BALLACREADVENT,2,speedRate,0,0,0,0,0,0,0); break; case 3016://`setBeadStartAttackInfo` sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 5)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(1)); break; case 3026: //`add effect` //`destroy effect` local pAni = obj.getCurrentAnimation(); local delay = pAni.getDelaySum(26, 62); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,200,3,85,obj.getDirection(),2,SKILL_BYKK_BALLACREADVENT,7,delay,1,0,0,0,0,0,0); break; case 3028: //`hold` local attract_obj = sqrChr.getVar("Ballacreadvent_Attract").get_obj_vector(0); if(attract_obj){ sq_setCurrentAxisPos(attract_obj, 0, sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 200)); sq_setCurrentAxisPos(attract_obj, 2, 85); } local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(28, 30); local size = sqrChr.getVar("Ballacreadvent_Tar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = sqrChr.getVar("Ballacreadvent_Tar").get_obj_vector(i); if(targetObj && !sq_IsFixture(targetObj)){ local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, APDPATH_BALLACRE_HOLD); sq_MoveToAppendageForce(targetObj, obj, obj, 200, 1, 100, delay, true, addAppendage); } } } break; case 3030: //`setBeadLoopAttackInfo` sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 4)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(1)); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(16, 27); local hitMax = obj.getVar("custom").getInt(0); obj.setTimeEvent(0, delay / (hitMax + 2), hitMax, true); break; case 3000: local attract_obj = sqrChr.getVar("Ballacreadvent_Attract").get_obj_vector(0); if(attract_obj){ local colObj = sq_GetCNRDObjectToCollisionObject(attract_obj); colObj.setTimeEvent(1, 1000, 1, true); } local totalDamage = obj.getVar("custom").getInt(3); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,200,2,175,obj.getDirection(),2,SKILL_BYKK_BALLACREADVENT,5,totalDamage,0,0,0,0,0,0,0); break; case 5001: sq_flashScreen(obj,0,300,600,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; } break; case SKILL_BYKK_BLAMEOFDEAD: switch(flagIndex){ case 100: local aniPath = ["passiveobject/6_thief_bykk/necromancer_bykk/animation/blameofdead/floorboneheadnormal.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/blameofdead/bonehandrndummy.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/blameofdead/bonehandlndummy.ani"]; local offsetX = [136, 175, 190], offsetY = [-20, 20, 20]; local sizeRate = obj.getVar("custom").getInt(3); for(local i = 0; i < aniPath.len(); i++){ local direction = obj.getDirection(), xPos = sq_GetDistancePos(sq_GetXPos(obj), direction, offsetX[i]), yPos = sq_GetYPos(obj) + offsetY[i]; createOnlyDrawObjectEX_Theif_bykk(obj,aniPath[i],true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); } break; case 101: local aniPath = ["passiveobject/6_thief_bykk/necromancer_bykk/animation/blameofdead/bonehandrndummysmall.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/blameofdead/bonehandlndummysmall.ani"]; local offsetX = [225, 235], offsetY = [-28, -28]; local sizeRate = obj.getVar("custom").getInt(3); for(local i = 0; i < aniPath.len(); i++){ local direction = obj.getDirection(), xPos = sq_GetDistancePos(sq_GetXPos(obj), direction, offsetX[i]), yPos = sq_GetYPos(obj) + offsetY[i]; createOnlyDrawObjectEX_Theif_bykk(obj,aniPath[i],true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); } break; case 102: local aniPath = ["passiveobject/6_thief_bykk/necromancer_bykk/animation/blameofdead/floorboneheadsmallnormal.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/blameofdead/floorboneheadsmallnormal.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/blameofdead/bonehandrndummy.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/blameofdead/bonehandlndummy.ani"]; local offsetX = [240, 280, 300, 315], offsetY = [21, -31, 9, 9]; local sizeRate = obj.getVar("custom").getInt(3); for(local i = 0; i < aniPath.len(); i++){ local direction = obj.getDirection(), xPos = sq_GetDistancePos(sq_GetXPos(obj), direction, offsetX[i]), yPos = sq_GetYPos(obj) + offsetY[i]; createOnlyDrawObjectEX_Theif_bykk(obj,aniPath[i],true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate); } break; } break; case SKILL_BYKK_LIVINGDEAD: switch(flagIndex){ case 316: if(sq_IsMyControlObject(obj)) sq_flashScreen(obj,300,100,300,127, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 329: if(sq_IsMyControlObject(obj)) sq_flashScreen(obj,0,100,50,38, sq_RGB(255,0,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 17, 300); //`create Explosion` 0 0 0 local totalDamage = obj.getVar("custom").getInt(0); local sizeRate = obj.getVar("custom").getInt(1); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,obj.getDirection(),2,SKILL_BYKK_LIVINGDEAD,4,totalDamage,sizeRate,0,0,0,0,0,0); break; case 331: sq_SetMyShake(obj, 5, 200); break; } break; case SKILL_BYKK_BLAMEOFDEADEX: switch(flagIndex){ case 105: local lifeTime = obj.getVar("custom").getInt(1); createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,-74, 8, 0,obj.getDirection(),2,SKILL_BYKK_BLAMEOFDEADEX,3,lifeTime,1,0,0,0,0,0,0); createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,-103, -13, 0,obj.getDirection(),2,SKILL_BYKK_BLAMEOFDEADEX,3,lifeTime,0,0,0,0,0,0,0); break; case 106: local lifeTime = obj.getVar("custom").getInt(1); createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,-37, -14, 0,obj.getDirection(),2,SKILL_BYKK_BLAMEOFDEADEX,3,lifeTime,1,0,0,0,0,0,0); createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,-13, 28, 0,obj.getDirection(),2,SKILL_BYKK_BLAMEOFDEADEX,3,lifeTime,0,0,0,0,0,0,0); break; case 107: local lifeTime = obj.getVar("custom").getInt(1); createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,41, 2, 0,obj.getDirection(),2,SKILL_BYKK_BLAMEOFDEADEX,3,lifeTime,1,0,0,0,0,0,0); createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,14, -25, 0,obj.getDirection(),2,SKILL_BYKK_BLAMEOFDEADEX,3,lifeTime,0,0,0,0,0,0,0); break; case 108: local lifeTime = obj.getVar("custom").getInt(1); createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,80, 15, 0,obj.getDirection(),2,SKILL_BYKK_BLAMEOFDEADEX,3,lifeTime,1,0,0,0,0,0,0); createSkillPassive_Theif_bykk(sqrChr,obj,PASSIVEOBJ_NUM_THIEF,116, 6, 0,obj.getDirection(),2,SKILL_BYKK_BLAMEOFDEADEX,3,lifeTime,0,0,0,0,0,0,0); break; case 210: local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(10, 22); obj.setTimeEvent(0, delay / 4, 3, false); break; case 223: local totalDamage = obj.getVar("custom").getInt(0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 10)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; } break; } break; case 3: switch(skillIndex){ case SKILL_THBYKK_GASOLINEFIRE: switch(subtype){ case 1: switch(flagIndex){ case 1: local totalDamage_shockwave = obj.getVar("custom").getInt(0); local sockwaveSizeRate = obj.getVar("custom").getInt(5); local toadSizeRate = obj.getVar("custom").getInt(6); local offSet = toadSizeRate * 175 / 100; createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,190 + toadSizeRate>100?offSet:0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_GASOLINEFIRE,2,totalDamage_shockwave,sockwaveSizeRate,0,0,0,0,0,0); local speedRate = 100.0 + obj.getVar("custom").getInt(7).tofloat(); local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(speedRate); obj.sq_PlaySound("GASOLINEFIRE_TOAD"); break; case 2: local totalDamage_ball = obj.getVar("custom").getInt(1); local totalDamage_ballexp = obj.getVar("custom").getInt(2); local sizeRate = obj.getVar("custom").getInt(4); local toadSizeRate = obj.getVar("custom").getInt(6); local isBlue = obj.getVar("custom").getInt(7); local offSet = toadSizeRate * 250 / 100; local offSetX = 190 + 50 + toadSizeRate>100?offSet:0; createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, offSetX, 1, 75,sq_GetDirection(obj),3,SKILL_THBYKK_GASOLINEFIRE,3,totalDamage_ball,totalDamage_ballexp,sizeRate,isBlue,0,0,0,0); obj.sq_PlaySound("R_GASOLINEFIRE_BALL"); break; } break; } break; case SKILL_THBYKK_MIGAWARI: switch(subtype){ case 1: switch(flagIndex){ case 1: local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/migawari/migawari_charm.ani", 0, -1, 15); sq_SetCurrentDirection(pooledObj, ENUM_DIRECTION_RIGHT); sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/migawari/migawari_charmeff.ani", 0, -1, 15); break; } break; } break; case SKILL_THBYKK_FLYINGSWALLOW: switch(subtype){ case 3: local totalDamage_shuriken = obj.getVar("custom").getInt(0); local totalDamage_exp = obj.getVar("custom").getInt(1); local createMax = obj.getVar("custom").getInt(2); local sub = obj.getVar("custom").getInt(3); for(local i = 0; i < createMax; i++){ createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,30,0,40,obj.getDirection(),3,SKILL_THBYKK_FLYINGSWALLOW,4,totalDamage_exp,sub,i,0,0,0,0,0); createSkillPassive_Theif_bykk(sqrChr,sqrChr,PASSIVEOBJ_NUM_THIEF,0,0,-sq_GetZPos(sqrChr),obj.getDirection(),3,SKILL_THBYKK_FLYINGSWALLOW,5,totalDamage_shuriken,0,0,0,0,0,0,0); } break; } break; case SKILL_THBYKK_YAMATAOROCHI: switch(subtype){ case 2: switch(flagIndex){ case 1: sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/yamataorochi/04_floor/mist_nomal_"+sq_getRandom(1, 3).tostring()+".ani", sq_getRandom(-320, 320), sq_getRandom(-30,120), 0); // sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/yamataorochi/04_floor/mist_nomal_"+sq_getRandom(1, 3).tostring()+".ani", sq_getRandom(0, 320), sq_getRandom(-30,120), 0); break; } break; } break; case SKILL_THBYKK_AMATERAS: switch(subtype){ case 1: switch(state){ case 20: local totalDamage = obj.getVar("custom").getInt(0); local totalDamage_laser = obj.getVar("custom").getInt(1); local laserMax = obj.getVar("custom").getInt(2); local range = obj.getVar("custom").getInt(3); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_AMATERAS,2,totalDamage,range,totalDamage_laser,laserMax,0,0,0,0); break; case 22: sq_flashScreen(obj,0,0,30,178, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 5, 300); break; } break; } break; case SKILL_THBYKK_SWORDOFKUSANAGI: switch(subtype){ case 3: switch(flagIndex){ case 1: //`finish throw sword` 21 0 231 if(sq_GetCurrentFrameIndex(obj) > 10){ local totalDamage = obj.getVar("custom").getInt(0); local totalDamage_exp = obj.getVar("custom").getInt(1); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 21, 0, 231,sq_GetDirection(obj),3,SKILL_THBYKK_SWORDOFKUSANAGI,4,totalDamage,totalDamage_exp,0,0,0,0,0,0); } break; } break; } break; case SKILL_THBYKK_LEAVETRACE: switch(subtype){ case SKILL_THBYKK_BIGKUNAI: switch(flagIndex){ case 1002: createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,75,0,50,sq_GetDirection(obj),3,SKILL_THBYKK_BIGKUNAI,1,obj.getVar("custom").getInt(7),obj.getVar("custom").getInt(8),obj.getVar("custom").getInt(9),obj.getVar("custom").getInt(10),obj.getVar("custom").getInt(11),obj.getVar("custom").getInt(12),obj.getVar("custom").getInt(13),0); break; } break; case SKILL_THBYKK_ILUSIONSHURIKEN: switch(flagIndex){ case 1: case 2: case 3: local offSet = [[],[72,0,66],[78,0,68],[87,0,67]]; createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,offSet[flagIndex][0],offSet[flagIndex][1],offSet[flagIndex][2],sq_GetDirection(obj),3,SKILL_THBYKK_ILUSIONSHURIKEN,1,obj.getVar("custom").getInt(7),obj.getVar("custom").getInt(8),obj.getVar("custom").getInt(9),0,0,0,0,0); obj.sq_PlaySound("R_GHOSTKUNAI_THROW"); break; } break; case SKILL_THBYKK_FLAMETORNADO: switch(flagIndex){ case 1001: createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,90, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_FLAMETORNADO,1,obj.getVar("custom").getInt(7),obj.getVar("custom").getInt(8),obj.getVar("custom").getInt(9),obj.getVar("custom").getInt(10),obj.getVar("custom").getInt(11),obj.getVar("custom").getInt(12),obj.getVar("custom").getInt(13),obj.getVar("custom").getInt(14)); break; } break; case SKILL_THBYKK_SKYROADS: if(flagIndex != 1) break; switch(state){ case 20: createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_SKYROADS,1,obj.getVar("custom").getInt(7),obj.getVar("custom").getInt(8),0,0,0,0,0,0); break; case 21: createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 1, -sq_GetZPos(obj),sq_GetDirection(obj),3,SKILL_THBYKK_SKYROADS,2,obj.getVar("custom").getInt(10),0,0,0,0,0,0,0); break; case 22: createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 95, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_SKYROADS,3,obj.getVar("custom").getInt(11),obj.getVar("custom").getInt(13),obj.getVar("custom").getInt(14),obj.getVar("custom").getInt(15),0,0,0,0); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 200, 1, -sq_GetZPos(obj),sq_GetDirection(obj),3,SKILL_THBYKK_SKYROADS,4,obj.getVar("custom").getInt(12),obj.getVar("custom").getInt(13),obj.getVar("custom").getInt(16),obj.getVar("custom").getInt(9),0,0,0,0); break; } break; case SKILL_THBYKK_GASOLINEFIRE: switch(flagIndex){ case 1: local totalDamage_shockwave = obj.getVar("custom").getInt(7); local totalDamage_ball = obj.getVar("custom").getInt(8); local totalDamage_ballexp = obj.getVar("custom").getInt(9); local totalDamage_disexp = obj.getVar("custom").getInt(10); local sizeRate = obj.getVar("custom").getInt(11); local sockwaveSizeRate = obj.getVar("custom").getInt(12); local isTalisman = obj.getVar("custom").getInt(13); if(isTalisman > 0){ totalDamage_ballexp = totalDamage_ballexp * 133 / 100; sizeRate = sizeRate * 130 / 100; createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, -275, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_GASOLINEFIRE,1,totalDamage_shockwave,totalDamage_ball,totalDamage_ballexp,totalDamage_disexp,sizeRate,sockwaveSizeRate,obj.getVar("custom").getInt(3),150); } else createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_GASOLINEFIRE,1,totalDamage_shockwave,totalDamage_ball,totalDamage_ballexp,totalDamage_disexp,sizeRate,sockwaveSizeRate,obj.getVar("custom").getInt(3),100); break; case 2: sq_flashScreen(obj,40,80,240,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 3, 160); break; } break; case SKILL_THBYKK_DOOMFIELD: switch(flagIndex){ case 1: if(state != 20) break; obj.sq_PlaySound("R_TF_NINPOJIN_01", 2333); local offSet = 330; local baseX = sq_GetXPos(obj), baseY = sq_GetYPos(obj), direction = sq_GetDirection(obj); for(local i = 0; i < 22; i++){ local offSetX = sq_GetDistancePos(baseX, direction, offSet); if(sqrChr.isMovablePos(offSetX, baseY)) break; else offSet = offSet - 15; } local speedRate = obj.getVar("custom").getInt(3); if(offSet > 0){ local offSetX = sq_GetDistancePos(baseX, direction, offSet); obj.getVar("DoomFieldSet").setInt(0, offSetX); // print(offSetX); } createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, offSet, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_DOOMFIELD,1,obj.getVar("custom").getInt(7),speedRate,obj.getVar("custom").getInt(8),obj.getVar("custom").getInt(9),0,0,0,0); break; case 6: local size = sqrChr.getVar("DoomFieldObj").get_obj_vector_size(); if(size > 0){ local speedRate = obj.getVar("custom").getInt(3); local delay = 40000 / speedRate; for(local i = 0; i < size; i++){ local aObj = sqrChr.getVar("DoomFieldObj").get_obj_vector(i); if(aObj){ local colObj = sq_GetCNRDObjectToCollisionObject(aObj); local phaseSet = colObj.getVar("custom").getInt(1); colObj.setTimeEvent(1, delay * phaseSet, 1, false); } } } break; case 7: sq_SetMyShake(obj, 4, 200); break; case 8: local speedRate = obj.getVar("custom").getInt(3); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_DOOMFIELD,3,obj.getVar("custom").getInt(10),obj.getVar("custom").getInt(11),speedRate,obj.getVar("custom").getInt(8),obj.getVar("custom").getInt(9),0,0,0); if(obj.getVar("custom").getInt(15) >= 3){ createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_DOOMFIELD,2,obj.getVar("custom").getInt(12),obj.getVar("custom").getInt(8),0,0,0,0,0,0); } break; case 9: obj.stopSound(2333); obj.sq_PlaySound("R_TF_NINPOJIN_02"); local offSet = [[-170,-30,1,1],[170,30,1,2],[0,60,2,3],[0,-60,2,4],[-170,30,3,5],[170,-30,3,6]]; if(obj.getVar("custom").getInt(15) >= 9){ offSet = [[-204,-36,1,1],[204,36,1,2],[0,72,2,3],[0,-72,2,4],[-204,36,3,5],[204,-36,3,6]]; } sqrChr.getVar("DoomFieldObj").clear_obj_vector(); for(local i = 0; i < 6; i++){ createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, offSet[i][0], offSet[i][1], 75,sq_GetDirection(obj),3,SKILL_THBYKK_DOOMFIELD,5,obj.getVar("custom").getInt(14),offSet[i][2],offSet[i][3],obj.getVar("custom").getInt(8),obj.getVar("custom").getInt(9),0,0,0); } createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_DOOMFIELD,7,obj.getVar("custom").getInt(13),obj.getVar("custom").getInt(8),0,0,0,0,0,0); break; case 10: local speedRate = obj.getVar("custom").getInt(3); local delay1 = 6000 / speedRate, delay2 = 12000 / speedRate, delay3 = 1000 / speedRate; sq_flashScreen(obj,delay1,delay2,delay3,204, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 3, 150); break; } break; case SKILL_THBYKK_FUUMASHURIKEN: switch(flagIndex){ case 100: local speedRate = obj.getVar("custom").getInt(3); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/3kunoichi_bykk/fuumashuriken/funmasuriken01suriken_00.ani", 36, 1, 85); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); break; case 101: obj.sq_PlaySound("R_TF_FUUMA_01"); obj.sq_PlaySound("FUUMA_CAST"); break; case 102: //`throw` 116 0 66 passiveobject/6_thief_bykk/kunoichi_bykk/animation/fuumashuriken/funmasuriken_smallsuriken_suriken.ani // obj.getVar("FuumaShuriken").clear_obj_vector(); local totalDamage = obj.getVar("custom").getInt(7); local hitMax = obj.getVar("custom").getInt(8); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 116, 0, 66,sq_GetDirection(obj),3,SKILL_THBYKK_FUUMASHURIKEN,1,totalDamage,hitMax,1,0,0,0,0,0); for(local i = 0; i < 4; i++){ createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 116, 0, 66,sq_GetDirection(obj),3,SKILL_THBYKK_FUUMASHURIKEN,2,i,hitMax,1,0,0,0,0,0); } break; case 103: //`throw` 255 0 58 local totalDamage = obj.getVar("custom").getInt(9); local totalDamage_exp = obj.getVar("custom").getInt(10); local hitMax = obj.getVar("custom").getInt(11); local sizeRate = obj.getVar("custom").getInt(12); local sizeRate_shuriken = obj.getVar("custom").getInt(13); local isBlue = obj.getVar("custom").getInt(14); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 255, 0, 58,sq_GetDirection(obj),3,SKILL_THBYKK_FUUMASHURIKEN,3,totalDamage,hitMax,totalDamage_exp,sizeRate,sizeRate_shuriken,isBlue,0,0); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 255, 0, 58,sq_GetDirection(obj),3,SKILL_THBYKK_FUUMASHURIKEN,4,hitMax,sizeRate_shuriken,isBlue,0,0,0,0,0); break; case 201: //`createEffectBack` 23 0 -56 local speedRate = obj.getVar("custom").getInt(3); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/3kunoichi_bykk/fuumashuriken/funmasuriken04_underjumpsuriken.ani", 23, 0, -56); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); break; case 202: //`throw` 111 0 -11 local totalDamage_exp = obj.getVar("custom").getInt(15); local sizeRate = obj.getVar("custom").getInt(16); local isBlue = obj.getVar("custom").getInt(14); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 111, 0, -11,sq_GetDirection(obj),3,SKILL_THBYKK_FUUMASHURIKEN,6,totalDamage_exp,sizeRate,isBlue,0,0,0,0,0); break; } break; case SKILL_THBYKK_YAMATAOROCHI: switch(flagIndex){ case 1: obj.sq_PlaySound("R_TF_YAMATAOROCHI"); local isTalisman = obj.getVar("custom").getInt(10); if(isTalisman > 0){ local totalDamage_loop = obj.getVar("custom").getInt(7); local lifeTime = obj.getVar("custom").getInt(8); local sizeRate = obj.getVar("custom").getInt(9); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, -300, -1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_YAMATAOROCHI,3,totalDamage_loop,lifeTime,sizeRate,0,0,0,0,0); } else{ local totalDamage = obj.getVar("custom").getInt(11); local totalDamage_loop = obj.getVar("custom").getInt(12); local hitMax = obj.getVar("custom").getInt(13); local sizeRate = obj.getVar("custom").getInt(14); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, -100, -1, 0,sq_GetDirection(obj),3,SKILL_THBYKK_YAMATAOROCHI,1,totalDamage,totalDamage_loop,hitMax,sizeRate,0,0,0,0); local totalDamage = obj.getVar("custom").getInt(15); local lifeTime = obj.getVar("custom").getInt(16); local sizeRate = obj.getVar("custom").getInt(17); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_YAMATAOROCHI,2,totalDamage,lifeTime,sizeRate,0,0,0,0,0); } break; } break; case SKILL_THBYKK_AMATERAS: switch(flagIndex){ case 1: obj.sq_PlaySound("R_TF_AMATERAS"); local totalDamage = obj.getVar("custom").getInt(7); local totalDamage_laser = obj.getVar("custom").getInt(8); local laserMax = obj.getVar("custom").getInt(9); local range = obj.getVar("custom").getInt(10); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, 250,sq_GetDirection(obj),3,SKILL_THBYKK_AMATERAS,1,totalDamage,totalDamage_laser,laserMax,range,0,0,0,0); if(sqrChr && sqrChr.getState() != STATE_DIE){ sqrChr.getVar("AmaterasObj").clear_obj_vector(); sqrChr.getVar("Amateras").clear_obj_vector(); } break; } break; } break; case SKILL_THBYKK_DEITIESREBIRTH: switch(flagIndex){ case 1: local totalDamage = obj.getVar("custom").getInt(0); local sizeRate = obj.getVar("custom").getInt(1); local speedRate = obj.getVar("custom").getInt(2); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 250, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_DEITIESREBIRTH,2,totalDamage,sizeRate,speedRate,0,0,0,0,0); break; case 101: sq_SetMyShake(obj, 10, 100); local currentAni = obj.getCurrentAnimation(); obj.setTimeEvent(1, currentAni.getDelaySum(2, 32) / 6, 5, true); break; case 102: case 103: case 104: sq_SetMyShake(obj, 5, 50); break; case 105: local speedRate = obj.getVar("custom").getInt(2); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/deitiesrebirth/avatarfinish_08.ani", -300, 0, 0); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); break; case 106: local speedRate = obj.getVar("custom").getInt(2); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/deitiesrebirth/textmark_00.ani", 0, 0, 150); sq_SetCurrentDirection(pooledObj, ENUM_DIRECTION_RIGHT); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); obj.sq_PlaySound("DEITIES_REBIRTH_FLAME"); break; case 201: sq_SetMyShake(obj, 20, 150); // obj.sq_PlaySound("DEITIES_REBIRTH_EXP"); break; } break; } break; case 4: break; } return true; } function procAppend_po_thief_bykk(obj) { if(!obj) return; local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); local job = obj.getVar("job").getInt(0); local skillIndex = obj.getVar("skillIndex").getInt(0); local subtype = obj.getVar("subtype").getInt(0); local state = obj.getVar("state").getInt(0); switch(job){ case 0: break; case 1: break; case 2: switch(skillIndex){ case SKILL_BYKK_SUMMONNICOLAS: switch(subtype){ case 2: if(sq_GetZPos(obj) <= 0 && sq_GetCurrentFrameIndex(obj) == 0){ local currentAni = obj.getCurrentAnimation(); currentAni.setCurrentFrameWithChildLayer(1); local totalDamage = obj.getVar("custom").getInt(10); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,obj.getDirection(),2,SKILL_BYKK_SUMMONNICOLAS,4,totalDamage,0,0,0,0,0,0,0); } break; } break; case SKILL_BYKK_NICOLASSUMMONZOMBIE: switch(subtype){ case 1: switch(state){ case 20: if(sq_GetZPos(obj) <= 0){ obj.sq_RemoveMoveParticle(); obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); } break; } break; } break; case SKILL_BYKK_APPORTBALLACRE: switch(subtype){ case 1: switch(state){ case 21: if(!sq_GetSkill(sqrChr, SKILL_BYKK_MADNESSBALLACRE).isInCoolTime()){ sq_SetKeyxEnable(sqrChr, E_SKILL_COMMAND, true); if(sq_IsEnterCommand(sqrChr, E_SKILL_COMMAND)){ sqrChr.startSkillCoolTime(SKILL_BYKK_MADNESSBALLACRE, sq_GetSkillLevel(sqrChr, SKILL_BYKK_MADNESSBALLACRE), -1); //local skill = sq_GetSkill(sqrChr, SKILL_BYKK_MADNESSBALLACRE); if(sq_GetIntData(sqrChr, SKILL_BYKK_MADNESSBALLACRE, 20) > 0) obj.addSetStatePacket(30, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); else obj.addSetStatePacket(28, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); } } break; case 24: case 25: case 27: local skill = sq_GetSkill(sqrChr, SKILL_BYKK_BALLACRESTRONGATTACK); if(sqrChr.getVar("ballacre_strongattack_bool").getBool(0) && !skill.isInCoolTime()){ sq_SetKeyxEnable(sqrChr, E_SKILL_COMMAND, true); if(sq_IsEnterCommand(sqrChr, E_SKILL_COMMAND)){ sqrChr.startSkillCoolTime(SKILL_BYKK_BALLACRESTRONGATTACK, sq_GetSkillLevel(sqrChr, SKILL_BYKK_BALLACRESTRONGATTACK), -1); sqrChr.getVar("ballacre_strongattack_bool").setBool(0, false); if(state == 27){ local size = obj.getVar("anjiquan_tar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("anjiquan_tar").get_obj_vector(i); if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, APDPATH_BALLACRE_HOLD); } } } obj.addSetStatePacket(29, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); } } break; case 28: local skill = sq_GetSkill(sqrChr, SKILL_BYKK_BALLACRESTRONGATTACK); if(!skill.isInCoolTime()){ sq_SetKeyxEnable(sqrChr, E_SKILL_COMMAND, true); if(sq_IsEnterCommand(sqrChr, E_SKILL_COMMAND)){ sqrChr.startSkillCoolTime(SKILL_BYKK_BALLACRESTRONGATTACK, sq_GetSkillLevel(sqrChr, SKILL_BYKK_BALLACRESTRONGATTACK), -1); obj.addSetStatePacket(29, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); } } break; } break; } break; case SKILL_BYKK_LIVINGDEAD: switch(subtype){ case 1: switch(state){ case 20: case 21: if(obj.getVar().getBool(0)) break; local bDownKey = sqrChr.isDownSkillLastKey(); if(bDownKey && obj.getVar().getBool(0) == false) obj.getVar().setBool(0, true); break; } break; } break; } break; case 3: switch(skillIndex){ case SKILL_THBYKK_FLAMETORNADO: switch(subtype){ case 1: if(obj.isExistTimeEvent(3)){ if(sq_IsMyControlObject(obj)){ if(obj.getVar().getBool(0) == false){ local speed = 75.0; if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){obj.getVar().setBool(0, true);sq_SetVelocity(obj, 1, speed);} else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){obj.getVar().setBool(0, true);sq_SetVelocity(obj, 1, -speed);} } if(obj.getVar().getBool(1) == false){ local speed = 500.0; local direction = sq_GetDirection(obj); if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_LEFT ||sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_RIGHT) { obj.getVar().setBool(1, true); if(direction == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); else sq_SetVelocity(obj, 0, -speed); } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_RIGHT ||sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_LEFT) { obj.getVar().setBool(1, true); speed = 100.0; if(direction == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); else sq_SetVelocity(obj, 0, -speed); } } } } break; } break; case SKILL_THBYKK_GASOLINEFIRE: switch(subtype){ case 3: if(obj.getVar().getBool(0) == false){ if(sq_GetZPos(obj) <= 0){ obj.getVar().setBool(0, true); local totalDamage_ballexp = obj.getVar("custom").getInt(0); local sizeRate = obj.getVar("custom").getInt(1); local isBlue = obj.getVar("custom").getInt(2); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_GASOLINEFIRE,4,totalDamage_ballexp,sizeRate,isBlue,0,0,0,0,0); sq_SendDestroyPacketPassiveObject(obj); } } break; } break; case SKILL_THBYKK_ILUSIONSHURIKEN: switch(subtype){ case 1: if(sq_GetObjectTime(obj) >= 1500 && obj.getVar().getBool(0) == false){ obj.getVar().setBool(0, true); sq_SendDestroyPacketPassiveObject(obj); } break; case 2: if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){ obj.getVar().setBool(0, true); sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/illusionshuriken/dust.ani", 0, 1, 0); sq_SendDestroyPacketPassiveObject(obj); } break; } break; case SKILL_THBYKK_FLYINGSWALLOW: switch(subtype){ case 4: switch(state){ case 20: if(sq_GetZPos(obj) <= 0){ obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); local totalDamage = obj.getVar("custom").getInt(0); createSkillPassive_Theif_bykk(sqrChr,sqrChr,PASSIVEOBJ_NUM_THIEF,0,0,-sq_GetZPos(sqrChr),obj.getDirection(),3,SKILL_THBYKK_FLYINGSWALLOW,6,totalDamage,0,0,0,0,0,0,0); } break; } break; case 7: switch(state){ case 20: if(sq_GetZPos(obj) <= 0){ obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); } break; } break; } break; case SKILL_THBYKK_FUUMASHURIKEN: switch(subtype){ case 6: if(sq_GetZPos(obj) <= 20 && obj.getVar().getBool(0) == false){ obj.getVar().setBool(0, true); sq_SetVelocity(obj, 0, 0.0); sq_SetVelocity(obj, 2, 0.0); local totalDamage = obj.getVar("custom").getInt(0); local sizeRate = obj.getVar("custom").getInt(1); local isBlue = obj.getVar("custom").getInt(2); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 0, -sq_GetZPos(obj),sq_GetDirection(obj),3,SKILL_THBYKK_FUUMASHURIKEN,5,totalDamage,sizeRate,1,isBlue,0,0,0,0); sq_SendDestroyPacketPassiveObject(obj); } break; } break; case SKILL_THBYKK_SWORDOFKUSANAGI: switch(subtype){ case 4: if(sq_GetZPos(obj) <= 10 && obj.getVar().getBool(0) == false){ obj.getVar().setBool(0, true); sq_SetVelocity(obj, 0, 0.0); sq_SetVelocity(obj, 0, 0.0); local totalDamage = obj.getVar("custom").getInt(0); createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,obj.getDirection(),3,SKILL_THBYKK_SWORDOFKUSANAGI,5,totalDamage,0,0,0,0,0,0,0); sq_SendDestroyPacketPassiveObject(obj); } break; } break; case SKILL_THBYKK_FIREHIDE: case SKILL_THBYKK_KURVEJADE: if(sqrChr && sqrChr.getState() != STATE_DIE){ if(skillIndex == SKILL_THBYKK_KURVEJADE && state > 21) break; local pAni = obj.getCurrentAnimation(); local currentT = sq_GetCurrentTime(pAni); local currentSpeedRate = 1.0 ; local defaultRoundTime = 1920; local radius = 50; local base100Angle = 36000 / 3 * obj.getVar("custom").getInt(0); local baseX = sq_GetXPos(sqrChr); local baseZ = sq_GetYPos(sqrChr); local t100Angle = (base100Angle + (36000 * currentSpeedRate * currentT / defaultRoundTime)) % 36000; local angle = (t100Angle.tofloat() / 100.0); local disMovLen = radius * sq_CosTable(angle.tointeger()); local mov_x = sq_GetDistancePos(baseX, ENUM_DIRECTION_LEFT, disMovLen.tointeger()); local axisMagnifyRate = 50 * 0.5; local upMovLen = radius * sq_SinTable(angle.tointeger()) * axisMagnifyRate / 100; local mov_y = baseZ + upMovLen.tointeger(); sq_setCurrentAxisPos(obj, 0, mov_x); sq_setCurrentAxisPos(obj, 1, mov_y); sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 70); } else{ sq_SendDestroyPacketPassiveObject(obj); } break; case 255: switch(subtype){ case 1: if(obj.getVar("damage").getInt(0) != obj.getVar("damage").getInt(1)){ if(!obj.isExistTimeEvent(1)) obj.setTimeEvent(1, 500, obj.getVar("time").getInt(0) / 500, true); } break; } break; } break; case 4: break; } } function getRestAni_Thief(obj) { if(!obj) return null; local animation = obj.sq_GetRestAni(); local growType = sq_getGrowType(obj); if(growType == 2) animation = getRestAni_Thief_necromancer(obj); else if(growType == 3){ if(sq_GetSkillLevel(obj, SKILL_THBYKK_CHAKRATRINITY) > 0) animation = obj.sq_GetCustomAni(ANI_THBYKK_KUNOICHI3RD_BODY); else if(sq_GetSkillLevel(obj, SKILL_THBYKK_MIRROROFYATA) > 0) animation = obj.sq_GetCustomAni(ANI_THBYKK_KUNOICHI2ND_BODY); else if(sq_GetSkillLevel(obj, SKILL_THBYKK_FIREMARK) > 0) animation = obj.sq_GetCustomAni(ANI_THBYKK_KUNOICHI1ST_BODY); } return animation; } //站立 function onAfterSetState_Thief_Stand(obj, state, datas, isResetTimer) { if(!obj) return; local growType = sq_getGrowType(obj); switch(growType){ case 3: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)){ obj.getVar("StaySet").setInt(0, 0); } break; } } function onEndCurrentAni_Thief_Stand(obj) { if(!obj) return; } function onProcCon_Thief_Stand(obj) { if(!obj) return; if(!sq_GetSkill(obj, 45).isInCoolTime() && sq_getGrowType(obj) == 1){ obj.setSkillCommandEnable(45, true); if(obj.sq_IsEnterSkill(45) != -1 && obj.isMyControlObject()) { obj.startSkillCoolTime(45, sq_GetSkillLevel(obj, 45), -1); obj.sq_IntVectClear(); obj.sq_IntVectPush(32); obj.sq_AddSetStatePacket(37, STATE_PRIORITY_IGNORE_FORCE, true); } } } function onProc_Thief_Stand(obj) { if(!obj) return; if(sq_getGrowType(obj) == 3 && CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)){ local poleAni = obj.getCurrentAnimation(); local poleAniFrameNumber = sq_GetAniFrameNumber(poleAni, 0); if(poleAniFrameNumber != obj.getVar("StaySet").getInt(0)){ // print("poleAniFrameNumberGet = "+poleAniFrameNumber); obj.getVar("StaySet").setInt(0, poleAniFrameNumber); local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF); addAppendage.sq_DeleteEffectFront(); addAppendage.sq_DeleteEffectBack(); local aniPath = ""; switch(poleAniFrameNumber){ case 6: aniPath = "stay"; break; case 8: aniPath = "move"; break; case 20: aniPath = "rest"; break; case 30: aniPath = "kunoichi2nd_body"; break; case 35: aniPath = "kunoichi3rd_body"; break; } if(aniPath == "") return; addAppendage.sq_AddEffectBack("character/thief/effect/animation/3kunoichi_bykk/swordofkusanagi/kusanagibackweaponnormal/"+aniPath+".ani"); addAppendage.sq_AddEffectBack("character/thief/effect/animation/3kunoichi_bykk/swordofkusanagi/kusanagibackweapondodge/"+aniPath+".ani"); addAppendage.sq_AddEffectBack("character/thief/effect/animation/3kunoichi_bykk/swordofkusanagi/kusanagimuffbot/"+aniPath+".ani"); addAppendage.sq_AddEffectFront("character/thief/effect/animation/3kunoichi_bykk/swordofkusanagi/kusanagifrontweaponnormal/"+aniPath+".ani"); addAppendage.sq_AddEffectFront("character/thief/effect/animation/3kunoichi_bykk/swordofkusanagi/kusanagifrontweapondodge/"+aniPath+".ani"); addAppendage.sq_AddEffectFront("character/thief/effect/animation/3kunoichi_bykk/swordofkusanagi/kusanagimufftop/"+aniPath+".ani"); } } } function onKeyFrameFlag_Thief_Stand(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_Thief_Stand(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_Thief_Stand(obj, new_state) { if(!obj) return; } //跳跃 function onAfterSetState_Thief_Jump(obj, state, datas, isResetTimer) { if(!obj) return; obj.getVar("jumpSet").setInt(0, sq_GetVectorData(datas, 1)); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "jump"); } function onEndCurrentAni_Thief_Jump(obj) { if(!obj) return; } function onProcCon_Thief_Jump(obj) { if(!obj) return; local growType = sq_getGrowType(obj); switch(growType){ case 1: if(sq_GetSkillLevel(obj, 75) <= 0) return; if(!sq_GetSkill(obj, 75).isInCoolTime() && sq_GetZPos(obj) >= 0){ obj.setSkillCommandEnable(75, true); if(obj.sq_IsEnterSkill(75) != -1 && obj.isMyControlObject()){ obj.startSkillCoolTime(75 , sq_GetSkillLevel(obj, 75), -1); obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(65 , STATE_PRIORITY_IGNORE_FORCE, true); } } if(!sq_GetSkill(obj, 47).isInCoolTime() && sq_GetZPos(obj) >= 0){ obj.setSkillCommandEnable(47, true); if(obj.sq_IsEnterSkill(47) != -1 && obj.isMyControlObject()){ obj.startSkillCoolTime(47, sq_GetSkillLevel(obj, 47) , -1); obj.sq_IntVectClear(); obj.sq_IntVectPush(40); obj.sq_IntVectPush(obj.getDirection()); obj.sq_AddSetStatePacket(38 , STATE_PRIORITY_IGNORE_FORCE , true); } } break; case 3: if(obj.getWeaponSubType() == 5 && obj.getVar("jumpSet").getInt(0) == 1){ sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(10); obj.sq_AddSetStatePacket(8, STATE_PRIORITY_IGNORE_FORCE, true); return; } } break; } } function onKeyFrameFlag_Thief_Jump(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_Thief_Jump(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_Thief_Jump(obj, new_state) { if(!obj) return; } //跳跃攻击 function onSetState_Thief_JumpAttack(obj, state, datas, isResetTimer) { if(!obj) return; if(sq_getGrowType(obj) == 2){ onSetState_jumpattack_thief_necromancer(obj, state, datas, isResetTimer); } } function onAfterSetState_Thief_JumpAttack(obj, state, datas, isResetTimer) { if (!obj) return; local growType = sq_getGrowType(obj); switch(growType){ case 2: onAfterSetState_jumpattack_thief_necromancer(obj, state, datas, isResetTimer); break; case 3: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "swordofkusanagi_normaljumpatk_body"); obj.getVar("atkSet").setBool(0, true); break; } } function onEndCurrentAni_Thief_JumpAttack(obj) { if(!obj) return; } function onProcCon_Thief_JumpAttack(obj) { if(!obj) return; } function onKeyFrameFlag_Thief_JumpAttack(obj, flagIndex) { if(!obj) return false; local growType = sq_getGrowType(obj); switch(growType){ case 2: onKeyFrameFlag_jumpattack_thief_necromancer(obj, flagIndex); break; case 3: switch(flagIndex){ case 10: //`jump attack shoot` 35 0 40 createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,35,0,40,sq_GetDirection(obj),3,SKILL_THBYKK_SHURIKENIMPROVE,2,124,0,0,0,0,0,0,0); break; } } return true; } function onTimeEvent_Thief_JumpAttack(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_Thief_JumpAttack(obj, new_state) { if(!obj) return; } function onAttack_Thief_JumpAttack(obj, damager, boundingBox, isStuck) { if(sq_GetSkillLevel(obj, SKILL_THBYKK_MARKOFFLAME) > 0 && CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)){ local burnDamage = obj.getVar("markofFlameSet").getInt(2); local burnTime = obj.getVar("markofFlameSet").getInt(4); if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) return; if(!obj || obj.getState() == STATE_DIE) return; if(damager.getVar("markofFlameObj").get_obj_vector_size() > 0){ local markofFlameObj = damager.getVar("markofFlameObj").get_obj_vector(0); if(markofFlameObj){ local colObj = sq_GetCNRDObjectToCollisionObject(markofFlameObj); // print("add = "+burnDamage); local baseDamage = colObj.getVar("damage").getInt(0); colObj.getVar("damage").setInt(0, baseDamage + burnDamage); } } else{ local group = sq_GetGroup(damager); local uniqueId = sq_GetUniqueId(damager); createSkillPassive_Theif_bykk(obj,damager,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,255,1,group,uniqueId,burnTime,burnDamage,0,0,0,0); } } } function onBeforeAttack_Thief_JumpAttack(obj,damager,boundingBox,isStuck) { if(!obj) return; local growType = sq_getGrowType(obj); switch(growType){ case 3: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF) && obj.getVar("atkSet").getBool(0)){ obj.getVar("atkSet").setBool(0, false); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SWORDOFKUSANAGI, -1, 9, 1.0); local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_MARKOFFLAME); if(skillLevel > 0){ local burnDamageRate = sq_GetIntData(obj, SKILL_THBYKK_SWORDOFKUSANAGI, 18); local burnTime = sq_GetIntData(obj, SKILL_THBYKK_MARKOFFLAME, 0); local burnDamage = totalDamage * burnDamageRate / 100; obj.getVar("markofFlameSet").setInt(2, burnDamage); obj.getVar("markofFlameSet").setInt(4, burnTime); } sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); } break; } } function getJumpAttackAni_Thief(obj) { if (!obj) return null; local animation = obj.sq_GetJumpAttackAni(); local growType = sq_getGrowType(obj); switch(growType){ case 2: animation = getJumpAttackAni_Thief_necromancer(obj); break; case 3: if(obj.getWeaponSubType() == 5){ if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)){ animation = obj.sq_GetCustomAni(ANI_THBYKK_SWORDOFKUSANAGI_NORMALJUMPATK_BODY); } else animation = obj.sq_GetCustomAni(ANI_THBYKK_CHAKRAWEAPONJUMPATK_BODY); } break; } return animation; } function getJumpAttackInfo_Thief(obj) { if(!obj) return null; local attackInfo = obj.sq_GetJumpAttackInfo(); if(obj.getWeaponSubType() == 5){ attackInfo = sq_GetCustomAttackInfo(obj, ATK_THBYKK_CHAKRAWEAPONJUMP); } return attackInfo; } //普通攻击 function onSetState_Thief_Attack(obj, state, datas, isResetTimer) { if(!obj) return; if(sq_getGrowType(obj) == 2){ onSetState_attack_thief_necromancer(obj, state, datas, isResetTimer); } } function onAfterSetState_Thief_Attack(obj, state, datas, isResetTimer) { if (!obj) return; local growType = sq_getGrowType(obj); switch(growType){ case 2: onAfterSetState_attack_thief_necromancer(obj, state, datas, isResetTimer); break; case 3: local attackIndex = obj.getAttackIndex(); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)){ switch(attackIndex){ case 0: setSwordKusanagiEffect(obj, "swordofkusanagi_normalatka_body"); break; case 1: setSwordKusanagiEffect(obj, "swordofkusanagi_normalatkb_body"); break; case 10: setSwordKusanagiEffect(obj, "swordofkusanagi_normalbackatk_body"); break; } } if(attackIndex == 10){ local currentAni = obj.getCurrentAnimation(); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)){ local speedRate = 12600 / currentAni.getDelaySum(0, 0); if(speedRate > 130) currentAni.setSpeedRate(130.0); } else{ local speedRate = 8000 / currentAni.getDelaySum(0, 0); if(speedRate < 200){ obj.getVar("AttackBool").setBool(1, true); } } obj.getVar("AttackSet").setInt(0, sq_GetXPos(obj)); obj.getVar("AttackSet").setInt(1, -150); obj.getVar("AttackSet").setInt(2, sq_GetZPos(obj)); } obj.getVar("atkSet").setBool(0, true); break; } } function onBeforeAttack_Thief_Attack(obj,damager,boundingBox,isStuck) { if(!obj) return; local growType = sq_getGrowType(obj); switch(growType){ case 3: if( obj.getVar("atkSet").getBool(0)){ obj.getVar("atkSet").setBool(0, false); local attackIndex = obj.getAttackIndex(); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)){ if(attackIndex != 10){ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SWORDOFKUSANAGI, -1, 7 + attackIndex, 1.0) local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_MARKOFFLAME); if(skillLevel > 0){ local burnDamageRate = sq_GetIntData(obj, SKILL_THBYKK_SWORDOFKUSANAGI, 18); local burnTime = sq_GetIntData(obj, SKILL_THBYKK_MARKOFFLAME, 0); local burnDamage = totalDamage * burnDamageRate / 100; obj.getVar("markofFlameSet").setInt(2, burnDamage); obj.getVar("markofFlameSet").setInt(4, burnTime); } sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); } else{ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SWORDOFKUSANAGI, -1, 9, 1.0) local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_MARKOFFLAME); if(skillLevel > 0){ local burnDamageRate = sq_GetIntData(obj, SKILL_THBYKK_SWORDOFKUSANAGI, 18); local burnTime = sq_GetIntData(obj, SKILL_THBYKK_MARKOFFLAME, 0); local burnDamage = totalDamage * burnDamageRate / 100; obj.getVar("markofFlameSet").setInt(2, burnDamage); obj.getVar("markofFlameSet").setInt(4, burnTime); } sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); } } else{ obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),obj.getState()); sq_SetCurrentAttackInfo(obj, sq_GetCurrentAttackInfo(obj)); } } break; } } function onEndCurrentAni_Thief_Attack(obj) { if(!obj) return; } function onProc_Thief_Attack(obj) { if(!obj) return; local growType = sq_getGrowType(obj); switch(growType){ case 2: onProc_attack_thief_necromancer(obj); break; case 1: if(!sq_GetSkill(obj, 45).isInCoolTime()){ obj.setSkillCommandEnable(45, true); if(obj.sq_IsEnterSkill(45) != -1 && obj.isMyControlObject()){ obj.startSkillCoolTime(45, sq_GetSkillLevel(obj, 45), -1); obj.sq_IntVectClear(); obj.sq_IntVectPush(32); obj.sq_AddSetStatePacket(37, STATE_PRIORITY_IGNORE_FORCE, true); } } break; case 3: local attackIndex = obj.getAttackIndex(); if(attackIndex == 10){ local currentAni = obj.getCurrentAnimation(); local fullTime = currentAni.getDelaySum(false); local stateTime = obj.sq_GetStateTimer(); if(obj.getVar("AttackBool").getBool(0) == false){ local v = sq_GetUniformVelocity(0, obj.getVar("AttackSet").getInt(1), stateTime, fullTime); local dstX = sq_GetDistancePos(obj.getVar("AttackSet").getInt(0), sq_GetDirection(obj), v); if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); else obj.getVar("AttackBool").setBool(0, true); } local height = 80; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) height = 30; local vz = sq_GetUniformVelocity(0, height, stateTime, fullTime / 2); if(obj.getVar("AttackSet").getInt(2) > 0){ height = obj.getVar("AttackSet").getInt(2); vz = height; } if(stateTime > fullTime / 2){ vz = sq_GetUniformVelocity(height, 0, stateTime - fullTime / 2, fullTime / 2); } sq_setCurrentAxisPos(obj, 2, vz); if(obj.getVar("AttackBool").getBool(1)){ obj.getVar("AttackBool").setBool(1, false); local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(200.0); } } break; } } function onProcCon_Thief_Attack(obj) { if(!obj) return; local growType = sq_getGrowType(obj); switch(growType){ case 3: if(obj.getWeaponSubType() == 5){ local attackIndex = obj.getAttackIndex(); if(attackIndex != 10){ local direction = sq_GetDirection(obj); if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_RIGHT ||sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_LEFT){ obj.sq_IntVectClear(); obj.sq_IntVectPush(10); obj.sq_AddSetStatePacket(8, STATE_PRIORITY_IGNORE_FORCE, true); return; } } } break; } } function onKeyFrameFlag_Thief_Attack(obj, flagIndex) { if(!obj) return false; local growType = sq_getGrowType(obj); switch(growType){ case 2: onKeyFrameFlag_attack_thief_necromancer(obj, flagIndex); break; case 3: switch(flagIndex){ case 1001: obj.sq_PlaySound("R_TF_SWORD_KUSANAGI_02"); obj.sq_PlaySound("R_SWORD_KUSANAGI"); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/3kunoichi_bykk/swordofkusanagi/fire/backstepfront_00.ani", 0, 1, 0); // sq_moveWithParent(obj, pooledObj); break; case 9: local attackIndex = obj.getAttackIndex(); switch(attackIndex){ case 0: obj.sq_PlaySound("TF_ATK12_01"); obj.sq_PlaySound("KUNAI_01"); break; case 1: obj.sq_PlaySound("TF_ATK12_02"); obj.sq_PlaySound("KUNAI_02"); break; case 2: obj.sq_PlaySound("TF_ATK3"); obj.sq_PlaySound("KUNAI_03"); break; case 10: obj.sq_PlaySound("TF_ATK4"); break; } break; case 10: // local prob = sq_GetLevelData(obj, SKILL_THBYKK_SHURIKENIMPROVE, 2, sq_GetSkillLevel(obj, SKILL_THBYKK_SHURIKENIMPROVE)); // if(sq_getRandom(1, 100) < prob) break; local attackIndex = obj.getAttackIndex(); switch(attackIndex){ case 0: //`normal attack shoot` 83 0 64 createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,83,0,64,sq_GetDirection(obj),3,SKILL_THBYKK_SHURIKENIMPROVE,1,118,0,0,0,0,0,0,0); break; case 1: //`normal attack shoot` 52 0 80 createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,52,0,80,sq_GetDirection(obj),3,SKILL_THBYKK_SHURIKENIMPROVE,1,119,0,0,0,0,0,0,0); break; case 2: //`normal attack shoot` 102 0 56 createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,102,0,56,sq_GetDirection(obj),3,SKILL_THBYKK_SHURIKENIMPROVE,1,120,0,0,0,0,0,0,0); break; case 10: //`normal attack shoot` 43 0 9 createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,43,0,9,sq_GetDirection(obj),3,SKILL_THBYKK_SHURIKENIMPROVE,1,121,0,0,0,0,0,0,0); break; } break; case 11: local attackIndex = obj.getAttackIndex(); switch(attackIndex){ case 0: obj.sq_PlaySound("R_TF_SWORD_KUSANAGI_02"); obj.sq_PlaySound("R_SWORD_KUSANAGI"); break; case 1: obj.sq_PlaySound("R_TF_SWORD_KUSANAGI_02"); obj.sq_PlaySound("R_SWORD_KUSANAGI"); break; case 2: //`normal attack shoot` 102 0 56 break; case 10: //`normal attack shoot` 43 0 9 break; } break; } break; } return true; } function onTimeEvent_Thief_Attack(obj, timeEventIndex, timeEventCount) { if(!obj) return false; local growType = sq_getGrowType(obj); switch(growType){ case 3: switch(timeEventIndex){ case 1: local v = sq_GetUniformVelocity(0, -100, timeEventCount, 20); local dstX = sq_GetDistancePos(obj.getVar("AttackSet").getInt(0), sq_GetDirection(obj), v); if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); else obj.stopTimeEvent(1); break; case 2: local v = sq_GetUniformVelocity(0, 30, timeEventCount, 10); sq_setCurrentAxisPos(obj, 2, v); if(timeEventCount >= 10){ local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(false); obj.setTimeEvent(3, delay / 20, 10, true); } break; case 3: local v = sq_GetUniformVelocity(30, 0, timeEventCount, 10); sq_setCurrentAxisPos(obj, 2, v); break; } break; } } function onEndState_Thief_Attack(obj, new_state) { if(!obj) return; local attackIndex = obj.getAttackIndex(); if(attackIndex == 10) obj.getVar("AttackBool").setBool(0, false); } function onAttack_Thief_Attack(obj, damager, boundingBox, isStuck) { if(sq_GetSkillLevel(obj, SKILL_THBYKK_MARKOFFLAME) > 0 && CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)){ local burnDamage = obj.getVar("markofFlameSet").getInt(2); local burnTime = obj.getVar("markofFlameSet").getInt(4); if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) return; if(!obj || obj.getState() == STATE_DIE) return; if(damager.getVar("markofFlameObj").get_obj_vector_size() > 0){ local markofFlameObj = damager.getVar("markofFlameObj").get_obj_vector(0); if(markofFlameObj){ local colObj = sq_GetCNRDObjectToCollisionObject(markofFlameObj); // print("add = "+burnDamage); local baseDamage = colObj.getVar("damage").getInt(0); colObj.getVar("damage").setInt(0, baseDamage + burnDamage); } } else{ local group = sq_GetGroup(damager); local uniqueId = sq_GetUniqueId(damager); createSkillPassive_Theif_bykk(obj,damager,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,255,1,group,uniqueId,burnTime,burnDamage,0,0,0,0); } } } function getAttackAni_Thief(obj, index) { if (!obj) return null; local animation = obj.sq_GetAttackAni(index); local growType = sq_getGrowType(obj); switch(growType){ case 2: animation = getAttackAni_Thief_necromancer(obj, index); break; case 3: if(obj.getWeaponSubType() == 5){ switch(index){ case 0: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)){ animation = obj.sq_GetCustomAni(ANI_THBYKK_SWORDOFKUSANAGI_NORMALATKA_BODY); } else animation = obj.sq_GetCustomAni(ANI_THBYKK_CHAKRAWEAPONATK01_BODY); break; case 1: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) animation = obj.sq_GetCustomAni(ANI_THBYKK_SWORDOFKUSANAGI_NORMALATKB_BODY); else animation = obj.sq_GetCustomAni(ANI_THBYKK_CHAKRAWEAPONATK02_BODY); break; case 2: animation = obj.sq_GetCustomAni(ANI_THBYKK_CHAKRAWEAPONATK03A_BODY); break; case 10: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) animation = obj.sq_GetCustomAni(ANI_THBYKK_SWORDOFKUSANAGI_NORMALBACKATK_BODY); else animation = obj.sq_GetCustomAni(ANI_THBYKK_CHAKRAWEAPONATK03B_BODY); break; } } break; } return animation; } function getAttackCancelStartFrameSize_Thief(obj) { local maxAttackNumber = obj.sq_GetAttackCancelStartFrameSize(); if(obj.getWeaponSubType() == 5){ if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) maxAttackNumber = 1; else maxAttackNumber = 2; } return maxAttackNumber; } function getAttackCancelStartFrame_Thief(obj, index) { if(!obj) return null; local growType = sq_getGrowType(obj); local frm = obj.sq_GetAttackCancelStartFrame(index); if(growType == 3 && obj.getWeaponSubType() == 5) frm = 3; return frm; } function getDefaultAttackInfo_Thief(obj, index) { if(!obj) return null; // print("index = "+index); local attackInfo = obj.sq_GetDefaultAttackInfo(index); local growType = sq_getGrowType(obj); switch(growType){ case 3: if(obj.getWeaponSubType() == 5){ switch(index){ case 0: case 1: case 2: attackInfo = sq_GetCustomAttackInfo(obj, ATK_THBYKK_CHAKRAWEAPON1 + index); break; case 10: attackInfo = sq_GetCustomAttackInfo(obj, ATK_THBYKK_CHAKRAWEAPONBACK); break; } } break; } return attackInfo; } //前冲 function onAfterSetState_Thief_Dash(obj, state, datas, isResetTimer) { if(!obj) return; local growType = sq_getGrowType(obj); switch(growType){ case 3: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) setSwordKusanagiEffect(obj, "dash"); break; } } function onEndCurrentAni_Thief_Dash(obj) { if(!obj) return; } function onProcCon_Thief_Dash(obj) { if(!obj) return; if(sq_getGrowType(obj) == 1){ if(!sq_GetSkill(obj, 45).isInCoolTime()){ obj.setSkillCommandEnable(45, true); if(obj.sq_IsEnterSkill(45) != -1 && obj.isMyControlObject()){ obj.startSkillCoolTime(45, sq_GetSkillLevel(obj, 45), -1); obj.sq_IntVectClear(); obj.sq_IntVectPush(32); obj.sq_AddSetStatePacket(37, STATE_PRIORITY_IGNORE_FORCE, true); } } } } function onKeyFrameFlag_Thief_Dash(obj, flagIndex) { if(!obj) return false; return true; } function onTimeEvent_Thief_Dash(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_Thief_Dash(obj, new_state) { if(!obj) return; } //前冲攻击 function onSetState_Thief_DashAttack(obj, state, datas, isResetTimer) { if(!obj) return; if(sq_getGrowType(obj) == 2){ onSetState_dashattack_thief_necromancer(obj, state, datas, isResetTimer); } } function onAfterSetState_Thief_DashAttack(obj, state, datas, isResetTimer) { if(!obj) return; local growType = sq_getGrowType(obj); switch(growType){ case 2: onAfterSetState_dashattack_thief_necromancer(obj, state, datas, isResetTimer); break; case 3: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)){ obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/swordofkusanagi/fire/dash_00.ani"), 0, 0); obj.sq_AddStateLayerAnimation(10002,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/swordofkusanagi/fire/dash_01.ani"), 0, 0); obj.sq_AddStateLayerAnimation(10003,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/swordofkusanagi/fire/dash_02.ani"), 0, 0); obj.sq_AddStateLayerAnimation(10004,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/swordofkusanagi/fire/dash_03.ani"), 0, 0); obj.sq_AddStateLayerAnimation(10005,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/swordofkusanagi/fire/dash_04.ani"), 0, 0); obj.sq_AddStateLayerAnimation(10006,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/swordofkusanagi/fire/dash_05.ani"), 0, 0); obj.sq_AddStateLayerAnimation(10007,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/swordofkusanagi/fire/dash_06.ani"), 0, 0); sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/3kunoichi_bykk/swordofkusanagi/fire/dashfront_00.ani", 85 , 1, 22); sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/3kunoichi_bykk/swordofkusanagi/fire/dashback_00.ani", 85 , 0, 22); } obj.getVar("atkSet").setBool(0, true); break; } } function onBeforeAttack_Thief_DashAttack(obj,damager,boundingBox,isStuck) { if(!obj) return; local growType = sq_getGrowType(obj); switch(growType){ case 3: if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF) && obj.getVar("atkSet").getBool(0)){ obj.getVar("atkSet").setBool(0, false); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_SWORDOFKUSANAGI, -1, 7, 1.0); local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_MARKOFFLAME); if(skillLevel > 0){ local burnDamageRate = sq_GetIntData(obj, SKILL_THBYKK_SWORDOFKUSANAGI, 18); local burnTime = sq_GetIntData(obj, SKILL_THBYKK_MARKOFFLAME, 0); local burnDamage = totalDamage * burnDamageRate / 100; obj.getVar("markofFlameSet").setInt(2, burnDamage); obj.getVar("markofFlameSet").setInt(4, burnTime); } sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); } break; } } function onEndCurrentAni_Thief_DashAttack(obj) { if(!obj) return; } function onProcCon_Thief_DashAttack(obj) { if(!obj) return; if(sq_getGrowType(obj) == 2){ onProcCon_dashattack_thief_necromancer(obj); } } function onKeyFrameFlag_Thief_DashAttack(obj, flagIndex) { if(!obj) return false; local growType = sq_getGrowType(obj); switch(growType){ case 2: onKeyFrameFlag_dashattack_thief_necromancer(obj, flagIndex); break; case 3: switch(flagIndex){ case 10: //`normal attack shoot` 85 0 51 createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,85,0,51,sq_GetDirection(obj),3,SKILL_THBYKK_SHURIKENIMPROVE,1,122,0,0,0,0,0,0,0); break; } } return true; } function onTimeEvent_Thief_DashAttack(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_Thief_DashAttack(obj, new_state) { if(!obj) return; } function onAttack_Thief_DashAttack(obj, damager, boundingBox, isStuck) { if(sq_GetSkillLevel(obj, SKILL_THBYKK_MARKOFFLAME) > 0 && CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)){ local burnDamage = obj.getVar("markofFlameSet").getInt(2); local burnTime = obj.getVar("markofFlameSet").getInt(4); if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) return; if(!obj || obj.getState() == STATE_DIE) return; if(damager.getVar("markofFlameObj").get_obj_vector_size() > 0){ local markofFlameObj = damager.getVar("markofFlameObj").get_obj_vector(0); if(markofFlameObj){ local colObj = sq_GetCNRDObjectToCollisionObject(markofFlameObj); // print("add = "+burnDamage); local baseDamage = colObj.getVar("damage").getInt(0); colObj.getVar("damage").setInt(0, baseDamage + burnDamage); } } else{ local group = sq_GetGroup(damager); local uniqueId = sq_GetUniqueId(damager); createSkillPassive_Theif_bykk(obj,damager,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,255,1,group,uniqueId,burnTime,burnDamage,0,0,0,0); } } } function getDashAttackAni_Thief(obj) { if (!obj) return null; local animation = obj.sq_GetDashAttackAni(); local growType = sq_getGrowType(obj); switch(growType){ case 2: animation = getDashAttackAni_Thief_necromancer(obj); break; case 3: if(obj.getWeaponSubType() == 5){ // if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) animation = obj.sq_GetCustomAni(ANI_THBYKK_SWORDOFKUSANAGI_NORMALATKB_BODY); // else animation = obj.sq_GetCustomAni(ANI_THBYKK_CHAKRAWEAPONDASHATK_BODY); } break; } return animation; } function getDashAttackInfo_Thief(obj) { if(!obj) return null; local attackInfo = obj.sq_GetDashAttackInfo(); if(obj.getWeaponSubType() == 5){ attackInfo = sq_GetCustomAttackInfo(obj, ATK_THBYKK_CHAKRAWEAPONDASH); } return attackInfo; }