function onTimeEvent_po_atswordman_bykk_kak(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: switch(skillIndex){ case 88: switch(timeEventIndex){ case 1: obj.resetHitObjectList(); break; } break; case 34: switch(timeEventIndex){ case 1: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; } break; } break; case 1: switch(skillIndex){ case SKILL_SWORDMASTER_BYKK_ATFLASH://瞬影三絕斬 break; case SKILL_SWORDMASTER_BYKK_BLADESOUL://斬魂術 break; case SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE://極 · 馭劍術 (破劍陣) switch(timeEventIndex){ case 1: local rangeX = 300, rangeY = 150;//距離 local apdPath = "character/atswordman/1_swordmaster/breaksworddance/ap_breaksworddance.nut"; local objectManager = obj.getObjectManager();//得到對象管理器 for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ local object = objectManager.getCollisionObject(i);//得到控制類對象 if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= rangeX && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= rangeY){ local activeObj = sq_GetCNRDObjectToActiveObject(object);//活動類 if(!sqrChr.getVar("breaksworddance_tar").is_obj_vector(activeObj)) sqrChr.getVar("breaksworddance_tar").push_obj_vector(activeObj); // local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, sqrChr, -1, false, apdPath, true); // sq_HoldAndDelayDie(activeObj, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL ,AddAppendage); } } break; case 2: local size = sqrChr.getVar("breaksworddance_tar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = sqrChr.getVar("breaksworddance_tar").get_obj_vector(i); if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2); } } break; } break; case SKILL_SWORDMASTER_BYKK_CHANGESWORD://魔劍降臨 switch(timeEventIndex){ case 1: local targetObj = obj.getVar("custom").get_obj_vector(0); if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetZPos(obj)); break; case 2: obj.resetHitObjectList(); break; case 10://判斷距離 local disX = sq_Abs(sq_GetXPos(obj) - sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-50)); local disY = sq_Abs(sq_GetYPos(obj) - sq_GetYPos(sqrChr)); local disZ = sq_Abs(sq_GetZPos(obj) - sq_GetZPos(sqrChr) - 30); local direction = sqrChr.getDirection(); if(obj.getDirection() != direction) obj.setDirection(direction); if(disX > 10){ local baseM = 30; local moveX = disX / baseM + 2; if(sq_GetXPos(obj) > sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-50)) sq_setCurrentAxisPos(obj, 0, sq_GetXPos(obj) - moveX); else sq_setCurrentAxisPos(obj, 0, sq_GetXPos(obj) + moveX); } if(disY > 10){ local baseM = 30; local moveY = disY / baseM + 1; if(sq_GetYPos(obj) > sq_GetYPos(sqrChr)) sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) - moveY); else sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) + moveY); } if(disZ > 5){ local baseM = 30; local moveZ = disZ / baseM + 1; if(sq_GetZPos(obj) - 30 > sq_GetZPos(sqrChr)) sq_setCurrentAxisPos(obj, 2, sq_GetZPos(obj) - moveZ); else sq_setCurrentAxisPos(obj, 2, sq_GetZPos(obj) + moveZ); } if(disX <= 10 && disY <= 10 && disZ <= 5){ obj.stopTimeEvent(10); obj.setTimeEvent(11,300,-1,false); } break; case 11://移動 local disX = sq_Abs(sq_GetXPos(obj) - sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-50)); local disY = sq_Abs(sq_GetYPos(obj) - sq_GetYPos(sqrChr)); local disZ = sq_Abs(sq_GetZPos(obj) - sq_GetZPos(sqrChr) - 30); if(disX > 10 || disY > 10 || disZ > 5){ obj.stopTimeEvent(11); obj.setTimeEvent(10,15,-1,false); } break; case 100: local element = obj.getVar("changeSword").getInt(11); obj.addSetStatePacket(element + 100, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_SWORDMASTER_BYKK_DEVILSLASH://惡即斬 break; case SKILL_SWORDMASTER_BYKK_DRAGONUPEX://裂刃天衝 switch(timeEventIndex){ case 1: local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(7, 17); local hitMax = obj.getVar("custom").getInt(11); obj.setTimeEvent(2, delay / hitMax, hitMax - 1, false); break; case 2: obj.resetHitObjectList(); break; } break; case SKILL_SWORDMASTER_BYKK_EXCALIBUR://雷鳴千軍破 switch(timeEventIndex){ case 1: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_SWORDMASTER_BYKK_FUSIONBLADE://極詣 · 馭劍術 : 聚魔劍 switch(timeEventIndex){ case 1: obj.setTimeEvent(2, obj.getVar("custom").getInt(12) / 30, 30, false); break; case 2: local moveX = sq_GetDistancePos(sq_GetXPos(sqrChr), sqrChr.getDirection(), 250); local v = sq_GetUniformVelocity(obj.getVar("custom").getInt(20), moveX, timeEventCount, 30); local vz = sq_GetUniformVelocity(obj.getVar("custom").getInt(21), 75, timeEventCount, 30); sq_setCurrentAxisPos(obj, 0, v); sq_setCurrentAxisPos(obj, 2, vz); if(timeEventCount >= 30) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_SWORDMASTER_BYKK_HALFMOON://破軍旋舞斬 switch(timeEventIndex){ case 1: obj.resetHitObjectList(); break; } break; case SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE://幻劍術 switch(timeEventIndex){ case 1: local v = sq_GetUniformVelocity(0, obj.getVar("custom").getInt(13), timeEventCount, 24); local dstX = sq_GetDistancePos(obj.getVar("custom").getInt(12), obj.getDirection(), v); sq_setCurrentAxisPos(obj, 0, dstX); break; } break; case SKILL_SWORDMASTER_BYKK_JACKCATCH://極 · 馭劍術 (幻劍陣) switch(timeEventIndex){ case 1: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; case 3: local vx = sq_GetUniformVelocity(obj.getVar("custom").getInt(14), obj.getVar("custom").getInt(12), timeEventCount, 20); local vy = sq_GetUniformVelocity(obj.getVar("custom").getInt(15), obj.getVar("custom").getInt(13), timeEventCount, 20); local vz = sq_GetUniformVelocity(300, 60, timeEventCount, 20); sq_setCurrentAxisPos(obj, 0, vx); sq_setCurrentAxisPos(obj, 1, vy); sq_setCurrentAxisPos(obj, 2, vz); if(timeEventCount >= 20) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; case 4: local rangeX = 250, rangeY = 75;//距離 local apdPath = "character/atswordman/1_swordmaster/jackcatch/ap_jackcatch.nut"; local objectManager = obj.getObjectManager();//得到對象管理器 for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ local object = objectManager.getCollisionObject(i);//得到控制類對象 if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= rangeX && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= rangeY && !CNSquirrelAppendage.sq_IsAppendAppendage(object, apdPath)){ local activeObj = sq_GetCNRDObjectToActiveObject(object);//活動類 //if(sqrChr.getVar("jackCatch_tar").get_obj_vector_size() < 1) sqrChr.getVar("jackCatch_tar").clear_obj_vector(); if(!sqrChr.getVar("jackCatch_tar").is_obj_vector(activeObj)) sqrChr.getVar("jackCatch_tar").push_obj_vector(activeObj); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, sqrChr, -1, false, apdPath, true); sq_HoldAndDelayDie(activeObj, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage); sq_MoveToAppendageForce(activeObj, obj, activeObj, 0, 0, 100, 300, true, AddAppendage); } } break; } break; case SKILL_SWORDMASTER_BYKK_LAEVATEINN://誓約之劍 : 雷沃汀 break; case SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT://颶風魔劍 switch(timeEventIndex){ case 1: obj.resetHitObjectList(); if(timeEventCount >= obj.getVar("custom").getInt(13) - 1) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: sq_SetSpeedToMoveParticle(obj,0,30); break; case 3: obj.getVar("move").setBool(0, true); obj.setTimeEvent(1, 100, obj.getVar("custom").getInt(13) - 1, false); obj.sq_SetMoveParticle("particle/shadowpuppet.ptl", 0.0, 0.0); sq_SetSpeedToMoveParticle(obj, 0, 300); break; } break; case SKILL_SWORDMASTER_BYKK_MAGICSWORDUP://魔劍奧義 break; case SKILL_SWORDMASTER_BYKK_THUNDERSLASH://穿雲破空劍 break; case SKILL_SWORDMASTER_BYKK_TIMESLASH://極 · 馭劍術 (時空斬) break; case SKILL_SWORDMASTER_BYKK_UPPERSLASH://升龍劍 break; case SKILL_SWORDMASTER_BYKK_WEAPONCOMBO://帝國劍術 break; } break; case 2: switch(skillIndex){ case SKILL_DEMONSLAYER_BLOODDANCE://血飲狂舞 break; case SKILL_DEMONSLAYER_BLOODDEMONSWORD://汲血魔劍 break; case SKILL_DEMONSLAYER_BLOODOCTOPUSSWORD://蛇舞血輪劍 switch(timeEventIndex){ case 1: obj.resetHitObjectList(); break; } break; case SKILL_DEMONSLAYER_BLOODSEAL://喚魔 : 封之印 switch(timeEventIndex){ case 1: local srcZ = obj.getVar("move").getInt(10); local vz = sq_GetUniformVelocity(srcZ, 0, timeEventCount, 20); sq_setCurrentAxisPos(obj, 2, vz); if(timeEventCount >= 20) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); break; case 3: obj.resetHitObjectList(); break; case 4: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; case 5: local targetObj = obj.getVar("target").get_obj_vector(0); if(targetObj) sq_SendHitObjectPacket(obj, targetObj, 0, 0, sq_GetObjectHeight(targetObj) / 2); else sq_SendDestroyPacketPassiveObject(obj); break; case 6: local lifeTime2 = obj.getVar("custom").getInt(21); local powerDamage = obj.getVar("custom").getInt(22); local sizeRate = obj.getVar("custom").getInt(23); local hitTime2 = obj.getVar("custom").getInt(24); cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 1, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_BLOODSEAL, 3, lifeTime2, powerDamage, sizeRate, hitTime2, 0, 0, 0, 0, 0); break; } break; case SKILL_DEMONSLAYER_CLAWBLADE://蛇腹劍 : 纏 switch(timeEventIndex){ case 1: local targetObj = obj.getVar("targetObj").get_obj_vector(0); if(targetObj) sq_SendHitObjectPacket(obj, targetObj, 0, 0, sq_GetObjectHeight(targetObj) / 2); else sq_SendDestroyPacketPassiveObject(obj); if(timeEventCount >= obj.getVar("custom").getInt(11) - 1) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_DEMONSLAYER_DARKSTRIKE://喚魔 : 塔莫斯之襲 switch(timeEventIndex){ case 1: obj.resetHitObjectList(); if(timeEventCount == obj.getVar("custom").getInt(11) - 1) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: sq_SendDestroyPacketPassiveObject(obj); break; } break; case SKILL_DEMONSLAYER_GIGABLADE://空絕斬 : 仟刃 break; case SKILL_DEMONSLAYER_GIGASLASH://空絕斬 : 地裂 break; case SKILL_DEMONSLAYER_GREED://貪欲之燔祭 break; case SKILL_DEMONSLAYER_GROUPDANCE://群魔亂舞 switch(timeEventIndex){ case 1: obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: obj.resetHitObjectList(); if(timeEventCount == 40){ sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 89)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(21) * 3); } break; case 3: local targetObj = obj.getVar("target").get_obj_vector(0); if(targetObj){ local movex = sq_GetUniformVelocity(obj.getVar("move").getInt(10), obj.getVar("move").getInt(12), timeEventCount, 8); local movey = sq_GetUniformVelocity(obj.getVar("move").getInt(11), sq_GetYPos(targetObj), timeEventCount, 8); sq_setCurrentAxisPos(obj, 0, movex); sq_setCurrentAxisPos(obj, 1, movey); // if(timeEventCount == 8){ // if((sq_GetXPos(obj) > sq_GetXPos(targetObj) && obj.getDirection() == ENUM_DIRECTION_RIGHT) || (sq_GetXPos(obj) < sq_GetXPos(targetObj) && obj.getDirection() == ENUM_DIRECTION_LEFT)) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); // } } break; case 4: obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_DEMONSLAYER_PHNOM://喚魔 : 逆天之普諾 break; case SKILL_DEMONSLAYER_PIKESWORD://蛇腹劍 : 刺 break; case SKILL_DEMONSLAYER_PREDATORGALOA://貪食者迦羅亞 switch(timeEventIndex){ case 1: local targetObj = obj.getVar("tar").get_obj_vector(0); if(targetObj){ local vx = sq_GetUniformVelocity(obj.getVar("move").getInt(10), sq_GetXPos(targetObj), timeEventCount, 20); local vy = sq_GetUniformVelocity(obj.getVar("move").getInt(11), sq_GetYPos(targetObj), timeEventCount, 20); local vz = sq_GetUniformVelocity(obj.getVar("move").getInt(12), sq_GetZPos(targetObj) + sq_GetObjectHeight(targetObj) / 2, timeEventCount, 20); sq_setCurrentAxisPos(obj, 0, vx); sq_setCurrentAxisPos(obj, 1, vy); sq_setCurrentAxisPos(obj, 2, vz); } else{ obj.stopTimeEvent(1); obj.addSetStatePacket(26, null, STATE_PRIORITY_AUTO, false, ""); } if(timeEventCount == 20) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: obj.getVar("predatorgaloa_boss").clear_obj_vector(); obj.getVar("predatorgaloa_named").clear_obj_vector(); obj.getVar("predatorgaloa_normal").clear_obj_vector(); obj.getVar("predatorgaloa_target").clear_obj_vector(); local range = obj.getVar("custom").getInt(19); local objectManager = obj.getObjectManager();//得到對象管理器 for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){ local object = objectManager.getCollisionObject(i); if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj)){ local activeObj = sq_GetCNRDObjectToActiveObject(object); if(!activeObj.getVar("predatorgaloa").getBool(0)){ if(sq_IsBoss(activeObj)) obj.getVar("predatorgaloa_boss").push_obj_vector(activeObj); else if(sq_IsNamed(activeObj)) obj.getVar("predatorgaloa_named").push_obj_vector(activeObj); else obj.getVar("predatorgaloa_normal").push_obj_vector(activeObj); } } } if(obj.getVar("predatorgaloa_boss").get_obj_vector_size() > 0){ for(local i = 0; i < obj.getVar("predatorgaloa_boss").get_obj_vector_size(); i++){ local targetObj = obj.getVar("predatorgaloa_boss").get_obj_vector(i); if(targetObj) obj.getVar("predatorgaloa_target").push_obj_vector(targetObj); } } if(obj.getVar("predatorgaloa_named").get_obj_vector_size() > 0){ for(local i = 0; i < obj.getVar("predatorgaloa_named").get_obj_vector_size(); i++){ local targetObj = obj.getVar("predatorgaloa_named").get_obj_vector(i); if(targetObj) obj.getVar("predatorgaloa_target").push_obj_vector(targetObj); } } if(obj.getVar("predatorgaloa_normal").get_obj_vector_size() > 0){ for(local i = 0; i < obj.getVar("predatorgaloa_normal").get_obj_vector_size(); i++){ local targetObj = obj.getVar("predatorgaloa_normal").get_obj_vector(i); if(targetObj) obj.getVar("predatorgaloa_target").push_obj_vector(targetObj); } } if(obj.getVar("predatorgaloa_target").get_obj_vector_size() > 0){ for(local i = 0; i < obj.getVar("predatorgaloa_target").get_obj_vector_size(); i++){ local targetObj = sq_GetCNRDObjectToActiveObject(obj.getVar("predatorgaloa_target").get_obj_vector(i)); if(targetObj){ targetObj.getVar("predatorgaloa").setBool(0, true); obj.getVar().setBool(0, true); obj.getVar("tar").clear_obj_vector(); obj.getVar("tar").push_obj_vector(targetObj); obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; } } } else obj.setTimeEvent(2, obj.getVar("custom").getInt(13), 1, false); break; case 3: local targetObj = obj.getVar("tar").get_obj_vector(0); if(targetObj && obj.getVar().getBool(0)){ sq_SendHitObjectPacket(obj, targetObj, 0, 0, sq_GetObjectHeight(targetObj) / 2); local pooledObj = sq_AddDrawOnlyAniFromParent(targetObj, "passiveobject/atswordman_bykk/demonslayer/animation/atpredatorgaloa/g_eater_atk_01.ani", 0, 0, sq_GetObjectHeight(targetObj) / 2); sq_SetCustomRotate(pooledObj, sq_ToRadian(sq_getRandom(0,360).tofloat())); } if(timeEventCount == obj.getVar("custom").getInt(13)){ if(obj.getVar("custom").getInt(20) == obj.getVar("custom").getInt(12)){ obj.addSetStatePacket(25, null, STATE_PRIORITY_AUTO, false, ""); break; } else obj.getVar("custom").setInt(20, obj.getVar("custom").getInt(20) + 1); local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); if(activeObj) activeObj.getVar("predatorgaloa").setBool(0, false); obj.setTimeEvent(4, 300, 1, false); } break; case 4: obj.getVar().setBool(0, false); obj.addSetStatePacket(26, null, STATE_PRIORITY_AUTO, false, ""); break; case 5: obj.addSetStatePacket(25, null, STATE_PRIORITY_AUTO, false, ""); break; case 6: local vx = sq_GetUniformVelocity(obj.getVar("move").getInt(10), sq_GetXPos(sqrChr), timeEventCount, 20); local vy = sq_GetUniformVelocity(obj.getVar("move").getInt(11), sq_GetYPos(sqrChr), timeEventCount, 20); local vz = sq_GetUniformVelocity(obj.getVar("move").getInt(12), sq_GetZPos(sqrChr) + sq_GetObjectHeight(sqrChr) / 2, timeEventCount, 20); sq_setCurrentAxisPos(obj, 0, vx); sq_setCurrentAxisPos(obj, 1, vy); sq_setCurrentAxisPos(obj, 2, vz); if(timeEventCount == 20) obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_DEMONSLAYER_RAGNAROK://弒神劍 : 諸神獻祭 switch(timeEventIndex){ case 1: obj.resetHitObjectList(); break; case 2: local size = sqrChr.getVar("ragnarok_target").get_obj_vector_size(); if(size > 0){ local totalDamage = obj.getVar("custom").getInt(12); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 82)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); for(local i = 0; i < size; i++){ local targetObj = sqrChr.getVar("ragnarok_target").get_obj_vector(i); if(targetObj) sq_SendHitObjectPacket(obj, targetObj, 0, 0, sq_GetObjectHeight(targetObj) / 2); } } } break; case SKILL_DEMONSLAYER_SNAKEDANCE://蛇腹劍 : 舞 break; case SKILL_DEMONSLAYER_ULTIMATEBLADE://弒神劍 : 極 switch(timeEventIndex){ case 1: switch(subtype){ case 1: createOnlyDrawObject_AtSwordMan_bykk(obj,"passiveobject/atswordman_bykk/demonslayer/animation/atultimateblade/downfloor_crack03.ani",true,obj.getDirection(), sq_GetXPos(obj), sq_GetYPos(obj), 0, ENUM_DRAWLAYER_BOTTOM); break; case 2: createOnlyDrawObject_AtSwordMan_bykk(obj,"passiveobject/atswordman_bykk/demonslayer/animation/atultimateblade/finishdownfloor_crack03.ani",true,obj.getDirection(), sq_GetXPos(obj), sq_GetYPos(obj), 0, ENUM_DRAWLAYER_BOTTOM); break; } break; } break; case SKILL_DEMONSLAYER_WHIPSWORDBAL://蛇腹劍 : 破 break; case SKILL_DEMONSLAYER_WILDWHIP://蛇腹劍 : 滅 break; } break; case 3://vagabond switch(skillIndex){ case SKILL_VAGABOND_BIGJANG://如來神掌 switch(timeEventIndex){ case 1: local srcX = obj.getVar("custom").getInt(10); local MoveX = obj.getVar("custom").getInt(12); local v = sq_GetUniformVelocity(0, MoveX, timeEventCount, 20); local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); sq_setCurrentAxisPos(obj, 0, dstX); //print("test:"+timeEventCount); if(timeEventCount >= 20) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); //if(timeEventCount >= 19 && obj.getVar("custom").getInt(14) > 0) sq_SendDestroyPacketPassiveObject(obj); break; case 2: //print("test:"+timeEventCount); local srcX = obj.getVar("custom").getInt(10); local srcZ = obj.getVar("custom").getInt(11); local MoveX = obj.getVar("custom").getInt(12); local v = sq_GetUniformVelocity(0, MoveX, timeEventCount, 20); local vz = sq_GetUniformVelocity(srcZ, 0, timeEventCount, 20); local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); sq_setCurrentAxisPos(obj, 0, dstX); sq_setCurrentAxisPos(obj, 2, vz); //if(timeEventCount >= 19) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_VAGABOND_BLASTSWORD://回天璇鳴劍 break; case SKILL_VAGABOND_COALBAN://遊龍掌 switch(timeEventIndex){ case 1: sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/vagabond/animation/atcoalban/tail.ani", 0, 0, 0); break; } break; case SKILL_VAGABOND_COMETBLADE://花舞仟魂殺 switch(timeEventIndex){ case 1: local sub = obj.getVar("custom").getInt(10); local sizeRateMin = obj.getVar("custom").getInt(11); local sizeRateMax = obj.getVar("custom").getInt(12); local rotateSetMin = obj.getVar("custom").getInt(13); local rotateSetMax = obj.getVar("custom").getInt(14); local createMax = obj.getVar("custom").getInt(15); local sizeRate = sq_getRandom(sizeRateMin, sizeRateMax), rotateSet = sq_getRandom(rotateSetMin, rotateSetMax); cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, sq_getRandom(-450, 450), 0, 0, obj.getDirection(), 3, SKILL_VAGABOND_COMETBLADE, 3, sub, sizeRate, rotateSet, 0, 0, 0, 0, 0, 0); if(timeEventCount >= createMax) sq_SendDestroyPacketPassiveObject(obj); break; } break; case SKILL_VAGABOND_DUALWEAPON://兩儀功 break; case SKILL_VAGABOND_EARTHPRESSURE://碎巖裂地掌 break; case SKILL_VAGABOND_FATALFLOWER://花開寒影 switch(timeEventIndex){ case 1: obj.resetHitObjectList(); break; } break; case SKILL_VAGABOND_FISTOFEXPLOSION://湮烈掌 switch(timeEventIndex){ case 1: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: local targetObj = obj.getVar("targetObj").get_obj_vector(0); if(targetObj) sq_SendHitObjectPacket(obj, targetObj, 0, 0, sq_GetObjectHeight(targetObj) / 2); else sq_SendDestroyPacketPassiveObject(obj); } break; case SKILL_VAGABOND_FLOWERBLADEDANCE://蓮花劍舞 break; case SKILL_VAGABOND_GONEWITHTHEPETAL://落英驚鴻掌 switch(timeEventIndex){ case 1: //print(timeEventCount); local targetObj = obj.getVar("targetObj").get_obj_vector(0); if(targetObj){ local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); sq_SendHitObjectPacket(obj, activeObj, 0, 0, sq_GetObjectHeight(activeObj) / 2); } if(timeEventCount >= obj.getVar("custom").getInt(11)) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_VAGABOND_HERMITTRIPLESTEP://櫻花劫 break; case SKILL_VAGABOND_INHALATION://四象引 break; case SKILL_VAGABOND_MOONLIGHTSLASH://飛花逐月 break; case SKILL_VAGABOND_NEARBLOW://圓舞斬 break; case SKILL_VAGABOND_OVERBLOWSLASH://亂花葬 switch(timeEventIndex){ case 1: local pAni = obj.getCurrentAnimation(); local delaySum = pAni.getDelaySum(15,19); local hitMax = obj.getVar("custom").getInt(11); obj.setTimeEvent(2, delaySum / (hitMax + 1), hitMax, true); break; case 2: obj.resetHitObjectList(); break; case 3: local totalDamage = obj.getVar("custom").getInt(10); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 55)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; } break; case SKILL_VAGABOND_RAPIDSTEP://一花渡江 break; case SKILL_VAGABOND_REVOLVINGSWORD://輪回劍 break; case SKILL_VAGABOND_SOARCUT://櫻落斬 break; case SKILL_VAGABOND_THREESIDE://三連斬 switch(subtype){ case 1: break; case 2: break; } break; case SKILL_VAGABOND_ZWEIVOLTAGEEX://嘯空十字斬 switch(timeEventIndex){ case 1: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); local attackObj = sqrChr.getVar("zwei").get_obj_vector(0); if(attackObj){ local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); } break; } break; } break; case 4: switch(skillIndex){ case SKILL_DARKEMPLER_BLACKMIRROR://魔鏡幻影陣 switch(timeEventIndex){ case 0: sq_SendDestroyPacketPassiveObject(obj); break; case 1: local count = obj.getVar().getInt(0); if(obj.getVar().getInt(0) > 1) obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); else{ obj.getVar().setInt(0,count + 1); obj.resetHitObjectList(); obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); } break; case 2: obj.setTimeEvent(3,20,3,true); break; case 3: local offsetX = [],offsetY = []; switch(timeEventCount){ case 1: offsetX = [-150,150]; offsetY = [-10,-10]; break; case 2: offsetX = [-200,200,-120,120,-45,45]; offsetY = [5,5,35,35,-50,-50]; break; case 3: offsetX = [-45,45,-90,90,0]; offsetY = [50,50,10,10,1]; break; } local totalDamage2 = obj.getVar("custom").getInt(7); for(local i = 0; i < offsetX.len(); i++){ local sub = obj.getVar("sub").getInt(0); cearteSkillPassiveObj_AtSwordMan_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,offsetX[i],offsetY[i],0,ENUM_DIRECTION_RIGHT,4,SKILL_DARKEMPLER_BLACKMIRROR,2,totalDamage2,sub,0,0,0,0,0,0,1); obj.getVar("sub").setInt(0, sub + 1); } if(timeEventCount == 3){ sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 2)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), 0); obj.setTimeEvent(4,100,-1,false); } break; case 4: local disX = sq_Abs(sq_GetXPos(obj) - sq_GetXPos(sqrChr)); local disY = sq_Abs(sq_GetYPos(obj) - sq_GetYPos(sqrChr)); if(disX <= 200 && disY <= 60 && !CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/4_darktempler/blackmirror/ap_blackmirror.nut")){ local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, sqrChr, SKILL_DARKEMPLER_BLACKMIRROR, false, "character/atswordman/4_darktempler/blackmirror/ap_blackmirror.nut", true); local time = obj.getVar("custom").getInt(3); local count = obj.getVar("custom").getInt(4); local decreaseRate = obj.getVar("custom").getInt(5); AddAppendage.sq_SetValidTime(time); AddAppendage.getVar("custom").setInt(0,decreaseRate); AddAppendage.getVar("custom").setInt(1,count); AddAppendage.getVar("custom").setInt(2,0); } break; } break; case SKILL_DARKEMPLER_BUCKSHOT://釋魂飛彈 switch(timeEventIndex){ case 1: obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; case 3: //local id = obj.getVar("custom").getInt(0);print(id); local targetObj = obj.getVar().get_obj_vector(0); if(targetObj && targetObj.getState() != STATE_DIE){ if(sq_Abs(sq_GetXPos(targetObj) - sq_GetXPos(obj)) <= 5 && sq_Abs(sq_GetYPos(targetObj) - sq_GetYPos(obj)) <= 5){ obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); return; } local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); local currentT = 3 * timeEventCount; local currentSpeedRate = 1.0 ; local defaultRoundTime = 400; local radius = sq_GetUniformVelocity(sq_Abs(obj.getVar("custom").getInt(3) - sq_GetXPos(activeObj)), 0, currentT, defaultRoundTime / 4); local base100Angle = 0; if(obj.getVar("custom").getInt(1) < 5) base100Angle = 18000; local baseX = activeObj.getXPos(); local baseZ = activeObj.getYPos(); local current100Angle = (base100Angle + (36000 * currentSpeedRate * currentT / defaultRoundTime)) % 36000; local angle = (current100Angle.tofloat() / 100.0); local disMovLen = radius * sq_CosTable(angle.tointeger()); local mov_x = sq_GetDistancePos(baseX, obj.getVar("custom").getInt(2), disMovLen.tointeger()); local balance = obj.getVar("custom").getFloat(0); if(sq_Abs(obj.getVar("custom").getInt(3) - sq_GetXPos(activeObj)) <= 350) balance = balance * 700.0 / sq_Abs(obj.getVar("custom").getInt(3) - sq_GetXPos(activeObj)).tofloat(); local axisMagnifyRate = radius * balance; local upMovLen = radius * sq_SinTable(angle.tointeger()) * axisMagnifyRate / 100; local mov_y = baseZ + upMovLen.tointeger(); local mov_z = sq_GetUniformVelocity(obj.getVar("custom").getInt(5), sq_GetZPos(activeObj) + sq_GetHeightObject(targetObj) / 2, currentT, defaultRoundTime / 4); sq_setCurrentAxisPos(obj, 0, mov_x); sq_setCurrentAxisPos(obj, 1, mov_y); sq_setCurrentAxisPos(obj, 2, mov_z); local flash_xpos1 = sq_GetXPos(obj),flash_ypos1 = sq_GetYPos(obj),flash_zpos1 = sq_GetZPos(obj); local flash_xpos2 = obj.getVar("Xpos").getInt(2),flash_ypos2 = obj.getVar("Ypos").getInt(2),flash_zpos2 = obj.getVar("Zpos").getInt(2); local flash_xpos3 = obj.getVar("Xpos").getInt(3),flash_ypos3 = obj.getVar("Ypos").getInt(3),flash_zpos3 = obj.getVar("Zpos").getInt(3); local flash_xpos4 = obj.getVar("Xpos").getInt(4),flash_ypos4 = obj.getVar("Ypos").getInt(4),flash_zpos4 = obj.getVar("Zpos").getInt(4); local flash_xpos5 = obj.getVar("Xpos").getInt(5),flash_ypos5 = obj.getVar("Ypos").getInt(5),flash_zpos5 = obj.getVar("Zpos").getInt(5); local flash_xpos6 = obj.getVar("Xpos").getInt(6),flash_ypos6 = obj.getVar("Ypos").getInt(6),flash_zpos6 = obj.getVar("Zpos").getInt(6); local flash_xpos7 = obj.getVar("Xpos").getInt(7),flash_ypos7 = obj.getVar("Ypos").getInt(7),flash_zpos7 = obj.getVar("Zpos").getInt(7); local flash_xpos8 = obj.getVar("Xpos").getInt(8),flash_ypos8 = obj.getVar("Ypos").getInt(8),flash_zpos8 = obj.getVar("Zpos").getInt(8); local create_number = obj.getVar("custom").getInt(4); if(timeEventCount >= 1 && create_number >= 1){ createOnlyDrawObjectEX_AtSwordMan_bykk(obj,"passiveobject/atswordman_bykk/darktempler/animation/atbuckshot/buckshot_laser_10.ani",true,obj.getDirection(),flash_xpos1,flash_ypos1,flash_zpos1,ENUM_DRAWLAYER_NORMAL,120,120); } if(timeEventCount >= 2 && create_number >= 2){ createOnlyDrawObjectEX_AtSwordMan_bykk(obj,"passiveobject/atswordman_bykk/darktempler/animation/atbuckshot/buckshot_laser_10.ani",true,obj.getDirection(),flash_xpos2,flash_ypos2,flash_zpos2,ENUM_DRAWLAYER_NORMAL,110,110); } if(timeEventCount >= 3 && create_number >= 3){ createOnlyDrawObjectEX_AtSwordMan_bykk(obj,"passiveobject/atswordman_bykk/darktempler/animation/atbuckshot/buckshot_laser_10.ani",true,obj.getDirection(),flash_xpos3,flash_ypos3,flash_zpos3,ENUM_DRAWLAYER_NORMAL,100,100); } if(timeEventCount >= 4 && create_number >= 4){ createOnlyDrawObjectEX_AtSwordMan_bykk(obj,"passiveobject/atswordman_bykk/darktempler/animation/atbuckshot/buckshot_laser_10.ani",true,obj.getDirection(),flash_xpos4,flash_ypos4,flash_zpos4,ENUM_DRAWLAYER_NORMAL,95,95); } if(timeEventCount >= 5 && create_number >= 5){ createOnlyDrawObjectEX_AtSwordMan_bykk(obj,"passiveobject/atswordman_bykk/darktempler/animation/atbuckshot/buckshot_laser_10.ani",true,obj.getDirection(),flash_xpos5,flash_ypos5,flash_zpos5,ENUM_DRAWLAYER_NORMAL,90,90); } if(timeEventCount >= 6 && create_number >= 6){ createOnlyDrawObjectEX_AtSwordMan_bykk(obj,"passiveobject/atswordman_bykk/darktempler/animation/atbuckshot/buckshot_laser_10.ani",true,obj.getDirection(),flash_xpos6,flash_ypos6,flash_zpos6,ENUM_DRAWLAYER_NORMAL,85,85); } if(timeEventCount >= 7 && create_number >= 7){ createOnlyDrawObjectEX_AtSwordMan_bykk(obj,"passiveobject/atswordman_bykk/darktempler/animation/atbuckshot/buckshot_laser_10.ani",true,obj.getDirection(),flash_xpos7,flash_ypos7,flash_zpos7,ENUM_DRAWLAYER_NORMAL,80,80); } if(timeEventCount >= 8 && create_number >= 8){ createOnlyDrawObjectEX_AtSwordMan_bykk(obj,"passiveobject/atswordman_bykk/darktempler/animation/atbuckshot/buckshot_laser_10.ani",true,obj.getDirection(),flash_xpos8,flash_ypos8,flash_zpos8,ENUM_DRAWLAYER_NORMAL,75,75); } obj.getVar("Xpos").setInt(2,flash_xpos1);obj.getVar("Ypos").setInt(2,flash_ypos1);obj.getVar("Zpos").setInt(2,flash_zpos1); obj.getVar("Xpos").setInt(3,flash_xpos2);obj.getVar("Ypos").setInt(3,flash_ypos2);obj.getVar("Zpos").setInt(3,flash_zpos2); obj.getVar("Xpos").setInt(4,flash_xpos3);obj.getVar("Ypos").setInt(4,flash_ypos3);obj.getVar("Zpos").setInt(4,flash_zpos3); obj.getVar("Xpos").setInt(5,flash_xpos4);obj.getVar("Ypos").setInt(5,flash_ypos4);obj.getVar("Zpos").setInt(5,flash_zpos4); obj.getVar("Xpos").setInt(6,flash_xpos5);obj.getVar("Ypos").setInt(6,flash_ypos5);obj.getVar("Zpos").setInt(6,flash_zpos5); obj.getVar("Xpos").setInt(7,flash_xpos6);obj.getVar("Ypos").setInt(7,flash_ypos6);obj.getVar("Zpos").setInt(7,flash_zpos6); obj.getVar("Xpos").setInt(8,flash_xpos7);obj.getVar("Ypos").setInt(8,flash_ypos7);obj.getVar("Zpos").setInt(8,flash_zpos7); } else sq_SendDestroyPacketPassiveObject(obj); break; case 10: local loadSlot = sqrChr.sq_GetSkillLoad(65);//SKILL_DARKEMPLER_BUCKSHOT if(!loadSlot) return; local enemyMax = obj.getVar("custom").getInt(2); local soulnum = obj.getVar("custom").getInt(3); local number = obj.getVar("custom").getInt(20); local targetObj = obj.getVar("targetObj").get_obj_vector(number); if(targetObj){ local totalDamage = obj.getVar("custom").getInt(0); local direction = obj.getVar("custom").getInt(1); local group = sq_GetGroup(targetObj);//組 local uniqueId = sq_GetUniqueId(targetObj);//唯一ID cearteSkillPassiveObj_AtSwordMan_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,sq_GetZPos(sqrChr)+60,obj.getDirection(),4,SKILL_DARKEMPLER_BUCKSHOT,1,totalDamage,sq_getRandom(1,6),direction,group,uniqueId,1,0,0,1); darkEmpler_Evolve(sqrChr,0,soulnum); } if(timeEventCount % enemyMax == 0) obj.getVar("custom").setInt(20, number + 1); break; case 11: sq_SendDestroyPacketPassiveObject(obj); break; } break; case SKILL_DARKEMPLER_DEADLYCAPE://暗影囚殺 break; case SKILL_DARKEMPLER_DESTROYER://暗影盛宴 break; case SKILL_DARKEMPLER_DEUSEXRAY://天罰死光 break; case SKILL_DARKEMPLER_DOOMSDAY://末日殺戮 switch(timeEventIndex){ case 1: if(timeEventCount >= obj.getVar("custom").getInt(10) - 1) sq_SendDestroyPacketPassiveObject(obj); obj.resetHitObjectList(); break; } break; case SKILL_DARKEMPLER_EVOLVE://汲魂之力 break; case SKILL_DARKEMPLER_HIDDENBLADE://影刃 break; case SKILL_DARKEMPLER_IMMOLATION://死亡獻祭 switch(timeEventIndex){ case 1: obj.resetHitObjectList(); break; case 2: local totalDamage = obj.getVar("custom").getInt(10); cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,-1,73,obj.getDirection(),4,SKILL_DARKEMPLER_IMMOLATION,1,totalDamage,0,0,0,0,0,0,0,0); break; } break; case SKILL_DARKEMPLER_JIHAD://天罰之劍 switch(timeEventIndex){ case 1: createOnlyDrawObject_AtSwordMan_bykk(obj,"passiveobject/atswordman_bykk/darktempler/animation/atjihad/jihad_attackground_crack.ani",true,obj.getDirection(), sq_GetXPos(obj), sq_GetYPos(obj), sq_GetZPos(obj), ENUM_DRAWLAYER_BOTTOM); sq_SetMyShake(obj, 11, 720); break; } break; case SKILL_DARKEMPLER_LACERTHORNS://暗影綻放:死亡荊棘 switch(timeEventIndex){ case 1: cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_LACERTHORNS,2,0,0,0,0,0,0,0,0,0); break; } break; case SKILL_DARKEMPLER_LOYALSLAVE://靈魂傀儡 switch(timeEventIndex){ case 1: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: darkEmpler_Evolve(sqrChr, 1, 0); break; } break; case SKILL_DARKEMPLER_MADNESS://釋魂狂怒 switch(timeEventIndex){ case 10: local pAni = obj.getCurrentAnimation();//得到ani local currentT = 3 * timeEventCount;//當前時間 local currentSpeedRate = 1.0 ; local defaultRoundTime = 240 / obj.getVar("custom").getInt(10) * 100; local baseX = obj.getVar("custom").getInt(15); local baseZ = obj.getVar("custom").getInt(16); local radius = sq_GetUniformVelocity(sq_Abs(obj.getVar("custom").getInt(13) - baseX), 0, currentT, defaultRoundTime / 4); local base100Angle = 0; if(obj.getVar("custom").getInt(11) < 5) base100Angle = 18000; local current100Angle = (base100Angle + (36000 * currentSpeedRate * currentT / defaultRoundTime)) % 36000; local angle = (current100Angle.tofloat() / 100.0); local disMovLen = radius * sq_CosTable(angle.tointeger()); local mov_x = sq_GetDistancePos(baseX, obj.getVar("custom").getInt(12), disMovLen.tointeger()); local balance = obj.getVar("custom").getFloat(0); if(sq_Abs(obj.getVar("custom").getInt(13) - baseX) <= 350) balance = balance * 700.0 / sq_Abs(obj.getVar("custom").getInt(13) - baseX).tofloat(); local axisMagnifyRate = radius * balance; local upMovLen = radius * sq_SinTable(angle.tointeger()) * axisMagnifyRate / 100; local mov_y = baseZ + upMovLen.tointeger(); local mov_z = sq_GetUniformVelocity(obj.getVar("custom").getInt(14), 50, currentT, defaultRoundTime / 4); sq_setCurrentAxisPos(obj, 0, mov_x); sq_setCurrentAxisPos(obj, 1, mov_y); sq_setCurrentAxisPos(obj, 2, mov_z); break; case 11: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; case 12: obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_DARKEMPLER_PUNISHMENT://神罰·滅世裁決 break; case SKILL_DARKEMPLER_SCAFFOLD://暗影禁錮 switch(timeEventIndex){ case 1: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_DARKEMPLER_SHADOWBINDING://暗影纏襲 switch(timeEventIndex){ case 1: local sizeRate = obj.getVar("custom").getInt(3); local countMax = 220 * sizeRate / 100 / 50; obj.setTimeEvent(3,30,countMax,true); obj.setTimeEvent(2,30*countMax+300,1,false); break; case 2: local size = obj.getVar("targetObj").get_obj_vector_size(); for(local i = 0; i < size; i++){ local activeObj = sq_GetCNRDObjectToActiveObject(obj.getVar("targetObj").get_obj_vector(i)); if(activeObj){ CNSquirrelAppendage.sq_RemoveAppendage(activeObj, "character/atswordman/4_darktempler/shadowbinding/ap_shadowbinding.nut"); } } size = sqrChr.getVar("binding").get_obj_vector_size(); for(local i = 0; i < size; i++){ local colObj = sq_GetCNRDObjectToCollisionObject(sqrChr.getVar("binding").get_obj_vector(i)); if(colObj) colObj.setValid(false); } obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; case 3: //create obj local totalDamage = obj.getVar("custom").getInt(2); cearteSkillPassiveObj_AtSwordMan_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,timeEventCount * 50,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_SHADOWBINDING,3,totalDamage,0,0,0,0,0,0,0,1); break; case 4: local id = obj.getVar("custom").getInt(0); local object = sq_GetObjectByObjectId(sqrChr, id); if(object){sq_SendHitObjectPacket(obj,object,0,0,0);} else{sq_SendDestroyPacketPassiveObject(obj);} break; case 5: break; case 6: break; } break; case SKILL_DARKEMPLER_SHADOWHARVEST://暗影旋渦 switch(timeEventIndex){ case 1: obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: obj.resetHitObjectList(); break; } break; case SKILL_DARKEMPLER_SHADOWLANCER://暗影之矛 if(timeEventIndex == 1) obj.resetHitObjectList(); break; case SKILL_DARKEMPLER_SHADOWPUPPET://魅影暗魂斬 switch(timeEventIndex){ case 1: sq_SendDestroyPacketPassiveObject(obj); break; case 2: obj.resetHitObjectList(); break; } break; case SKILL_DARKEMPLER_SOULDRAIN://靈魂攝取 switch(timeEventIndex){ case 1: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: if(!sqrChr) break; local totalDamage = obj.getVar("custom").getInt(1); local hitMax = obj.getVar("custom").getInt(3); local range = obj.getVar("custom").getInt(4); local number = obj.getVar("custom").getInt(6); local objectManager = obj.getObjectManager(); local objectNumber = objectManager.getCollisionObjectNumber(); for(local i = 0; i < objectNumber; i++){ local object = objectManager.getCollisionObject(i); if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) <= range && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= range / 2 && isFrontObject(obj,object)){ local activeObj = sq_GetCNRDObjectToActiveObject(object); obj.getVar("targetObj").push_obj_vector(activeObj); local hitCount = activeObj.getVar("hit").getInt(number); local uniqueId = sq_GetObjectId(activeObj); if(hitCount >= hitMax) break; if(hitCount == 0){ cearteSkillPassiveObj_AtSwordMan_bykk(sqrChr,activeObj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,sq_GetObjectHeight(activeObj) / 2,obj.getDirection(),4,SKILL_DARKEMPLER_SOULDRAIN,2,totalDamage,uniqueId,0,0,0,0,0,0,0); activeObj.getVar("hit").setInt(number, hitCount + 1); } else if(hitCount <= hitMax - 2){ cearteSkillPassiveObj_AtSwordMan_bykk(sqrChr,activeObj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,sq_GetObjectHeight(activeObj) / 2,obj.getDirection(),4,SKILL_DARKEMPLER_SOULDRAIN,3,totalDamage,uniqueId,0,0,0,0,0,0,0); activeObj.getVar("hit").setInt(number, hitCount + 1); } else{ cearteSkillPassiveObj_AtSwordMan_bykk(sqrChr,activeObj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,sq_GetObjectHeight(activeObj) / 2,obj.getDirection(),4,SKILL_DARKEMPLER_SOULDRAIN,4,totalDamage,uniqueId,0,0,0,0,0,0,0); activeObj.getVar("hit").setInt(number, hitCount + 1); } } } break; case 3: local uniqueId = obj.getVar("custom").getInt(0); local object = sq_GetObjectByObjectId(obj, uniqueId); if(object) sq_SendHitObjectPacket(obj,object,0,0,sq_GetObjectHeight(object) / 2); break; } break; case SKILL_DARKEMPLER_STARFALL://魔影轟殺 switch(timeEventIndex){ case 1: sq_AddDrawOnlyAniFromParent(obj,"passiveobject/atswordman_bykk/darktempler/animation/atstarfall/stone3.ani",0,-1,0); break; } break; } break; } } function onAttack_po_atswordman_bykk_kak(obj, damager, boundingBox, isStuck) { if(!obj) return; //enableClearDeadEnemies(obj, damager); 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(job == 1 && obj.getVar("atkbool").getBool(0) == false){ obj.getVar("atkbool").setBool(0, true); if(sq_GetSkillLevel(sqrChr, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE) && skillIndex != SKILL_SWORDMASTER_BYKK_CHANGESWORD && skillIndex != SKILL_SWORDMASTER_BYKK_MAGICSWORDUP){ if(skillIndex == SKILL_SWORDMASTER_BYKK_WEAPONCOMBO) isChangeSword_Attack(sqrChr,damager,boundingBox); else isMagicSwordUp_Attack(sqrChr,damager,boundingBox); } } switch(job){ case 0: switch(skillIndex){ case 34: if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ sqrChr.getVar("executionTar").push_obj_vector(damager); local apdPath = "character/atswordman/execution/ap_execution.nut"; local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, sqrChr, -1, false, apdPath, true); sq_HoldAndDelayDie(damager, sqrChr, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); } break; } break; case 1: switch(skillIndex){ case SKILL_SWORDMASTER_BYKK_ATFLASH://瞬影三絕斬 break; case SKILL_SWORDMASTER_BYKK_BLADESOUL://斬魂術 break; case SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE://極 · 馭劍術 (破劍陣) break; case SKILL_SWORDMASTER_BYKK_CHANGESWORD://魔劍降臨 break; case SKILL_SWORDMASTER_BYKK_DEVILSLASH://惡即斬 break; case SKILL_SWORDMASTER_BYKK_DRAGONUPEX://裂刃天衝 break; case SKILL_SWORDMASTER_BYKK_EXCALIBUR://雷鳴千軍破 switch(subtype){ case 3: if(isStuck) break; if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ if(!sqrChr || sqrChr.getState() == STATE_DIE) break; local apdPath = "character/atswordman/1_swordmaster/bluntmastery/ap_bluntmastery.nut"; if(!CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, apdPath)){ local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, apdPath, true); local bufftime = sq_GetLevelData(sqrChr, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 14, sq_GetSkillLevel(sqrChr, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY)); addAppendage.sq_SetValidTime(bufftime); addAppendage.setEnableIsBuff(true); addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(sqrChr), SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, sq_GetSkillLevel(sqrChr, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY)); CNSquirrelAppendage.sq_Append(addAppendage, sqrChr, obj, true); } } break; } break; case SKILL_SWORDMASTER_BYKK_FUSIONBLADE://極詣 · 馭劍術 : 聚魔劍 break; case SKILL_SWORDMASTER_BYKK_HALFMOON://破軍旋舞斬 break; case SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE://幻劍術 switch(subtype){ case 1: case 2: if(damager.isObjectType(OBJECTTYPE_ACTIVE) && state == 20){ obj.stopTimeEvent(1); obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); } break; case 3: if(isStuck) break; if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ if(!sqrChr || sqrChr.getState() == STATE_DIE) break; local apdPath = "character/atswordman/1_swordmaster/bluntmastery/ap_bluntmastery.nut"; if(!CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, apdPath)){ local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, apdPath, true); local bufftime = sq_GetLevelData(sqrChr, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 14, sq_GetSkillLevel(sqrChr, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY)); addAppendage.sq_SetValidTime(bufftime); addAppendage.setEnableIsBuff(true); addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(sqrChr), SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, sq_GetSkillLevel(sqrChr, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY)); CNSquirrelAppendage.sq_Append(addAppendage, sqrChr, obj, true); } } break; } break; case SKILL_SWORDMASTER_BYKK_JACKCATCH://極 · 馭劍術 (幻劍陣) break; case SKILL_SWORDMASTER_BYKK_LAEVATEINN://誓約之劍 : 雷沃汀 break; case SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT://颶風魔劍 switch(subtype){ case 1: if(obj.getVar("move").getBool(0)){ obj.getVar("move").setBool(0, false); obj.setTimeEvent(2, 80, 1, false); } break; } break; case SKILL_SWORDMASTER_BYKK_MAGICSWORDUP://魔劍奧義 break; case SKILL_SWORDMASTER_BYKK_THUNDERSLASH://穿雲破空劍 switch(subtype){ case 1: if(isStuck) break; if(!sqrChr || sqrChr.getState() == STATE_DIE) break; if(damager.isObjectType(OBJECTTYPE_ACTIVE) && sqrChr.getWeaponSubType() == 2 && sq_GetSkillLevel(sqrChr, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY) > 0){ local apdPath = "character/atswordman/1_swordmaster/bluntmastery/ap_bluntmastery.nut"; if(!CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, apdPath)){ local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, apdPath, true); local bufftime = sq_GetLevelData(sqrChr, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, 14, sq_GetSkillLevel(sqrChr, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY)); addAppendage.sq_SetValidTime(bufftime); addAppendage.setEnableIsBuff(true); addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(sqrChr), SKILL_SWORDMASTER_BYKK_BLUNTMASTERY, sq_GetSkillLevel(sqrChr, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY)); CNSquirrelAppendage.sq_Append(addAppendage, sqrChr, obj, true); } } break; } break; case SKILL_SWORDMASTER_BYKK_TIMESLASH://極 · 馭劍術 (時空斬) break; case SKILL_SWORDMASTER_BYKK_UPPERSLASH://升龍劍 break; case SKILL_SWORDMASTER_BYKK_WEAPONCOMBO://帝國劍術 break; } break; case 2: switch(skillIndex){ case SKILL_DEMONSLAYER_BLOODDANCE://血飲狂舞 break; case SKILL_DEMONSLAYER_BLOODDEMONSWORD://汲血魔劍 break; case SKILL_DEMONSLAYER_BLOODOCTOPUSSWORD://蛇舞血輪劍 break; case SKILL_DEMONSLAYER_BLOODSEAL://喚魔 : 封之印 switch(subtype){ case 1: if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ local movespeedRate = obj.getVar("custom").getInt(15); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, true, "character/atswordman/2_demonslayer/bloodseal/ap_bloodseal.nut", true); AddAppendage.sq_SetValidTime(obj.getVar("custom").getInt(10)); local change_appendage = AddAppendage.sq_getChangeStatus("bloodseal"); if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("bloodseal",damager, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, true, -(movespeedRate).tofloat()); } sq_BinaryStartWrite(); sq_BinaryWriteDword(2); sq_BinaryWriteDword(SKILL_DEMONSLAYER_BLOODSEAL); sq_BinaryWriteDword(2); sq_BinaryWriteDword(obj.getVar("custom").getInt(10)); sq_BinaryWriteDword(obj.getVar("custom").getInt(11)); sq_BinaryWriteDword(obj.getVar("custom").getInt(14)); sq_BinaryWriteDword(obj.getVar("custom").getInt(20)); sq_BinaryWriteDword(obj.getVar("custom").getInt(21)); sq_BinaryWriteDword(obj.getVar("custom").getInt(22)); sq_BinaryWriteDword(obj.getVar("custom").getInt(12)); sq_BinaryWriteDword(obj.getVar("custom").getInt(23)); sq_BinaryWriteDword(obj.getVar("custom").getInt(13)); sq_BinaryWriteDword(sq_GetObjectId(damager)); sq_SendCreatePassiveObjectPacketPos(obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, sq_GetXPos(damager), sq_GetYPos(damager), sq_GetObjectHeight(damager) / 2); sq_AddDrawOnlyAniFromParent(damager, "passiveobject/atswordman_bykk/demonslayer/animation/atbloodseal/bloodseal_bulletfinish_03.ani", 0, 0, sq_GetCenterZPos(boundingBox)); sq_SendDestroyPacketPassiveObject(obj); } break; } break; case SKILL_DEMONSLAYER_CLAWBLADE://蛇腹劍 : 纏 break; case SKILL_DEMONSLAYER_DARKSTRIKE://喚魔 : 塔莫斯之襲 break; case SKILL_DEMONSLAYER_GIGABLADE://空絕斬 : 仟刃 break; case SKILL_DEMONSLAYER_GIGASLASH://空絕斬 : 地裂 break; case SKILL_DEMONSLAYER_GREED://貪欲之燔祭 break; case SKILL_DEMONSLAYER_GROUPDANCE://群魔亂舞 break; case SKILL_DEMONSLAYER_PHNOM://喚魔 : 逆天之普諾 break; case SKILL_DEMONSLAYER_PIKESWORD://蛇腹劍 : 刺 break; case SKILL_DEMONSLAYER_PREDATORGALOA://貪食者迦羅亞 break; case SKILL_DEMONSLAYER_RAGNAROK://弒神劍 : 諸神獻祭 switch(subtype){ case 1:// case 2:// if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ if(!sqrChr.getVar("ragnarok_target").is_obj_vector(damager)) sqrChr.getVar("ragnarok_target").push_obj_vector(damager); if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/atswordman/2_demonslayer/ragnarok/ap_ragnarok.nut")){ local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/atswordman/2_demonslayer/ragnarok/ap_ragnarok.nut", true); sq_HoldAndDelayDie(damager, obj, true, true, true, 100, 400, ENUM_DIRECTION_NEUTRAL, AddAppendage); } } break; } break; case SKILL_DEMONSLAYER_SNAKEDANCE://蛇腹劍 : 舞 break; case SKILL_DEMONSLAYER_ULTIMATEBLADE://弒神劍 : 極 break; case SKILL_DEMONSLAYER_WHIPSWORDBAL://蛇腹劍 : 破 break; case SKILL_DEMONSLAYER_WILDWHIP://蛇腹劍 : 滅 break; } if(!sqrChr || sqrChr.getState == STATE_DIE) break; if(skillIndex != SKILL_DEMONSLAYER_DARKSTRIKE){ if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ darkStrike_Attack(sqrChr, damager); } } break; case 3://vagabond switch(skillIndex){ case SKILL_VAGABOND_BIGJANG://如來神掌 //if(subtype == 1 && state == 20){ // if(obj.getVar("custom").getInt(14) > 0) break; // obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; //} break; case SKILL_VAGABOND_BLASTSWORD://回天璇鳴劍 break; case SKILL_VAGABOND_COALBAN://遊龍掌 switch(subtype){ case 1: if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ sq_AddDrawOnlyAniFromParent(damager, "passiveobject/atswordman_bykk/vagabond/animation/atcoalban/ta_ta2.ani", 0, 0, sq_GetObjectHeight(damager) / 2); } break; } break; case SKILL_VAGABOND_COMETBLADE://花舞仟魂殺 break; case SKILL_VAGABOND_DUALWEAPON://兩儀功 break; case SKILL_VAGABOND_EARTHPRESSURE://碎巖裂地掌 break; case SKILL_VAGABOND_FATALFLOWER://花開寒影 break; case SKILL_VAGABOND_FISTOFEXPLOSION://湮烈掌 switch(subtype){ case 1: if(damager.isObjectType(OBJECTTYPE_ACTIVE) && damager.getState() != STATE_DIE){ local activeObj = sq_GetCNRDObjectToActiveObject(damager); local totalDamage = obj.getVar("custom").getInt(10); local lifeTime = obj.getVar("custom").getInt(11); local hitMax = obj.getVar("custom").getInt(12); local sub = obj.getVar("custom").getInt(13); local group = sq_GetGroup(activeObj); local uniqueId = sq_GetUniqueId(activeObj); cearteSkillPassiveObj_AtSwordMan_bykk(obj, activeObj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, sq_GetObjectHeight(activeObj) / 2, obj.getDirection(), 3, SKILL_VAGABOND_FISTOFEXPLOSION, 2, totalDamage, lifeTime, hitMax, sub, group, uniqueId, 0, 0, 0); } break; } break; case SKILL_VAGABOND_FLOWERBLADEDANCE://蓮花劍舞 break; case SKILL_VAGABOND_GONEWITHTHEPETAL://落英驚鴻掌 break; case SKILL_VAGABOND_HERMITTRIPLESTEP://櫻花劫 break; case SKILL_VAGABOND_INHALATION://四象引 break; case SKILL_VAGABOND_MOONLIGHTSLASH://飛花逐月 break; case SKILL_VAGABOND_NEARBLOW://圓舞斬 break; case SKILL_VAGABOND_OVERBLOWSLASH://亂花葬 break; case SKILL_VAGABOND_RAPIDSTEP://一花渡江 break; case SKILL_VAGABOND_REVOLVINGSWORD://輪回劍 break; case SKILL_VAGABOND_SOARCUT://櫻落斬 break; case SKILL_VAGABOND_THREESIDE://三連斬 break; case SKILL_VAGABOND_ZWEIVOLTAGEEX://嘯空十字斬 if(damager.isObjectType(OBJECTTYPE_ACTIVE) && subtype <= 2){ if(!sqrChr) break; sqrChr.getVar("zwei_tar").push_obj_vector(damager); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/atswordman/3_vagabond/zweivoltageex/ap_zweivoltageex.nut", true); sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); } break; } break; case 4: switch(skillIndex){ case SKILL_DARKEMPLER_BLACKMIRROR://魔鏡幻影陣 switch(subtype){ case 1: if(damager.isObjectType(OBJECTTYPE_ACTIVE) && !sq_IsFixture(damager) && obj.isEnemy(damager)){ local activeObj = sq_GetCNRDObjectToActiveObject(damager); if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/atswordman/4_darktempler/blackmirror/ap_blackmirrortar.nut")) return; local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/atswordman/4_darktempler/blackmirror/ap_blackmirrortar.nut", true); AddAppendage.sq_SetValidTime(4500); sq_MoveToAppendageForce(activeObj, obj, obj, 0, 0, activeObj.getZPos(), 300, true, AddAppendage); local change_appendage = AddAppendage.sq_getChangeStatus("movespeed"); if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("movespeed",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 100); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED , true, -200.0); } } break; } break; case SKILL_DARKEMPLER_BUCKSHOT://釋魂飛彈 break; case SKILL_DARKEMPLER_DEADLYCAPE://暗影囚殺 break; case SKILL_DARKEMPLER_DESTROYER://暗影盛宴 break; case SKILL_DARKEMPLER_DEUSEXRAY://天罰死光 break; case SKILL_DARKEMPLER_DOOMSDAY://末日殺戮 switch(subtype){ case 1: if(damager.isObjectType(OBJECTTYPE_ACTIVE)) sq_AddDrawOnlyAniFromParent(damager, "character/swordman/effect/animation/atdoomsday/finishhiteffect.ani", 0, 1, sq_GetHeightObject(damager) / 3); break; } break; case SKILL_DARKEMPLER_EVOLVE://汲魂之力 break; case SKILL_DARKEMPLER_HIDDENBLADE://影刃 break; case SKILL_DARKEMPLER_IMMOLATION://死亡獻祭 switch(subtype){ case 3: switch(state){ case 20: if(!damager.isObjectType(OBJECTTYPE_ACTIVE) || sq_IsFixture(damager)) break; if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/atswordman/4_darktempler/immolation/ap_immolation.nut")) break; local appendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/atswordman/4_darktempler/immolation/ap_immolation.nut", true); sq_MoveToAppendageForce(damager, obj, obj, 0, 0, damager.getZPos(), 1000, true, appendage); appendage.sq_SetValidTime(1200); break; } break; } break; case SKILL_DARKEMPLER_JIHAD://天罰之劍 break; case SKILL_DARKEMPLER_LACERTHORNS://暗影綻放:死亡荊棘 break; case SKILL_DARKEMPLER_LOYALSLAVE://靈魂傀儡 break; case SKILL_DARKEMPLER_MADNESS://釋魂狂怒 break; case SKILL_DARKEMPLER_PUNISHMENT://神罰·滅世裁決 break; case SKILL_DARKEMPLER_SCAFFOLD://暗影禁錮 switch(subtype){ case 1: if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ local totalDamage = obj.getVar("custom").getInt(1); local lifeTime = obj.getVar("custom").getInt(2); if(obj.getVar().getBool(0) == false){ obj.getVar().setBool(0, true); cearteSkillPassiveObj_AtSwordMan_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_SCAFFOLD,2,totalDamage,lifeTime,0,0,0,0,0,0,1); } local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/atswordman/4_darktempler/scaffold/ap_scaffold.nut", true); // AddAppendage.sq_SetValidTime(lifeTime + 300); AddAppendage.getAppendageInfo().setValidTime(lifeTime + 300); sq_MoveToAppendageForce(damager, obj, obj, 20, -1, 65, 300, true, AddAppendage); if(!sq_IsFixture(damager)) sq_HoldAndDelayDie(damager, obj, true, true, true, 0, 100, ENUM_DIRECTION_NEUTRAL , AddAppendage); } break; } break; case SKILL_DARKEMPLER_SHADOWBINDING://暗影纏襲 break; case SKILL_DARKEMPLER_SHADOWHARVEST://暗影旋渦 break; case SKILL_DARKEMPLER_SHADOWLANCER://暗影之矛 break; case SKILL_DARKEMPLER_SHADOWPUPPET://魅影暗魂斬 break; case SKILL_DARKEMPLER_SOULDRAIN://靈魂攝取 break; case SKILL_DARKEMPLER_STARFALL://魔影轟殺 switch(subtype){ case 1: if(state == 20) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; } break; } break; } } function onKeyFrameFlag_po_atswordman_bykk_kak(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); switch(job){ case 1: switch(skillIndex){ case SKILL_SWORDMASTER_BYKK_ATFLASH://瞬影三絕斬 break; case SKILL_SWORDMASTER_BYKK_BLADESOUL://斬魂術 break; case SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE://極 · 馭劍術 (破劍陣) break; case SKILL_SWORDMASTER_BYKK_CHANGESWORD://魔劍降臨 break; case SKILL_SWORDMASTER_BYKK_DEVILSLASH://惡即斬 switch(subtype){ case 1: obj.resetHitObjectList(); local number = flagIndex; local element = obj.getVar("custom").getInt(12); local effSet = [["character/swordman/effect/animation/atdevilslash/"],["fire/","ice/","dark/","light/","nothing/"],["slash_"],["fire_","ice_","dark_n_","light_","mu_"]]; // local pooledObj = sq_AddDrawOnlyAniFromParent(obj, effSet[0][0]+effSet[1][element]+effSet[2][0]+effSet[3][element]+number.tostring()+".ani", 0, 0, 0); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/10_atswordman_bykk/atdevilslash/newatdevilslashchargeattackeffect_00.ani", 0, 0, 0); local sizeRate = obj.getVar("custom").getInt(14); print("sizeRate = "+sizeRate); if(sizeRate > 100){ sizeRate = sizeRate.tofloat() / 100.0; local currentAni = pooledObj.getCurrentAnimation(); currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); } obj.getVar("custom").setInt(13, obj.getVar("custom").getInt(13) + 1); if(obj.getVar("custom").getInt(13) >= obj.getVar("custom").getInt(11)) sq_SendDestroyPacketPassiveObject(obj); break; } break; case SKILL_SWORDMASTER_BYKK_DRAGONUPEX://裂刃天衝 break; case SKILL_SWORDMASTER_BYKK_EXCALIBUR://雷鳴千軍破 break; case SKILL_SWORDMASTER_BYKK_FUSIONBLADE://極詣 · 馭劍術 : 聚魔劍 break; case SKILL_SWORDMASTER_BYKK_HALFMOON://破軍旋舞斬 break; case SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE://幻劍術 if(subtype == 2 && state == 21){ local totalDamage = obj.getVar("custom").getInt(15); local sizeRate = obj.getVar("custom").getInt(16); local speedRate = obj.getVar("custom").getInt(17); cearteSkillPassiveObj_AtSwordMan_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,100,0,0,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE,3,totalDamage,sizeRate,speedRate,0,0,0,0,0,1); } break; case SKILL_SWORDMASTER_BYKK_JACKCATCH://極 · 馭劍術 (幻劍陣) break; case SKILL_SWORDMASTER_BYKK_LAEVATEINN://誓約之劍 : 雷沃汀 break; case SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT://颶風魔劍 break; case SKILL_SWORDMASTER_BYKK_MAGICSWORDUP://魔劍奧義 break; case SKILL_SWORDMASTER_BYKK_THUNDERSLASH://穿雲破空劍 break; case SKILL_SWORDMASTER_BYKK_TIMESLASH://極 · 馭劍術 (時空斬) break; case SKILL_SWORDMASTER_BYKK_UPPERSLASH://升龍劍 break; case SKILL_SWORDMASTER_BYKK_WEAPONCOMBO://帝國劍術 break; } break; case 2: switch(skillIndex){ case SKILL_DEMONSLAYER_BLOODDANCE://血飲狂舞 break; case SKILL_DEMONSLAYER_BLOODDEMONSWORD://汲血魔劍 break; case SKILL_DEMONSLAYER_BLOODOCTOPUSSWORD://蛇舞血輪劍 break; case SKILL_DEMONSLAYER_BLOODSEAL://喚魔 : 封之印 break; case SKILL_DEMONSLAYER_CLAWBLADE://蛇腹劍 : 纏 break; case SKILL_DEMONSLAYER_DARKSTRIKE://喚魔 : 塔莫斯之襲 break; case SKILL_DEMONSLAYER_GIGABLADE://空絕斬 : 仟刃 break; case SKILL_DEMONSLAYER_GIGASLASH://空絕斬 : 地裂 break; case SKILL_DEMONSLAYER_GREED://貪欲之燔祭 break; case SKILL_DEMONSLAYER_GROUPDANCE://群魔亂舞 switch(subtype){ case 1: switch(flagIndex){ case 101: local count = obj.getVar("custom").getInt(20); local totalDamage = obj.getVar("custom").getInt(21); local isSub = obj.getVar("custom").getInt(22); local isSub2 = obj.getVar("custom").getInt(23); local offsetX = obj.getVar("custom").getInt(24); local offsetY = obj.getVar("custom").getInt(25); local skill_level = obj.getVar("custom").getInt(26); if(skill_level > 0){ totalDamage = totalDamage * 2; offsetY = 0; } for (local i = 0; i < count ; i++){ cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 135 + offsetX * i, offsetY, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_WHIPSWORDBAL, 1, totalDamage, isSub, isSub2, 0, 0, 0, 0, 0, 0); // if(skill_level > 0) cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 135 + offsetX * i, -40, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_WHIPSWORDBAL, 1, totalDamage, 1, isSub2, 0, 0, 0, 0, 0, 0); } break; case 201: obj.resetHitObjectList(); break; } break; } break; case SKILL_DEMONSLAYER_PHNOM://喚魔 : 逆天之普諾 break; case SKILL_DEMONSLAYER_PIKESWORD://蛇腹劍 : 刺 break; case SKILL_DEMONSLAYER_PREDATORGALOA://貪食者迦羅亞 break; case SKILL_DEMONSLAYER_RAGNAROK://弒神劍 : 諸神獻祭 switch(subtype){ case 2: switch(flagIndex){ case 5000: local totalDamage = obj.getVar("custom").getInt(10); local hitMax = obj.getVar("custom").getInt(11); cearteSkillPassiveObj_AtSwordMan_bykk(sqrChr, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 0, 0, ENUM_DIRECTION_RIGHT, 2, SKILL_DEMONSLAYER_RAGNAROK, 3, totalDamage, hitMax, 0, 0, 0, 0, 0, 0, 1); break; case 6000: for(local i = 0; i < 52; i++){ local aniPath = i.tostring(); if(i < 10) aniPath = "0" + i.tostring(); createOnlyDrawObject_AtSwordMan_bykk(obj,"character/swordman/effect/animation/atragnarok/attack/ratkc_"+aniPath+".ani",true,ENUM_DIRECTION_RIGHT,sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL); } obj.setTimeEvent(2, 100, 1, false); break; } break; } break; case SKILL_DEMONSLAYER_SNAKEDANCE://蛇腹劍 : 舞 break; case SKILL_DEMONSLAYER_ULTIMATEBLADE://弒神劍 : 極 break; case SKILL_DEMONSLAYER_WHIPSWORDBAL://蛇腹劍 : 破 break; case SKILL_DEMONSLAYER_WILDWHIP://蛇腹劍 : 滅 switch(flagIndex){ case 1: obj.resetHitObjectList(); break; } break; } break; case 3://vagabond switch(skillIndex){ case SKILL_VAGABOND_BIGJANG://如來神掌 break; case SKILL_VAGABOND_BLASTSWORD://回天璇鳴劍 break; case SKILL_VAGABOND_COALBAN://遊龍掌 break; case SKILL_VAGABOND_COMETBLADE://花舞仟魂殺 break; case SKILL_VAGABOND_DUALWEAPON://兩儀功 break; case SKILL_VAGABOND_EARTHPRESSURE://碎巖裂地掌 break; case SKILL_VAGABOND_FATALFLOWER://花開寒影 switch(subtype){ case 1: switch(flagIndex){ case 1: local hitMax = obj.getVar("custom").getInt(11); local pAni = obj.getCurrentAnimation(); local delaySum = pAni.getDelaySum(4,51); obj.setTimeEvent(1, delaySum / hitMax, hitMax - 1, false); break; case 2: sq_flashScreen(obj, 60, 60, 240, 204, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 3: sq_flashScreen(obj, 0, 0, 180, 153, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); //`CreateEffectBody1` 0 1 0 local speedRate = obj.getVar("custom").getInt(12); cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 1, 0, obj.getDirection(), 3, SKILL_VAGABOND_FATALFLOWER, 2, ANIMATION_VAGABOND_FATALFLOWER_EFFECTBODY1, speedRate, 0, 0, 0, 0, 0, 0, 0); break; case 4: //`CreateEffectBody2` 0 2 0 local speedRate = obj.getVar("custom").getInt(12); cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 2, 0, obj.getDirection(), 3, SKILL_VAGABOND_FATALFLOWER, 2, ANIMATION_VAGABOND_FATALFLOWER_EFFECTBODY2, speedRate, 0, 0, 0, 0, 0, 0, 0); break; case 5: sq_flashScreen(obj, 0, 0, 120, 153, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); //`CreateEffectBody3` 0 3 0 local speedRate = obj.getVar("custom").getInt(12); cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 3, 0, obj.getDirection(), 3, SKILL_VAGABOND_FATALFLOWER, 2, ANIMATION_VAGABOND_FATALFLOWER_EFFECTBODY3, speedRate, 0, 0, 0, 0, 0, 0, 0); break; case 6: //`CreateEffectBody4` 0 4 0 //`CreateEffectBody5` 0 5 0 local speedRate = obj.getVar("custom").getInt(12); cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 4, 0, obj.getDirection(), 3, SKILL_VAGABOND_FATALFLOWER, 2, ANIMATION_VAGABOND_FATALFLOWER_EFFECTBODY4, speedRate, 0, 0, 0, 0, 0, 0, 0); cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 5, 0, obj.getDirection(), 3, SKILL_VAGABOND_FATALFLOWER, 2, ANIMATION_VAGABOND_FATALFLOWER_EFFECTBODY5, speedRate, 0, 0, 0, 0, 0, 0, 0); break; case 7: sq_flashScreen(obj, 0, 0, 120, 153, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 8: sq_flashScreen(obj, 0, 60, 180, 153, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 9: sq_flashScreen(obj, 60, 60, 300, 204, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 10: obj.sq_PlaySound("FATAL_FLOWER_EXP"); sq_SetMyShake(obj, 7, 600); local totalDamage = obj.getVar("custom").getInt(10); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 48)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; } break; } break; case SKILL_VAGABOND_FISTOFEXPLOSION://湮烈掌 break; case SKILL_VAGABOND_FLOWERBLADEDANCE://蓮花劍舞 break; case SKILL_VAGABOND_GONEWITHTHEPETAL://落英驚鴻掌 break; case SKILL_VAGABOND_HERMITTRIPLESTEP://櫻花劫 break; case SKILL_VAGABOND_INHALATION://四象引 break; case SKILL_VAGABOND_MOONLIGHTSLASH://飛花逐月 break; case SKILL_VAGABOND_NEARBLOW://圓舞斬 break; case SKILL_VAGABOND_OVERBLOWSLASH://亂花葬 break; case SKILL_VAGABOND_RAPIDSTEP://一花渡江 switch(flagIndex){ case 100: if(obj.getVar("custom").getInt(10) == 9) sq_SetMyShake(obj, 2, 120); else if(obj.getVar("custom").getInt(10) > 5) sq_SetMyShake(obj, 2, 180); else sq_SetMyShake(obj, 3, 180); break; } break; case SKILL_VAGABOND_REVOLVINGSWORD://輪回劍 break; case SKILL_VAGABOND_SOARCUT://櫻落斬 break; case SKILL_VAGABOND_THREESIDE://三連斬 switch(subtype){ case 1: break; case 2: break; } break; case SKILL_VAGABOND_ZWEIVOLTAGEEX://嘯空十字斬 break; } break; case 4: switch(skillIndex){ case SKILL_DARKEMPLER_BLACKMIRROR://魔鏡幻影陣 break; case SKILL_DARKEMPLER_BUCKSHOT://釋魂飛彈 if(subtype == 2 && flagIndex == 1){ local totalDamage = obj.getVar("custom").getInt(0); local sub = obj.getVar("custom").getInt(1); local direction = obj.getVar("custom").getInt(2); local group = obj.getVar("custom").getInt(3); local uniqueId = obj.getVar("custom").getInt(4); local create_number = obj.getVar("custom").getInt(5); cearteSkillPassiveObj_AtSwordMan_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,60,obj.getDirection(),4,SKILL_DARKEMPLER_BUCKSHOT,1,totalDamage,sub,direction,group,uniqueId,create_number,0,0,1); } break; case SKILL_DARKEMPLER_DEADLYCAPE://暗影囚殺 break; case SKILL_DARKEMPLER_DESTROYER://暗影盛宴 break; case SKILL_DARKEMPLER_DEUSEXRAY://天罰死光 break; case SKILL_DARKEMPLER_DOOMSDAY://末日殺戮 break; case SKILL_DARKEMPLER_EVOLVE://汲魂之力 break; case SKILL_DARKEMPLER_HIDDENBLADE://影刃 break; case SKILL_DARKEMPLER_IMMOLATION://死亡獻祭 break; case SKILL_DARKEMPLER_JIHAD://天罰之劍 break; case SKILL_DARKEMPLER_LACERTHORNS://暗影綻放:死亡荊棘 break; case SKILL_DARKEMPLER_LOYALSLAVE://靈魂傀儡 break; case SKILL_DARKEMPLER_MADNESS://釋魂狂怒 break; case SKILL_DARKEMPLER_PUNISHMENT://神罰·滅世裁決 switch(subtype){ case 2: switch(flagIndex){ case 22: obj.getVar("punishment_move").setBool(1, true); break; case 40: obj.getVar("punishment_move").setBool(2, true); break; case 51: obj.getVar("punishment_move").setBool(3, true); break; case 60: local dstX = obj.getVar("punishment_base").getInt(10); sq_setCurrentAxisPos(obj, 0, dstX); sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); break; } break; } break; case SKILL_DARKEMPLER_SCAFFOLD://暗影禁錮 break; case SKILL_DARKEMPLER_SHADOWBINDING://暗影纏襲 break; case SKILL_DARKEMPLER_SHADOWHARVEST://暗影旋渦 break; case SKILL_DARKEMPLER_SHADOWLANCER://暗影之矛 break; case SKILL_DARKEMPLER_SHADOWPUPPET://魅影暗魂斬 if(subtype == 2 && flagIndex == 1){ local totalDamage = obj.getVar("custom").getInt(0); local lifeTime = obj.getVar("custom").getInt(1); local hitTime = obj.getVar("custom").getInt(2); local direction = obj.getVar("custom").getInt(3); local sub = obj.getVar("custom").getInt(4); switch(sub){ case 0: cearteSkillPassiveObj_AtSwordMan_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,-275,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_SHADOWPUPPET,3,totalDamage,lifeTime,hitTime,0,0,0,0,0,0); break; case 1: cearteSkillPassiveObj_AtSwordMan_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,70,direction,4,SKILL_DARKEMPLER_SHADOWPUPPET,1,totalDamage,lifeTime,hitTime,sub,0,0,0,0,0); break; } } break; case SKILL_DARKEMPLER_SOULDRAIN://靈魂攝取 break; case SKILL_DARKEMPLER_STARFALL://魔影轟殺 break; } break; } } function procAppend_po_atswordman_bykk_kak(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 1: switch(skillIndex){ case SKILL_SWORDMASTER_BYKK_ATFLASH://瞬影三絕斬 break; case SKILL_SWORDMASTER_BYKK_BLADESOUL://斬魂術 break; case SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE://極 · 馭劍術 (破劍陣) break; case SKILL_SWORDMASTER_BYKK_CHANGESWORD://魔劍降臨 switch(subtype){ case 0: if(!sqrChr || sqrChr.getState() == STATE_DIE) sq_SendDestroyPacketPassiveObject(obj); break; } break; case SKILL_SWORDMASTER_BYKK_DEVILSLASH://惡即斬 break; case SKILL_SWORDMASTER_BYKK_DRAGONUPEX://裂刃天衝 break; case SKILL_SWORDMASTER_BYKK_EXCALIBUR://雷鳴千軍破 break; case SKILL_SWORDMASTER_BYKK_FUSIONBLADE://極詣 · 馭劍術 : 聚魔劍 break; case SKILL_SWORDMASTER_BYKK_HALFMOON://破軍旋舞斬 break; case SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE://幻劍術 break; case SKILL_SWORDMASTER_BYKK_JACKCATCH://極 · 馭劍術 (幻劍陣) break; case SKILL_SWORDMASTER_BYKK_LAEVATEINN://誓約之劍 : 雷沃汀 break; case SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT://颶風魔劍 break; case SKILL_SWORDMASTER_BYKK_MAGICSWORDUP://魔劍奧義 break; case SKILL_SWORDMASTER_BYKK_THUNDERSLASH://穿雲破空劍 break; case SKILL_SWORDMASTER_BYKK_TIMESLASH://極 · 馭劍術 (時空斬) break; case SKILL_SWORDMASTER_BYKK_UPPERSLASH://升龍劍 break; case SKILL_SWORDMASTER_BYKK_WEAPONCOMBO://帝國劍術 break; } break; case 2: switch(skillIndex){ case SKILL_DEMONSLAYER_BLOODDANCE://血飲狂舞 break; case SKILL_DEMONSLAYER_BLOODDEMONSWORD://汲血魔劍 break; case SKILL_DEMONSLAYER_BLOODOCTOPUSSWORD://蛇舞血輪劍 break; case SKILL_DEMONSLAYER_BLOODSEAL://喚魔 : 封之印 break; case SKILL_DEMONSLAYER_CLAWBLADE://蛇腹劍 : 纏 break; case SKILL_DEMONSLAYER_DARKSTRIKE://喚魔 : 塔莫斯之襲 switch(subtype){ case 2: if(!sqrChr || sqrChr.getState() == STATE_DIE) sq_SendDestroyPacketPassiveObject(obj); if(sq_GetSkillLevel(sqrChr, SKILL_DEMONSLAYER_DARKSTRIKE) > 0 && !sq_GetSkill(sqrChr, SKILL_DEMONSLAYER_DARKSTRIKE).isInCoolTime()){ sqrChr.setSkillCommandEnable(SKILL_DEMONSLAYER_DARKSTRIKE,true); local b_useskill = sqrChr.sq_IsEnterSkill(SKILL_DEMONSLAYER_DARKSTRIKE); if(b_useskill != -1){ sqrChr.startSkillCoolTime(SKILL_DEMONSLAYER_DARKSTRIKE, sq_GetSkillLevel(sqrChr, SKILL_DEMONSLAYER_DARKSTRIKE), -1); local skill_level = sq_GetSkillLevel(sqrChr, SKILL_DEMONSLAYER_DARKSTRIKE); local hitMax = sq_GetLevelData(sqrChr, SKILL_DEMONSLAYER_DARKSTRIKE, 0, skill_level); local hitTime = sq_GetIntData(sqrChr, SKILL_DEMONSLAYER_DARKSTRIKE, 2); local sizeRate = sq_GetIntData(sqrChr, SKILL_DEMONSLAYER_DARKSTRIKE, 3); local totalDamage = sq_GetLevelData(sqrChr, SKILL_DEMONSLAYER_DARKSTRIKE, 1, skill_level); local totalDamage2 = sq_GetLevelData(sqrChr, SKILL_DEMONSLAYER_DARKSTRIKE, 2, skill_level); local sub = sq_GetIntData(sqrChr, SKILL_DEMONSLAYER_DARKSTRIKE, 6); local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); local size = sqrChr.getVar("darkstrike_tar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = sq_GetCNRDObjectToActiveObject(sqrChr.getVar("darkstrike_tar").get_obj_vector(i)); if(targetObj){ local id = sq_GetObjectId(targetObj); cearteSkillPassiveObj_AtSwordMan_bykk(sqrChr, targetObj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, -1, sq_GetZPos(targetObj) + sq_GetObjectHeight(targetObj) / 2, sqrChr.getDirection(), 2, SKILL_DEMONSLAYER_DARKSTRIKE, 1, totalDamage, hitMax, hitTime, sizeRate, sub, damageRate, id, 0, 1); break; } } } } } break; } break; case SKILL_DEMONSLAYER_GIGABLADE://空絕斬 : 仟刃 break; case SKILL_DEMONSLAYER_GIGASLASH://空絕斬 : 地裂 break; case SKILL_DEMONSLAYER_GREED://貪欲之燔祭 break; case SKILL_DEMONSLAYER_GROUPDANCE://群魔亂舞 break; case SKILL_DEMONSLAYER_PHNOM://喚魔 : 逆天之普諾 break; case SKILL_DEMONSLAYER_PIKESWORD://蛇腹劍 : 刺 break; case SKILL_DEMONSLAYER_PREDATORGALOA://貪食者迦羅亞 if(!sqrChr || sqrChr.getState() == STATE_DIE){ sq_SendDestroyPacketPassiveObject(); return; } switch(subtype){ case 1: switch(state){ case 20: local currentT = sq_GetObjectTime(obj); local currentSpeedRate = 1.0 ; local defaultRoundTime = 2400; local radius = 50; local base100Angle = 36000 / obj.getVar("custom").getInt(21) * obj.getVar("custom").getInt(16); local baseX = sqrChr.getXPos(); local baseZ = sqrChr.getYPos(); local current100Angle = (base100Angle + (36000 * currentSpeedRate * currentT / defaultRoundTime)) % 36000; local angle = (current100Angle.tofloat() / 100.0); local disMovLen = radius * sq_CosTable(angle.tointeger()); local mov_x = sq_GetDistancePos(baseX, ENUM_DIRECTION_LEFT, disMovLen.tointeger()); local axisMagnifyRate = radius * 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, sqrChr.getZPos() + 180); break; case 24: local targetObj = obj.getVar("tar").get_obj_vector(0); if(!targetObj || targetObj.getState() == STATE_DIE){ obj.getVar().setBool(0, false); obj.addSetStatePacket(26, null, STATE_PRIORITY_AUTO, false, ""); break; } sq_setCurrentAxisPos(obj, 0, sq_GetXPos(targetObj)); sq_setCurrentAxisPos(obj, 1, sq_GetYPos(targetObj)); sq_setCurrentAxisPos(obj, 2, sq_GetZPos(targetObj) + sq_GetObjectHeight(targetObj)); break; } break; } break; case SKILL_DEMONSLAYER_RAGNAROK://弒神劍 : 諸神獻祭 break; case SKILL_DEMONSLAYER_SNAKEDANCE://蛇腹劍 : 舞 break; case SKILL_DEMONSLAYER_ULTIMATEBLADE://弒神劍 : 極 break; case SKILL_DEMONSLAYER_WHIPSWORDBAL://蛇腹劍 : 破 break; case SKILL_DEMONSLAYER_WILDWHIP://蛇腹劍 : 滅 break; } break; case 3://vagabond switch(skillIndex){ case SKILL_VAGABOND_BIGJANG://如來神掌 switch(subtype){ case 2: switch(state){ case 20: //print("zpos = "+sq_GetZPos(obj)); if(sq_GetZPos(obj) <= 0){ local totalDamage = obj.getVar("custom").getInt(20); local sizeRate = obj.getVar("custom").getInt(13); cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DARKEMPLER, 0, 0, 0, obj.getDirection(), 3, SKILL_VAGABOND_BIGJANG, 2,totalDamage,100,0,sizeRate,1,0,0,0,0); obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); } break; } break; } break; case SKILL_VAGABOND_BLASTSWORD://回天璇鳴劍 break; case SKILL_VAGABOND_COALBAN://遊龍掌 switch(subtype){ case 1: local pAni = obj.getCurrentAnimation(); local time = sq_GetCurrentTime(pAni); local fireT = 300; local srcX = obj.getVar("custom").getInt(11); local srcZ = obj.getVar("custom").getInt(12); local MoveX = obj.getVar("custom").getInt(10); local MoveZ = obj.getVar("custom").getInt(13); if(obj.getVar("custom").getInt(15) > 0) MoveX = srcZ * 3; local angle = obj.getVar("custom").getInt(14); local v = sq_GetUniformVelocity(0, MoveX, time, fireT); local vz = sq_GetUniformVelocity(0, MoveZ, time, fireT / 4); local angleSet = sq_GetUniformVelocity(angle, 0, time, fireT / 4); if(time > fireT / 4 && time < fireT / 2){ vz = sq_GetUniformVelocity(MoveZ, 0, time - fireT / 4, fireT / 4); angleSet = sq_GetUniformVelocity(0, -angle, time - fireT / 4, fireT / 4); } else if(time > fireT / 2 && time < fireT / 4 * 3){ vz = sq_GetUniformVelocity(0, -MoveZ, time - fireT / 2, fireT / 4); angleSet = sq_GetUniformVelocity(-angle, 0, time - fireT / 2, fireT / 4); } else if(time > fireT / 4 * 3){ vz = sq_GetUniformVelocity(-MoveZ, 0, time - fireT / 4 * 3, fireT / 4); angleSet = sq_GetUniformVelocity(0, angle, time - fireT / 4 * 3, fireT / 4); } local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);//根據方嚮運算當前數值 if(obj.getVar("custom").getInt(15) > 0){ srcZ = srcZ + sq_GetUniformVelocity(0, -srcZ, time, fireT); angleSet = angleSet - 30; } sq_setCurrentAxisPos(obj, 0, dstX);//設置當前x坐標 sq_setCurrentAxisPos(obj, 2, srcZ + vz);//設置當前z坐標 sq_SetCustomRotate(obj, sq_ToRadian(angleSet.tofloat())); if(time >= fireT) sq_SendDestroyPacketPassiveObject(obj); break; } break; case SKILL_VAGABOND_COMETBLADE://花舞仟魂殺 break; case SKILL_VAGABOND_DUALWEAPON://兩儀功 break; case SKILL_VAGABOND_EARTHPRESSURE://碎巖裂地掌 break; case SKILL_VAGABOND_FATALFLOWER://花開寒影 break; case SKILL_VAGABOND_FISTOFEXPLOSION://湮烈掌 break; case SKILL_VAGABOND_FLOWERBLADEDANCE://蓮花劍舞 break; case SKILL_VAGABOND_GONEWITHTHEPETAL://落英驚鴻掌 break; case SKILL_VAGABOND_HERMITTRIPLESTEP://櫻花劫 break; case SKILL_VAGABOND_INHALATION://四象引 break; case SKILL_VAGABOND_MOONLIGHTSLASH://飛花逐月 break; case SKILL_VAGABOND_NEARBLOW://圓舞斬 break; case SKILL_VAGABOND_OVERBLOWSLASH://亂花葬 break; case SKILL_VAGABOND_RAPIDSTEP://一花渡江 break; case SKILL_VAGABOND_REVOLVINGSWORD://輪回劍 break; case SKILL_VAGABOND_SOARCUT://櫻落斬 break; case SKILL_VAGABOND_THREESIDE://三連斬 switch(subtype){ case 1: break; case 2: break; } break; case SKILL_VAGABOND_ZWEIVOLTAGEEX://嘯空十字斬 break; } break; case 4: switch(skillIndex){ case SKILL_DARKEMPLER_BLACKMIRROR://魔鏡幻影陣 break; case SKILL_DARKEMPLER_BUCKSHOT://釋魂飛彈 break; case SKILL_DARKEMPLER_DEADLYCAPE://暗影囚殺 break; case SKILL_DARKEMPLER_DESTROYER://暗影盛宴 switch(subtype){ case 2: switch(state){ case 21: local pAni = obj.getCurrentAnimation(); local currentT = sq_GetCurrentTime(pAni); local fireT = pAni.getDelaySum(false); local srcX = obj.getVar("custom").getInt(12); local srcZ = obj.getVar("custom").getInt(13); local MoveX = obj.getVar("custom").getInt(14); local vx = sq_GetUniformVelocity(0, MoveX, currentT, fireT); local vz = sq_GetUniformVelocity(srcZ, 0, currentT, fireT); local dstX = sq_GetDistancePos(srcX, obj.getDirection(), vx); sq_setCurrentAxisPos(obj, 0, dstX); sq_setCurrentAxisPos(obj, 2, vz); break; } break; } break; case SKILL_DARKEMPLER_DEUSEXRAY://天罰死光 break; case SKILL_DARKEMPLER_DOOMSDAY://末日殺戮 switch(subtype){ case 3: if(sqrChr.getState() != SKILL_DARKEMPLER_DOOMSDAY) sq_SendDestroyPacketPassiveObject(obj); break; } break; case SKILL_DARKEMPLER_EVOLVE://汲魂之力 break; case SKILL_DARKEMPLER_HIDDENBLADE://影刃 break; case SKILL_DARKEMPLER_IMMOLATION://死亡獻祭 break; case SKILL_DARKEMPLER_JIHAD://天罰之劍 break; case SKILL_DARKEMPLER_LACERTHORNS://暗影綻放:死亡荊棘 break; case SKILL_DARKEMPLER_LOYALSLAVE://靈魂傀儡 switch(subtype){ case 1: if(state != 22){ local targetObj = obj.getVar().get_obj_vector(0); if(!targetObj || targetObj.getState() == STATE_DIE) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); } break; } break; case SKILL_DARKEMPLER_MADNESS://釋魂狂怒 break; case SKILL_DARKEMPLER_PUNISHMENT://神罰·滅世裁決 switch(subtype){ case 2: if(obj.getVar("punishment_move").getBool(1)){ local pAni = obj.getCurrentAnimation(); local currentT = sq_GetCurrentTime(pAni) - pAni.getDelaySum(0, 20); local fireT = pAni.getDelaySum(21, 23); if(currentT >= fireT){ obj.getVar("punishment_move").setBool(1, false); obj.getVar("punishment_base").setInt(11, sq_GetXPos(obj)); sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); return; } local srcX = obj.getVar("punishment_base").getInt(10); local MoveX = 350; local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT); local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); sq_setCurrentAxisPos(obj, 0, dstX); } if(obj.getVar("punishment_move").getBool(2)){ local pAni = obj.getCurrentAnimation(); local currentT = sq_GetCurrentTime(pAni) - pAni.getDelaySum(0, 39); local fireT = pAni.getDelaySum(40, 42); if(currentT >= fireT){ obj.getVar("punishment_move").setBool(2, false); obj.getVar("punishment_base").setInt(12, sq_GetXPos(obj)); sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); return; } local srcX = obj.getVar("punishment_base").getInt(11); local MoveX = 250; local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT); local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); sq_setCurrentAxisPos(obj, 0, dstX); } if(obj.getVar("punishment_move").getBool(3)){ local pAni = obj.getCurrentAnimation(); local currentT = sq_GetCurrentTime(pAni) - pAni.getDelaySum(0, 50); local fireT = pAni.getDelaySum(51, 53); if(currentT >= fireT){ obj.getVar("punishment_move").setBool(3, false); sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); return; } local srcX = obj.getVar("punishment_base").getInt(12); local MoveX = 450; local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT); local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); sq_setCurrentAxisPos(obj, 0, dstX); } break; } break; case SKILL_DARKEMPLER_SCAFFOLD://暗影禁錮 if(subtype == 1 && state == 20 && sq_GetZPos(obj) <= 0) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); if(subtype == 2 && state == 20){ local pAni = obj.getCurrentAnimation(); local currentT = sq_GetCurrentTime(pAni); local fireT = 300; if(currentT > fireT) return; local v = sq_GetUniformVelocity(0, 130, currentT, fireT); sq_setCurrentAxisPos(obj, 2, v); } break; case SKILL_DARKEMPLER_SHADOWBINDING://暗影纏襲 switch(subtype){ case 1: switch(state){ case 21: local baseX = obj.getVar("custom").getInt(4),baseY = obj.getVar("custom").getInt(5); local sqrX = sq_GetXPos(sqrChr),sqrY = sq_GetYPos(sqrChr); sq_setCurrentAxisPos(obj, 0, sqrX); local disX = sq_Abs(baseX - sqrX); local sizeRate = 0;//1.6 * (480 - disX).tofloat() / 480.0; if((obj.getDirection() == ENUM_DIRECTION_RIGHT && sqrX > baseX) || (obj.getDirection() == ENUM_DIRECTION_LEFT && sqrX < baseX)) sizeRate = 1.6 * (480 - disX).tofloat() / 480.0; else sizeRate = 1.6 * (480 + disX).tofloat() / 480.0; local pAni = obj.getCurrentAnimation(); pAni.setImageRateFromOriginal(sizeRate, 1.0); obj.getVar("custom").setInt(3, (sizeRate * 100.0).tointeger()); if(((sq_Abs(baseY - sqrY) >= 15 && sq_GetSkillLevel(sqrChr, 46) < 1) || sq_Abs(baseX - sqrX) >= 200) && obj.getVar().getBool(100) == false){ obj.getVar().setBool(100, true); obj.stopTimeEvent(1); obj.setTimeEvent(1,100,1,true); } break; } break; } break; case SKILL_DARKEMPLER_SHADOWHARVEST://暗影旋渦 switch(subtype){ case 1: if(sq_GetZPos(obj) <= 0 && state == 20) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_DARKEMPLER_SHADOWLANCER://暗影之矛 break; case SKILL_DARKEMPLER_SHADOWPUPPET://魅影暗魂斬 if(subtype == 3){ local pAni = obj.getCurrentAnimation(); local currentT = sq_GetCurrentTime(pAni); local fireT = pAni.getDelaySum(false); local srcX = obj.getVar("custom").getInt(0); local v = sq_GetUniformVelocity(0, 150, currentT, fireT); local dstX = sq_GetDistancePos(srcX, obj.getDirection(), -v); sq_setCurrentAxisPos(obj, 0, dstX); } break; case SKILL_DARKEMPLER_SOULDRAIN://靈魂攝取 break; case SKILL_DARKEMPLER_STARFALL://魔影轟殺 switch(subtype){ case 1: switch(state){ case 20: local targetObj = obj.getVar("target").get_obj_vector(0); if(targetObj){ if(sq_GetDistanceObject(obj, targetObj, false) < 10){ obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); return; } local currentT = sq_GetObjectTime(obj); local fireT = obj.getVar("custom").getInt(12); local X1 = sq_GetAccel(obj.getXPos(), targetObj.getXPos(), currentT, fireT, true); local Y1 = sq_GetAccel(obj.getYPos(), targetObj.getYPos(), currentT, fireT, true); sq_setCurrentAxisPos(obj, 0, X1); sq_setCurrentAxisPos(obj, 1, Y1); } else obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; } break; } break; } break; } } function getImmuneTypeDamageRate_appendage_BlackMirror_bykk(appendage, damageRate, attacker) { if (!appendage) return damageRate; local decreaseRate = appendage.getVar("custom").getInt(0); return damageRate-decreaseRate; } function onDamageParent_appendage_BlackMirror_bykk(appendage,attacker, boundingBox, isStuck) { if(!appendage) return; local countMax = appendage.getVar("custom").getInt(1); local damagecount = appendage.getVar("custom").getInt(2); appendage.getVar("custom").setInt(2, damagecount + 1); if(damagecount >= countMax) appendage.setValid(false); } function drawAppend_appendage_BlackMirror_bykk(appendage, isOver, x, y, isFlip) { if(!appendage) return; local parentObj = appendage.getParent(); if (!parentObj){ appendage.setValid(false); return; } local var = appendage.getVar(); local Ani_01 = var.GetAnimationMap("animation_01", "character/swordman/effect/animation/atblackmirror/shelter.ani"); if(Ani_01 && isOver){ sq_AnimationProc(Ani_01); sq_drawCurrentFrame(Ani_01, x, y, isFlip); } } function drawAppend_appendage_shadowbinding_bykk(appendage, isOver, x, y, isFlip) { if(!appendage) return; local parentObj = appendage.getParent(); if(!parentObj){ appendage.setValid(false); return; } local var = appendage.getVar(); local Ani_02 = var.GetAnimationMap("animation_02", "character/swordman/effect/animation/atshadowbinding/monster_shadowbinding_monster_back.ani"); if(Ani_02 && !isOver){ sq_AnimationProc(Ani_02); sq_drawCurrentFrame(Ani_02, x, y, isFlip); } } function onAttackParent_appendage_evolve_bykk(appendage, realAttacker, damager, boundingBox, isStuck) { if(!appendage) return; local obj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); local colObj = sq_GetCNRDObjectToCollisionObject(realAttacker); local index = colObj.getCollisionObjectIndex(); local skillIndex = colObj.getVar("skillIndex").getInt(0); if(index == PASSIVEOBJECT_BYKK_DARKEMPLER && (skillIndex == SKILL_DARKEMPLER_BUCKSHOT || skillIndex == SKILL_DARKEMPLER_MADNESS)) return; local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_EVOLVE); local prob = sq_GetLevelData(obj, SKILL_DARKEMPLER_EVOLVE, 2, skill_level); if(!isStuck && sq_getRandom(1,100) > (100 - prob)){ darkEmpler_Evolve(obj,1,0) } } function onStart_appendage_evolve_bykk(appendage) { local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false);return;} } function drawAppend_appendage_madness_bykk(appendage, isOver, x, y, isFlip) { if(!appendage) return; local parentObj = appendage.getParent(); if (!parentObj){ appendage.setValid(false); return; } local var = appendage.getVar(); local Ani_01 = var.GetAnimationMap("animation_01", "character/swordman/effect/animation/atmadness/hhtop_top_a.ani"); local Ani_02 = var.GetAnimationMap("animation_02", "character/swordman/effect/animation/atmadness/hhbot_bot_a.ani"); if(Ani_01 && isOver){ sq_AnimationProc(Ani_01); sq_drawCurrentFrame(Ani_01, x, y - 30, isFlip); } if(Ani_02 && !isOver){ sq_AnimationProc(Ani_02); sq_drawCurrentFrame(Ani_02, x, y - 30, isFlip); } } function drawAppend_appendage_punishment_bykk(appendage, isOver, x, y, isFlip) { if(!appendage) return; local parentObj = appendage.getParent(); if (!parentObj){ appendage.setValid(false); return; } local var = appendage.getVar(); local Ani_01 = var.GetAnimationMap("animation_01", "character/swordman/effect/animation/atpunishment/casting/monhold_01.ani"); if(Ani_01 && isOver){ sq_AnimationProc(Ani_01); sq_drawCurrentFrame(Ani_01, x, y - 30, isFlip); } } function drawAppend_appendage_lacerthorns_bykk(appendage, isOver, x, y, isFlip) { if(!appendage) return; local parentObj = appendage.getParent(); if (!parentObj){ appendage.setValid(false); return; } local var = appendage.getVar(); local Ani_01 = var.GetAnimationMap("animation_01", "character/swordman/effect/animation/atlacerthorns/atlacerthornsaura_00.ani"); local hight = sq_GetObjectHeight(parentObj) / 2 if(Ani_01 && isOver){ sq_AnimationProc(Ani_01); sq_drawCurrentFrame(Ani_01, x, y - hight, isFlip); } } function drawAppend_appendage_Usir_bykk(appendage, isOver, x, y, isFlip) { if(!appendage) return; local parentObj = appendage.getParent(); if (!parentObj){ appendage.setValid(false); return; } } function onAttackParent_appendage_Usir_bykk(appendage, realAttacker, damager, boundingBox, isStuck) { if(!appendage) return; } function onStart_appendage_congest_bykk(appendage) { local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false);return;} getDamageRate_DarkTempler_bykk(parentObj); } function onStart_appendage_incarnation_bykk(appendage) { local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false);return;} } function onStart_appendage_vespers_bykk(appendage) { local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false);return;} } function onStart_appendage_LoyalSlave_bykk(appendage) { local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false);return;} local skillLevel = sq_GetSkillLevel(parentObj,SKILL_DARKEMPLER_LOYALSLAVE); local value1 = sq_GetLevelData(parentObj, SKILL_DARKEMPLER_LOYALSLAVE, 4, skillLevel); local value2 = sq_GetLevelData(parentObj, SKILL_DARKEMPLER_LOYALSLAVE, 3, skillLevel); local change_appendage = appendage.sq_getChangeStatus("loyalslave"); if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("loyalslave",parentObj, parentObj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value1); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_HIT_RATE, false, (value1 * 0.1).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_DAMAGE_RATE, true, (value2 * 0.1).tofloat()); } } function onAttackParent_appendage_LoyalSlave_bykk(appendage, realAttacker, damager,boundingBox, isStuck) { local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false);return;} local skillLevel = sq_GetSkillLevel(parentObj, SKILL_DARKEMPLER_LOYALSLAVE); local prob = sq_GetLevelData(parentObj, SKILL_DARKEMPLER_LOYALSLAVE, 0, skillLevel); if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ local activeObj = sq_GetCNRDObjectToActiveObject(damager); if(activeObj.getVar("loyalslave").getBool(0) == false && activeObj.getVar("loyalslave").get_ct_vector(0)){ local timer = activeObj.getVar("loyalslave").get_ct_vector(0) local currentT = timer.Get(); local resetTime = sq_GetIntData(parentObj, SKILL_DARKEMPLER_LOYALSLAVE, 0); if(currentT >= resetTime && sq_getRandom(1, 100) < prob){ activeObj.getVar("loyalslave").setBool(0, true); local group = sq_GetGroup(activeObj); local uniqueId = sq_GetUniqueId(activeObj); local lifeTime = sq_GetLevelData(parentObj, SKILL_DARKEMPLER_LOYALSLAVE, 1, skillLevel); local hitTime = sq_GetLevelData(parentObj, SKILL_DARKEMPLER_LOYALSLAVE, 2, skillLevel); cearteSkillPassiveObj_AtSwordMan_bykk(parentObj,activeObj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,sq_GetHeightObject(activeObj),parentObj.getDirection(),4,SKILL_DARKEMPLER_LOYALSLAVE,1,lifeTime,hitTime,group,uniqueId,0,0,0,0,0); } } else if(activeObj.getVar("loyalslave").getBool(0) == false && sq_getRandom(1, 100) < prob){ activeObj.getVar("loyalslave").setBool(0, true); local group = sq_GetGroup(activeObj); local uniqueId = sq_GetUniqueId(activeObj); local lifeTime = sq_GetLevelData(parentObj, SKILL_DARKEMPLER_LOYALSLAVE, 1, skillLevel); local hitTime = sq_GetLevelData(parentObj, SKILL_DARKEMPLER_LOYALSLAVE, 2, skillLevel); cearteSkillPassiveObj_AtSwordMan_bykk(parentObj,activeObj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,sq_GetHeightObject(activeObj),parentObj.getDirection(),4,SKILL_DARKEMPLER_LOYALSLAVE,1,lifeTime,hitTime,group,uniqueId,0,0,0,0,0); } } }