function onTimeEvent_po_witch_bykk_kak(obj, timeEventIndex, timeEventCount) { 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(timeEventIndex){ case 0: obj.sq_PlaySound("ACIDCLOUD_DISAPPEARANCE"); sq_SendDestroyPacketPassiveObject(obj); break; case 1: obj.resetHitObjectList(); break; case 2://leidian sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/acidcloud/cloudspark"+(timeEventCount % 3 + 1).tostring()+".ani",sq_getRandom(-75,75),0,0); local targetObj = obj.sq_FindFirstTarget(-120, 120, 60, 400); if(targetObj){ local totalDamage = obj.getVar("custom").get_vector(4); local sizeRate = obj.getVar("custom").get_vector(3); cearteSkillPassive_Witch_bykk(sqrChr,targetObj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_ACIDCLOUD,3,totalDamage,sizeRate,0,0,0,0,0,0,1); } break; case 3: local lifeTime = obj.getVar("custom").get_vector(1) - 480; local successType = obj.getVar("custom").get_vector(0); if(successType == 0) sq_CreateParticle("passiveobject/witch_bykk/particle/acidraindrop.ptl", obj, 0, 0, 0 - obj.getZPos(), true, 40, 0, lifeTime / 40); else sq_CreateParticle("passiveobject/witch_bykk/particle/acidraindrop.ptl", obj, 0, 0, 0 - obj.getZPos(), true, 10, 0, lifeTime / 10); break; } break; case 2: switch(timeEventIndex){ case 0: obj.removeAllTimeEvent(); obj.addSetStatePacket(27, null, STATE_PRIORITY_AUTO, false, ""); break; case 1: obj.resetHitObjectList(); break; case 2: local targetObj; obj.getVar("targetObj").clear_obj_vector(); local targetObj_num = -1; local objectManager = obj.getObjectManager();//得到對象管理器 local objectNumber = objectManager.getCollisionObjectNumber();//總數 for(local i = 0; i < objectNumber; i++){ local object = objectManager.getCollisionObject(i);//得到控制類對象 if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && sqrChr.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= 800 && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= 400){ local activeObj = sq_GetCNRDObjectToActiveObject(object); if(sq_IsBoss(activeObj) || sq_IsNamed(activeObj)) obj.getVar("targetObj").push_obj_vector(object); } } if(obj.getVar("targetObj").get_obj_vector_size() > 0) targetObj = obj.getVar("targetObj").get_obj_vector(0); else targetObj = obj.sq_FindFirstTarget(-9999, 19998, 9999, 9999); if(targetObj && targetObj.getState() != STATE_DIE){ local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); obj.getVar("targetObj").clear_obj_vector(); obj.getVar("targetObj").push_obj_vector(activeObj); obj.stopTimeEvent(2); if(sq_GetXPos(obj) > sq_GetXPos(activeObj)) obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); else obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); return; } break; case 3: local targetObj = obj.getVar("targetObj").get_obj_vector(0); if(targetObj){ local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); local disX = sq_Abs(sq_GetXPos(obj) - sq_GetXPos(activeObj)); local disY = sq_Abs(sq_GetYPos(obj) - sq_GetYPos(activeObj)); if(disX > 50){ local baseM = 20; if(obj.getVar("custom").get_vector(7) > 0) baseM = 14; local moveX = disX / baseM + 1; if(sq_GetXPos(obj) > sq_GetXPos(activeObj)) sq_setCurrentAxisPos(obj, 0, sq_GetXPos(obj) - moveX); else sq_setCurrentAxisPos(obj, 0, sq_GetXPos(obj) + moveX); } if(disY > 30){ local baseM = 20; if(obj.getVar("custom").get_vector(7) > 0) baseM = 14; local moveY = disY / baseM + 1; if(sq_GetYPos(obj) > sq_GetYPos(activeObj)) sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) - moveY); else sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) + moveY); } if(disX <= 50 && disY <= 30){ obj.stopTimeEvent(3); obj.setTimeEvent(4,100,-1,false); if(obj.getState() != 24) obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, ""); } } else{ obj.stopTimeEvent(3); obj.setTimeEvent(4,100,-1,false); if(obj.getState() != 21) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); } break; case 4: local targetObj = obj.getVar("targetObj").get_obj_vector(0); if(!targetObj || targetObj.getState() == STATE_DIE){ obj.stopTimeEvent(4); obj.setTimeEvent(3,35,-1,false); if(obj.getState() != 26) obj.addSetStatePacket(26, null, STATE_PRIORITY_AUTO, false, ""); } else{ local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); local disX = sq_Abs(sq_GetXPos(obj) - sq_GetXPos(activeObj)); local disY = sq_Abs(sq_GetYPos(obj) - sq_GetYPos(activeObj)); if(disX > 50 && disY > 30){ obj.stopTimeEvent(4); obj.setTimeEvent(3,35,-1,false); //if(obj.getState() != 26) obj.addSetStatePacket(26, null, STATE_PRIORITY_AUTO, false, ""); } } break; case 5: cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,sq_getRandom(-100,100),sq_getRandom(-10,0)-1,-40,obj.getDirection(),SKILL_BYKK_ACIDCLOUD,sq_getRandom(4,6),0,0,0,0,0,0,0,0,0); break; case 6: obj.removeAllTimeEvent(); obj.addSetStatePacket(27, null, STATE_PRIORITY_AUTO, false, ""); break; case 7: if(sq_getRandom(1,100) < 75) break; local totalDamage = obj.getVar("custom").get_vector(2); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,sq_getRandom(-100,100),sq_getRandom(-10,0)-1,-80,obj.getDirection(),SKILL_BYKK_ACIDCLOUD,7,totalDamage,0,0,0,0,0,0,0,0); break; } break; case 4: case 5: case 6: case 7: switch(timeEventIndex){ case 1: // local pAni = obj.getCurrentAnimation();//得到ani // local currentT = sq_GetCurrentTime(pAni);//當前時間 //local fireT = 350;//總時間 local hight = obj.getVar("custom").get_vector(0); local v = sq_GetUniformVelocity(hight, 0, timeEventCount, 35); sq_setCurrentAxisPos(obj, 2, v); if(timeEventCount >= 35) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; } break; } break; case SKILL_BYKK_ANTIGRAVITYSTARTER://反重力裝置 switch(timeEventIndex){ case 0: 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){ if(damager.getZPos() <= 5 && damager.getVar("anti").getBool(0) == false){ damager.getVar("anti").setBool(0,true); local totalDamage = obj.getVar("custom").get_vector(2); cearteSkillPassive_Witch_bykk(sqrChr,damager,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_ANTIGRAVITYSTARTER,3,totalDamage,0,0,0,0,0,0,0,1); } } } break; case 1: local successType = obj.getVar("custom").get_vector(1); cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,155,8,0,obj.getDirection(),SKILL_BYKK_ANTIGRAVITYSTARTER,4,successType,0,0,0,0,0,0,0,0); cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,30,50,0,obj.getDirection(),SKILL_BYKK_ANTIGRAVITYSTARTER,4,successType,0,0,0,0,0,0,0,0); cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,-40,-40,0,obj.getDirection(),SKILL_BYKK_ANTIGRAVITYSTARTER,4,successType,0,0,0,0,0,0,0,0); cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,-155,5,0,obj.getDirection(),SKILL_BYKK_ANTIGRAVITYSTARTER,4,successType,0,0,0,0,0,0,0,0); break; case 2: obj.sq_PlaySound("ANTIGRAVITY_STEAM"); sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/antigravity/smoke1.ani",-25,0,120); sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/antigravity/smoke2.ani",15,0,50); sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/antigravity/smoke3.ani",-15,0,50); sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/antigravity/smoke4.ani",0,0,30); break; } break; case SKILL_BYKK_BLACKMANTLE://暗影鬥篷 switch(timeEventIndex){ case 0: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; case 1: local targetObj_num = 0; obj.getVar("targetObj").clear_obj_vector(); local objectManager = obj.getObjectManager();//得到對象管理器 local objectNumber = objectManager.getCollisionObjectNumber();//總數 for(local i = 0; i < objectNumber; i++){ local object = objectManager.getCollisionObject(i);//得到控制類對象 if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && sqrChr.isEnemy(object)){ local activeObj = sq_GetCNRDObjectToActiveObject(object); if(sq_Abs(sq_GetXPos(obj) - sq_GetXPos(activeObj)) <= 200 && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(activeObj)) <= 100 && sq_GetZPos(activeObj) <= 50 && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(activeObj)) > 0 && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(activeObj)) > 0){ targetObj_num = targetObj_num + 1; obj.getVar("targetObj").push_obj_vector(activeObj); } } } if(targetObj_num > 0){ sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/blackmantle/redcandy/blackmantleneohandfront_handfront_01_01.ani",0,1,1); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/blackmantle/redcandy/blackmantleneohandback_handback.ani",0,-1,-1); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/blackmantle/redcandy/blackmantleneohandfront_wind01.ani",0,0,0); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/blackmantle/redcandy/blackmantleneohandfloor_focus03.ani",0,0,0); obj.getVar().setBool(0,true); obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); obj.setTimeEvent(2,300,1,false); } break; case 2: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); local size = obj.getVar("targetObj").get_obj_vector_size(); for(local i = 0; i < size; i++){ local activeObj = sq_GetCNRDObjectToActiveObject(obj.getVar("targetObj").get_obj_vector(i)); if(activeObj){ local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj,"character/mage/witch_skill_bykk/ap/ap_blackmantle.nut"); if(AddAppendage) continue; AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, SKILL_BYKK_BLACKMANTLE, false, "character/mage/witch_skill_bykk/ap/ap_blackmantle.nut", true); if(AddAppendage){ sq_MoveToAppendageForce(activeObj, obj, obj, 0, 0, activeObj.getZPos() - obj.getZPos(), 100, true, AddAppendage); sq_HoldAndDelayDie(activeObj, obj, true, true, true, 10, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); AddAppendage.sq_SetValidTime(500); } } } break; case 3: obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case SKILL_BYKK_BROOMSPIN://旋轉掃把 switch(timeEventIndex){ case 0: local parentObj = obj.getParent(); CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "Appendage/Character/ap_common_suck.nut"); sq_SendDestroyPacketPassiveObject(obj); break; case 1: sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sqrChr.getXPos(), sqrChr.getDirection(), 50)); sq_setCurrentAxisPos(obj, 1, sqrChr.getYPos()); break; } break; case SKILL_BYKK_ELECTRICRABBIT://光電兔 switch(timeEventIndex){ case 0: obj.resetHitObjectList(); break; } break; case SKILL_BYKK_ENHANCEDMAGICMISSILE://改良魔法星彈 switch(timeEventIndex){ case 0: obj.resetHitObjectList(); local sub = obj.getVar("custom").get_vector(6); if(obj.getVar("custom").get_vector(0) >= 2 && timeEventCount >= 2 + sub) obj.setTimeEvent(2,100,1,false); break; case 1: local size = obj.getVar("targetObj").get_obj_vector_size(); if(size <= 0) break; for(local i = 0; i < size; i++){ local targetObj = obj.getVar("targetObj").get_obj_vector(i); if(targetObj){ local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); local drawObj = createOnlyDrawObject_witch_bykk(obj,"passiveobject/witch_bykk/animation/enhancedmagicmissile/linkelectric.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj) - 1,sq_GetZPos(obj),ENUM_DRAWLAYER_NORMAL); setLightning_witch_bykk(obj, drawObj, targetObj); sq_SendHitObjectPacket(obj,activeObj,0,0,sq_GetObjectHeight(targetObj) / 2); } } break; case 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, ""); break; } break; case SKILL_BYKK_FLUORECOLLIDER://電鳗碰撞機 switch(timeEventIndex){ case 0: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; case 1: obj.resetHitObjectList(); break; case 2: local size = obj.getVar("targetObj").get_obj_vector_size(); for(local i = 0; i < size; i++){ local targetObj = obj.getVar("targetObj").get_obj_vector(i); if(targetObj){ local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); local aniPath = "passiveobject/witch_bykk/animation/fluorecollider/thunder7.ani"; local aniPath2 = "passiveobject/witch_bykk/animation/fluorecollider/thunder"+sq_getRandom(1,6).tostring()+".ani"; local drawObj = createOnlyDrawObject_witch_bykk(obj,aniPath,true,obj.getDirection(),sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(),10),sq_GetYPos(obj),195,ENUM_DRAWLAYER_NORMAL); local drawObj2 = createOnlyDrawObject_witch_bykk(obj,aniPath2,true,obj.getDirection(),sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(),10),sq_GetYPos(obj),195,ENUM_DRAWLAYER_NORMAL); setLightning_witch_bykk(obj, drawObj, activeObj); setLightning_witch_bykk(obj, drawObj2, activeObj); } } break; } break; case SKILL_BYKK_FUSIONCRAFT://技藝融合 break; case SKILL_BYKK_HEATINGFURNACE://爆炎加熱爐 switch(subtype){ case 1: switch(timeEventIndex){ case 0: if(true) obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");//超大成功時 else obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case 2: switch(timeEventIndex){ case 0: local hitMax = 15 + obj.getVar("custom").getInt(10); local time = 750; obj.setTimeEvent(1, time / (hitMax + 1), hitMax, false); break; case 1: obj.resetHitObjectList(); break; } break; case 3: switch(timeEventIndex){ case 0: // local successType = obj.getVar("custom").get_vector(0); // if(successType >= 1){ // local anglea = obj.getVar("custom").get_vector(1); // local speed_X = obj.getVar("custom").get_vector(2); // local speed_Z = obj.getVar("custom").get_vector(3); // local Xpos = obj.getVar("custom").get_vector(4); // local Ypos = obj.getVar("custom").get_vector(5); // local Zpos = obj.getVar("custom").get_vector(6); // sq_BinaryStartWrite(); // sq_BinaryWriteDword(SKILL_BYKK_HEATINGFURNACE); // sq_BinaryWriteDword(5); // sq_BinaryWriteDword(anglea); // sq_BinaryWriteDword(speed_X); // sq_BinaryWriteDword(speed_Z); // sq_BinaryWriteDword(timeEventCount); // sq_SendCreatePassiveObjectPacketPos(obj, PASSIVEOBJECT_BYKK_WITCH, 0, Xpos, Ypos - timeEventCount, Zpos - timeEventCount); // } break; } break; case 4: local sizeRate = obj.getVar("custom").get_vector(0); sizeRate = sizeRate.tofloat() / 100.0; switch(timeEventIndex){ case 1: local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle1.ani", sq_getRandom(-10,10), sq_getRandom(-10,10), sq_getRandom(-10,10)); local currentAni = pooledObj.getCurrentAnimation(); currentAni.setImageRateFromOriginal(sizeRate, sizeRate); break; case 2: local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle2.ani", 0, 2, 0); local currentAni = pooledObj.getCurrentAnimation(); currentAni.setImageRateFromOriginal(sizeRate, sizeRate); break; case 3: local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle3.ani", 0, 1, 1); local currentAni = pooledObj.getCurrentAnimation(); local angle = sq_ToRadian(360.0 * timeEventCount / 16); sq_SetfRotateAngle(currentAni, angle); currentAni.setImageRateFromOriginal(sizeRate * 2.0, sizeRate * 2.0); break; case 4: local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle4.ani", sq_getRandom(-30,30), sq_getRandom(-30,30), sq_getRandom(-30,30)); local currentAni = pooledObj.getCurrentAnimation(); currentAni.setImageRateFromOriginal(sizeRate, sizeRate); break; } break; case 6: switch(timeEventIndex){ case 0: obj.setTimeEvent(1,80,8,false); break; case 1: obj.resetHitObjectList(); break; } break; case 7: switch(timeEventIndex){ case 0: local number_max = obj.getVar("custom").getInt(10); local pAni = obj.getCurrentAnimation(); local delaysum = pAni.getDelaySum(3, 17); obj.setTimeEvent(1,delaysum / (number_max + 1),number_max, true); break; case 1: obj.resetHitObjectList(); break; } break; } break; case SKILL_BYKK_HOMUNCULUS://魔道學助手 switch(timeEventIndex){ case 0: local targetObj = sq_GetCNRDObjectToActiveObject(obj.getVar().get_obj_vector(0)); if(targetObj){ local aniPath = "monster/character/mage/witch_bykk/fluore/animation/a/fluore_athunder7.ani"; local aniPath2 = "monster/character/mage/witch_bykk/fluore/animation/a/fluore_athunder"+sq_getRandom(1,6).tostring()+".ani"; local drawObj = createOnlyDrawObject_witch_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj) + 1,sq_GetZPos(obj),ENUM_DRAWLAYER_NORMAL); local drawObj2 = createOnlyDrawObject_witch_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj) + 1,sq_GetZPos(obj),ENUM_DRAWLAYER_NORMAL); setLightning_witch_bykk(obj, drawObj, targetObj); setLightning_witch_bykk(obj, drawObj2, targetObj); sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(obj) / 2); } else sq_SendDestroyPacketPassiveObject(obj); break; case 1: 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 damage = obj.getVar("custom").get_vector(4); cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,sq_getRandom(-100,100),sq_getRandom(-50,50),0,obj.getDirection(),SKILL_BYKK_HOMUNCULUS,13,totalDamage,prob,level,time,damage,0,0,0,0); break; case 2: obj.resetHitObjectList(); break; case 3: sq_SendDestroyPacketPassiveObject(obj); break; case 4: local hitMax = obj.getVar("custom").get_vector(0); sq_CreateParticle("passiveobject/witch_bykk/particle/acidraindrop.ptl", obj, 0, 0, 0 - obj.getZPos(), true, 10, 0, (150*hitMax+100) / 10); break; } break; case SKILL_BYKK_JACKFROSTICEWATER://雪人刨冰 switch(timeEventIndex){ case 0: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; case 1: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break; case 2: local totalDamage = obj.getVar("custom").get_vector(0); local sub = obj.getVar("custom").get_vector(2); cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_JACKFROSTICEWATER,2,totalDamage,sub,0,0,0,0,0,0,0); break; case 3: if(obj.getVar().getBool(0)){obj.resetHitObjectList();break;}; local inputConut = sqrChr.getRapidInputFrequency(); inputConut = inputConut.tointeger(); local inputMax = 10; if(inputConut > inputMax){ obj.setTimeEvent(3,75,-1,false); obj.getVar().setBool(0,true); local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(150.0); } else obj.setTimeEvent(3,150,1,false); obj.resetHitObjectList(); break; case 4: obj.stopSound(2333); obj.sq_PlaySound("JACKFROST_ICEWATER_ROLL_LOOP",2333); break; } break; case SKILL_BYKK_JACKOHALLOWEEN://搗蛋傑克 switch(timeEventIndex){ case 0: obj.addSetStatePacket(25, null, STATE_PRIORITY_AUTO, false, ""); break; case 1: obj.setTimeEvent(2,600,-1,true); break; case 2: local offset_x = sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(),450); local offset_y = sq_GetYPos(obj); local offset_z = sq_GetZPos(obj); local path1 = "character/mage/effect/animation/witch_bykk/jackohalloween/jackohalloweenlavafloorbottom_lavafloor.ani"; local path2 = "character/mage/effect/animation/witch_bykk/jackohalloween/jackohalloweenlavafloortop_circle.ani"; createOnlyDrawObject_witch_bykk(obj,path1,true,obj.getDirection(),offset_x,offset_y,offset_z,ENUM_DRAWLAYER_BOTTOM); createOnlyDrawObject_witch_bykk(obj,path2,true,obj.getDirection(),offset_x,offset_y,offset_z,ENUM_DRAWLAYER_NORMAL); break; case 3: if(sqrChr){ local sqrChr_offset_X = sq_GetDistancePos(sq_GetXPos(sqrChr),obj.getDirection(),-50); local disX = sq_Abs(sq_GetXPos(obj) - sqrChr_offset_X); local disY = sq_Abs(sq_GetYPos(obj) - sq_GetYPos(sqrChr)); if(disX > 30){ local moveX = disX / 20 + 1; if(sq_GetXPos(obj) > sqrChr_offset_X) sq_setCurrentAxisPos(obj, 0, sq_GetXPos(obj) - moveX); else sq_setCurrentAxisPos(obj, 0, sq_GetXPos(obj) + moveX); } if(disY > 10){ local moveY = disY / 20 + 1; if(sq_GetYPos(obj) > sq_GetYPos(sqrChr)) sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) - moveY); else sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) + moveY); } if(disX > 30 || disY > 10) obj.setTimeEvent(3,30,1,false); else obj.setTimeEvent(3,1000,1,false); } break; case 4: obj.resetHitObjectList(); break; case 5: obj.stopSound(1103); if(timeEventCount % 2 == 1) obj.sq_PlaySound("JACKOHALLOWEEN_FIRE_LOOP",1103); else obj.sq_PlaySound("JACKOHALLOWEEN_FIRE_LOOP_02",1103); break; } break; case SKILL_BYKK_LAVAPOTION://熔岩藥瓶 switch(timeEventIndex){ case 0: sq_SendDestroyPacketPassiveObject(obj); break; case 1: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/lavapotionfail_22.ani"); obj.setCurrentAnimation(ani); local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/witch_bykk/animation/lavapotion/lavapotionfailbottom_01.ani"),true); break; case 2: obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); break; case 3: obj.resetHitObjectList(); break; case 4: if(timeEventCount % 2 == 0){ obj.stopSound(7701); obj.sq_PlaySound("FIRE_EXPLOSION_CREATE",7701); local sizeRate = obj.getVar("custom").get_vector(0); local totalDamage = obj.getVar("custom").get_vector(4); local successType = obj.getVar("custom").get_vector(1); cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_LAVAPOTION,1,totalDamage,sizeRate,0,0,successType,0,0,0,1); } local sizeRate = obj.getVar("custom").get_vector(0).tofloat() / 100.0 * 1.35; local offset_x = (30.0 * sizeRate).tointeger(); local offset_y = (5.0 * sizeRate).tointeger(); local setx = sq_getRandom(-offset_x,offset_x); local sety = sq_getRandom(-offset_y,offset_y); sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/lavapotion/lavapotionfire.ani",setx,sety,0); cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,setx,sety + 1,0,obj.getDirection(),SKILL_BYKK_LAVAPOTION,4,0,0,0,0,0,0,0,0,0); break; } break; case SKILL_BYKK_MEGADRILL://冰霜鑽孔車 switch(subtype){ case 1: switch(timeEventIndex){ case 0: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; case 1: createOnlyDrawObject_witch_bykk(obj,"passiveobject/witch_bykk/animation/megadrill/fail/megadrillfailstartbottom.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj),ENUM_DRAWLAYER_BOTTOM) break; case 2: obj.resetHitObjectList(); break; case 3: if(obj.getVar("custom").get_vector(2) > 0){ local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(0,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/newmegadrilltwist_01.ani"),true); local parentObj = obj.getParent(); if(!parentObj) break; local appendage = CNSquirrelAppendage.sq_AppendAppendage(parentObj, obj, -1, false, "appendage/character/ap_common_suck.nut", false); if(appendage){ CNSquirrelAppendage.sq_Append(appendage, parentObj, obj); local auraAppendage = appendage.sq_getAuraMaster("auraMaster"); if(!auraAppendage) auraAppendage = appendage.sq_AddAuraMaster("auraMaster", parentObj, obj, 1200, 18, 5, 0); if(auraAppendage) auraAppendage.setAttractionInfo(800, 800, 300, 100); } } break; } break; case 2: case 12: switch(timeEventIndex){ case 0: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/megadrill/fluore2_dust"+sq_getRandom(1,3).tostring()+".ani",0,-1,-1); break; case 1: // obj.setTimeEvent(2,50,-1,false); break; case 2: // local parentObj = obj.getParent(); // if(parentObj){ // if(timeEventCount % 2 == 1){ // sq_setCurrentAxisPos(obj, 0, sq_GetXPos(parentObj)); // sq_setCurrentAxisPos(obj, 2, sq_GetZPos(parentObj)); // } // else{ // sq_setCurrentAxisPos(obj, 0, sq_GetXPos(parentObj) + 5); // sq_setCurrentAxisPos(obj, 2, sq_GetZPos(parentObj) + 5); // } // } if(timeEventCount % 2 == 1) sq_setCurrentAxisPos(obj, 2, sq_GetZPos(obj) + 1); else sq_setCurrentAxisPos(obj, 2, sq_GetZPos(obj)); break; case 3: obj.resetHitObjectList(); break; case 4: case 5: case 6: case 7: local sizeRate = 1.5; local pooledObj1 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/character/mage/animation/icefireexplosionparticle"+(timeEventIndex-3).tostring()+".ani",50,0,50); local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/character/mage/animation/icefireexplosionparticle"+(timeEventIndex-3).tostring()+".ani",-46,0,40); local pooledObj3 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/character/mage/animation/icefireexplosionparticle"+(timeEventIndex-3).tostring()+".ani",-36,0,100); local aniA = [pooledObj1,pooledObj2,pooledObj3]; for(local i = 0; i < 3; i++){ local pAni = aniA[i].getCurrentAnimation(); pAni.setImageRateFromOriginal(sizeRate, sizeRate); } break; } break; case 4: if(timeEventIndex == 0){ sqrChr.sq_IntVectClear(); sqrChr.sq_IntVectPush(2); sqrChr.sq_AddSetStatePacket(SKILL_BYKK_MEGADRILL , STATE_PRIORITY_USER, true); sq_SendDestroyPacketPassiveObject(obj); } break; } break; case SKILL_BYKK_UROBOROS://二覺 switch(timeEventIndex){ case 0: local ani = sq_CreateAnimation("","passiveobject/witch_bykk/animation/uroboros/explosion_dodge.ani"); obj.setCurrentAnimation(ani); local totalDamage = obj.getVar("custom").get_vector(0); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 39)); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); sq_CreateParticle("character/mage/effect/animation/witch_bykk/uroboros/particle/uroborossub.ptl", obj, 0, 0, 100, true, 1, 0, 1); obj.sq_PlaySound("UROBOROS_EXP"); break; case 1: local aniPath = "passiveobject/witch_bykk/animation/uroboros/attackset03_dark.ani"; local aniPath2 = "passiveobject/witch_bykk/animation/uroboros/attackset01_dark.ani"; if(timeEventCount % 4 == 2){aniPath = "passiveobject/witch_bykk/animation/uroboros/attackset03_fire.ani";aniPath2 = "passiveobject/witch_bykk/animation/uroboros/attackset01_fire.ani";} if(timeEventCount % 4 == 3){aniPath = "passiveobject/witch_bykk/animation/uroboros/attackset03_ice.ani";aniPath2 = "passiveobject/witch_bykk/animation/uroboros/attackset01_ice.ani";} if(timeEventCount % 4 == 0){aniPath = "passiveobject/witch_bykk/animation/uroboros/attackset03_light.ani";aniPath2 = "passiveobject/witch_bykk/animation/uroboros/attackset01_light.ani";} local totalDamage = obj.getVar("custom").get_vector(0); local targetObj = obj.sq_FindFirstTarget(-300, 600, 100, 600); if(targetObj){ sq_AddDrawOnlyAniFromParent(obj,aniPath2,0,1,1); local activeObj = sq_GetCNRDObjectToActiveObject(targetObj); local drawObj = createOnlyDrawObject_witch_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj) + 20,ENUM_DRAWLAYER_NORMAL); obj.sq_PlaySound("R_UROBOROS_SPARK"); setUroLightning_witch_bykk(obj, drawObj, activeObj); cearteSkillPassive_Witch_bykk(sqrChr,activeObj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_UROBOROS,3,timeEventCount % 4,totalDamage,0,0,0,0,0,0,1); local targetObj2 = obj.sq_FindNextTarget(targetObj, 200, 100); if(targetObj2){ local activeObj2 = sq_GetCNRDObjectToActiveObject(targetObj2); local drawObj2 = createOnlyDrawObject_witch_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj) + 20,ENUM_DRAWLAYER_NORMAL); obj.sq_PlaySound("R_UROBOROS_SPARK"); setUroLightning_witch_bykk(obj, drawObj2, activeObj2); cearteSkillPassive_Witch_bykk(sqrChr,activeObj2,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_UROBOROS,3,timeEventCount % 4,totalDamage,0,0,0,0,0,0,1); } } break; case 2: sqrChr.sq_IntVectClear(); sqrChr.sq_IntVectPush(2); sqrChr.sq_AddSetStatePacket(SKILL_BYKK_UROBOROS , STATE_PRIORITY_USER, true); sq_SendDestroyPacketPassiveObject(obj); break; } break; case SKILL_BYKK_LOLLIPOPCRUSH://超級棒棒糖 switch(timeEventIndex){ case 0: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; case 1: if(!sqrChr) return; local targetObj; if(sqrChr.getVar("Lollipopcrush_Boss").get_obj_vector_size() > 0){ targetObj = sqrChr.getVar("Lollipopcrush_Boss").get_obj_vector(0); } else if(sqrChr.getVar("Lollipopcrush_Named").get_obj_vector_size() > 0){ targetObj = sqrChr.getVar("Lollipopcrush_Named").get_obj_vector(0); } else{ targetObj = obj.sq_FindFirstTarget(-9999, 19998, 9999, 9999); } if(!targetObj){ if(sq_GetIntData(sqrChr, SKILL_BYKK_LOLLIPOPCRUSH, 16) > 0){ targetObj = sqrChr; local sub = obj.getVar("custom").get_vector(0); local whitecandy_num = sqrChr.getVar("whitecandy_num").get_vector(0); local blackcandy_num = sqrChr.getVar("blackcandy_num").get_vector(0); local bosscandy_num = sqrChr.getVar("bosscandy_num").get_vector(0); switch(sub){ case 0: sqrChr.getVar("whitecandy_num").set_vector(0,whitecandy_num+1); break; case 1: sqrChr.getVar("blackcandy_num").set_vector(0,blackcandy_num+1); break; case 2: sqrChr.getVar("bosscandy_num").set_vector(0,bosscandy_num+1); break; } } else return; } obj.getVar("targetObj").clear_obj_vector(); obj.getVar("targetObj").push_obj_vector(targetObj); obj.getVar().setBool(0,true); break; } break; case SKILL_BYKK_TRANSFORMFLAPPER://變異蒼蠅拍 switch(timeEventIndex){ case 0: sq_SendDestroyPacketPassiveObject(obj); break; case 1: obj.resetHitObjectList(); break; } break; case SKILL_BYKK_TRANSFORMFLAPPEREX://超級蒼蠅拍 switch(timeEventIndex){ case 0: local offset_x = [125,125,-125,-125,210,210,-210,-210,275,275,-275,-275,310,310,-310,-310,315,315,-310,-310]; local offset_y = [-35,35,35,-35,-60,60,60,-60,-80,80,80,-80,-95,95,95,-95,-105,105,105,-105]; local sizeRate = [100,75,50,35,20]; local basea = (timeEventCount-1)*4; local totalDamage = obj.getVar("custom").get_vector(0) / timeEventCount; for(local i = 0; i < 4; i++){ cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,offset_x[basea + i],offset_y[basea + i],0,obj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPEREX,6,totalDamage*sizeRate[timeEventCount - 1]/100,sizeRate[timeEventCount - 1],0,0,0,0,0,0,1); } break; } break; } } function onAttack_po_witch_bykk_kak(obj, damager, boundingBox, isStuck) { if(!obj) return; //enableClearDeadEnemies(obj, damager); 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://魔道酸雨雲 break; case SKILL_BYKK_ANTIGRAVITYSTARTER://反重力裝置 switch(subtype){ case 1: if(obj.getVar("targetObj").get_obj_vector_size() <= 0) obj.getVar("targetObj").clear_obj_vector(); if(damager.isObjectType(OBJECTTYPE_ACTIVE)) obj.getVar("targetObj").push_obj_vector(damager); else return; local successType = obj.getVar("custom").get_vector(1); local holdandup = 0; if(successType >= 1) holdandup = 300;// if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, "appendage/character/hearthings.nut")){ CNSquirrelAppendage.sq_RemoveAppendage(damager, "appendage/character/hearthings.nut"); } if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/mage/witch_skill_bykk/passiveobj/ap_antigravity.nut")){ CNSquirrelAppendage.sq_RemoveAppendage(damager, "character/mage/witch_skill_bykk/passiveobj/ap_antigravity.nut"); } CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "appendage/character/hearthings.nut", true); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, SKILL_BYKK_ANTIGRAVITYSTARTER, false, "appendage/character/hearthings.nut", true); if(AddAppendage){ AddAppendage.getAppendageInfo().setValidTime(100); sq_HoldAndDelayDie(damager, obj, true, true, true, 0, holdandup, ENUM_DIRECTION_NEUTRAL , AddAppendage); if(successType >= 2) obj.setTimeEvent(0,80,-1,false); } break; } break; case SKILL_BYKK_BLACKMANTLE://暗影鬥篷 switch(subtype){ case 2: if(damager.isObjectType(OBJECTTYPE_ACTIVE) && obj.isExistTimeEvent(1)){ local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(damager,"character/mage/witch_skill_bykk/ap/ap_blackmantle.nut"); if(AddAppendage) CNSquirrelAppendage.sq_RemoveAppendage(damager, "character/mage/witch_skill_bykk/ap/ap_blackmantle.nut"); AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, SKILL_BYKK_BLACKMANTLE, false, "character/mage/witch_skill_bykk/ap/ap_blackmantle.nut", true); if(AddAppendage){ sq_MoveToAppendageForce(damager, obj, obj, 0, 0, damager.getZPos() - obj.getZPos(), 100, true, AddAppendage); sq_HoldAndDelayDie(damager, obj, true, true, true, 10, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); AddAppendage.sq_SetValidTime(3000); } } break; } break; case SKILL_BYKK_BROOMSPIN://旋轉掃把 break; case SKILL_BYKK_ELECTRICRABBIT://光電兔 break; case SKILL_BYKK_ENHANCEDMAGICMISSILE://改良魔法星彈 switch(subtype){ case 1: if(obj.getVar("custom").get_vector(0) >= 2){ if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ sq_AddDrawOnlyAniFromParent(damager,"passiveobject/witch_bykk/animation/enhancedmagicmissile/endelectric.ani",0,0, sq_GetCenterZPos(boundingBox)); obj.getVar("targetObj").push_obj_vector(damager); } } break; } break; case SKILL_BYKK_FLUORECOLLIDER://電鳗碰撞機 switch(subtype){ case 1: switch(state){ case 21: if(damager.isObjectType(OBJECTTYPE_ACTIVE) && damager.getState() != STATE_DIE){ obj.getVar("targetObj").push_obj_vector(damager); local activeObj = sq_GetCNRDObjectToActiveObject(damager); if(obj.getVar("custom").get_vector(0) >= 2){ if(!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, "character/mage/witch_skill_bykk/passiveobj/ap_fluorecollider.nut")){ local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false,"character/mage/witch_skill_bykk/passiveobj/ap_fluorecollider.nut", true); AddAppendage.sq_SetValidTime(1000); sq_HoldAndDelayDie(activeObj, obj, true, false, false, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); } } } break; } break; } break; case SKILL_BYKK_FUSIONCRAFT://技藝融合 break; case SKILL_BYKK_HEATINGFURNACE://爆炎加熱爐 break; case SKILL_BYKK_HOMUNCULUS://魔道學助手 if(subtype == 41) sq_SendDestroyPacketPassiveObject(obj); break; case SKILL_BYKK_JACKFROSTICEWATER://雪人刨冰 break; case SKILL_BYKK_JACKOHALLOWEEN://搗蛋傑克 break; case SKILL_BYKK_LAVAPOTION://熔岩藥瓶 switch(subtype){ case 3: if(damager.getVar("lavapotion").getBool(0) == false && damager.isObjectType(OBJECTTYPE_ACTIVE)){ damager.getVar("lavapotion").setBool(0,true); obj.getVar("targetObj").push_obj_vector(damager); local speedRate = obj.getVar("custom").get_vector(2); local jumpRate = obj.getVar("custom").get_vector(3); local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_MOVE_SPEED, true, -speedRate.tofloat(), 5000); if(ap){ ap.getAppendageInfo().setValidTime(10000);//設置有效時間 ap.sq_Append(damager, obj);//設置屬性的父對象 } local ap2 = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_JUMP_POWER, true, -jumpRate.tofloat(), 5000); if(ap2){ ap2.getAppendageInfo().setValidTime(10000);//設置有效時間 ap2.sq_Append(damager, obj);//設置屬性的父對象 } } break; } break; case SKILL_BYKK_MEGADRILL://冰霜鑽孔車 break; case SKILL_BYKK_UROBOROS://二覺 if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ if(!sqrChr.getVar("uroborosTar").is_obj_vector(damager)){ sqrChr.getVar("uroborosTar").push_obj_vector(damager); local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, sqrChr, -1, false, "appendage/character/ap_common_hold.nut", true); sq_HoldAndDelayDie(damager, sqrChr, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); } } break; case SKILL_BYKK_LOLLIPOPCRUSH://超級棒棒糖 switch(subtype){ case 0: case 1: case 9: case 10: case 11: local candy_num = sqrChr.getVar("candynumber").get_vector(0); local candy_max = sqrChr.getVar("candynumber").get_vector(1); local bosscandy_num = sqrChr.getVar("candynumber").get_vector(2); local bosscandy_max = sqrChr.getVar("candynumber").get_vector(3); local totalDamage = obj.getVar("custom").get_vector(1); local totalDamage2 = obj.getVar("custom").get_vector(2); if(candy_num < candy_max){ if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ if(bosscandy_num < bosscandy_max && sq_getRandom(1,100) > 70){ sqrChr.getVar("candynumber").set_vector(2,bosscandy_num + 1); local level = obj.getVar("custom").get_vector(3); local prob = obj.getVar("custom").get_vector(4); local time = obj.getVar("custom").get_vector(5); local damage = obj.getVar("custom").get_vector(6); cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,sq_getRandom(0,350),sq_getRandom(-150,150),10,obj.getDirection(),SKILL_BYKK_LOLLIPOPCRUSH,20,2,totalDamage2,level,prob,time,damage,0,0,2); } else{ sqrChr.getVar("candynumber").set_vector(0,candy_num + 1); local sub = sq_getRandom(0,1); switch(sub){ case 0: local level = obj.getVar("custom").get_vector(4); local prob = obj.getVar("custom").get_vector(7); local time = obj.getVar("custom").get_vector(8); local damage = obj.getVar("custom").get_vector(9); cearteSkillPassive_Witch_bykk(sqrChr,damager,PASSIVEOBJECT_BYKK_WITCH,sq_getRandom(-150,350),sq_getRandom(-150,150),10,obj.getDirection(),SKILL_BYKK_LOLLIPOPCRUSH,20,sub,totalDamage,level,prob,time,damage,0,0,2); break; case 1: local level = obj.getVar("custom").get_vector(3); local prob = obj.getVar("custom").get_vector(4); local time = obj.getVar("custom").get_vector(5); local damage = obj.getVar("custom").get_vector(6); cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,sq_getRandom(0,350),sq_getRandom(-150,150),10,obj.getDirection(),SKILL_BYKK_LOLLIPOPCRUSH,20,sub,totalDamage,level,prob,time,damage,0,0,2); break; } } } } break; case 20: local sub = obj.getVar("custom").get_vector(0); if(sub >= 1 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ local blind_stuckrate = obj.getVar("custom").get_vector(5); local blind_time = obj.getVar("custom").get_vector(4); local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_STUCK , true, -blind_stuckrate.tofloat(), 0); if (ap){ ap.getAppendageInfo().setValidTime(blind_time); ap.sq_Append(damager, obj); } } break; } break; case SKILL_BYKK_TRANSFORMFLAPPER://變異蒼蠅拍 switch(subtype){ case 3: case 4: if(!sqrChr || sqrChr.getState() == STATE_DIE) break; local prob = obj.getVar("custom").get_vector(0); local level = obj.getVar("custom").get_vector(1); local time = obj.getVar("custom").get_vector(2); if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLIND, prob.tofloat(), level, false, time); if(sq_GetLevelData(sqrChr, SKILL_BYKK_TRANSFORMFLAPPER, 11, sq_GetSkillLevel(sqrChr, SKILL_BYKK_TRANSFORMFLAPPER)) > 0) break; local activeObj = sq_GetCNRDObjectToActiveObject(damager); local sub_number1 = obj.getVar("custom").get_vector(8); local isSeal = obj.getVar("custom").get_vector(7); local mon_number = obj.getVar("custom").get_vector(10); if(sub_number1 > 0 && !isStuck && isSeal == 1){ obj.getVar("custom").set_vector(10, mon_number + 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 < sub_number1; i++){ if(sqrChr.getVar("countofhomunculus").getInt(11) < sq_GetIntData(sqrChr, SKILL_BYKK_HOMUNCULUS, 45)){ summonmonster_witch_bykk(sqrChr,activeObj,0,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; case 14: case 15: sq_SendDestroyPacketPassiveObject(obj); break; } break; 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; local sub_number1 = obj.getVar("custom").get_vector(8); local isSeal = obj.getVar("custom").get_vector(7); local mon_number = obj.getVar("custom").get_vector(10); if(sub_number1 > 0 && !isStuck && isSeal == 1 && damager.isObjectType(OBJECTTYPE_ACTIVE)){ local activeObj = sq_GetCNRDObjectToActiveObject(damager); obj.getVar("custom").set_vector(10, mon_number + 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 < sub_number1; i++){ if(sqrChr.getVar("countofhomunculus").getInt(11) < sq_GetIntData(sqrChr, SKILL_BYKK_HOMUNCULUS, 45)){ summonmonster_witch_bykk(sqrChr,activeObj,0,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; } break; } } function onKeyFrameFlag_po_witch_bykk_kak(obj, flagIndex) { 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://魔道酸雨雲 break; case SKILL_BYKK_ANTIGRAVITYSTARTER://反重力裝置 break; case SKILL_BYKK_BLACKMANTLE://暗影鬥篷 break; case SKILL_BYKK_BROOMSPIN://旋轉掃把 break; case SKILL_BYKK_ELECTRICRABBIT://光電兔 break; case SKILL_BYKK_ENHANCEDMAGICMISSILE://改良魔法星彈 break; case SKILL_BYKK_FLUORECOLLIDER://電鳗碰撞機 break; case SKILL_BYKK_FUSIONCRAFT://技藝融合 break; case SKILL_BYKK_HEATINGFURNACE://爆炎加熱爐 break; case SKILL_BYKK_HOMUNCULUS://魔道學助手 break; case SKILL_BYKK_JACKFROSTICEWATER://雪人刨冰 local effect_aniPath = "character/mage/effect/animation/witch_bykk/jackfrosticewater/"; switch(subtype){ case 1: switch(flagIndex){ case 1: local currentAni = obj.getCurrentAnimation(); currentAni.addLayerAnimation(1001,sq_CreateAnimation("",effect_aniPath + "start/jackfrosticewaterstartfront_14.ani"),true); obj.setTimeEvent(1,400,1,false); obj.setTimeEvent(2,200,1,false); local parentObj = obj.getParent(); if(!parentObj) break; local appendage = CNSquirrelAppendage.sq_AppendAppendage(parentObj, obj, -1, false, "appendage/character/ap_common_suck.nut", false); if(appendage){ CNSquirrelAppendage.sq_Append(appendage, parentObj, obj); local auraAppendage = appendage.sq_getAuraMaster("auraMaster"); if(!auraAppendage) auraAppendage = appendage.sq_AddAuraMaster("auraMaster", parentObj, obj, 1200, 18, 5, 0); if(auraAppendage) auraAppendage.setAttractionInfo(200, 200, 300, 100);//300,300,150,100 } break; } break; } break; case SKILL_BYKK_JACKOHALLOWEEN://搗蛋傑克 switch(subtype){ case 1: switch(flagIndex){ case 1: sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(),-50)); break; } break; } break; case SKILL_BYKK_LAVAPOTION://熔岩藥瓶 break; case SKILL_BYKK_MEGADRILL://冰霜鑽孔車 switch(subtype){ case 2: case 12: switch(flagIndex){ case 1: //生成OBJ local totalDamage = 10000; cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_MEGADRILL,3,totalDamage,1,0,0,0,0,0,0,1); break; case 2: break; } break; } break; case SKILL_BYKK_UROBOROS://二覺 break; case SKILL_BYKK_LOLLIPOPCRUSH://超級棒棒糖 break; case SKILL_BYKK_TRANSFORMFLAPPER://變異蒼蠅拍 switch(subtype){ case 1: switch(flagIndex){ case 1: sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),75)); sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 85); break; case 2: sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-45)); sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 50); break; case 3: sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-55)); sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 40); break; case 4: sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-60)); sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 25); break; case 5: sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),75)); sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 20); break; case 6: sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),80)); sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 15); break; case 7: sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),85)); sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 10); break; } break; case 2: switch(flagIndex){ case 1: sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-60)); sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 40); break; case 2: sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-53)); sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 14); break; case 3: sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),75)); sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 25); break; case 4: sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),55)); sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr)); break; } break; case 11: if(flagIndex == 1) obj.resetHitObjectList(); break; } break; case SKILL_BYKK_TRANSFORMFLAPPEREX://超級蒼蠅拍 switch(subtype){ case 1: switch(flagIndex){ case 1: sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),55)); sq_setCurrentAxisPos(obj, 2, 110); break; case 2: sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-72)); sq_setCurrentAxisPos(obj, 2, 30); break; case 3: sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-90)); sq_setCurrentAxisPos(obj, 2, 22); break;dd case 4: sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-70)); sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr)*0 - 22); break; case 5: sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),130)); sq_setCurrentAxisPos(obj, 2, 0); break; case 6: sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),122)); sq_setCurrentAxisPos(obj, 2, -25); break; case 7: sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),125)); sq_setCurrentAxisPos(obj, 2, -10); break; case 8: sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),125)); sq_setCurrentAxisPos(obj, 2,-10); break; } break; case 2: switch(flagIndex){ case 1: sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-39)); sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 25); break; case 2: sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-40)); sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 15); break; case 3: sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-33)); sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 23); break; case 4: sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),-42)); sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 30); break; } break; } break; } } function procAppend_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 2: switch(state){ case 25: if(obj.getVar("custom").get_vector(7) > 0) return; local timer = obj.getVar().get_ct_vector(0); if(timer){ local settime = obj.getVar("custom").get_vector(1); local currentT = timer.Get(); local fireT = obj.getVar("custom").get_vector(0); if(currentT + settime >= fireT){ obj.removeAllTimeEvent(); obj.getVar().setBool(0,true); obj.addSetStatePacket(26, null, STATE_PRIORITY_AUTO, false, ""); } } break; } break; case 4: case 5: case 6: case 7: // switch(state){ // case 20: // local pAni = obj.getCurrentAnimation();//得到ani // local currentT = sq_GetCurrentTime(pAni);//當前時間 // local fireT = 350;//總時間 // local hight = obj.getVar("custom").get_vector(0); // local v = sq_GetUniformVelocity(hight, 0, currentT, fireT); // sq_setCurrentAxisPos(obj, 2, v); // if(obj.getZPos() <= 0) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); // break; // } break; } break; case SKILL_BYKK_ANTIGRAVITYSTARTER://反重力裝置 break; case SKILL_BYKK_BLACKMANTLE://暗影鬥篷 break; case SKILL_BYKK_BROOMSPIN://旋轉掃把 break; case SKILL_BYKK_ELECTRICRABBIT://光電兔 break; case SKILL_BYKK_ENHANCEDMAGICMISSILE://改良魔法星彈 switch(subtype){ case 1: switch(state){ case 22: local pAni = obj.getCurrentAnimation();//得到ani local currentT = sq_GetCurrentTime(pAni);//當前時間 local fireT = 150;//總時間 local srcX = obj.getVar("move").get_vector(0);//初始x坐標 local srcZ = obj.getVar("move").get_vector(1);//初始z坐標 local MoveX = obj.getVar("move").get_vector(2);//移動多少x距離 local MoveZ = obj.getVar("move").get_vector(3);//移動多少z距離 local vx = sq_GetUniformVelocity(0, MoveX, currentT, fireT); local vz = sq_GetUniformVelocity(0, MoveZ, currentT, fireT); local dstX = sq_GetDistancePos(srcX, obj.getDirection(), vx);//根據方向運算當前數值 sq_setCurrentAxisPos(obj, 0, dstX);//設置當前x坐標 sq_setCurrentAxisPos(obj, 2, srcZ + vz);//設置當前z坐標 if(currentT >= fireT) obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); break; } break; } break; case SKILL_BYKK_FLUORECOLLIDER://電鳗碰撞機 break; case SKILL_BYKK_FUSIONCRAFT://技藝融合 break; case SKILL_BYKK_HEATINGFURNACE://爆炎加熱爐 switch(subtype){ case 3: if(sq_GetZPos(obj) <= 15 && obj.getVar().getBool(0) == false){ obj.getVar().setBool(0,true); local totalDamage = obj.getVar("custom").get_vector(1); local successType = obj.getVar("custom").get_vector(0); local sizeRate = obj.getVar("custom").get_vector(2); local angle = obj.getVar("custom").get_vector(3); local angleMax = obj.getVar("custom").get_vector(4); local sub = obj.getVar("custom").get_vector(5); if(successType >= 1) cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,0,1,50,obj.getDirection(),SKILL_BYKK_HEATINGFURNACE,4,totalDamage,successType,sizeRate,angle,angleMax,sub,0,0,1); switch(successType){ case 0: sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/heatingfurnace/stone_piece_failed_break.ani",0,0,-20); break; case 1: sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/heatingfurnace/stone_piece_failed_break.ani",0,0,-20); sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/heatingfurnace/stone_piece_normal_break.ani",0,1,-19); break; case 2: case 3: sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/heatingfurnace/stone_piece_great_break.ani",0,0,-20); break; } sq_SendDestroyPacketPassiveObject(obj); } break; } break; case SKILL_BYKK_HOMUNCULUS://魔道學助手 break; case SKILL_BYKK_JACKFROSTICEWATER://雪人刨冰 break; case SKILL_BYKK_JACKOHALLOWEEN://搗蛋傑克 switch(subtype){ case 1: switch(state){ case 22: if(obj.getVar().getBool(0)){ local pAni = obj.getCurrentAnimation(); local currentT = sq_GetCurrentTime(pAni); local fireT = pAni.getDelaySum(false); local srcX = obj.getVar("move").get_vector(0); local MoveX = obj.getVar("move").get_vector(1); local v = sq_GetUniformVelocity(0, -MoveX, currentT, fireT); local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); sq_setCurrentAxisPos(obj, 0, dstX); if(currentT >= fireT) obj.getVar().setBool(0,false); } break; } local time = sq_GetObjectTime(obj); if(time >= obj.getVar("custom").getInt(11) * 15 / 10 && state < 25){ obj.addSetStatePacket(25, null, STATE_PRIORITY_AUTO, false, ""); } break; } break; case SKILL_BYKK_LAVAPOTION://熔岩藥瓶 switch(subtype){ case 4: switch(state){ case 20: local pAni = obj.getCurrentAnimation(); local currentT = sq_GetCurrentTime(pAni); local fireT = 300;//總時間 local srcX = obj.getVar("move").get_vector(0); local srcY = obj.getVar("move").get_vector(1); local srcZ = obj.getVar("move").get_vector(2); local MoveX = obj.getVar("move").get_vector(3) / 2; local MoveY = obj.getVar("move").get_vector(4) / 2; local MoveZ = obj.getVar("move").get_vector(5); local direction = obj.getVar("move").get_vector(6); local obj_direction = obj.getDirection(); if(direction != obj_direction){ MoveX = -MoveX; MoveY = -MoveY; } local vx = sq_GetUniformVelocity(0, MoveX, currentT, fireT); local vy = sq_GetUniformVelocity(0, MoveY, currentT, fireT); local vz = sq_GetAccel(0, MoveZ, currentT, fireT,true); local dstX = sq_GetDistancePos(srcX, obj.getDirection(), vx); sq_setCurrentAxisPos(obj, 0, dstX); sq_setCurrentAxisPos(obj, 1, srcY + vy); sq_setCurrentAxisPos(obj, 2, srcZ + vz); if(currentT >= fireT){ obj.getVar("move").set_vector(0,sq_GetXPos(obj)); obj.getVar("move").set_vector(1,sq_GetYPos(obj)); obj.getVar("move").set_vector(2,sq_GetZPos(obj)); obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); } break; case 21: local pAni = obj.getCurrentAnimation(); local currentT = sq_GetCurrentTime(pAni); local fireT = 300;//總時間 local srcX = obj.getVar("move").get_vector(0); local srcY = obj.getVar("move").get_vector(1); local srcZ = obj.getVar("move").get_vector(2); local MoveX = obj.getVar("move").get_vector(3) / 2; local MoveY = obj.getVar("move").get_vector(4) / 2; local direction = obj.getVar("move").get_vector(6); local obj_direction = obj.getDirection(); if(direction != obj_direction){ MoveX = -MoveX; MoveY = -MoveY; } local vx = sq_GetUniformVelocity(0, MoveX, currentT, fireT); local vy = sq_GetUniformVelocity(0, MoveY, currentT, fireT); local vz = sq_GetAccel(srcZ, 0, currentT, fireT,false); local dstX = sq_GetDistancePos(srcX, obj.getDirection(), vx); sq_setCurrentAxisPos(obj, 0, dstX); sq_setCurrentAxisPos(obj, 1, srcY + vy); sq_setCurrentAxisPos(obj, 2, vz); if(sq_GetZPos(obj) <= 0) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break; } break; case 3: switch(state){ case 20: if(obj.getVar("move").size_vector() > 0){ local pAni = obj.getCurrentAnimation(); local currentT = sq_GetCurrentTime(pAni); local fireT = 240;//總時間 local srcX = obj.getVar("move").get_vector(0); local srcZ = obj.getVar("move").get_vector(1); local MoveX = obj.getVar("move").get_vector(2); local vx = sq_GetUniformVelocity(0, MoveX, currentT, fireT); local vz = sq_GetUniformVelocity(srcZ, 0, currentT, fireT); local dstX = sq_GetDistancePos(srcX, obj.getDirection(), vx); sq_setCurrentAxisPos(obj, 0, dstX); sq_setCurrentAxisPos(obj, 2, vz); if(sq_GetZPos(obj) <= 0) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); } break; } break; } break; case SKILL_BYKK_MEGADRILL://冰霜鑽孔車 switch(subtype){ case 2: case 12: switch(state){ case 21: local pAni = obj.getCurrentAnimation(); local currentT = sq_GetCurrentTime(pAni); local fireT = pAni.getDelaySum(0, 4); if(currentT >= fireT) return; local srcX = obj.getVar("custom").get_vector(1); local srcZ = obj.getVar("custom").get_vector(2); local MoveX = obj.getVar("custom").get_vector(3); local vx = sq_GetUniformVelocity(0, MoveX, currentT, fireT); local vz = sq_GetUniformVelocity(srcZ, 0, currentT, fireT); local dstX = sq_GetDistancePos(srcX, obj.getDirection(), vx); sq_setCurrentAxisPos(obj, 0, dstX); sq_setCurrentAxisPos(obj, 2, vz); break; } break; } break; case SKILL_BYKK_UROBOROS://二覺 break; case SKILL_BYKK_LOLLIPOPCRUSH://超級棒棒糖 switch(subtype){ case 20: switch(state){ case 21: if(obj.getVar().getBool(0)){ local targetObj = sq_GetCNRDObjectToActiveObject(obj.getVar("targetObj").get_obj_vector(0)); if(targetObj){ local pAni = obj.getCurrentAnimation(); local currentT = sq_GetCurrentTime(pAni) - 500; local fireT = 500; if(sq_GetDistanceObject(obj, targetObj, false) < 20){ obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); } local X1 = sq_GetAccel(obj.getXPos(), targetObj.getXPos(), currentT, fireT, true); local Y1 = sq_GetAccel(obj.getYPos(), targetObj.getYPos(), currentT, fireT, true); local Z1 = sq_GetAccel(obj.getZPos(), targetObj.getZPos() + sq_GetObjectHeight(targetObj) / 2, currentT, fireT, true); sq_setCurrentAxisPos(obj, 0, X1); sq_setCurrentAxisPos(obj, 1, Y1); sq_setCurrentAxisPos(obj, 2, Z1); if(sq_GetXPos(targetObj) > sq_GetXPos(obj)) sq_SetCurrentDirection(obj, 0); else sq_SetCurrentDirection(obj, 1); } } break; } break; } break; } if(obj.getZPos() >= 6000){ local parentObj = obj.getParent(); local pChr = obj.getTopCharacter(); local id = parentObj.getCollisionObjectIndex(); if(!id || !pChr) return; if(pChr.isMyControlObject()) { sq_BinaryStartWrite(); sq_BinaryWriteDword(id); sq_BinaryWriteDword(sq_GetGroup(parentObj)); sq_BinaryWriteDword(sq_GetUniqueId(parentObj)); sq_SendChangeSkillEffectPacket(pChr, SKILL_BYKK_TRANSFORMFLAPPER); sq_SendDestroyPacketPassiveObject(obj); } sq_SendDestroyPacketPassiveObject(obj); } } function onAfterAttack_po_witch_bykk(obj, damager, boundingBox, isStuck) { if (!obj) return 0; 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_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; local isSeal = obj.getVar("custom").get_vector(7); if(isSeal == 1){ if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ local activeObj = sq_GetCNRDObjectToActiveObject(damager); local successType = obj.getVar("custom").get_vector(3); if(successType >= 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]; if(activeObj.getHp() <= 0){ local monsterprob = obj.getVar("custom").get_vector(4); if(sq_getRandom(1,1000) > (1000 - monsterprob)){ local monstertime = obj.getVar("custom").get_vector(5); local monsterlevel = obj.getVar("custom").get_vector(6); if(sqrChr.getVar("countofhomunculus").getInt(11) < sq_GetIntData(sqrChr, SKILL_BYKK_HOMUNCULUS, 45)){ summonmonster_witch_bykk(sqrChr,activeObj,0,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; } break; case SKILL_BYKK_LOLLIPOPCRUSH: switch(subtype){ case 0: case 1: case 9: case 10: case 11: local extra_num = obj.getVar("custom").get_vector(0); local totalDamage = obj.getVar("custom").get_vector(1); if(extra_num > 0){ if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ local activeObj = sq_GetCNRDObjectToActiveObject(damager); if(activeObj.getHp() <= 0){ local sub = sq_getRandom(0,1); if(sq_getRandom(1,100) > 70) sub = 2,totalDamage = obj.getVar("custom").get_vector(2); switch(sub){ case 0: local level = obj.getVar("custom").get_vector(4); local prob = obj.getVar("custom").get_vector(7); local time = obj.getVar("custom").get_vector(8); local damage = obj.getVar("custom").get_vector(9); for(local i = 0; i < extra_num; i++){ cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,sq_getRandom(0,350),sq_getRandom(-150,150),10,obj.getDirection(),SKILL_BYKK_LOLLIPOPCRUSH,20,sub,totalDamage,level,prob,time,damage,0,0,2); } break; case 1: case 2: local level = obj.getVar("custom").get_vector(3); local prob = obj.getVar("custom").get_vector(4); local time = obj.getVar("custom").get_vector(5); local damage = obj.getVar("custom").get_vector(6); for(local i = 0; i < extra_num; i++){ cearteSkillPassive_Witch_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_WITCH,sq_getRandom(0,350),sq_getRandom(-150,150),10,obj.getDirection(),SKILL_BYKK_LOLLIPOPCRUSH,20,sub,totalDamage,0,0,0,0,0,0,2); } break; } } } } break; } break; } return 0; }