function setCustomData_po_atswordman_bykk_kak(obj, receiveData) { if(!obj) return; local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); if(!sqrChr) return; local job = receiveData.readDword(); local skillIndex = receiveData.readDword(); local subtype = receiveData.readDword(); obj.getVar("job").setInt(0,job); obj.getVar("skillIndex").setInt(0,skillIndex); obj.getVar("subtype").setInt(0,subtype); switch(job){ case 0: switch(skillIndex){ case 94: local aniPath = "passiveobject/atswordman_bykk/common/atgorecross/projectile_a_eff03.ani"; if(subtype == 2) aniPath = "passiveobject/atswordman_bykk/common/atgorecross/projectile_b_eff03.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 185 + subtype)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 88: local aniPath = "passiveobject/atswordman_bykk/common/atsiryun/siryungum.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local totalDamage = receiveData.readDword(); local hitMax = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 188)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.sq_SetMaxHitCounterPerObject(hitMax); obj.setTimeEvent(1, 80, -1, false); obj.sq_SetMoveParticle("particle/bloodseal_move.ptl", 0.0, 0.0); sq_SetSpeedToMoveParticle(obj, 0, 600); break; case 87: local aniPath = "passiveobject/atswordman_bykk/common/atmountaincrash/mountaincrashsub.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 189)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); sq_SetAddWeaponDamage(attackInfo, true) if(sizeRate > 100){ local currentAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } break; case 34: sqrChr.getVar("executionObj").push_obj_vector(obj); local size = sqrChr.getVar("executionTar").get_obj_vector_size(); if(size < 1) sqrChr.getVar("executionTar").clear_obj_vector(); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case 1: switch(skillIndex){ case SKILL_SWORDMASTER_BYKK_ATFLASH://瞬影三絕斬 local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atflash/flash_sonic1.ani"; switch(subtype){ case 2: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atflash/flash_sonic2.ani"; break; case 3: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atflash/flash_sonic3.ani"; break; case 4: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atflash/flash_sonic3.ani"; break; } local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 122)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local sizeRate = receiveData.readDword(); local roate = receiveData.readDword(); sq_SetCustomRotate(obj, sq_ToRadian(roate.tofloat())); if(sizeRate > 100){ local currentAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } local sub = receiveData.readDword(); if(sub < 4){ local level = receiveData.readDword(); local prob = receiveData.readDword(); local time = receiveData.readDword(); local damage = receiveData.readDword(); local attackInfo = sq_GetCurrentAttackInfo(obj); local activeStatusSet = [ACTIVESTATUS_BURN,ACTIVESTATUS_FREEZE,ACTIVESTATUS_BLIND,ACTIVESTATUS_LIGHTNING]; if(damage == 0) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, activeStatusSet[sub], prob, level, time); else sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, activeStatusSet[sub], prob, level, time, damage); } obj.sq_SetMoveParticle("Particle/Flash.ptl", 0.0, 0.0); if(!sqrChr || sqrChr.getState() == STATE_DIE) break; local dis = sq_GetIntData(sqrChr, SKILL_SWORDMASTER_BYKK_ATFLASH, 1); local speed = (dis.tofloat() / 0.4).tointeger(); sq_SetSpeedToMoveParticle(obj,0,speed); break; case SKILL_SWORDMASTER_BYKK_BLADESOUL://斬魂術 break; case SKILL_SWORDMASTER_BYKK_BREAKSWORDDANCE://極 · 馭劍術 (破劍陣) switch(subtype){ case 1: sqrChr.getVar("breakSwordDance_circle").clear_obj_vector(); sqrChr.getVar("breakSwordDance_circle").push_obj_vector(obj); obj.setTimeEvent(1, 1000, -1, true); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: local sub = receiveData.readDword(); obj.getVar("custom").setInt(10, sub); sqrChr.getVar("breakSwordDance_sword"+sub.tostring()).clear_obj_vector(); sqrChr.getVar("breakSwordDance_sword"+sub.tostring()).push_obj_vector(obj); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 10: local totalDamage = receiveData.readDword(); local element = receiveData.readDword(); local atkIndex = [103,104,102,105,106]; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex[element])); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atbreaksworddance/explosion/atbreaksworddance_boom_mu.ani"; switch(element){ case 0: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atbreaksworddance/explosion/atbreaksworddance_boom_fire.ani"; break; case 1: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atbreaksworddance/explosion/atbreaksworddance_boom_ice.ani"; break; case 2: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atbreaksworddance/explosion/atbreaksworddance_boom_dark.ani"; break; case 3: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atbreaksworddance/explosion/atbreaksworddance_boom_light.ani"; break; } local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local sizeRate = receiveData.readDword(); if(sizeRate > 100){ local currentAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } obj.setTimeEvent(2, 100, 1, true); break; case 11: local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 107)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atbreaksworddance/finish/atbreaksworddance_finish_boom_7.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/atswordman_bykk/swordmaster/animation/atbreaksworddance/finish/atbreaksworddance_finish_focus1.ani"),true); local sizeRate = receiveData.readDword(); if(sizeRate > 100){ local currentAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } break; case 20: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/newswordmaster/animation/atbreaksworddance/finish/atbreaksworddance_finish_boom_7.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 192)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); if(sizeRate > 100){ local currentAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } break; } break; case SKILL_SWORDMASTER_BYKK_CHANGESWORD://魔劍降臨 switch(subtype){ case 0: local element = receiveData.readDword(); obj.getVar("custom").setInt(10, element); sqrChr.getVar("elementalsword").clear_obj_vector(); sqrChr.getVar("elementalsword").push_obj_vector(obj); obj.setMapFollowParent(sqrChr); obj.setMapFollowType(1); obj.addSetStatePacket(element + 100, null, STATE_PRIORITY_AUTO, false, ""); break; case 1: local totalDamage = receiveData.readDword(); local element = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atelementaleffect/fire_fire_dodge.ani", attackIndex = 109; switch(element){ case 1: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atelementaleffect/ice_ice_dodge.ani";attackIndex = 111; break; case 2: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atelementaleffect/dark_dark_normal.ani";attackIndex = 108; break; case 3: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atelementaleffect/light_first.ani";attackIndex = 110; break; } sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); if(element == 2){ local group = receiveData.readDword(); local uniqueId = receiveData.readDword(); local targetObj = sq_GetObject(obj, group, uniqueId); obj.getVar("custom").clear_obj_vector(); obj.getVar("custom").push_obj_vector(targetObj); if(targetObj){ sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetZPos(obj)); sq_moveWithParent(targetObj, obj); obj.setTimeEvent(1,180,1,false); } } else if(element == 3){ sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementaleffect/thunder_dodge.ani", 0, 0, 0); obj.setTimeEvent(2,90,2,false); } local pAni = obj.getCurrentAnimation(); pAni.setSpeedRate(200.0); break; } break; case SKILL_SWORDMASTER_BYKK_DEVILSLASH://惡即斬 switch(subtype){ case 1: sqrChr.getVar("devilSlash_atk").clear_obj_vector(); sqrChr.getVar("devilSlash_atk").push_obj_vector(obj); local totalDamage = receiveData.readDword(); local hitMax = receiveData.readDword(); local element = receiveData.readDword(); local speedRate = receiveData.readDword(); local sizeRate = receiveData.readDword(); obj.getVar("custom").setInt(11, hitMax); obj.getVar("custom").setInt(12, element); obj.getVar("custom").setInt(13, 0); obj.getVar("custom").setInt(14, sizeRate); local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atdevilslash/devilslashmultiattack.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local atkIndex = 176; if(element < 4) atkIndex = atkIndex + (element + 1); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local pAni = obj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); sizeRate = sizeRate.tofloat() / 100.0; sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); sq_moveWithParent(sqrChr, obj); break; case 2: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local element = receiveData.readDword(); local aniPath = ""; switch(element){ case 0: aniPath = "character/swordman/effect/animation/atdevilslash/fire/finish_normal.ani"; break; case 1: aniPath = "character/swordman/effect/animation/atdevilslash/ice/finish_normal.ani"; break; case 2: aniPath = "character/swordman/effect/animation/atdevilslash/dark/finish_normal.ani"; break; case 3: aniPath = "character/swordman/effect/animation/atdevilslash/light/finish_normal.ani"; break; case 4: aniPath = "character/swordman/effect/animation/atdevilslash/nothing/finish_normal.ani"; break; } local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local atkIndex = 181; if(element < 4) atkIndex = 182 + element; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local pAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; pAni.setImageRateFromOriginal(sizeRate, sizeRate); pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); break; case 10: //totalDamage,speedRate,sizeRate,flagIndex local totalDamage = receiveData.readDword(); local speedRate = receiveData.readDword(); local sizeRate = receiveData.readDword(); local flagIndex = receiveData.readDword(); local aniPath = ""; switch(flagIndex){ case 31: aniPath = "passiveobject/atswordman_bykk/newswordmaster/animation/atdevilslash/newatdevilslashloopslash_00.ani"; break; case 32: aniPath = "passiveobject/atswordman_bykk/newswordmaster/animation/atdevilslash/newatdevilslashloopslash_01.ani"; break; case 33: aniPath = "passiveobject/atswordman_bykk/newswordmaster/animation/atdevilslash/newatdevilslashloopslash_02.ani"; break; case 34: aniPath = "passiveobject/atswordman_bykk/newswordmaster/animation/atdevilslash/newatdevilslashloopslash_03.ani"; break; case 35: aniPath = "passiveobject/atswordman_bykk/newswordmaster/animation/atdevilslash/newatdevilslashloopslash_04.ani"; break; case 36: aniPath = "passiveobject/atswordman_bykk/newswordmaster/animation/atdevilslash/newatdevilslashloopslash_05.ani"; break; } if(aniPath == "") sq_SendDestroyPacketPassiveObject(obj); local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 194)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local pAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; pAni.setImageRateFromOriginal(sizeRate, sizeRate); pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); break; case 11: //totalDamage,speedRate,sizeRate,flagIndex local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); // local speedRate = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/newswordmaster/animation/atdevilslash/newatdevilslashchargefinisheffect_17.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 193)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local pAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; pAni.setImageRateFromOriginal(sizeRate, sizeRate); pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate); // pAni.setSpeedRate(speedRate.tofloat()); break; } break; case SKILL_SWORDMASTER_BYKK_DRAGONUPEX://裂刃天衝 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local hitMax = receiveData.readDword(); local totalDamage2 = receiveData.readDword(); local sizeRate = receiveData.readDword(); obj.getVar("custom").setInt(11, hitMax); obj.getVar("custom").setInt(12, totalDamage2); obj.getVar("custom").setInt(13, sizeRate); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 113)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: local totalDamage = receiveData.readDword(); local hitMax = receiveData.readDword(); local totalDamage2 = receiveData.readDword(); local sizeRate = receiveData.readDword(); obj.getVar("custom").setInt(12, totalDamage2); obj.getVar("custom").setInt(13, sizeRate); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 116)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atdragonup/horizon/atdragonuptalismanswordeffect_00.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(0, 5); // obj.setTimeEvent(2, delay / hitMax, hitMax - 1, false); sq_moveWithParent(sqrChr, obj); break; case 3: sq_moveWithParent(sqrChr, obj); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 4: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 117)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atdragonup/horizon/front_blast_normal.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetShake(obj, 16, 200); local currentAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); break; } break; case SKILL_SWORDMASTER_BYKK_EXCALIBUR://雷鳴千軍破 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local element = receiveData.readDword(); local time = receiveData.readDword(); local totalDamage2 = receiveData.readDword(); local sub = receiveData.readDword(); obj.getVar("custom").setInt(10, totalDamage); obj.getVar("custom").setInt(11, element); obj.getVar("custom").setInt(12, time); obj.getVar("custom").setInt(13, totalDamage2); obj.getVar("custom").setInt(14, sub); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: local totalDamage = receiveData.readDword(); local sub = receiveData.readDword(); local sizeRate = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 121)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/create_nova_b_attack.ani"; if(sub > 0) aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/ex_blunt_nova.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); if(sub < 1){ local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(0,sq_CreateAnimation("","passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/create_nova_b.ani"),true); } local currentAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); break; case 3: local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 121)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atexcalibur/ex_blunt_shockwave1.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local sizeRate = receiveData.readDword(); local currentAni = obj.getCurrentAnimation(); if(sizeRate > 100){ sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sizeRate = 1.5 * sizeRate; } else sizeRate = 1.5 * sizeRate.tofloat() / 100.0; sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); break; case 10: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/newswordmaster/animation/atexcalibur/new/newatexcaliburceffect_02.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 198)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/newswordmaster/animation/atexcalibur/new/newatexcaliburcbottom_00.ani", 0, 0, 0); local pAni = pooledObj.getCurrentAnimation(); pAni.setImageRateFromOriginal(sizeRate, sizeRate); pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM); break; } break; case SKILL_SWORDMASTER_BYKK_FUSIONBLADE://極詣 · 馭劍術 : 聚魔劍 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 123)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atfusionblade/atfusionbladeexplosionfront_00.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local sizeRate = receiveData.readDword(); if(sizeRate > 100){ local currentAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } local aniPath2 = "passiveobject/atswordman_bykk/swordmaster/animation/atfusionblade/atfusionbladeexplosionbottom_00.ani"; createOnlyDrawObject_AtSwordMan_bykk(obj,aniPath2,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); break; case 2: local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 124)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atfusionblade/atfusionbladeswordattack.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); break; case 3: local element = receiveData.readDword(); local delay = receiveData.readDword(); local delay2 = receiveData.readDword(); local angle = receiveData.readDword(); local totalDamage = receiveData.readDword(); obj.getVar("custom").setInt(10, element); obj.getVar("custom").setInt(11, delay); obj.getVar("custom").setInt(12, delay2); obj.getVar("custom").setInt(13, totalDamage); sq_SetCustomRotate(obj, sq_ToRadian(angle.tofloat())); obj.getVar("custom").setInt(20, sq_GetXPos(obj)); obj.getVar("custom").setInt(21, sq_GetZPos(obj)); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_SWORDMASTER_BYKK_HALFMOON://破軍旋舞斬 switch(subtype){ case 1://character/swordman/atanimation/halfmoon2_obj.ani local aniPath = "character/swordman/atanimation/halfmoon2_obj.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local speedRate = receiveData.readDword(); local hitMax = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 175)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(speedRate.tofloat()); sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); currentAni.setSpeedRate(speedRate.tofloat()); local pAni = obj.getCurrentAnimation(); local delay = pAni.getDelaySum(false); if(hitMax > 1) obj.setTimeEvent(1, delay / (hitMax + 1), hitMax - 1, false); sq_moveWithParent(sqrChr, obj); break; } break; case SKILL_SWORDMASTER_BYKK_ILLUSIONBLADE://幻劍術 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local hitMax = receiveData.readDword(); local speedRate = receiveData.readDword(); obj.getVar("custom").setInt(11, hitMax); obj.getVar("custom").setInt(12, sq_GetXPos(obj)); obj.getVar("custom").setInt(13, 250); obj.getVar("custom").setInt(14, 0); obj.getVar("custom").setInt(15, speedRate); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 128)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: local totalDamage = receiveData.readDword(); local hitMax = receiveData.readDword(); local totalDamage2 = receiveData.readDword(); local sizeRate = receiveData.readDword(); local speedRate = receiveData.readDword(); obj.getVar("custom").setInt(10, totalDamage); obj.getVar("custom").setInt(11, hitMax); obj.getVar("custom").setInt(12, sq_GetXPos(obj)); obj.getVar("custom").setInt(13, 250); obj.getVar("custom").setInt(14, 0); obj.getVar("custom").setInt(15, totalDamage2); obj.getVar("custom").setInt(16, sizeRate); obj.getVar("custom").setInt(17, speedRate); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 128)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 3: local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atillusionblade/bluntmasterysub/illusionbladesub.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local speedRate = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 127)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(speedRate.tofloat()); sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); break; } break; case SKILL_SWORDMASTER_BYKK_JACKCATCH://極 · 馭劍術 (幻劍陣) switch(subtype){ case 1://魔法陣 sqrChr.getVar("jackCatch_circle").clear_obj_vector(); sqrChr.getVar("jackCatch_circle").push_obj_vector(obj); obj.setTimeEvent(4, 1000, -1, true); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); local speedRate = receiveData.readDword(); obj.getVar("custom").setInt(11, speedRate); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2://火冰暗光特效 local element = receiveData.readDword(); local VarName = ["jackCatch_circle_fire","jackCatch_circle_ice","jackCatch_circle_dark","jackCatch_circle_light"]; sqrChr.getVar(VarName[element]).clear_obj_vector(); sqrChr.getVar(VarName[element]).push_obj_vector(obj); obj.getVar("custom").setInt(10, element); local speedRate = receiveData.readDword(); obj.getVar("custom").setInt(11, speedRate); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 3://爆炸 local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atjackcatch/boom_crack_normal.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 129)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local sizeRate = receiveData.readDword(); if(sizeRate > 100){ local currentAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } break; case 4: local time = receiveData.readDword(); obj.getVar("custom").setInt(10, time); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 5: local totalDamage = receiveData.readDword(); local element = receiveData.readDword(); local moveX = receiveData.readDword(); local moveY = receiveData.readDword(); obj.getVar("custom").setInt(10, totalDamage); obj.getVar("custom").setInt(11, element); obj.getVar("custom").setInt(12, moveX); obj.getVar("custom").setInt(13, moveY); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_SWORDMASTER_BYKK_LAEVATEINN://誓約之劍 : 雷沃汀 switch(subtype){ case 1: local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atlaevateinn/slash_03.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local speedRate = receiveData.readDword(); local pAni = obj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); break; } break; case SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT://颶風魔劍 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local element = receiveData.readDword(); local hitMax = receiveData.readDword(); local totalDamage2 = receiveData.readDword(); local delay = receiveData.readDword(); obj.getVar("custom").setInt(10, totalDamage); obj.getVar("custom").setInt(11, element); obj.getVar("custom").setInt(12, totalDamage2); obj.getVar("custom").setInt(13, hitMax); obj.setTimeEvent(3, delay, 1, false); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_SWORDMASTER_BYKK_MAGICSWORDUP://魔劍奧義 switch(subtype){ case 0: local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atmagicswordup/p_fire_00.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local totalDamage = receiveData.readDword(); local level = receiveData.readDword(); local prob = receiveData.readDword(); local time = receiveData.readDword(); local damage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 143)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_BURN, prob, level, time, damage); break; case 1: local totalDamage = receiveData.readDword(); local level = receiveData.readDword(); local prob = receiveData.readDword(); local time = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 145)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_FREEZE, prob, level, time); sq_SetCustomRotate(obj, sq_ToRadian(-45.0)); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atmagicswordup/p_dark_14.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local totalDamage = receiveData.readDword(); local level = receiveData.readDword(); local prob = receiveData.readDword(); local time = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 142)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_BLIND, prob, level, time); break; case 3: local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 144)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_SWORDMASTER_BYKK_THUNDERSLASH://穿雲破空劍 switch(subtype){ case 1: local aniPath = "character/swordman/effect/animation/atthunderslash/thunderslash_shockwave.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 149)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); if(sizeRate > 100){ sizeRate = sizeRate.tofloat() / 100; local currentAni = obj.getCurrentAnimation(); currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } break; case 2: local totalDamage = receiveData.readDword(); local element = receiveData.readDword(); local sizeRate = receiveData.readDword(); print("sizeRate = "+sizeRate); local aniPath = ""; switch(element){ case 0: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atthunderslash/lv95passive/atthunderslashlv95passivefirefront_00.ani"; break; case 1: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atthunderslash/lv95passive/atthunderslashlv95passivecoldfront_00.ani"; break; case 2: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atthunderslash/lv95passive/atthunderslashlv95passivedarkfront_00.ani"; break; case 3: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atthunderslash/lv95passive/atthunderslashlv95passivelightningfront_00.ani"; break; } local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local aniPath2 = ["passiveobject/atswordman_bykk/swordmaster/animation/atthunderslash/lv95passive/atthunderslashlv95passivefirebottom_00.ani","passiveobject/atswordman_bykk/swordmaster/animation/atthunderslash/lv95passive/atthunderslashlv95passivecoldbottom_00.ani","passiveobject/atswordman_bykk/swordmaster/animation/atthunderslash/lv95passive/atthunderslashlv95passivedarkbottom_00.ani","passiveobject/atswordman_bykk/swordmaster/animation/atthunderslash/lv95passive/atthunderslashlv95passivelightningbottom_00.ani"]; createOnlyDrawObject_AtSwordMan_bykk(obj,aniPath2[element],true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); local atkSet = [147,150,146,148,149]; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkSet[element])); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); //obj.setTimeEvent() break; } break; case SKILL_SWORDMASTER_BYKK_TIMESLASH://極 · 馭劍術 (時空斬) switch(subtype){ case 1: sqrChr.getVar("timeslash_bottom").clear_obj_vector(); sqrChr.getVar("timeslash_bottom").push_obj_vector(obj); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/attimeslash/attimeslashattackbox.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 151)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 3: local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/attimeslash/attimeslashattackbox.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 152)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; } break; case SKILL_SWORDMASTER_BYKK_UPPERSLASH://升龍劍 break; case SKILL_SWORDMASTER_BYKK_WEAPONCOMBO://帝國劍術 switch(subtype){ case 0://短劍 local totalDamage = receiveData.readDword(); local element = receiveData.readDword(); local subState = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atweaponcombo/swd/slash_0"+(subState+1).tostring()+".ani"; if(element < 4){ switch(element){ case 0: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atweaponcombo/swd/fireslash_0"+(subState+1).tostring()+".ani"; break; case 1: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atweaponcombo/swd/iceslash_0"+(subState+1).tostring()+".ani"; break; case 2: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atweaponcombo/swd/darkslash_0"+(subState+1).tostring()+"_slash.ani"; break; case 3: aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atweaponcombo/swd/lightslash_0"+(subState+1).tostring()+".ani"; break; } } local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local atkSet = [[159,160,161,162],[163,164,165,166],[167,168,169,170],[155,156,157,158],[171,172,173,174]]; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkSet[element][subState])); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 1://鈍器 local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atweaponcombo/shock_01.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 153)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 3://巨劍 local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atweaponcombo/hit/hit_wind.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 153)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local aniPath = "passiveobject/atswordman_bykk/swordmaster/animation/atweaponcombo/hit/floor_shock.ani"; local pooledObj = createOnlyDrawObject_AtSwordMan_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); if(sizeRate > 100){ local currentAni = obj.getCurrentAnimation(); local pAni = pooledObj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); pAni.setImageRateFromOriginal(sizeRate, sizeRate); pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); } break; } break; } break; case 2: switch(skillIndex){ case SKILL_DEMONSLAYER_BLOODDANCE://血飲狂舞 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local delay = receiveData.readDword(); sqrChr.getVar("blooddance_obj").clear_obj_vector(); sqrChr.getVar("blooddance_obj").push_obj_vector(obj); local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atblooddance/atblooddance_devilswordtechloop1.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 63)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local pAni = obj.getCurrentAnimation(); local speedRate = 3000.0 / delay.tofloat(); pAni.setSpeedRate(speedRate); break; case 2: local totalDamage = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atblooddance/atblooddance_devilswordtechfinish2.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 64)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; } break; case SKILL_DEMONSLAYER_BLOODDEMONSWORD://汲血魔劍 break; case SKILL_DEMONSLAYER_BLOODOCTOPUSSWORD://蛇舞血輪劍 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local hitMax = receiveData.readDword(); local speedRate = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atbloodoctopussword/bloodoctopussword04_00.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 100)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local pAni = obj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(0, 12); obj.setTimeEvent(1, delaySum / (hitMax + 1), hitMax, true); break; case 2: local totalDamage = receiveData.readDword(); local speedRate = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atbloodoctopussword/bloodoctopussword01finisheffect_18.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 101)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local pAni = obj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); break; } break; case SKILL_DEMONSLAYER_BLOODSEAL://喚魔 : 封之印 switch(subtype){ case 1://發射 local totalDamage = receiveData.readDword();//迦羅亞多段物理攻擊力 local sizeRate = receiveData.readDword();//印痕大小比率 local damageRate = receiveData.readDword();//印痕多段物理攻擊力百分比 local damageRate2 = receiveData.readDword();//爆炸物理攻擊力百分比 local lifeTime = sq_GetIntData(sqrChr, SKILL_DEMONSLAYER_BLOODSEAL, 2);//持續時間 local hitTime = sq_GetIntData(sqrChr, SKILL_DEMONSLAYER_BLOODSEAL, 3);//迦羅亞多段攻擊間隔 local createTime = sq_GetIntData(sqrChr, SKILL_DEMONSLAYER_BLOODSEAL, 0);//印痕掉落間隔 local lifeTime2 = sq_GetIntData(sqrChr, SKILL_DEMONSLAYER_BLOODSEAL, 5);//印痕持續時間 local hitTime2 = sq_GetIntData(sqrChr, SKILL_DEMONSLAYER_BLOODSEAL, 4);//印痕多段攻擊間隔 local movespeedRate = sq_GetLevelData(sqrChr, SKILL_DEMONSLAYER_BLOODSEAL, 1, sq_GetSkillLevel(sqrChr, SKILL_DEMONSLAYER_BLOODSEAL));//減速率 obj.getVar("custom").setInt(10, lifeTime); obj.getVar("custom").setInt(11, totalDamage); obj.getVar("custom").setInt(12, damageRate); obj.getVar("custom").setInt(13, damageRate2); obj.getVar("custom").setInt(14, hitTime); obj.getVar("custom").setInt(15, movespeedRate); obj.getVar("custom").setInt(20, createTime); obj.getVar("custom").setInt(21, lifeTime2); obj.getVar("custom").setInt(22, sizeRate); obj.getVar("custom").setInt(23, hitTime2); local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atbloodseal/bloodseal_bullet_00.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 65)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.sq_SetMoveParticle("particle/bloodseal_move.ptl", 0.0, 0.0); break; case 2://黏住主體 local lifeTime = receiveData.readDword();//持續時間 local totalDamage = receiveData.readDword();//迦羅亞多段物理攻擊力 local hitTime = receiveData.readDword();//迦羅亞多段攻擊間隔 local createTime = receiveData.readDword();//印痕掉落間隔 local lifeTime2 = receiveData.readDword();//印痕持續時間 local sizeRate = receiveData.readDword();//印痕大小比率 local damageRate = receiveData.readDword();//印痕多段物理攻擊力百分比 local hitTime2 = receiveData.readDword();//印痕多段攻擊間隔 local damageRate2 = receiveData.readDword();//爆炸物理攻擊力百分比 local totalDamage2 = totalDamage * damageRate2 / 100;//爆炸物理攻擊力 local powerDamage = totalDamage * damageRate / 100;//印痕多段物理攻擊力 local id = receiveData.readDword(); obj.getVar("custom").setInt(10, lifeTime); obj.getVar("custom").setInt(11, totalDamage); obj.getVar("custom").setInt(12, totalDamage2); obj.getVar("custom").setInt(13, hitTime); obj.getVar("custom").setInt(20, createTime); obj.getVar("custom").setInt(21, lifeTime2); obj.getVar("custom").setInt(22, powerDamage); obj.getVar("custom").setInt(23, sizeRate); obj.getVar("custom").setInt(24, hitTime2); local targetObj = sq_GetObjectByObjectId(obj, id); if(targetObj){ obj.getVar("target").clear_obj_vector(); obj.getVar("target").push_obj_vector(targetObj); sq_moveWithParent(targetObj, obj); } else sq_SendDestroyPacketPassiveObject(obj); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 65)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 3://印痕 local lifeTime2 = receiveData.readDword(); local powerDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local hitTime2 = receiveData.readDword(); obj.getVar("custom").setInt(21, lifeTime2); obj.getVar("custom").setInt(22, powerDamage); obj.getVar("custom").setInt(23, sizeRate); obj.getVar("custom").setInt(24, hitTime2); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_DEMONSLAYER_CLAWBLADE://蛇腹劍 : 纏 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local aniPath = "character/swordman/effect/animation/atthunderslash/thunderslash_shockwave.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 68)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); break; case 2: local totalDamage = receiveData.readDword(); local id = receiveData.readDword(); local hitMax = receiveData.readDword(); obj.getVar("custom").setInt(10, totalDamage); obj.getVar("custom").setInt(11, hitMax); local stateIndex = 20; local object = sq_GetObjectByObjectId(obj, id); if(!object) stateIndex = 21; if(stateIndex == 20){ obj.setTimeEvent(1, 500, hitMax - 1, false); sq_moveWithParent(object, obj); obj.getVar("targetObj").clear_obj_vector(); obj.getVar("targetObj").push_obj_vector(object); } sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 68)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.addSetStatePacket(stateIndex, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_DEMONSLAYER_DARKSTRIKE://喚魔 : 塔莫斯之襲 switch(subtype){ case 1://totalDamage, hitMax, hitTime, sizeRate, sub, damageRate, id local totalDamage = receiveData.readDword(); local hitMax = receiveData.readDword(); local hitTime = receiveData.readDword(); local sizeRate = receiveData.readDword(); local sub = receiveData.readDword(); local damageRate = receiveData.readDword(); local id = receiveData.readDword(); local totalDamage2 = totalDamage * damageRate / 100; obj.getVar("custom").setInt(10, totalDamage); obj.getVar("custom").setInt(11, hitMax); obj.getVar("custom").setInt(12, hitTime); obj.getVar("custom").setInt(13, sizeRate); obj.getVar("custom").setInt(14, sub); obj.getVar("custom").setInt(15, totalDamage2); if(id != 0){ local object = sq_GetObjectByObjectId(obj, id); if(object) sq_moveWithParent(object, obj); } obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: sqrChr.getVar("darkStrike_Attack").clear_obj_vector(); sqrChr.getVar("darkStrike_Attack").push_obj_vector(obj); local lifeTime = receiveData.readDword(); obj.setTimeEvent(2, lifeTime, 1, false); break; } break; case SKILL_DEMONSLAYER_GIGABLADE://空絕斬 : 仟刃 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atgigabladekelkusexp/gigablade_specialatk_06.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 73)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 2: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atgigabladefinishexp/gigabladeexplosion_02.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 72)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); createOnlyDrawObject_AtSwordMan_bykk(obj,"passiveobject/atswordman_bykk/demonslayer/animation/atgigabladefinishexp/floor_06.ani",true,obj.getDirection(), sq_GetXPos(obj), sq_GetYPos(obj), 0, ENUM_DRAWLAYER_BOTTOM); sq_flashScreen(obj, 0, 80, 0, 127, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); sq_flashScreen(obj, 0, 10, 400, 204, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; } break; case SKILL_DEMONSLAYER_GIGASLASH://空絕斬 : 地裂 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atgigaslash/atgigaslash_blow_ground_crack03.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 74)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); break; } break; case SKILL_DEMONSLAYER_GREED://貪欲之燔祭 break; case SKILL_DEMONSLAYER_GROUPDANCE://群魔亂舞 switch(subtype){ case 1://totalDamage, sub, id local totalDamage = receiveData.readDword(); local sub = receiveData.readDword(); local id = receiveData.readDword(); switch(sub){ case 0: local count = sq_GetIntData(sqrChr, SKILL_DEMONSLAYER_WHIPSWORDBAL, 0), isSub2 = 0; if(sq_GetSkillLevel(sqrChr, SKILL_DEMONSLAYER_QUEENOFMINE) > 0){ if(count < 6) count = 6; isSub2 = 1; } local offsetX = sq_GetIntData(sqrChr, SKILL_DEMONSLAYER_WHIPSWORDBAL, 1), offsetY = 0, isSub = 0; local skill_level = sq_GetSkillLevel(sqrChr, SKILL_DEMONSLAYER_DEVILSWORDTECH); if(skill_level > 0){offsetY = 40; isSub = 1;} obj.getVar("custom").setInt(20, count); obj.getVar("custom").setInt(21, totalDamage); obj.getVar("custom").setInt(22, isSub); obj.getVar("custom").setInt(23, isSub2); obj.getVar("custom").setInt(24, offsetX); obj.getVar("custom").setInt(25, offsetY); obj.getVar("custom").setInt(26, skill_level); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 96)); break; case 1: sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 93)); break; case 2: sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 90)); break; case 3: sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 97)); break; case 4: obj.getVar("custom").setInt(21, totalDamage); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 88)); break; } obj.getVar("custom").setInt(11, sub); local object = sq_GetObjectByObjectId(obj, id); if(!object) sq_SendDestroyPacketPassiveObject(obj); obj.getVar("target").clear_obj_vector(); obj.getVar("target").push_obj_vector(object); obj.getVar("move").setInt(10, sq_GetXPos(obj)); obj.getVar("move").setInt(11, sq_GetYPos(obj)); if(sq_getRandom(1,100) > 50){ obj.getVar("move").setInt(12, sq_GetDistancePos(sq_GetXPos(object), object.getDirection(), 150)); obj.getVar("move").setInt(13, sq_GetOppositeDirection(object.getDirection())); } else{ obj.getVar("move").setInt(12, sq_GetDistancePos(sq_GetXPos(object), object.getDirection(), -150)); obj.getVar("move").setInt(13, object.getDirection()); } sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.setTimeEvent(4, 200, 1, false); break; } break; case SKILL_DEMONSLAYER_PHNOM://喚魔 : 逆天之普諾 switch(subtype){ case 1://totalDamage, hitMax, sizeRate, damageRate local totalDamage = receiveData.readDword(); local hitMax = receiveData.readDword(); local sizeRate = receiveData.readDword(); local damageRate = receiveData.readDword(); local speedRate = receiveData.readDword(); local totalDamage2 = totalDamage * damageRate / 100; obj.getVar("custom").setInt(10, totalDamage); obj.getVar("custom").setInt(11, totalDamage2); obj.getVar("custom").setInt(12, hitMax); obj.getVar("custom").setInt(13, sizeRate); obj.getVar("custom").setInt(14, speedRate); obj.getVar("custom").setInt(15, 0); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_DEMONSLAYER_PIKESWORD://蛇腹劍 : 刺 break; case SKILL_DEMONSLAYER_PREDATORGALOA://貪食者迦羅亞 switch(subtype){ case 1://totalDamage, catchMax, hitMax, damageRate, lifeTime, hitTime, sub if(sqrChr.getVar("predatorgaloaObj").get_obj_vector_size() > 0) sqrChr.getVar("predatorgaloaObj").push_obj_vector(obj); else{ sqrChr.getVar("predatorgaloaObj").clear_obj_vector(); sqrChr.getVar("predatorgaloaObj").push_obj_vector(obj); } obj.setMapFollowParent(sqrChr); obj.setMapFollowType(1); local totalDamage = receiveData.readDword(); local catchMax = receiveData.readDword(); local hitMax = receiveData.readDword(); local damageRate = receiveData.readDword(); local lifeTime = receiveData.readDword(); local hitTime = receiveData.readDword(); local sub = receiveData.readDword(); local range = receiveData.readDword(); local skill_level = sq_GetSkillLevel(sqrChr, SKILL_DEMONSLAYER_PREDATORGALOA); local nor_hp = sq_GetLevelData(sqrChr, SKILL_DEMONSLAYER_PREDATORGALOA, 3, skill_level); local exp_hp = sq_GetLevelData(sqrChr, SKILL_DEMONSLAYER_PREDATORGALOA, 4, skill_level); local create_number = sq_GetIntData(sqrChr, SKILL_DEMONSLAYER_PREDATORGALOA, 0); local totalDamage2 = totalDamage * damageRate / 100; obj.setTimeEvent(5, lifeTime, 1, false); obj.getVar("custom").setInt(10, totalDamage); obj.getVar("custom").setInt(11, totalDamage2); obj.getVar("custom").setInt(12, catchMax); obj.getVar("custom").setInt(13, hitMax); obj.getVar("custom").setInt(14, lifeTime); obj.getVar("custom").setInt(15, hitTime); obj.getVar("custom").setInt(16, sub); obj.getVar("custom").setInt(17, nor_hp); obj.getVar("custom").setInt(18, exp_hp); obj.getVar("custom").setInt(19, range); obj.getVar("custom").setInt(20, 0); obj.getVar("custom").setInt(21, create_number); obj.getVar("tar").clear_obj_vector(); obj.getVar("tar").push_obj_vector(obj); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_DEMONSLAYER_RAGNAROK://弒神劍 : 諸神獻祭 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local hitMax = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atragnarok/attack/ratka_07.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 81)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); obj.setTimeEvent(1,delaySum / (hitMax + 1), hitMax, true); //sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); break; case 2: local totalDamage = receiveData.readDword(); local hitMax = receiveData.readDword(); local totalDamage2 = receiveData.readDword(); obj.getVar("custom").setInt(10, totalDamage); obj.getVar("custom").setInt(11, hitMax); obj.getVar("custom").setInt(12, totalDamage2); local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atragnarok/attack/ratkb_10.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); break; case 3: local totalDamage = receiveData.readDword(); local hitMax = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atragnarok/attack/ratkfloor_38.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 82)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(0, 10); obj.setTimeEvent(1,delaySum / (hitMax + 1), hitMax, true); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); break; } break; case SKILL_DEMONSLAYER_SNAKEDANCE://蛇腹劍 : 舞 break; case SKILL_DEMONSLAYER_ULTIMATEBLADE://弒神劍 : 極 switch(subtype){ case 1:// local totalDamage = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atultimateblade/downeffect_dustf02.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 85)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.setTimeEvent(1, 150, 1, false); break; case 2: local totalDamage = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atultimateblade/finishdowneffect_dustf02.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 84)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.setTimeEvent(1, 150, 1, false); break; } break; case SKILL_DEMONSLAYER_WHIPSWORDBAL://蛇腹劍 : 破 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local isSub = receiveData.readDword(); local isSub2 = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atwhipswordbal/bal_swordattack.ani"; if(isSub > 0) aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atwhipswordbal/devilswordtech/bal_swordattack_devils.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 86)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); if(isSub2 > 0){ local currentAni = obj.getCurrentAnimation(); local sizeRate = 1.2; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } break; } break; case SKILL_DEMONSLAYER_WILDWHIP://蛇腹劍 : 滅 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local delay = receiveData.readDword(); sqrChr.getVar("wildwhip_obj").clear_obj_vector(); sqrChr.getVar("wildwhip_obj").push_obj_vector(obj); local aniPath = "passiveobject/atswordman_bykk/demonslayer/animation/atwildwhip/devilswordtech/wildwhip_deviltechswordloop1.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 87)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local speedRate = 8000.0 / delay.tofloat(); local pAni = obj.getCurrentAnimation(); pAni.setSpeedRate(speedRate); break; } break; } break; local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo && sq_GetSkillLevel(sqrChr, SKILL_DEMONSLAYER_CALLDAIMUS) > 0){ local bleedingProb = sq_GetLevelData(sqrChr, SKILL_DEMONSLAYER_CALLDAIMUS, 0, sq_GetSkillLevel(sqrChr, SKILL_DEMONSLAYER_CALLDAIMUS)); local bleedingTime = sq_GetLevelData(sqrChr, SKILL_DEMONSLAYER_CALLDAIMUS, 1, sq_GetSkillLevel(sqrChr, SKILL_DEMONSLAYER_CALLDAIMUS)); local bleedingDamage = sq_GetLevelData(sqrChr, SKILL_DEMONSLAYER_CALLDAIMUS, 2, sq_GetSkillLevel(sqrChr, SKILL_DEMONSLAYER_CALLDAIMUS)); sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_BLEEDING,bleedingProb,sq_GetSkillLevel(sqrChr, 174) + 10, bleedingTime, bleedingDamage); } case 3://vagabond switch(skillIndex){ case SKILL_VAGABOND_BIGJANG://如來神掌 switch(subtype){ case 1: case 2: local totalDamage = receiveData.readDword(); local damageRate = receiveData.readDword(); local dis = receiveData.readDword(); local sizeRate = receiveData.readDword(); local sub = receiveData.readDword(); local sub2 = receiveData.readDword(); local totalDamage2 = (totalDamage.tofloat() * damageRate.tofloat() / 100.0).tointeger(); obj.getVar("custom").setInt(20, totalDamage2); obj.getVar("custom").setInt(10, sq_GetXPos(obj)); obj.getVar("custom").setInt(11, sq_GetZPos(obj)); obj.getVar("custom").setInt(12, dis); print("dis = "+dis); obj.getVar("custom").setInt(13, sizeRate); obj.getVar("custom").setInt(14, sub2); local attackIndex = 42, stateIndex = 20; if(subtype == 2) attackIndex = 39; if(sub > 0) stateIndex = 22; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.addSetStatePacket(stateIndex, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_VAGABOND_BLASTSWORD://回天璇鳴劍 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, 0, obj.getDirection(), 3, SKILL_VAGABOND_BLASTSWORD, 2, sizeRate, 0, 0, 0, 0, 0, 0, 0, 0); local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atblastsword/boom_base.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 44)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); break; case 2: local sizeRate = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atblastsword/boombottom_18.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); break; } break; case SKILL_VAGABOND_COALBAN://遊龍掌 switch(subtype){ case 1://totalDamage, sizeRate, dis, partl, angle, sub local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local dis = receiveData.readDword(); local partl = receiveData.readDword(); local angle = receiveData.readDword(); local sub = receiveData.readDword(); obj.getVar("custom").setInt(10, dis); obj.getVar("custom").setInt(11, sq_GetXPos(obj)); obj.getVar("custom").setInt(12, sq_GetZPos(obj)); obj.getVar("custom").setInt(15, angle); local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atcoalban/strongshooting_04.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local MoveZ = 100,angle = 45; switch(partl){ case 2: MoveZ = -100;angle = -45; break; case 3: MoveZ = -10;angle = -5; break; case 4: MoveZ = 30;angle = 10; break; case 11: MoveZ = 50;angle = 45; break; case 12: MoveZ = -50;angle = -45; break; case 13: MoveZ = -5;angle = -5; break; case 14: MoveZ = 15;angle = 10; break; case 21: MoveZ = 150;angle = 45; break; case 22: MoveZ = -150;angle = -45; break; case 23: MoveZ = -15;angle = -5; break; case 24: MoveZ = 45;angle = 10; break; } obj.getVar("custom").setInt(13, MoveZ); obj.getVar("custom").setInt(14, angle); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 45)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 130.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); obj.setTimeEvent(1, 100, -1, false); break; } break; case SKILL_VAGABOND_COMETBLADE://花舞仟魂殺 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local delaySum = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atcometblade/cometblade03atkb_body.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_moveWithParent(sqrChr, obj); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 61)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; local speedRate = 4500.0 / delaySum.tofloat(); currentAni.setSpeedRate(speedRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); break; case 2: local sub = receiveData.readDword(); local sizeRateMin = receiveData.readDword(); local sizeRateMax = receiveData.readDword(); local rotateSetMin = receiveData.readDword(); local rotateSetMax = receiveData.readDword(); local createMax = receiveData.readDword(); local createFreq = receiveData.readDword(); obj.getVar("custom").setInt(10, sub); obj.getVar("custom").setInt(11, sizeRateMin); obj.getVar("custom").setInt(12, sizeRateMax); obj.getVar("custom").setInt(13, rotateSetMin); obj.getVar("custom").setInt(14, rotateSetMax); obj.getVar("custom").setInt(15, createMax); obj.setTimeEvent(1, createFreq * 5, createMax, false); break; case 3: local sub = receiveData.readDword(); local sizeRate = receiveData.readDword(); local rotateSet = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atcometblade/leaf.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); sq_SetCustomRotate(obj, sq_ToRadian(rotateSet.tofloat())); switch(sub){ case 1: obj.sq_SetMoveParticle("particle/atcometbladefinishleaf.ptl", 0.0, 0.0); break; case 2: obj.sq_SetMoveParticle("particle/atcometbladefinishmiddleleaf.ptl", 0.0, 0.0); break; case 3: obj.sq_SetMoveParticle("particle/atcometbladefinishsmallleaf.ptl", 0.0, 0.0); break; } break; } break; case SKILL_VAGABOND_DUALWEAPON://兩儀功 break; case SKILL_VAGABOND_EARTHPRESSURE://碎巖裂地掌 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local range = receiveData.readDword(); local delay = receiveData.readDword(); local sizeRate = range.tofloat() / 130.0; print(sizeRate); local speedRate = 6000.0 / delay.tofloat(); local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atearthpressure/flooreffect.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 46)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); local attackInfo = sq_GetCurrentAttackInfo(obj); sq_SetAddWeaponDamage(attackInfo, true); local currentAni = obj.getCurrentAnimation(); sq_AddAttackBox(currentAni, -270,-54,-15,540,108,137); currentAni.setSpeedRate(speedRate); currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); break; } break; case SKILL_VAGABOND_FATALFLOWER://花開寒影 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local hitMax = receiveData.readDword(); local damageRate = receiveData.readDword(); local delay = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atfatalflower/newhellfireb_21.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 47)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local totalDamage2 = totalDamage * damageRate / 100; obj.getVar("custom").setInt(10, totalDamage2); obj.getVar("custom").setInt(11, hitMax); local speedRate = 5400.0 / delay.tofloat(); obj.getVar("custom").setInt(12, (speedRate * 100).tointeger()); local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(speedRate); break; case 2: local sub = receiveData.readDword(); local speedRate = receiveData.readDword(); speedRate = speedRate.tofloat() / 100.0; local charAni = sq_GetCustomAni(sqrChr, sub); sq_Rewind(charAni); obj.setCurrentAnimation(charAni); local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(speedRate); break; } break; case SKILL_VAGABOND_FISTOFEXPLOSION://湮烈掌 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local lifeTime = receiveData.readDword(); local hitMax = receiveData.readDword(); local damageRate = receiveData.readDword(); local sub = receiveData.readDword(); local totalDamage2 = (totalDamage.tofloat() * damageRate.tofloat() / 100.0).tointeger(); obj.getVar("custom").setInt(10, totalDamage2); obj.getVar("custom").setInt(11, lifeTime); obj.getVar("custom").setInt(12, hitMax); obj.getVar("custom").setInt(13, sub); local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atfistofexplosion/shootfront_08.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 49)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atswordman_bykk/vagabond/animation/atfistofexplosion/shootback_04.ani"),true); sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); break; case 2: local totalDamage = receiveData.readDword(); local lifeTime = receiveData.readDword(); local hitMax = receiveData.readDword(); local sub = receiveData.readDword(); local group = receiveData.readDword(); local uniqueId = receiveData.readDword(); local targetObj = sq_GetObject(sqrChr, group, uniqueId); if(!targetObj) sq_SendDestroyPacketPassiveObject(obj); obj.getVar("custom").setInt(10, totalDamage); obj.getVar("custom").setInt(11, lifeTime); obj.getVar("custom").setInt(12, hitMax); obj.getVar("custom").setInt(13, sub); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 49)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage * 5 / 100); sq_moveWithParent(targetObj, obj); obj.getVar("targetObj").clear_obj_vector(); obj.getVar("targetObj").push_obj_vector(targetObj); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_VAGABOND_FLOWERBLADEDANCE://蓮花劍舞 break; case SKILL_VAGABOND_GONEWITHTHEPETAL://落英驚鴻掌 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local hitMax = receiveData.readDword(); local damageRate = receiveData.readDword(); local group = receiveData.readDword(); local uniqueId = receiveData.readDword(); local targetObj = sq_GetObject(sqrChr, group, uniqueId); if(!targetObj) sq_SendDestroyPacketPassiveObject(obj); local totalDamage2 = totalDamage * damageRate / 100; //print(totalDamage+" && "+totalDamage2); obj.getVar("custom").setInt(10, totalDamage2); obj.getVar("custom").setInt(11, hitMax); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 62)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); if(hitMax > 1) obj.setTimeEvent(1, 150, hitMax, false); else obj.setTimeEvent(2, 150, 1, true); sq_moveWithParent(targetObj, obj); obj.getVar("targetObj").clear_obj_vector(); obj.getVar("targetObj").push_obj_vector(targetObj); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_VAGABOND_HERMITTRIPLESTEP://櫻花劫 break; case SKILL_VAGABOND_INHALATION://四象引 switch(subtype){ case 1: local range = receiveData.readDword(); local aniPath = "character/swordman/effect/animation/atinhalation/bounds_01bottom.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local sizeRate = range.tofloat() / 300.0; local currentAni = obj.getCurrentAnimation(); currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); range = range / 2; 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)){ local activeObj = sq_GetCNRDObjectToActiveObject(object); if(sq_Abs(sq_GetXPos(activeObj) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(activeObj) - sq_GetYPos(obj)) <= range / 2 && sq_GetZPos(activeObj) <= 100){ if(sq_IsHoldable(obj,activeObj) && sq_IsGrabable(obj,activeObj) && !sq_IsFixture(activeObj)){ sqrChr.getVar("inhalation_target").push_obj_vector(activeObj); local pooledObj = createOnlyDrawObject_AtSwordMan_bykk(obj, "character/swordman/effect/animation/atinhalation/mon_00.ani", true, obj.getDirection(), sq_GetXPos(activeObj), sq_GetYPos(activeObj), sq_GetZPos(activeObj), ENUM_DRAWLAYER_NORMAL); sq_moveWithParent(activeObj, pooledObj); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, "character/atswordman/3_vagabond/inhalation/ap_inhalation.nut", true); // AddAppendage.sq_SetValidTime(600); sq_MoveToAppendageForce(activeObj, obj, activeObj, 0, 0, 100, 500, true, AddAppendage); sq_HoldAndDelayDie(activeObj, obj, true, true, true, 0, 100, ENUM_DIRECTION_NEUTRAL , AddAppendage); } else if(sq_IsFixture(activeObj)){ local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, "character/atswordman/3_vagabond/inhalation/ap_inhalation.nut", true); sq_HoldAndDelayDie(activeObj, obj, true, true, true, 0, 100, ENUM_DIRECTION_NEUTRAL , AddAppendage); AddAppendage.sq_SetValidTime(2000); } } } } break; case 2: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atinhalation/shockwave.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 52)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sizeRate = sizeRate.tofloat() / 100.0; local currentAni = obj.getCurrentAnimation(); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, 1.0, 1.0); break; } break; case SKILL_VAGABOND_MOONLIGHTSLASH://飛花逐月 break; case SKILL_VAGABOND_NEARBLOW://圓舞斬 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local range = receiveData.readDword(); local sizeRate = range.tofloat() / 150.0; local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atnearblow/pierce_throw(d).ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 53)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); break; case 2: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local aniPath = "character/swordman/effect/animation/atspaceignite/explosion_ex.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); sq_AddAttackBox(currentAni, -171, -40, -58, 344, 80, 110); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 53)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sizeRate = sizeRate.tofloat() / 100.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); break; } break; case SKILL_VAGABOND_OVERBLOWSLASH://亂花葬 switch(subtype){ case 1://totalDamage,hitMax,sizeRate,damageRate local totalDamage = receiveData.readDword(); local hitMax = receiveData.readDword(); local sizeRate = receiveData.readDword(); local damageRate = receiveData.readDword(); local delaySum = receiveData.readDword(); local totalDamage2 = (totalDamage.tofloat() * damageRate.tofloat() / 100.0).tointeger(); obj.getVar("custom").setInt(10, totalDamage2); obj.getVar("custom").setInt(11, hitMax); local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atoverblowslash/overblowslashneweffect_23.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 54));//55 sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sizeRate = sizeRate.tofloat() / 100.0; local currentAni = obj.getCurrentAnimation(); currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); local speedRate = 3500.0 / delaySum.tofloat(); currentAni.setSpeedRate(speedRate); local delay = currentAni.getDelaySum(0,14); local delay2 = currentAni.getDelaySum(0,19); obj.setTimeEvent(1, delay, 1, false); obj.setTimeEvent(3, delay2, 1, false); break; } break; case SKILL_VAGABOND_RAPIDSTEP://一花渡江 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local sub = receiveData.readDword(); obj.getVar("custom").setInt(10, sub); local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atrapidstep/explosionarea_0"+(sub - 1).tostring()+".ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 56)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sizeRate = sizeRate.tofloat() / 100.0; local currentAni = obj.getCurrentAnimation(); currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); currentAni.setSpeedRate(150.0); break; } break; case SKILL_VAGABOND_REVOLVINGSWORD://輪回劍 break; case SKILL_VAGABOND_SOARCUT://櫻落斬 break; case SKILL_VAGABOND_THREESIDE://三連斬 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atthreeside/threeside_03.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 57)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local pAni = obj.getCurrentAnimation(); pAni.setSpeedRate(250.0); break; case 2: local totalDamage = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atthreeside/threeside_ex_threeside_00.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 57)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.sq_SetMoveParticle("particle/threeside.ptl", 0.0, 0.0); sq_SetSpeedToMoveParticle(obj,0,500); break; } break; case SKILL_VAGABOND_ZWEIVOLTAGEEX://嘯空十字斬 switch(subtype){ case 2: sqrChr.getVar("zwei").clear_obj_vector(); sqrChr.getVar("zwei").push_obj_vector(obj); case 1: local totalDamage = receiveData.readDword(); local lifeTime = receiveData.readDword(); local damageRate = receiveData.readDword(); local isStone = receiveData.readDword(); local totalDamage2 = totalDamage * damageRate / 100; obj.getVar("custom").setInt(10, totalDamage2); obj.getVar("custom").setInt(11, lifeTime); obj.getVar("custom").setInt(12, isStone); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 59)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 3: local totalDamage = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/vagabond/animation/atzweivoltage/explosion/zweivoltage_finisheff_leaf_00.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 58)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; } break; } break; case 4: switch(skillIndex){ case SKILL_DARKEMPLER_BLACKMIRROR://魔鏡幻影陣 switch(subtype){ case 1://totalDamage,passive_hp,damageRate,time,count,decreaseRate,speedRate local totalDamage = receiveData.readDword(); local passive_hp = receiveData.readDword(); local time = receiveData.readDword(); local count = receiveData.readDword(); local decreaseRate = receiveData.readDword(); local speedRate = receiveData.readDword(); local damageRate = receiveData.readDword(); local totalDamage2 = totalDamage * damageRate / 100; obj.getVar("custom").setInt(1, totalDamage); obj.getVar("custom").setInt(2, passive_hp); obj.getVar("custom").setInt(3, time); obj.getVar("custom").setInt(4, count); obj.getVar("custom").setInt(5, decreaseRate); obj.getVar("custom").setInt(6, speedRate); obj.getVar("custom").setInt(7, totalDamage2); local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atblackmirror/mirror_attackbox_dummy.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 1)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sq_AddDrawOnlyAniFromParent(obj,"character/swordman/effect/animation/atblackmirror/bottom_00.ani",0,0,0); createOnlyDrawObject_AtSwordMan_bykk(obj,"character/swordman/effect/animation/atblackmirror/bottom_00.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj),ENUM_DRAWLAYER_BOTTOM); createOnlyDrawObject_AtSwordMan_bykk(obj,"character/swordman/effect/animation/atblackmirror/move_shadow_bykk.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj),ENUM_DRAWLAYER_NORMAL); obj.setTimeEvent(0,4460,1,false); obj.setTimeEvent(2,300,1,false); break; case 2: local totalDamage = receiveData.readDword(); local sub = receiveData.readDword(); obj.getVar("custom").setInt(0, sub); obj.getVar("custom").setInt(1, totalDamage); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_DARKEMPLER_BUCKSHOT://釋魂飛彈 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); obj.getVar("custom").setInt(10,totalDamage); local sub = receiveData.readDword(); local direction = receiveData.readDword(); obj.getVar("custom").setInt(1,sub); obj.getVar("custom").setInt(2,direction); obj.getVar("custom").setInt(3,sq_GetXPos(obj)); obj.getVar("custom").setInt(5,sq_GetZPos(obj)); switch(sub){ case 1: obj.getVar("custom").setFloat(0,0.1); break; case 2: obj.getVar("custom").setFloat(0,0.15); break; case 3: obj.getVar("custom").setFloat(0,0.2); break; case 4: obj.getVar("custom").setFloat(0,0.25); break; case 5: obj.getVar("custom").setInt(2,sq_GetOppositeDirection(direction));obj.getVar("custom").setFloat(0,0.1); break; case 6: obj.getVar("custom").setInt(2,sq_GetOppositeDirection(direction));obj.getVar("custom").setFloat(0,0.15); break; case 7: obj.getVar("custom").setInt(2,sq_GetOppositeDirection(direction));obj.getVar("custom").setFloat(0,0.2); break; case 8: obj.getVar("custom").setInt(2,sq_GetOppositeDirection(direction));obj.getVar("custom").setFloat(0,0.25); break; } local group = receiveData.readDword(); local uniqueId = receiveData.readDword(); local targetObj = sq_GetObject(sqrChr, group, uniqueId); local create_number = receiveData.readDword(); obj.getVar("custom").setInt(4,create_number); obj.getVar().clear_obj_vector(); obj.getVar().push_obj_vector(targetObj); sq_AddDrawOnlyAniFromParent(obj,"passiveobject/atswordman_bykk/darktempler/animation/atbuckshot/buckshot_bulletshooter.ani",-30,0,0); obj.setTimeEvent(1,240,1,false); break; case 2: local totalDamage = receiveData.readDword(); local sub = receiveData.readDword(); local direction = receiveData.readDword(); local group = receiveData.readDword(); local uniqueId = receiveData.readDword(); local create_number = receiveData.readDword(); obj.getVar("custom").setInt(0,totalDamage); obj.getVar("custom").setInt(1,sub); obj.getVar("custom").setInt(2,direction); obj.getVar("custom").setInt(3,group); obj.getVar("custom").setInt(4,uniqueId); obj.getVar("custom").setInt(5,create_number); local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atbuckshot/buckshot_bulletshooter.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); break; case 3: local totalDamage = receiveData.readDword(); local direction = receiveData.readDword(); local createMin = receiveData.readDword(); local createMax = receiveData.readDword(); local enemyMax = receiveData.readDword(); local soulnum = receiveData.readDword(); totalDamage = totalDamage * soulnum; obj.getVar("custom").setInt(0,totalDamage); obj.getVar("custom").setInt(1,direction); obj.getVar("custom").setInt(2,enemyMax); obj.getVar("custom").setInt(3,soulnum); local boss_number = sqrChr.getVar("targetBoss").get_obj_vector_size(); local named_number = sqrChr.getVar("targetNamed").get_obj_vector_size(); local normal_number = sqrChr.getVar("targetNormal").get_obj_vector_size(); local loadSlot = sqrChr.sq_GetSkillLoad(65);//SKILL_DARKEMPLER_BUCKSHOT if(!loadSlot) sq_SendDestroyPacketPassiveObject(obj); local slotCount = loadSlot.getRemainLoadNumber(); if(slotCount < createMin * soulnum) sq_SendDestroyPacketPassiveObject(obj); if(createMax * soulnum > slotCount) createMax = (slotCount / soulnum).tointeger(); if((boss_number + named_number + normal_number) * enemyMax < createMax) createMax = (boss_number + named_number + normal_number) * enemyMax; obj.getVar("targetObj").clear_obj_vector(); for(local i = 0; i < boss_number; i++){ local bossObj = sqrChr.getVar("targetBoss").get_obj_vector(i); if(bossObj) obj.getVar("targetObj").push_obj_vector(bossObj) } for(local i = 0; i < named_number; i++){ local namedObj = sqrChr.getVar("targetNamed").get_obj_vector(i); if(namedObj) obj.getVar("targetObj").push_obj_vector(namedObj) } for(local i = 0; i < normal_number; i++){ local normalObj = sqrChr.getVar("targetNormal").get_obj_vector(i); if(normalObj) obj.getVar("targetObj").push_obj_vector(normalObj) } obj.setTimeEvent(10,30,createMax,true); obj.setTimeEvent(11,40*createMax,1,false); obj.getVar("custom").setInt(20,0); break; } break; case SKILL_DARKEMPLER_DEADLYCAPE://暗影囚殺 switch(subtype){ case 1: sqrChr.getVar("deadlycape_effect").clear_obj_vector(); sqrChr.getVar("deadlycape_effect").push_obj_vector(obj); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: local totalDamage = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atdeadlycape/ex_exp_normal_0.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 4)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; } break; case SKILL_DARKEMPLER_DESTROYER://暗影盛宴 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atdestroyer/boom/boom_attackbox_dummy.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 5)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sizeRate = sizeRate.tofloat() / 100.0; local currentAni = obj.getCurrentAnimation(); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, 1.0, 1.0); break; case 2: local totalDamage = receiveData.readDword(); local delay = receiveData.readDword(); obj.getVar("custom").setInt(10, totalDamage); obj.getVar("custom").setInt(11, delay); obj.getVar("custom").setInt(12, sq_GetXPos(obj)); obj.getVar("custom").setInt(13, sq_GetZPos(obj)); obj.getVar("custom").setInt(14, 300); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_DARKEMPLER_DEUSEXRAY://天罰死光 switch(subtype){ case 1: sqrChr.getVar("deusexray").clear_obj_vector(); sqrChr.getVar("deusexray").push_obj_vector(obj); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: local totalDamage = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atdeusexray/finishfront_23.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local pAni = obj.getCurrentAnimation(); pAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atswordman_bykk/darktempler/animation/atdeusexray/finishback_03.ani"),true); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 9)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 3: local totalDamage = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atdeusexray/talisman/finishfront1_talisman_finishfront_23.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local pAni = obj.getCurrentAnimation(); pAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/atswordman_bykk/darktempler/animation/atdeusexray/talisman/finishback_talisman_finishback_03.ani"),true); pAni.setSpeedRate(200.0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 9)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; } break; case SKILL_DARKEMPLER_DOOMSDAY://末日殺戮 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local hitMax = receiveData.readDword(); obj.getVar("custom").setInt(10, hitMax); local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atdoomsday/finishmoveeffect.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 11)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 2: sqrChr.getVar("doomsday_effect").clear_obj_vector(); sqrChr.getVar("doomsday_effect").push_obj_vector(obj); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 3: sqrChr.getVar("doomsday_effect_b").clear_obj_vector(); sqrChr.getVar("doomsday_effect_b").push_obj_vector(obj); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_DARKEMPLER_EVOLVE://汲魂之力 break; case SKILL_DARKEMPLER_HIDDENBLADE://影刃 break; case SKILL_DARKEMPLER_IMMOLATION://死亡獻祭 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atimmolation/boom_06.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 19)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 2: sqrChr.getVar("immolation_magiccircle").clear_obj_vector(); sqrChr.getVar("immolation_magiccircle").push_obj_vector(obj); local totalDamage = receiveData.readDword(); local hitTime = receiveData.readDword(); local level = receiveData.readDword(); local time = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 20)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.setTimeEvent(1, hitTime, -1, false); local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_SLOW, 100, level, time, 0); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 3: local totalDamage = receiveData.readDword(); local hitTime = receiveData.readDword(); local level = receiveData.readDword(); local time = receiveData.readDword(); local damageRate = receiveData.readDword(); local lifeTime = receiveData.readDword(); local totalDamage2 = totalDamage * damageRate / 100; obj.getVar("custom").setInt(10,totalDamage2); obj.getVar("custom").setInt(11,lifeTime); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 20)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.setTimeEvent(1, hitTime, -1, false); local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_SLOW, 100, level, time, 0); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_DARKEMPLER_JIHAD://天罰之劍 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local damageRate = receiveData.readDword(); local totalDamage2 = totalDamage * damageRate / 100; obj.getVar("custom").setInt(10, totalDamage2); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 22)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 21)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_DARKEMPLER_LACERTHORNS://暗影綻放:死亡荊棘 switch(subtype){ case 1: local aniPath = "character/swordman/effect/animation/atlacerthorns/atlacerthornsboom_03.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); obj.setTimeEvent(1, 200, 1, false); break; case 2: local aniPath = "character/swordman/effect/animation/atlacerthorns/atlacerthornsboom_06.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); break; } break; case SKILL_DARKEMPLER_LOYALSLAVE://靈魂傀儡 switch(subtype){ case 1: local lifeTime = receiveData.readDword(); local hitTime = receiveData.readDword(); local group = receiveData.readDword(); local uniqueId = receiveData.readDword(); obj.getVar("custom").setInt(10, lifeTime); obj.getVar("custom").setInt(11, hitTime); local targetObj = sq_GetObject(sqrChr, group, uniqueId); local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); activeObj.getVar("loyalslave").clear_ct_vector(); activeObj.getVar("loyalslave").push_ct_vector(); obj.getVar().clear_obj_vector(); obj.getVar().push_obj_vector(targetObj); sq_moveWithParent(targetObj, obj); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_DARKEMPLER_MADNESS://釋魂狂怒 switch(subtype){ case 1: sqrChr.getVar("madness").clear_obj_vector(); sqrChr.getVar("madness").push_obj_vector(obj); local range = receiveData.readDword(); local DelaySum = receiveData.readDword(); local totalDamage = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atmadness/madness_magiccircle.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 23)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); local sizeRate = range.tofloat() / 225.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); 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)){ local activeObj = sq_GetCNRDObjectToActiveObject(object); if(sq_Abs(sq_GetXPos(activeObj) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(activeObj) - sq_GetYPos(obj)) <= range / 2 && sq_GetZPos(activeObj) <= 100){ if(sq_IsHoldable(obj,activeObj) && sq_IsGrabable(obj,activeObj) && !sq_IsFixture(activeObj)){ sqrChr.getVar("madness_target").push_obj_vector(activeObj); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, "character/atswordman/4_darktempler/madness/ap_madness.nut", true); AddAppendage.sq_SetValidTime(DelaySum + 300); sq_MoveToAppendageForce(activeObj, obj, activeObj, 0, 0, 80, 300, true, AddAppendage); sq_HoldAndDelayDie(activeObj, obj, true, true, true, 0, 100, ENUM_DIRECTION_NEUTRAL , AddAppendage); } } } } break; case 2: local speedRate = receiveData.readDword(); local sub = receiveData.readDword(); local direction = receiveData.readDword(); local baseX = receiveData.readDword(); local baseY = receiveData.readDword(); local totalDamage = receiveData.readDword(); local isdamageSet = receiveData.readDword(); local range = receiveData.readDword(); obj.getVar("custom").setInt(10,speedRate); obj.getVar("custom").setInt(11,sub); obj.getVar("custom").setInt(12,direction); obj.getVar("custom").setInt(13,sq_GetXPos(obj)); obj.getVar("custom").setInt(14,sq_GetZPos(obj)); obj.getVar("custom").setInt(15,baseX); obj.getVar("custom").setInt(16,baseY); obj.getVar("custom").setInt(20,isdamageSet); obj.getVar("custom").setInt(21,range); switch(sub){ case 1: obj.getVar("custom").setFloat(0,0.1); break; case 2: obj.getVar("custom").setFloat(0,0.15); break; case 3: obj.getVar("custom").setFloat(0,0.2); break; case 4: obj.getVar("custom").setFloat(0,0.25); break; case 5: obj.getVar("custom").setInt(12,sq_GetOppositeDirection(direction));obj.getVar("custom").setFloat(0,0.1); break; case 6: obj.getVar("custom").setInt(12,sq_GetOppositeDirection(direction));obj.getVar("custom").setFloat(0,0.15); break; case 7: obj.getVar("custom").setInt(12,sq_GetOppositeDirection(direction));obj.getVar("custom").setFloat(0,0.2); break; case 8: obj.getVar("custom").setInt(12,sq_GetOppositeDirection(direction));obj.getVar("custom").setFloat(0,0.25); break; } // sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 23)); // sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 3: local speedRate = receiveData.readDword(); local totalDamage = receiveData.readDword(); local range = receiveData.readDword(); obj.getVar("custom").setInt(10,speedRate); obj.getVar("custom").setInt(11,totalDamage); obj.getVar("custom").setInt(12,range); obj.setTimeEvent(12, 240 / speedRate * 100, 1, false); break; } break; case SKILL_DARKEMPLER_PUNISHMENT://神罰·滅世裁決 switch(subtype){ case 1: sqrChr.getVar("punishment_attack3").clear_obj_vector(); sqrChr.getVar("punishment_attack3").push_obj_vector(obj); local range = receiveData.readDword() + 999; local aniPath = "character/swordman/effect/animation/atpunishment/casting/atpunishment_magic_circle4.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); 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){ local activeObj = sq_GetCNRDObjectToActiveObject(object); local apdPath = "character/atswordman/4_darktempler/punishment/ap_punishment.nut"; local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, SKILL_DARKEMPLER_PUNISHMENT, false, apdPath, true); sq_HoldAndDelayDie(activeObj, obj, true, true, true, 0, 100, ENUM_DIRECTION_NEUTRAL, AddAppendage); sqrChr.getVar("punishment_target").push_obj_vector(activeObj); } } break; case 2: sqrChr.getVar("punishment_attack").clear_obj_vector(); sqrChr.getVar("punishment_attack").push_obj_vector(obj); local aniPath = "character/swordman/atanimation/punishment_attack_motion2.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); obj.getVar("punishment_base").setInt(10, sq_GetXPos(obj)); break; case 3: sqrChr.getVar("punishment_attack2").clear_obj_vector(); sqrChr.getVar("punishment_attack2").push_obj_vector(obj); local aniPath = "character/swordman/effect/animation/atpunishment/attack/atpunishment_attack_eff2_1.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local pAni = obj.getCurrentAnimation(); break; } break; case SKILL_DARKEMPLER_SCAFFOLD://暗影禁錮 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local totalDamage2 = receiveData.readDword(); local lifeTime = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage); obj.getVar("custom").setInt(1, totalDamage2); obj.getVar("custom").setInt(2, lifeTime); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: local totalDamage = receiveData.readDword(); local lifeTime = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage); obj.getVar("custom").setInt(1, lifeTime); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_DARKEMPLER_SHADOWBINDING://暗影纏襲 switch(subtype){ case 1: sqrChr.getVar("bindingObj").clear_obj_vector(); sqrChr.getVar("bindingObj").push_obj_vector(obj); local totalDamage = receiveData.readDword(); local damageRate = receiveData.readDword(); local lifeTime = receiveData.readDword(); local totalDamage2 = totalDamage * damageRate / 100; obj.getVar("custom").setInt(0, totalDamage); obj.getVar("custom").setInt(1, totalDamage2); obj.getVar("custom").setInt(2, lifeTime); obj.getVar("custom").setInt(3, 160); obj.getVar("custom").setInt(4, sq_GetXPos(obj)); obj.getVar("custom").setInt(5, sq_GetYPos(obj)); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: local totalDamage = receiveData.readDword(); local uniqueId = receiveData.readDword(); obj.getVar("custom").setInt(0, uniqueId); if(sqrChr.getVar("binding").get_obj_vector_size() <= 0) sqrChr.getVar("binding").clear_obj_vector(); sqrChr.getVar("binding").push_obj_vector(obj); local aniPath = "character/swordman/effect/animation/atshadowbinding/monster_shadowbinding_monster_front.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 27)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.setTimeEvent(4,400,-1,true); break; case 3: local totalDamage = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atshadowbinding/drill_eff_03.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 26)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; } break; case SKILL_DARKEMPLER_SHADOWHARVEST://暗影旋渦 switch(subtype){ case 1://武器 local totalDamage = receiveData.readDword(); local totalDamage2 = receiveData.readDword(); local range = receiveData.readDword(); local lifeTime = receiveData.readDword(); local hitTime = receiveData.readDword(); local isSeal = receiveData.readDword(); local passive_level = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage2); obj.getVar("custom").setInt(1, range); obj.getVar("custom").setInt(2, lifeTime); obj.getVar("custom").setInt(3, hitTime); obj.getVar("custom").setInt(4, isSeal); obj.getVar("custom").setInt(5, totalDamage); obj.getVar("custom").setInt(10, passive_level); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 31)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2://旋渦 local totalDamage = receiveData.readDword(); local range = receiveData.readDword(); local lifeTime = receiveData.readDword(); local hitTime = receiveData.readDword(); local isSeal = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage); obj.getVar("custom").setInt(1, range); obj.getVar("custom").setInt(2, lifeTime); obj.getVar("custom").setInt(3, hitTime); obj.getVar("custom").setInt(4, isSeal); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_DARKEMPLER_SHADOWLANCER://暗影之矛 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local hitMax = receiveData.readDword(); local speedRate = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atshadowlancer/05_shadow_sword.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 32)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local pAni = obj.getCurrentAnimation(); pAni.setSpeedRate(speedRate.tofloat()); local DelaySum = pAni.getDelaySum(false); obj.setTimeEvent(1,DelaySum/(hitMax*2),hitMax,false); sq_moveWithParent(sqrChr, obj); break; } break; case SKILL_DARKEMPLER_SHADOWPUPPET://魅影暗魂斬 switch(subtype){ case 1://邪光totalDamage,lifeTime,hitTime local totalDamage = receiveData.readDword(); local lifeTime = receiveData.readDword(); local hitTime = receiveData.readDword(); local sub = receiveData.readDword(); local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atshadowpuppet/object_shadowpuppet_finish_normal.ani"; if(sub > 0) aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atshadowpuppet/lv95passive/shootingblade_00.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 35)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.sq_SetMoveParticle("particle/shadowpuppet.ptl", 0.0, 0.0); sq_SetSpeedToMoveParticle(obj,0,500); obj.setTimeEvent(1, lifeTime, 1, false); obj.setTimeEvent(2, hitTime, -1, false); break; case 2://幻影 local totalDamage = receiveData.readDword(); local lifeTime = receiveData.readDword(); local hitTime = receiveData.readDword(); local direction = receiveData.readDword(); local sub = receiveData.readDword(); obj.getVar("custom").setInt(0, totalDamage); obj.getVar("custom").setInt(1, lifeTime); obj.getVar("custom").setInt(2, hitTime); obj.getVar("custom").setInt(3, direction); obj.getVar("custom").setInt(4, sub); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 34)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 3: local aniPath = "passiveobject/atswordman_bykk/darktempler/animation/atshadowpuppet/_puppetdash_shadowpuppet_dash.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); obj.getVar("custom").setInt(0, sq_GetXPos(obj)); break; } break; case SKILL_DARKEMPLER_SOULDRAIN://靈魂攝取 switch(subtype){ case 1://幻影 local totalDamage = receiveData.readDword(); local lifeTime = receiveData.readDword(); local enemyMax = receiveData.readDword(); local hitMax = receiveData.readDword(); local range = receiveData.readDword(); local hitTime = receiveData.readDword(); sqrChr.getVar("souldrain").push_obj_vector(obj); local number = sqrChr.getVar("souldrain").get_obj_vector_size(); obj.getVar("custom").setInt(0, totalDamage); obj.getVar("custom").setInt(1, lifeTime); obj.getVar("custom").setInt(2, enemyMax); obj.getVar("custom").setInt(3, hitMax); obj.getVar("custom").setInt(4, range); obj.getVar("custom").setInt(5, hitTime); obj.getVar("custom").setInt(6, number); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2://攻擊特效START case 3://攻擊特效LOOP case 4://攻擊特效END local totalDamage = receiveData.readDword(); local uniqueId = receiveData.readDword(); obj.getVar("custom").setInt(0, uniqueId); local aniPath1 = "character/swordman/effect/animation/atsouldrain/"; local aniPath2 = "firstboom_01.ani"; if(subtype == 3) aniPath2 = "loopboom_01.ani"; if(subtype == 4) aniPath2 = "lastboom_02.ani"; local ani = sq_CreateAnimation("",aniPath1 + aniPath2); obj.setCurrentAnimation(ani); local attackIndex = 38; if(subtype == 3) attackIndex = 37; if(subtype == 4) attackIndex = 36; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.setTimeEvent(3, 80, 1, false); break; } break; case SKILL_DARKEMPLER_STARFALL://魔影轟殺 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local range = receiveData.readDword(); local sub = receiveData.readDword(); obj.getVar("custom").setInt(10, totalDamage); local boss_number = 0; local named_number = 0; obj.getVar("target").clear_obj_vector(); 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); if(sq_IsBoss(activeObj)){ boss_number = boss_number + 1; obj.getVar("target").push_obj_vector(activeObj); } else if(sq_IsNamed(activeObj)){ named_number = named_number + 1; obj.getVar("target").push_obj_vector(activeObj); } } } if(boss_number < 1 && named_number < 1){ local targetObj = obj.sq_FindFirstTarget(0, range, range / 2, range); if(targetObj) obj.getVar("target").push_obj_vector(targetObj); } if(obj.getVar("target").get_obj_vector_size() > 0) obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); else{ local disX = sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(),(sub-1) * 50); sq_setCurrentAxisPos(obj, 0, disX); obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); } break; } break; } break; } local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo){ local element_kk_fire = sqrChr.getVar("element_kk").getInt(0); local element_kk_water = sqrChr.getVar("element_kk").getInt(1); local element_kk_dark = sqrChr.getVar("element_kk").getInt(2); local element_kk_light = sqrChr.getVar("element_kk").getInt(3); if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE); if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER); if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK); if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT); } }