Rindro-Sqr/user/114.66.45.221/8_thief_4.c

3140 lines
135 KiB
C

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