Rindro-Sqr/user/114.66.51.249/3_atswordman_4.c

2420 lines
105 KiB
C
Raw Normal View History

2025-11-08 12:21:06 +08:00
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);
}
}
}