//obj function setCustomData_po_thief_bykk(obj, receiveData) { if(!obj) return; local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); if(!sqrChr) return; local job = receiveData.readDword(); local skillIndex = receiveData.readDword(); local subtype = receiveData.readDword(); obj.getVar("job").setInt(0, job); obj.getVar("skillIndex").setInt(0, skillIndex); obj.getVar("subtype").setInt(0, subtype); switch(job){ case 0: break; case 1: break; case 2: switch(skillIndex){ case SKILL_BYKK_SUMMONNICOLAS: switch(subtype){ case 1: case 3: local totalDamage = receiveData.readDword(); local hitTime = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/nicolas/animation/throw_object.ani", attackIndex = 35; if(subtype == 3){aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/nicolas/animation/nicolasspider_tp_spider.ani"; attackIndex = 22;} local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); if(subtype == 1){ local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/6_thief_bykk/necromancer_bykk/animation/nicolas/animation/throw_object2.ani"),true); } sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.setTimeEvent(0, hitTime, -1, true); if(subtype == 1) obj.sq_SetMoveParticle("particle/dagger.ptl", 0.0, 0.0); else obj.sq_SetMoveParticle("particle/tp_throw.ptl", 0.0, 0.0); break; case 2: local totalDamage = receiveData.readDword(); local totalDamage2 = receiveData.readDword(); obj.getVar("custom").setInt(10, totalDamage2); local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/nicolas/animation/spikefalling.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/6_thief_bykk/necromancer_bykk/animation/nicolas/animation/burrowend.ani"),true); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 34)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.setTimeEvent(10, 200, 1, false); break; case 4: local totalDamage = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/nicolas/animation/spark.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 33)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sq_SetShake(obj, 1, 500); break; case 5: local totalDamage = receiveData.readDword(); obj.getVar("custom").setInt(10, totalDamage); obj.setTimeEvent(11, 200, 1, false); break; case 6: local totalDamage = receiveData.readDword(); local aniPath = "monster/character/thief/2_necromancer_bykk/nicolas/animation/attack_obj_nicolas.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 33)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 10: local speedRate = receiveData.readDword(); // local aniPath = ["monster/character/thief/2_necromancer_bykk/nicolas/animation/throw_circle.ani", "monster/character/thief/2_necromancer_bykk/nicolas/animation/throw_circle2.ani"]; local aniPath = "monster/character/thief/2_necromancer_bykk/nicolas/animation/throw_circle.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(1,sq_CreateAnimation("","monster/character/thief/2_necromancer_bykk/nicolas/animation/throw_circle2.ani"),true); currentAni.setSpeedRate(speedRate.tofloat()); break; } break; case SKILL_BYKK_NICOLASBLACKAREA: switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local lifeTime = receiveData.readDword(); local hitTime = receiveData.readDword(); local sizeRate = receiveData.readDword(); obj.getVar("custom").setInt(0, sizeRate); local group = receiveData.readDword(); local uniqueId = receiveData.readDword(); local targetObj = sq_GetObject(obj, group, uniqueId); if(targetObj){ obj.getVar("tar").clear_obj_vector(); obj.getVar("tar").push_obj_vector(targetObj); local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/blackarea/floornormalbottom.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local attackBox = [-200,-50,-20,400,100,350]; local pAni = obj.getCurrentAnimation(); if(sizeRate > 200){ sizeRate = sizeRate.tofloat() / 200.0; pAni.setImageRateFromOriginal(sizeRate, sizeRate); pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); for(local i = 0; i < attackBox.len(); i++){ attackBox[i] = (attackBox[i].tofloat() * sizeRate).tointeger(); } } sq_AddAttackBox(pAni, attackBox[0], attackBox[1], attackBox[2], attackBox[3], attackBox[4], attackBox[5]); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 30)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.setTimeEvent(0, hitTime, -1, false); obj.setTimeEvent(1, lifeTime, 1, false); obj.setTimeEvent(10, 50, 10, false); obj.setTimeEvent(11, 10, -1, false); obj.getVar("custom").setInt(0, 0); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); } else sq_SendDestroyPacketPassiveObject(obj); break; } break; case SKILL_BYKK_NICOLASSUMMONZOMBIE: switch(subtype){ case 1: local level = receiveData.readDword(); local summonTime = receiveData.readDword(); local summonMax = receiveData.readDword(); obj.getVar("custom").setInt(0, level); obj.getVar("custom").setInt(1, summonTime); obj.getVar("custom").setInt(2, summonMax); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: local totalDamage = receiveData.readDword(); local level = receiveData.readDword(); local time = receiveData.readDword(); local prob = receiveData.readDword(); local group = receiveData.readDword(); local uniqueId = receiveData.readDword(); local targetObj = sq_GetObject(obj, group, uniqueId); if(targetObj){ obj.getVar("targetObj").clear_obj_vector(); obj.getVar("targetObj").push_obj_vector(targetObj); local aniPath = "monster/character/thief/2_necromancer_bykk/nicolas_zombie/nzanimation/trybite_obj.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 18)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_CURSE, prob, level, time); } else sq_SendDestroyPacketPassiveObject(obj); break; case 3: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); obj.getVar("custom").setInt(0, sizeRate); local aniPath = "passiveobject/common/animation/darkexplosion.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 8)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sizeRate = sizeRate.tofloat() / 100.0; local currentAni = obj.getCurrentAnimation(); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); obj.setTimeEvent(11, 200, 1, true); obj.setTimeEvent(12, 50, 2, true); obj.setTimeEvent(13, 15, 2, true); obj.setTimeEvent(14, 100, 1, true); break; } break; case SKILL_BYKK_NICOLASBLACKWAVE: switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local hitTime = receiveData.readDword(); local aniPath = "monster/character/thief/2_necromancer_bykk/nicolas/animation/casting2_obj.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 39)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.setTimeEvent(0, hitTime, -1, false); break; } break; case SKILL_BYKK_NICOLASBLACKARACHNIA: switch(subtype){ case 1: case 2: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local totalDamage2 = receiveData.readDword(); local holdTime = receiveData.readDword(); local hitTime = receiveData.readDword(); local sub = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage2); obj.getVar("custom").setInt(1, holdTime); obj.getVar("custom").setInt(2, hitTime); obj.getVar("custom").setInt(3, sub); local aniPath = "monster/character/thief/2_necromancer_bykk/nicolas/animation/effect/blackarachnia/attack_nicolas_pahse1.ani"; if(subtype == 2) aniPath = "monster/character/thief/2_necromancer_bykk/nicolas/animation/effect/blackarachnia/attack_nicolas_pahse2.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 30)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); break; case 3: local totalDamage = receiveData.readDword(); local holdTime = receiveData.readDword(); local hitTime = receiveData.readDword(); obj.getVar("custom").setInt(1, holdTime); local group = receiveData.readDword(); local uniqueId = receiveData.readDword(); local sub = receiveData.readDword(); obj.getVar("custom").setInt(2, sub); local targetObj = sq_GetObject(obj, group, uniqueId); if(targetObj){ sq_moveWithParent(targetObj, obj); obj.getVar("tar").clear_obj_vector(); obj.getVar("tar").push_obj_vector(targetObj); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(targetObj, obj, -1, false, APDPATH_NICOLAS_BLACKWAVE, true); sq_HoldAndDelayDie(targetObj, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 30)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.setTimeEvent(10, hitTime, -1, false); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); } break; case 4: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local totalDamage2 = receiveData.readDword(); local holdTime = receiveData.readDword(); local hitTime = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage2); obj.getVar("custom").setInt(1, holdTime); obj.getVar("custom").setInt(2, hitTime); obj.getVar("custom").setInt(3, totalDamage); obj.getVar("custom").setInt(4, sizeRate); local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/nicolasblackarachnia/talisman/black_last.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); break; } break; case SKILL_BYKK_APPORTBALLACRE: switch(subtype){ case 1: sqrChr.getVar("ballacreObj").push_obj_vector(obj); obj.setMapFollowParent(sqrChr); obj.setMapFollowType(1); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: local totalDamage = receiveData.readDword(); local hitMax = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 54)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.sq_SetMaxHitCounterPerObject(hitMax); obj.getVar("move").setInt(0, sq_GetXPos(obj)); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_BYKK_AMBITIONOFBALLACRE: switch(subtype){ case 1: sqrChr.getVar("ambitionObj").push_obj_vector(obj); local totalDamage = receiveData.readDword(); local totalDamage2 = receiveData.readDword(); local sizeRate = receiveData.readDword(); local speedRate = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage); obj.getVar("custom").setInt(1, totalDamage2); obj.getVar("custom").setInt(2, sizeRate); obj.getVar("custom").setInt(3, speedRate); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local speedRate = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ambitionofballacre/talisman/ambitionofballacre_talismangrab_talismangrab.ani_hand_grab_normal.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 42)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); currentAni.setSpeedRate(speedRate.tofloat() / 100.0); break; } break; case SKILL_BYKK_GUILLOTINE: switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local sub = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotinesub/guilllotine_sub_normal.ani"; if(sub > 0) aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotinesub/guilllotine_sub_normal_big.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local attackIndex = 60; if(sub > 0) attackIndex = 56; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); switch(sub){ case 0: local aniPath = ["passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotinesub/guillotine_sub_dust.ani","passiveobject/6_thief_bykk/necromancer_bykk/animation/guillotinesub/guillotine_sub_spark.ani"]; local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj); for(local i = 0; i < aniPath.len(); i++){ createOnlyDrawObject_Theif_bykk(obj,aniPath[i],true,direction,xPos,yPos + 1,0,ENUM_DRAWLAYER_NORMAL); } break; case 1: sq_CreateParticle("passiveobject/character/thief/particle/guillotinesub.ptl", obj, 0, 1, 1, true, 30, 0, 1); break; } break; } break; case SKILL_BYKK_PHANTOMSTROM: switch(subtype){ case 1: local totalDamage1 = receiveData.readDword(); local totalDamage2 = receiveData.readDword(); local totalDamage3 = receiveData.readDword(); local stromTime = receiveData.readDword(); local stromHitTime = receiveData.readDword(); local strom2Time = receiveData.readDword(); local strom2HitTime = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage1); obj.getVar("custom").setInt(1, totalDamage2); obj.getVar("custom").setInt(2, totalDamage3); obj.getVar("custom").setInt(3, stromTime); obj.getVar("custom").setInt(4, stromHitTime); obj.getVar("custom").setInt(5, strom2Time); obj.getVar("custom").setInt(6, strom2HitTime); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 32)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage1); obj.setTimeEvent(0, stromHitTime, -1, true); obj.sq_PlaySound("ADESPHANTOM_STAR"); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: local totalDamage = receiveData.readDword(); local totalDamage2 = receiveData.readDword(); local strom2Time = receiveData.readDword(); local strom2HitTime = receiveData.readDword(); obj.getVar("custom").setInt(1, totalDamage2); obj.getVar("custom").setInt(2, strom2Time); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 32)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.setTimeEvent(0, strom2HitTime, -1, true); obj.sq_PlaySound("ADESPHANTOM_ADD"); obj.sq_PlaySound("ADESPHANTOM_SWISH"); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 3: local totalDamage = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/darkexplosionphantomstrom.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(-1000,sq_CreateAnimation("","character/thief/effect/animation/2_necromancer_bykk/phantomstrom/back_normal.ani"),true); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 31)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.setTimeEvent(12, 200, 2, true); obj.setTimeEvent(13, 50, 4, true); obj.setTimeEvent(14, 15, 4, true); obj.setTimeEvent(15, 100, 2, true); obj.sq_PlaySound("DARK_EXPLOSION"); obj.sq_PlaySound("BALAC_FANTOM_EXP"); break; } break; case SKILL_BYKK_EXECUTIONERSLASH: switch(subtype){ case 1: case 2: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local speedRate = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/executionerslash/newexecutionerslash_body_atk.ani"; if(subtype == 2) aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacre/talisman/executionerslash/executionerslashtalisman_body_atk.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 55)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); currentAni.setSpeedRate(speedRate.tofloat() / 100.0); break; } break; case SKILL_BYKK_BALLACREADVENT: switch(subtype){ case 1: local totalDamage_start = receiveData.readDword(); local totalDamage_multihit = receiveData.readDword(); local totalDamage_finish = receiveData.readDword(); local hitMax = receiveData.readDword(); local speedRate = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage_start); obj.getVar("custom").setInt(1, totalDamage_multihit); obj.getVar("custom").setInt(2, totalDamage_finish); obj.getVar("custom").setInt(3, hitMax); obj.getVar("custom").setInt(4, speedRate); local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacreadvent/ballacrecast02_set08n.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 7)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage_start); local pAni = obj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat() / 100.0); break; case 2: sqrChr.getVar("Ballacreadvent_Attract").push_obj_vector(obj); local speedRate = receiveData.readDword(); obj.getVar("custom").setInt(0, speedRate); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_COVER); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 3: local totalDamage = receiveData.readDword(); local hitMax = receiveData.readDword(); local speedRate = receiveData.readDword(); local totalDamage2 = receiveData.readDword(); obj.getVar("custom").setInt(0, hitMax); obj.getVar("custom").setInt(1, totalDamage); obj.getVar("custom").setInt(2, speedRate); obj.getVar("custom").setInt(3, totalDamage2); local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacreadvent/bigballacre02_finger.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local pAni = obj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat() / 100.0); local flashScreenObj = sq_flashScreen(obj,80,99990,0,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sqrChr.getVar("flashobj").clear_obj_vector(); sqrChr.getVar("flashobj").push_obj_vector(flashScreenObj); break; case 4: local speedRate = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacreadvent/bigballacre01_hand.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local pAni = obj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat() / 100.0); break; case 5: local totalDamage = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacreadvent/lasteffect_set02d15.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 4)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 6: sqrChr.getVar("Ballacreadvent_Background").push_obj_vector(obj); local speedRate = receiveData.readDword(); obj.getVar("custom").setInt(0, speedRate); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 7: local delay = receiveData.readDword(); local sub = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacreadvent/ballacrebeadfocus/beadfocusa_05.ani"; if(sub > 0) local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/ballacreadvent/ballacrebeadfocus/beadfocusb_05.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); obj.setTimeEvent(1, delay, 1, false); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_COVER); break; } break; case SKILL_BYKK_DARKSOUL: local totalDamage = receiveData.readDword(); local totalDamage_exp = receiveData.readDword(); local hitMax = receiveData.readDword(); local offsetY = receiveData.readDword(); local hitTime = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage); obj.getVar("custom").setInt(1, totalDamage_exp); obj.getVar("custom").setInt(2, hitMax); obj.getVar("custom").setInt(3, offsetY); obj.getVar("custom").setInt(4, hitTime); switch(subtype){ case 1: local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/darksoul/darksoul.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); obj.sq_SetMoveParticle("particle/darksoul.ptl", 0.0, 0.0); obj.setTimeEvent(10, 100, -1, false); break; case 2: local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/darksoul/darksoulcharge.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); obj.sq_SetMoveParticle("particle/darksoul.ptl", 0.0, 0.0); obj.setTimeEvent(10, 100, -1, false); break; case 3: obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 4: local group = receiveData.readDword(); local uniqueId = receiveData.readDword(); local targetObj = sq_GetObject(obj, group, uniqueId); if(targetObj){ obj.getVar("tat").clear_obj_vector(); obj.getVar("tat").push_obj_vector(targetObj); sq_moveWithParent(targetObj, obj); obj.setTimeEvent(14, hitTime, hitMax - 1, false); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 20)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); } break; } break; case SKILL_BYKK_DARKNAIL: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local speedRate = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/darknail/dark_normal.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 18)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sizeRate = sizeRate.tofloat() / 100.0; local currentAni = obj.getCurrentAnimation(); currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); currentAni.setSpeedRate(speedRate.tofloat()); break; case SKILL_BYKK_DARKLURE: switch(subtype){ case 1://totalDamage,lifeTime,hitTime,increaseRate,increaseRate_cur,sizeRate,autoTime sqrChr.getVar("darklure_obj").push_obj_vector(obj); local totalDamage = receiveData.readDword(); local lifeTime = receiveData.readDword(); local hitTime = receiveData.readDword(); local increaseRate = receiveData.readDword(); local increaseRate_cur = receiveData.readDword(); local sizeRate = receiveData.readDword(); local autoTime = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage); obj.getVar("custom").setInt(1, lifeTime); obj.getVar("custom").setInt(2, hitTime); obj.getVar("custom").setInt(3, increaseRate); obj.getVar("custom").setInt(4, increaseRate_cur); obj.getVar("custom").setInt(5, sizeRate); obj.getVar("custom").setInt(6, autoTime); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: local totalDamage = receiveData.readDword(); local lifeTime = receiveData.readDword(); local hitTime = receiveData.readDword(); local sizeRate = receiveData.readDword(); local sub = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/darklure/darklurenormal/floor/ghost_floor.ani", attackIndex = 15; if(sub == 1) aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/darklure/darklurenormal/sky/ghost_sky.ani"; if(sub == 2){aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/darklure/darklurecharge/floor/ghost_floor.ani"; attackIndex = 16;} local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sizeRate = sizeRate.tofloat() / 100.0; local currentAni = obj.getCurrentAnimation(); currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); obj.setTimeEvent(0, hitTime, -1, false); obj.setTimeEvent(1, lifeTime, 1, false); break; } break; case SKILL_BYKK_BLAMEOFDEAD: switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local lifeTime = receiveData.readDword(); local hitMax = receiveData.readDword(); local sizeRate = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage); obj.getVar("custom").setInt(1, lifeTime); obj.getVar("custom").setInt(2, hitMax); obj.getVar("custom").setInt(3, sizeRate); local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_BYKK_BLAMEOFDEAD); local level = sq_GetSkillLevel(sqrChr, 174); local prob = sq_GetLevelData(sqrChr, SKILL_BYKK_BLAMEOFDEAD, 1, skillLevel); local time = sq_GetLevelData(sqrChr, SKILL_BYKK_BLAMEOFDEAD, 3, skillLevel); local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/blameofdead/floornormal.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 10)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_SLOW, prob, level, time); sizeRate = sizeRate.tofloat() / 100.0; // print("sizeRate = "+sizeRate); local currentAni = obj.getCurrentAnimation(); currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); break; case 2: local totalDamage = receiveData.readDword(); local lifeTime = receiveData.readDword(); local hitMax = receiveData.readDword(); local group = receiveData.readDword(); local uniqueId = receiveData.readDword(); obj.getVar("custom").setInt(0, hitMax); local targetObj = sq_GetObject(obj, group, uniqueId); if(targetObj){ obj.getVar("tar").clear_obj_vector(); obj.getVar("tar").push_obj_vector(targetObj); obj.setTimeEvent(10, lifeTime / (hitMax + 2), hitMax, false); //obj.setTimeEvent(1, lifeTime + 100, 1, false); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 10)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); } break; } break; case SKILL_BYKK_LIVINGDEAD: switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local lifeTime = receiveData.readDword(); local hitTime = receiveData.readDword(); local sizeRate = receiveData.readDword(); local increaseRate = receiveData.readDword(); local addSizeRate = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage); obj.getVar("custom").setInt(1, lifeTime); obj.getVar("custom").setInt(2, hitTime); obj.getVar("custom").setInt(3, sizeRate); obj.getVar("custom").setInt(4, increaseRate); obj.getVar("custom").setInt(5, addSizeRate); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2://totalDamage,lifeTime,hitTime,sizeRate,sub local totalDamage = receiveData.readDword(); local lifeTime = receiveData.readDword(); local hitTime = receiveData.readDword(); local sizeRate = receiveData.readDword(); local sub = receiveData.readDword(); local isAttack = receiveData.readDword(); obj.getVar("custom").setInt(0, lifeTime); obj.getVar("custom").setInt(1, sizeRate); obj.getVar("custom").setInt(2, sub); local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/livingdead/darkmatter/newdarkmatter2_01.ani", attackIndex = 28; if(sub > 0){aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/livingdead/darkmatter/newdarkmatter2_01.ani"; attackIndex = 29;} local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); if(isAttack > 0){ local currentAni = obj.getCurrentAnimation(); switch(sub){ case 0: sq_AddAttackBox(currentAni, 0, -50, -50, 200, 100, 100); break; case 1: sq_AddAttackBox(currentAni, 0, -50, -50, 300, 100, 100); break; } sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.setTimeEvent(0, hitTime, -1, false); } sizeRate = sizeRate.tofloat() / 100.0; local currentAni = obj.getCurrentAnimation(); currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); obj.setTimeEvent(1, lifeTime, 1, false); obj.setTimeEvent(11, currentAni.getDelaySum(false) / 4, 2, false); currentAni.setSpeedRate(250.0); break; case 3: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local speedRate = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage); obj.getVar("custom").setInt(1, sizeRate); obj.getVar("custom").setInt(2, speedRate); obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; case 4: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/livingdead/110lvepicweapona/boomeffect_15.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 27)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/livingdead/110lvepicweapona/boombottom_exp.ani"; createOnlyDrawObjectEX_Theif_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM,sizeRate,sizeRate); sizeRate = sizeRate.tofloat() / 100.0; local currentAni = obj.getCurrentAnimation(); currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); obj.sq_PlaySound("R_LIVINGDEAD_OVEREAT"); obj.sq_PlaySound("DARK_EXPLOSION"); break; case 5: local lifeTime = receiveData.readDword(); local sizeRate = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/livingdead/darkmatter/newdarkmatter2_01.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sizeRate = sizeRate.tofloat() / 100.0; local currentAni = obj.getCurrentAnimation(); currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); obj.setTimeEvent(1, lifeTime, 1, false); currentAni.setSpeedRate(250.0); break; } break; case SKILL_BYKK_BLAMEOFDEADEX: switch(subtype){ case 1://totalDamage,lifeTime,hitTime,prob,sizeRate local totalDamage = receiveData.readDword(); local lifeTime = receiveData.readDword(); local hitTime = receiveData.readDword(); local prob = receiveData.readDword(); local sizeRate = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage); obj.getVar("custom").setInt(1, lifeTime); obj.getVar("custom").setInt(2, hitTime); obj.getVar("custom").setInt(3, sizeRate); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 10)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_HOLD, prob, sq_GetSkillLevel(sqrChr, 174), lifeTime + 2000); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: local totalDamage = receiveData.readDword(); local totalDamage2 = receiveData.readDword(); local sizeRate = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage2); local range = 500 * sizeRate / 100; local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/blameofdeadex/talisman/blameofdeadex_talisman_torment_start_effc05.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 10)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sizeRate = sizeRate.tofloat() / 100.0; local currentAni = obj.getCurrentAnimation(); currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); local appendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, "appendage/character/ap_common_suck.nut", false); if(appendage){ CNSquirrelAppendage.sq_Append(appendage, sqrChr, obj); local auraAppendage = appendage.sq_getAuraMaster("auraMaster"); if(!auraAppendage) auraAppendage = appendage.sq_AddAuraMaster("auraMaster", sqrChr, obj, 1200, 18, 5, 0); if(auraAppendage) auraAppendage.setAttractionInfo(600, 600, range, 100); } break; case 3: local lifeTime = receiveData.readDword(); local sub = receiveData.readDword(); local aniPath = ["passiveobject/6_thief_bykk/necromancer_bykk/animation/blameofdeadex/headstart.ani", "passiveobject/6_thief_bykk/necromancer_bykk/animation/blameofdeadex/smallbonehandn.ani"]; local ani = sq_CreateAnimation("",aniPath[sub]); obj.setCurrentAnimation(ani); obj.setTimeEvent(1, lifeTime, 1, false); break; } break; case SKILL_BYKK_HATEFULGHOST: switch(subtype){ case 1: sqrChr.getVar("hatefulGhostObj").push_obj_vector(obj); local totalDamage_1st = receiveData.readDword(); local totalDamage_2nd = receiveData.readDword(); local totalDamage_3th1 = receiveData.readDword(); local totalDamage_3th2 = receiveData.readDword(); local lifeTime = receiveData.readDword(); local sizeRate = receiveData.readDword(); local isAuto = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage_1st); obj.getVar("custom").setInt(1, totalDamage_2nd); obj.getVar("custom").setInt(2, totalDamage_3th1); obj.getVar("custom").setInt(3, totalDamage_3th2); obj.getVar("custom").setInt(4, lifeTime); obj.getVar("custom").setInt(5, sizeRate); obj.getVar("custom").setInt(6, isAuto); obj.getVar("phaseSet").setInt(0, 0); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); obj.setTimeEvent(10, lifeTime, 1, false); obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/necromancer_bykk/animation/hatefulghost/dummyattackbox.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 26)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sizeRate = sizeRate.tofloat() / 100.0; local currentAni = obj.getCurrentAnimation(); currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); break; case 3: local targetObj = sqrChr.getVar("hatefulGhostObj").get_obj_vector(0); sq_moveWithParent(targetObj, obj); local sub = receiveData.readDword(); if(sub == 0) obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); else if(sub == 2) obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); else obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_BYKK_COCONOFUNDEAD: switch(subtype){ case 1: sqrChr.getVar("coconofundeadObj").push_obj_vector(obj); local totalDamage = receiveData.readDword(); local totalDamage_exp = receiveData.readDword(); local lifeTime = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage); obj.getVar("custom").setInt(1, totalDamage_exp); obj.getVar("custom").setInt(2, lifeTime); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: case 3: sqrChr.getVar("coconofundeadObj_b").push_obj_vector(obj); local lifeTime = receiveData.readDword(); obj.setTimeEvent(1, lifeTime, 1, false); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; } break; case 3: local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_THBYKK_MARKOFFLAME); if(skillLevel > 0){ local sklIndex = [SKILL_THBYKK_FLAMEBALL, SKILL_THBYKK_BIGKUNAI, SKILL_THBYKK_FLAMETORNADO, SKILL_THBYKK_GASOLINEFIRE, SKILL_THBYKK_ILUSIONSHURIKEN, SKILL_THBYKK_SKYROADS, SKILL_THBYKK_FLAMEFLOWER, SKILL_THBYKK_DOOMFIELD ]; for(local i = 0; i < sklIndex.len(); i++){ if(sklIndex[i] == skillIndex){ // print("settest"); local burnDamageRate = sq_GetLevelData(sqrChr, SKILL_THBYKK_MARKOFFLAME, 1, skillLevel); local burnTime = sq_GetIntData(sqrChr, SKILL_THBYKK_MARKOFFLAME, 0); local decreaseBurnDamageRate = burnDamageRate; if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_SWORDOFKUSANAGI_BUFF)){ burnDamageRate = burnDamageRate + sq_GetIntData(sqrChr, SKILL_THBYKK_SWORDOFKUSANAGI, 20) / 4; } obj.getVar("markofFlame").setBool(0, true); obj.getVar("markofFlameSet").setInt(0, burnDamageRate); obj.getVar("markofFlameSet").setInt(1, decreaseBurnDamageRate); obj.getVar("markofFlameSet").setInt(2, burnTime); // print("settest"); } } if(skillIndex == SKILL_THBYKK_LEAVETRACE && subtype == SKILL_THBYKK_FLAMEFLOWER){ local burnDamageRate = sq_GetLevelData(sqrChr, SKILL_THBYKK_MARKOFFLAME, 1, skillLevel); local burnTime = sq_GetIntData(sqrChr, SKILL_THBYKK_MARKOFFLAME, 0); local decreaseBurnDamageRate = burnDamageRate; if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_SWORDOFKUSANAGI_BUFF)){ burnDamageRate = burnDamageRate + sq_GetIntData(sqrChr, SKILL_THBYKK_SWORDOFKUSANAGI, 20) / 4; } obj.getVar("markofFlame").setBool(0, true); obj.getVar("markofFlameSet").setInt(0, burnDamageRate); obj.getVar("markofFlameSet").setInt(1, decreaseBurnDamageRate); obj.getVar("markofFlameSet").setInt(2, burnTime); // print("settest"); } } switch(skillIndex){ case SKILL_THBYKK_FLAMEBALL: switch(subtype){ case 1: sqrChr.getVar("FlameBall").push_obj_vector(obj); local totalDamage = receiveData.readDword(); local totalDamage_exp = receiveData.readDword(); local hitTime = receiveData.readDword(); local lifeTime = receiveData.readDword(); local sizeRate = receiveData.readDword(); local speedRate = receiveData.readDword(); local isBlue = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage); obj.getVar("custom").setInt(1, totalDamage_exp); obj.getVar("custom").setInt(2, hitTime); obj.getVar("custom").setInt(3, lifeTime); obj.getVar("custom").setInt(4, sizeRate); obj.getVar("custom").setInt(5, speedRate); obj.getVar("custom").setInt(6, isBlue); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: local totalDamage = receiveData.readDword(); if(obj.getVar("markofFlame").getBool(0)){ local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; obj.getVar("markofFlameSet").setInt(3, burnDamage); totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; } local isBlue = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flameball/end_flameball_end_dodge.ani"; if(isBlue > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flameball/end_01.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 75)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; } break; case SKILL_THBYKK_BIGKUNAI: switch(subtype){ case 1: case 2: local totalDamage = receiveData.readDword(); local totalDamage_exp = receiveData.readDword(); local hitTime = receiveData.readDword(); local lifeTime = receiveData.readDword(); local sizeRate = receiveData.readDword(); local isBlue = receiveData.readDword(); local moveBool = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage); obj.getVar("custom").setInt(1, totalDamage_exp); obj.getVar("custom").setInt(2, hitTime); obj.getVar("custom").setInt(3, lifeTime); obj.getVar("custom").setInt(4, sizeRate); obj.getVar("custom").setInt(8, isBlue); obj.getVar("custom").setInt(9, moveBool); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 3://totalDamage,sizeRate,subtype,isBlue local totalDamage = receiveData.readDword(); if(obj.getVar("markofFlame").getBool(0)){ local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; obj.getVar("markofFlameSet").setInt(3, burnDamage); totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; } local sizeRate = receiveData.readDword(); local subState = receiveData.readDword(); local isBlue = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/bigkunai/bigkunai/groundatkfinish_e_bomal.ani"; if(subState > 1) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/bigkunai/bigkunaijump/airatkfinish_e_bomal.ani"; if(isBlue > 0){ if(subState > 1) aniPath = "passiveobject/z_ninja/animation/bigkunai/swordofkusanagi/airatkfinish_e_bomal_blue.ani"; else aniPath = "passiveobject/z_ninja/animation/bigkunai/swordofkusanagi/groundatkfinish_e_bomal_blue.ani"; } local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 64)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); if(sizeRate > 100){ sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } sq_SetMyShake(obj, 6, 200); break; } break; case SKILL_THBYKK_FLAMETORNADO: switch(subtype){ case 1: sqrChr.getVar("FlameTornadoObj").push_obj_vector(obj); local totalDamage = receiveData.readDword(); local totalDamage_exp = receiveData.readDword(); local hitTime = receiveData.readDword(); local lifeTime = receiveData.readDword(); local sizeRate = receiveData.readDword(); local range = receiveData.readDword(); local expSizeRate = receiveData.readDword(); local isBlue = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage); obj.getVar("custom").setInt(1, totalDamage_exp); obj.getVar("custom").setInt(2, hitTime); obj.getVar("custom").setInt(3, lifeTime); obj.getVar("custom").setInt(4, sizeRate); obj.getVar("custom").setInt(5, range); obj.getVar("custom").setInt(6, expSizeRate); obj.getVar("custom").setInt(7, isBlue); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: local totalDamage = receiveData.readDword(); if(obj.getVar("markofFlame").getBool(0)){ local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; obj.getVar("markofFlameSet").setInt(3, burnDamage); totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; } local sizeRate = receiveData.readDword(); local isBlue = receiveData.readDword(); // print("sizeRate = "+sizeRate); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flametornado/explosion/explosion_fire01.ani"; if(isBlue > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flametornado/blueexplosion/blueexplosion_fire01.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 78)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); if(sizeRate > 100){ sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } sq_SetMyShake(obj, 6, 200); break; } break; case SKILL_THBYKK_GASOLINEFIRE: switch(subtype){ case 1: local totalDamage_shockwave = receiveData.readDword(); local totalDamage_ball = receiveData.readDword(); local totalDamage_ballexp = receiveData.readDword(); local totalDamage_disexp = receiveData.readDword(); local sizeRate = receiveData.readDword(); local sockwaveSizeRate = receiveData.readDword(); local speedRate = receiveData.readDword(); local toadSizeRate = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage_shockwave); obj.getVar("custom").setInt(1, totalDamage_ball); obj.getVar("custom").setInt(2, totalDamage_ballexp); obj.getVar("custom").setInt(3, totalDamage_disexp); obj.getVar("custom").setInt(4, sizeRate); obj.getVar("custom").setInt(5, sockwaveSizeRate); obj.getVar("custom").setInt(6, toadSizeRate); local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_THBYKK_KURVEJADE); if(skillLevel > 0){ local addSpeedRate = sq_GetLevelData(sqrChr, SKILL_THBYKK_KURVEJADE, 3, skillLevel); addSpeedRate = addSpeedRate * 60 / 100; obj.getVar("custom").setInt(7, addSpeedRate); } else obj.getVar("custom").setInt(7, 0); local isBlue = 0; if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; obj.getVar("custom").setInt(7, isBlue); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/gasolinefire/toad/gasolinefireact_toad.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(speedRate.tofloat()); if(toadSizeRate > 100){ local currentAni = obj.getCurrentAnimation(); local sizeRate = toadSizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); } break; case 2: local totalDamage_shockwave = receiveData.readDword(); if(obj.getVar("markofFlame").getBool(0)){ local burnDamage = totalDamage_shockwave * obj.getVar("markofFlameSet").getInt(0) / 100; obj.getVar("markofFlameSet").setInt(3, burnDamage); totalDamage_shockwave = totalDamage_shockwave * obj.getVar("markofFlameSet").getInt(1) / 100; } local sockwaveSizeRate = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/gasolinefire/shockwave/gasolinefireshockwave_eff_a.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 93)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage_shockwave); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); if(sockwaveSizeRate > 100){ local currentAni = obj.getCurrentAnimation(); local sizeRate = sockwaveSizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } sq_SetMyShake(obj, 3, 120); break; case 3: local totalDamage_ball = receiveData.readDword(); if(obj.getVar("markofFlame").getBool(0)){ local burnDamage = totalDamage_ball * obj.getVar("markofFlameSet").getInt(0) / 100; obj.getVar("markofFlameSet").setInt(3, burnDamage); totalDamage_ball = totalDamage_ball * obj.getVar("markofFlameSet").getInt(1) / 100; } local totalDamage_ballexp = receiveData.readDword(); local sizeRate = receiveData.readDword(); local isBlue = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage_ballexp); obj.getVar("custom").setInt(1, sizeRate); obj.getVar("custom").setInt(2, isBlue); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/gasolinefire/ball/gasolinefirefireball_eff_a.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 88)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage_ball); obj.sq_SetMoveParticle("particle/kunoichi_bykk/gasolinefire.ptl", 0.0, 0.0); sq_SetSpeedToMoveParticle(obj,2,300); break; case 4: local totalDamage_ballexp = receiveData.readDword(); if(obj.getVar("markofFlame").getBool(0)){ local burnDamage = totalDamage_ballexp * obj.getVar("markofFlameSet").getInt(0) / 100; obj.getVar("markofFlameSet").setInt(3, burnDamage); totalDamage_ballexp = totalDamage_ballexp * obj.getVar("markofFlameSet").getInt(1) / 100; } local sizeRate = receiveData.readDword();// * 150 / 100 local isBlue = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/gasolinefire/lowlevelballexp/gasolinefirefinish_b_ground_a.ani"; if(isBlue > 0){ aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/gasolinefire/lowlevelballexp/swordofkusanagi/gasolinefirefinish_b_blacksmoke.ani"; createOnlyDrawObjectEX_Theif_bykk(obj,"passiveobject/6_thief_bykk/kunoichi_bykk/animation/gasolinefire/lowlevelballexp/swordofkusanagi/gasolinefirefinishbottom_b_ground_b.ani",true,sq_GetDirection(obj),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM,sizeRate,sizeRate) } local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 92)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage_ballexp); if(sizeRate > 100){ local currentAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } obj.sq_PlaySound("GASOLINEFIRE_BALL_EXP"); sq_SetMyShake(obj, 12, 600); break; case 5: local totalDamage_disexp = receiveData.readDword(); if(obj.getVar("markofFlame").getBool(0)){ local burnDamage = totalDamage_disexp * obj.getVar("markofFlameSet").getInt(0) / 100; obj.getVar("markofFlameSet").setInt(3, burnDamage); totalDamage_disexp = totalDamage_disexp * obj.getVar("markofFlameSet").getInt(1) / 100; } local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/gasolinefire/disappearexp/gasolinefireactfireb_blacksmoke.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 91)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage_disexp); sq_SetMyShake(obj, 3, 80); break; } break; case SKILL_THBYKK_ILUSIONSHURIKEN: switch(subtype){ case 1: local totalDamage = receiveData.readDword(); if(obj.getVar("markofFlame").getBool(0)){ local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; obj.getVar("markofFlameSet").setInt(3, burnDamage); totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; } local reboundCount = receiveData.readDword(); local isBlue = receiveData.readDword(); obj.getVar("custom").setInt(0, reboundCount); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/illusionshuriken/shoot_b_kunai.ani"; if(isBlue > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/illusionshuriken/swordofkusanagi/shoot_b_kunai.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 94)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local speed = 1000.0; if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); else sq_SetVelocity(obj, 0, -speed); break; case 2: local totalDamage = receiveData.readDword(); if(obj.getVar("markofFlame").getBool(0)){ local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; obj.getVar("markofFlameSet").setInt(3, burnDamage); totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; } local isBlue = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/illusionshuriken/shootair_b_kunai.ani"; if(isBlue > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/illusionshuriken/swordofkusanagi/shootair_b_kunai.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 94)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); 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, 2, -speed); break; case 3: case 4: sqrChr.getVar("IlusionShuriken").push_obj_vector(obj); local totalDamage = receiveData.readDword(); local reboundCount = receiveData.readDword(); local createMax = receiveData.readDword(); local speedRate = receiveData.readDword(); local isBlue = receiveData.readDword(); local isIllusion = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage); obj.getVar("custom").setInt(1, reboundCount); obj.getVar("custom").setInt(2, createMax); obj.getVar("custom").setInt(3, 0); obj.getVar("custom").setInt(4, speedRate); obj.getVar("custom").setInt(5, isBlue); local ani = sq_GetCustomAni(sqrChr, ANI_THBYKK_ILLUSIONSHURIKENGROUNDATTACK); local ani2 = sq_GetCustomAni(sqrChr, ANI_THBYKK_ILLUSIONSHURIKENGROUNDATTACK2); local ani3 = sq_GetCustomAni(sqrChr, ANI_THBYKK_ILLUSIONSHURIKENGROUNDATTACK3); if(isIllusion > 0){ ani = sq_CreateAnimation("","passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/illusionshuriken/illusionshuriken.ani"); ani2 = sq_CreateAnimation("","passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/illusionshuriken/illusionshuriken2.ani"); ani3 = sq_CreateAnimation("","passiveobject/6_thief_bykk/kunoichi_bykk/animation/leavetrace/illusionshuriken/illusionshuriken3.ani"); } if(subtype == 4){ ani = sq_GetCustomAni(sqrChr, ANI_THBYKK_ILLUSIONSHURIKENAIRATTACK); ani2 = sq_GetCustomAni(sqrChr, ANI_THBYKK_ILLUSIONSHURIKENAIRATTACK2); ani3 = sq_GetCustomAni(sqrChr, ANI_THBYKK_ILLUSIONSHURIKENAIRATTACK3); } obj.getVar("saveAni").clear_ani_vector(); obj.getVar("saveAni").push_ani_vector(ani); obj.getVar("saveAni").push_ani_vector(ani2); obj.getVar("saveAni").push_ani_vector(ani3); if(subtype == 3) sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/3kunoichi_bykk/illusionshuriken/groundatk/ilusion_groundatkstart_a_boom.ani", 0, 1, 0); else sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/3kunoichi_bykk/illusionshuriken/airatk/ilusion_airatkstart_boom.ani", 0, 1, 0); obj.sq_PlaySound("GHOSTKUNAI_CAST"); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_THBYKK_MIGAWARI: switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local speedRate = receiveData.readDword(); obj.getVar("custom").setInt(0, speedRate); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/migawari/migawariatka_eff_a.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 106)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); if(sizeRate > 100){ local currentAni = obj.getCurrentAnimation(); local sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } sq_SetMyShake(obj, 3, 120); break; case 2: local totalDamage = receiveData.readDword(); local totalDamage_exp = receiveData.readDword(); local sizeRate = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/migawari/migawariwood_surikenhitbox.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 107)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); if(sizeRate > 100){ local currentAni = obj.getCurrentAnimation(); local sizeRate = sizeRate.tofloat() / 100.0; sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF, 0, 1, -30,sq_GetDirection(obj),3,SKILL_THBYKK_MIGAWARI,21,totalDamage_exp,sizeRate,0,0,0,0,0,0); sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/migawari/migawariwood_surikeneff.ani", 0, 1, 0); // sq_SetMyShake(obj, 3, 120); break; case 3: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/migawari/migawariwood_explosion_a.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 105)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); if(sizeRate > 100){ local currentAni = obj.getCurrentAnimation(); local sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } sq_flashScreen(obj,0,0,400,204,sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 2, 200); break; case 21: local totalDamage_exp = receiveData.readDword(); local sizeRate = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage_exp); obj.getVar("custom").setInt(1, sizeRate); sqrChr.getVar("MigawariObj").push_obj_vector(obj); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/migawari/migawariwood_suriken.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/migawari/migawarifinish_eff_b.ani", -50, 1, 30); // obj.setTimeEvent(1, 300, 1, false); break; } break; case SKILL_THBYKK_SKYROADS: switch(subtype){ case 1: local totalDamage = receiveData.readDword(); if(obj.getVar("markofFlame").getBool(0)){ local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; obj.getVar("markofFlameSet").setInt(3, burnDamage); totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; } local sizeRate = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/skyroads/smoke/skyroadsact_smoke_a.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 112)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); if(sizeRate > 100){ local currentAni = obj.getCurrentAnimation(); local sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } sq_SetMyShake(obj, 3, 80); break; case 2: local totalDamage = receiveData.readDword(); if(obj.getVar("markofFlame").getBool(0)){ local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; obj.getVar("markofFlameSet").setInt(3, burnDamage); totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; } local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/skyroads/airflame/back/skyroadsact_blacksmoke.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/6_thief_bykk/kunoichi_bykk/animation/skyroads/airflame/front/skyroadsact_ball_a.ani"),true); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 112)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sq_SetMyShake(obj, 3, 80); break; case 3: local totalDamage = receiveData.readDword(); if(obj.getVar("markofFlame").getBool(0)){ local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; obj.getVar("markofFlameSet").setInt(3, burnDamage); totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; } local sizeRate = receiveData.readDword(); local xPos = receiveData.readDword(); local zPos = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/skyroads/beam/hand_a.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 109)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local baseX = sq_GetXPos(obj), baseZ = sq_GetZPos(obj); local currentAni = obj.getCurrentAnimation(); local sizeRate = baseZ.tofloat() / 420.0; currentAni.setImageRateFromOriginal(sizeRate, 1.0); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, 1.0, 1.1); local atan = sq_Atan2((225 * 1.2).tofloat(), zPos.tofloat()); sq_SetCustomRotate(obj, -atan); break; case 4: local totalDamage = receiveData.readDword(); if(obj.getVar("markofFlame").getBool(0)){ local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; obj.getVar("markofFlameSet").setInt(3, burnDamage); totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; } local sizeRate = receiveData.readDword(); local isTalisman = receiveData.readDword(); local isBlue = receiveData.readDword(); obj.getVar("custom").setInt(1, totalDamage * 8 / 100); obj.getVar("custom").setInt(2, sizeRate); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/skyroads/exp/skyroadsfinisheff_blacksmoke.ani"; if(isBlue > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/skyroads/exp/swordofkusanagi/blueskyroadsfinish_00.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 110)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); createOnlyDrawObjectEX_Theif_bykk(obj,"passiveobject/6_thief_bykk/kunoichi_bykk/animation/skyroads/exp/swordofkusanagi/blueskyroadsfinishfloor_floor_a.ani",true,sq_GetDirection(obj),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM,sizeRate,sizeRate); if(sizeRate > 100){ local currentAni = obj.getCurrentAnimation(); local sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } sq_SetMyShake(obj, 6, 300); if(isTalisman > 0){ local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(0, 4); obj.getVar("custom").setInt(3, currentAni.getDelaySum(false) - delay); obj.setTimeEvent(1, delay, 1, false); } break; case 5: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local time = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/skyroads/firegound/skyroadsfinisheff_ground_a.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 111)); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(false); local speedRate = delay * 100 / (2500 + time); currentAni.setSpeedRate(speedRate.tofloat()); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); if(sizeRate > 100){ local sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } break; } break; case SKILL_THBYKK_FLAMEFLOWER: switch(subtype){ case 1: local totalDamage = receiveData.readDword(); if(obj.getVar("markofFlame").getBool(0)){ local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; obj.getVar("markofFlameSet").setInt(3, burnDamage); totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; } local sizeRate = receiveData.readDword(); local isBlue = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flameflower/flameflowerexp.ani"; if(isBlue > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flameflower/swordofkusanagi/bluelast_last.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 76)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); if(sizeRate > 100){ local currentAni = obj.getCurrentAnimation(); local sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } sq_SetMyShake(obj, 10, 300); break; } break; case SKILL_THBYKK_FLYINGSWALLOW: switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flyingswallow/swallowatka_eff_a.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 76)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); sq_SetAttackBoundingBoxSizeRate(currentAni, 2.0, 2.0, 2.0); sq_SetMyShake(obj, 3, 80); break; case 2: local group = receiveData.readDword(); local uniqueId = receiveData.readDword(); local targetObj = sq_GetObject(obj, group, uniqueId); if(targetObj && targetObj.getState() != STATE_DIE){ obj.getVar("tar").clear_obj_vector(); obj.getVar("tar").push_obj_vector(targetObj); sq_moveWithParent(targetObj, obj); obj.setTimeEvent(1, 200, 1, false); } break; case 3: local totalDamage_shuriken = receiveData.readDword(); local totalDamage_exp = receiveData.readDword(); local createMax = receiveData.readDword(); local sub = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage_shuriken); obj.getVar("custom").setInt(1, totalDamage_exp); obj.getVar("custom").setInt(2, createMax); obj.getVar("custom").setInt(3, sub); switch(sub){ case 1: case 3: local ani = sq_GetCustomAni(sqrChr, ANI_THBYKK_FLYINGSWALLOWMOVING); sq_Rewind(ani); obj.setCurrentAnimation(ani); break; case 2: case 4: local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flyingswallow/swallowmovingtrace.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); break; } break; case 4: local totalDamage_exp = receiveData.readDword(); local sub = receiveData.readDword(); local num = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage_exp); obj.getVar("custom").setInt(1, sub); obj.getVar("custom").setInt(2, num); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 5: local totalDamage_shuriken = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage_shuriken); obj.setTimeEvent(3, 100, 1, false); break; case 6: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local sub = receiveData.readDword(); obj.getVar("custom").setInt(0, sub); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flyingswallow/swallow_boom2_normal_attack.ani"; if(sub > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flyingswallow/swallow_boom2_jump_attack.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, sub>0?81:80)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); if(sub > 0 && sizeRate > 100){ local currentAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } sq_SetMyShake(obj, 5, 80); break; case 7: local totalDamage_exp = receiveData.readDword(); local sizeRate = receiveData.readDword(); local num = receiveData.readDword(); local numMax = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage_exp); obj.getVar("custom").setInt(1, sizeRate); obj.getVar("custom").setInt(2, num); obj.getVar("custom").setInt(3, numMax); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 8: local totalDamage = receiveData.readDword(); local sub = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/flyingswallow/swallow_light_line.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 82)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local angle = -35.0; switch(sub){ case 2: angle = 35.0; break; case 3: angle = -70.0; break; case 4: angle = 60.0; break; case 5: angle = 90.0; break; } sq_SetCustomRotate(obj, sq_ToRadian(angle)); local currentAni = obj.getCurrentAnimation(); currentAni.setImageRateFromOriginal(2.0, 1.0); sq_SetAttackBoundingBoxSizeRate(currentAni, 1.0, 1.0, 1.0); break; } break; case SKILL_THBYKK_DOOMFIELD: switch(subtype){ case 1: local totalDamage = receiveData.readDword(); if(obj.getVar("markofFlame").getBool(0)){ local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; obj.getVar("markofFlameSet").setInt(3, burnDamage); totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; } local speedRate = receiveData.readDword(); local sizeRate = receiveData.readDword(); local isBlue = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/doomfield/floor/doomfiledfloor_floor02.ani"; if(isBlue > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/doomfield/swordofkusanagi/floor/doomfiledfloor_floor02.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 68)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(speedRate.tofloat()); if(sizeRate > 100){ sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); break; case 2: local totalDamage = receiveData.readDword(); if(obj.getVar("markofFlame").getBool(0)){ local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; obj.getVar("markofFlameSet").setInt(3, burnDamage); totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; } local sizeRate = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/doomfield/ninjacircle/ninjacircleexpattackbox.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 68)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.setTimeEvent(2, 50, 10, true); break; case 3: local totalDamage = receiveData.readDword(); if(obj.getVar("markofFlame").getBool(0)){ local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; obj.getVar("markofFlameSet").setInt(3, burnDamage); totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; } local totalDamage_exp = receiveData.readDword(); local speedRate = receiveData.readDword(); local sizeRate = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage_exp); obj.getVar("custom").setInt(1, speedRate); obj.getVar("custom").setInt(2, sizeRate); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/doomfield/startflame/doomfiledcreate_flame01.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 71)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(speedRate.tofloat()); if(sizeRate > 100){ sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } break; case 4: local totalDamage = receiveData.readDword(); if(obj.getVar("markofFlame").getBool(0)){ local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; obj.getVar("markofFlameSet").setInt(3, burnDamage); totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; } local speedRate = receiveData.readDword(); local sizeRate = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/doomfield/startexplosion/doomfiledexplosion_flameex02.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 72)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(speedRate.tofloat()); if(sizeRate > 100){ sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } break; case 5: sqrChr.getVar("DoomFieldObj").push_obj_vector(obj); local totalDamage = receiveData.readDword(); local phaseSet = receiveData.readDword(); local sub = receiveData.readDword(); local sizeRate = receiveData.readDword(); local isBlue = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage); obj.getVar("custom").setInt(1, phaseSet); obj.getVar("custom").setInt(2, sizeRate); obj.getVar("custom").setInt(3, isBlue); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/doomfield/ninjacircle/ninjacircle0"+sub.tostring()+"_set01.ani"; if(isBlue > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/doomfield/swordofkusanagi/ninjacircle/ninjacircle0"+sub.tostring()+"_set01.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); if(sizeRate > 100){ local currentAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); } break; case 6: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local isBlue = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/doomfield/lastexplosion/lastexplosion_normal09.ani"; if(isBlue > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/doomfield/swordofkusanagi/lastexplosion/lastexplosion_normal09.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_flashScreen(obj,0,120,10,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 5, 200); createSkillPassive_Theif_bykk(sqrChr,sqrChr,PASSIVEOBJ_NUM_THIEF, 0, 0, 0,sq_GetDirection(obj),3,SKILL_THBYKK_DOOMFIELD,8,totalDamage,sizeRate,0,0,0,0,0,0); if(sizeRate > 100){ local currentAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); } break; case 7: local totalDamage = receiveData.readDword(); if(obj.getVar("markofFlame").getBool(0)){ local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; obj.getVar("markofFlameSet").setInt(3, burnDamage); totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; } local sizeRate = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/doomfield/ninjacircle/ninjacircleattackbox.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 69)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); if(sizeRate > 100){ local currentAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } obj.setTimeEvent(2, 12, 6, true); break; case 8: local totalDamage = receiveData.readDword(); if(obj.getVar("markofFlame").getBool(0)){ local burnDamage = totalDamage * obj.getVar("markofFlameSet").getInt(0) / 100; obj.getVar("markofFlameSet").setInt(3, burnDamage); totalDamage = totalDamage * obj.getVar("markofFlameSet").getInt(1) / 100; } local sizeRate = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/doomfield/ninjacircle/ninjacircleexpattackbox.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 70)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); if(sizeRate > 100){ local currentAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } break; } break; case SKILL_THBYKK_YAMATAOROCHI: switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local totalDamage_loop = receiveData.readDword(); local hitMax = receiveData.readDword(); local sizeRate = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage); obj.getVar("custom").setInt(1, totalDamage_loop); obj.getVar("custom").setInt(2, hitMax); obj.getVar("custom").setInt(3, sizeRate); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: local totalDamage = receiveData.readDword(); local lifeTime = receiveData.readDword(); local sizeRate = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage); obj.getVar("custom").setInt(1, lifeTime); obj.getVar("custom").setInt(2, sizeRate); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 3: local totalDamage_loop = receiveData.readDword(); local lifeTime = receiveData.readDword(); local sizeRate = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage_loop); obj.getVar("custom").setInt(1, lifeTime); obj.getVar("custom").setInt(2, sizeRate); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 4: local totalDamage_loop = receiveData.readDword(); local lifeTime = receiveData.readDword(); local sizeRate = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage_loop); obj.getVar("custom").setInt(1, lifeTime); obj.getVar("custom").setInt(2, sizeRate); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_THBYKK_AMATERAS: switch(subtype){ case 1: sqrChr.getVar("Amateras").push_obj_vector(obj); local totalDamage = receiveData.readDword(); local totalDamage_laser = receiveData.readDword(); local laserMax = receiveData.readDword(); local range = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage); obj.getVar("custom").setInt(1, totalDamage_laser); obj.getVar("custom").setInt(2, laserMax); obj.getVar("custom").setInt(3, range); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: local totalDamage = receiveData.readDword(); local range = receiveData.readDword(); local totalDamage_laser = receiveData.readDword(); local laserMax = receiveData.readDword(); obj.getVar("custom").setInt(1, totalDamage_laser); obj.getVar("custom").setInt(2, laserMax); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 61)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local objectManager = obj.getObjectManager(); for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ local object = objectManager.getCollisionObject(i); if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj) && sq_GetDistance(sq_GetXPos(obj), sq_GetYPos(obj), sq_GetXPos(object), sq_GetYPos(object), true) <= range && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= 500){ local activeObj = sq_GetCNRDObjectToActiveObject(object); sq_SendHitObjectPacket(obj,activeObj,0,0,sq_GetObjectHeight(activeObj) / 2); } } local delay = 300; local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_THBYKK_KURVEJADE); if(skillLevel > 0){ delay = delay * (100 - sq_GetLevelData(sqrChr, SKILL_THBYKK_KURVEJADE, 15, skillLevel) * 60 / 100) / 100; } obj.setTimeEvent(4, delay, 1, false); break; case 3: local totalDamage = receiveData.readDword(); local sub = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage); obj.setTimeEvent(5, sub * 150, 1, false); break; case 4: local group = receiveData.readDword(); local uniqueId = receiveData.readDword(); local targetObj = sq_GetObject(obj, group, uniqueId); if(targetObj && targetObj.getState() != STATE_DIE){ obj.getVar("tar").clear_obj_vector(); obj.getVar("tar").push_obj_vector(targetObj); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/amateras/laser/beam1.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); obj.getVar("custom").setInt(0, sq_GetXPos(obj)); obj.getVar("custom").setInt(1, sq_GetYPos(obj)); obj.getVar("custom").setInt(2, sq_GetZPos(obj)); obj.getVar("custom").setInt(3, sq_GetHeightObject(targetObj) / 2); obj.setTimeEvent(6, 8, 10, true); } break; } break; case SKILL_THBYKK_FUUMASHURIKEN: switch(subtype){ case 1: sqrChr.getVar("FuumaShuriken").push_obj_vector(obj); local totalDamage = receiveData.readDword(); local hitMax = receiveData.readDword(); local isIllusion = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/fuumashuriken/shurikensmalldummy.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 84)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.sq_SetMaxHitCounterPerObject(hitMax); obj.setTimeEvent(1, 50, -1, true); if(isIllusion < 1) obj.setTimeEvent(0, 3000, 1, false); else obj.setTimeEvent(0, 2000, 1, false); break; case 2: local sub = receiveData.readDword(); local hitMax = receiveData.readDword(); local isIllusion = receiveData.readDword(); local time = (60 * hitMax - 100) / 2; obj.getVar("custom").setInt(0, time); obj.getVar("custom").setInt(1, sq_GetXPos(obj)); obj.getVar("custom").setInt(2, sq_GetYPos(obj)); obj.getVar("custom").setInt(5, isIllusion); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/fuumashuriken/funmasuriken_smallsuriken_suriken.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local speed = 350.0 * 2; if(sub == 1) speed = speed * 1.25; if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); else sq_SetVelocity(obj, 0, -speed); switch(sub){ case 0: sq_SetVelocity(obj, 1, -speed * 0.2); break; case 2: sq_SetVelocity(obj, 1, speed * 0.2); break; case 3: sq_SetVelocity(obj, 1, speed * 0.4); break; } obj.setTimeEvent(2, time, 1, false); break; case 3: local totalDamage = receiveData.readDword(); local hitMax = receiveData.readDword(); local totalDamage_exp = receiveData.readDword(); local sizeRate = receiveData.readDword(); local sizeRate_shuriken = receiveData.readDword(); local isBlue = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage_exp); obj.getVar("custom").setInt(1, sizeRate); obj.getVar("custom").setInt(2, isBlue); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/fuumashuriken/shurikenbigdummy.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 85)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.sq_SetMaxHitCounterPerObject(hitMax); obj.setTimeEvent(1, 80, -1, true); obj.setTimeEvent(5, 80 * (hitMax + 1), 1, false); local currentAni = obj.getCurrentAnimation(); if(sizeRate_shuriken > 100){ sizeRate = sizeRate_shuriken.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } break; case 4: local hitMax = receiveData.readDword(); local sizeRate_shuriken = receiveData.readDword(); local isBlue = receiveData.readDword(); // print(sizeRate_shuriken); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/fuumashuriken/funmasuriken_big_suriken.ani"; if(isBlue > 0) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/fuumashuriken/talismansurikenloop_03.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); obj.sq_SetMoveParticle("particle/kunoichi_bykk/fuumashuriken01.ptl", 0.0, 0.0); obj.setTimeEvent(0, 80 * (hitMax + 1), 1, false); local currentAni = obj.getCurrentAnimation(); if(sizeRate_shuriken > 100){ local sizeRate = sizeRate_shuriken.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } break; case 5: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local sub = receiveData.readDword(); local isBlue = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/fuumashuriken/funmasurikenexplosion_05.ani"; if(sub == 1) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/fuumashuriken/funmasurikenexplosion_jump_05.ani"; if(isBlue > 0){ aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/fuumashuriken/funmasurikentalismanexplosion_05.ani"; if(sub == 1) aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/fuumashuriken/funmasurikentalismanexplosion_jump_05.ani"; } local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 86)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); if(sizeRate > 100){ sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } break; case 6: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local isBlue = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage); obj.getVar("custom").setInt(1, sizeRate); obj.getVar("custom").setInt(2, isBlue); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/fuumashuriken/funmasuriken_big_jump_suriken.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local speed = 600.0; if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); else sq_SetVelocity(obj, 0, -speed); sq_SetVelocity(obj, 2, -speed); break; } break; case SKILL_THBYKK_JADEKAMAITACHI: switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local totalDamage_exp = receiveData.readDword(); local addNumber = receiveData.readDword(); local hitMax = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage_exp); obj.getVar("custom").setInt(1, addNumber); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/jadekamaitachi/renewal/tornado_03.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 98)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.sq_SetMaxHitCounterPerObject(hitMax); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(0, 15) / 20; obj.setTimeEvent(1, delay, -1, false); obj.setTimeEvent(2, currentAni.getDelaySum(0, 14), 1, false); obj.setTimeEvent(3, currentAni.getDelaySum(0, 15), 1, false); obj.sq_PlaySound("JADE_KAMAITACHI_SWIRL"); break; case 2: local totalDamage = receiveData.readDword(); local addNumber = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/jadekamaitachi/renewal/finalattack_finish_attackdummy.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 96)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.sq_PlaySound("JADE_KAMAITACHI_FINISH"); break; case 3: local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/jadekamaitachi/renewal/finalattack_31.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); obj.setTimeEvent(4, currentAni.getDelaySum(0, 1), 1, false); // obj.sq_PlaySound("JADE_KAMAITACHI_FIRELOOP_END"); break; } break; case SKILL_THBYKK_SWORDOFKUSANAGI: switch(subtype){ case 1: sqrChr.getVar("SwordOfKusanagi").push_obj_vector(obj); local totalDamage = receiveData.readDword(); local totalDamage_loop = receiveData.readDword(); local lifeTime = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage); obj.getVar("custom").setInt(1, totalDamage_loop); obj.getVar("custom").setInt(2, lifeTime); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: local totalDamage = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/swordofkusanagi/kkboom_00.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 113)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/swordofkusanagi/kkboomfront_04.ani", 0, 1, 0); sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/swordofkusanagi/kkboomback_07.ani", 0, -1, 0); break; case 3:// local totalDamage = receiveData.readDword(); local totalDamage_exp = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage); obj.getVar("custom").setInt(1, totalDamage_exp); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/swordofkusanagi/ff_body.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); break; case 4: local totalDamage = receiveData.readDword(); local totalDamage_exp = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage); obj.getVar("custom").setInt(1, totalDamage_exp); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/swordofkusanagi/kuskyroads_01.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 116)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local speed = 600.0; if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed); else sq_SetVelocity(obj, 0, -speed); sq_SetVelocity(obj, 2, -speed); sq_SetCustomRotate(obj, sq_ToRadian(-45.0)); break; case 5: local totalDamage = receiveData.readDword(); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/swordofkusanagi/kkfinish_01.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 115)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/swordofkusanagi/kkfinish_01_background_01.ani"; local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath, 0, 0, 0); sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); local currentAni = obj.getCurrentAnimation(); obj.setTimeEvent(4, currentAni.getDelaySum(0, 8), 1, false); obj.setTimeEvent(5, currentAni.getDelaySum(0, 16), 1, false); break; } break; case SKILL_THBYKK_SHURIKENIMPROVE: switch(subtype){ case 1: local attackIndex = receiveData.readDword(); local aniPath = "equipment/character/thief/weapon/chakraweapon/chakraweaponc2/throwchakraweapon.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(100001,sq_CreateAnimation("","passiveobject/6_thief_bykk/kunoichi_bykk/animation/throwchakraweapon/chakraweaponlineeff.ani"),true); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); obj.sq_SetMoveParticle("particle/kunoichi_bykk/chakraweapon.ptl", 0.0, 0.0); break; case 2: local attackIndex = receiveData.readDword(); local aniPath = "equipment/character/thief/weapon/chakraweapon/chakraweaponc2/throwchakraweapon.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(100001,sq_CreateAnimation("","passiveobject/6_thief_bykk/kunoichi_bykk/animation/throwchakraweapon/chakraweaponlineeff.ani"),true); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); obj.sq_SetMoveParticle("particle/kunoichi_bykk/chakraweaponjump1.ptl", 0.0, 0.0); sq_SetCustomRotate(obj, sq_ToRadian(-45.0)); break; } break; case SKILL_THBYKK_FIREHIDE: sqrChr.getVar("firehide").push_obj_vector(obj); obj.setMapFollowParent(sqrChr); obj.setMapFollowType(1); local sub = receiveData.readDword(); obj.getVar("custom").setInt(0, sub); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case SKILL_THBYKK_KURVEJADE: obj.setMapFollowParent(sqrChr); obj.setMapFollowType(1); switch(subtype){ case 1: sqrChr.getVar("kurvejadeFireObj").push_obj_vector(obj); obj.getVar("custom").setInt(0, 0); obj.getVar("custom").setInt(1, 0); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: sqrChr.getVar("kurvejadeDarkObj").push_obj_vector(obj); obj.getVar("custom").setInt(0, 1); obj.getVar("custom").setInt(1, 0); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 3: sqrChr.getVar("kurvejadeLightObj").push_obj_vector(obj); obj.getVar("custom").setInt(0, 2); obj.getVar("custom").setInt(1, 0); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_THBYKK_LEAVETRACE: local state = receiveData.readDword(); local startFrameIndex = receiveData.readDword(); local ninjutsuPhase = receiveData.readDword(); local speedRate = receiveData.readDword(); local bonusRate = receiveData.readDword(); local set_1 = receiveData.readDword(); local set_2 = receiveData.readDword(); obj.getVar("custom").setInt(0, state); obj.getVar("custom").setInt(1, startFrameIndex); obj.getVar("custom").setInt(2, ninjutsuPhase); obj.getVar("custom").setInt(3, speedRate); obj.getVar("custom").setInt(4, bonusRate); obj.getVar("custom").setInt(5, set_1); obj.getVar("custom").setInt(6, set_2); switch(subtype){ case SKILL_THBYKK_BIGKUNAI: bonusRate = bonusRate.tofloat() / 100.0; local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_BIGKUNAI, -1, 0, bonusRate); local totalDamage_exp = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_BIGKUNAI, -1, 1, bonusRate); local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_THBYKK_BIGKUNAI); local hitTime = sq_GetLevelData(sqrChr, SKILL_THBYKK_BIGKUNAI, 2, skillLevel); local lifeTime = sq_GetLevelData(sqrChr, SKILL_THBYKK_BIGKUNAI, 3, skillLevel); local sizeRate = sq_GetLevelData(sqrChr, SKILL_THBYKK_BIGKUNAI, 4, skillLevel); local addSizeRate = sq_GetLevelData(sqrChr, SKILL_THBYKK_BIGKUNAI, 5, skillLevel); sizeRate = sizeRate + addSizeRate * ninjutsuPhase; local isBlue = 0, moveBool = 0; if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; obj.getVar("custom").setInt(7, totalDamage); obj.getVar("custom").setInt(8, totalDamage_exp); obj.getVar("custom").setInt(9, hitTime); obj.getVar("custom").setInt(10, lifeTime); obj.getVar("custom").setInt(11, sizeRate); obj.getVar("custom").setInt(12, isBlue); obj.getVar("custom").setInt(13, moveBool); break; case SKILL_THBYKK_ILUSIONSHURIKEN: bonusRate = bonusRate.tofloat() / 100.0; local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_ILUSIONSHURIKEN, -1, 0, bonusRate); local reboundCount = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_ILUSIONSHURIKEN, -1, 4, 1.0) + 100; local isBlue = 0; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; obj.getVar("custom").setInt(7, totalDamage); obj.getVar("custom").setInt(8, reboundCount); obj.getVar("custom").setInt(9, isBlue); break; case SKILL_THBYKK_FLAMETORNADO: bonusRate = bonusRate.tofloat() / 100.0; local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMETORNADO, -1, 0, bonusRate); local totalDamage_exp = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMETORNADO, -1, 1, bonusRate); local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_THBYKK_FLAMETORNADO); local hitTime = sq_GetLevelData(sqrChr, SKILL_THBYKK_FLAMETORNADO, 3, skillLevel); local lifeTime = sq_GetLevelData(sqrChr, SKILL_THBYKK_FLAMETORNADO, 2, skillLevel); local sizeRate = sq_GetLevelData(sqrChr, SKILL_THBYKK_FLAMETORNADO, 6, skillLevel); local addSizeRate = sq_GetLevelData(sqrChr, SKILL_THBYKK_FLAMETORNADO, 5, skillLevel); local addExpSizeRate = sq_GetLevelData(sqrChr, SKILL_THBYKK_FLAMETORNADO, 7, skillLevel); sizeRate = sizeRate + addSizeRate * ninjutsuPhase; local range = sq_GetIntData(sqrChr, SKILL_THBYKK_FLAMETORNADO, 2); local addRangeRate = sq_GetLevelData(sqrChr, SKILL_THBYKK_FLAMETORNADO, 9, skillLevel); range = range * (100 + addRangeRate * ninjutsuPhase) / 100; local expSizeRate = sizeRate + addExpSizeRate * ninjutsuPhase; local isBlue = 0; if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; obj.getVar("custom").setInt(7, totalDamage); obj.getVar("custom").setInt(8, totalDamage_exp); obj.getVar("custom").setInt(9, hitTime); obj.getVar("custom").setInt(10, lifeTime); obj.getVar("custom").setInt(11, sizeRate); obj.getVar("custom").setInt(12, range); obj.getVar("custom").setInt(13, expSizeRate); obj.getVar("custom").setInt(14, isBlue); break; case SKILL_THBYKK_SKYROADS: bonusRate = bonusRate.tofloat() / 100.0; local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_SKYROADS, -1, 0, bonusRate); local sizeRate = sq_GetIntData(sqrChr, SKILL_THBYKK_SKYROADS, 13); if(ninjutsuPhase > 1) sizeRate = sq_GetIntData(sqrChr, SKILL_THBYKK_SKYROADS, 12 + ninjutsuPhase); local isBlue = 0; if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; obj.getVar("custom").setInt(7, totalDamage); obj.getVar("custom").setInt(8, sizeRate); obj.getVar("custom").setInt(9, isBlue); local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_SKYROADS, -1, 1, bonusRate); obj.getVar("custom").setInt(10, totalDamage); local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_SKYROADS, -1, 2, bonusRate); local totalDamage_exp = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_SKYROADS, -1, 3, bonusRate); local sizeRate = sq_GetIntData(sqrChr, SKILL_THBYKK_SKYROADS, 13); if(ninjutsuPhase > 1) sizeRate = sq_GetIntData(sqrChr, SKILL_THBYKK_SKYROADS, 12 + ninjutsuPhase); local xPos = sq_GetDistancePos(sq_GetXPos(obj), sq_GetDirection(obj), 225); local zPos = sq_GetZPos(obj); local isTalisman = 0; obj.getVar("custom").setInt(11, totalDamage); obj.getVar("custom").setInt(12, totalDamage_exp); obj.getVar("custom").setInt(13, sizeRate); obj.getVar("custom").setInt(14, xPos); obj.getVar("custom").setInt(15, zPos); obj.getVar("custom").setInt(16, isTalisman); break; case SKILL_THBYKK_GASOLINEFIRE: bonusRate = bonusRate.tofloat() / 100.0; local totalDamage_shockwave = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 0, bonusRate); local totalDamage_ball = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 1, bonusRate); local totalDamage_ballexp = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 2, bonusRate); local totalDamage_disexp = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_GASOLINEFIRE, -1, 9, bonusRate); local sizeRate = sq_GetIntData(sqrChr, SKILL_THBYKK_GASOLINEFIRE, 4); if(ninjutsuPhase > 1) sizeRate = sq_GetIntData(sqrChr, SKILL_THBYKK_GASOLINEFIRE, 3 + ninjutsuPhase); local sockwaveSizeRate = sq_GetIntData(sqrChr, SKILL_THBYKK_GASOLINEFIRE, 0); local isTalisman = 0; obj.getVar("custom").setInt(7, totalDamage_shockwave); obj.getVar("custom").setInt(8, totalDamage_ball); obj.getVar("custom").setInt(9, totalDamage_ballexp); obj.getVar("custom").setInt(10, totalDamage_disexp); obj.getVar("custom").setInt(11, sizeRate); obj.getVar("custom").setInt(12, sockwaveSizeRate); obj.getVar("custom").setInt(13, isTalisman); break; case SKILL_THBYKK_FLAMEFLOWER: bonusRate = bonusRate.tofloat() / 100.0; local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEFLOWER, -1, 0, bonusRate); local totalDamage_loop = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEFLOWER, -1, 1, 1.0); local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_THBYKK_FLAMEFLOWER); local lifeTime = sq_GetLevelData(sqrChr, SKILL_THBYKK_FLAMEFLOWER, 4, skillLevel) * 100 / speedRate; local hitTime = sq_GetLevelData(sqrChr, SKILL_THBYKK_FLAMEFLOWER, 2, skillLevel) * 100 / speedRate; obj.getVar("custom").setInt(7, totalDamage); obj.getVar("custom").setInt(8, totalDamage_loop); obj.getVar("custom").setInt(9, lifeTime); obj.getVar("custom").setInt(10, hitTime); local totalDamage_exp = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_FLAMEFLOWER, -1, 5, bonusRate); local sizeRate = sq_GetIntData(sqrChr, SKILL_THBYKK_FLAMEFLOWER, 13) / 10; local isBlue = 0; if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; obj.getVar("custom").setInt(11, totalDamage_exp); obj.getVar("custom").setInt(12, sizeRate); obj.getVar("custom").setInt(13, isBlue); break; case SKILL_THBYKK_DOOMFIELD: bonusRate = bonusRate.tofloat() / 100.0; local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_DOOMFIELD, -1, 0, bonusRate); local sizeRate = 100; if(sq_GetSkillLevel(sqrChr, SKILL_THBYKK_DOOMFIELD) >= 9) sizeRate = 120; local isBlue = 0; if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; obj.getVar("custom").setInt(7, totalDamage); obj.getVar("custom").setInt(8, sizeRate); obj.getVar("custom").setInt(9, isBlue); local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_DOOMFIELD, -1, 4, bonusRate); local totalDamage_exp = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_DOOMFIELD, -1, 1, bonusRate); obj.getVar("custom").setInt(10, totalDamage); obj.getVar("custom").setInt(11, totalDamage_exp); local bonusRateGet = 1.0; if(sq_GetSkillLevel(sqrChr, SKILL_THBYKK_DOOMFIELD) >= 6) bonusRateGet = 1.1; local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_DOOMFIELD, -1, 9, bonusRate * bonusRateGet); obj.getVar("custom").setInt(12, totalDamage); local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_DOOMFIELD, -1, 2, bonusRate); local totalDamage_exp = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_DOOMFIELD, -1, 3, bonusRate); obj.getVar("custom").setInt(13, totalDamage); obj.getVar("custom").setInt(14, totalDamage_exp); local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_THBYKK_DOOMFIELD); obj.getVar("custom").setInt(15, skillLevel); break; case SKILL_THBYKK_FUUMASHURIKEN: bonusRate = bonusRate.tofloat() / 100.0; local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_FUUMASHURIKEN, -1, 0, bonusRate); local hitMax = sq_GetIntData(sqrChr, SKILL_THBYKK_FUUMASHURIKEN, 13); obj.getVar("custom").setInt(7, totalDamage); obj.getVar("custom").setInt(8, hitMax); local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_FUUMASHURIKEN, -1, 1, bonusRate); local totalDamage_exp = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_FUUMASHURIKEN, -1, 2, bonusRate); local hitMax = sq_GetIntData(sqrChr, SKILL_THBYKK_FUUMASHURIKEN, 20); local sizeRate = sq_GetIntData(sqrChr, SKILL_THBYKK_FUUMASHURIKEN, 31); if(ninjutsuPhase <= 3) sizeRate = sizeRate * sq_GetIntData(sqrChr, SKILL_THBYKK_FUUMASHURIKEN, 32) / 100; else if(ninjutsuPhase > 3) sizeRate = sizeRate * sq_GetIntData(sqrChr, SKILL_THBYKK_FUUMASHURIKEN, 33) / 100; local sizeRate_shuriken = 100; local isBlue = 0; if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_SWORDOFKUSANAGI_BUFF)) isBlue = 1; obj.getVar("custom").setInt(9, totalDamage); obj.getVar("custom").setInt(10, totalDamage_exp); obj.getVar("custom").setInt(11, hitMax); obj.getVar("custom").setInt(12, sizeRate); obj.getVar("custom").setInt(13, sizeRate_shuriken); obj.getVar("custom").setInt(14, isBlue); local totalDamage_exp = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_FUUMASHURIKEN, -1, 2, bonusRate); local sizeRate = sq_GetIntData(sqrChr, SKILL_THBYKK_FUUMASHURIKEN, 31); local isTalisman = 0; if(isTalisman > 1){ sizeRate = sizeRate * 130 / 100; } obj.getVar("custom").setInt(15, totalDamage_exp); obj.getVar("custom").setInt(16, sizeRate); break; case SKILL_THBYKK_YAMATAOROCHI: bonusRate = bonusRate.tofloat() / 100.0; local totalDamage_loop = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_YAMATAOROCHI, -1, 1, bonusRate); local lifeTime = sq_GetIntData(sqrChr, SKILL_THBYKK_YAMATAOROCHI, 3) local sizeRate = 100; if(ninjutsuPhase > 0){ switch(ninjutsuPhase){ case 4: case 5: case 6: lifeTime = lifeTime * (110) / 100; break; } } local isTalisman = 0; if(isTalisman > 0) sizeRate = 120; obj.getVar("custom").setInt(7, totalDamage_loop); obj.getVar("custom").setInt(8, lifeTime); obj.getVar("custom").setInt(9, sizeRate); obj.getVar("custom").setInt(10, isTalisman); local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_YAMATAOROCHI, -1, 0, bonusRate); local totalDamage_loop = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_YAMATAOROCHI, -1, 1, bonusRate); local hitMax = sq_GetIntData(sqrChr, SKILL_THBYKK_YAMATAOROCHI, 1); local sizeRate = sq_GetIntData(sqrChr, SKILL_THBYKK_YAMATAOROCHI, 15); obj.getVar("custom").setInt(11, totalDamage); obj.getVar("custom").setInt(12, totalDamage_loop); obj.getVar("custom").setInt(13, hitMax); obj.getVar("custom").setInt(14, sizeRate); local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_YAMATAOROCHI, -1, 2, bonusRate); local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_THBYKK_YAMATAOROCHI); local lifeTime = sq_GetLevelData(sqrChr, SKILL_THBYKK_YAMATAOROCHI, 3, skillLevel); if(ninjutsuPhase > 0){ switch(ninjutsuPhase){ case 1: case 2: case 3: local addRate = sq_GetLevelData(sqrChr, SKILL_THBYKK_YAMATAOROCHI, 4, skillLevel); lifeTime = lifeTime * (100 + addRate) / 100; break; case 4: case 5: case 6: local addRate = sq_GetLevelData(sqrChr, SKILL_THBYKK_YAMATAOROCHI, 4, skillLevel); lifeTime = lifeTime * (100 + addRate) / 100; break; } } local sizeRate = 100; local kurv_skillLevel = sq_GetSkillLevel(sqrChr, SKILL_THBYKK_KURVEJADE); if(kurv_skillLevel > 0) sizeRate = sizeRate + sq_GetLevelData(sqrChr, SKILL_THBYKK_KURVEJADE, 7, kurv_skillLevel) * 60 / 100; obj.getVar("custom").setInt(15, totalDamage); obj.getVar("custom").setInt(16, lifeTime); obj.getVar("custom").setInt(17, sizeRate); break; case SKILL_THBYKK_AMATERAS: bonusRate = bonusRate.tofloat() / 100.0; local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_AMATERAS, -1, 0, bonusRate); local totalDamage_laser = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_AMATERAS, -1, 1, bonusRate); local laserMax = sqrChr.sq_GetBonusRateWithPassive(SKILL_THBYKK_AMATERAS, -1, 2, 1.0) + 100; local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_THBYKK_AMATERAS); if(ninjutsuPhase > 0){ switch(ninjutsuPhase){ case 1: case 2: case 3: local addRate = sq_GetLevelData(sqrChr, SKILL_THBYKK_YAMATAOROCHI, 6, skillLevel); totalDamage = totalDamage * (100 + addRate) / 100; totalDamage_laser = totalDamage_laser * (100 + addRate) / 100; break; case 4: case 5: case 6: local addRate = sq_GetLevelData(sqrChr, SKILL_THBYKK_YAMATAOROCHI, 9, skillLevel); totalDamage = totalDamage * (100 + addRate) / 100; totalDamage_laser = totalDamage_laser * (100 + addRate) / 100; break; } } local range = sq_GetIntData(sqrChr, SKILL_THBYKK_AMATERAS, 7); obj.getVar("custom").setInt(7, totalDamage); obj.getVar("custom").setInt(8, totalDamage_laser); obj.getVar("custom").setInt(9, laserMax); obj.getVar("custom").setInt(10, range); break; } obj.addSetStatePacket(20 + state, null, STATE_PRIORITY_AUTO, false, ""); break; case SKILL_THBYKK_DEITIESREBIRTH: switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local speedRate = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage); obj.getVar("custom").setInt(1, sizeRate); obj.getVar("custom").setInt(2, speedRate); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/deitiesrebirth/avatardashstart_00.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(speedRate.tofloat()); break; case 2: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local speedRate = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage); obj.getVar("custom").setInt(1, sizeRate); obj.getVar("custom").setInt(2, speedRate); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/deitiesrebirth/deitiesrebirthattacka_44.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); totalDamage = totalDamage * 6 / 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 67)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(speedRate.tofloat()); obj.sq_PlaySound("DEITIES_REBIRTH_FIRELOOP"); break; case 3: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local speedRate = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage); obj.getVar("custom").setInt(1, sizeRate); obj.getVar("custom").setInt(2, speedRate); local aniPath = "passiveobject/6_thief_bykk/kunoichi_bykk/animation/deitiesrebirth/deitiesrebirthattackb_00.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); totalDamage = totalDamage * 70 / 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 66)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(speedRate.tofloat()); sq_SetMyShake(obj, 20, 150); createOnlyDrawObjectEX_Theif_bykk(obj,"passiveobject/6_thief_bykk/kunoichi_bykk/animation/deitiesrebirth/deitiesrebirthattackbbottom_00.ani",true,sq_GetDirection(obj),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM,sizeRate,sizeRate); if(sizeRate > 100){ sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } break; } break; case SKILL_THBYKK_FIREMARK: switch(subtype){ case 1: local rangeNear = receiveData.readDword(); local totalDamageNear = receiveData.readDword(); local totalDamageExpNear = receiveData.readDword(); local hitTimeNear = receiveData.readDword(); local lifeTimeNear = receiveData.readDword(); local rangeFar = receiveData.readDword(); local totalDamageFar = receiveData.readDword(); local totalDamageExpFar = receiveData.readDword(); local hitTimeFar = receiveData.readDword(); local lifeTimeFar = receiveData.readDword(); obj.getVar("custom").setInt(0, rangeNear); obj.getVar("custom").setInt(1, totalDamageNear); obj.getVar("custom").setInt(2, totalDamageExpNear); obj.getVar("custom").setInt(3, hitTimeNear); obj.getVar("custom").setInt(4, lifeTimeNear); obj.getVar("custom").setInt(5, rangeFar); obj.getVar("custom").setInt(6, totalDamageFar); obj.getVar("custom").setInt(7, totalDamageExpFar); obj.getVar("custom").setInt(8, hitTimeFar); obj.getVar("custom").setInt(9, lifeTimeFar); local currentAni = obj.getCurrentAnimation(); sq_AddAttackBox(currentAni, -rangeFar, -rangeFar / 2, -20, rangeFar * 2, rangeFar * 2, 320); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 130)); sq_SetCurrentAttackeDamageAct(sq_GetCurrentAttackInfo(obj), 0); sq_SetCurrentDirection(obj, ENUM_DIRECTION_RIGHT); obj.setTimeEvent(1, 100, 1, false); break; case 2: case 3: local totalDamage = receiveData.readDword(); local totalDamage_exp = receiveData.readDword(); local hitTime = receiveData.readDword(); local lifeTime = receiveData.readDword(); local group = receiveData.readDword(); local uniqueId = receiveData.readDword(); local targetObj = sq_GetObject(obj, group, uniqueId); if(targetObj && targetObj.getState() != STATE_DIE){ obj.getVar("tar").clear_obj_vector(); obj.getVar("tar").push_obj_vector(targetObj); sq_moveWithParent(targetObj, obj); obj.getVar("custom").setInt(1, totalDamage); obj.getVar("custom").setInt(2, totalDamage_exp); obj.getVar("custom").setInt(3, hitTime); obj.getVar("custom").setInt(4, lifeTime); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); } break; } break; case 255: switch(subtype){ case 1: local group = receiveData.readDword(); local uniqueId = receiveData.readDword(); local time = receiveData.readDword(); local damage = receiveData.readDword(); local targetObj = sq_GetObject(obj, group, uniqueId); if(targetObj && targetObj.getState() != STATE_DIE){ local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); activeObj.getVar("markofFlameObj").clear_obj_vector(); activeObj.getVar("markofFlameObj").push_obj_vector(obj); obj.getVar("tar").clear_obj_vector(); obj.getVar("tar").push_obj_vector(activeObj); sq_moveWithParent(activeObj, obj); obj.getVar("custom").setInt(0, group); obj.getVar("custom").setInt(1, uniqueId); local count = time / 500; obj.getVar("custom").setInt(2, count); obj.getVar("time").setInt(0, time); obj.getVar("damage").setInt(0, damage); obj.getVar("damage").setInt(1, damage); if(damage > 0){ obj.setTimeEvent(1, 500, count, false); } } break; case 2: local group = receiveData.readDword(); local uniqueId = receiveData.readDword(); local totalDamage = receiveData.readDword(); local targetObj = sq_GetObject(obj, group, uniqueId); if(targetObj && targetObj.getState() != STATE_DIE){ obj.getVar("tar").clear_obj_vector(); obj.getVar("tar").push_obj_vector(targetObj); sq_moveWithParent(targetObj, obj); local ani = sq_CreateAnimation("","common/commoneffect/animation/decreaseeffect/reactionburn_00.ani"); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 131)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.setTimeEvent(2, 250, 1, false); } break;// } break; } break; case 4: break; } }