Rindro-Sqr/user/114.66.45.221/6_mage_11.c

1623 lines
69 KiB
C

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;
}