function setCustomData_po_witch_bykk_kak(obj, receiveData) { if(!obj) return; local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); if(!sqrChr) return; local skillIndex = receiveData.readDword(); local subtype = receiveData.readDword(); obj.getVar("skillIndex").clear_vector(); obj.getVar("skillIndex").push_vector(skillIndex); obj.getVar("subtype").clear_vector(); obj.getVar("subtype").push_vector(subtype); switch(skillIndex){ case SKILL_BYKK_ACIDCLOUD://魔道酸雨雲 switch(subtype){ case 1://雲 local totalDamage = receiveData.readDword(); local lifeTime = receiveData.readDword(); local hitTime = receiveData.readDword(); local successType = receiveData.readDword(); local totalDamage2 = receiveData.readDword(); local sizeRate = 100 + sq_GetLevelData(sqrChr, SKILL_BYKK_ACIDCLOUD, 6, sq_GetSkillLevel(sqrChr, SKILL_BYKK_ACIDCLOUD)); obj.getVar("custom").clear_vector(); obj.getVar("custom").push_vector(successType); obj.getVar("custom").push_vector(lifeTime); local lightningtime = sq_GetLevelData(sqrChr, SKILL_BYKK_ACIDCLOUD, 9, sq_GetSkillLevel(sqrChr, SKILL_BYKK_ACIDCLOUD)); if(successType >= 3){ local speedRate = sq_GetLevelData(sqrChr, SKILL_BYKK_LAPISPHILOSOPHORUM, 3, sq_GetSkillLevel(sqrChr, SKILL_BYKK_LAPISPHILOSOPHORUM)); lightningtime = (lightningtime.tofloat() * (1000.0 - speedRate.tofloat()) / 1000.0).tointeger(); } obj.getVar("custom").push_vector(lightningtime); obj.getVar("custom").push_vector(sizeRate); obj.getVar("custom").push_vector(totalDamage2); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.setTimeEvent(0,lifeTime,1,false); if(successType >= 1) obj.setTimeEvent(1,hitTime,-1,false); else obj.setTimeEvent(1,hitTime * 2,-1,false); obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; case 2://冰雨雲 local totalDamage = receiveData.readDword(); local lifeTime = receiveData.readDword(); local hitTime = receiveData.readDword(); local successType = receiveData.readDword(); local prob = receiveData.readDword();0 local level = receiveData.readDword(); local time = receiveData.readDword(); local damageRate = receiveData.readDword(); local totalDamage2 = totalDamage * damageRate / 100; obj.getVar("custom").clear_vector(); obj.getVar("custom").push_vector(lifeTime); obj.getVar("custom").push_vector(0); obj.getVar("custom").push_vector(totalDamage2); obj.getVar("custom").push_vector(prob); obj.getVar("custom").push_vector(level); obj.getVar("custom").push_vector(time); obj.getVar("custom").push_vector(totalDamage); obj.getVar("custom").push_vector(hitTime); if(sq_GetLevelData(sqrChr, SKILL_BYKK_ACIDCLOUD, 8, sq_GetSkillLevel(sqrChr, SKILL_BYKK_ACIDCLOUD)) > 0) obj.getVar("custom").push_vector(1); //obj.setTimeEvent(0,lifeTime,1,false); obj.setTimeEvent(1,hitTime,-1,false); obj.setMapFollowParent(obj.getParent()); obj.setMapFollowType(1); sq_SetCurrentDirection(obj, ENUM_DIRECTION_RIGHT); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 3://雷電 local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 3)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/acidcloud/thunder.ani"); 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); break; case 4: case 5: case 6: case 7: if(subtype == 7){ local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 2)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); } obj.getVar("custom").clear_vector(); obj.getVar("custom").push_vector(obj.getZPos()); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_BYKK_ANTIGRAVITYSTARTER://反重力裝置 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local range = receiveData.readDword(); local successType = receiveData.readDword(); local totalDamage2 = receiveData.readDword(); obj.getVar("custom").clear_vector(); obj.getVar("custom").push_vector(range); obj.getVar("custom").push_vector(successType); obj.getVar("custom").push_vector(totalDamage2); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 6)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); obj.setTimeEvent(1,333,1,false); obj.setTimeEvent(2,800,1,false); break; case 2: local range = receiveData.readDword(); local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/antigravity/magiccircle.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(10002,sq_CreateAnimation("","passiveobject/witch_bykk/animation/antigravity/magiccircle-aura-up1.ani"),true); currentAni.addLayerAnimation(10002,sq_CreateAnimation("","passiveobject/witch_bykk/animation/antigravity/magiccircle-aura-up2.ani"),true); currentAni.addLayerAnimation(10002,sq_CreateAnimation("","passiveobject/witch_bykk/animation/antigravity/magiccircle-aura-up3.ani"),true); currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/antigravity/magiccircle-aura-down1.ani"),true); currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/antigravity/magiccircle-aura-down2.ani"),true); currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/antigravity/magiccircle-aura-down3.ani"),true); local sizeRate = range.tofloat() / 400.0; currentAni.setImageRateFromOriginal(sizeRate, sizeRate);//增加ani 寬度跟高度率 currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);//增加ani als附加 ani大小比例 sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); break; case 3: local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 7)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/antigravity/antigravitystartersub.ani"); obj.setCurrentAnimation(ani); break; case 4: local successType = receiveData.readDword(); local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/antigravity/tube-normal.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); switch(successType){ case 0: currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/antigravity/tube-failed.ani"),true); break; case 1: currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/antigravity/tube-success.ani"),true); break; case 2: case 3: currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/antigravity/tube-success.ani"),true); currentAni.addLayerAnimation(0,sq_CreateAnimation("","passiveobject/witch_bykk/animation/antigravity/tube-great.ani"),true); break; } sq_SetCurrentDirection(obj, ENUM_DIRECTION_RIGHT); break; } break; case SKILL_BYKK_BLACKMANTLE://暗影鬥篷 switch(subtype){ case 1: local ani = sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/blackmantle/001_down_n.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/blackmantle/001_up_d.ani"),true); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/blackmantle/002_up_n.ani",0,-1,-1); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/blackmantle/002_down_d.ani",0,-1,-1); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_COVER); break; case 2: local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 8)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local lifeTime = receiveData.readDword(); local prob = receiveData.readDword(); local level = receiveData.readDword(); local time = receiveData.readDword(); local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_BLIND, prob, level, time); obj.setTimeEvent(0,lifeTime,1,false); obj.setTimeEvent(1,lifeTime - 1500,1,false); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 3: local lifeTime = receiveData.readDword(); obj.setTimeEvent(3,lifeTime + 480,1,false); local totalDamage = receiveData.readDword(); local prob = receiveData.readDword(); local level = receiveData.readDword(); local time = receiveData.readDword(); local speedRate = receiveData.readDword(); obj.getVar("custom").clear_vector(); obj.getVar("custom").push_vector(totalDamage); obj.getVar("custom").push_vector(prob); obj.getVar("custom").push_vector(level); obj.getVar("custom").push_vector(time); obj.getVar("custom").push_vector(lifeTime); obj.getVar("custom").push_vector(speedRate); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_BYKK_BROOMSPIN://旋轉掃把 switch(subtype){ case 1: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/dummy.ani"); obj.setCurrentAnimation(ani); local time = receiveData.readDword(); obj.setTimeEvent(0,time,1,false); obj.setTimeEvent(1,50,-1,false); sqrChr.getVar("broomspinObj").clear_obj_vector(); sqrChr.getVar("broomspinObj").push_obj_vector(obj); local parentObj = obj.getParent(); local appendage = CNSquirrelAppendage.sq_AppendAppendage(parentObj, obj, SKILL_BYKK_BROOMSPIN, false,"Appendage/Character/ap_common_suck.nut", false); if(appendage){ appendage.sq_SetValidTime(time); CNSquirrelAppendage.sq_Append(appendage, parentObj, obj); local auraAppendage = appendage.sq_getAuraMaster("broonspinAura"); if(!auraAppendage) auraAppendage = appendage.sq_AddAuraMaster("broonspinAura",parentObj, obj, 1200, 18, 5, 0); if(auraAppendage) auraAppendage.setAttractionInfo(450, 450, 100, 100); } break; case 2: local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 9)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/broomspincrash/floor.ani"); obj.setCurrentAnimation(ani); sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/broomspincrash/crash.ani",0,0,0); sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/broomspincrash/over.ani",0,0,0); sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/broomspincrash/under.ani",0,0,0); break; } break; case SKILL_BYKK_ELECTRICRABBIT://光電兔 switch(subtype){ case 1: case 4: local successType = receiveData.readDword(); local totalDamage = receiveData.readDword(); local prob = receiveData.readDword(); local time = receiveData.readDword(); local damage = receiveData.readDword(); local level = receiveData.readDword(); local damageRate = receiveData.readDword(); obj.getVar("custom").clear_vector(); obj.getVar("custom").push_vector(successType); obj.getVar("custom").push_vector(totalDamage); obj.getVar("custom").push_vector(prob); obj.getVar("custom").push_vector(time); obj.getVar("custom").push_vector(damage); obj.getVar("custom").push_vector(level); obj.getVar("custom").push_vector(damageRate); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: local successType = receiveData.readDword(); obj.getVar("custom").clear_vector(); obj.getVar("custom").push_vector(successType); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 3: local sub = receiveData.readDword(); local totalDamage = receiveData.readDword(); local aniPath = "passiveobject/witch_bykk/animation/elecrabbit/explosion/explosion_dodge.ani"; if(sub >= 1) aniPath = "passiveobject/witch_bykk/animation/elecrabbit/talisman/explosion/explosion_dodge.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 10)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.sq_AddObjectParticleCreater("particle/electricrabbitdestroy1.ptl"); obj.sq_AddObjectParticleCreater("particle/electricrabbitdestroy2.ptl"); obj.sq_AddObjectParticleCreater("particle/electricrabbitdestroy3.ptl"); obj.sq_AddObjectParticleCreater("particle/electricrabbitdestroy4.ptl"); obj.sq_AddObjectParticleCreater("particle/electricrabbitdestroy5.ptl"); obj.sq_AddObjectParticleCreater("particle/electricrabbitdestroy6.ptl"); obj.sq_SetObjectParticlePos(0, 0, 50); obj.sq_PlaySound("ELETRIC_RABBIT_EXP"); break; } break; case SKILL_BYKK_ENHANCEDMAGICMISSILE://改良魔法星彈 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 12)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local successType = receiveData.readDword(); local prob = receiveData.readDword(); local time = receiveData.readDword(); local damage = receiveData.readDword(); local damageRate = receiveData.readDword(); local level = receiveData.readDword(); local sub = sq_GetIntData(sqrChr, SKILL_BYKK_ENHANCEDMAGICMISSILE, 11); obj.getVar("custom").clear_vector(); obj.getVar("custom").push_vector(successType); obj.getVar("custom").push_vector(prob); obj.getVar("custom").push_vector(time); obj.getVar("custom").push_vector(damage); obj.getVar("custom").push_vector(damageRate); obj.getVar("custom").push_vector(level); if(sub > 0){ obj.getVar("custom").push_vector(2); obj.getVar("custom").push_vector(1); } obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_BYKK_FLUORECOLLIDER://電鳗碰撞機 switch(subtype){ case 1: sqrChr.getVar("fluorecollider").clear_obj_vector(); sqrChr.getVar("fluorecollider").push_obj_vector(obj); local sub = receiveData.readDword(); local lifeTime = receiveData.readDword(); local successType = receiveData.readDword(); local hitTime = receiveData.readDword(); local totalDamage = receiveData.readDword(); local damageRate = receiveData.readDword(); local range = receiveData.readDword(); obj.getVar("custom").clear_vector(); obj.getVar("custom").push_vector(successType); obj.getVar("custom").push_vector(range); obj.getVar("custom").push_vector(sub); local totalDamage2 = (totalDamage.tofloat() * damageRate.tofloat() / 100.0).tointeger(); obj.getVar("custom").push_vector(totalDamage2); obj.getVar("custom").push_vector(lifeTime); local friendlyfa_level = sq_GetSkillLevel(sqrChr, SKILL_BYKK_FRIENDLYFAMILIAR); if(friendlyfa_level > 0){ local speedRate = sq_GetLevelData(sqrChr, SKILL_BYKK_FRIENDLYFAMILIAR, 8, friendlyfa_level); obj.getVar("custom").push_vector(speedRate); } sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 13)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); if(successType >= 2){ local skill_level = sq_GetSkillLevel(sqrChr, SKILL_BYKK_FLUORECOLLIDER); local level = sq_GetSkillLevel(sqrChr, 174) + 20; local prob = sq_GetLevelData(sqrChr,SKILL_BYKK_FLUORECOLLIDER, 6, skill_level) / 10; local time = sq_GetLevelData(sqrChr,SKILL_BYKK_FLUORECOLLIDER, 8, skill_level); local damage = sq_GetLevelData(sqrChr,SKILL_BYKK_FLUORECOLLIDER, 9, skill_level); local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_LIGHTNING, prob, level, time,damage); } obj.setTimeEvent(1,hitTime / 2,-1,false); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_BYKK_FUSIONCRAFT://技藝融合 break; case SKILL_BYKK_HEATINGFURNACE://爆炎加熱爐 switch(subtype){ case 1: sqrChr.getVar("heatingfurnace").clear_obj_vector(); sqrChr.getVar("heatingfurnace").push_obj_vector(obj); obj.getVar("custom").clear_vector(); for(local i = 0;i < 10; i++){ obj.getVar("custom").push_vector(0); } local Delay = receiveData.readDword(); local successType = receiveData.readDword(); local homunculus = receiveData.readDword(); obj.getVar("custom").set_vector(0,Delay); obj.getVar("custom").set_vector(1,successType); obj.getVar("custom").set_vector(2,homunculus); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2://失敗 local aniPath = "passiveobject/witch_bykk/animation/heatingfurnace/fail_new/";// local ani = sq_CreateAnimation("",aniPath + "heatingfurnacenewnew_39.ani"); obj.setCurrentAnimation(ani);// local pooledObj = createOnlyDrawObject_witch_bykk(obj,aniPath + "heatingfurnacenewnew_33.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj) + 1,70,ENUM_DRAWLAYER_NORMAL); obj.setTimeEvent(0,720,1,false); local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 19)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local add_hitMax = receiveData.readDword(); obj.getVar("custom").setInt(10, add_hitMax); break; case 3://石塊 local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 24)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local successType = receiveData.readDword(); obj.getVar("custom").clear_vector(); obj.getVar("custom").push_vector(successType); local aniPath1 = "passiveobject/character/mage/animation/heatingfurnace/stone_piece_collision.ani"; if(successType >= 1) aniPath1 = "passiveobject/character/mage/animation/heatingfurnace/stone_piece_none.ani"; local ani = sq_CreateAnimation("",aniPath1); obj.setCurrentAnimation(ani);// local currentAni = obj.getCurrentAnimation(); local aniPath = "passiveobject/character/mage/animation/heatingfurnace/"; switch(successType){//根據生成類型附加效果 case 0: if(sq_getRandom(1,100) >= 50) currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "stone_piece_failed1.ani"),true); else currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "stone_piece_failed2.ani"),true); break; case 1: if(sq_getRandom(1,100) >= 50){ currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "stone_piece_failed1.ani"),true); currentAni.addLayerAnimation(2,sq_CreateAnimation("",aniPath + "stone_piece_normal1.ani"),true); } else{ currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "stone_piece_failed2.ani"),true); currentAni.addLayerAnimation(2,sq_CreateAnimation("",aniPath + "stone_piece_normal2.ani"),true); } break; case 2: case 3: if(sq_getRandom(1,100) >= 50){ currentAni.addLayerAnimation(2,sq_CreateAnimation("",aniPath + "stone_piece_great1.ani"),true); currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "stone_piece_normal1.ani"),true); } else{ currentAni.addLayerAnimation(2,sq_CreateAnimation("",aniPath + "stone_piece_great2.ani"),true); currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "stone_piece_normal2.ani"),true); } break; } local angle = receiveData.readDword(); local angleMax = receiveData.readDword(); local sub = receiveData.readDword(); local damageRate = receiveData.readDword(); local sizeRate = receiveData.readDword(); local totalDamage2 = (totalDamage.tofloat() * damageRate.tofloat() / 100.0).tointeger(); obj.getVar("custom").push_vector(totalDamage2); obj.getVar("custom").push_vector(sizeRate); obj.getVar("custom").push_vector(angle); obj.getVar("custom").push_vector(angleMax); obj.getVar("custom").push_vector(sub); local anglea = 360 / angleMax * angle; local speed_X = 110 + sq_getRandom(0,40); local speed_Z = 250 + sq_getRandom(0,100); local direction = obj.getDirection(); local tiaozheng = 0; local tiaozheng2 = angleMax * 5; if(sub > 0){ switch(sub){ case 1: anglea = 45;if(angle > angleMax / 4 * 3) tiaozheng = 100; break; case 2: anglea = 90;if(angle > angleMax / 2) tiaozheng = 100; break; case 3: anglea = 135;if(angle > angleMax / 2 && angle < angleMax / 4 * 3) tiaozheng = 100; break; case 4: anglea = 0;if(angle < angleMax / 2 || angle > angleMax / 4 * 3) tiaozheng = 100; break; case 6: anglea = 180;if(angle > angleMax / 2 && angle < angleMax / 4 * 3) tiaozheng = 100; break; case 7: anglea = -45;if(angle < angleMax / 4) tiaozheng = 100; break; case 8: anglea = -90;if(angle < angleMax / 2) tiaozheng = 100; break; case 9: anglea = -135;if(angle > angleMax / 4 && angle < angleMax / 2) tiaozheng = 100; break; } } // obj.getVar("custom").push_vector(anglea); // obj.getVar("custom").push_vector(speed_X); // obj.getVar("custom").push_vector(speed_Z); // obj.getVar("custom").push_vector(sq_GetXPos(obj)); // obj.getVar("custom").push_vector(sq_GetYPos(obj)); // obj.getVar("custom").push_vector(sq_GetZPos(obj)); obj.sq_SetMoveParticle("particle/heatingfurnace_stone.ptl", (anglea).tofloat(), 0.0); sq_SetSpeedToMoveParticle(obj,0,speed_X + tiaozheng + tiaozheng2); sq_SetSpeedToMoveParticle(obj,1,tiaozheng * 15 / 10); sq_SetSpeedToMoveParticle(obj,2,speed_Z); // obj.setTimeEvent(0,10,4,false); break; case 4://爆炸 local ani = sq_CreateAnimation("","passiveobject/common/animation/fireexplosion.ani"); obj.setCurrentAnimation(ani); local totalDamage = receiveData.readDword(); local successType = receiveData.readDword(); obj.sq_PlaySound("B_FIRE_EXPLOSION"); local currentAni = obj.getCurrentAnimation();//得到當前ani local sizeRate = receiveData.readDword(); local angle = receiveData.readDword(); local angleMax = receiveData.readDword(); local sub = receiveData.readDword(); obj.getVar("custom").clear_vector(); obj.getVar("custom").push_vector(sizeRate); if(sub > 0){ if(angle == 0){ if(successType >= 1) sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 25)); else sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 26)); totalDamage = totalDamage * angleMax; sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.setTimeEvent(1, 200, 1, true); obj.setTimeEvent(2, 50, 1, true); obj.setTimeEvent(3, 15, 2, true); obj.setTimeEvent(4, 100, 1, true); } else{ sq_SetFrameDelayTime(currentAni, 0, 50); } } else if(sub == 0){ if(successType >= 1) sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 25)); else sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 26)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.setTimeEvent(1, 200, 1, true); if(successType <= 1) obj.setTimeEvent(2, 50, 1, true); if(successType <= 1) obj.setTimeEvent(3, 15, 1, true); if(successType <= 2) obj.setTimeEvent(4, 100, 1, true); } sizeRate = sizeRate.tofloat() / 100.0; sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate);//攻擊框,x y z比率 break; case 5://尾巴 local anglea = receiveData.readDword(); local speed_X = receiveData.readDword(); local speed_Z = receiveData.readDword(); local sub = receiveData.readDword(); local aniPath1 = "passiveobject/witch_bykk/animation/heatingfurnace/",aniPath2 = "stone_tail1.ani"; switch(sub){ case 2:aniPath2 = "stone_tail2.ani"; break; case 3:aniPath2 = "stone_tail3.ani"; break; case 4:aniPath2 = "stone_tail4.ani"; break; } local ani = sq_CreateAnimation("",aniPath1 + aniPath2); obj.setCurrentAnimation(ani); obj.sq_SetMoveParticle("particle/heatingfurnace_stone_effcet.ptl", (anglea).tofloat(), 0.0); sq_SetSpeedToMoveParticle(obj,0,speed_X); sq_SetSpeedToMoveParticle(obj,2,speed_Z); break; case 6://護石爆炸 local totalDamage = receiveData.readDword(); totalDamage = totalDamage / 8; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 20)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/heatingfurnace/heatburst/mk2heatburstfront_01.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/heatingfurnace/heatburst/mk2heatburstback_01.ani"),true); obj.setTimeEvent(0,180,1,false); break; case 7://護石爆炸 local totalDamage = receiveData.readDword(); local sizeRate = receiveData.readDword(); local number_max = receiveData.readDword(); local speedRate = receiveData.readDword(); obj.getVar("custom").setInt(10, number_max); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 20)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/heatingfurnace/heatburst/mk2heatburstfront_01.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/heatingfurnace/heatburst/mk2heatburstback_01.ani"),true); obj.setTimeEvent(0,180 / speedRate * 100,1,false); local pAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; pAni.setImageRateFromOriginal(sizeRate, sizeRate);//增加ani 宽度跟高度率 pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);//增加ani als附加 ani大小比例 sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate);//攻击框,x y z比率 pAni.setSpeedRate(speedRate.tofloat()); break; } break; case SKILL_BYKK_HOMUNCULUS://魔道學助手 switch(subtype){ case 11://光電鳗電1 local totalDamage = receiveData.readDword(); local hitMax = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 48)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local group = receiveData.readDword(); local uniqueId = receiveData.readDword(); local targetObj = sq_GetObject(sqrChr, group, uniqueId); obj.getVar().clear_obj_vector(); obj.getVar().push_obj_vector(targetObj); obj.setTimeEvent(0,50,hitMax,true); break; case 12://光電鳗電2 local totalDamage = receiveData.readDword(); local hitMax = receiveData.readDword(); local prob = receiveData.readDword(); local level = receiveData.readDword(); local time = receiveData.readDword(); local damage = receiveData.readDword(); obj.getVar().clear_vector(); obj.getVar().push_vector(totalDamage); obj.getVar().push_vector(prob); obj.getVar().push_vector(level); obj.getVar().push_vector(time); obj.getVar().push_vector(damage); obj.setTimeEvent(1,150,hitMax,true); break; case 13://光電鳗電3 local ani = sq_CreateAnimation("","monster/character/mage/witch_bykk/fluore/animation/b/fluore_blightning"+sq_getRandom(1,3).tostring()+".ani"); obj.setCurrentAnimation(ani); local totalDamage = receiveData.readDword(); local prob = receiveData.readDword(); local level = receiveData.readDword(); local time = receiveData.readDword(); local damage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 48)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_LIGHTNING, prob, level, time, damage); break; case 21://暗影夜貓攻擊1 local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/fluto/skilla_attackloop_fluto.ani"); obj.setCurrentAnimation(ani); local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 49)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.setTimeEvent(2,50,3,false); break; case 22://暗影夜貓攻擊2 local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/fluto/skilla_lastattack_fluto.ani"); obj.setCurrentAnimation(ani); local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 50)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 23://暗影夜貓攻擊3 local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/fluto/skillb_pluto.ani"); obj.setCurrentAnimation(ani); local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 52)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local prob = receiveData.readDword(); local level = receiveData.readDword(); local time = receiveData.readDword(); local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_HOLD, prob, level, time); break; case 24: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/fluto/skilla_attackloop_fluto.ani"); obj.setCurrentAnimation(ani); local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 49)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.setTimeEvent(2,120,-1,false); local group = receiveData.readDword(); local uniqueId = receiveData.readDword(); local targetObj = sq_GetObject(sqrChr, group, uniqueId); sq_moveWithParent(targetObj, obj); break; case 31://冰霜雪人雲 local totalDamage = receiveData.readDword(); local hitMax = receiveData.readDword(); obj.getVar("custom").clear_vector(); obj.getVar("custom").push_vector(hitMax); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 53)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 32://冰霜雪人風暴 local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/jackfrostaskill/skillbloop_11.ani"); obj.setCurrentAnimation(ani); local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 54)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local hitMax = receiveData.readDword(); obj.getVar("custom").clear_vector(); obj.getVar("custom").push_vector(hitMax); local prob = receiveData.readDword(); local level = receiveData.readDword(); local time = receiveData.readDword(); local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_FREEZE, prob, level, time); local group = receiveData.readDword(); local uniqueId = receiveData.readDword(); local targetObj = sq_GetObject(sqrChr, group, uniqueId); sq_moveWithParent(targetObj, obj); obj.setTimeEvent(2,100,-1,false); break; case 41://傑克爆彈 local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 55)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 42: local ani = sq_CreateAnimation("","passiveobject/common/animation/fireexplosion.ani"); obj.setCurrentAnimation(ani); local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 55)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local currentAni = obj.getCurrentAnimation(); sq_SetAttackBoundingBoxSizeRate(currentAni, 1.5, 1.5, 1.5); break; } break; case SKILL_BYKK_JACKFROSTICEWATER://雪人刨冰 switch(subtype){ case 1: local totalDamage = receiveData.readDword(); local damageRate = receiveData.readDword(); local damageRate2 = receiveData.readDword(); local sub = receiveData.readDword(); local totalDamage2 = (totalDamage.tofloat() * damageRate.tofloat() / 100.0).tointeger(); local totalDamage3 = (totalDamage.tofloat() * damageRate2.tofloat() / 100.0).tointeger(); obj.getVar("custom").clear_vector(); obj.getVar("custom").push_vector(totalDamage2); obj.getVar("custom").push_vector(totalDamage3); obj.getVar("custom").push_vector(sub); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 27)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: local totalDamage = receiveData.readDword(); local sub = receiveData.readDword(); obj.getVar("custom").clear_vector(); obj.getVar("custom").push_vector(0); obj.getVar("custom").push_vector(0); obj.getVar("custom").push_vector(sub); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 29)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_BYKK_JACKOHALLOWEEN://搗蛋傑克 switch(subtype){ case 1: local castTime = receiveData.readDword(); obj.getVar("custom").clear_vector(); obj.getVar("custom").push_vector(castTime); sqrChr.getVar("jackohalloween_pumpkin").clear_obj_vector(); sqrChr.getVar("jackohalloween_pumpkin").push_obj_vector(obj); // obj.setMapFollowParent(sqrChr); // obj.setMapFollowType(1); local totalDamage = receiveData.readDword(); local hitTime = receiveData.readDword(); local lifeTime = receiveData.readDword(); local hitMax = receiveData.readDword(); obj.getVar("custom").setInt(11, lifeTime); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,1,0,obj.getDirection(),SKILL_BYKK_JACKOHALLOWEEN,2,totalDamage,hitTime,hitMax,0,0,0,0,0,0); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: local parentObj = obj.getParent(); parentObj.getVar("jackohalloween_lava").clear_obj_vector(); parentObj.getVar("jackohalloween_lava").push_obj_vector(obj); sq_moveWithParent(parentObj, obj); // obj.setMapFollowParent(sqrChr); // obj.setMapFollowType(1); local totalDamage = receiveData.readDword(); local hitTime = receiveData.readDword(); local hitMax = receiveData.readDword(); obj.sq_SetMaxHitCounterPerObject(hitMax); obj.getVar("custom").clear_vector(); obj.getVar("custom").push_vector(totalDamage); obj.getVar("custom").push_vector(hitTime); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_BYKK_LAVAPOTION://熔岩藥瓶 switch(subtype){ case 1://石塊 local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 33)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/lapisphilosophorumexplosion.ani"); obj.setCurrentAnimation(ani); local sizeRate_rec = receiveData.readDword(); local currentAni = obj.getCurrentAnimation(); local sizeRate = sizeRate_rec.tofloat() / 100.0 * 1.35; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); break; case 2://必定失敗爆炸 local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 33)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.setTimeEvent(1,240,1,false); break; case 3://成功 local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 32)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local lifeTime = receiveData.readDword(); local hitTime = receiveData.readDword(); obj.setTimeEvent(2,lifeTime,1,false); obj.setTimeEvent(3,hitTime,-1,false); local skill_level = sq_GetSkillLevel(sqrChr, SKILL_BYKK_LAVAPOTION); local totalDamage2 = sq_GetLevelData(sqrChr,SKILL_BYKK_LAVAPOTION, 13, skill_level); local prob = sq_GetLevelData(sqrChr,SKILL_BYKK_LAVAPOTION, 4, skill_level) / 10; local time = sq_GetLevelData(sqrChr,SKILL_BYKK_LAVAPOTION, 6, skill_level); local damage = sq_GetLevelData(sqrChr,SKILL_BYKK_LAVAPOTION, 7, skill_level); local speedRate = sq_GetLevelData(sqrChr,SKILL_BYKK_LAVAPOTION, 11, skill_level); local jumpRate = sq_GetLevelData(sqrChr,SKILL_BYKK_LAVAPOTION, 12, skill_level); local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_BURN, prob, sq_GetSkillLevel(sqrChr, 174), time,damage); local sizeRate = receiveData.readDword(); local successType = receiveData.readDword(); obj.getVar("custom").clear_vector(); obj.getVar("custom").push_vector(sizeRate); obj.getVar("custom").push_vector(successType); obj.getVar("custom").push_vector(speedRate); obj.getVar("custom").push_vector(jumpRate); obj.getVar("custom").push_vector(totalDamage2); obj.getVar("targetObj").clear_obj_vector(); if(sq_GetZPos(obj) > 0){ obj.getVar("move").clear_vector(); obj.getVar("move").push_vector(sq_GetXPos(obj)); obj.getVar("move").push_vector(sq_GetZPos(obj)); obj.getVar("move").push_vector(100); } sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 4: obj.getVar("move").clear_vector(); obj.getVar("move").push_vector(sq_GetXPos(obj)); obj.getVar("move").push_vector(sq_GetYPos(obj)); obj.getVar("move").push_vector(sq_GetZPos(obj)); obj.getVar("move").push_vector(sq_getRandom(0,180)); obj.getVar("move").push_vector(sq_getRandom(0,30)); obj.getVar("move").push_vector(sq_getRandom(70,150)); obj.getVar("move").push_vector(sq_getRandom(0,1)); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_BYKK_LOLLIPOPCRUSH://超級棒棒糖 switch(subtype){ case 0: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/lollipopcrush/lollipopcrush.ani"); obj.setCurrentAnimation(ani); obj.setTimeEvent(0,200,1,false); break; case 1: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/lollipopcrush/lollipopcrushaircast_body.ani"); obj.setCurrentAnimation(ani); break; case 9: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/lollipopcrush/lollipopcrushtalismanlandattack_body.ani"); obj.setCurrentAnimation(ani); break; case 10: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/lollipopcrush/lollipopcrushtalismanready_body.ani"); obj.setCurrentAnimation(ani); obj.setTimeEvent(0,100,1,false); break; case 11: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/lollipopcrush/lollipopcrushtalismanattack_body.ani"); obj.setCurrentAnimation(ani); break; case 20: local sub = receiveData.readDword(); local totalDamage = receiveData.readDword(); local level = receiveData.readDword(); local prob = receiveData.readDword(); local time = receiveData.readDword(); local damage = receiveData.readDword(); obj.getVar("custom").clear_vector(); obj.getVar("custom").push_vector(sub); obj.getVar("custom").push_vector(totalDamage); obj.getVar("custom").push_vector(level); obj.getVar("custom").push_vector(prob); obj.getVar("custom").push_vector(time); obj.getVar("custom").push_vector(damage); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } if(subtype == 0 || subtype == 1 || subtype == 9 || subtype == 10 || subtype == 11){ local delayTime = receiveData.readDword(); local speedRate = 12000.0 / delayTime.tofloat(); if(subtype == 1) speedRate = 6000.0 / delayTime.tofloat(); if(subtype == 9) speedRate = 12000.0 / delayTime.tofloat(); if(subtype == 10) speedRate = 5000.0 / delayTime.tofloat(); if(subtype == 11) speedRate = 12000.0 / delayTime.tofloat(); local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(speedRate); local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 56)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local extra_num = receiveData.readDword(); local damageRate = receiveData.readDword(); local damageRate2 = receiveData.readDword(); local sizeRate = receiveData.readDword(); print(sizeRate); local totalDamage2 = (totalDamage.tofloat() * damageRate.tofloat() / 100.0).tointeger(); local totalDamage3 = (totalDamage.tofloat() * damageRate2.tofloat() / 100.0).tointeger(); local skill_level = sq_GetSkillLevel(sqrChr,SKILL_BYKK_LOLLIPOPCRUSH); local blind_prob = sq_GetLevelData(sqrChr,SKILL_BYKK_LOLLIPOPCRUSH,4,skill_level); local blind_level = sq_GetLevelData(sqrChr,SKILL_BYKK_LOLLIPOPCRUSH,5,skill_level); local blind_time = sq_GetLevelData(sqrChr,SKILL_BYKK_LOLLIPOPCRUSH,6,skill_level); local blind_stuckrate = sq_GetLevelData(sqrChr,SKILL_BYKK_LOLLIPOPCRUSH,8,skill_level); local lightning_prob = sq_GetLevelData(sqrChr,SKILL_BYKK_LOLLIPOPCRUSH,10,skill_level); local lightning_time = sq_GetLevelData(sqrChr,SKILL_BYKK_LOLLIPOPCRUSH,11,skill_level); local lightning_damage = sq_GetLevelData(sqrChr,SKILL_BYKK_LOLLIPOPCRUSH,12,skill_level); obj.getVar("custom").clear_vector(); obj.getVar("custom").push_vector(extra_num); obj.getVar("custom").push_vector(totalDamage2); obj.getVar("custom").push_vector(totalDamage3); obj.getVar("custom").push_vector(blind_prob); obj.getVar("custom").push_vector(blind_level); obj.getVar("custom").push_vector(blind_time); obj.getVar("custom").push_vector(blind_stuckrate); obj.getVar("custom").push_vector(lightning_prob); obj.getVar("custom").push_vector(lightning_time); obj.getVar("custom").push_vector(lightning_damage); local currentAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } break; case SKILL_BYKK_MEGADRILL://冰霜鑽孔車 switch(subtype){ case 1://失敗形態 local totalDamage = receiveData.readDword(); local damageRate = receiveData.readDword(); local sub = receiveData.readDword(); local totalDamage2 = totalDamage * damageRate / 100; obj.getVar("custom").clear_vector(); obj.getVar("custom").push_vector(totalDamage); obj.getVar("custom").push_vector(totalDamage2); obj.getVar("custom").push_vector(sub); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 2://普通形態 case 12://普通形態 local successType = receiveData.readDword(); local moveX = receiveData.readDword(); local totalDamage = receiveData.readDword(); obj.getVar("custom").clear_vector(); obj.getVar("custom").push_vector(successType); obj.getVar("custom").push_vector(sq_GetXPos(obj)); obj.getVar("custom").push_vector(sq_GetZPos(obj)); obj.getVar("custom").push_vector(moveX); obj.getVar("custom").push_vector(totalDamage); sqrChr.getVar("megadrill").clear_obj_vector(); sqrChr.getVar("megadrill").push_obj_vector(obj); obj.setMapFollowParent(sqrChr); obj.setMapFollowType(1); obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; case 3://震蕩波 local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/crashfloor.ani"); obj.setCurrentAnimation(ani); local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 34)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM); local sub = receiveData.readDword(); if(sub > 1){ local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/crashcrash.ani"),true); currentAni.addLayerAnimation(0,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/crashdust.ani"),true); } break; case 4: local Delay = receiveData.readDword(); obj.setTimeEvent(0,Delay,1,false); break; } break; case SKILL_BYKK_TRANSFORMFLAPPER://變異蒼蠅拍 switch(subtype){ case 1: local ani = sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/transformflapper/flyflap_d1.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/transformflapper/flyflap_n1.ani"),true); local delayTime = receiveData.readDword(); for(local i = 0; i < 11; i++){ sq_SetFrameDelayTime(currentAni, i, delayTime); } return; break; case 2: local ani = sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/transformflapper/flyflap_d2.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/transformflapper/flyflap_n2.ani"),true); local delayTime = receiveData.readDword(); for(local i = 0; i < 4; i++){ sq_SetFrameDelayTime(currentAni, i, delayTime); } return; break; case 3: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/transformflapperex/transformflapper.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); local delayTime = receiveData.readDword(); for(local i = 0; i < 11; i++){ sq_SetFrameDelayTime(currentAni, i, delayTime); } sq_moveWithParent(sqrChr, obj); break; case 4: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/transformflapperex/transformflapperjump.ani"); obj.setCurrentAnimation(ani); local delayTime = receiveData.readDword(); local currentAni = obj.getCurrentAnimation(); for(local i = 0; i < 4; i++){ sq_SetFrameDelayTime(currentAni, i, delayTime); } sq_moveWithParent(sqrChr, obj); break; case 10: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/summonmonster_tau/attack1.ani"); obj.setCurrentAnimation(ani); local delayTime = receiveData.readDword(); local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 42)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); return; break; case 11: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/summonmonster_tau/attack2.ani"); obj.setCurrentAnimation(ani); local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 43)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); return; break; case 12: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/summonmonster_tau/tacklerun.ani"); obj.setCurrentAnimation(ani); local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 44)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local group = receiveData.readDword(); local uniqueId = receiveData.readDword(); local targetObj = sq_GetObject(sqrChr, group, uniqueId); sq_moveWithParent(targetObj, obj); obj.setTimeEvent(0,1000,1,false); obj.setTimeEvent(1,300,-1,false); return; break; case 13: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/summonmonster_tau/earthbreakout.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(0,sq_CreateAnimation("","passiveobject/witch_bykk/animation/summonmonster_tau/earthbreakout1.ani"),true); currentAni.addLayerAnimation(0,sq_CreateAnimation("","passiveobject/witch_bykk/animation/summonmonster_tau/earthbreakout2.ani"),true); currentAni.addLayerAnimation(0,sq_CreateAnimation("","passiveobject/witch_bykk/animation/summonmonster_tau/earthbreakout3.ani"),true); local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 45)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); return; break; case 14: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/summonmonster_goblin/goblin_arrow10.ani"); obj.setCurrentAnimation(ani); obj.sq_SetMoveParticle("particle/goblin_fastthrowstone.ptl", 0.0, 0.0); local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 46)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); return; break; case 15: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/summonmonster_goblin/dark_effect1.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(-17,sq_CreateAnimation("","passiveobject/witch_bykk/animation/summonmonster_goblin/dark_effect2.ani"),true); local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 47)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local sub = receiveData.readDword(); switch(sub){ case 0: obj.sq_SetMoveParticle("particle/goblin_dagger.ptl", 0.0, 0.0); break; case 1: obj.sq_SetMoveParticle("particle/goblin_daggerdown.ptl", 0.0, 0.0); break; case 2: obj.sq_SetMoveParticle("particle/goblin_daggerup.ptl", 0.0, 0.0); break; } return; break; } local totalDamage = receiveData.readDword(); local prob = receiveData.readDword(); local level = receiveData.readDword(); local time = receiveData.readDword(); local successType = receiveData.readDword(); local isSeal = receiveData.readDword(); local sizeRate = receiveData.readDword(); obj.getVar("custom").clear_vector(); obj.getVar("custom").push_vector(prob); obj.getVar("custom").push_vector(level); obj.getVar("custom").push_vector(time); obj.getVar("custom").push_vector(successType); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 41)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_CURSE, prob, level, time); local pAni = obj.getCurrentAnimation(); local sizeSet = (1.0+successType*0.1)*(100.0+sizeRate.tofloat())/100.0; sq_SetAttackBoundingBoxSizeRate(pAni, sizeSet, sizeSet, sizeSet); local skill_level = sq_GetSkillLevel(sqrChr,SKILL_BYKK_TRANSFORMFLAPPER); local monsterprob = sq_GetLevelData(sqrChr,SKILL_BYKK_TRANSFORMFLAPPER,5,skill_level); local monstertime = sq_GetLevelData(sqrChr,SKILL_BYKK_TRANSFORMFLAPPER,7,skill_level); local sub_number1 = sq_GetLevelData(sqrChr,SKILL_BYKK_TRANSFORMFLAPPER,9,skill_level); local sub_number2 = sq_GetLevelData(sqrChr,SKILL_BYKK_TRANSFORMFLAPPER,10,skill_level); local monsterlevel = sq_GetSkillLevel(sqrChr, 174); obj.getVar("custom").push_vector(monsterprob); obj.getVar("custom").push_vector(monstertime); obj.getVar("custom").push_vector(monsterlevel); obj.getVar("custom").push_vector(isSeal); obj.getVar("custom").push_vector(sub_number1); obj.getVar("custom").push_vector(sub_number2); obj.getVar("custom").push_vector(0); break; case SKILL_BYKK_TRANSFORMFLAPPEREX://超級蒼蠅拍 switch(subtype){ case 1: local ani = sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/transformflapperex/flyflapex_landn.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(-1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/transformflapperex/flyflapex_landd.ani"),true); break; case 2: local ani = sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/transformflapperex/flyflapex_jumpn.ani"); obj.setCurrentAnimation(ani); // local currentAni = obj.getCurrentAnimation(); // currentAni.addLayerAnimation(-1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/transformflapperex/flyflapex_jumpd.ani"),true); break; case 3: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/transformflapperex/transformflapperex.ani"); obj.setCurrentAnimation(ani); sq_moveWithParent(sqrChr, obj); break; case 4: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/transformflapperex/transformflapperjumpex.ani"); obj.setCurrentAnimation(ani); sq_moveWithParent(sqrChr, obj); break; case 5: local totalDamage = receiveData.readDword(); obj.getVar("custom").clear_vector(); obj.getVar("custom").push_vector(totalDamage); obj.setTimeEvent(0,50,5,true); local currentAni = obj.getCurrentAnimation(); sq_SetFrameDelayTime(currentAni, 0, 100); sq_SetFrameDelayTime(currentAni, 1, 300); return; break; case 6: local totalDamage = receiveData.readDword(); //sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 41)); //sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/transformflapperex/flyflapex_land_ground_crack.ani"); obj.setCurrentAnimation(ani); local sizeRate = receiveData.readDword(); sizeRate = sizeRate.tofloat() / 100.0; local currentAni = obj.getCurrentAnimation(); sq_ClearAttackBox(currentAni); currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/transformflapperex/flyflapex_land_front.ani"),true); currentAni.setImageRateFromOriginal(sizeRate, sizeRate);//增加ani 寬度跟高度率 currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);//增加ani als附加 ani大小比例 sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); return; break; case 7: local totalDamage = receiveData.readDword(); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 41)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/transformflapperex/flyflapex_land_ground_crack_dummy.ani"); obj.setCurrentAnimation(ani); return; break; } local delayTime = receiveData.readDword(); local totalDamage = receiveData.readDword(); local successType = receiveData.readDword(); local isSeal = receiveData.readDword(); local sizeRate = receiveData.readDword(); obj.getVar("custom").clear_vector(); obj.getVar("custom").push_vector(0); obj.getVar("custom").push_vector(0); obj.getVar("custom").push_vector(0); obj.getVar("custom").push_vector(successType); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 41)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local pAni = obj.getCurrentAnimation(); local speedRate = 98000.0 / delayTime.tofloat(); if(subtype == 2) speedRate = 36000.0 / delayTime.tofloat(); pAni.setSpeedRate(speedRate); local sizeSet = (1.0+successType*0.1)*(100.0+sizeRate.tofloat())/100.0; sq_SetAttackBoundingBoxSizeRate(pAni, sizeSet, sizeSet, sizeSet); local skill_level = sq_GetSkillLevel(sqrChr,SKILL_BYKK_TRANSFORMFLAPPER); local monsterprob = sq_GetLevelData(sqrChr,SKILL_BYKK_TRANSFORMFLAPPER,5,skill_level); local monstertime = sq_GetLevelData(sqrChr,SKILL_BYKK_TRANSFORMFLAPPER,7,skill_level); local sub_number1 = sq_GetLevelData(sqrChr,SKILL_BYKK_TRANSFORMFLAPPER,9,skill_level); local sub_number2 = sq_GetLevelData(sqrChr,SKILL_BYKK_TRANSFORMFLAPPER,10,skill_level); local monstertime = sq_GetLevelData(sqrChr,SKILL_BYKK_TRANSFORMFLAPPER,7,skill_level); local monsterlevel = sq_GetSkillLevel(sqrChr, 174); obj.getVar("custom").push_vector(monsterprob); obj.getVar("custom").push_vector(monstertime); obj.getVar("custom").push_vector(monsterlevel); obj.getVar("custom").push_vector(isSeal); obj.getVar("custom").push_vector(sub_number1); obj.getVar("custom").push_vector(sub_number2); obj.getVar("custom").push_vector(0); break; case SKILL_BYKK_UROBOROS://二覺 switch(subtype){ case 1://結束爆炸 local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/uroboros/explosion/disappear_body_front01.ani",0,-1,-1); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(400.0); obj.setTimeEvent(0,210,1,false); local totalDamage = receiveData.readDword(); obj.getVar("custom").clear_vector(); obj.getVar("custom").push_vector(totalDamage); break; case 2: local ani = sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/uroboros/attack/attackset02_center.ani"); obj.setCurrentAnimation(ani); sqrChr.getVar("uroboros").clear_obj_vector(); sqrChr.getVar("uroboros").push_obj_vector(obj); sq_moveWithParent(sqrChr, obj); obj.setMapFollowParent(sqrChr); obj.setMapFollowType(1); local totalDamage = receiveData.readDword(); obj.getVar("custom").clear_vector(); obj.getVar("custom").push_vector(totalDamage); local hitTime = receiveData.readDword(); obj.setTimeEvent(1,hitTime,-1,false); break; case 3: local sub = receiveData.readDword(); local aniPath = "passiveobject/witch_bykk/animation/uroboros/explosion_dark_dodge.ani"; if(sub == 2) aniPath = "passiveobject/witch_bykk/animation/uroboros/explosion_fire_dodge.ani"; if(sub == 3) aniPath = "passiveobject/witch_bykk/animation/uroboros/explosion_ice_dodge.ani"; if(sub == 0) aniPath = "passiveobject/witch_bykk/animation/uroboros/explosion_light_dodge.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local totalDamage = receiveData.readDword(); print("totalDamage1111 = "+totalDamage); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 40)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.sq_PlaySound("R_UROBOROS_SPARK_EXP"); break; case 4: local Delay = receiveData.readDword(); obj.setTimeEvent(2,Delay,1,false); 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); //print(element_kk_fire+","+element_kk_water+","+element_kk_dark+","+element_kk_light); 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); } } function setState_po_witch_bykk_kak(obj, state, datas) { if(!obj) return; local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); local skillIndex = obj.getVar("skillIndex").get_vector(0); local subtype = obj.getVar("subtype").get_vector(0); obj.getVar("state").clear_vector(); obj.getVar("state").push_vector(state); switch(skillIndex){ case SKILL_BYKK_ACIDCLOUD://魔道酸雨雲 switch(subtype){ case 1: switch(state){ case 20: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/acidcloud/start_cloud.ani"); obj.setCurrentAnimation(ani); break; case 21: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/acidcloud/cloud.ani"); obj.setCurrentAnimation(ani); local successType = obj.getVar("custom").get_vector(0); local lifeTime = obj.getVar("custom").get_vector(1) - 480; switch(successType){ case 0://失敗 sq_CreateParticle("passiveobject/witch_bykk/particle/acidrain.ptl", obj, 0, 0, 0, true, 80, 0, lifeTime / 80); obj.setTimeEvent(3,800,1,false); break; case 1://成功 case 2://大成功 sq_CreateParticle("passiveobject/witch_bykk/particle/acidrain.ptl", obj, 0, 0, 0, true, 20, 0, lifeTime / 20); obj.setTimeEvent(3,800,1,false); if(successType >= 2) obj.setTimeEvent(2,obj.getVar("custom").get_vector(2),-1,false); break; } local sizeRate = obj.getVar("custom").get_vector(3); local currentAni = obj.getCurrentAnimation(); sizeRate = sizeRate.tofloat() / 100.0; sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); break; case 22: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/acidcloud/start.ani"); obj.setCurrentAnimation(ani); obj.sq_PlaySound("ACIDCLOUD_CREATE"); break; } break; case 2: //sqrChr.getVar("Debug_SubState").set_vector(9,state); switch(state){ case 20://開始 local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/acidcloud/redcandy/acidcloudstart_body.ani"); obj.setCurrentAnimation(ani); obj.sq_PlaySound("ACIDCLOUD_CREATE"); if(obj.getVar("custom").get_vector(7) > 0) obj.setTimeEvent(6, obj.getVar("custom").get_vector(0), 1, false); break; case 21://靜止 local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/acidcloud/redcandy/acidcloudstay_body.ani"); obj.setCurrentAnimation(ani); obj.setTimeEvent(2,100,-1,false); break; case 22://右移動 local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/acidcloud/redcandy/acidcloudmovea_body.ani"); obj.setCurrentAnimation(ani); obj.setTimeEvent(3,35,-1,false); break; case 23://左移動 local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/acidcloud/redcandy/acidcloudmoveb_body.ani"); obj.setCurrentAnimation(ani); obj.setTimeEvent(3,35,-1,false); break; case 24://開始攻擊 local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/acidcloud/redcandy/acidcloudattackstart_body.ani"); obj.setCurrentAnimation(ani); obj.setTimeEvent(5,obj.getVar("custom").get_vector(7) * 3,-1,false); obj.setTimeEvent(7, obj.getVar("custom").get_vector(7), -1, false); break; case 25://持續攻擊 local totalDamage = obj.getVar("custom").get_vector(6); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 1)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/acidcloud/redcandy/hailloop_00.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(10002,sq_CreateAnimation("","passiveobject/witch_bykk/animation/acidcloud/redcandy/acidcloudattackloop_body.ani"),true); //obj.setTimeEvent(4,100,-1,false); local prob = obj.getVar("custom").get_vector(3); local level = obj.getVar("custom").get_vector(4); local time = obj.getVar("custom").get_vector(5); local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_FREEZE, prob, level, time); if(obj.getVar("custom").get_vector(7) > 0) return; local timer = obj.getVar().get_ct_vector(0); if(!timer){ obj.getVar().clear_ct_vector(); obj.getVar().push_ct_vector(); timer = obj.getVar().get_ct_vector(0); } timer.Reset();//初始化 timer.Start(10000,0);//計時開始 break; case 26://結束攻擊 local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/acidcloud/redcandy/acidcloudattackend_body.ani"); obj.setCurrentAnimation(ani); obj.stopTimeEvent(5); obj.stopTimeEvent(7); if(obj.getVar("custom").get_vector(7) > 0) return; local timer = obj.getVar().get_ct_vector(0); if(timer){ local currentT = timer.Get(); local savetime = obj.getVar("custom").get_vector(1); obj.getVar("custom").set_vector(1, savetime + currentT); } break; case 27://結束 local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/acidcloud/redcandy/acidcloudend_body.ani"); obj.setCurrentAnimation(ani); obj.sq_PlaySound("ACIDCLOUD_DISAPPEARANCE"); break; } break; case 4: case 5: case 6: case 7: switch(state){ case 20: local aniPath = "character/mage/effect/animation/witch_bykk/acidcloud/redcandy/hailobjecta_00.ani"; if(subtype == 5) aniPath = "character/mage/effect/animation/witch_bykk/acidcloud/redcandy/hailobjectb_00.ani"; if(subtype == 6) aniPath = "character/mage/effect/animation/witch_bykk/acidcloud/redcandy/hailobjectc_00.ani"; if(subtype == 7) aniPath = "passiveobject/witch_bykk/animation/acidcloud/redcandy/hailstoneattack.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); if(subtype == 7){ local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(10002,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/acidcloud/redcandy/icefrag_00.ani"),true); } obj.setTimeEvent(1, 10, 35, true); break; case 21: local aniPath = "character/mage/effect/animation/witch_bykk/acidcloud/redcandy/hailobjectgrounda_00.ani"; if(subtype == 5) aniPath = "character/mage/effect/animation/witch_bykk/acidcloud/redcandy/hailobjectgroundb_00.ani"; if(subtype == 6) aniPath = "character/mage/effect/animation/witch_bykk/acidcloud/redcandy/hailobjectgroundc_00.ani"; if(subtype == 7) aniPath = "character/mage/effect/animation/witch_bykk/acidcloud/redcandy/iceexplosion_01.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); if(subtype == 4 || subtype == 5 || subtype == 6) sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/acidcloud/redcandy/hailobjectbottom_00.ani",0,-1,-1); if(subtype == 7) sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/acidcloud/redcandy/iceexplosionbottom_00.ani",0,-1,-1); break; } break; } break; case SKILL_BYKK_ANTIGRAVITYSTARTER://反重力裝置 switch(subtype){ case 1: switch(state){ case 20: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/antigravity/pluto.ani"); obj.setCurrentAnimation(ani); sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/antigravity/pluto-eye.ani",0,1,1); sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/antigravity/pluto-light.ani",0,1,1); sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/antigravity/pluto-spark.ani",0,1,1); obj.setTimeEvent(0,800,1,false); local range = obj.getVar("custom").get_vector(0); local sizeRate = range.tofloat() / 600.0; local pAni = obj.getCurrentAnimation(); sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, 1.0); pAni.setSpeedRate(150.0); break; case 21: // obj.sq_PlaySound("ANTIGRAVITY_EXP"); local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/antigravity/endpluto_06.ani"); obj.setCurrentAnimation(ani); local pAni = obj.getCurrentAnimation(); pAni.setSpeedRate(150.0); // obj.sq_AddObjectParticleCreater("particle/antigravitystarterparticle-1.ptl"); // obj.sq_AddObjectParticleCreater("particle/antigravitystarterparticle-2.ptl"); break; } break; } break; case SKILL_BYKK_BLACKMANTLE://暗影鬥篷 switch(subtype){ case 2: switch(state){ case 20://開始 local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/blackmantle/redcandy/blackmantleneofront_neonewcapefrontnormal.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(-1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/blackmantle/redcandy/blackmantleneoback_neonewcapebacknormal.ani"),true); sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_COVER); break; case 21://持續 local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/blackmantle/redcandy/blackmantleneofrontloop_neonewcapefrontnormal.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(-1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/blackmantle/redcandy/blackmantleneobackloop_neonewcapebacknormal.ani"),true); break; case 22://結束 local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/blackmantle/redcandy/blackmantleneoendfrontfail_neonewcapefrontnormal.ani"); if(obj.getVar().getBool(0)) ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/blackmantle/redcandy/blackmantleneoendfrontsuccess_neonewcapefrontnormal.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); if(obj.getVar().getBool(0)) currentAni.addLayerAnimation(-1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/blackmantle/redcandy/blackmantleneoendbacksuccess_neonewcapebacknormal_02.ani"),true); else currentAni.addLayerAnimation(-1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/blackmantle/redcandy/blackmantleneoendbackfail_neonewcapebacknormal_01.ani"),true); break; case 23://持續 local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/blackmantle/redcandy/blackmantleneofrontloop_neonewcapefrontnormal.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); sq_ClearAttackBox(currentAni); currentAni.addLayerAnimation(-1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/blackmantle/redcandy/blackmantleneobackloop_neonewcapebacknormal.ani"),true); break; } break; case 3: switch(state){ case 20: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/blackmantle/redcandy/homunculus/blackmantleneohomonclouscast_fluto.ani"); obj.setCurrentAnimation(ani); break; case 21: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/blackmantle/redcandy/homunculus/blackmantleneohomonclousstart_fluto.ani"); obj.setCurrentAnimation(ani); local totalDamage = obj.getVar("custom").get_vector(0); local prob = obj.getVar("custom").get_vector(1); local level = obj.getVar("custom").get_vector(2); local time = obj.getVar("custom").get_vector(3); local lifeTime = obj.getVar("custom").get_vector(4); cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_BLACKMANTLE,2,totalDamage,lifeTime,prob,level,time,0,0,0,1); break; case 22: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/blackmantle/redcandy/homunculus/blackmantleneohomonclousloop_fluto.ani"); obj.setCurrentAnimation(ani); break; case 23: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/blackmantle/redcandy/homunculus/blackmantleneohomonclousend_newsparkle.ani"); obj.setCurrentAnimation(ani); break; case 24: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/blackmantle/redcandy/homunculus/blackmantleneohomonclousdisappear_fluto.ani"); obj.setCurrentAnimation(ani); break; } local pAni = obj.getCurrentAnimation(); local speedRate = obj.getVar("custom").get_vector(5); pAni.setSpeedRate(speedRate.tofloat()); break; } break; case SKILL_BYKK_BROOMSPIN://旋轉掃把 break; case SKILL_BYKK_ELECTRICRABBIT://光電兔 switch(subtype){ case 1: switch(state){ case 20: local aniPath1 = "passiveobject/witch_bykk/animation/elecrabbit/start/"; local successType = obj.getVar("custom").get_vector(0); local aniPath2 = "fail_start_elecrabbit.ani" if(successType == 1) aniPath2 = "success_start_elecrabbit.ani"; if(successType >= 2) aniPath2 = "great_start_elecrabbit.ani"; local ani = sq_CreateAnimation("",aniPath1 + aniPath2); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); if(successType >= 1){ switch(successType){ case 1: currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath1 + "success_thunder_02.ani"),true); break; case 2: currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath1 + "great_thunder_02.ani"),true); break; } } break; case 21: local aniPath1 = "passiveobject/witch_bykk/animation/elecrabbit/loop/"; local successType = obj.getVar("custom").get_vector(0); local aniPath2 = "fail_loop_elecrabbit.ani" if(successType == 1) aniPath2 = "success_loop_elecrabbit.ani"; if(successType >= 2) aniPath2 = "great_loop_elecrabbit.ani"; local ani = sq_CreateAnimation("",aniPath1 + aniPath2); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); switch(successType){ case 0: currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath1 + "fail_thunder_01.ani"),true); break; case 1: currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath1 + "success_thunder_01.ani"),true); break; case 2: currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath1 + "great_thunder_01.ani"),true); break; } local totalDamage = obj.getVar("custom").get_vector(1); local prob = obj.getVar("custom").get_vector(2); local time = obj.getVar("custom").get_vector(3); local damage = obj.getVar("custom").get_vector(4); local level = obj.getVar("custom").get_vector(5); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 9)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_LIGHTNING, prob, level, time, damage); obj.setTimeEvent(0,200,3,false); obj.sq_PlaySound("ELETRIC_RABBIT_SHOCK"); break; case 22: local aniPath1 = "passiveobject/witch_bykk/animation/elecrabbit/end/"; local successType = obj.getVar("custom").get_vector(0); local aniPath2 = "fail_elecrabbit.ani" if(successType == 1) aniPath2 = "success_elecrabbit.ani"; if(successType >= 2) aniPath2 = "great_elecrabbit.ani"; local ani = sq_CreateAnimation("",aniPath1 + aniPath2); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); switch(successType){ case 0: currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath1 + "fail_thunder_03.ani"),true); break; case 1: currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath1 + "success_thunder_03.ani"),true); break; case 2: currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath1 + "great_thunder_03.ani"),true); break; } break; } break; case 2: switch(state){ case 20: local aniPath1 = "passiveobject/witch_bykk/animation/elecrabbit/start/"; local successType = obj.getVar("custom").get_vector(0); local aniPath2 = "fail_ground_03.ani" if(successType == 1) aniPath2 = "success_ground_03.ani"; if(successType >= 2) aniPath2 = "great_ground_03.ani"; local ani = sq_CreateAnimation("",aniPath1 + aniPath2); obj.setCurrentAnimation(ani); break; case 21: local aniPath1 = "passiveobject/witch_bykk/animation/elecrabbit/loop/"; local successType = obj.getVar("custom").get_vector(0); local aniPath2 = "fail_ground_01.ani" if(successType == 1) aniPath2 = "success_ground_01.ani"; if(successType >= 2) aniPath2 = "great_ground_01.ani"; local ani = sq_CreateAnimation("",aniPath1 + aniPath2); obj.setCurrentAnimation(ani); break; case 22: local aniPath1 = "passiveobject/witch_bykk/animation/elecrabbit/end/"; local successType = obj.getVar("custom").get_vector(0); local aniPath2 = "fail_ground_02.ani" if(successType == 1) aniPath2 = "success_ground_02.ani"; if(successType >= 2) aniPath2 = "great_ground_02.ani"; local ani = sq_CreateAnimation("",aniPath1 + aniPath2); obj.setCurrentAnimation(ani); break; } break; case 4: switch(state){ case 20: local aniPath1 = "passiveobject/witch_bykk/animation/elecrabbit/talisman/start/"; local successType = obj.getVar("custom").get_vector(0); local ani = sq_CreateAnimation("",aniPath1 + "success_start_elecrabbit.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath1 + "success_thunder_02.ani"),true); break; case 21: local aniPath1 = "passiveobject/witch_bykk/animation/elecrabbit/talisman/loop/"; local successType = obj.getVar("custom").get_vector(0); local ani = sq_CreateAnimation("",aniPath1 + "success_loop_elecrabbit.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath1 + "success_thunder_01.ani"),true); local totalDamage = obj.getVar("custom").get_vector(1); local prob = obj.getVar("custom").get_vector(2); local time = obj.getVar("custom").get_vector(3); local damage = obj.getVar("custom").get_vector(4); local level = obj.getVar("custom").get_vector(5); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 9)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_LIGHTNING, prob, level, time, damage); obj.setTimeEvent(0,200,3,false); obj.sq_PlaySound("ELETRIC_RABBIT_SHOCK"); break; case 22: local aniPath1 = "passiveobject/witch_bykk/animation/elecrabbit/talisman/end/"; local successType = obj.getVar("custom").get_vector(0); local ani = sq_CreateAnimation("",aniPath1 + "success_elecrabbit.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath1 + "success_thunder_03.ani"),true); break; } break; } break; case SKILL_BYKK_ENHANCEDMAGICMISSILE://改良魔法星彈 switch(subtype){ case 1: switch(state){ case 20: local aniPath = "passiveobject/witch_bykk/animation/enhancedmagicmissile/new/success_n.ani"; if(obj.getVar("custom").get_vector(0) >= 2) aniPath = "passiveobject/witch_bykk/animation/enhancedmagicmissile/new/great_n.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); if(obj.getVar("custom").get_vector(0) >= 2)obj.getVar("targetObj").clear_obj_vector(); break; case 21: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/enhancedmagicmissile/new/dummy.ani"); obj.setCurrentAnimation(ani); local sub = obj.getVar("custom").get_vector(6); obj.setTimeEvent(0,150 * (2 / (sub + 2)),2 + sub,false); sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/enhancedmagicmissile/new/bluelight_dodge0.ani",10,0,0); sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/enhancedmagicmissile/new/bluelight_dodge1.ani",10,0,0); sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/enhancedmagicmissile/new/bluelight_dodge2.ani",10,0,0); if(obj.getVar("custom").get_vector(0) >= 2){ sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/enhancedmagicmissile/new/bluelight_dodge3.ani",10,0,0); sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/enhancedmagicmissile/new/bluelight_dodge4.ani",10,0,0); } break; case 22: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/enhancedmagicmissile/new/dummy.ani"); obj.setCurrentAnimation(ani); sq_SetCustomRotate(obj, sq_ToRadian(71.08)); break; case 23: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/enhancedmagicmissile/familiar/endfamiliar_03.ani"); obj.setCurrentAnimation(ani); local totalDamage = sq_GetCurrentAttackBonusRate(obj); local prob = obj.getVar("custom").get_vector(1); local time = obj.getVar("custom").get_vector(2); local damage = obj.getVar("custom").get_vector(3); local damageRate = obj.getVar("custom").get_vector(4); local level = obj.getVar("custom").get_vector(5); totalDamage = totalDamage * damageRate / 100; sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 12)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_LIGHTNING, prob, level, time,damage); sq_SetCustomRotate(obj, sq_ToRadian(0.0)); local sub = obj.getVar("custom").get_vector(7); obj.setTimeEvent(1,200 * (2/ (2 + sub)),2 + sub,false); break; case 24: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/enhancedmagicmissile/familiar/fail_n.ani"); obj.setCurrentAnimation(ani); sq_SetCustomRotate(obj, sq_ToRadian(0.0)); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/enhancedmagicmissile/familiar/fail_d.ani"),true); sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/enhancedmagicmissile/familiar/fail1.ani",0,0,0); sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/enhancedmagicmissile/familiar/fail2.ani",0,0,0); break; } break; } break; case SKILL_BYKK_FLUORECOLLIDER://電鳗碰撞機 switch(subtype){ case 1: local aniPath = "passiveobject/witch_bykk/animation/fluorecollider/"; switch(state){ case 20://start local ani = sq_CreateAnimation("",aniPath + "create_body.ani"); obj.setCurrentAnimation(ani);// local speedRate = obj.getVar("custom").get_vector(5); local pooledObj = createOnlyDrawObject_witch_bykk(obj,aniPath + "create_area.ani",false,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM); local range = obj.getVar("custom").get_vector(1); local pAni = pooledObj.getCurrentAnimation(); local sizeRate = range.tofloat() / 300.0; pAni.setImageRateFromOriginal(sizeRate, sizeRate); obj.getVar("effect").clear_obj_vector(); obj.getVar("effect").push_obj_vector(pooledObj); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "create_body_glow.ani"),true); currentAni.addLayerAnimation(-1,sq_CreateAnimation("",aniPath + "create_wheel.ani"),true); if(speedRate > 0) currentAni.setSpeedRate(100000.0 / (1000.0 - speedRate.tofloat())); break; case 21://loop local ani = sq_CreateAnimation("",aniPath + "stay_body.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "stay_body_glow.ani"),true); local successType = obj.getVar("custom").get_vector(0); local sub = obj.getVar("custom").get_vector(2); if(sub >= 1) currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/fluorecollider/stay_wheel_under.ani"),true); else currentAni.addLayerAnimation(-1,sq_CreateAnimation("",aniPath + "stay_wheel_under.ani"),true); currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "stay_wheel_over1.ani"),true); currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "stay_wheel_over2.ani"),true); currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "stay_wheel_spark1.ani"),true); currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "stay_wheel_spark2.ani"),true); currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "stay_needle1.ani"),true); currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "stay_needle2.ani"),true); currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "stay_needle3.ani"),true); currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "stay_needle4.ani"),true); currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "stay_lightning_rod.ani"),true); currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "stay_electric.ani"),true); switch(successType){ case 0: if(sub == 0){ local pooledObj = createOnlyDrawObject_witch_bykk(obj,aniPath + "shock.ani",false,obj.getDirection(),sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(),-70),sq_GetYPos(obj) + 2,32,ENUM_DRAWLAYER_NORMAL); obj.getVar("effect").push_obj_vector(pooledObj); } break; case 2: case 3: currentAni.addLayerAnimation(2,sq_CreateAnimation("",aniPath + "stay_bulb_great.ani"),true); currentAni.addLayerAnimation(2,sq_CreateAnimation("",aniPath + "stay_electric_great.ani"),true); case 1: currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "stay_bulb_success1.ani"),true); currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "stay_bulb_success2.ani"),true); currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "stay_electric_success.ani"),true); break; } local pooledObj = createOnlyDrawObject_witch_bykk(obj,aniPath + "thunder_spark.ani",false,obj.getDirection(),sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(),10),sq_GetYPos(obj) + 1,195,ENUM_DRAWLAYER_NORMAL); obj.getVar("effect").push_obj_vector(pooledObj); local lifeTime = obj.getVar("custom").get_vector(4); obj.setTimeEvent(0,lifeTime,1,false); obj.getVar("targetObj").clear_obj_vector(); obj.setTimeEvent(2,180,-1,false); local range = obj.getVar("custom").get_vector(1); local sizeRate = range.tofloat() / 300.0; sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); break; case 22://end obj.stopTimeEvent(1); obj.stopTimeEvent(2); local ani = sq_CreateAnimation("",aniPath + "exp.ani"); obj.setCurrentAnimation(ani); local totalDamage = obj.getVar("custom").get_vector(3); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 14)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.sq_AddObjectParticleCreater("particle/fluorecolliderdestroy1.ptl"); obj.sq_AddObjectParticleCreater("particle/fluorecolliderdestroy2.ptl"); obj.sq_AddObjectParticleCreater("particle/fluorecolliderdestroy3.ptl"); obj.sq_SetObjectParticlePos(0, 1, 50); local size = obj.getVar("effect").get_obj_vector_size(); for(local i = 0; i < size; i++){ local pooledObj = obj.getVar("effect").get_obj_vector(i); if(pooledObj) pooledObj.setValid(false); } sq_CreateParticle("passiveobject/common/particle/lightexplosionparticle1.ptl", obj, 0, -1, 50, true, 5, 0, 2); sq_CreateParticle("passiveobject/common/particle/lightexplosionparticle2.ptl", obj, 0, -1, 50, true, 20, 0, 4); sq_CreateParticle("passiveobject/common/particle/lightexplosionparticle3.ptl", obj, 0, -1, 50, true, 100, 0, 16); sq_CreateParticle("passiveobject/common/particle/lightexplosionparticle4.ptl", obj, 0, -1, 50, true, 10, 0, 2); break; } break; } break; case SKILL_BYKK_FUSIONCRAFT://技藝融合 break; case SKILL_BYKK_HEATINGFURNACE://爆炎加熱爐 switch(subtype){ case 1: local aniPath = "passiveobject/witch_bykk/animation/heatingfurnace/"; switch(state){ case 20://cast local ani = sq_CreateAnimation("",aniPath + "body_n_startup.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "foot_n_startup.ani"),true); if(true) currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "homunculus/foot_n_startup.ani"),true); local Delay = obj.getVar("custom").get_vector(0); local speedRate = 800.0 / Delay.tofloat() * 100.0; currentAni.setSpeedRate(200.0); break; case 21://loop local ani = sq_CreateAnimation("",aniPath + "body_n_loop.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "eye_n_loop.ani"),true); currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "normal_d_up.ani"),true); currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "foot_n_loop.ani"),true); currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "dust.ani"),true); if(obj.getVar("custom").get_vector(2) > 0){//助手鼓風機 currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "homunculus/foot_n_loop.ani"),true); currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "homunculus/lanternjump.ani"),true); } local successType = obj.getVar("custom").get_vector(1); if(successType >= 2){//大成功、超大成功時 currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "great_bulb.ani"),true); currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "great_d_up_fire.ani"),true); currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath + "great_d_up.ani"),true); } // obj.getVar("effect").clear_obj_vector(); // for(local i = 1; i < 5; i++){ // local pooledObj = createOnlyDrawObject_witch_bykk(obj,aniPath + "smoke"+i.tostring()+".ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL); // obj.getVar("effect").push_obj_vector(pooledObj); // } //obj.setTimeEvent(0,6000,1,false); break; case 22://end local ani = sq_CreateAnimation("","passiveobject/common/animation/fireexplosion.ani"); obj.setCurrentAnimation(ani);// obj.sq_AddObjectParticleCreater("particle/heatingfurnacefail1.ptl"); obj.sq_AddObjectParticleCreater("particle/heatingfurnacefail2.ptl"); obj.sq_AddObjectParticleCreater("particle/heatingfurnacefail3.ptl"); obj.sq_SetObjectParticlePos(0, 1, 50); // local size = obj.getVar("effect").get_obj_vector_size(); // for(local i = 0; i < size; i++){ // local pooledObj = obj.getVar("effect").get_obj_vector(i); // if(pooledObj) pooledObj.setValid(false); // } break; } break; } break; case SKILL_BYKK_HOMUNCULUS://魔道學助手 switch(subtype){ case 31: switch(state){ case 20: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/jackfrostaskill/start_cloud.ani"); obj.setCurrentAnimation(ani); break; case 21: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/jackfrostaskill/cloud.ani"); obj.setCurrentAnimation(ani); local hitMax = obj.getVar("custom").get_vector(0); obj.setTimeEvent(2,150,hitMax,true); obj.setTimeEvent(3,150*hitMax+100,1,false); sq_CreateParticle("passiveobject/witch_bykk/particle/acidrain.ptl", obj, 0, 0, 0, true, 80, 0, (150*hitMax+100) / 80); obj.setTimeEvent(4,800,1,false); break; } break; case 41: switch(state){ case 20: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/lantern/launchjolstart.ani"); obj.setCurrentAnimation(ani); sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/homonculous/lantern/launchjolfirestart.ani",0,0,0); break; case 21: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/lantern/launchjolmove.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/lantern/launchjolfiremove.ani"),true); obj.sq_SetMoveParticle("particle/goblin_fastthrowstone.ptl", 0.0, 0.0); break; } break; } break; case SKILL_BYKK_JACKFROSTICEWATER://雪人刨冰 local aniPath = "passiveobject/witch_bykk/animation/jackfrosticewater/"; local effect_aniPath = "character/mage/effect/animation/witch_bykk/jackfrosticewater/"; switch(subtype){ case 1: switch(state){ case 20: local aniPath1 = "start/jackfrosticewaterstartback_03.ani"; if(obj.getVar("custom").get_vector(2) > 0) aniPath1 = "start/talisman/jackfrosticewaterstartback_03.ani"; local ani = sq_CreateAnimation("",aniPath + aniPath1); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); if(obj.getVar("custom").get_vector(2) > 0){ currentAni.addLayerAnimation(-1,sq_CreateAnimation("",effect_aniPath + "start/talisman/jackfrosticewaterstartfloor_03.ani"),true); currentAni.addLayerAnimation(-2,sq_CreateAnimation("",effect_aniPath + "start/talisman/jackfrosticewaterstartfloortwister_01.ani"),true); } else{ currentAni.addLayerAnimation(-1,sq_CreateAnimation("",effect_aniPath + "start/jackfrosticewaterstartfloor_03.ani"),true); currentAni.addLayerAnimation(-2,sq_CreateAnimation("",effect_aniPath + "start/jackfrosticewaterstartfloortwister_01.ani"),true); } obj.setTimeEvent(3,150,1,false); obj.sq_PlaySound("JACKFROST_ICEWATER_START"); break; case 21: local aniPath1 = "loop/jackfrosticewaterloopback_01.ani"; if(obj.getVar("custom").get_vector(2) > 0) aniPath1 = "loop/talisman/jackfrosticewaterloopback_01.ani"; local ani = sq_CreateAnimation("",aniPath + aniPath1); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(-1,sq_CreateAnimation("",effect_aniPath + "loop/jackfrosticewaterloopfloor_01.ani"),true); if(obj.getVar("custom").get_vector(2) > 0){ currentAni.addLayerAnimation(-2,sq_CreateAnimation("",effect_aniPath + "loop/talisman/jackfrosticewaterloopfloortwister_01.ani"),true); currentAni.addLayerAnimation(1001,sq_CreateAnimation("",effect_aniPath + "loop/talisman/jackfrosticewaterloopfront_06.ani"),true); } else{ currentAni.addLayerAnimation(-2,sq_CreateAnimation("",effect_aniPath + "loop/jackfrosticewaterloopfloortwister_01.ani"),true); currentAni.addLayerAnimation(1001,sq_CreateAnimation("",effect_aniPath + "loop/jackfrosticewaterloopfront_06.ani"),true); } obj.setTimeEvent(0,5000,1,false); if(obj.getVar("custom").get_vector(2) > 0) obj.setTimeEvent(4,250,-1,false); else obj.setTimeEvent(4,500,-1,false); break; case 22: obj.removeAllTimeEvent(); local totalDamage = obj.getVar("custom").get_vector(1); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 28)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local aniPath1 = "end/jackfrosticewaterendback_03.ani"; if(obj.getVar("custom").get_vector(2) > 0) aniPath1 = "end/talisman/jackfrosticewaterendback_03.ani"; local ani = sq_CreateAnimation("",aniPath + aniPath1); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(-1,sq_CreateAnimation("",effect_aniPath + "end/jackfrosticewaterendfloor_01.ani"),true); currentAni.addLayerAnimation(-2,sq_CreateAnimation("",effect_aniPath + "end/jackfrosticewaterendfloortwister_01.ani"),true); currentAni.addLayerAnimation(1001,sq_CreateAnimation("",effect_aniPath + "end/jackfrosticewaterendfront_10.ani"),true); local parentObj = obj.getParent(); if(!parentObj) break; CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "appendage/character/ap_common_suck.nut"); //obj.sq_PlaySound("JACKFROST_ICEWATER_EXP"); break; } break; case 2: switch(state){ case 20: local aniPath1 = "start/jackfrosticewaterstartparticle_08.ani"; if(obj.getVar("custom").get_vector(2) > 0) aniPath1 = "start/talisman/jackfrosticewaterstartparticle_08.ani"; local ani = sq_CreateAnimation("",aniPath + aniPath1); obj.setCurrentAnimation(ani); obj.setTimeEvent(3,150,1,false); local currentAni = obj.getCurrentAnimation(); break; case 21: local aniPath1 = "loop/jackfrosticewaterloopparticle_01.ani"; if(obj.getVar("custom").get_vector(2) > 0) aniPath1 = "loop/talisman/jackfrosticewaterloopparticle_01.ani"; local ani = sq_CreateAnimation("",aniPath + aniPath1); obj.setCurrentAnimation(ani); obj.setTimeEvent(0,4500,1,false); local currentAni = obj.getCurrentAnimation(); break; case 22: local aniPath1 = "end/jackfrosticewaterendparticle_12.ani"; if(obj.getVar("custom").get_vector(2) > 0) aniPath1 = "end/talisman/jackfrosticewaterendparticle_12.ani"; local ani = sq_CreateAnimation("",aniPath + aniPath1); obj.setCurrentAnimation(ani); break; } break; } break; case SKILL_BYKK_JACKOHALLOWEEN://搗蛋傑克 local aniPath = "passiveobject/witch_bykk/animation/jackohalloween/"; local effect_aniPath = "character/mage/effect/animation/witch_bykk/jackohalloween/"; switch(subtype){ case 1: switch(state){ case 20: local ani = sq_CreateAnimation("",aniPath + "jackohalloweenready.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); local castAniTime = currentAni.getDelaySum(false); local castTime = obj.getVar("custom").get_vector(0); local speedRate = castAniTime.tofloat() / castTime.tofloat() * 100.0; //print(speedRate); currentAni.setSpeedRate(speedRate); break; case 21: if(obj.isExistTimeEvent(3)) obj.stopTimeEvent(3); local ani = sq_CreateAnimation("",aniPath + "jackohalloweenstart_12.ani"); obj.setCurrentAnimation(ani); sq_AddDrawOnlyAniFromParent(obj,aniPath + "jackohalloweenstart_00.ani",0,-1,0); sq_AddDrawOnlyAniFromParent(obj,aniPath + "jackohalloweenstart_13.ani",0,1,0); sq_AddDrawOnlyAniFromParent(obj,aniPath + "jackohalloweenstart_14.ani",0,1,0); sq_AddDrawOnlyAniFromParent(obj,aniPath + "jackohalloweenstart_20.ani",0,1,0); sq_AddDrawOnlyAniFromParent(obj,aniPath + "jackohalloweenstart_21.ani",0,1,0); sq_AddDrawOnlyAniFromParent(obj,aniPath + "jackohalloweenstart_30.ani",0,1,0); sq_AddDrawOnlyAniFromParent(obj,aniPath + "jackohalloweenstart_31.ani",0,1,0); sq_AddDrawOnlyAniFromParent(obj,aniPath + "jackohalloweenstart_32.ani",0,1,0); sq_AddDrawOnlyAniFromParent(obj,aniPath + "jackohalloweenstart_33.ani",0,1,0); sq_AddDrawOnlyAniFromParent(obj,aniPath + "jackohalloweenstart_37.ani",0,1,0); sq_AddDrawOnlyAniFromParent(obj,aniPath + "jackohalloweenstart_38.ani",0,1,0); break; case 22: local ani = sq_CreateAnimation("",aniPath + "jackohalloweenlavaspitstarta_jackohollween.ani"); obj.setCurrentAnimation(ani); obj.setTimeEvent(0, obj.getVar("custom").getInt(11), 1, false); if(obj.getVar().getBool(0)){ local lava_Obj = obj.getVar("jackohalloween_lava").get_obj_vector(0); if(lava_Obj){ local colObj = sq_GetCNRDObjectToCollisionObject(lava_Obj); colObj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); } } break; case 23: local ani = sq_CreateAnimation("",aniPath + "jackohalloweenlavaspitstartb_jackohollween.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "jackohalloweenlavaspitstartb_fire015_01.ani"),true); local lava_Obj = obj.getVar("jackohalloween_lava").get_obj_vector(0); if(lava_Obj){ local colObj = sq_GetCNRDObjectToCollisionObject(lava_Obj); colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); } break; case 24: local ani = sq_CreateAnimation("",aniPath + "jackohalloweenlavaspitloop_00.ani"); obj.setCurrentAnimation(ani); obj.setTimeEvent(3,1000,1,false); break; case 25: if(obj.isExistTimeEvent(3)) obj.stopTimeEvent(3); local ani = sq_CreateAnimation("",aniPath + "jackohalloweenlavaspitend_jackohollween.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(1,sq_CreateAnimation("",aniPath + "jackohalloweenlavaspitend_fire015_01.ani"),true); local lava_Obj = obj.getVar("jackohalloween_lava").get_obj_vector(0); if(lava_Obj){ local colObj = sq_GetCNRDObjectToCollisionObject(lava_Obj); colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); } break; case 26: local ani = sq_CreateAnimation("",aniPath + "jackoholloweenend_jackohollween.ani"); obj.setCurrentAnimation(ani); break; } break; case 2: switch(state){ case 20://wait obj.removeAllTimeEvent(); local ani = sq_CreateAnimation("",aniPath + "magma/jackohalloweenlava_wait.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.setLoop(true); local parentObj = obj.getParent(); sq_SetCurrentDirection(obj, parentObj.getDirection()); sq_setCurrentAxisPos(obj, 1, sq_GetYPos(parentObj)); obj.sq_PlaySound("JACKOHALLOWEEN_FIRE"); break; case 21://start local ani = sq_CreateAnimation("",aniPath + "magma/jackohalloweenlava_start.ani"); obj.setCurrentAnimation(ani); obj.setTimeEvent(1,300,1,false); local totalDamage = obj.getVar("custom").get_vector(0); local hitTime = obj.getVar("custom").get_vector(1); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 30)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.setTimeEvent(4,hitTime,-1,false); obj.sq_PlaySound("JACKOHALLOWEEN_FIRE_LOOP_START"); break; case 22://loop local ani = sq_CreateAnimation("",aniPath + "magma/jackohalloweenlava_loop.ani"); obj.setCurrentAnimation(ani); obj.setTimeEvent(5,500,-1,true); break; case 23://end obj.removeAllTimeEvent(); local ani = sq_CreateAnimation("",aniPath + "magma/jackohalloweenlava_end.ani"); obj.setCurrentAnimation(ani); obj.sq_PlaySound("JACKOHALLOWEEN_FIRE_LOOP_END"); break; } break; } break; case SKILL_BYKK_LAVAPOTION://熔岩藥瓶 switch(subtype){ case 4: switch(state){ case 20: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/heatingfurnace/stone_piece_normal2.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(2,sq_CreateAnimation("","passiveobject/witch_bykk/animation/heatingfurnace/stone_piece_great2.ani"),true); break; case 21: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/heatingfurnace/stone_piece_normal2.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(2,sq_CreateAnimation("","passiveobject/witch_bykk/animation/heatingfurnace/stone_piece_great2.ani"),true); break; case 22: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/heatingfurnace/stone_piece_normal_break.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(2,sq_CreateAnimation("","passiveobject/witch_bykk/animation/heatingfurnace/stone_piece_great_break.ani"),true); sq_CreateParticle("passiveobject/character/mage/particle/lavapotionfireexplosionparticle1.ptl", obj, 0, 1, 1, true, 5, 0, 2); sq_CreateParticle("passiveobject/character/mage/particle/lavapotionfireexplosionparticle2.ptl", obj, 0, 1, 1, true, 20, 0, 4); sq_CreateParticle("passiveobject/character/mage/particle/lavapotionfireexplosionparticle3.ptl", obj, 0, 1, 1, true, 100, 0, 16); sq_CreateParticle("passiveobject/character/mage/particle/lavapotionfireexplosionparticle4.ptl", obj, 0, 1, 1, true, 10, 0, 2); break; } break; case 3: switch(state){ case 20: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/lavapotionair_fall.ani"); obj.setCurrentAnimation(ani); break; case 21: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/start_d_up.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/start_n_down.ani"),true); currentAni.addLayerAnimation(0,sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/02_d_up.ani"),false); currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/02_n_down.ani"),false); break; case 22: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/loop_n_down.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/loop_d_up.ani"),true); currentAni.addLayerAnimation(0,sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/loop_02_d_up.ani"),true); currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/loop_02_n_down.ani"),true); if(obj.getVar("custom").get_vector(1) >= 3) obj.setTimeEvent(4,300,-1,false); break; case 23: if(obj.isExistTimeEvent(4)) obj.stopTimeEvent(4); local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/end_d_up.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/end_n_down.ani"),true); currentAni.addLayerAnimation(0,sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/end_02_d_up.ani"),true); currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/end_02_n_down.ani"),true); break; } if(state != 20){ local currentAni = obj.getCurrentAnimation(); local tiaozheng = 1.0; if(obj.getVar("custom").get_vector(1) >= 2) tiaozheng = 1.35 local sizeRate = obj.getVar("custom").get_vector(0).tofloat() / 100.0 * tiaozheng; currentAni.setImageRateFromOriginal(sizeRate, sizeRate); currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); } break; } break; case SKILL_BYKK_MEGADRILL://冰霜鑽孔車 switch(subtype){ case 1://失敗形態 switch(state){ case 20: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/dummy.ani"); obj.setCurrentAnimation(ani); sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/megadrill/familiar/fail_n.ani",-150,0,180); sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/megadrill/familiar/fail_d.ani",-150,-1,179); sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/megadrill/familiar/fail1.ani",-150,2,182); sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/megadrill/familiar/fail2.ani",-150,1,181); local currentAni = obj.getCurrentAnimation(); sq_SetFrameDelayTime(currentAni, 0, 230); sq_SetFrameDelayTime(currentAni, 1, 230); break; case 21://35 local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/fail/megadrillfailstart_57.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/fail/megadrillfailstart_48.ani"),true); // print(currentAni.getDelaySum(false)); local totalDamage = obj.getVar("custom").get_vector(0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 35)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.setTimeEvent(0,1400,1,false); obj.setTimeEvent(1,500,1,false); obj.setTimeEvent(2,50,-1,false); obj.setTimeEvent(3,300,1,false); break; case 22://36 obj.stopTimeEvent(2); local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/fail/megadrillfailend_07.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/fail/megadrillfailendbttom_01.ani"),true); local totalDamage = obj.getVar("custom").get_vector(1); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 36)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); if(obj.getVar("custom").get_vector(2) > 0){ local parentObj = obj.getParent(); if(!parentObj) break; CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "appendage/character/ap_common_suck.nut"); } break; } break; case 2://普通形態 switch(state){ case 20://動畫 local successType = obj.getVar("custom").get_vector(0); local aniPath = "passiveobject/witch_bykk/animation/megadrill/familiar/success_n.ani"; if(successType >= 2) aniPath = "passiveobject/witch_bykk/animation/megadrill/familiar/great_n.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); if(successType == 1) currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/familiar/success_d.ani"),true); else{ currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/familiar/great_d.ani"),true); currentAni.addLayerAnimation(2,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/familiar/great1.ani"),true); currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/familiar/great2.ani"),true); } break; case 21://生成 local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/appear.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); local successType = obj.getVar("custom").get_vector(0); switch(successType){ case 1: currentAni.addLayerAnimation(0,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/appeardrillsuccess.ani"),true); currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/appearglowsuccess.ani"),true); break; case 2: currentAni.addLayerAnimation(0,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/appeardrillgreat.ani"),true); currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/appearglowgreat.ani"),true); break; } break; case 22://停止狀態 case 23://前進狀態 case 24://後退狀態 obj.getVar().setBool(0,false); obj.sq_PlaySound("MEGA_DRILL_LOOP",1001); local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/move.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.setLoop(true); currentAni.addLayerAnimation(-1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/body.ani"),true); currentAni.addLayerAnimation(10,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/bodycover.ani"),true); local successType = obj.getVar("custom").get_vector(0); switch(successType){ case 1: currentAni.addLayerAnimation(1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/drillsuccess.ani"),true); currentAni.addLayerAnimation(1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/pistonsuccess.ani"),true); currentAni.addLayerAnimation(3,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/glowsuccess.ani"),true); break; case 2: currentAni.addLayerAnimation(1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/drillgreat1.ani"),true); currentAni.addLayerAnimation(2,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/drillgreat2.ani"),true); currentAni.addLayerAnimation(3,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/drillgreat3.ani"),true); currentAni.addLayerAnimation(1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/pistongreat.ani"),true); currentAni.addLayerAnimation(3,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/glowgreat.ani"),true); break; } switch(state){ case 22: currentAni.addLayerAnimation(10001,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/stop_wheel1.ani"),true); currentAni.addLayerAnimation(10002,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/stop_wheel2.ani"),true); currentAni.addLayerAnimation(10001,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/stop_wheel3.ani"),true); obj.stopTimeEvent(0); break; case 23: currentAni.addLayerAnimation(10001,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/wheel1.ani"),true); currentAni.addLayerAnimation(10002,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/wheel2.ani"),true); currentAni.addLayerAnimation(10001,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/wheel3.ani"),true); obj.setTimeEvent(0,400,-1,true); break; case 24: currentAni.addLayerAnimation(10001,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/backwheel1.ani"),true); currentAni.addLayerAnimation(10002,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/backwheel2.ani"),true); currentAni.addLayerAnimation(10001,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/backwheel3.ani"),true); obj.setTimeEvent(0,400,-1,true); break; } break; case 25://爆炸 local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/explosion.ani"); obj.setCurrentAnimation(ani); obj.removeAllTimeEvent(); obj.stopSound(1001); obj.sq_PlaySound("MEGA_DRILL_ICEEXP"); local totalDamage = obj.getVar("custom").get_vector(4); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 37)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.setTimeEvent(3,80,2,false); obj.setTimeEvent(4,80,1,true); obj.setTimeEvent(5,80,1,true); obj.setTimeEvent(6,80,1,true); obj.setTimeEvent(7,80,1,true); sq_CreateParticle("passiveobject/witch_bykk/particle/megadrilldestroy0.ptl", obj, -50,0,20, true, 30, 0, 1); sq_CreateParticle("passiveobject/witch_bykk/particle/megadrilldestroy1.ptl", obj, 0,0,50, true, 30, 0, 1); sq_CreateParticle("passiveobject/witch_bykk/particle/megadrilldestroy2.ptl", obj, 0,0,50, true, 30, 0, 1); sq_CreateParticle("passiveobject/witch_bykk/particle/megadrilldestroy3.ptl", obj, 0,0,50, true, 30, 0, 1); sq_CreateParticle("passiveobject/witch_bykk/particle/megadrilldestroy4.ptl", obj, 0,0,50, true, 30, 0, 1); sq_CreateParticle("passiveobject/witch_bykk/particle/megadrilldestroy5.ptl", obj, 0,0,50, true, 30, 0, 2); sq_CreateParticle("passiveobject/witch_bykk/particle/megadrilldestroy6.ptl", obj, 0,0,50, true, 30, 0, 2); break; } break; case 12://助手形態 switch(state){ case 20://動畫 local successType = obj.getVar("custom").get_vector(0); local aniPath = "passiveobject/witch_bykk/animation/megadrill/familiar/success_n.ani"; if(successType >= 2) aniPath = "passiveobject/witch_bykk/animation/megadrill/familiar/great_n.ani"; local ani = sq_CreateAnimation("",aniPath); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); if(successType == 1) currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/familiar/success_d.ani"),true); else{ currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/familiar/great_d.ani"),true); currentAni.addLayerAnimation(2,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/familiar/great1.ani"),true); currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/familiar/great2.ani"),true); } break; case 21://生成 local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/appear.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); local successType = obj.getVar("custom").get_vector(0); switch(successType){ case 1: currentAni.addLayerAnimation(0,sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/appeardrillsuccess.ani"),true); currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/appearglowsuccess.ani"),true); break; case 2: currentAni.addLayerAnimation(0,sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/appeardrillgreat.ani"),true); currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/homonculous/appearglowgreat.ani"),true); break; } obj.setTimeEvent(1,500,-1,false); break; case 22://停止狀態 case 23://前進狀態 case 24://後退狀態 obj.getVar().setBool(0,false); obj.sq_PlaySound("MEGA_DRILL_LOOP",1001); local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/move.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.setLoop(true); currentAni.addLayerAnimation(-1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/homonculous/megadrill/body.ani"),true); currentAni.addLayerAnimation(10,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/homonculous/megadrill/bodycover.ani"),true); // local successType = obj.getVar("custom").get_vector(0); switch(successType){ case 1: currentAni.addLayerAnimation(1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/drillsuccess.ani"),true); currentAni.addLayerAnimation(1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/pistonsuccess.ani"),true); currentAni.addLayerAnimation(3,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/homonculous/megadrill/glowsuccess.ani"),true); break; case 2: currentAni.addLayerAnimation(1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/drillgreat1.ani"),true); currentAni.addLayerAnimation(2,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/drillgreat2.ani"),true); currentAni.addLayerAnimation(3,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/drillgreat3.ani"),true); currentAni.addLayerAnimation(1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/pistongreat.ani"),true); currentAni.addLayerAnimation(3,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/homonculous/megadrill/glowgreat.ani"),true); currentAni.addLayerAnimation(4,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/homonculous/megadrill/lightgreat1.ani"),true); currentAni.addLayerAnimation(5,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/homonculous/megadrill/lightgreat2.ani"),true); break; } switch(state){ case 22: currentAni.addLayerAnimation(10001,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/homonculous/megadrill/stop_wheel1.ani"),true); currentAni.addLayerAnimation(10002,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/homonculous/megadrill/stop_wheel2.ani"),true); currentAni.addLayerAnimation(10001,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/homonculous/megadrill/stop_wheel3.ani"),true); obj.stopTimeEvent(0); break; case 23: currentAni.addLayerAnimation(10001,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/homonculous/megadrill/wheel1.ani"),true); currentAni.addLayerAnimation(10002,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/homonculous/megadrill/wheel2.ani"),true); currentAni.addLayerAnimation(10001,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/homonculous/megadrill/wheel3.ani"),true); obj.setTimeEvent(0,400,-1,true); break; case 24: currentAni.addLayerAnimation(10001,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/homonculous/megadrill/backwheel1.ani"),true); currentAni.addLayerAnimation(10002,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/homonculous/megadrill/backwheel2.ani"),true); currentAni.addLayerAnimation(10001,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/homonculous/megadrill/backwheel3.ani"),true); obj.setTimeEvent(0,400,-1,true); break; } break; case 25://爆炸 local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/megadrill/explosion.ani"); obj.setCurrentAnimation(ani); obj.removeAllTimeEvent(); obj.stopSound(1001); obj.sq_PlaySound("MEGA_DRILL_ICEEXP"); local totalDamage = obj.getVar("custom").get_vector(4); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 37)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.setTimeEvent(3,80,2,false); obj.setTimeEvent(4,80,1,true); obj.setTimeEvent(5,80,1,true); obj.setTimeEvent(6,80,1,true); obj.setTimeEvent(7,80,1,true); sq_CreateParticle("passiveobject/witch_bykk/particle/megadrilldestroy0.ptl", obj, -50,0,20, true, 30, 0, 1); sq_CreateParticle("passiveobject/witch_bykk/particle/megadrilldestroy1.ptl", obj, 0,0,50, true, 30, 0, 1); sq_CreateParticle("passiveobject/witch_bykk/particle/megadrilldestroy2.ptl", obj, 0,0,50, true, 30, 0, 1); sq_CreateParticle("passiveobject/witch_bykk/particle/megadrilldestroy3.ptl", obj, 0,0,50, true, 30, 0, 1); sq_CreateParticle("passiveobject/witch_bykk/particle/megadrilldestroy4.ptl", obj, 0,0,50, true, 30, 0, 1); sq_CreateParticle("passiveobject/witch_bykk/particle/megadrilldestroy5.ptl", obj, 0,0,50, true, 30, 0, 2); sq_CreateParticle("passiveobject/witch_bykk/particle/megadrilldestroy6.ptl", obj, 0,0,50, true, 30, 0, 2); sq_CreateParticle("character/mage/effect/animation/witch_bykk/homonculous/megadrill/jackfrost/megadrilldestroy0.ptl", obj, 0,0,75, true, 30, 0, 1); break; } break; } break; case SKILL_BYKK_UROBOROS://二覺 break; case SKILL_BYKK_LOLLIPOPCRUSH://超級棒棒糖 switch(subtype){ case 20: switch(state){ case 20: local aniPath1 = "passiveobject/witch_bykk/animation/lollipopcrush/"; local aniPath2 = "whitestart_dw_start.ani"; local sub = obj.getVar("custom").get_vector(0); if(sub == 1) aniPath2 = "blackstart_d_start.ani"; else if(sub == 2) aniPath2 = "bosestart_start.ani"; local ani = sq_CreateAnimation("",aniPath1 + aniPath2); obj.setCurrentAnimation(ani); break; case 21: local aniPath1 = "passiveobject/witch_bykk/animation/lollipopcrush/"; local aniPath2 = "whiteloop_dw_body.ani"; local sub = obj.getVar("custom").get_vector(0); if(sub == 1) aniPath2 = "blackloop_db_body.ani"; else if(sub == 2) aniPath2 = "boseloop_body.ani"; local ani = sq_CreateAnimation("",aniPath1 + aniPath2); obj.setCurrentAnimation(ani); obj.setTimeEvent(0,1000,1,false); obj.setTimeEvent(1,500,1,false); break; case 22: obj.stopTimeEvent(0); local aniPath1 = "passiveobject/witch_bykk/animation/lollipopcrush/"; local aniPath2 = "whiteend_dw_boom.ani",attackIndex = 57; local sub = obj.getVar("custom").get_vector(0); if(sub == 1){aniPath2 = "blackend_db_boomback.ani";attackIndex = 58;} else if(sub == 2){aniPath2 = "boseend_back.ani";attackIndex = 58;} local ani = sq_CreateAnimation("",aniPath1 + aniPath2); obj.setCurrentAnimation(ani); local totalDamage = obj.getVar("custom").get_vector(1); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); local level = obj.getVar("custom").get_vector(2); local prob = obj.getVar("custom").get_vector(3); local time = obj.getVar("custom").get_vector(4); local damage = obj.getVar("custom").get_vector(5); switch(sub){ case 0: local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_LIGHTNING, prob, level, time, damage); break; case 1: case 2: local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_BLIND, prob, level, time); break; } 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); } } function onEndCurrentAni_po_witch_bykk_kak(obj) { if(!obj) return; local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter()); local skillIndex = obj.getVar("skillIndex").get_vector(0); local subtype = obj.getVar("subtype").get_vector(0); local state = obj.getVar("state").get_vector(0); switch(skillIndex){ case SKILL_BYKK_ACIDCLOUD://魔道酸雨雲 switch(subtype){ case 1: switch(state){ case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; case 22: obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case 2: switch(state){ case 20: case 24: obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); break; case 26: if(obj.getVar().getBool(0)) obj.addSetStatePacket(27, null, STATE_PRIORITY_AUTO, false, ""); else obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; case 27: sq_SendDestroyPacketPassiveObject(obj); break; } break; case 3: sq_SendDestroyPacketPassiveObject(obj); break; case 4: case 5: case 6: case 7: switch(state){ case 21: sq_SendDestroyPacketPassiveObject(obj); break; } break; } break; case SKILL_BYKK_ANTIGRAVITYSTARTER://反重力裝置 switch(subtype){ case 1: switch(state){ case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; case 21: obj.removeAllTimeEvent(); local size = obj.getVar("targetObj").get_obj_vector_size(); for(local i = 0; i < size; i++){ local damager = sq_GetCNRDObjectToActiveObject(obj.getVar("targetObj").get_obj_vector(i)); if(damager || damager.getState() != STATE_DIE) damager.getVar("anti").setBool(0,false); } sq_SendDestroyPacketPassiveObject(obj); break; } break; case 2: case 3: case 4: sq_SendDestroyPacketPassiveObject(obj); break; } break; case SKILL_BYKK_BLACKMANTLE://暗影鬥篷 switch(subtype){ case 1: sq_SendDestroyPacketPassiveObject(obj); break; case 2: switch(state){ case 20: obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); break; case 22: sq_SendDestroyPacketPassiveObject(obj); break; } break; case 3: switch(state){ case 20: case 21: case 23: obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); break; case 24: sq_SendDestroyPacketPassiveObject(obj); break; } break; } break; case SKILL_BYKK_BROOMSPIN://旋轉掃把 break; case SKILL_BYKK_ELECTRICRABBIT://光電兔 switch(subtype){ case 1: case 4: switch(state){ case 20: case 21: obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); break; case 22: local totalDamage = obj.getVar("custom").get_vector(1); local damageRate = obj.getVar("custom").get_vector(6); totalDamage = (totalDamage.tofloat() * damageRate.tofloat() / 100.0).tointeger(); if(subtype == 1) cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_ELECTRICRABBIT,3,0,totalDamage,0,0,0,0,0,0,2); if(subtype == 4) cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_ELECTRICRABBIT,3,1,totalDamage,0,0,0,0,0,0,2); sq_SendDestroyPacketPassiveObject(obj); break; } break; case 2: switch(state){ case 20: case 21: obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); break; case 22: sq_SendDestroyPacketPassiveObject(obj); break; } break; } break; case SKILL_BYKK_ENHANCEDMAGICMISSILE://改良魔法星彈 switch(subtype){ case 1: switch(state){ case 20: case 22: obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); break; case 21: if(obj.getVar("custom").get_vector(0) >= 2){ if(obj.getVar("targetObj").get_obj_vector_size() > 0){ obj.getVar("move").clear_vector(); obj.getVar("move").push_vector(sq_GetXPos(obj)); obj.getVar("move").push_vector(sq_GetZPos(obj)); obj.getVar("move").push_vector(100); obj.getVar("move").push_vector(300); obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); } else obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); } else sq_SendDestroyPacketPassiveObject(obj); break; case 23: case 24: sq_SendDestroyPacketPassiveObject(obj); break; } break; } break; case SKILL_BYKK_FLUORECOLLIDER://電鳗碰撞機 switch(subtype){ case 1: switch(state){ case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; case 22: sq_SendDestroyPacketPassiveObject(obj); break; } break; } break; case SKILL_BYKK_FUSIONCRAFT://技藝融合 break; case SKILL_BYKK_HEATINGFURNACE://爆炎加熱爐 switch(subtype){ case 1: switch(state){ case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; case 22: case 23: sq_SendDestroyPacketPassiveObject(obj); break; } break; case 2: case 4: case 6: case 7: sq_SendDestroyPacketPassiveObject(obj); break; } break; case SKILL_BYKK_HOMUNCULUS://魔道學助手 if((subtype == 31 && state == 20) || (subtype == 41 && state == 20)){obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");return;} sq_SendDestroyPacketPassiveObject(obj); break; case SKILL_BYKK_JACKFROSTICEWATER://雪人刨冰 switch(subtype){ case 1: case 2: switch(state){ case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; case 22: sq_SendDestroyPacketPassiveObject(obj); break; } break; } break; case SKILL_BYKK_JACKOHALLOWEEN://搗蛋傑克 switch(subtype){ case 1: switch(state){ case 20: case 21: case 22: case 23: case 25: // if(state == 21){ // obj.getVar().clear_ct_vector(); // obj.getVar().push_ct_vector(); // local timer = obj.getVar().get_ct_vector(0); // timer.Reset(); // timer.Start(10000,0); // } obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); break; case 26: sqrChr.getVar("jackohalloween_pumpkin").clear_obj_vector(); local lava_Obj = obj.getVar("jackohalloween_lava").get_obj_vector(0); if(lava_Obj){ local colObj = sq_GetCNRDObjectToCollisionObject(lava_Obj); sq_SendDestroyPacketPassiveObject(colObj); } sq_SendDestroyPacketPassiveObject(obj); break; } break; case 2: switch(state){ case 21: obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); break; case 23: sq_SendDestroyPacketPassiveObject(obj); break; } break; } break; case SKILL_BYKK_LAVAPOTION://熔岩藥瓶 switch(subtype){ case 4: if(state == 22) sq_SendDestroyPacketPassiveObject(obj); break; case 1: case 2: sq_SendDestroyPacketPassiveObject(obj); break; case 3: if(state == 21) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); else if(state == 23){ local size = obj.getVar("targetObj").get_obj_vector_size(); for(local i = 0; i < size; i++){ local targetObj = sq_GetCNRDObjectToActiveObject(obj.getVar("targetObj").get_obj_vector(i)); if(targetObj || targetObj.getState() != STATE_DIE) targetObj.getVar("lavapotion").setBool(0,false); } sq_SendDestroyPacketPassiveObject(obj); } break; } break; case SKILL_BYKK_MEGADRILL://冰霜鑽孔車 switch(subtype){ case 1: switch(state){ case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; case 21: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; case 22: sq_SendDestroyPacketPassiveObject(obj); break; } break; case 2: case 12: switch(state){ case 20: case 21: if(state == 20) obj.sq_PlaySound("MEGA_DRILL_STARTING"); obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); break; case 25: sq_SendDestroyPacketPassiveObject(obj); break; } break; case 3: sq_SendDestroyPacketPassiveObject(obj); break; } break; case SKILL_BYKK_UROBOROS://二覺 break; case SKILL_BYKK_LOLLIPOPCRUSH://超級棒棒糖 if(subtype == 0 || subtype == 1 || subtype == 9 || subtype == 10 || subtype == 11) sq_SendDestroyPacketPassiveObject(obj); if(subtype == 20){ if(state == 20) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); else if(state == 22) sq_SendDestroyPacketPassiveObject(obj); } break; case SKILL_BYKK_TRANSFORMFLAPPER://變異蒼蠅拍 case SKILL_BYKK_TRANSFORMFLAPPEREX://超級蒼蠅拍 switch(subtype){ case 3: case 4: if(!sqrChr || sqrChr.getState() == STATE_DIE) break; if(sq_GetLevelData(sqrChr, SKILL_BYKK_TRANSFORMFLAPPER, 11, sq_GetSkillLevel(sqrChr, SKILL_BYKK_TRANSFORMFLAPPER)) > 0) break; if(obj.getVar("custom").get_vector(10) < 1){ local isSeal = obj.getVar("custom").get_vector(7); if(isSeal == 1){ local monsterId = [GOBLIN_BYKK_ID,TAU_BYKK_ID]; local homunculus_skill = sq_GetSkill(sqrChr, SKILL_BYKK_HOMUNCULUS) if(sq_GetSkillLevel(sqrChr, SKILL_BYKK_HOMUNCULUS) > 0 && !homunculus_skill.isSealFunction()) monsterId = [LANTERN_BYKK_ID,FLUORE_BYKK_ID,FLUTO_BYKK_ID,JACKFROST_BYKK_ID]; local monstertime = obj.getVar("custom").get_vector(5); local monsterlevel = obj.getVar("custom").get_vector(6); for(local i = 0; i < obj.getVar("custom").get_vector(9); i++){ if(sqrChr.getVar("countofhomunculus").getInt(11) < sq_GetIntData(sqrChr, SKILL_BYKK_HOMUNCULUS, 45)){ summonmonster_witch_bykk(sqrChr,sqrChr,200,0,-sq_GetZPos(sqrChr),0,monsterId[sq_getRandom(0,(monsterId.len()-1))],monstertime,monsterlevel,0); sqrChr.getVar("countofhomunculus").setInt(11, sqrChr.getVar("countofhomunculus").getInt(11) + 1); print("number = "+sqrChr.getVar("countofhomunculus").getInt(11)); } } } } break; } sq_SendDestroyPacketPassiveObject(obj); break; } }