3140 lines
135 KiB
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;
|
|
}
|
|
|