/////////////////////////witch function cearteSkillPassive_Witch_bykk(obj,passiveObj,objnum,x,y,z,direction,skillIndex,subtype,pushv1,pushv2,pushv3,pushv4,pushv5,pushv6,pushv7,pushv8,bonusnum) { if(!obj || !passiveObj) return; if(pushv1 == null) pushv1 = 0; if(pushv2 == null) pushv2 = 0; if(pushv3 == null) pushv3 = 0; if(pushv4 == null) pushv4 = 0; if(pushv5 == null) pushv5 = 0; if(pushv6 == null) pushv6 = 0; if(pushv7 == null) pushv7 = 0; if(pushv8 == null) pushv8 = 0; if(bonusnum > 0){ local bonusRate = 1.0;//obj.getVar("witchs_bonusRate").get_vector(0).tofloat() / 1000.0; // print("bonusRate1 = "+bonusRate); local homunculus_level = sq_GetSkillLevel(obj, SKILL_BYKK_HOMUNCULUS); if(homunculus_level > 0){ local bonusrate2 = sq_GetLevelData(obj, SKILL_BYKK_HOMUNCULUS, 6, homunculus_level); local bonus_skillIndex = [SKILL_BYKK_ENHANCEDMAGICMISSILE,SKILL_BYKK_BLACKMANTLE,SKILL_BYKK_TRANSFORMFLAPPER,SKILL_BYKK_TRANSFORMFLAPPEREX,SKILL_BYKK_LOLLIPOPCRUSH,SKILL_BYKK_UROBOROS,SKILL_BYKK_ELECTRICRABBIT,SKILL_BYKK_JACKFROSTICEWATER,SKILL_BYKK_JACKOHALLOWEEN]; for(local i = 0; i < bonus_skillIndex.len(); i++){ if(skillIndex == bonus_skillIndex[i]){bonusRate = bonusRate + bonusrate2.tofloat() / 1000;break;} } } // print("bonusRate2 = "+bonusRate); local lapisphilosophorum_level = sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM); if(lapisphilosophorum_level > 0){ local bonusrate3 = sq_GetLevelData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 16, lapisphilosophorum_level); local bonus_skillIndex2 = [SKILL_BYKK_ACIDCLOUD,SKILL_BYKK_ANTIGRAVITYSTARTER,SKILL_BYKK_ELECTRICRABBIT,SKILL_BYKK_ENHANCEDMAGICMISSILE,SKILL_BYKK_FLUORECOLLIDER,SKILL_BYKK_HEATINGFURNACE,SKILL_BYKK_LAVAPOTION,SKILL_BYKK_MEGADRILL,SKILL_BYKK_TRANSFORMFLAPPER,SKILL_BYKK_TRANSFORMFLAPPEREX]; local success_num = [pushv4,pushv3,pushv1,pushv2,pushv3,pushv2,pushv5,pushv1,pushv6,pushv3]; for(local i = 0; i < bonus_skillIndex2.len(); i++){ if(skillIndex == bonus_skillIndex2[i]){ if(bonus_skillIndex2[i] == SKILL_BYKK_ACIDCLOUD && sq_GetSkillLevel(obj, SKILL_BYKK_REDCANDY) > 0){bonusRate = bonusRate + bonusrate3.tofloat() / 1000;break;} if(success_num[i] >= 1){bonusRate = bonusRate + bonusrate3.tofloat() / 1000;break;} } } } // print("bonusRate3 = "+bonusRate); switch (bonusnum) { case 1: pushv1 = (pushv1.tofloat() * bonusRate).tointeger(); break; case 2: pushv2 = (pushv2.tofloat() * bonusRate).tointeger(); break; case 3: pushv3 = (pushv3.tofloat() * bonusRate).tointeger(); break; case 4: pushv4 = (pushv4.tofloat() * bonusRate).tointeger(); break; case 5: pushv5 = (pushv5.tofloat() * bonusRate).tointeger(); break; case 6: pushv6 = (pushv6.tofloat() * bonusRate).tointeger(); break; case 7: pushv7 = (pushv7.tofloat() * bonusRate).tointeger(); break; case 8: pushv8 = (pushv8.tofloat() * bonusRate).tointeger(); break; } } local destX_01 = 0; local destY_01 = 0; if(!isSameObject(obj, passiveObj)){ destX_01 = passiveObj.getXPos() - obj.getXPos(); destY_01 = passiveObj.getYPos() - obj.getYPos(); z = z - obj.getZPos(); if(direction == ENUM_DIRECTION_LEFT) destX_01 = obj.getXPos() - passiveObj.getXPos(); } sq_BinaryStartWrite(); sq_BinaryWriteDword(skillIndex); sq_BinaryWriteDword(subtype); sq_BinaryWriteDword(pushv1); sq_BinaryWriteDword(pushv2); sq_BinaryWriteDword(pushv3); sq_BinaryWriteDword(pushv4); sq_BinaryWriteDword(pushv5); sq_BinaryWriteDword(pushv6); sq_BinaryWriteDword(pushv7); sq_BinaryWriteDword(pushv8); sq_SendCreatePassiveObjectPacket(obj, objnum, 0, destX_01 + x, destY_01 + y, z, direction); } function bonus_witch_bykk(obj) { return 0; local bonusRate = 0; local skill_level1 = sq_GetSkillLevel(obj, SKILL_BYKK_FRIENDLYFAMILIAR); local skill_level2 = sq_GetSkillLevel(obj, SKILL_BYKK_REDCANDY); if(skill_level1 > 0) bonusRate = bonusRate + sq_GetLevelData(obj,SKILL_BYKK_FRIENDLYFAMILIAR, 9, skill_level1); if(skill_level2 > 0) bonusRate = bonusRate + sq_GetLevelData(obj,SKILL_BYKK_REDCANDY, 0, skill_level2); if(obj.getVar("mpregenrateup_buff").getBool(0)){ local skill_level3 = sq_GetSkillLevel(obj, 41); local add_Rate41 = sq_GetLevelData(obj, 41, 4, skill_level3); bonusRate = bonusRate + add_Rate41; } return bonusRate; } function setDamageRate_Witch_bykk(obj) { local bonusRate = 1000; if(sq_GetSkillLevel(obj, SKILL_BYKK_FRIENDLYFAMILIAR) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_FRIENDLYFAMILIAR, 9, sq_GetSkillLevel(obj, SKILL_BYKK_FRIENDLYFAMILIAR))) / 1000; print("bonusRate1 = "+bonusRate); if(sq_GetSkillLevel(obj, SKILL_BYKK_REDCANDY) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_REDCANDY, 0, sq_GetSkillLevel(obj, SKILL_BYKK_REDCANDY))) / 1000; print("bonusRate2 = "+bonusRate); if(sq_GetSkillLevel(obj, SKILL_BYKK_SWEETCANDYBAR) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_SWEETCANDYBAR, 4, sq_GetSkillLevel(obj, SKILL_BYKK_SWEETCANDYBAR))) / 1000; print("bonusRate3 = "+bonusRate); if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/witch_skill_bykk/passiveskill/ap_mpregenrateup.nut")) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, 41, 4, sq_GetSkillLevel(obj, 41))) / 1000; print("bonusRate4 = "+bonusRate); obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); //sq_SetSkillAttackBonus(obj, bonusRate); } function onAfterSetState_Throw_witch_bykk(obj, state, datas, isResetTimer) { local skillIndex = obj.getThrowIndex(); switch (skillIndex) { case SKILL_BYKK_ACIDCLOUD: obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_BYKK_ACIDCLOUD, STATE_PRIORITY_IGNORE_FORCE, true); break; case SKILL_BYKK_ENHANCEDMAGICMISSILE: obj.sq_IntVectClear(); obj.sq_IntVectPush(10); obj.sq_AddSetStatePacket(SKILL_BYKK_BLACKMANTLE, STATE_PRIORITY_IGNORE_FORCE, true); break; case SKILL_BYKK_LAVAPOTION: local skill_level = sq_GetSkillLevel(obj,SKILL_BYKK_BITTERSCANDYBAR); if(skill_level > 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(10); obj.sq_AddSetStatePacket(SKILL_BYKK_LAVAPOTION, STATE_PRIORITY_IGNORE_FORCE, true); } else{ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_BYKK_LAVAPOTION, STATE_PRIORITY_IGNORE_FORCE, true); } break; case SKILL_BYKK_MEGADRILL: local skill_level = sq_GetSkillLevel(obj,SKILL_BYKK_BITTERSCANDYBAR); if(skill_level > 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(10); obj.sq_AddSetStatePacket(SKILL_BYKK_MEGADRILL, STATE_PRIORITY_IGNORE_FORCE, true); } else{ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_BYKK_MEGADRILL, STATE_PRIORITY_IGNORE_FORCE, true); } break; case 41: if(sq_getGrowType(obj) == 4){ obj.sq_IntVectClear(); obj.sq_IntVectPush(21); obj.sq_AddSetStatePacket(SKILL_BYKK_BLACKMANTLE, STATE_PRIORITY_IGNORE_FORCE, true); } break; } } function setState_Mage_witch_bykk(obj, state, datas, isResetTimer) { if(!obj) return; if(state == 39){ local homunculus_level = sq_GetSkillLevel(obj, SKILL_BYKK_HOMUNCULUS),homunculus_skill = sq_GetSkill(obj, SKILL_BYKK_HOMUNCULUS); if(homunculus_level > 0 && !homunculus_skill.isSealFunction()){ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_BYKK_ANTIGRAVITYSTARTER, STATE_PRIORITY_IGNORE_FORCE, true); } else{ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_BYKK_ANTIGRAVITYSTARTER, STATE_PRIORITY_IGNORE_FORCE, true); } } else if(state == 35){ local skill = sq_GetSkill(obj, SKILL_BYKK_HOMUNCULUS); local redcandy_level = sq_GetSkillLevel(obj, SKILL_BYKK_REDCANDY); if(redcandy_level > 0 && !skill.isSealFunction()){ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_BYKK_BLACKMANTLE, STATE_PRIORITY_IGNORE_FORCE, true); } else{ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_BYKK_BLACKMANTLE, STATE_PRIORITY_IGNORE_FORCE, true); } } else if(state == 36){ if(sq_GetLevelData(obj, SKILL_BYKK_TRANSFORMFLAPPER, 12, sq_GetSkillLevel(obj, SKILL_BYKK_TRANSFORMFLAPPER)) > 0) obj.getVar("transBool").setBool(0, true); else obj.getVar("transBool").setBool(0, false); obj.sq_IntVectClear(); if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(1); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_BYKK_TRANSFORMFLAPPER, STATE_PRIORITY_IGNORE_FORCE, true); // obj.sq_IntVectPush(0); // obj.sq_AddSetStatePacket(SKILL_BYKK_UROBOROS, STATE_PRIORITY_IGNORE_FORCE, true); } else if(state == 41){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_BYKK_FLUORECOLLIDER, STATE_PRIORITY_IGNORE_FORCE, true); } else if(state == 43){ local skill_level = sq_GetSkillLevel(obj,SKILL_BYKK_BITTERSCANDYBAR); if(skill_level > 0){ obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_HEATINGFURNACE); obj.sq_IntVectClear(); obj.sq_IntVectPush(10); obj.sq_AddSetStatePacket(SKILL_BYKK_HEATINGFURNACE, STATE_PRIORITY_IGNORE_FORCE, true); } else{ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_BYKK_HEATINGFURNACE, STATE_PRIORITY_IGNORE_FORCE, true); } } else if(state == 49){ if(sq_GetLevelData(obj, SKILL_BYKK_TRANSFORMFLAPPEREX, 12, sq_GetSkillLevel(obj, SKILL_BYKK_TRANSFORMFLAPPEREX)) > 0) obj.getVar("transBoolex").setBool(0, true); else obj.getVar("transBoolex").setBool(0, false); obj.sq_IntVectClear(); if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(1); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_BYKK_TRANSFORMFLAPPEREX, STATE_PRIORITY_IGNORE_FORCE, true); } else if(state == 17){ if(sq_GetVectorData(datas, 0) == 2 && sq_getGrowType(obj) == 4){ obj.sq_IntVectClear(); obj.sq_IntVectPush(22); obj.sq_AddSetStatePacket(SKILL_BYKK_BLACKMANTLE, STATE_PRIORITY_IGNORE_FORCE, true); } } } function getSuccessType_bykk(obj,skillIndex) { local winRate = sq_GetIntData(obj, skillIndex, 1); local bigwinRate = sq_GetIntData(obj, skillIndex, 2); local loseRate = 1000 - winRate - bigwinRate; local skllevel1 = sq_GetSkillLevel(obj, SKILL_BYKK_SWEETCANDYBAR);//幸运棒棒糖 local skllevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_SUCCESSPREMONITION);//成功预感 local skllevel3 = sq_GetSkillLevel(obj, SKILL_BYKK_FRIENDLYFAMILIAR);//亲和法米利尔 local win_addRate1 = sq_GetLevelData(obj,SKILL_BYKK_SWEETCANDYBAR, 2, skllevel1); local bigwin_addRate1 = sq_GetLevelData(obj,SKILL_BYKK_SWEETCANDYBAR, 3, skllevel1); local win_addRate2 = sq_GetLevelData(obj,SKILL_BYKK_SUCCESSPREMONITION, 1, skllevel2); local bigwin_addRate2 = sq_GetLevelData(obj,SKILL_BYKK_SUCCESSPREMONITION, 2, skllevel2); local win_addRate3 = sq_GetLevelData(obj,SKILL_BYKK_FRIENDLYFAMILIAR, 1, skllevel3); local bigwin_addRate3 = sq_GetLevelData(obj,SKILL_BYKK_FRIENDLYFAMILIAR, 2, skllevel3); if(skllevel3 > 0){winRate= winRate + win_addRate3;bigwinRate= bigwinRate + bigwin_addRate3;} if(obj.getVar("successpremonition").getBool(0)){ obj.getVar("successpremonition").setBool(0, false); winRate = winRate + win_addRate2 ; bigwinRate = bigwinRate + bigwin_addRate2; } if(skllevel1 > 0){ winRate = (winRate.tofloat() * (1000.0 + win_addRate1.tofloat()) / 1000.0).tointeger(); bigwinRate = (bigwinRate.tofloat() * (1000.0 + bigwin_addRate1.tofloat()) / 1000.0).tointeger(); } if(winRate + bigwinRate >= 1000){ winRate = 1000 - bigwinRate; loseRate = 0; } else{ loseRate = 1000 - winRate - bigwinRate; } // print("bigwinRate = "+bigwinRate+" && winRate = "+winRate+" && loseRate = "+loseRate); local ramdon_number = sq_getRandom(1,1000); if(ramdon_number > loseRate && ramdon_number <= (loseRate + winRate)){ return 1; } if(ramdon_number > (loseRate + winRate) && ramdon_number <= (loseRate + winRate + bigwinRate)){ return 2; } return 0; } function proc_appendage_antigravity_bykk(appendage) { if (!appendage) return; } function onCreateObject_Throw(obj, createObject) { if(createObject.isObjectType(OBJECTTYPE_PASSIVE)){ local colObj = sq_GetCNRDObjectToCollisionObject(createObject); if(colObj.getCollisionObjectIndex() == 23043){ local bonusRate = sq_GetCurrentAttackBonusRate(colObj); local attackInfo = sq_GetCurrentAttackInfo(colObj); if(attackInfo){ sq_SetCurrentAttackPower(attackInfo, 0); sq_SetCurrentAttackBonusRate(attackInfo, 10000); } print(sq_GetCurrentAttackBonusRate(colObj)); } } } function createOnlyDrawObject_witch_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer) { local ani = sq_CreateAnimation("",aniPath);//创建ani local pooledObj = sq_CreatePooledObject(ani,isTrue);//创建绘画对象 参数2:应该是ani结束时true 就销毁反之false不销毁 sq_SetCurrentDirection(pooledObj, direction);//设置方向 pooledObj.setCurrentPos(x,y,z);//设置pos pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer);//设置图层 sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false);//增加对象 return pooledObj; } function setLightning_witch_bykk(obj, drawObj, targetObj) { if(!obj) return; //if(!pTargetChr) return; local X = drawObj.getXPos(); local Y = drawObj.getYPos(); local Z = drawObj.getZPos(); local pAni = drawObj.getCurrentAnimation(); local frameIndex = pAni.GetCurrentFrameIndex(); local posX = targetObj.getXPos(); local posY = targetObj.getYPos() + 1; local posZ = targetObj.getZPos() + (sq_GetObjectHeight(targetObj) / 2); if(posX == -1) return; local offset = posX - X; if(offset < 0) drawObj.setCurrentDirection(ENUM_DIRECTION_LEFT); else drawObj.setCurrentDirection(ENUM_DIRECTION_RIGHT); local distance = sq_GetDistance( X, Y - Z, posX, posY - posZ, true); local w = posX - X; if(w < 0) w = -w; local h = (posY - posZ) - (Y - Z); local width = sq_Abs(posX - X); local angle = sq_Atan2( h.tofloat(), width.tofloat()); if((posY - posZ) > (Y - Z)) angle = -angle; local nRevision = distance; local cos = nRevision.tofloat() * sq_Cos(angle); local sin = nRevision.tofloat() * sq_Sin(angle); local nX = sq_Abs( cos.tointeger() ); local nY = sq_Abs( sin.tointeger() ); sq_SetfRotateAngle(pAni, angle); pAni.setImageRate(1.0, 1.0); local dis = 246; local cos_x = dis.tofloat() * sq_Cos(angle); local sin_y = dis.tofloat() * sq_Sin(angle); local nW = sq_Abs( cos_x.tointeger() ); local nH = sq_Abs( sin_y.tointeger() ); local wRate = width.tofloat() / nW.tofloat(); local hRate = h.tofloat() / nH.tofloat(); pAni.setImageRate(wRate.tofloat(), hRate.tofloat()); } function setUroLightning_witch_bykk(obj, drawObj, targetObj) { if(!obj) return; //if(!pTargetChr) return; local X = drawObj.getXPos(); local Y = drawObj.getYPos(); local Z = drawObj.getZPos(); local pAni = drawObj.getCurrentAnimation(); local posX = targetObj.getXPos(); local posY = targetObj.getYPos() + 1; local posZ = 90; if(posX == -1) return; local offset = posX - X; if(offset < 0) drawObj.setCurrentDirection(ENUM_DIRECTION_LEFT); else drawObj.setCurrentDirection(ENUM_DIRECTION_RIGHT); local distance = sq_GetDistance( X, Y - Z, posX, posY - posZ, true); local w = posX - X; if(w < 0) w = -w; local h = (posY - posZ) - (Y - Z); local width = sq_Abs(posX - X); local angle = sq_Atan2( h.tofloat(), width.tofloat()); if((posY - posZ) > (Y - Z)) angle = -angle; local nRevision = distance; local cos = nRevision.tofloat() * sq_Cos(angle); local sin = nRevision.tofloat() * sq_Sin(angle); local nX = sq_Abs( cos.tointeger() ); local nY = sq_Abs( sin.tointeger() ); sq_SetCustomRotate(drawObj, angle); pAni.setImageRate(1.0, 1.0); local dis = 185; local cos_x = dis.tofloat() * sq_Cos(angle); local sin_y = dis.tofloat() * sq_Sin(angle); local nW = sq_Abs( cos_x.tointeger() ); local nH = sq_Abs( sin_y.tointeger() ); local wRate = width.tofloat() / nW.tofloat(); local hRate = h.tofloat() / nH.tofloat(); pAni.setImageRate(wRate.tofloat(), hRate.tofloat()); } function onStartMap_Witch_bykk(obj) { local effectObj = obj.getVar("megadrill").get_obj_vector(0); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); if(colObj.getDirection() != obj.getDirection()) sq_SetCurrentDirection(colObj, sq_GetOppositeDirection(sq_GetDirection(colObj))); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_MEGADRILL,4,50,0,0,0,0,0,0,0,0); } if(obj.getVar("jackohalloween_pumpkin").get_obj_vector_size() > 0){ local colObj = sq_GetCNRDObjectToCollisionObject(obj.getVar("jackohalloween_pumpkin").get_obj_vector(0)); if(colObj && colObj.getState() <= 24){ colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); local colObj2 = sq_GetCNRDObjectToCollisionObject(colObj.getVar("jackohalloween_lava").get_obj_vector(0)); if(colObj2) colObj2.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); } else obj.getVar("jackohalloween_pumpkin").clear_obj_vector(); } local attackObj = obj.getVar("uroboros").get_obj_vector(0); if(attackObj){ local colObj = sq_GetCNRDObjectToCollisionObject(attackObj); if(colObj.getDirection() != obj.getDirection()) sq_SetCurrentDirection(colObj, sq_GetOppositeDirection(sq_GetDirection(colObj))); obj.getVar("uroboros").setBool(0, true); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_UROBOROS,4,50,0,0,0,0,0,0,0,0); } } function onStartDungeon_Witch_bykk(obj) { // bonus_witch_bykk(obj); if(sq_GetSkillLevel(obj,SKILL_BYKK_LOLLIPOPCRUSH) > 0){ obj.getVar("whitecandy_num").clear_vector(); obj.getVar("blackcandy_num").clear_vector(); obj.getVar("bosscandy_num").clear_vector(); obj.getVar("whitecandy_num").push_vector(0); obj.getVar("blackcandy_num").push_vector(0); obj.getVar("bosscandy_num").push_vector(0); } if(sq_GetSkillLevel(obj, SKILL_BYKK_SWEETCANDYBAR) > 0){ local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_SWEETCANDYBAR, false, "character/mage/witch_skill_bykk/passiveskill/ap_sweetcandybar.nut", true); } obj.getVar("countofhomunculus").setInt(11, 0); setDamageRate_Witch_bykk(obj); } //人物复活 function reset_witch_bykk(obj) { if(!obj) return; if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/witch_skill_bykk/passiveskill/ap_mpregenrateup.nut")){ obj.getVar("mpregenrateup_buff").setBool(0,false); // bonus_witch_bykk(obj); } setDamageRate_Witch_bykk(obj); } function summonmonster_witch_bykk(obj,monsterobj,x,y,z,substate,monsterId,summontime,level,team) { if(obj.getVar("Summonnum").size_vector() == 0){ obj.getVar("Summonnum").clear_vector(); obj.getVar("Summonnum").push_vector(0); } sq_BinaryStartWrite(); sq_BinaryWriteByte(substate); sq_BinaryWriteDword(monsterId); sq_BinaryWriteWord(team); sq_BinaryWriteWord(level); sq_BinaryWriteWord(obj.getVar("Summonnum").get_vector(0)); sq_BinaryWriteDword(0); sq_BinaryWriteDword(summontime); sq_BinaryWriteWord(1); sq_BinaryWriteWord(1); sq_BinaryWriteWord(1); local destX_01 = 0; local destY_01 = 0; if(!isSameObject(obj, monsterobj)){ destX_01 = monsterobj.getXPos() - obj.getXPos(); destY_01 = monsterobj.getYPos() - obj.getYPos(); if(monsterobj.getDirection() == ENUM_DIRECTION_LEFT) destX_01 = obj.getXPos() - monsterobj.getXPos(); } sq_SendCreatePassiveObjectPacket(obj, 48024, 0, destX_01 + x, destY_01 + y, z, monsterobj.getDirection()); obj.getVar("Summonnum").set_vector(0,obj.getVar("Summonnum").get_vector(0) + 1); } function changeskilleffect_witch_bykk(obj, skillIndex, reciveData) { switch(skillIndex){ case SKILL_BYKK_TRANSFORMFLAPPER: local id = reciveData.readDword(); local monster_obj = sq_GetCNRDObjectToActiveObject(sq_GetObject(obj, reciveData.readDword(), reciveData.readDword())); monster_obj.setMapFollowParent(obj); monster_obj.setMapFollowType(1); switch(id){ case TAU_BYKK_ID: setMonsterAppendage_witch_bykk(obj, monster_obj, "character/mage/witch_skill_bykk/ap/ap_kk_tau.nut", "TAU", SKILL_BYKK_TRANSFORMFLAPPER); break; case GOBLIN_BYKK_ID: setMonsterAppendage_witch_bykk(obj, monster_obj, "character/mage/witch_skill_bykk/ap/ap_kk_goblin.nut", "GOBLIN", SKILL_BYKK_TRANSFORMFLAPPER); break; case FLUORE_BYKK_ID: setMonsterAppendage_witch_bykk(obj, monster_obj, "character/mage/witch_skill_bykk/ap/ap_kk_homunculus_fluore.nut", "FLUORE", SKILL_BYKK_HOMUNCULUS); break; case FLUTO_BYKK_ID: setMonsterAppendage_witch_bykk(obj, monster_obj, "character/mage/witch_skill_bykk/ap/ap_kk_homunculus_fluto.nut", "FLUTO", SKILL_BYKK_HOMUNCULUS); break; case LANTERN_BYKK_ID: setMonsterAppendage_witch_bykk(obj, monster_obj, "character/mage/witch_skill_bykk/ap/ap_kk_homunculus_lantern.nut", "LANTERN", SKILL_BYKK_HOMUNCULUS); break; case JACKFROST_BYKK_ID: setMonsterAppendage_witch_bykk(obj, monster_obj, "character/mage/witch_skill_bykk/ap/ap_kk_homunculus_jackfrost.nut", "JACKFROST", SKILL_BYKK_HOMUNCULUS); break; case LANTERNRUNNER_BYKK_ID: setMonsterAppendage_witch_bykk(obj, monster_obj, "character/mage/witch_skill_bykk/ap/ap_kk_homunculus_lanternrunner.nut", "LANTERNRUNNER", SKILL_BYKK_HOMUNCULUS); break; } break; } } function setMonsterAppendage_witch_bykk(obj, monster_obj, appendagepath, monstername, skill_index) { if(!obj) return; if(!monster_obj) return; if(appendagepath == null || monstername == null || skill_index == null) return; appendagepath = appendagepath.tostring(); monstername = monstername.tostring(); local monster_obj = sq_GetCNRDObjectToActiveObject(monster_obj); if(!CNSquirrelAppendage.sq_IsAppendAppendage(monster_obj, appendagepath)){ local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(monster_obj, monster_obj, skill_index, false, appendagepath, true); AddAppendage.getVar("sqrChr").clear_obj_vector(); AddAppendage.getVar("sqrChr").push_obj_vector(obj); setMonsterInfo_witch_byKK(obj, monster_obj, skill_index, AddAppendage); local monsternum = obj.getVar(monstername).get_obj_vector_size(); if(monsternum > 0){ obj.getVar(monstername).push_obj_vector(monster_obj); } else{ obj.getVar(monstername).clear_obj_vector(); obj.getVar(monstername).push_obj_vector(monster_obj); } } } function setMonsterInfo_witch_byKK(obj, monster_obj, skill_index, appendage) { if(!obj) return; local monster_id = monster_obj.getCollisionObjectIndex(); switch(monster_id){ case FLUORE_BYKK_ID: case FLUTO_BYKK_ID: case JACKFROST_BYKK_ID: case LANTERN_BYKK_ID: if(sq_GetIntData(obj, SKILL_BYKK_HOMUNCULUS, 43) > 0){ local speedRate = sq_GetIntData(obj, SKILL_BYKK_HOMUNCULUS, 43); local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ATTACK_SPEED, true, speedRate.tofloat() , 0); if(ap) ap.sq_Append(monster_obj, obj); local speedRate2 = sq_GetIntData(obj, SKILL_BYKK_HOMUNCULUS, 44); local ap2 = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_MOVE_SPEED, true, speedRate2.tofloat() , 0); if(ap2) ap2.sq_Append(monster_obj, obj); } local coolt01 = 2000, coolt02 = 5000; if(monster_id == LANTERN_BYKK_ID){coolt01 = 1000; coolt02 = 15000;} appendage.getVar("skill_1").clear_timer_vector(); appendage.getVar("skill_1").push_timer_vector(); local t_01 = appendage.getVar("skill_1").get_timer_vector(0); t_01.setParameter(2000, -1); t_01.resetInstant(0); appendage.getVar("skill_2").clear_timer_vector(); appendage.getVar("skill_2").push_timer_vector(); local t_02 = appendage.getVar("skill_2").get_timer_vector(0); t_02.setParameter(5000, -1); t_02.resetInstant(0); appendage.getVar().clear_ct_vector(); appendage.getVar().push_ct_vector(); appendage.getVar("atktime").clear_ct_vector(); appendage.getVar("atktime").push_ct_vector(); local timer = appendage.getVar("atktime").get_ct_vector(0); timer.Reset(); timer.Start(10000,0); break; } } function monsterattack_witch_ksk(monsterObj,attackIndex) { if(!monsterObj) return; local pIntVec = sq_GetGlobalIntVector(); sq_IntVectorClear(pIntVec); sq_IntVectorPush(pIntVec, attackIndex); sq_AddSetStatePacketActiveObject(monsterObj, 8, pIntVec, STATE_PRIORITY_USER); } function proc_appendage_kak_tau(appendage) { if (!appendage) return; local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); if(!parentObj){appendage.setValid(false);return;} if(!sqrChr || sqrChr.getState() == STATE_DIE){appendage.setValid(false);return;} } function onSourceKeyFrameFlag_appendage_kak_tau(appendage,flagIndex) { if (!appendage) return; local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); if(!parentObj){appendage.setValid(false);return;} if(!sqrChr || sqrChr.getState() == STATE_DIE){appendage.setValid(false);return;} switch(flagIndex){ case 1: local skill_level = sq_GetSkillLevel(sqrChr, SKILL_BYKK_TRANSFORMFLAPPER); cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,parentObj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPER,10,200+skill_level*10,0,0,0,0,0,0,0,1); break; case 2: local skill_level = sq_GetSkillLevel(sqrChr, SKILL_BYKK_TRANSFORMFLAPPER); cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,parentObj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPER,11,500+skill_level*25,0,0,0,0,0,0,0,1); break; case 3: local skill_level = sq_GetSkillLevel(sqrChr, SKILL_BYKK_TRANSFORMFLAPPER); local group = sq_GetGroup(parentObj); local uniqueId = sq_GetUniqueId(parentObj); cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,parentObj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPER,12,800+skill_level*40,group,uniqueId,0,0,0,0,0,1); break; case 4: local skill_level = sq_GetSkillLevel(sqrChr, SKILL_BYKK_TRANSFORMFLAPPER); cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,200,0,0,parentObj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPER,13,300+skill_level*15,0,0,0,0,0,0,0,1); break; } } function proc_appendage_kak_goblin(appendage) { if (!appendage) return; local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); if(!parentObj){appendage.setValid(false);return;} if(!sqrChr || sqrChr.getState() == STATE_DIE){appendage.setValid(false);return;} } function onSourceKeyFrameFlag_appendage_kak_goblin(appendage,flagIndex) { if (!appendage) return; local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); if(!parentObj){appendage.setValid(false);return;} if(!sqrChr || sqrChr.getState() == STATE_DIE){appendage.setValid(false);return;} switch(flagIndex){ case 1: local skill_level = sq_GetSkillLevel(sqrChr, SKILL_BYKK_TRANSFORMFLAPPER); cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,40,0,50,parentObj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPER,14,400+skill_level*20,0,0,0,0,0,0,0,1); break; case 2: local skill_level = sq_GetSkillLevel(sqrChr, SKILL_BYKK_TRANSFORMFLAPPER); for(local i = 0; i < 3; i++){ cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,40,0,50,parentObj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPER,15,600+skill_level*30,i,0,0,0,0,0,0,1); } break; } } function proc_appendage_kak_homunculus_fluore(appendage) { if (!appendage) return; local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); if(!parentObj){appendage.setValid(false);return;} if(!sqrChr || sqrChr.getState() == STATE_DIE){appendage.setValid(false);return;} if(!sq_IsMyControlObject(sqrChr)) return; local t_01 = appendage.getVar("skill_1").get_timer_vector(0); local t_02 = appendage.getVar("skill_2").get_timer_vector(0); local currentT = appendage.getTimer().Get(); local state = parentObj.getState(); local attackIndex = parentObj.getAttackIndex(); switch(state){ case STATE_STAND: local timer = appendage.getVar("atktime").get_ct_vector(0); local currentTT = timer.Get(); if(currentTT < ATK_TIME_WITCH) return; timer.Reset(); timer.Start(10000,0); local targetObj = sq_FindTarget( parentObj, 0, 1000, 800, 350); if(targetObj){ parentObj.getVar("targetObj").clear_obj_vector(); parentObj.getVar("targetObj").push_obj_vector(targetObj); local skillt = [t_02,t_01]; local attackIndex = [3,0]; local distanceX = [100,500]; local distanceXmin = [0,0]; local distanceY = [30,300]; for(local i = 0;i < skillt.len(); i++){ if(skillt[i] && skillt[i].isOnEvent(currentT)){ if(sq_IsMyControlObject(parentObj)){ if(sq_Abs(targetObj.getXPos() - parentObj.getXPos()) <= distanceX[i] && sq_Abs(targetObj.getXPos() - parentObj.getXPos()) >= distanceXmin[i] && sq_Abs(targetObj.getYPos() - parentObj.getYPos()) <= distanceY[i]){ monsterattack_witch_ksk(parentObj,attackIndex[i]); return; } } } } } else{ if(sq_FindTarget( parentObj, -1000, 1000, 800, 350)) sq_SetCurrentDirection(parentObj, sq_GetOppositeDirection(sq_GetDirection(parentObj))); } break; case STATE_ATTACK: switch(attackIndex){ case 1: local timer = appendage.getVar().get_ct_vector(0); local currentT1 = timer.Get(); local hitMax = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,9,sq_GetSkillLevel(sqrChr,SKILL_BYKK_HOMUNCULUS)); if(currentT1 >= hitMax * 150) monsterattack_witch_ksk(parentObj,2); break; case 4: local timer = appendage.getVar().get_ct_vector(0); local currentT1 = timer.Get(); local hitMax = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,12,sq_GetSkillLevel(sqrChr,SKILL_BYKK_HOMUNCULUS)); if(currentT1 >= hitMax * 300) parentObj.sendStateOnlyPacket(STATE_STAND); break; } break; } } function onSourceKeyFrameFlag_appendage_kak_homunculus_fluore(appendage,flagIndex) { if (!appendage) return; local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); if(!parentObj){appendage.setValid(false);return;} if(!sqrChr || sqrChr.getState() == STATE_DIE){appendage.setValid(false);return;} switch(flagIndex){ case 11: local timer = appendage.getVar().get_ct_vector(0); timer.Reset(); timer.Start(10000,0); local hitMax = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,9,sq_GetSkillLevel(sqrChr,SKILL_BYKK_HOMUNCULUS)); local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMUNCULUS, SKILL_BYKK_HOMUNCULUS, 7, 1.0) + 100; local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0)); local group = sq_GetGroup(targetObj); local uniqueId = sq_GetUniqueId(targetObj); cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,25,0,50,parentObj.getDirection(),SKILL_BYKK_HOMUNCULUS,11,totalDamage,hitMax,group,uniqueId,0,0,0,0,1); monsterattack_witch_ksk(parentObj,1); break; case 21: local hitMax = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,12,sq_GetSkillLevel(sqrChr,SKILL_BYKK_HOMUNCULUS)); local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMUNCULUS, SKILL_BYKK_HOMUNCULUS, 10, 1.0) + 100; local skill_level = sq_GetSkillLevel(sqrChr,SKILL_BYKK_HOMUNCULUS); local prob = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,14,skill_level); local level = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,15,skill_level); local time = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,16,skill_level); local damage = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,17,skill_level); cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,parentObj.getDirection(),SKILL_BYKK_HOMUNCULUS,12,totalDamage,hitMax,prob,level,time,damage,0,0,1); monsterattack_witch_ksk(parentObj,4); break; } } function proc_appendage_kak_homunculus_fluto(appendage) { if (!appendage) return; local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); if(!parentObj){appendage.setValid(false);return;} if(!sqrChr || sqrChr.getState() == STATE_DIE){appendage.setValid(false);return;} if(!sq_IsMyControlObject(sqrChr)) return; local t_01 = appendage.getVar("skill_1").get_timer_vector(0); local t_02 = appendage.getVar("skill_2").get_timer_vector(0); local currentT = appendage.getTimer().Get(); local state = parentObj.getState(); local attackIndex = parentObj.getAttackIndex(); switch(state){ case STATE_STAND: local timer = appendage.getVar("atktime").get_ct_vector(0); local currentTT = timer.Get(); if(currentTT < ATK_TIME_WITCH) return; timer.Reset(); timer.Start(10000,0); local targetObj = sq_FindTarget( parentObj, 0, 1000, 800, 350); if(targetObj){ parentObj.getVar("targetObj").clear_obj_vector(); parentObj.getVar("targetObj").push_obj_vector(targetObj); local skillt = [t_02,t_01]; local attackIndex = [6,0]; local distanceX = [200,200]; local distanceXmin = [0,0]; local distanceY = [50,200]; for(local i = 0;i < skillt.len(); i++){ if(skillt[i] && skillt[i].isOnEvent(currentT)){ if(sq_IsMyControlObject(parentObj)){ if(sq_Abs(targetObj.getXPos() - parentObj.getXPos()) <= distanceX[i] && sq_Abs(targetObj.getXPos() - parentObj.getXPos()) >= distanceXmin[i] && sq_Abs(targetObj.getYPos() - parentObj.getYPos()) <= distanceY[i]){ monsterattack_witch_ksk(parentObj,attackIndex[i]); return; } } } } } else{ if(sq_FindTarget( parentObj, -1000, 1000, 800, 350)) sq_SetCurrentDirection(parentObj, sq_GetOppositeDirection(sq_GetDirection(parentObj))); } break; case STATE_ATTACK: switch(attackIndex){ case 0://移动 local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0)); if(targetObj){ local pAni = parentObj.getCurrentAnimation(); local currentT = sq_GetCurrentTime(pAni); local fireT = pAni.getDelaySum(false); local X1 = sq_GetAccel(parentObj.getXPos(), targetObj.getXPos(), currentT, fireT, true); local Y1 = sq_GetAccel(parentObj.getYPos(), targetObj.getYPos(), currentT, fireT, true); if(parentObj.isMovablePos(X1, Y1)){ sq_setCurrentAxisPos(parentObj, 0, X1); sq_setCurrentAxisPos(parentObj, 1, Y1); } else{ monsterattack_witch_ksk(parentObj,1); } } break; } break; } } function onSourceKeyFrameFlag_appendage_kak_homunculus_fluto(appendage,flagIndex) { if (!appendage) return; local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); if(!parentObj){appendage.setValid(false);return;} if(!sqrChr || sqrChr.getState() == STATE_DIE){appendage.setValid(false);return;} switch(flagIndex){ case 11: monsterattack_witch_ksk(parentObj,1); break; case 12: local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMUNCULUS, SKILL_BYKK_HOMUNCULUS, 34, 1.0) + 100; cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,parentObj.getDirection(),SKILL_BYKK_HOMUNCULUS,21,totalDamage,0,0,0,0,0,0,0,1); monsterattack_witch_ksk(parentObj,2); break; case 13: monsterattack_witch_ksk(parentObj,3); break; case 14: monsterattack_witch_ksk(parentObj,4); break; case 15: monsterattack_witch_ksk(parentObj,5); break; case 16: local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMUNCULUS, SKILL_BYKK_HOMUNCULUS, 33, 1.0) + 100; local group = sq_GetGroup(parentObj); local uniqueId = sq_GetUniqueId(parentObj); cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,parentObj.getDirection(),SKILL_BYKK_HOMUNCULUS,24,totalDamage,group,uniqueId,0,0,0,0,0,1); break; case 17: local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMUNCULUS, SKILL_BYKK_HOMUNCULUS, 35, 1.0) + 100; cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,parentObj.getDirection(),SKILL_BYKK_HOMUNCULUS,22,totalDamage,0,0,0,0,0,0,0,1); break; case 21://OBJ local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMUNCULUS, SKILL_BYKK_HOMUNCULUS, 36, 1.0) + 100; local skill_level = sq_GetSkillLevel(sqrChr,SKILL_BYKK_HOMUNCULUS); local prob = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,40,skill_level); local level = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,38,skill_level); local time = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,39,skill_level); cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,parentObj.getDirection(),SKILL_BYKK_HOMUNCULUS,23,totalDamage,prob,level,time,0,0,0,0,1); sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/witch_bykk/fluto/animation/b/hit_target-normal.ani",0,0,0); break; } } function proc_appendage_kak_homunculus_jackfrost(appendage) { if (!appendage) return; local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); if(!parentObj){appendage.setValid(false);return;} if(!sqrChr || sqrChr.getState() == STATE_DIE){appendage.setValid(false);return;} if(!sq_IsMyControlObject(sqrChr)) return; local t_01 = appendage.getVar("skill_1").get_timer_vector(0); local t_02 = appendage.getVar("skill_2").get_timer_vector(0); local currentT = appendage.getTimer().Get(); local state = parentObj.getState(); local attackIndex = parentObj.getAttackIndex(); switch(state){ case STATE_STAND: local timer = appendage.getVar("atktime").get_ct_vector(0); local currentTT = timer.Get(); if(currentTT < ATK_TIME_WITCH) return; timer.Reset(); timer.Start(10000,0); local targetObj = sq_FindTarget( parentObj, 0, 1000, 800, 350); if(targetObj){ parentObj.getVar("targetObj").clear_obj_vector(); parentObj.getVar("targetObj").push_obj_vector(targetObj); local skillt = [t_02,t_01]; local attackIndex = [1,0]; local distanceX = [200,150]; local distanceXmin = [0,0]; local distanceY = [30,50]; for(local i = 0;i < skillt.len(); i++){ if(skillt[i] && skillt[i].isOnEvent(currentT)){ if(sq_IsMyControlObject(parentObj)){ if(sq_Abs(targetObj.getXPos() - parentObj.getXPos()) <= distanceX[i] && sq_Abs(targetObj.getXPos() - parentObj.getXPos()) >= distanceXmin[i] && sq_Abs(targetObj.getYPos() - parentObj.getYPos()) <= distanceY[i]){ monsterattack_witch_ksk(parentObj,attackIndex[i]); return; } } } } } else{ if(sq_FindTarget( parentObj, -1000, 1000, 800, 350)) sq_SetCurrentDirection(parentObj, sq_GetOppositeDirection(sq_GetDirection(parentObj))); } break; } } function onSourceKeyFrameFlag_appendage_kak_homunculus_jackfrost(appendage,flagIndex) { if (!appendage) return; local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); if(!parentObj){appendage.setValid(false);return;} if(!sqrChr || sqrChr.getState() == STATE_DIE){appendage.setValid(false);return;} switch(flagIndex){ case 11://OBJ local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMUNCULUS, SKILL_BYKK_HOMUNCULUS, 23, 1.0) + 100; local hitMax = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,25,sq_GetSkillLevel(sqrChr,SKILL_BYKK_HOMUNCULUS)); cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,50,0,200,parentObj.getDirection(),SKILL_BYKK_HOMUNCULUS,31,totalDamage,hitMax,0,0,0,0,0,0,1); break; case 21://OBJ local timer = appendage.getVar().get_ct_vector(0); timer.Reset(); timer.Start(10000,0); local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMUNCULUS, SKILL_BYKK_HOMUNCULUS, 26, 1.0) + 100; local skill_level = sq_GetSkillLevel(sqrChr,SKILL_BYKK_HOMUNCULUS); local hitMax = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,28,skill_level); local prob = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,30,skill_level); local level = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,31,skill_level); local time = sq_GetLevelData(sqrChr,SKILL_BYKK_HOMUNCULUS,32,skill_level); local group = sq_GetGroup(parentObj); local uniqueId = sq_GetUniqueId(parentObj); cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,parentObj.getDirection(),SKILL_BYKK_HOMUNCULUS,32,totalDamage,hitMax,prob,level,time,group,uniqueId,0,1); monsterattack_witch_ksk(parentObj,2); break; case 22: if(parentObj.getDirection() == ENUM_DIRECTION_LEFT) sq_SetVelocity(parentObj, 0, -50.0); else sq_SetVelocity(parentObj, 0, 50.0); break; case 23: monsterattack_witch_ksk(parentObj,3); break; } } function proc_appendage_kak_homunculus_lantern(appendage) { if (!appendage) return; local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); if(!parentObj){appendage.setValid(false);return;} if(!sqrChr || sqrChr.getState() == STATE_DIE){appendage.setValid(false);return;} if(!sq_IsMyControlObject(sqrChr)) return; local timer = appendage.getVar().get_ct_vector(0); if(timer){ local currentT1 = timer.Get(); if(currentT1 == 0){ timer.Reset(); timer.Start(10000,0); monsterattack_witch_ksk(parentObj,0); } if(currentT1 >= 29000){ appendage.getVar().clear_ct_vector(); monsterattack_witch_ksk(parentObj,sq_getRandom(2,3)); } } local t_01 = appendage.getVar("skill_1").get_timer_vector(0); local t_02 = appendage.getVar("skill_2").get_timer_vector(0); local currentT = appendage.getTimer().Get(); local state = parentObj.getState(); local attackIndex = parentObj.getAttackIndex(); switch(state){ case STATE_STAND: local timer = appendage.getVar("atktime").get_ct_vector(0); local currentTT = timer.Get(); if(currentTT < ATK_TIME_WITCH) return; timer.Reset(); timer.Start(10000,0); local targetObj = sq_FindTarget( parentObj, 0, 1000, 800, 350); if(targetObj){ parentObj.getVar("targetObj").clear_obj_vector(); parentObj.getVar("targetObj").push_obj_vector(targetObj); local skillt = [t_02,t_01]; local attackIndex = [sq_getRandom(2,3),1]; local distanceX = [20,200]; local distanceXmin = [0,0]; local distanceY = [20,20]; for(local i = 0;i < skillt.len(); i++){ if(skillt[i] && skillt[i].isOnEvent(currentT)){ if(sq_IsMyControlObject(parentObj)){ if(sq_Abs(targetObj.getXPos() - parentObj.getXPos()) <= distanceX[i] && sq_Abs(targetObj.getXPos() - parentObj.getXPos()) >= distanceXmin[i] && sq_Abs(targetObj.getYPos() - parentObj.getYPos()) <= distanceY[i]){ monsterattack_witch_ksk(parentObj,attackIndex[i]); return; } } } } } else{ if(sq_FindTarget( parentObj, -1000, 1000, 800, 350)) sq_SetCurrentDirection(parentObj, sq_GetOppositeDirection(sq_GetDirection(parentObj))); } break; case STATE_ATTACK: switch(attackIndex){ case 2: // break; } break; } } function onSourceKeyFrameFlag_appendage_kak_homunculus_lantern(appendage,flagIndex) { if (!appendage) return; local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); if(!parentObj){appendage.setValid(false);return;} if(!sqrChr || sqrChr.getState() == STATE_DIE){appendage.setValid(false);return;} switch(flagIndex){ case 11://AP if(appendage.getVar().getBool(0) == false) appendage.getVar().setBool(0,true); break; case 21://OBJ local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMUNCULUS, SKILL_BYKK_HOMUNCULUS, 22, 1.0) + 100; cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,15,0,45,parentObj.getDirection(),SKILL_BYKK_HOMUNCULUS,41,totalDamage,0,0,0,0,0,0,0,1); break; case 31: parentObj.sendDestroyPacket(true); break; case 32://OBJ local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMUNCULUS, SKILL_BYKK_HOMUNCULUS, 19, 1.0) + 100; cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,0,0,45,parentObj.getDirection(),SKILL_BYKK_HOMUNCULUS,42,totalDamage,0,0,0,0,0,0,0,1); break; case 41://summon local monsterlevel = sq_GetSkillLevel(sqrChr,174); local num = sqrChr.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMUNCULUS, SKILL_BYKK_HOMUNCULUS, 20, 1.0) + 100; for(local i = 0; i < num; i++){ summonmonster_witch_bykk(sqrChr,parentObj,0,0,-sq_GetZPos(sqrChr),0,LANTERNRUNNER_BYKK_ID,10000,monsterlevel,0); } parentObj.sendDestroyPacket(true); break; } } function drawAppend_appendage_kk_homunculus_lantern_bykk(appendage, isOver, x, y, isFlip) { local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); if(appendage.getVar().getBool(0)){ local var = appendage.getVar(); local Ani_01 = var.GetAnimationMap("animation_01", "monster/character/mage/witch_bykk/homunculuslantern/animation/a/lantern_aloop_groundauraloop.ani"); local hight = parentObj.getZPos(); if(Ani_01 && !isOver){ sq_AnimationProc(Ani_01); sq_drawCurrentFrame(Ani_01, x, y + hight, isFlip); } } } function onSourceKeyFrameFlag_appendage_kak_homunculus_lanternrunner(appendage,flagIndex) { if (!appendage) return; local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent()); local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); if(!parentObj){appendage.setValid(false);return;} if(!sqrChr || sqrChr.getState() == STATE_DIE){appendage.setValid(false);return;} switch(flagIndex){ case 11://OBJ local totalDamage = sqrChr.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMUNCULUS, SKILL_BYKK_HOMUNCULUS, 19, 1.0) + 100; cearteSkillPassive_Witch_bykk(sqrChr,parentObj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,parentObj.getDirection(),SKILL_BYKK_HEATINGFURNACE,4,totalDamage,2,120,0,0,0,0,0,1); parentObj.sendDestroyPacket(true); break; } } function onEnd_appendage_kk_goblin_bykk(appendage) { local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0)); if(!sqrChr || sqrChr.getState() == STATE_DIE) return; if(sqrChr.getVar("countofhomunculus").getInt(11) < 1) return; sqrChr.getVar("countofhomunculus").setInt(11, sqrChr.getVar("countofhomunculus").getInt(11) - 1); print("number = "+sqrChr.getVar("countofhomunculus").getInt(11)); } function drawAppend_appendage_sweetcandybar_bykk(appendage, isOver, x, y, isFlip) { local obj = appendage.getParent(); if (!obj) { appendage.setValid(false); return; } local var = appendage.getVar(); local Ani = var.GetAnimationMap("candynormal", "character/mage/effect/animation/witch_bykk/sweetcandybar/candy-normal.ani"); if (Ani && isOver) { sq_AnimationProc(Ani); sq_drawCurrentFrame(Ani, x, y - 140, isFlip); } } function onStart_appendage_friendlyfamiliar_bykk(appendage) { local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false);return;} local skillLevel = parentObj.sq_GetSkillLevel(SKILL_BYKK_FRIENDLYFAMILIAR); local value1 = sq_GetLevelData(parentObj, SKILL_BYKK_FRIENDLYFAMILIAR, 9, skillLevel); local change_appendage = appendage.sq_getChangeStatus("friendlyfamiliar"); if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("friendlyfamiliar",parentObj, parentObj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value1); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (value1 * 0.1).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (value1 * 0.1).tofloat()); } } function onStart_appendage_homunculus_bykk(appendage) { // } function onStart_appendage_lapisphilosophorum_bykk(appendage) { // } function onStart_appendage_redcandy_bykk(appendage) { local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false);return;} local skillLevel = parentObj.sq_GetSkillLevel(SKILL_BYKK_REDCANDY); local value1 = sq_GetLevelData(parentObj, SKILL_BYKK_REDCANDY, 0, skillLevel); local change_appendage = appendage.sq_getChangeStatus("redcandy"); if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("redcandy",parentObj, parentObj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value1); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (value1 * 0.1).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (value1 * 0.1).tofloat()); } } function onStart_appendage_successpremonition_bykk(appendage) { local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false);return;} local skillLevel = parentObj.sq_GetSkillLevel(SKILL_BYKK_SUCCESSPREMONITION); local value1 = sq_GetLevelData(parentObj, SKILL_BYKK_SUCCESSPREMONITION, 4, skillLevel); local value2 = sq_GetLevelData(parentObj, SKILL_BYKK_SUCCESSPREMONITION, 5, skillLevel); local change_appendage = appendage.sq_getChangeStatus("successpremonition"); if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("successpremonition",parentObj, parentObj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value1); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_HIT_RATE, false, (value1 * 0.1).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_DAMAGE_RATE, true, (value2 / 0.667).tofloat()); } } function onStart_appendage_mpregenrateup_bykk(appendage) { local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false);return;} local skillLevel = parentObj.sq_GetSkillLevel(41); appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, ENUM_CHARACTERJOB_MAGE, 41, skillLevel); appendage.setEnableIsBuff(true); appendage.setBuffIconImage(29); //sprite_common_commoneffect setDamageRate_Witch_bykk(parentObj); } function procSkill_Witch_bykk(obj) { //obj.setSkillCommandEnable(SKILL_BYKK_JACKOHALLOWEEN, false); if(sq_GetIntData(obj, SKILL_BYKK_HOMUNCULUS, 12) > 0) obj.setSkillCommandEnable(109, false); if(sq_GetLevelData(obj, SKILL_BYKK_MEGADRILL, 9, sq_GetSkillLevel(obj, SKILL_BYKK_MEGADRILL)) > 0) obj.setSkillCommandEnable(SKILL_BYKK_JACKOHALLOWEEN, false); if(sq_GetLevelData(obj, SKILL_BYKK_MEGADRILL, 10, sq_GetSkillLevel(obj, SKILL_BYKK_MEGADRILL)) > 0) obj.setSkillCommandEnable(SKILL_BYKK_UROBOROS, false); } function checkExecutableSkill_AcidCloud_bykk(obj) { local state = obj.getState(); if(state == 6 && !sq_GetSkill(obj, SKILL_BYKK_ACIDCLOUD).isInCoolTime()){ obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(SKILL_BYKK_ACIDCLOUD, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function onSetState_AcidCloud_bykk(obj, state, datas, isResetTimer) { if(!obj) return; obj.sq_StopMove(); local substate = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(substate); switch(substate){ case 0: local Ani = obj.sq_GetThrowChargeAni(2); obj.setCurrentAnimation(Ani); local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_ACIDCLOUD); local castTime = sq_GetCastTime(obj, SKILL_BYKK_ACIDCLOUD, skill_level); sq_StartDrawCastGauge(obj, castTime, true); local animation = sq_GetCurrentAnimation(obj); local startTime = sq_GetDelaySum(animation); local speedRate = startTime.tofloat() / castTime.tofloat(); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); break; case 1: obj.sq_PlaySound("WZ_ACID_CLOUD"); local Ani = obj.sq_GetThrowShootAni(2); obj.setCurrentAnimation(Ani); local ani = obj.getCurrentAnimation(); local delay = ani.getDelaySum(0,4); obj.setTimeEvent(0,240,1,false); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); break; case 3: obj.sq_ZStop(); obj.sq_SetCurrentAnimation(ANIMATION_BYKK_LAVAPOTIONAIR_BODY); break; case 4: obj.sq_SetCurrentAnimation(ANIMATION_ATTACK_SETCUSTOM); local attackInfo = sq_GetCustomAttackInfo(obj, 1); sq_SetCurrentAttackInfo(obj, attackInfo); break; } } function onEndCurrentAni_AcidCloud_bykk(obj) { if(!obj) return; if(!obj.sq_IsMyControlObject()) return; local substate = obj.getSkillSubState(); switch(substate){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_BYKK_ACIDCLOUD, STATE_PRIORITY_USER, true); break; case 1: case 4: obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); break; case 3: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(0); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_IGNORE_FORCE, true); break; } } function onProcCon_AcidCloud_bykk(obj) { if(!obj) return; local substate = obj.getSkillSubState(); switch(substate){ case 0: local stateTime = obj.sq_GetStateTimer(); local castTime = obj.getVar("custom_bykk").get_vector(0); if(stateTime >= castTime){ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_BYKK_ACIDCLOUD, STATE_PRIORITY_USER, true); } break; } } function onKeyFrameFlag_AcidCloud_bykk(obj, flagIndex) { if(!obj) return false; local substate = obj.getSkillSubState(); switch(substate){ case 3: if(flagIndex == 1){ local skllevel0 = sq_GetSkillLevel(obj, SKILL_BYKK_ACIDCLOUD); local leftTime = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 0, skllevel0); local hitTime = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 5, skllevel0); local skllevel1 = sq_GetSkillLevel(obj, SKILL_BYKK_REDCANDY); if(skllevel1 > 0){ if(sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 8, skllevel0) > 0) leftTime = leftTime + 5000; local totalDamage = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 4, skllevel0); local totalDamage2 = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 1, skllevel0); local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); local prob = sq_GetLevelData(obj,SKILL_BYKK_REDCANDY, 1, skllevel1); local level = sq_GetSkillLevel(obj, 174) + sq_GetIntData(obj, SKILL_BYKK_REDCANDY, 13); local time = sq_GetIntData(obj, SKILL_BYKK_REDCANDY, 14); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,280 - sq_GetZPos(obj),obj.getDirection(),SKILL_BYKK_ACIDCLOUD,2,totalDamage,leftTime,hitTime,0,prob,level,time,damageRate,1); if(sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 8, skllevel0) > 0) cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,75,0,280 - sq_GetZPos(obj),obj.getDirection(),SKILL_BYKK_ACIDCLOUD,2,totalDamage,leftTime,hitTime,0,prob,level,time,damageRate,1); } else{ local successType = getSuccessType_bykk(obj,SKILL_BYKK_ACIDCLOUD); if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,100) >= (100 - sq_GetIntData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 21))) successType = 3; switch(successType){ case 0: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/acidcloud/fail_n.ani",0,2,152); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/acidcloud/fail_d.ani",0,1,151); break; case 1: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/acidcloud/success_n.ani",0,2,152); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/acidcloud/success_d.ani",0,1,151); break; case 2: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/acidcloud/great_d.ani",0,2,152); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/acidcloud/great_n.ani",0,1,151); break; } local totalDamage = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 2, skllevel0); if(successType == 1) totalDamage = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 3, skllevel0); if(successType >= 2) totalDamage = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 4, skllevel0); local totalDamage2 = 0; if(successType >= 2) totalDamage2 = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 1, skllevel0); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,200 - sq_GetZPos(obj),obj.getDirection(),SKILL_BYKK_ACIDCLOUD,1,totalDamage,leftTime,hitTime,successType,totalDamage2,0,0,0,1); } local skllevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_SUCCESSPREMONITION); local nextskillprob = sq_GetLevelData(obj,SKILL_BYKK_SUCCESSPREMONITION, 0, skllevel2); if(skllevel2 > 0){ if(sq_getRandom(0,99) > (1000 - nextskillprob) / 10){ obj.getVar("successpremonition").setBool(0,true); } } } break; } } function onTimeEvent_AcidCloud_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch (timeEventIndex) { case 0: local skllevel0 = sq_GetSkillLevel(obj, SKILL_BYKK_ACIDCLOUD); local leftTime = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 0, skllevel0); local hitTime = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 5, skllevel0); local skllevel1 = sq_GetSkillLevel(obj, SKILL_BYKK_REDCANDY); if(skllevel1 > 0){ if(sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 8, skllevel0) > 0) leftTime = leftTime + 3000; local totalDamage = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 4, skllevel0); local totalDamage2 = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 1, skllevel0); local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); local prob = sq_GetLevelData(obj,SKILL_BYKK_REDCANDY, 1, skllevel1); local level = sq_GetSkillLevel(obj, 174) + sq_GetIntData(obj, SKILL_BYKK_REDCANDY, 13); local time = sq_GetIntData(obj, SKILL_BYKK_REDCANDY, 14); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,280,obj.getDirection(),SKILL_BYKK_ACIDCLOUD,2,totalDamage,leftTime,hitTime,0,prob,level,time,damageRate,1); if(sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 8, skllevel0) > 0) cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,75,0,280,obj.getDirection(),SKILL_BYKK_ACIDCLOUD,2,totalDamage,leftTime,hitTime,0,prob,level,time,damageRate,1); } else{ local successType = getSuccessType_bykk(obj,SKILL_BYKK_ACIDCLOUD); if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,100) >= (100 - sq_GetIntData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 21))) successType = 3; switch(successType){ case 0: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/acidcloud/fail_n.ani",0,2,152); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/acidcloud/fail_d.ani",0,1,151); break; case 1: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/acidcloud/success_n.ani",0,2,152); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/acidcloud/success_d.ani",0,1,151); break; case 2: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/acidcloud/great_d.ani",0,2,152); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/acidcloud/great_n.ani",0,1,151); break; } local totalDamage = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 2, skllevel0); if(successType == 1) totalDamage = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 3, skllevel0); if(successType >= 2) totalDamage = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 4, skllevel0); local totalDamage2 = 0; if(successType >= 2) totalDamage2 = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 1, skllevel0); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,200,obj.getDirection(),SKILL_BYKK_ACIDCLOUD,1,totalDamage,leftTime,hitTime,successType,totalDamage2,0,0,0,1); } local skllevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_SUCCESSPREMONITION); local nextskillprob = sq_GetLevelData(obj,SKILL_BYKK_SUCCESSPREMONITION, 0, skllevel2); if(skllevel2 > 0){ if(sq_getRandom(0,99) > (1000 - nextskillprob) / 10){ obj.getVar("successpremonition").setBool(0,true); } } break; } } function onEndState_AcidCloud_bykk(obj, new_state) { if(!obj) return; if(new_state != SKILL_BYKK_ACIDCLOUD){ sq_EndDrawCastGauge(obj); } } function checkExecutableSkill_AntiGravityStarter_bykk(obj) { //print("AntiGravityStarter > true"); local state = obj.getState(); local homunculus_level = sq_GetSkillLevel(obj,SKILL_BYKK_HOMUNCULUS); if(state == 6 && homunculus_level > 0 && !sq_GetSkill(obj, SKILL_BYKK_ANTIGRAVITYSTARTER).isInCoolTime()){ obj.startSkillCoolTime(SKILL_BYKK_ANTIGRAVITYSTARTER, sq_GetSkillLevel(obj, SKILL_BYKK_ANTIGRAVITYSTARTER), -1); obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(SKILL_BYKK_ANTIGRAVITYSTARTER, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function onSetState_AntiGravityStarter_bykk(obj, state, datas, isResetTimer) { if(!obj) return; obj.sq_StopMove(); local substate = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(substate); switch(substate){ case 0: obj.sq_SetCurrentAnimation(40); local range = sq_GetIntData(obj, SKILL_BYKK_ANTIGRAVITYSTARTER, 6); local successType = getSuccessType_bykk(obj,SKILL_BYKK_ANTIGRAVITYSTARTER); if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,99) >= (100 - sq_GetIntData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 21))) successType = 3; if(successType == 3){ local sizeRate = sq_GetLevelData(obj,SKILL_BYKK_LAPISPHILOSOPHORUM, 14, sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM)); range = (range.tofloat() * (100.0 + sizeRate.tofloat()) / 100.0).tointeger(); } local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 0, 1.0) + 100; local totalDamage2 = 0; if(successType == 1) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 1, 1.0) + 100; if(successType >= 2){ totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 2, 1.0) + 100; totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 4, 1.0) + 100; } cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,0,obj.getDirection(),SKILL_BYKK_ANTIGRAVITYSTARTER,1,totalDamage,range,successType,totalDamage2,0,0,0,0,1); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,0,obj.getDirection(),SKILL_BYKK_ANTIGRAVITYSTARTER,2,range,0,0,0,0,0,0,0,0); break; case 1: local Ani = obj.sq_GetThrowChargeAni(3); obj.setCurrentAnimation(Ani); obj.setTimeEvent(1,100,1,false); break; case 2: local Ani = obj.sq_GetThrowShootAni(2); obj.setCurrentAnimation(Ani); sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/homonculous/antigravity/plutocast.ani",100,0,0); obj.setTimeEvent(0,150,1,false); break; case 3: obj.sq_ZStop(); obj.sq_SetCurrentAnimation(ANIMATION_BYKK_LAVAPOTIONAIR_BODY); break; } local skllevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_SUCCESSPREMONITION); local nextskillprob = sq_GetLevelData(obj,SKILL_BYKK_SUCCESSPREMONITION, 0, skllevel2); if(skllevel2 > 0 && (substate == 2 || substate == 3)){ if(sq_getRandom(0,99) > (1000 - nextskillprob) / 10){ obj.getVar("successpremonition").setBool(0,true); } } } function onEndCurrentAni_AntiGravityStarter_bykk(obj) { if(!obj) return; if(!obj.sq_IsMyControlObject()) return; local substate = obj.getSkillSubState(); switch(substate){ case 0: case 2: obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); break; case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_BYKK_ANTIGRAVITYSTARTER, STATE_PRIORITY_USER, true); break; case 3: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(0); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_USER, true); break; } } function onProcCon_AntiGravityStarter_bykk(obj) { if(!obj) return; } function onKeyFrameFlag_AntiGravityStarter_bykk(obj, flagIndex) { if(!obj) return false; local substate = obj.getSkillSubState(); switch(substate){ case 3: if(flagIndex == 1){ sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/homonculous/antigravity/plutocast.ani",150,0,0 - sq_GetZPos(obj)); local range = sq_GetIntData(obj, SKILL_BYKK_ANTIGRAVITYSTARTER, 6); local successType = getSuccessType_bykk(obj,SKILL_BYKK_ANTIGRAVITYSTARTER); if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,99) >= (100 - sq_GetIntData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 21))) successType = 3; if(successType == 3){ local sizeRate = sq_GetLevelData(obj,SKILL_BYKK_LAPISPHILOSOPHORUM, 14, sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM)); range = (range.tofloat() * (100.0 + sizeRate.tofloat()) / 100.0).tointeger(); } local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 0, 1.0) + 100; local totalDamage2 = 0; if(successType == 1) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 1, 1.0) + 100; if(successType >= 2){ totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 2, 1.0) + 100; totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 4, 1.0) + 100; } cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,200,0,0 - sq_GetZPos(obj),obj.getDirection(),SKILL_BYKK_ANTIGRAVITYSTARTER,1,totalDamage,range,successType,totalDamage2,0,0,0,0,1); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,200,0,0 - sq_GetZPos(obj),obj.getDirection(),SKILL_BYKK_ANTIGRAVITYSTARTER,2,range,0,0,0,0,0,0,0,0); } break; } return true; } function onTimeEvent_AntiGravityStarter_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return false; if(timeEventIndex == 0){ local range = 600; local successType = getSuccessType_bykk(obj,SKILL_BYKK_ANTIGRAVITYSTARTER); if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,99) >= (100 - sq_GetIntData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 21))) successType = 3; if(successType == 3){ local sizeRate = sq_GetLevelData(obj,SKILL_BYKK_LAPISPHILOSOPHORUM, 14, sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM)); range = (range.tofloat() * (100.0 + sizeRate.tofloat()) / 100.0).tointeger(); } local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 0, 1.0) + 100; local totalDamage2 = 0; if(successType == 1) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 1, 1.0) + 100; if(successType >= 2){ totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 2, 1.0) + 100; totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 4, 1.0) + 100; } cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,0,obj.getDirection(),SKILL_BYKK_ANTIGRAVITYSTARTER,1,totalDamage,range,successType,totalDamage2,0,0,0,0,1); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,0,obj.getDirection(),SKILL_BYKK_ANTIGRAVITYSTARTER,2,range,0,0,0,0,0,0,0,0); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); } else if(timeEventIndex == 1){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_BYKK_ANTIGRAVITYSTARTER, STATE_PRIORITY_USER, true); } } function onEndState_AntiGravityStarter_bykk(obj, new_state) { if(!obj) return; } function checkExecutableSkill_BlackMantle_bykk(obj) { //print("BlackMantle > true"); return 0; } function onSetState_BlackMantle_bykk(obj, state, datas, isResetTimer) { if(!obj) return; obj.sq_StopMove(); local substate = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(substate); switch(substate){ case 0: obj.sq_SetCurrentAnimation(ANIMATION_BYKK_BLACKMANTLE); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLACKMANTLE, SKILL_BYKK_BLACKMANTLE, 0, 1.0) + 100; local bonusRate = 1.0;//obj.getVar("witchs_bonusRate").get_vector(0).tofloat() / 1000.0; local homunculus_level = sq_GetSkillLevel(obj, SKILL_BYKK_HOMUNCULUS); if(homunculus_level > 0){ local bonusrate2 = sq_GetLevelData(obj, SKILL_BYKK_HOMUNCULUS, 6, homunculus_level); bonusRate = bonusRate + bonusrate2.tofloat() / 1000; } totalDamage = (totalDamage.tofloat() * bonusRate).tointeger(); local attackInfo = sq_GetCustomAttackInfo(obj, 25); sq_SetCurrentAttackInfo(obj, attackInfo); sq_SetCurrentAttackBonusRate(attackInfo, totalDamage); local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_BLACKMANTLE); local prob = sq_GetLevelData(obj,SKILL_BYKK_BLACKMANTLE, 1, skill_level); local level = sq_GetLevelData(obj,SKILL_BYKK_BLACKMANTLE, 2, skill_level); local time = sq_GetLevelData(obj,SKILL_BYKK_BLACKMANTLE, 3, skill_level); local speedRate = sq_GetLevelData(obj,SKILL_BYKK_BLACKMANTLE, 7, skill_level) + 100; local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_BLIND, prob, level, time); local pAni = obj.getCurrentAnimation(); pAni.setSpeedRate(200.0); break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_BYKK_BLACKMANTLEHOMUNCULUS); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); break; case 10: // local Ani = obj.sq_GetThrowChargeAni(0); obj.setCurrentAnimation(Ani); break; case 11: // obj.sq_PlaySound("WZ_ACID_CLOUD"); local Ani = obj.sq_GetThrowShootAni(0); obj.setCurrentAnimation(Ani); //local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "ui/ap/ap_character.nut"); //if(AddAppendage) print(1); //else CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "ui/ap/ap_character.nut", true); local successType = getSuccessType_bykk(obj,SKILL_BYKK_ENHANCEDMAGICMISSILE); if(successType == 0) successType = 1; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ENHANCEDMAGICMISSILE, SKILL_BYKK_ENHANCEDMAGICMISSILE, 0, 1.0) + 100; if(successType == 1) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ENHANCEDMAGICMISSILE, SKILL_BYKK_ENHANCEDMAGICMISSILE, 1, 1.0) + 100; local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ENHANCEDMAGICMISSILE, SKILL_BYKK_ENHANCEDMAGICMISSILE, 6, 1.0) + 100; local damageRate = ((totalDamage2.tofloat() / totalDamage.tofloat()) * 100.0).tointeger(); local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_ENHANCEDMAGICMISSILE); local prob = sq_GetLevelData(obj,SKILL_BYKK_ENHANCEDMAGICMISSILE, 2, skill_level); local level = sq_GetSkillLevel(obj, 174) + 20; local time = sq_GetLevelData(obj,SKILL_BYKK_ENHANCEDMAGICMISSILE, 4, skill_level); local damage = sq_GetLevelData(obj,SKILL_BYKK_ENHANCEDMAGICMISSILE, 5, skill_level); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,50,0,70,obj.getDirection(),SKILL_BYKK_ENHANCEDMAGICMISSILE,1,totalDamage,successType,prob,time,damage,damageRate,level,0,1); break; case 12: obj.sq_ZStop(); obj.sq_SetCurrentAnimation(ANIMATION_BYKK_ENHANCEDMAGICMISSILEAIR_BODY); break; case 21: local Ani = obj.sq_GetThrowChargeAni(3); obj.setCurrentAnimation(Ani); local skill_level = sq_GetSkillLevel(obj, 41);//技能等级 local castTime = sq_GetCastTime(obj, 41, skill_level);//得到技能里面的施放时间 local animation = sq_GetCurrentAnimation(obj); local startTime = sq_GetDelaySum(animation); local speedRate = startTime.tofloat() / castTime.tofloat(); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); local currentAni = obj.getCurrentAnimation(); local delaySum = currentAni.getDelaySum(false); sq_StartDrawCastGauge(obj, delaySum, true); obj.setTimeEvent(1,delaySum,1,false); break; case 22: local Ani = obj.sq_GetThrowChargeAni(3); obj.setCurrentAnimation(Ani); local skill_level = sq_GetSkillLevel(obj, 41);//技能等级 local castTime = sq_GetCastTime(obj, 41, skill_level);//得到技能里面的施放时间 if(castTime > 1000) castTime = 1000; local animation = obj.getCurrentAnimation(); sq_SetFrameDelayTime(animation, 1, castTime); sq_StartDrawCastGauge(obj, castTime, true); obj.setTimeEvent(2,castTime,1,false); break; case 23: local Ani = obj.sq_GetThrowShootAni(3); obj.setCurrentAnimation(Ani); break; } if(substate != 10 && substate != 21 && substate != 22){ local skllevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_SUCCESSPREMONITION); local nextskillprob = sq_GetLevelData(obj,SKILL_BYKK_SUCCESSPREMONITION, 0, skllevel2); if(skllevel2 > 0){ if(sq_getRandom(0,99) > (1000 - nextskillprob) / 10){ obj.getVar("successpremonition").setBool(0,true); } } } } function onEndCurrentAni_BlackMantle_bykk(obj) { if(!obj) return; if(!obj.sq_IsMyControlObject()) return; local substate = obj.getSkillSubState(); switch(substate){ case 0: case 1: obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); break; case 10: obj.sq_IntVectClear(); obj.sq_IntVectPush(11); obj.sq_AddSetStatePacket(SKILL_BYKK_BLACKMANTLE, STATE_PRIORITY_USER, true); break; case 11: case 23: obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); break; case 12: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(0); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_USER, true); break; } } function onProcCon_BlackMantle_bykk(obj) { if(!obj) return; } function onKeyFrameFlag_BlackMantle_bykk(obj, flagIndex) { if(!obj) return false; switch(flagIndex){ case 1: local subState = obj.getSkillSubState(); switch(subState){ case 0: cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,120,0,30,obj.getDirection(),SKILL_BYKK_BLACKMANTLE,1,2,0,0,0,0,0,0,0,0); break; case 1: local currentAni = obj.getCurrentAnimation(); local delay = currentAni.getDelaySum(3,3); local speedRate = 3000 / delay; print("speedRate = "+speedRate); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLACKMANTLE, SKILL_BYKK_BLACKMANTLE, 0, 1.0) + 100; local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_BLACKMANTLE); local prob = sq_GetLevelData(obj,SKILL_BYKK_BLACKMANTLE, 1, skill_level) / 10; local level = sq_GetLevelData(obj,SKILL_BYKK_BLACKMANTLE, 2, skill_level); local time = sq_GetLevelData(obj,SKILL_BYKK_BLACKMANTLE, 3, skill_level); local leftTime = 2000,homunculus_level = sq_GetSkillLevel(obj, SKILL_BYKK_HOMUNCULUS),homunculus_skill = sq_GetSkill(obj, SKILL_BYKK_HOMUNCULUS); if(homunculus_level > 0 && !homunculus_skill.isSealFunction()){ cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,100,0,30,obj.getDirection(),SKILL_BYKK_BLACKMANTLE,3,leftTime,totalDamage,prob,level,time,speedRate,0,0,0); obj.setTimeEvent(0,480 / speedRate * 100,1,false); } else cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,130,0,30,obj.getDirection(),SKILL_BYKK_BLACKMANTLE,2,totalDamage,leftTime,prob,level,time,speedRate,0,0,1); break; case 12: local successType = getSuccessType_bykk(obj,SKILL_BYKK_ENHANCEDMAGICMISSILE); if(successType == 0) successType = 1; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ENHANCEDMAGICMISSILE, SKILL_BYKK_ENHANCEDMAGICMISSILE, 0, 1.0) + 100; if(successType == 1) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ENHANCEDMAGICMISSILE, SKILL_BYKK_ENHANCEDMAGICMISSILE, 1, 1.0) + 100; local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ENHANCEDMAGICMISSILE, SKILL_BYKK_ENHANCEDMAGICMISSILE, 6, 1.0) + 100; local damageRate = ((totalDamage2.tofloat() / totalDamage.tofloat()) * 100.0).tointeger(); local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_ENHANCEDMAGICMISSILE); local prob = sq_GetLevelData(obj,SKILL_BYKK_ENHANCEDMAGICMISSILE, 2, skill_level) / 10; local level = sq_GetSkillLevel(obj, 174) + 20; local time = sq_GetLevelData(obj,SKILL_BYKK_ENHANCEDMAGICMISSILE, 4, skill_level); local damage = sq_GetLevelData(obj,SKILL_BYKK_ENHANCEDMAGICMISSILE, 5, skill_level); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,44,0,-10,obj.getDirection(),SKILL_BYKK_ENHANCEDMAGICMISSILE,1,totalDamage,successType,prob,time,damage,damageRate,level,0,1); break; } break; case 2: break; case 3: break; case 4: break; } } function onTimeEvent_BlackMantle_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return false; if(timeEventIndex == 0) obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); else if(timeEventIndex == 1){ local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, 41, false, "character/mage/witch_skill_bykk/passiveskill/ap_mpregenrateup.nut", true); obj.sq_IntVectClear(); obj.sq_IntVectPush(23); obj.sq_AddSetStatePacket(SKILL_BYKK_BLACKMANTLE, STATE_PRIORITY_USER, true); } else if(timeEventIndex == 2){ local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, 41, false, "character/mage/witch_skill_bykk/passiveskill/ap_magicaltempoup.nut", true); local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) if(skill_level <= 0){ local lifeTime = sq_GetLevelData(obj, 2, 0, sq_GetSkillLevel(obj, 2)); addAppendage.sq_SetValidTime(lifeTime); } obj.sq_IntVectClear(); obj.sq_IntVectPush(23); obj.sq_AddSetStatePacket(SKILL_BYKK_BLACKMANTLE, STATE_PRIORITY_USER, true); } } function onEndState_BlackMantle_bykk(obj, new_state) { if(!obj) return; } function onCreateObject_BlackMantle_bykk(obj, createObject) { if(!obj) return; // local sq_var = obj.getVar(); // if(createObject.isObjectType(OBJECTTYPE_PASSIVE)){ // local colObj = sq_GetCNRDObjectToCollisionObject(createObject); // if(colObj.getCollisionObjectIndex() == PASSIVEOBJECT_BYKK_WITCH){ // obj.getVar("blackmantle").clear_obj_vector(); // obj.getVar("blackmantle").push_obj_vector(colObj); // } // } } function onAttack_BlackMantle_bykk(obj, damager, boundingBox, isStuck) { if(!obj) return; local subState = obj.getSkillSubState(); switch(subState){ case 0: if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ 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, 120, 0, damager.getZPos(), 100, true, AddAppendage); sq_HoldAndDelayDie(damager, obj, true, true, true, 10, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage); AddAppendage.sq_SetValidTime(1000); } } break; } } function checkExecutableSkill_BroomSpin_bykk(obj) { // print("BroomSpin > true"); local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_BROOMSPIN); if(b_useskill){ local state = obj.getState(); if(state == 0 || state == 14 || state == 8){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_BYKK_BROOMSPIN, STATE_PRIORITY_IGNORE_FORCE, true); } else if(state == 6){ obj.sq_IntVectClear(); obj.sq_IntVectPush(10); obj.sq_AddSetStatePacket(SKILL_BYKK_BROOMSPIN, STATE_PRIORITY_IGNORE_FORCE, true); return 0; } return 1; } return 0; } function onSetState_BroomSpin_bykk(obj, state, datas, isResetTimer) { if(!obj) return; obj.sq_StopMove(); local substate = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(substate); switch(substate){ //以下平地状态 case 0: obj.sq_StopMove(); obj.sq_SetCurrentAnimation(ANIMATION_BYKK_BROOMSPINNEWREADY_BODY); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/broomspin/broomspinnewready_01.ani",0,0,0); local attackInfo = sq_GetCustomAttackInfo(obj, 26); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BROOMSPIN, SKILL_BYKK_BROOMSPIN, 5, 1.0) + 100; local bonusRate = 1.0;//obj.getVar("witchs_bonusRate").get_vector(0).tofloat() / 1000.0; totalDamage = (totalDamage.tofloat() * bonusRate).tointeger(); sq_SetCurrentAttackInfo(obj, attackInfo); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.sq_PlaySound("WZ_BROOM_SPIN"); break; case 1: obj.sq_StopMove(); obj.sq_SetCurrentAnimation(ANIMATION_BYKK_BROOMSPINNEWA_BODY); break; case 2: obj.sq_StopMove(); obj.sq_SetCurrentAnimation(ANIMATION_BYKK_BROOMSPINNEWB_BODY); break; case 3: local appendage = obj.getVar("BroomSpinAp").getAppendage(0); if(appendage) appendage.setValid(false); obj.removeAllTimeEvent(); obj.sq_StopMove(); obj.sq_SetCurrentAnimation(ANIMATION_BYKK_BROOMSPINNEWC_BODY); obj.sq_PlaySound("WZ_BROOM_SPIN_LANDING"); local attackInfo = sq_GetCustomAttackInfo(obj, 26); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BROOMSPIN, SKILL_BYKK_BROOMSPIN, 6, 1.0) + 100; sq_SetCurrentAttackInfo(obj, attackInfo); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); break; case 4: local appendage = obj.getVar("BroomSpinAp").getAppendage(0); if(appendage) appendage.setValid(false); obj.removeAllTimeEvent(); obj.sq_StopMove(); obj.sq_SetCurrentAnimation(ANIMATION_BYKK_BROOMSPINQUICKSTAND); break; //以下空中状态 case 10: obj.sq_StopMove(); obj.sq_ZStop(); obj.sq_SetCurrentAnimation(34); obj.sq_PlaySound("WZ_BROOM_SPIN"); local currentAni = obj.getCurrentAnimation(); local size = sq_AniLayerListSize(currentAni); for(local i = 0; i < size; i++){ local pAniL = sq_getAniLayerListObject(currentAni, i); if(pAniL) currentAni.removeLayerAnimation(pAniL); } currentAni.addLayerAnimation(0,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/broomspin/ready.ani"),true); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BROOMSPIN, SKILL_BYKK_BROOMSPIN, 0, 1.0) + 100; local bonusRate = 1.0;//obj.getVar("witchs_bonusRate").get_vector(0).tofloat() / 1000.0; totalDamage = (totalDamage.tofloat() * bonusRate).tointeger(); local attackInfo = sq_GetCustomAttackInfo(obj, 26); sq_SetCurrentAttackInfo(obj, attackInfo); sq_SetCurrentAttackBonusRate(attackInfo, totalDamage); local hight = obj.getZPos(); obj.getVar("custom").clear_vector(); obj.getVar("custom").push_vector(hight); local time = hight / 3; obj.setTimeEvent(1,time,-1,false); break; case 11: obj.sq_StopMove(); obj.sq_ZStop(); obj.sq_SetCurrentAnimation(35); local currentAni = obj.getCurrentAnimation(); local size = sq_AniLayerListSize(currentAni); for(local i = 0; i < size; i++){ local pAniL = sq_getAniLayerListObject(currentAni, i); if(pAniL) currentAni.removeLayerAnimation(pAniL); } currentAni.addLayerAnimation(10002,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/broomspin/attack.ani"),true); obj.setTimeEvent(2,20,-1,false); obj.setTimeEvent(4,200,1,false); break; case 12: obj.sq_StopMove(); obj.sq_SetCurrentAnimation(36); if(obj.isExistTimeEvent(4)) obj.stopTimeEvent(4); local currentAni = obj.getCurrentAnimation(); local size = sq_AniLayerListSize(currentAni); for(local i = 0; i < size; i++){ local pAniL = sq_getAniLayerListObject(currentAni, i); if(pAniL) currentAni.removeLayerAnimation(pAniL); } currentAni.addLayerAnimation(10002,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/broomspin/delay.ani"),true); local pAni = obj.getCurrentAnimation(); local Delay = pAni.getDelaySum(false); obj.setTimeEvent(0,Delay,1,false); break; case 13: obj.removeAllTimeEvent(); obj.sq_StopMove(); obj.sq_SetCurrentAnimation(37); local hight = obj.getVar("custom").get_vector(0); if(hight >= 120){ obj.sq_PlaySound("WZ_BROOM_SPIN_LANDING"); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BROOMSPIN, SKILL_BYKK_BROOMSPIN, 1, 1.0) + 100; cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_BROOMSPIN,2,100,0,0,0,0,0,0,0,1); } break; } if((substate == 3 || substate == 4 || substate == 12) && obj.getVar("broomspin").getBool(1)){ obj.getVar("broomspin").setBool(1, false); local skillIndex = obj.getVar("custom").get_vector(0); switch(skillIndex){ case SKILL_BYKK_ACIDCLOUD: local skllevel0 = sq_GetSkillLevel(obj, SKILL_BYKK_ACIDCLOUD); local leftTime = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 0, skllevel0); local hitTime = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 5, skllevel0); local skllevel1 = sq_GetSkillLevel(obj, SKILL_BYKK_REDCANDY); if(skllevel1 > 0){ local totalDamage = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 4, skllevel0); local prob = sq_GetLevelData(obj,SKILL_BYKK_REDCANDY, 1, skllevel1); local level = sq_GetSkillLevel(obj, 174) + sq_GetIntData(obj, SKILL_BYKK_REDCANDY, 13); local time = sq_GetIntData(obj, SKILL_BYKK_REDCANDY, 14); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,280,obj.getDirection(),SKILL_BYKK_ACIDCLOUD,2,totalDamage,leftTime,hitTime,0,prob,level,time,0,1); } else{ local successType = getSuccessType_bykk(obj,SKILL_BYKK_ACIDCLOUD); if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,99) >= 49) successType = 3; local totalDamage = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 2, skllevel0); if(successType == 1) totalDamage = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 3, skllevel0); if(successType >= 2) totalDamage = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 4, skllevel0); local totalDamage2 = 0; if(successType >= 2) totalDamage2 = sq_GetLevelData(obj,SKILL_BYKK_ACIDCLOUD, 1, skllevel0); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,200,obj.getDirection(),SKILL_BYKK_ACIDCLOUD,1,totalDamage,leftTime,hitTime,successType,totalDamage2,0,0,0,1); } break; case SKILL_BYKK_LAVAPOTION: local successType = getSuccessType_bykk(obj,SKILL_BYKK_LAVAPOTION); if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,99) >= 49) successType = 3; local sizeRate = sq_GetIntData(obj,SKILL_BYKK_LAVAPOTION,8); local hitTime = sq_GetIntData(obj,SKILL_BYKK_LAVAPOTION,6); local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_LAVAPOTION); local lifeTime = sq_GetLevelData(obj,SKILL_BYKK_LAVAPOTION, 0, skill_level); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LAVAPOTION, SKILL_BYKK_LAVAPOTION, 1, 1.0) + 100; cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,50,0,70,obj.getDirection(),SKILL_BYKK_LAVAPOTION,3,totalDamage,lifeTime,hitTime,sizeRate,successType,0,0,0,1); break; case SKILL_BYKK_ANTIGRAVITYSTARTER: local range = sq_GetIntData(obj, SKILL_BYKK_ANTIGRAVITYSTARTER, 6); local successType = getSuccessType_bykk(obj,SKILL_BYKK_ANTIGRAVITYSTARTER); if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,99) >= 49) successType = 3; if(successType == 3){ local sizeRate = sq_GetLevelData(obj,SKILL_BYKK_LAPISPHILOSOPHORUM, 14, sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM)); range = (range.tofloat() * (100.0 + sizeRate.tofloat()) / 100.0).tointeger(); } local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 0, 1.0) + 100; local totalDamage2 = 0; if(successType == 1) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 1, 1.0) + 100; if(successType >= 2){ totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 2, 1.0) + 100; totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIGRAVITYSTARTER, SKILL_BYKK_ANTIGRAVITYSTARTER, 4, 1.0) + 100; } cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,0,obj.getDirection(),SKILL_BYKK_ANTIGRAVITYSTARTER,1,totalDamage,range,successType,totalDamage2,0,0,0,0,1); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,0,obj.getDirection(),SKILL_BYKK_ANTIGRAVITYSTARTER,2,range,0,0,0,0,0,0,0,0); break; case SKILL_BYKK_ENHANCEDMAGICMISSILE: local successType = getSuccessType_bykk(obj,SKILL_BYKK_ENHANCEDMAGICMISSILE); if(successType == 0) successType = 1; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ENHANCEDMAGICMISSILE, SKILL_BYKK_ENHANCEDMAGICMISSILE, 0, 1.0) + 100; if(successType == 1) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ENHANCEDMAGICMISSILE, SKILL_BYKK_ENHANCEDMAGICMISSILE, 1, 1.0) + 100; local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ENHANCEDMAGICMISSILE, SKILL_BYKK_ENHANCEDMAGICMISSILE, 6, 1.0) + 100; local damageRate = ((totalDamage2.tofloat() / totalDamage.tofloat()) * 100.0).tointeger(); local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_ENHANCEDMAGICMISSILE); local prob = sq_GetLevelData(obj,SKILL_BYKK_ENHANCEDMAGICMISSILE, 2, skill_level); local level = sq_GetSkillLevel(obj, 174) + 20; local time = sq_GetLevelData(obj,SKILL_BYKK_ENHANCEDMAGICMISSILE, 4, skill_level); local damage = sq_GetLevelData(obj,SKILL_BYKK_ENHANCEDMAGICMISSILE, 5, skill_level); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,50,0,70,obj.getDirection(),SKILL_BYKK_ENHANCEDMAGICMISSILE,1,totalDamage,successType,prob,time,damage,damageRate,level,0,1); break; case SKILL_BYKK_JACKOHALLOWEEN: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_JACKOHALLOWEEN, SKILL_BYKK_JACKOHALLOWEEN, 0, 1.0) + 100; local hitTime = sq_GetIntData(obj,SKILL_BYKK_JACKOHALLOWEEN,5); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_JACKOHALLOWEEN,1,120,totalDamage,hitTime,0,0,0,0,0,2); break; } obj.startSkillCoolTime(skillIndex, sq_GetSkillLevel(obj, skillIndex), -1); } } function onEndCurrentAni_BroomSpin_bykk(obj) { if(!obj) return; if(!obj.sq_IsMyControlObject()) return; local substate = obj.getSkillSubState(); switch(substate){ case 0: obj.setTimeEvent(2,20,-1,false); obj.setTimeEvent(4,200, 1,false); obj.getVar("Witch_BroomSpin").clear_ct_vector(); obj.getVar("Witch_BroomSpin").push_ct_vector(); local timer = obj.getVar("Witch_BroomSpin").get_ct_vector(0); timer.Reset(); timer.Start(10000,0); local appendage = sq_AttractToMe(obj, 200, 120, 300); obj.getVar("BroomSpinAp").setAppendage(0,appendage); obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_BYKK_BROOMSPIN, STATE_PRIORITY_USER, true); break; case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_BYKK_BROOMSPIN, STATE_PRIORITY_USER, true); break; case 2: obj.sq_IntVectClear(); local timer = obj.getVar("Witch_BroomSpin").get_ct_vector(0); if(timer){ local currentT = timer.Get(); local lifeTime = sq_GetIntData(obj, SKILL_BYKK_BROOMSPIN, 5) - 1000; if(currentT <= lifeTime) obj.sq_IntVectPush(1); else{ obj.getVar("Witch_BroomSpin").clear_ct_vector(); if(obj.getVar("broomspin").getBool(0)) obj.sq_IntVectPush(3); else obj.sq_IntVectPush(4); } } obj.sq_AddSetStatePacket(SKILL_BYKK_BROOMSPIN, STATE_PRIORITY_USER, true); break; case 3: case 4: obj.getVar("broomspin").setBool(0,false); local appendage = obj.getVar("BroomSpinAp").getAppendage(0); if(appendage) appendage.setValid(false); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); break; case 10: obj.sq_IntVectClear(); obj.sq_IntVectPush(11); obj.sq_AddSetStatePacket(SKILL_BYKK_BROOMSPIN, STATE_PRIORITY_USER, true); break; case 11: obj.sq_IntVectClear(); obj.sq_IntVectPush(12); obj.sq_AddSetStatePacket(SKILL_BYKK_BROOMSPIN, STATE_PRIORITY_USER, true); break; case 12: obj.sq_IntVectClear(); obj.sq_IntVectPush(13); obj.sq_AddSetStatePacket(SKILL_BYKK_BROOMSPIN, STATE_PRIORITY_USER, true); break; case 13: obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); break; } } function onProcCon_BroomSpin_bykk(obj) { if(!obj) return; if(!obj.sq_IsMyControlObject()) return; local substate = obj.getSkillSubState(); switch(substate){ case 1: case 2: sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); } break; case 11: sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(0); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_USER, true); } local stateTime = obj.sq_GetStateTimer(); local hight = obj.getVar("custom").get_vector(0); local fireT = hight * 7; local v = sq_GetUniformVelocity(hight, 20, stateTime, fireT); sq_setCurrentAxisPos(obj, 2, v); if(obj.getZPos() <= 20){ obj.sq_IntVectClear(); obj.sq_IntVectPush(12); obj.sq_AddSetStatePacket(SKILL_BYKK_BROOMSPIN, STATE_PRIORITY_USER, true); } break; } if((substate == 1 || substate == 2 || substate == 11) && obj.getVar("broomspin").getBool(1) == false){ local skillIndex = [SKILL_BYKK_ACIDCLOUD,SKILL_BYKK_LAVAPOTION,SKILL_BYKK_ANTIGRAVITYSTARTER,SKILL_BYKK_ENHANCEDMAGICMISSILE,SKILL_BYKK_JACKOHALLOWEEN]; for(local i = 0; i < skillIndex.len(); i++){ obj.setSkillCommandEnable(skillIndex[i],true); local b_useskill = obj.sq_IsEnterSkill(skillIndex[i]); if(b_useskill != -1){ obj.getVar("custom").clear_vector(); obj.getVar("custom").push_vector(skillIndex[i]); obj.getVar("broomspin").setBool(1, true); } } } } function onKeyFrameFlag_BroomSpin_bykk(obj, flagIndex) { if(!obj) return false; local substate = obj.getSkillSubState(); switch(substate){ case 1: if(sq_GetCurrentFrameIndex(obj) <= 1) sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/broomspin/broomspinnewsmoke.ani",-111,0,3); else sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/broomspin/broomspinnewsmoke.ani",67,0,11); break; case 2: switch(flagIndex){ case 1: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/broomspin/broomspinnewsmoke.ani",-109,0,0); break; case 2: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/broomspin/broomspinnewsmoke.ani",0,0,18); break; case 3: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/broomspin/broomspinnewsmoke.ani",127,0,0); break; case 4: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/broomspin/broomspinnewsmoke.ani",0,0,-18); break; } break; case 3: switch(flagIndex){ case 1: sq_flashScreen(obj,10,20,20,76, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 2://shock wave local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BROOMSPIN, SKILL_BYKK_BROOMSPIN, 1, 1.0) + 100; cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_BROOMSPIN,2,totalDamage,0,0,0,0,0,0,0,1); break; case 3: sq_SetMyShake(obj,2,80); break; } break; } } function onTimeEvent_BroomSpin_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch (timeEventIndex) { case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(13); obj.sq_AddSetStatePacket(SKILL_BYKK_BROOMSPIN, STATE_PRIORITY_USER, true); break; case 1: obj.resetHitObjectList(); break; case 2://移动 if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(obj.getXPos() - 6,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, obj.getXPos() - 6); if(obj.getDirection() == ENUM_DIRECTION_RIGHT) obj.setDirection(ENUM_DIRECTION_LEFT); } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(obj.getXPos() + 6,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, obj.getXPos() + 6); if(obj.getDirection() == ENUM_DIRECTION_LEFT) obj.setDirection(ENUM_DIRECTION_RIGHT); } else{ local moveX = sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(),1); if(obj.isMovablePos(moveX,sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, moveX); } if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(obj.getXPos(),obj.getYPos() - 3)) sq_setCurrentAxisPos(obj, 1, obj.getYPos() - 3); } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(obj.getXPos(),obj.getYPos() + 3)) sq_setCurrentAxisPos(obj, 1, obj.getYPos() + 3); } break; case 3: local moveX = sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(),2); if(obj.isMovablePos(moveX,sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, moveX); break; case 4://加快 local inputConut = obj.getRapidInputFrequency(); inputConut = inputConut.tointeger(); local inputMax = 4; local gapByInputMin = sq_GetIntData(obj,SKILL_BYKK_BROOMSPIN,2); local gapByInputMax = sq_GetIntData(obj,SKILL_BYKK_BROOMSPIN,1); local currentAni = obj.getCurrentAnimation(); if(inputConut >= inputMax){ obj.setTimeEvent(4, gapByInputMin, 1,false); currentAni.setSpeedRate(300.0); if(obj.getVar("broomspin").getBool(0) == false) obj.getVar("broomspin").setBool(0, true); } else{ obj.setTimeEvent(4, gapByInputMax, 1,false); currentAni.setSpeedRate(100.0); } obj.resetHitObjectList(); break; } } function onEndState_BroomSpin_bykk(obj, new_state) { if(!obj) return; if(new_state != SKILL_BYKK_BROOMSPIN){ local appendage = obj.getVar("BroomSpinAp").getAppendage(0); if(appendage) appendage.setValid(false); } } function checkExecutableSkill_Electricrabbit_bykk(obj) { if (!obj) return false; local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_ELECTRICRABBIT); if(b_useskill){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_BYKK_ELECTRICRABBIT, STATE_PRIORITY_USER, true); return 1; } return 0; } function onSetState_Electricrabbit_bykk(obj, state, datas, isResetTimer) { if(!obj) return; obj.sq_StopMove(); local substate = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(substate); switch(substate){ case 0://set obj.sq_SetCurrentAnimation(ANIMATION_BYKK_FLUORECOLLIDERCAST); local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_ELECTRICRABBIT); local castTime = sq_GetCastTime(obj, SKILL_BYKK_ELECTRICRABBIT, skill_level); local currentAni = obj.getCurrentAnimation(); local castAniTime = currentAni.getDelaySum(false); local speedRate = castAniTime.tofloat() / castTime.tofloat(); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate); sq_StartDrawCastGauge(obj, castAniTime, true); obj.sq_PlaySound("WZ_ELETRIC_RABBIT_CAST"); obj.getVar("electricrabbit").clear_obj_vector(); break; case 1://start obj.sq_SetCurrentAnimation(ANIMATION_BYKK_ELECRABBITSTART); local successType = getSuccessType_bykk(obj,SKILL_BYKK_ELECTRICRABBIT); print("successType = "+successType); obj.getVar("electricrabbit").clear_vector(); obj.getVar("electricrabbit").push_vector(successType); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ELECTRICRABBIT, SKILL_BYKK_ELECTRICRABBIT, 0, 1.0) + 100; local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ELECTRICRABBIT, SKILL_BYKK_ELECTRICRABBIT, 7, 1.0) + 100; if(successType == 1){totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ELECTRICRABBIT, SKILL_BYKK_ELECTRICRABBIT, 1, 1.0) + 100;totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ELECTRICRABBIT, SKILL_BYKK_ELECTRICRABBIT, 8, 1.0) + 100;} if(successType >= 2){totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ELECTRICRABBIT, SKILL_BYKK_ELECTRICRABBIT, 2, 1.0) + 100;totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ELECTRICRABBIT, SKILL_BYKK_ELECTRICRABBIT, 9, 1.0) + 100;} local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); local skill_level = sq_GetSkillLevel(obj,SKILL_BYKK_ELECTRICRABBIT); local prob = sq_GetLevelData(obj,SKILL_BYKK_ELECTRICRABBIT, 3, skill_level); local damage = sq_GetLevelData(obj,SKILL_BYKK_ELECTRICRABBIT, 4, skill_level); local time = sq_GetLevelData(obj,SKILL_BYKK_ELECTRICRABBIT, 6, skill_level); local level = sq_GetSkillLevel(obj,174) + 20; if(sq_GetIntData(obj, SKILL_BYKK_ELECTRICRABBIT, 12) > 0){ cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,115,0,0,obj.getDirection(),SKILL_BYKK_ELECTRICRABBIT,4,successType,totalDamage,prob,time,damage,level,damageRate,0,2); obj.setTimeEvent(1,100,1,false); } else cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,115,0,0,obj.getDirection(),SKILL_BYKK_ELECTRICRABBIT,1,successType,totalDamage,prob,time,damage,level,damageRate,0,2); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,115,0,0,obj.getDirection(),SKILL_BYKK_ELECTRICRABBIT,2,successType,0,0,0,0,0,0,0,0); obj.sq_PlaySound("R_WZ_ELETRIC_RABBIT"); local skllevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_SUCCESSPREMONITION); local nextskillprob = sq_GetLevelData(obj,SKILL_BYKK_SUCCESSPREMONITION, 0, skllevel2); if(skllevel2 > 0){ if(sq_getRandom(0,99) > (1000 - nextskillprob) / 10){ obj.getVar("successpremonition").setBool(0,true); } } break; case 2://loop local successType = obj.getVar("electricrabbit").get_vector(0); switch(successType){ case 0: obj.sq_SetCurrentAnimation(ANIMATION_BYKK_ELECRABBITLOOPFAIL); break; case 1: case 2: obj.sq_SetCurrentAnimation(ANIMATION_BYKK_ELECRABBITLOOP); break; } break; case 3://end local successType = obj.getVar("electricrabbit").get_vector(0); switch(successType){ case 0: obj.sq_SetCurrentAnimation(ANIMATION_BYKK_ELECRABBITENDFAIL); break; case 1: case 2: obj.sq_SetCurrentAnimation(ANIMATION_BYKK_ELECRABBITEND); break; } local sub = obj.sq_GetVectorData(datas, 1); if(sub > 0){ local size = obj.getVar("electricrabbit").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local colObj = sq_GetCNRDObjectToCollisionObject(obj.getVar("electricrabbit").get_obj_vector(i)); if(colObj) colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); } } } break; } } function onEndCurrentAni_Electricrabbit_bykk(obj) { if(!obj) return; if(!obj.sq_IsMyControlObject()) return; local substate = obj.getSkillSubState(); switch(substate){ case 0: case 1: case 2: obj.sq_IntVectClear(); obj.sq_IntVectPush(substate + 1); obj.sq_AddSetStatePacket(SKILL_BYKK_ELECTRICRABBIT, STATE_PRIORITY_USER, true); break; case 3: obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); break; } } function onProcCon_Electricrabbit_bykk(obj) { if(!obj) return; local substate = obj.getSkillSubState(); switch(substate){ case 2: if(sq_GetSkillLevel(obj, SKILL_BYKK_EMERGENCYESCAPE) > 0){ sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_BYKK_ELECTRICRABBIT, STATE_PRIORITY_USER, true); return; } } break; } } function onKeyFrameFlag_Electricrabbit_bykk(obj, flagIndex) { if(!obj) return false; } function onTimeEvent_Electricrabbit_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(SKILL_BYKK_ELECTRICRABBIT, STATE_PRIORITY_USER, true); break; case 1: obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); break; } } function onEndState_Electricrabbit_bykk(obj, new_state) { if(!obj) return; if(new_state != SKILL_BYKK_ELECTRICRABBIT){ sq_EndDrawCastGauge(obj); } } function onCreateObject_Electricrabbit_bykk(obj, createObject) { if(createObject.isObjectType(OBJECTTYPE_PASSIVE)){ local colObj = sq_GetCNRDObjectToCollisionObject(createObject); if(colObj.getCollisionObjectIndex() == PASSIVEOBJECT_BYKK_WITCH){ obj.getVar("electricrabbit").push_obj_vector(colObj); } } } function checkExecutableSkill_Emergencyescape_bykk(obj) { if (!obj) return false; return 0; } function onSetState_Emergencyescape_bykk(obj, state, datas, isResetTimer) { if(!obj) return; } function onEndCurrentAni_Emergencyescape_bykk(obj) { if(!obj) return; } function onProcCon_Emergencyescape_bykk(obj) { if(!obj) return; } function onKeyFrameFlag_Emergencyescape_bykk(obj, flagIndex) { if(!obj) return false; } function onTimeEvent_Emergencyescape_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_Emergencyescape_bykk(obj, new_state) { if(!obj) return; } function checkExecutableSkill_EnhancedMagicMissile_bykk(obj) { //print("EnhancedMagicMissile > true"); local state = obj.getState(); if(!sq_GetSkill(obj, SKILL_BYKK_ENHANCEDMAGICMISSILE).isInCoolTime()){ obj.sq_IntVectClear(); if(state == 6) obj.sq_IntVectPush(12); else if(state == 0 || state == 8 || state == 14) obj.sq_IntVectPush(10); obj.sq_AddSetStatePacket(SKILL_BYKK_BLACKMANTLE, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function onSetState_EnhancedMagicMissile_bykk(obj, state, datas, isResetTimer) { if(!obj) return; obj.sq_StopMove(); local substate = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(substate); switch(substate){ case 0: // local Ani = obj.sq_GetThrowChargeAni(2); obj.setCurrentAnimation(Ani); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); break; case 1: // obj.sq_PlaySound("WZ_ACID_CLOUD"); local Ani = obj.sq_GetThrowShootAni(2); obj.setCurrentAnimation(Ani); // local ani = obj.getCurrentAnimation(); // local delay = ani.getDelaySum(0,4); // obj.setTimeEvent(0,240,1,false); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); break; } } function onEndCurrentAni_EnhancedMagicMissile_bykk(obj) { if(!obj) return; if(!obj.sq_IsMyControlObject()) return; local substate = obj.getSkillSubState(); switch(substate){ case 0: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_BYKK_ENHANCEDMAGICMISSILE, STATE_PRIORITY_USER, true); break; case 1: obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); break; } } function onProcCon_EnhancedMagicMissile_bykk(obj) { if(!obj) return; } function onKeyFrameFlag_EnhancedMagicMissile_bykk(obj, flagIndex) { if(!obj) return false; } function onTimeEvent_EnhancedMagicMissile_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_EnhancedMagicMissile_bykk(obj, new_state) { if(!obj) return; } function checkExecutableSkill_FluoreCollider_bykk(obj) { //print("FluoreCollider > true"); return 0; } function onSetState_FluoreCollider_bykk(obj, state, datas, isResetTimer) { if(!obj) return; obj.sq_StopMove(); local substate = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(substate); switch(substate){ case 0://释放读条 obj.sq_SetCurrentAnimation(43); sq_SetCustomDamageType(obj, true, 1); break; case 1://老形态-出现 obj.sq_SetCurrentAnimation(44); local animation = obj.getCurrentAnimation(); local friendlyfa_level = sq_GetSkillLevel(obj, SKILL_BYKK_FRIENDLYFAMILIAR); local setDelay = 910; if(friendlyfa_level > 0){ local speedRate = (1000 - sq_GetLevelData(obj, SKILL_BYKK_FRIENDLYFAMILIAR, 8, friendlyfa_level)); setDelay = (setDelay.tofloat() * speedRate.tofloat() / 1000.0).tointeger(); } sq_SetFrameDelayTime(animation, 0, setDelay); local successType = getSuccessType_bykk(obj,SKILL_BYKK_FLUORECOLLIDER); if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,99) >= (100 - sq_GetIntData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 21))) successType = 3; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLUORECOLLIDER, SKILL_BYKK_FLUORECOLLIDER, 2, 1.0) + 100; if(successType == 1) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLUORECOLLIDER, SKILL_BYKK_FLUORECOLLIDER, 3, 1.0) + 100; if(successType >= 2) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLUORECOLLIDER, SKILL_BYKK_FLUORECOLLIDER, 4, 1.0) + 100; local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLUORECOLLIDER, SKILL_BYKK_FLUORECOLLIDER, 5, 1.0) + 100; local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_FLUORECOLLIDER); local lifeTime = sq_GetLevelData(obj,SKILL_BYKK_FLUORECOLLIDER, 0, skill_level); local hitTime = sq_GetIntData(obj, SKILL_BYKK_FLUORECOLLIDER, 6); local range = sq_GetIntData(obj, SKILL_BYKK_FLUORECOLLIDER, 13); local homunculus_level = sq_GetSkillLevel(obj, SKILL_BYKK_HOMUNCULUS); if(homunculus_level > 0){ local add_Rate = sq_GetIntData(obj, SKILL_BYKK_HOMUNCULUS, 4); lifeTime = (lifeTime.tofloat() * (1000.0 + add_Rate.tofloat()) / 1000.0).tointeger(); } if(successType == 3 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0){ local decr_Rate = sq_GetLevelData(obj,SKILL_BYKK_LAPISPHILOSOPHORUM, 9, sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM)); hitTime = hitTime * (1000 - decr_Rate) / 1000; } cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,70,-1,0,obj.getDirection(),SKILL_BYKK_FLUORECOLLIDER,1,0,lifeTime,successType,hitTime,totalDamage,damageRate,range,0,5); break; case 2://老形态-成功运行 obj.sq_SetCurrentAnimation(45); sq_setCurrentAxisPos(obj, 2, 30); obj.sq_ZStop(); obj.setTimeEvent(2,400,1,false); break; case 3://老形态-失败运行 obj.sq_SetCurrentAnimation(46); sq_setCurrentAxisPos(obj, 2, 30); obj.sq_ZStop(); break; case 4://老形态-运行结束 obj.sq_SetCurrentAnimation(ANIMATION_BYKK_BROOMSPINNEWC_BODY); local passiveObj = obj.getVar("fluorecollider").get_obj_vector(0); if(passiveObj){ local colObj = sq_GetCNRDObjectToCollisionObject(passiveObj); colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); } break; case 5://新形态 // obj.sq_SetCurrentAnimation(ANIMATION_BYKK_LAVAPOTIONAIR_BODY); local Ani = obj.sq_GetThrowShootAni(2); obj.setCurrentAnimation(Ani); obj.setTimeEvent(1,100,1,false); break; } if(substate != 0 && substate != 1 && substate != 4){ local skllevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_SUCCESSPREMONITION); local nextskillprob = sq_GetLevelData(obj,SKILL_BYKK_SUCCESSPREMONITION, 0, skllevel2); if(skllevel2 > 0){ if(sq_getRandom(0,99) > (1000 - nextskillprob) / 10){ obj.getVar("successpremonition").setBool(0,true); } } } } function onEndCurrentAni_FluoreCollider_bykk(obj) { if(!obj) return; if(!obj.sq_IsMyControlObject()) return; local substate = obj.getSkillSubState(); switch(substate){ case 0: local homunculus_level = sq_GetSkillLevel(obj, SKILL_BYKK_HOMUNCULUS), homunculus = sq_GetSkill(obj, SKILL_BYKK_HOMUNCULUS); if(homunculus_level > 0 && !homunculus.isSealFunction()){ obj.sq_IntVectClear(); obj.sq_IntVectPush(5); obj.sq_AddSetStatePacket(SKILL_BYKK_FLUORECOLLIDER, STATE_PRIORITY_USER, true); } else{ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_BYKK_FLUORECOLLIDER, STATE_PRIORITY_USER, true); } break; case 1: sq_SetCustomDamageType(obj, true, 0); local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_FLUORECOLLIDER); local lifeTime = sq_GetLevelData(obj,SKILL_BYKK_FLUORECOLLIDER, 0, skill_level); obj.setTimeEvent(0,lifeTime,1,false); local successType = getSuccessType_bykk(obj,SKILL_BYKK_FLUORECOLLIDER); if(successType >= 1){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_IntVectPush(successType); obj.sq_AddSetStatePacket(SKILL_BYKK_FLUORECOLLIDER, STATE_PRIORITY_USER, true); } else{ obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(SKILL_BYKK_FLUORECOLLIDER, STATE_PRIORITY_USER, true); } break; case 4: case 5: sq_SetCustomDamageType(obj, true, 0); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); break; } } function onProcCon_FluoreCollider_bykk(obj) { if(!obj) return; local substate = obj.getSkillSubState(); switch(substate){ case 2: case 3: sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_HOMUNCULUS); if(skill_level > 0){ if(sq_IsKeyDown(OPTION_HOTKEY_JUMP, ENUM_SUBKEY_TYPE_ALL)){ local passiveObj = obj.getVar("fluorecollider").get_obj_vector(0); if(passiveObj){ local colObj = sq_GetCNRDObjectToCollisionObject(passiveObj); colObj.getVar("custom").set_vector(2,1); colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); } obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(1); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_IGNORE_FORCE, true); } } else{ if(sq_IsKeyDown(OPTION_HOTKEY_JUMP, ENUM_SUBKEY_TYPE_ALL)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(4); obj.sq_AddSetStatePacket(SKILL_BYKK_FLUORECOLLIDER, STATE_PRIORITY_IGNORE_FORCE, true); } } break; } } function onKeyFrameFlag_FluoreCollider_bykk(obj, flagIndex) { if(!obj) return false; } function onTimeEvent_FluoreCollider_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return false; if(timeEventIndex == 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(4); obj.sq_AddSetStatePacket(SKILL_BYKK_FLUORECOLLIDER, STATE_PRIORITY_USER, true); } else if(timeEventIndex == 1){ local successType = getSuccessType_bykk(obj,SKILL_BYKK_FLUORECOLLIDER); if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,99) >= (100 - sq_GetIntData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 21))) successType = 3; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLUORECOLLIDER, SKILL_BYKK_FLUORECOLLIDER, 2, 1.0) + 100; if(successType == 1) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLUORECOLLIDER, SKILL_BYKK_FLUORECOLLIDER, 3, 1.0) + 100; if(successType >= 2) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLUORECOLLIDER, SKILL_BYKK_FLUORECOLLIDER, 4, 1.0) + 100; local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLUORECOLLIDER, SKILL_BYKK_FLUORECOLLIDER, 5, 1.0) + 100; local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_FLUORECOLLIDER); local lifeTime = sq_GetLevelData(obj,SKILL_BYKK_FLUORECOLLIDER, 0, skill_level); local hitTime = sq_GetIntData(obj, SKILL_BYKK_FLUORECOLLIDER, 6) / 2; local range = sq_GetIntData(obj, SKILL_BYKK_FLUORECOLLIDER, 13); local homunculus_level = sq_GetSkillLevel(obj, SKILL_BYKK_HOMUNCULUS); if(homunculus_level > 0){ local decr_Rate = sq_GetIntData(obj, SKILL_BYKK_HOMUNCULUS, 3); lifeTime = (lifeTime.tofloat() * (1000.0 - decr_Rate.tofloat()) / 1000.0).tointeger(); } if(successType == 3 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0){ local decr_Rate = sq_GetLevelData(obj,SKILL_BYKK_LAPISPHILOSOPHORUM, 9, sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM)); hitTime = hitTime * (1000 - decr_Rate) / 1000; } cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,70,-1,0,obj.getDirection(),SKILL_BYKK_FLUORECOLLIDER,1,1,lifeTime,successType,hitTime,totalDamage,damageRate,range,0,5); } else if(timeEventIndex == 2){ local inputConut = obj.getRapidInputFrequency(); inputConut = inputConut.tointeger(); local inputMax = 4; local gapByInputMin = sq_GetIntData(obj,SKILL_BYKK_FLUORECOLLIDER,6) / 2; local gapByInputMax = sq_GetIntData(obj,SKILL_BYKK_FLUORECOLLIDER,6); local currentAni = obj.getCurrentAnimation(); if(inputConut >= inputMax){ obj.setTimeEvent(2, gapByInputMin, 1,false); currentAni.setSpeedRate(200.0); local passiveObj = obj.getVar("fluorecollider").get_obj_vector(0); if(passiveObj){ local colObj = sq_GetCNRDObjectToCollisionObject(passiveObj); local pAni = colObj.getCurrentAnimation(); pAni.setSpeedRate(200.0); colObj.stopTimeEvent(2); colObj.setTimeEvent(2,gapByInputMin,1,false); } } else{ obj.setTimeEvent(2, gapByInputMax, 1,false); currentAni.setSpeedRate(100.0); local passiveObj = obj.getVar("fluorecollider").get_obj_vector(0); if(passiveObj){ local colObj = sq_GetCNRDObjectToCollisionObject(passiveObj); local pAni = colObj.getCurrentAnimation(); pAni.setSpeedRate(100.0); colObj.stopTimeEvent(2); colObj.setTimeEvent(2,gapByInputMax,1,false); } } } } function onEndState_FluoreCollider_bykk(obj, new_state) { if(!obj) return; } function checkExecutableSkill_FusionCraft_bykk(obj) { print("FusionCraft > true"); return 0; } function onSetState_FusionCraft_bykk(obj, state, datas, isResetTimer) { if(!obj) return; } function onEndCurrentAni_FusionCraft_bykk(obj) { if(!obj) return; } function onProcCon_FusionCraft_bykk(obj) { if(!obj) return; } function onKeyFrameFlag_FusionCraft_bykk(obj, flagIndex) { if(!obj) return false; } function onTimeEvent_FusionCraft_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_FusionCraft_bykk(obj, new_state) { if(!obj) return; } function checkExecutableSkill_HeatingFurnace_bykk(obj) { // print("HeatingFurnace > true"); return 0; } function onSetState_HeatingFurnace_bykk(obj, state, datas, isResetTimer) { if(!obj) return; obj.sq_StopMove(); local substate = obj.sq_GetVectorData(datas, 0); obj.setSkillSubState(substate); switch(substate){ case 0://cast obj.sq_SetCurrentAnimation(ANIMATION_BYKK_HEATINGFURNACECAST); local successType = getSuccessType_bykk(obj,SKILL_BYKK_HEATINGFURNACE); if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,99) >= (100 - sq_GetIntData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 21))) successType = 3; if(successType == 0 && sq_GetSkillLevel(obj,SKILL_BYKK_BITTERSCANDYBAR) > 0){ obj.setTimeEvent(3,100,1,false); break; } switch(successType){ case 1: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/heatingfurnace/success_d.ani",50,1,-20); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/heatingfurnace/success_n.ani",50,1,-20); break; case 2: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/heatingfurnace/great_d.ani",50,1,-30); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/heatingfurnace/great_n.ani",50,1,-30); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/heatingfurnace/great_n+.ani",50,1,-30); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/heatingfurnace/great1.ani",50,1,-30); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/heatingfurnace/great2.ani",50,1,-30); break; case 3: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/heatingfurnace/bigsuccess_familier01.ani",100,1,50); break; } obj.getVar("heatingfurnace").clear_vector(); obj.getVar("heatingfurnace").push_vector(successType); obj.getVar("heatingfurnace").push_vector(0); local stone_Max = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,6); obj.getVar("heatingfurnace").push_vector(stone_Max); obj.setTimeEvent(0,200,1,false); sq_SetCustomDamageType(obj, true, 1); break; case 1://loop obj.sq_SetCurrentAnimation(ANIMATION_BYKK_HEATINGFURNACEJUMP); local skill_level = sq_GetSkillLevel(obj,SKILL_BYKK_HEATINGFURNACE); local lifeTime = sq_GetLevelData(obj,SKILL_BYKK_HEATINGFURNACE, 0, skill_level); obj.setTimeEvent(1,lifeTime,1,false); obj.setTimeEvent(2,150,1,false); break; case 2://end obj.removeAllTimeEvent(); obj.sq_SetCurrentAnimation(ANIMATION_BYKK_HEATINGFURNACENEWBODY); local passiveObj = obj.getVar("heatingfurnace").get_obj_vector(0); if(passiveObj){ local colObj = sq_GetCNRDObjectToCollisionObject(passiveObj); colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); } local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HEATINGFURNACE, SKILL_BYKK_HEATINGFURNACE, 1, 1.0); local successType = obj.getVar("heatingfurnace").get_vector(0); local sizeRate = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,12); if(successType >= 2){sizeRate = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,13);totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HEATINGFURNACE, SKILL_BYKK_HEATINGFURNACE, 5, 1.0);} // if(sq_GetLevelData(obj, SKILL_BYKK_HEATINGFURNACE, 6, sq_GetSkillLevel(obj, SKILL_BYKK_HEATINGFURNACE)) > 0) cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,100,0,0,obj.getDirection(),SKILL_BYKK_HEATINGFURNACE,6,totalDamage,0,0,0,0,0,0,0,1); // else cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,100,0,50,obj.getDirection(),SKILL_BYKK_HEATINGFURNACE,4,totalDamage,successType,sizeRate,0,0,0,0,0,1); CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/witch_skill_bykk/ap/ap_heatingfurnace.nut"); break; case 10: obj.sq_SetCurrentAnimation(ANIMATION_BYKK_HEATINGFURNACECAST); break; case 50: obj.sq_SetCurrentAnimation(ANIMATION_BYKK_HEATINGFURNACECAST); local bitterscandy_level = sq_GetSkillLevel(obj,SKILL_BYKK_BITTERSCANDYBAR); local add_Rate = sq_GetLevelData(obj,SKILL_BYKK_BITTERSCANDYBAR,1,bitterscandy_level); add_Rate = (1000.0 + add_Rate.tofloat()) / 1000.0; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HEATINGFURNACE, SKILL_BYKK_HEATINGFURNACE, 4, 1.0) + 100; totalDamage = (totalDamage.tofloat() * add_Rate).tointeger(); local skill_level2 = sq_GetSkillLevel(obj,SKILL_BYKK_HOMUNCULUS); local add_Rate2 = sq_GetLevelData(obj,SKILL_BYKK_HOMUNCULUS, 0, skill_level2); if(skill_level2 > 0) totalDamage = (totalDamage.tofloat() * (1000.0 + add_Rate2.tofloat()) / 1000.0).tointeger(); local add_hitMax = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HEATINGFURNACE, SKILL_BYKK_HEATINGFURNACE, 7, 1.0) + 100; cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,100,-1,0,obj.getDirection(),SKILL_BYKK_HEATINGFURNACE,2,totalDamage,add_hitMax,0,0,0,0,0,0,1); obj.setTimeEvent(4,150,1,false); sq_SetCustomDamageType(obj, true, 1); break; case 51: sq_setCurrentAxisPos(obj, 2, 20); obj.sq_ZStop(); obj.sq_SetCurrentAnimation(ANIMATION_BYKK_HEATINGFURNACENEWBODY); obj.setTimeEvent(5,400,1,false); break; } if(substate == 1 || substate == 50){ local skllevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_SUCCESSPREMONITION); local nextskillprob = sq_GetLevelData(obj,SKILL_BYKK_SUCCESSPREMONITION, 0, skllevel2); if(skllevel2 > 0){ if(sq_getRandom(0,99) > (1000 - nextskillprob) / 10){ obj.getVar("successpremonition").setBool(0,true); } } } } function onEndCurrentAni_HeatingFurnace_bykk(obj) { if(!obj) return; if(!obj.sq_IsMyControlObject()) return; local substate = obj.getSkillSubState(); switch(substate){ case 2: case 51: sq_SetCustomDamageType(obj, true, 0); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); break; case 50: obj.sq_IntVectClear(); obj.sq_IntVectPush(51); obj.sq_AddSetStatePacket(SKILL_BYKK_HEATINGFURNACE , STATE_PRIORITY_USER, true); break; } } function onProcCon_HeatingFurnace_bykk(obj) { if(!obj) return; if(!obj.isMyControlObject()) return; local substate = obj.getSkillSubState(); switch(substate){ case 10: local stateTime = obj.sq_GetStateTimer(); if(stateTime < 50) return; local maxTime = sq_GetIntData(obj,SKILL_BYKK_BITTERSCANDYBAR,0); local bDownKey = obj.isDownSkillLastKey(); if(stateTime >= maxTime){ obj.sq_IntVectClear(); obj.sq_IntVectPush(50); obj.sq_AddSetStatePacket(SKILL_BYKK_HEATINGFURNACE , STATE_PRIORITY_USER, true); return; } if(!bDownKey){ if(stateTime < maxTime){//成功 obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_BYKK_HEATINGFURNACE , STATE_PRIORITY_USER, true); return; } else{//失败 obj.sq_IntVectClear(); obj.sq_IntVectPush(50); obj.sq_AddSetStatePacket(SKILL_BYKK_HEATINGFURNACE , STATE_PRIORITY_USER, true); return; } } break; case 1: //按C后判断: //2、是否有引爆试验,有则引爆。 if(sq_GetSkillLevel(obj, SKILL_BYKK_EMERGENCYESCAPE) > 0){ sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_BYKK_HEATINGFURNACE, STATE_PRIORITY_USER, true); return; } } case 0: //加快 sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); break; case 51: local pAni = obj.getCurrentAnimation();//得到ani local currentT = sq_GetCurrentTime(pAni);//当前时间 local fireT = pAni.getDelaySum(false);//总时间 local srcZ = sq_GetZPos(obj);//初始x坐标 local v = sq_GetUniformVelocity(srcZ, 0, currentT, fireT); if(currentT >= 700) sq_setCurrentAxisPos(obj, 2, v); break; } } function onKeyFrameFlag_HeatingFurnace_bykk(obj, flagIndex) { if(!obj) return false; } function onTimeEvent_HeatingFurnace_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_HEATINGFURNACE, false, "character/mage/witch_skill_bykk/ap/ap_heatingfurnace.nut", true); local castTime = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,6); local friendlyfa_level = sq_GetSkillLevel(obj,SKILL_BYKK_FRIENDLYFAMILIAR); if(friendlyfa_level > 0){ local speedRate = sq_GetLevelData(obj,SKILL_BYKK_FRIENDLYFAMILIAR, 7, friendlyfa_level); castTime = castTime * (1000 - speedRate) / 1000; } obj.setTimeEvent(6,castTime,1,false); local successType = obj.getVar("heatingfurnace").get_vector(0); local homunculus = 0; if(sq_GetSkillLevel(obj,SKILL_BYKK_HOMUNCULUS) > 0) homunculus = 1; cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,100,-1,0,obj.getDirection(),SKILL_BYKK_HEATINGFURNACE,1,castTime,successType,homunculus,0,0,0,0,0,0); break; case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_BYKK_HEATINGFURNACE, STATE_PRIORITY_USER, true); break; case 2: local stone_Max = obj.getVar("heatingfurnace").get_vector(2); local count = obj.getVar("heatingfurnace").get_vector(1); if(count < stone_Max){ local inputConut = obj.getRapidInputFrequency(); inputConut = inputConut.tointeger(); local inputMax = 2; local gapByInputMin = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,10); local gapByInputMax = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,11); local successType = obj.getVar("heatingfurnace").get_vector(0); if(successType == 3){ local lapi_level = sq_GetSkillLevel(obj,SKILL_BYKK_LAPISPHILOSOPHORUM); local speedRate = sq_GetLevelData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 4, lapi_level); gapByInputMin = gapByInputMin * (1000 - speedRate) / 1000; gapByInputMax = gapByInputMax * (1000 - speedRate) / 1000; } if(inputConut >= inputMax){ obj.setTimeEvent(2, gapByInputMin, 1,false); local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(200.0); local passiveObj = obj.getVar("heatingfurnace").get_obj_vector(0); if(passiveObj){ local pAni = passiveObj.getCurrentAnimation(); pAni.setSpeedRate(200.0); } } else{ obj.setTimeEvent(2, gapByInputMax, 1,false); local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(100.0); local passiveObj = obj.getVar("heatingfurnace").get_obj_vector(0); if(passiveObj){ local pAni = passiveObj.getCurrentAnimation(); pAni.setSpeedRate(100.0); } } if(!sq_GetSkill(obj, SKILL_BYKK_HEATINGFURNACE).isSealFunction() || sq_GetIntData(obj, SKILL_BYKK_HEATINGFURNACE, 20) > 0){ local number_max = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,3); if(successType == 1) number_max = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,4); if(successType >= 2) number_max = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,5); if(successType == 3){ local lapi_level = sq_GetSkillLevel(obj,SKILL_BYKK_LAPISPHILOSOPHORUM) number_max = number_max + sq_GetLevelData(obj,SKILL_BYKK_LAPISPHILOSOPHORUM,11,lapi_level); } local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HEATINGFURNACE, SKILL_BYKK_HEATINGFURNACE, 2, 0.8) + 100; local sizeRate = 75; if(successType == 1){ totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HEATINGFURNACE, SKILL_BYKK_HEATINGFURNACE, 2, 1.0) + 100; sizeRate = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,12); } if(successType >= 2){ totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HEATINGFURNACE, SKILL_BYKK_HEATINGFURNACE, 3, 1.0) + 100; sizeRate = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,13); if(successType == 3) sizeRate = sizeRate + sq_GetLevelData(obj, SKILL_BYKK_HEATINGFURNACE, 8, sq_GetSkillLevel(obj, SKILL_BYKK_HEATINGFURNACE)); } local speedRate = 100; if(inputConut >= inputMax) speedRate = 300; totalDamage = totalDamage * 4; number_max = number_max / 4; sizeRate = sizeRate / 3; cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,100,0,0,obj.getDirection(),SKILL_BYKK_HEATINGFURNACE,7,totalDamage,sizeRate,number_max,speedRate,0,0,0,0,1); return; } count = count + 1; obj.getVar("heatingfurnace").set_vector(1,count); local sub = 0; if(obj.isMyControlObject()){ if(obj.getDirection() == ENUM_DIRECTION_LEFT){ if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) sub = 7; else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) sub = 1; else sub = 4; } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) sub = 9; else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) sub = 3; else sub = 6; } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) sub = 8; else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) sub = 2; } else if(obj.getDirection() == ENUM_DIRECTION_RIGHT){ if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) sub = 9; else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) sub = 3; else sub = 6; } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) sub = 7; else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) sub = 1; else sub = 4; } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) sub = 8; else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) sub = 2; } } local number_max = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,3); if(successType == 1) number_max = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,4); if(successType >= 2) number_max = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,5); if(successType == 3){ local lapi_level = sq_GetSkillLevel(obj,SKILL_BYKK_LAPISPHILOSOPHORUM) number_max = number_max + sq_GetLevelData(obj,SKILL_BYKK_LAPISPHILOSOPHORUM,11,lapi_level); } local baseangle = sq_getRandom(1,8) * 10; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HEATINGFURNACE, SKILL_BYKK_HEATINGFURNACE, 2, 0.8) + 100; local totalDamage2 = 0; local damageRate = 100; local sizeRate = 100; if(successType == 1){ totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HEATINGFURNACE, SKILL_BYKK_HEATINGFURNACE, 2, 1.0) + 100; sizeRate = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,12); } if(successType >= 2){ totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HEATINGFURNACE, SKILL_BYKK_HEATINGFURNACE, 3, 1.0) + 100; sizeRate = sq_GetIntData(obj,SKILL_BYKK_HEATINGFURNACE,13); if(successType == 3) sizeRate = sizeRate + sq_GetLevelData(obj, SKILL_BYKK_HEATINGFURNACE, 8, sq_GetSkillLevel(obj, SKILL_BYKK_HEATINGFURNACE)); } // print(sizeRate); // if(number_max % 4 == 0){number_max = number_max / 4; totalDamage = totalDamage * 4;} // else if(number_max % 3 == 0){number_max = number_max / 3; totalDamage = totalDamage * 3;} // else if(number_max % 2 == 0){number_max = number_max / 2; totalDamage = totalDamage * 2;sizeRate = sizeRate * 120 / 100;} for(local i = 0; i < number_max; i++){ local angle = 360 / number_max * i + baseangle; local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 20.0).tointeger() + sq_getRandom(-5,5); local y = (sq_Sin(sq_ToRadian(angle.tofloat())) * 20.0).tointeger(); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,100 + x,y,120,obj.getDirection(),SKILL_BYKK_HEATINGFURNACE,3,totalDamage,successType,i,number_max,sub,damageRate,sizeRate,0,1); } } else{ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_BYKK_HEATINGFURNACE, STATE_PRIORITY_USER, true); } break; case 3: obj.sq_IntVectClear(); obj.sq_IntVectPush(50); obj.sq_AddSetStatePacket(SKILL_BYKK_HEATINGFURNACE, STATE_PRIORITY_USER, true); break; case 4: obj.sq_IntVectClear(); obj.sq_IntVectPush(51); obj.sq_AddSetStatePacket(SKILL_BYKK_HEATINGFURNACE, STATE_PRIORITY_USER, true); break; case 5: if(!sq_GetSkill(obj, SKILL_BYKK_HEATINGFURNACE).isSealFunction() || sq_GetIntData(obj, SKILL_BYKK_HEATINGFURNACE, 20) > 0){ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HEATINGFURNACE, SKILL_BYKK_HEATINGFURNACE, 4, 0.5); local bitterscandy_level = sq_GetSkillLevel(obj,SKILL_BYKK_BITTERSCANDYBAR); local add_Rate = sq_GetLevelData(obj,SKILL_BYKK_BITTERSCANDYBAR,1,bitterscandy_level); add_Rate = (1000.0 + add_Rate.tofloat()) / 1000.0; if(bitterscandy_level > 0) add_Rate = add_Rate * 1.19; totalDamage = (totalDamage.tofloat() * add_Rate).tointeger(); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,100,0,0,obj.getDirection(),SKILL_BYKK_HEATINGFURNACE,6,totalDamage,0,0,0,0,0,0,0,1); } break; case 6: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_BYKK_HEATINGFURNACE, STATE_PRIORITY_USER, true); break; } } function onEndState_HeatingFurnace_bykk(obj, new_state) { if(!obj) return; if(new_state != SKILL_BYKK_HEATINGFURNACE){ local passiveObj = obj.getVar("heatingfurnace").get_obj_vector(0); if(passiveObj){ local colObj = sq_GetCNRDObjectToCollisionObject(passiveObj); colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); } CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/witch_skill_bykk/ap/ap_heatingfurnace.nut"); } }