function checkExecutableSkill_Jackfrosticewater_bykk(obj) { if (!obj) return false; local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_JACKFROSTICEWATER); if(b_useskill){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_BYKK_JACKFROSTICEWATER, STATE_PRIORITY_USER, true); return 1; } return 0; } function onSetState_Jackfrosticewater_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_JACKFROSTICEWATERCAST_BODY); local offset_x = 175; for(local i = 0; i < 175; i++){ if(obj.isMovablePos(sq_GetDistancePos(obj.getXPos(), obj.getDirection(), offset_x), sq_GetYPos(obj))) break; else offset_x = offset_x - 1; } local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_JACKFROSTICEWATER, SKILL_BYKK_JACKFROSTICEWATER, 2, 1.0) + 100; local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_JACKFROSTICEWATER, SKILL_BYKK_JACKFROSTICEWATER, 3, 1.0) + 100; local totalDamage3 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_JACKFROSTICEWATER, SKILL_BYKK_JACKFROSTICEWATER, 4, 1.0) + 100; local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); local damageRate2 = (totalDamage3.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); local sub = 0; if(sq_GetIntData(obj, SKILL_BYKK_JACKFROSTICEWATER, 9) > 0) sub = 1; cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,offset_x,-1,0,obj.getDirection(),SKILL_BYKK_JACKFROSTICEWATER,1,totalDamage,damageRate,damageRate2,sub,0,0,0,0,1); obj.getVar("jackfrosticewater").clear_obj_vector(); obj.getVar("jackfrosticewater").clear_vector(); obj.getVar("jackfrosticewater").push_vector(offset_x); break; case 1: sq_setCurrentAxisPos(obj, 2, 200); obj.sq_ZStop(); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/jackfrosticewater/start/jackfrosticewatercast_smoke.ani",0,0,0); obj.sq_SetCurrentAnimation(ANIMATION_BYKK_JACKFROSTICEWATERSTARTBACK_BODY); if(sq_GetIntData(obj, SKILL_BYKK_JACKFROSTICEWATER, 9) > 0){ local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(500.0); } break; case 2: sq_setCurrentAxisPos(obj, 2, 200); obj.sq_ZStop(); obj.sq_SetCurrentAnimation(ANIMATION_BYKK_JACKFROSTICEWATERLOOPBACK_BODY); if(sq_GetIntData(obj, SKILL_BYKK_JACKFROSTICEWATER, 9) > 0){ obj.setTimeEvent(2,192,1,false); local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(500.0); } else obj.setTimeEvent(2,960,1,false); break; case 3: obj.stopTimeEvent(2); sq_setCurrentAxisPos(obj, 2, 200); obj.sq_ZStop(); obj.sq_SetCurrentAnimation(ANIMATION_BYKK_JACKFROSTICEWATERLOOPBACKBOUNCE01A_BODY); local sub = obj.sq_GetVectorData(datas, 1); if(sub > 0){ local size = obj.getVar("jackfrosticewater").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local colObj = sq_GetCNRDObjectToCollisionObject(obj.getVar("jackfrosticewater").get_obj_vector(i)); if(colObj) colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); } } } break; case 4: //obj.sq_ZStop(); obj.sq_SetCurrentAnimation(ANIMATION_BYKK_JACKFROSTICEWATERLOOPBACKBOUNCE02_BODY); break; } if(substate == 3){ 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_Jackfrosticewater_bykk(obj) { if(!obj) return; if(!obj.sq_IsMyControlObject()) return; local substate = obj.getSkillSubState(); switch(substate){ case 0: if(sq_GetLevelData(obj, SKILL_BYKK_JACKFROSTICEWATER, 5, sq_GetSkillLevel(obj, SKILL_BYKK_JACKFROSTICEWATER)) > 0){ obj.setTimeEvent(3,300,1,false); } else{ obj.setTimeEvent(0,100,1,true); obj.setTimeEvent(1,300,1,false); } break; case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(substate + 1); obj.sq_AddSetStatePacket(SKILL_BYKK_JACKFROSTICEWATER, STATE_PRIORITY_USER, true); break; case 4: obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); break; } } function onProcCon_Jackfrosticewater_bykk(obj) { if(!obj) 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(); if(sq_GetSkillLevel(obj, SKILL_BYKK_EMERGENCYESCAPE) > 0){ sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ obj.getVar().clear_vector(); obj.getVar().push_vector(sq_GetXPos(obj)); obj.getVar().push_vector(200); obj.getVar().push_vector(275); obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_BYKK_JACKFROSTICEWATER, STATE_PRIORITY_USER, true); return; } } break; case 3: local stateTime = obj.sq_GetStateTimer(); local fireT = 500; local srcX = obj.getVar().get_vector(0); local srcZ = obj.getVar().get_vector(1); local moveX = obj.getVar().get_vector(2); if(moveX > 0) moveX = -moveX; local vx = sq_GetAccel(0, moveX, stateTime, fireT, true); local vz = sq_GetUniformVelocity(srcZ, 0, stateTime, fireT); local dstX = sq_GetDistancePos(srcX, obj.getDirection(), vx); if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX); else{obj.getVar().set_vector(0,sq_GetXPos(obj));obj.getVar().set_vector(2,0);} sq_setCurrentAxisPos(obj, 2, vz); if(sq_GetZPos(obj) <= 15){ obj.sq_IntVectClear(); obj.sq_IntVectPush(4); obj.sq_AddSetStatePacket(SKILL_BYKK_JACKFROSTICEWATER, STATE_PRIORITY_USER, true); } break; } } function onKeyFrameFlag_Jackfrosticewater_bykk(obj, flagIndex) { if(!obj) return false; } function onTimeEvent_Jackfrosticewater_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/jackfrosticewater/start/jackfrosticewatercast_smoke.ani",0,0,0); sq_setCurrentAxisPos(obj, 2, 500); obj.sq_ZStop(); break; case 1: local offset_x = obj.getVar("jackfrosticewater").get_vector(0); sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(obj.getXPos(), obj.getDirection(), offset_x)); obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_BYKK_JACKFROSTICEWATER, STATE_PRIORITY_USER, true); break; case 2: obj.getVar().clear_vector(); obj.getVar().push_vector(sq_GetXPos(obj)); obj.getVar().push_vector(200); obj.getVar().push_vector(275); obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(SKILL_BYKK_JACKFROSTICEWATER, STATE_PRIORITY_USER, true); break; case 3: local size = obj.getVar("jackfrosticewater").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local colObj = sq_GetCNRDObjectToCollisionObject(obj.getVar("jackfrosticewater").get_obj_vector(i)); if(colObj) colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); } } obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); break; } } function onEndState_Jackfrosticewater_bykk(obj, new_state) { if(!obj) return; } function onCreateObject_Jackfrosticewater_bykk(obj, createObject) { if(createObject.isObjectType(OBJECTTYPE_PASSIVE)){ local colObj = sq_GetCNRDObjectToCollisionObject(createObject); if(colObj.getCollisionObjectIndex() == PASSIVEOBJECT_BYKK_WITCH){ obj.getVar("jackfrosticewater").push_obj_vector(colObj); } } } function checkExecutableSkill_Jackohalloween_bykk(obj) { if (!obj) return false; local pumpkinObj = obj.getVar("jackohalloween_pumpkin").get_obj_vector(0); if(pumpkinObj){ if(pumpkinObj.getState() <= 24){ local colObj = sq_GetCNRDObjectToCollisionObject(pumpkinObj); sq_SetCurrentDirection(colObj, sq_GetOppositeDirection(sq_GetDirection(colObj))); colObj.getVar("move").clear_vector(); colObj.getVar("move").push_vector(sq_GetXPos(colObj)); colObj.getVar("move").push_vector(100); colObj.getVar().setBool(0,true); colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); return 1; } else{obj.getVar("jackohalloween_pumpkin").clear_obj_vector();} } local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_JACKOHALLOWEEN); if(b_useskill){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_BYKK_JACKOHALLOWEEN, STATE_PRIORITY_USER, true); return 1; } return 0; } function onSetState_Jackohalloween_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_JACKOHALLOWEENBODY_CAST); local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_JACKOHALLOWEEN); local castTime = sq_GetCastTime(obj, SKILL_BYKK_JACKOHALLOWEEN, 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); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/jackohalloween/jackohalloweenready_01.ani",0,0,0); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_JACKOHALLOWEEN, SKILL_BYKK_JACKOHALLOWEEN, 0, 1.0) + 100; local hitTime = sq_GetIntData(obj,SKILL_BYKK_JACKOHALLOWEEN,5); local lifeTime = sq_GetIntData(obj,SKILL_BYKK_JACKOHALLOWEEN,6); local hitMax = sq_GetIntData(obj,SKILL_BYKK_JACKOHALLOWEEN,0); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_JACKOHALLOWEEN,1,castTime,totalDamage,hitTime,lifeTime,hitMax,0,0,0,2); obj.sq_PlaySound("R_WZ_JACKOHALLOWEEN"); break; case 1: obj.sq_SetCurrentAnimation(ANIMATION_BYKK_JACKOHALLOWEENBODY_SHOOT); obj.sq_PlaySound("JACKOHALLOWEEN_CRUSH"); 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 onEndCurrentAni_Jackohalloween_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_JACKOHALLOWEEN, STATE_PRIORITY_USER, true); break; case 1: obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); break; } } function onProcCon_Jackohalloween_bykk(obj) { if(!obj) return; } function onKeyFrameFlag_Jackohalloween_bykk(obj, flagIndex) { if(!obj) return false; } function onTimeEvent_Jackohalloween_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_Jackohalloween_bykk(obj, new_state) { if(!obj) return; } function onCreateObject_Jackohalloween_bykk(obj, createObject) { // if(createObject.isObjectType(OBJECTTYPE_PASSIVE)){ // local colObj = sq_GetCNRDObjectToCollisionObject(createObject); // if(colObj.getCollisionObjectIndex() == PASSIVEOBJECT_BYKK_WITCH){ // obj.getVar("jackohalloween").push_obj_vector(colObj); // } // } } function checkExecutableSkill_LavaPotion_bykk(obj) { // print("LavaPotion > true"); local state = obj.getState(); if(state == 6 && !sq_GetSkill(obj, SKILL_BYKK_LAVAPOTION).isInCoolTime()){ obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(SKILL_BYKK_LAVAPOTION, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function onSetState_LavaPotion_bykk(obj, state, datas, isResetTimer) { if(!obj) return; obj.sq_StopMove(); local substate = obj.sq_GetVectorData(datas, 0); // print("substate = "+substate); obj.setSkillSubState(substate); switch(substate){ case 0://地面施放讀條 local Ani = obj.sq_GetThrowChargeAni(0); obj.setCurrentAnimation(Ani); local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_LAVAPOTION); local castTime = sq_GetCastTime(obj, SKILL_BYKK_LAVAPOTION, 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://地面施放完成 sq_EndDrawCastGauge(obj); local Ani = obj.sq_GetThrowShootAni(0); obj.setCurrentAnimation(Ani); local successType = obj.sq_GetVectorData(datas, 1); if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,100) >= (100 - sq_GetIntData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 21))) successType = 3; // print("successType = "+successType); print(sq_GetIntData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 21)); 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 2://苦糖失敗形態 sq_EndDrawCastGauge(obj); local Ani = obj.sq_GetThrowShootAni(0); obj.setCurrentAnimation(Ani); local animation = sq_GetCurrentAnimation(obj); local aniTime = sq_GetDelaySum(animation); sq_SetBodyEffect(obj, obj, true, sq_RGB(0,0,0), 480, aniTime + 2000, 0, sq_ALPHA(255)); sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/lavapotion/lava_potion_throw_d_up.ani",0,0,0); sq_AddDrawOnlyAniFromParent(obj,"passiveobject/witch_bykk/animation/lavapotion/lava_potion_throw_n_down.ani",0,0,0); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LAVAPOTION, SKILL_BYKK_LAVAPOTION, 2, 1.0) + 100; local skill_level = sq_GetSkillLevel(obj,SKILL_BYKK_BITTERSCANDYBAR); local add_Rate = sq_GetLevelData(obj,SKILL_BYKK_BITTERSCANDYBAR, 0, skill_level); if(skill_level > 0) totalDamage = (totalDamage.tofloat() * (1000.0 + add_Rate.tofloat()) / 1000.0).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(); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,0,obj.getDirection(),SKILL_BYKK_LAVAPOTION,2,totalDamage,0,0,0,0,0,0,0,1); // cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,0,obj.getDirection(),SKILL_BYKK_LAVAPOTION,4,0,0,0,0,0,0,0,0,0); break; case 3: obj.sq_ZStop(); obj.sq_SetCurrentAnimation(ANIMATION_BYKK_LAVAPOTIONAIR_BODY); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/lavapotion/lavapotionair_potion.ani",50,0,0); break; case 10: obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_LAVAPOTION); local Ani = obj.sq_GetThrowChargeAni(0); obj.setCurrentAnimation(Ani); local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_LAVAPOTION); local castTime = sq_GetCastTime(obj, SKILL_BYKK_LAVAPOTION, skill_level); sq_StartDrawCastGauge(obj, castTime, true); break; } if(substate != 0 || substate != 10){ 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_LavaPotion_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_LAVAPOTION, STATE_PRIORITY_USER, true); break; case 1: case 2: 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_USER, true); break; } } function onProcCon_LavaPotion_bykk(obj) { if(!obj) return; local substate = obj.getSkillSubState(); switch(substate){ case 10: local maxTime = sq_GetIntData(obj,SKILL_BYKK_BITTERSCANDYBAR,0); local stateTime = obj.sq_GetStateTimer(); local bDownKey = obj.isDownSkillLastKey(); local animation = sq_GetCurrentAnimation(obj); local startTime = sq_GetDelaySum(animation); if(stateTime >= startTime){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_BYKK_LAVAPOTION , STATE_PRIORITY_USER, true); return; } if(!bDownKey){ if(stateTime < maxTime){//成功 local successType = getSuccessType_bykk(obj,SKILL_BYKK_LAVAPOTION); if(successType >= 1){ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(successType); obj.sq_AddSetStatePacket(SKILL_BYKK_LAVAPOTION , STATE_PRIORITY_USER, true); return; } else{ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_BYKK_LAVAPOTION , STATE_PRIORITY_USER, true); return; } } else{//失败 obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_BYKK_LAVAPOTION , STATE_PRIORITY_USER, true); return; } } break; } } function onKeyFrameFlag_LavaPotion_bykk(obj, flagIndex) { if(!obj) return false; local substate = obj.getSkillSubState(); switch(substate){ case 3: if(flagIndex == 1){ //`Create Potion` 10 0 79 local successType = getSuccessType_bykk(obj,SKILL_BYKK_LAVAPOTION); if(successType == 0) successType = 1; if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,100) >= (100 - sq_GetIntData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 21))) successType = 3; // print("successType = "+successType); 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,10,0,79,obj.getDirection(),SKILL_BYKK_LAVAPOTION,3,totalDamage,lifeTime,hitTime,sizeRate,successType,0,0,0,1); } break; } } function onTimeEvent_LavaPotion_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return false; } function onEndState_LavaPotion_bykk(obj, new_state) { if(!obj) return; local substate = obj.getSkillSubState(); switch(substate){ case 0: case 10: if(new_state != SKILL_BYKK_LAVAPOTION) sq_EndDrawCastGauge(obj); break; } } function checkExecutableSkill_Lollipopcrush_bykk(obj) { if (!obj) return false; local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_LOLLIPOPCRUSH); if(b_useskill){ local state = obj.getState(); if(state == 6){ obj.sq_IntVectClear(); if(sq_GetIntData(obj, SKILL_BYKK_LOLLIPOPCRUSH, 16) > 0 && sq_GetZPos(obj) <= 40) obj.sq_IntVectPush(9); else obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_BYKK_LOLLIPOPCRUSH, STATE_PRIORITY_USER, true); } else{ obj.sq_IntVectClear(); if(sq_GetIntData(obj, SKILL_BYKK_LOLLIPOPCRUSH, 16) > 0) obj.sq_IntVectPush(10); else obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_BYKK_LOLLIPOPCRUSH, STATE_PRIORITY_USER, true); } return 1; } return 0; } function onSetState_Lollipopcrush_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_LOLLIPOPCRUSH); break; case 1: obj.sq_ZStop(); obj.sq_SetCurrentAnimation(ANIMATION_BYKK_LOLLIPOPCRUSHAIRCAST_BODY); break; case 9: obj.sq_SetCurrentAnimation(ANIMATION_BYKK_LOLLIPOPCRUSHTALISMANLANDATTACK_BODY); break; case 10: obj.sq_ZStop(); obj.sq_SetCurrentAnimation(ANIMATION_BYKK_LOLLIPOPCRUSHTALISMANREADY_BODY); break; case 11: obj.sq_SetCurrentAnimation(ANIMATION_BYKK_LOLLIPOPCRUSHTALISMANATTACK_BODY); break; } obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); if(substate != 10){ obj.getVar("Lollipopcrush_Boss").clear_obj_vector(); obj.getVar("Lollipopcrush_Named").clear_obj_vector(); local objectManager = obj.getObjectManager(); local objectNumber = objectManager.getCollisionObjectNumber(); for(local i = 0; i < objectNumber; i++){ local object = objectManager.getCollisionObject(i); if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object)){ local activeObj = sq_GetCNRDObjectToActiveObject(object); if(sq_IsBoss(activeObj)) obj.getVar("Lollipopcrush_Boss").push_obj_vector(object); else if(sq_IsNamed(activeObj)) obj.getVar("Lollipopcrush_Named").push_obj_vector(object); } } // print("boss:"+obj.getVar("Lollipopcrush_Boss").get_obj_vector_size()); // print("named:"+obj.getVar("Lollipopcrush_Named").get_obj_vector_size()); local candy_max = sq_GetIntData(obj, SKILL_BYKK_LOLLIPOPCRUSH, 12); local bosscandy_max = sq_GetIntData(obj, SKILL_BYKK_LOLLIPOPCRUSH, 11); obj.getVar("candynumber").clear_vector(); obj.getVar("candynumber").push_vector(0); obj.getVar("candynumber").push_vector(candy_max); obj.getVar("candynumber").push_vector(0); obj.getVar("candynumber").push_vector(bosscandy_max); 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_Lollipopcrush_bykk(obj) { if(!obj) return; if(!obj.sq_IsMyControlObject()) return; local substate = obj.getSkillSubState(); switch(substate){ case 0: case 1: case 9: obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(0); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_USER, true); break; case 10: obj.sq_IntVectClear(); obj.sq_IntVectPush(11); obj.sq_AddSetStatePacket(SKILL_BYKK_LOLLIPOPCRUSH, STATE_PRIORITY_USER, true); break; case 11: obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); break; } } function onProcCon_Lollipopcrush_bykk(obj) { if(!obj) return; local substate = obj.getSkillSubState(); switch(substate){ case 0: local pAni = obj.getCurrentAnimation();//得到ani local currentT = sq_GetCurrentTime(pAni);//当前时间 local fireT = pAni.getDelaySum(0, 5);//总时间 local vz = sq_GetUniformVelocity(0, 20, currentT, fireT); sq_setCurrentAxisPos(obj, 2, vz);//设置当前z坐标 break; } } function onKeyFrameFlag_Lollipopcrush_bykk(obj, flagIndex) { if(!obj) return false; local substate = obj.getSkillSubState(); switch(flagIndex){ case 1: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LOLLIPOPCRUSH, SKILL_BYKK_LOLLIPOPCRUSH, 0, 1.0) + 100; local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LOLLIPOPCRUSH, SKILL_BYKK_LOLLIPOPCRUSH, 3, 1.0) + 100; local totalDamage3 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LOLLIPOPCRUSH, SKILL_BYKK_LOLLIPOPCRUSH, 13, 1.0) + 100; local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); local damageRate2 = (totalDamage3.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); local extra_num = sq_GetIntData(obj,SKILL_BYKK_LOLLIPOPCRUSH,8); local currentAni = obj.getCurrentAnimation(),delayTime = 0; switch(substate){ case 0: delayTime = currentAni.getDelaySum(16,16);//120 sq_SetMyShake(obj,5,700); break; case 1: delayTime = currentAni.getDelaySum(12,12);//60 break; case 9: delayTime = currentAni.getDelaySum(1,1);//120 sq_SetMyShake(obj,5,700); local offset_x = 175; if(obj.getDirection() == ENUM_DIRECTION_LEFT) offset_x = -175; sq_CreateParticle("passiveobject/witch_bykk/particle/lollipopcrushcandy.ptl", obj, offset_x, 0, 10, true, 1, 0, 7); sq_CreateParticle("passiveobject/witch_bykk/particle/lollipopcrushcandy2.ptl", obj, offset_x, 0, 10, true, 1, 0, 7); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/lollipopcrush/lollipopcrushfloor_floor.ani",175,0,0); create_lollipopcandy_bykk(obj); break; case 10: delayTime = currentAni.getDelaySum(12,12);//50 break; case 11: delayTime = currentAni.getDelaySum(1,1);//120 sq_SetMyShake(obj,5,700); local speedRate = 12000.0 / delayTime.tofloat(); local aniPath1 = "character/mage/effect/animation/witch_bykk/lollipopcrush/talisman/lollipopcrush_"; local aniPath2 = ["candy_back_attack.ani","candy_body_attack.ani","c_hit_attack.ani","c_line_attack.ani","c_boom_attack.ani","c_hit2_attack.ani"]; for(local i = 0; i < aniPath2.len(); i++){ local pooledObj = sq_AddDrawOnlyAniFromParent(obj,aniPath1 + aniPath2[i],0,(i+1),0); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate); } break; } local sizeRate = 100 + obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LOLLIPOPCRUSH, -1, 15, 1.0) + 100; cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_LOLLIPOPCRUSH,substate,delayTime,totalDamage,extra_num,damageRate,damageRate2,sizeRate,0,0,2); break; case 2: switch(substate){ case 0: sq_flashScreen(obj, 20, 80, 10, 204, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 1: sq_SetMyShake(obj,1,60); break; case 10: sq_flashScreen(obj, 20, 80, 10, 204, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break; case 11: local offset_x = 175; if(obj.getDirection() == ENUM_DIRECTION_LEFT) offset_x = -175; sq_CreateParticle("passiveobject/witch_bykk/particle/lollipopcrushcandy.ptl", obj, offset_x, 0, 10, true, 1, 0, 7); sq_CreateParticle("passiveobject/witch_bykk/particle/lollipopcrushcandy2.ptl", obj, offset_x, 0, 10, true, 1, 0, 7); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/lollipopcrush/lollipopcrushfloor_floor.ani",175,0,0); create_lollipopcandy_bykk(obj); break; } break; case 3: switch(substate){ case 0: local offset_x = 175; if(obj.getDirection() == ENUM_DIRECTION_LEFT) offset_x = -175; sq_CreateParticle("passiveobject/witch_bykk/particle/lollipopcrushcandy.ptl", obj, offset_x, 0, 10, true, 1, 0, 7); sq_CreateParticle("passiveobject/witch_bykk/particle/lollipopcrushcandy2.ptl", obj, offset_x, 0, 10, true, 1, 0, 7); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/lollipopcrush/lollipopcrushfloor_floor.ani",175,0,0); create_lollipopcandy_bykk(obj); break; case 1: local currentAni = obj.getCurrentAnimation(),delayTime = currentAni.getDelaySum(11,11),speedRate = 6000.0 / delayTime.tofloat(); local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/lollipopcrush/lollipopcrushairattack_04.ani",0,0,0); local pAni = pooledObj.getCurrentAnimation(); pAni.setSpeedRate(speedRate); create_lollipopcandy_bykk(obj); break; } break; case 4: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/lollipopcrush/lollipopcrushairattack_06.ani",0,0,0); break; } } function onTimeEvent_Lollipopcrush_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: sq_CreateParticle("passiveobject/witch_bykk/particle/lollipopcrushcandy.ptl", obj, -50, 0, 0, true, 10, 0, 7); sq_CreateParticle("passiveobject/witch_bykk/particle/lollipopcrushcandy2.ptl", obj, -50, 0, 0, true, 10, 0, 7); break; } } function onEndState_Lollipopcrush_bykk(obj, new_state) { if(!obj) return; } function create_lollipopcandy_bykk(obj) { local whitecandy_num = obj.getVar("whitecandy_num").get_vector(0); local blackcandy_num = obj.getVar("blackcandy_num").get_vector(0); local bosscandy_num = obj.getVar("bosscandy_num").get_vector(0); // print("whitecandy_num = "+whitecandy_num+" && blackcandy_num = "+blackcandy_num+" && bosscandy_num = "+bosscandy_num); local skill_level = sq_GetSkillLevel(obj,SKILL_BYKK_LOLLIPOPCRUSH); local blind_prob = sq_GetLevelData(obj,SKILL_BYKK_LOLLIPOPCRUSH,4,skill_level); local blind_level = sq_GetLevelData(obj,SKILL_BYKK_LOLLIPOPCRUSH,5,skill_level); local blind_time = sq_GetLevelData(obj,SKILL_BYKK_LOLLIPOPCRUSH,6,skill_level); local blind_stuckrate = sq_GetLevelData(obj,SKILL_BYKK_LOLLIPOPCRUSH,8,skill_level); local lightning_prob = sq_GetLevelData(obj,SKILL_BYKK_LOLLIPOPCRUSH,10,skill_level); local lightning_time = sq_GetLevelData(obj,SKILL_BYKK_LOLLIPOPCRUSH,11,skill_level); local lightning_damage = sq_GetLevelData(obj,SKILL_BYKK_LOLLIPOPCRUSH,12,skill_level); local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LOLLIPOPCRUSH, SKILL_BYKK_LOLLIPOPCRUSH, 3, 1.0) + 100; local totalDamage3 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LOLLIPOPCRUSH, SKILL_BYKK_LOLLIPOPCRUSH, 13, 1.0) + 100; if(whitecandy_num > 0){ for(local i = 0; i < whitecandy_num; i++){ cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,sq_getRandom(0,350),sq_getRandom(-150,150),10,obj.getDirection(),SKILL_BYKK_LOLLIPOPCRUSH,20,0,totalDamage2,blind_level,lightning_prob,lightning_time,lightning_damage,0,0,2); } obj.getVar("whitecandy_num").set_vector(0,0); } if(blackcandy_num > 0){ for(local i = 0; i < blackcandy_num; i++){ cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,sq_getRandom(0,350),sq_getRandom(-150,150),10,obj.getDirection(),SKILL_BYKK_LOLLIPOPCRUSH,20,1,totalDamage2,blind_level,blind_prob,blind_time,blind_stuckrate,0,0,2); } obj.getVar("blackcandy_num").set_vector(0,0); } if(bosscandy_num > 0){ for(local i = 0; i < bosscandy_num; i++){ cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,sq_getRandom(0,350),sq_getRandom(-150,150),10,obj.getDirection(),SKILL_BYKK_LOLLIPOPCRUSH,20,2,totalDamage3,blind_level,blind_prob,blind_time,blind_stuckrate,0,0,2); } obj.getVar("bosscandy_num").set_vector(0,0); } } function checkExecutableSkill_MegaDrill_bykk(obj) { //print("MegaDrill > true"); local state = obj.getState(); if(state == 6 && !sq_GetSkill(obj, SKILL_BYKK_MEGADRILL).isInCoolTime()){ if(sq_GetIntData(obj, SKILL_BYKK_MEGADRILL, 2) > 500) return 0; obj.sq_IntVectClear(); obj.sq_IntVectPush(20); obj.sq_AddSetStatePacket(SKILL_BYKK_MEGADRILL, STATE_PRIORITY_IGNORE_FORCE, true); return 1; } return 0; } function onSetState_MegaDrill_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(1); obj.setCurrentAnimation(Ani); sq_SetCustomDamageType(obj, true, 1); break; case 1://地面召唤-召唤 local Ani = obj.sq_GetThrowShootAni(1); obj.setCurrentAnimation(Ani); local successType = obj.getVar("megadrill").get_vector(0); local offset_x = 150; if(!obj.isMovablePos(sq_GetDistancePos(obj.getXPos(), obj.getDirection(), 150),sq_GetYPos(obj))) offset_x = 0; obj.getVar("megadrill").set_vector(1,offset_x); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_MEGADRILL, SKILL_BYKK_MEGADRILL, 5, 1.0) + 100; local skill = sq_GetSkill(obj, SKILL_BYKK_HOMUNCULUS); if(sq_GetSkillLevel(obj,SKILL_BYKK_HOMUNCULUS) > 0 && !skill.isSealFunction()) cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,-1,180,obj.getDirection(),SKILL_BYKK_MEGADRILL,12,successType,offset_x,totalDamage,0,0,0,0,0,3); else cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,-1,180,obj.getDirection(),SKILL_BYKK_MEGADRILL,2,successType,offset_x,totalDamage,0,0,0,0,0,3); break; case 2://驾驶 local successType = obj.getVar("megadrill").get_vector(0); //sq_SetCustomDamageType(obj, true, 1); local attackInfo = sq_GetCustomAttackInfo(obj, 52); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_MEGADRILL, SKILL_BYKK_MEGADRILL, 3, 1.0) + 100; if(obj.getVar("megadrill").get_vector(0) >= 2) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_MEGADRILL, SKILL_BYKK_MEGADRILL, 4, 1.0) + 100; local bonusRate = 1.0;//obj.getVar("witchs_bonusRate").get_vector(0).tofloat() / 1000.0; local lapisphilosophorum_level = sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM); if(lapisphilosophorum_level > 0){ local bonusrate3 = sq_GetLevelData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 16, lapisphilosophorum_level); bonusRate = bonusRate + bonusrate3.tofloat() / 1000; } totalDamage = (totalDamage.tofloat() * bonusRate).tointeger(); sq_SetCurrentAttackInfo(obj, attackInfo); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.sq_SetCurrentAnimation(ANIMATION_BYKK_MEGADRILLSUCCESSB); obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/witch_bykk/megadrill/bodycover.ani"), 0, 0); if(successType >= 2){ obj.sq_AddStateLayerAnimation(10002,obj.sq_CreateCNRDAnimation("effect/animation/witch_bykk/megadrill/lightgreat1.ani"), -50, 25); } local currentAni = obj.getCurrentAnimation(); sq_ClearAttackBox(currentAni); switch(successType){ case 1: sq_AddAttackBox(currentAni, -10, -25, 0, 140, 50, 75); break; case 2: case 3: sq_AddAttackBox(currentAni, -20, -50, 0, 280, 100, 100); break; } obj.setTimeEvent(2,20,-1,false); obj.setTimeEvent(3,100,1,false); obj.setTimeEvent(5,100,1,false); break; case 3://结束 obj.stopTimeEvent(2); obj.stopTimeEvent(3); obj.stopTimeEvent(5); local appendage = obj.getVar().getAppendage(0); if(appendage) appendage.setValid(false); obj.sq_SetCurrentAnimation(ANIMATION_BYKK_BROOMSPINNEWC_BODY); local effectObj = obj.getVar("megadrill").get_obj_vector(0); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); colObj.addSetStatePacket(25, null, STATE_PRIORITY_AUTO, false, ""); } break; case 4://跳跃 local successType = obj.getVar("megadrill").get_vector(0); switch(successType){ case 1: obj.sq_SetCurrentAnimation(ANIMATION_BYKK_MEGADRILLSUCCESS); break; case 2: case 3: obj.sq_SetCurrentAnimation(ANIMATION_BYKK_MEGADRILLGREAT); break; } local currentAni = obj.getCurrentAnimation(); currentAni.setLoop(true); break; case 10://蓄力 local Ani = obj.sq_GetThrowChargeAni(1); obj.setCurrentAnimation(Ani); break; case 11://失败释放 local Ani = obj.sq_GetThrowShootAni(1); obj.setCurrentAnimation(Ani); obj.setTimeEvent(0,1000,1,true); break; case 20://空中释放 obj.sq_ZStop(); obj.sq_SetCurrentAnimation(ANIMATION_BYKK_LAVAPOTIONAIR_BODY); break; } if(substate == 1 || substate == 11 || substate == 20){ 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_MegaDrill_bykk(obj) { if(!obj) return; if(!obj.sq_IsMyControlObject()) return; local substate = obj.getSkillSubState(); switch(substate){ case 0: //sq_SetCustomDamageType(obj, true, 0); obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_BYKK_MEGADRILL, STATE_PRIORITY_USER, true); break; case 1: obj.setTimeEvent(4,860,1,false); obj.setTimeEvent(6,400,1,false); break; case 3: case 11: obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); break; case 20: 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_MegaDrill_bykk(obj) { if(!obj) return; local substate = obj.getSkillSubState(); switch(substate){ case 10: local stateTime = obj.sq_GetStateTimer(); local maxTime = sq_GetIntData(obj,SKILL_BYKK_BITTERSCANDYBAR,0); local bDownKey = obj.isDownSkillLastKey(); if(stateTime >= maxTime){ obj.sq_IntVectClear(); obj.sq_IntVectPush(11); obj.sq_AddSetStatePacket(SKILL_BYKK_MEGADRILL , STATE_PRIORITY_USER, true); return; } if(!bDownKey){ if(stateTime < maxTime){//成功 local successType = getSuccessType_bykk(obj,SKILL_BYKK_MEGADRILL); if(successType == 0){ obj.sq_IntVectClear(); obj.sq_IntVectPush(11); obj.sq_AddSetStatePacket(SKILL_BYKK_MEGADRILL , STATE_PRIORITY_USER, true); return; } else{ obj.getVar("megadrill").clear_vector(); obj.getVar("megadrill").push_vector(successType); obj.getVar("megadrill").push_vector(0); obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_BYKK_MEGADRILL , STATE_PRIORITY_USER, true); return; } } else{//失败 obj.sq_IntVectClear(); obj.sq_IntVectPush(11); obj.sq_AddSetStatePacket(SKILL_BYKK_MEGADRILL , STATE_PRIORITY_USER, true); return; } } break; case 2: case 4: local timer = obj.getVar("Witch_MegaDrill").get_ct_vector(0); if(timer){ local skill_level = sq_GetSkillLevel(obj,SKILL_BYKK_MEGADRILL); local lifeTime = sq_GetLevelData(obj,SKILL_BYKK_MEGADRILL,1,skill_level); local currentT = timer.Get(); //print("currentT = "+currentT); if(currentT >= lifeTime){ sq_setCurrentAxisPos(obj, 2, 50); obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(1); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_USER, true); return; } else if(!sq_GetSkill(obj, SKILL_BYKK_MEGADRILL).isInCoolTime()){ obj.setSkillCommandEnable(SKILL_BYKK_MEGADRILL,true); local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_MEGADRILL); if(b_useskill != -1){ timer.Reset(); timer.Start(10000,0); obj.startSkillCoolTime(SKILL_BYKK_MEGADRILL, sq_GetSkillLevel(obj, SKILL_BYKK_MEGADRILL), -1); } } } if(sq_GetLevelData(obj, SKILL_BYKK_MEGADRILL, 13, sq_GetSkillLevel(obj, SKILL_BYKK_MEGADRILL)) > 0 && substate == 2){ local skillIndex = [SKILL_BYKK_ACIDCLOUD,SKILL_BYKK_ANTIGRAVITYSTARTER,SKILL_BYKK_ENHANCEDMAGICMISSILE,SKILL_BYKK_FLUORECOLLIDER,SKILL_BYKK_LAVAPOTION]; for(local i = 0; i < skillIndex.len(); i++){ if(!sq_GetSkill(obj, skillIndex[i]).isInCoolTime()){ obj.setSkillCommandEnable(skillIndex[i],true); local b_useskill = obj.sq_IsEnterSkill(skillIndex[i]); if(b_useskill != -1){ obj.startSkillCoolTime(skillIndex[i], sq_GetSkillLevel(obj, skillIndex[i]), -1); switch(skillIndex[i]){ 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){ 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); } 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) >= (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; 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_FLUORECOLLIDER: 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); break; case SKILL_BYKK_LAVAPOTION: local successType = getSuccessType_bykk(obj,SKILL_BYKK_LAVAPOTION); if(successType == 0) successType = 1; if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,100) >= (100 - sq_GetIntData(obj, SKILL_BYKK_LAPISPHILOSOPHORUM, 21))) 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; } obj.sq_IntVectClear(); obj.sq_IntVectPush(4); obj.sq_AddSetStatePacket(SKILL_BYKK_MEGADRILL, STATE_PRIORITY_USER, true); } } } } if(sq_GetSkillLevel(obj, SKILL_BYKK_EMERGENCYESCAPE) > 0){ sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ sq_setCurrentAxisPos(obj, 2, 50); obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(1); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_USER, true); return; } } sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true); if(sq_IsEnterCommand(obj, E_SKILL_COMMAND)){ sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj))); local effectObj = obj.getVar("megadrill").get_obj_vector(0); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); sq_SetCurrentDirection(colObj, sq_GetOppositeDirection(sq_GetDirection(colObj))); } } //加快 sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); if(substate == 2){// && sq_GetLevelData(obj, SKILL_BYKK_MEGADRILL, 6, sq_GetSkillLevel(obj, SKILL_BYKK_MEGADRILL)) > 0 sq_SetKeyxEnable(obj, E_BUFF_COMMAND, true); if(sq_IsEnterCommand(obj, E_BUFF_COMMAND)){ obj.sq_IntVectClear(); obj.sq_IntVectPush(4); obj.sq_AddSetStatePacket(SKILL_BYKK_MEGADRILL, STATE_PRIORITY_USER, true); } } if(substate == 4){ local currentT = obj.sq_GetStateTimer(); if(currentT <= 300){ local fireT = 300;//总时间 local v = sq_GetAccel(0, 100, currentT, fireT, true); sq_setCurrentAxisPos(obj, 2, v); } else{ local currentT1 = currentT - 300 local fireT = 300;//总时间 local v = sq_GetAccel(100, 0, currentT1, fireT, false); sq_setCurrentAxisPos(obj, 2, v); } if(currentT >= 600){ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_MEGADRILL, SKILL_BYKK_MEGADRILL, 3, 1.5); if(obj.getVar("megadrill").get_vector(0) >= 2) totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_MEGADRILL, SKILL_BYKK_MEGADRILL, 4, 1.5); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_MEGADRILL,3,totalDamage,0,0,0,0,0,0,0,1); obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_BYKK_MEGADRILL, STATE_PRIORITY_USER, true); } } break; } } function onKeyFrameFlag_MegaDrill_bykk(obj, flagIndex) { if(!obj) return false; local substate = obj.getSkillSubState(); switch(substate){ case 20: if(flagIndex == 1){ local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_MEGADRILL, SKILL_BYKK_MEGADRILL, 7, 1.0); local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_MEGADRILL, SKILL_BYKK_MEGADRILL, 2, 1.0); local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); local sub = 1; if(sq_GetLevelData(obj, SKILL_BYKK_MEGADRILL, 8, sq_GetSkillLevel(obj, SKILL_BYKK_MEGADRILL)) > 0) sub = 0; local bitterscandy_level = sq_GetSkillLevel(obj,SKILL_BYKK_BITTERSCANDYBAR); local add_Rate = sq_GetLevelData(obj,SKILL_BYKK_BITTERSCANDYBAR,2,bitterscandy_level); add_Rate = (1000.0 + add_Rate.tofloat()) / 1000.0; 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(); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,0 - obj.getZPos(),obj.getDirection(),SKILL_BYKK_MEGADRILL,1,totalDamage,damageRate,sub,0,0,0,0,0,1); } break; } } function onTimeEvent_MegaDrill_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_MEGADRILL, SKILL_BYKK_MEGADRILL, 7, 1.0); local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_MEGADRILL, SKILL_BYKK_MEGADRILL, 2, 1.0); local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger(); local sub = 1; if(sq_GetLevelData(obj, SKILL_BYKK_MEGADRILL, 8, sq_GetSkillLevel(obj, SKILL_BYKK_MEGADRILL)) > 0) sub = 0; local bitterscandy_level = sq_GetSkillLevel(obj,SKILL_BYKK_BITTERSCANDYBAR); local add_Rate = sq_GetLevelData(obj,SKILL_BYKK_BITTERSCANDYBAR,2,bitterscandy_level); add_Rate = (1000.0 + add_Rate.tofloat()) / 1000.0; 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(); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,0,obj.getDirection(),SKILL_BYKK_MEGADRILL,1,totalDamage,damageRate,sub,0,0,0,0,0,1); break; case 1: sq_setCurrentAxisPos(obj, 2, 50); obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(1); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(STATE_JUMP , STATE_PRIORITY_USER, true); break; case 2://移动 local effectObj = obj.getVar("megadrill").get_obj_vector(0); local speed01 = 2, speed02 = 4; if(sq_GetLevelData(obj, SKILL_BYKK_MEGADRILL, 12, sq_GetSkillLevel(obj, SKILL_BYKK_MEGADRILL)) > 0){ speed01 = speed01 * (100 + sq_GetLevelData(obj, SKILL_BYKK_MEGADRILL, 12, sq_GetSkillLevel(obj, SKILL_BYKK_MEGADRILL))) / 100; speed02 = speed02 * (100 + sq_GetLevelData(obj, SKILL_BYKK_MEGADRILL, 12, sq_GetSkillLevel(obj, SKILL_BYKK_MEGADRILL))) / 100; } if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(obj.getXPos(),obj.getYPos() - speed01)) sq_setCurrentAxisPos(obj, 1, obj.getYPos() - speed01); if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(obj.getXPos() - speed02,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, obj.getXPos() - speed02); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); if(obj.getDirection() == ENUM_DIRECTION_LEFT){if(colObj.getState() != 23) colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");} else{if(colObj.getState() != 24) colObj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, "");} } return; } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(obj.getXPos() + speed02,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, obj.getXPos() + speed02); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); if(obj.getDirection() == ENUM_DIRECTION_RIGHT){if(colObj.getState() != 23) colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");} else{if(colObj.getState() != 24) colObj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, "");} } return; } else{ if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); if(colObj.getState() != 23) colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); return; } } } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(obj.getXPos(),obj.getYPos() + speed01)) sq_setCurrentAxisPos(obj, 1, obj.getYPos() + speed01); if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(obj.getXPos() - speed02,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, obj.getXPos() - speed02); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); if(obj.getDirection() == ENUM_DIRECTION_LEFT){if(colObj.getState() != 23) colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");} else{if(colObj.getState() != 24) colObj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, "");} } return; } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(obj.getXPos() + speed02,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, obj.getXPos() + speed02); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); if(obj.getDirection() == ENUM_DIRECTION_RIGHT){if(colObj.getState() != 23) colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");} else{if(colObj.getState() != 24) colObj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, "");} } return; } else{ if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); if(colObj.getState() != 23) colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); return; } } } if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(obj.getXPos() - speed02,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, obj.getXPos() - speed02); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); if(obj.getDirection() == ENUM_DIRECTION_LEFT){if(colObj.getState() != 23) colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");} else{if(colObj.getState() != 24) colObj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, "");} } return; } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(obj.getXPos() + speed02,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, obj.getXPos() + speed02); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); if(obj.getDirection() == ENUM_DIRECTION_RIGHT){if(colObj.getState() != 23) colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");} else{if(colObj.getState() != 24) colObj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, "");} } return; } if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); if(colObj.getState() != 22) colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); } break; case 3://攻击加快 local inputConut = obj.getRapidInputFrequency(); inputConut = inputConut.tointeger(); local inputMax = 2; local gapByInputMin = sq_GetIntData(obj,SKILL_BYKK_MEGADRILL,11); local gapByInputMax = sq_GetIntData(obj,SKILL_BYKK_MEGADRILL,10); if(inputConut >= inputMax){ obj.setTimeEvent(3, gapByInputMin, 1,false); local effectObj = obj.getVar("megadrill").get_obj_vector(0); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); local pAni = colObj.getCurrentAnimation(); pAni.setSpeedRate(300.0); if(colObj.getVar().getBool(0) == false && obj.getVar("megadrill").get_vector(0) >= 2){ colObj.getVar().setBool(0,true); pAni.addLayerAnimation(-1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/attract1back.ani"),true); pAni.addLayerAnimation(3,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/attract1front.ani"),true); pAni.addLayerAnimation(-1,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/attract2back.ani"),true); pAni.addLayerAnimation(3,sq_CreateAnimation("","character/mage/effect/animation/witch_bykk/megadrill/attract2front.ani"),true); } } if(obj.getVar("megadrill").get_vector(0) >= 2 && !obj.getVar("attract").getAppendage(0)){ local range = 100 * (100 + sq_GetLevelData(obj, SKILL_BYKK_MEGADRILL, 11, sq_GetSkillLevel(obj, SKILL_BYKK_MEGADRILL))) / 100; local appendage = sq_AttractToMe(obj, range, 80, 1000); obj.getVar("attract").setAppendage(0,appendage); } } else{ obj.setTimeEvent(3, gapByInputMax, 1,false); local effectObj = obj.getVar("megadrill").get_obj_vector(0); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); local pAni = colObj.getCurrentAnimation(); pAni.setSpeedRate(100.0); } local appendage = obj.getVar("attract").getAppendage(0); if(appendage) appendage.setValid(false); } obj.resetHitObjectList(); break; case 4: local offset_x = obj.getVar("megadrill").get_vector(1); sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(),offset_x)); sq_setCurrentAxisPos(obj, 2, 0); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/blackmantle/cloud.ani",0,0,-sq_GetZPos(obj)); CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_MEGADRILL, false, "character/mage/witch_skill_bykk/ap/ap_megadrill.nut", true); local effectObj = obj.getVar("megadrill").get_obj_vector(0); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); sq_setCurrentAxisPos(colObj, 2, sq_GetZPos(obj)-5); sq_moveWithParent(obj, colObj); } obj.getVar("Witch_MegaDrill").clear_ct_vector(); obj.getVar("Witch_MegaDrill").push_ct_vector(); local timer = obj.getVar("Witch_MegaDrill").get_ct_vector(0); timer.Reset(); timer.Start(10000,0); obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_BYKK_MEGADRILL, STATE_PRIORITY_USER, true); break; case 5: local inputConut = obj.getRapidInputFrequency(); inputConut = inputConut.tointeger(); local inputMax = 2; local gapByInputMin = 600; local gapByInputMax = 1200; if(inputConut >= inputMax) obj.setTimeEvent(5,gapByInputMin,1,false); else obj.setTimeEvent(5,gapByInputMax,1,false); local pooledObj; if(sq_getRandom(1,100) >= 30) pooledObj = sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/megadrill/smoke"+sq_getRandom(1,2).tostring()+".ani",-85,0,100); else pooledObj = sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/megadrill/smoke"+sq_getRandom(1,2).tostring()+".ani",-100,0,50); sq_moveWithParent(obj, pooledObj); local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/megadrill/smoke"+sq_getRandom(1,2).tostring()+".ani",50,0,75); local pAni = pooledObj2.getCurrentAnimation(); pAni.setImageRateFromOriginal(-1.0, 1.0); sq_moveWithParent(obj, pooledObj2); break; case 6: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/blackmantle/cloud.ani",0,0,-sq_GetZPos(obj)); sq_setCurrentAxisPos(obj, 2, 500); obj.sq_ZStop(); break; } } function onEndState_MegaDrill_bykk(obj, new_state) { if(!obj) return; if(new_state != SKILL_BYKK_MEGADRILL){ sq_SetCustomDamageType(obj, true, 0); local effectObj = obj.getVar("megadrill").get_obj_vector(0); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); colObj.addSetStatePacket(25, null, STATE_PRIORITY_AUTO, false, ""); } local appendage = obj.getVar("attract").getAppendage(0); if(appendage) appendage.setValid(false); obj.getVar("megadrill").setBool(0,false); local apdPath = "character/mage/witch_skill_bykk/ap/ap_megadrill.nut"; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath); } } function checkExecutableSkill_TransformFlapper_bykk(obj) { //print("TransformFlapper > true"); return 0; } function onSetState_TransformFlapper_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(38); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local successType = getSuccessType_bykk(obj,SKILL_BYKK_TRANSFORMFLAPPER); if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,99) >= 49) successType = 3; obj.getVar("transformflapper").clear_vector(); obj.getVar("transformflapper").push_vector(successType); switch(successType){ case 0: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/fail_n.ani",100,0,75); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/fail_d.ani",100,-1,74); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/cloud.ani",100,-2,73); break; case 1: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/success_n.ani",100,0,75); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/success_d.ani",100,-1,74); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/cloud.ani",100,-2,73); break; case 2: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/great_n.ani",100,0,75); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/great_d.ani",100,-1,74); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/cloud.ani",100,-2,73); break; case 3: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/bigsuccess_familier01.ani",100,0,75); break; } local currentAni = obj.getCurrentAnimation(); sq_ClearAttackBox(currentAni); local delayTime = currentAni.getDelaySum(1, 1); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_TRANSFORMFLAPPER, SKILL_BYKK_TRANSFORMFLAPPER, 0, 1.0) + 100; local skill_level = sq_GetSkillLevel(obj,SKILL_BYKK_TRANSFORMFLAPPER); local prob = sq_GetLevelData(obj,SKILL_BYKK_TRANSFORMFLAPPER,1,skill_level); local level = sq_GetLevelData(obj,SKILL_BYKK_TRANSFORMFLAPPER,2,skill_level); local time = sq_GetLevelData(obj,SKILL_BYKK_TRANSFORMFLAPPER,3,skill_level); local transformflapper_skill = sq_GetSkill(obj,SKILL_BYKK_TRANSFORMFLAPPER); local sizeRate = sq_GetLevelData(obj,SKILL_BYKK_TRANSFORMFLAPPER,8,skill_level); local isSeal = 1; if(transformflapper_skill.isSealFunction()) isSeal = 0; cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPER,1,delayTime,0,0,0,0,0,0,0,0); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPER,3,delayTime,totalDamage,prob,level,time,successType,isSeal,sizeRate,2); obj.setTimeEvent(1,currentAni.getDelaySum(0,7),1,false); break; case 1: obj.sq_ZStop(); obj.sq_SetCurrentAnimation(39); local successType = getSuccessType_bykk(obj,SKILL_BYKK_TRANSFORMFLAPPER); local currentAni = obj.getCurrentAnimation(); local delayTime = currentAni.getDelaySum(1, 1); sq_ClearAttackBox(currentAni); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_TRANSFORMFLAPPER, SKILL_BYKK_TRANSFORMFLAPPER, 0, 1.0) + 100; local skill_level = sq_GetSkillLevel(obj,SKILL_BYKK_TRANSFORMFLAPPER); local prob = sq_GetLevelData(obj,SKILL_BYKK_TRANSFORMFLAPPER,1,skill_level); local level = sq_GetLevelData(obj,SKILL_BYKK_TRANSFORMFLAPPER,2,skill_level); local time = sq_GetLevelData(obj,SKILL_BYKK_TRANSFORMFLAPPER,3,skill_level); local transformflapper_skill = sq_GetSkill(obj,SKILL_BYKK_TRANSFORMFLAPPER); local sizeRate = sq_GetLevelData(obj,SKILL_BYKK_TRANSFORMFLAPPER,8,skill_level); local isSeal = 1; if(transformflapper_skill.isSealFunction()) isSeal = 0; cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPER,2,delayTime,0,0,0,0,0,0,0,0); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPER,4,delayTime,totalDamage,prob,level,time,successType,isSeal,sizeRate,2); break; } 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_TransformFlapper_bykk(obj) { if(!obj) return; if(!obj.sq_IsMyControlObject()) return; local substate = obj.getSkillSubState(); switch(substate){ case 0: case 1: local successType = obj.getVar("transformflapper").get_vector(0); switch(successType){ case 0: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_fail_d.ani",75,0,10); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_fail_n.ani",75,-1,9); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/cloud.ani",75,-2,8); break; case 1: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_success_d.ani",75,0,10); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_success_n.ani",75,-1,9); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/cloud.ani",75,-2,8); break; case 2: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_great_d.ani",75,0,10); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_great_n.ani",75,-1,9); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/cloud.ani",75,-2,8); break; case 3: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_great_d.ani",75,0,10); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_great_n.ani",75,-1,9); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/cloud.ani",75,-2,8); break; } if(obj.getVar("transBool").getBool(0)){ obj.getVar("transBool").setBool(0, false); obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_BYKK_TRANSFORMFLAPPER, STATE_PRIORITY_USER, true); } else{ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(0); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_USER, true); } break; } } function onProcCon_TransformFlapper_bykk(obj) { if(!obj) return; local substate = obj.getSkillSubState(); switch(substate){ case 0: local pAni = obj.getCurrentAnimation();//得到ani local currentT = sq_GetCurrentTime(pAni);//当前时间 local fireT = pAni.getDelaySum(0, 5);//总时间 local vz = sq_GetUniformVelocity(0, 20, currentT, fireT); sq_setCurrentAxisPos(obj, 2, vz);//设置当前z坐标 // if(currentT >= fireT) obj.sq_ZStop(); break; } } function onKeyFrameFlag_TransformFlapper_bykk(obj, flagIndex) { if(!obj) return false; } function onTimeEvent_TransformFlapper_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: break; case 1: local successType = obj.getVar("transformflapper").get_vector(0); local aniPath = ["character/mage/effect/animation/witch_bykk/transformflapper/flyflap_groundwave.ani","character/mage/effect/animation/witch_bykk/transformflapper/bottom_down.ani","character/mage/effect/animation/witch_bykk/transformflapper/bottom_up.ani"]; for(local i = 0; i < 3; i++){ local effectObj = createOnlyDrawObject_witch_bykk(obj,aniPath[i],true,obj.getDirection(),sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(),100+successType*15),sq_GetYPos(obj) + i,0 + i,ENUM_DRAWLAYER_BOTTOM); local pAni = effectObj.getCurrentAnimation(); pAni.setImageRateFromOriginal(1.0+successType*0.2, 1.0+successType*0.2); } break; } } function onEndState_TransformFlapper_bykk(obj, new_state) { if(!obj) return; } function onAttack_TransformFlapper_bykk(obj, damager, boundingBox, isStuck) { if(!obj) return; local skill_level = sq_GetSkillLevel(obj,SKILL_BYKK_TRANSFORMFLAPPER); local prob = sq_GetLevelData(obj,SKILL_BYKK_TRANSFORMFLAPPER,1,skill_level); local level = sq_GetLevelData(obj,SKILL_BYKK_TRANSFORMFLAPPER,2,skill_level); local time = sq_GetLevelData(obj,SKILL_BYKK_TRANSFORMFLAPPER,3,skill_level); if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLIND, prob.tofloat(), level, false, time); } } function onAfterAttack_TransformFlapper_bykk(obj,damager,boundingBox,isStuck) { if(!obj) return 0; if(damager.isObjectType(OBJECTTYPE_ACTIVE)){ local activeObj = sq_GetCNRDObjectToActiveObject(damager); if(activeObj.getHp() <= 0){ print("DEAD"); print("X = "+sq_GetXPos(activeObj)+"&& Y = "+sq_GetYPos(activeObj)); } } return 1; } function checkExecutableSkill_TransformFlapperEx_bykk(obj) { //print("TransformFlapperEx > true"); return 0; } function onSetState_TransformFlapperEx_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(61); obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); local successType = getSuccessType_bykk(obj,SKILL_BYKK_TRANSFORMFLAPPEREX); if(successType == 2 && sq_GetSkillLevel(obj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0 && sq_getRandom(0,99) >= 49) successType = 3; obj.getVar("transformflapper").clear_vector(); obj.getVar("transformflapper").push_vector(successType); switch(successType){ case 0: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/fail_n.ani",75,0,75); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/fail_d.ani",75,-1,74); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/cloud.ani",75,-2,73); break; case 1: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/success_n.ani",75,0,75); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/success_d.ani",75,-1,74); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/cloud.ani",75,-2,73); break; case 2: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/great_n.ani",75,0,75); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/great_d.ani",75,-1,74); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/cloud.ani",75,-2,73); break; case 3: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/bigsuccess_familier01.ani",75,0,75); break; } local currentAni = obj.getCurrentAnimation(); sq_ClearAttackBox(currentAni); local delayTime = currentAni.getDelaySum(false); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_TRANSFORMFLAPPEREX, SKILL_BYKK_TRANSFORMFLAPPEREX, 0, 1.0) + 100; local transformflapper_skill = sq_GetSkill(obj,SKILL_BYKK_TRANSFORMFLAPPER); local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_TRANSFORMFLAPPEREX, SKILL_BYKK_TRANSFORMFLAPPEREX, 8, 1.0) + 100; local isSeal = 1; if(transformflapper_skill.isSealFunction()) isSeal = 0; cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPEREX,1,delayTime,0,0,0,0,0,0,0,0); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPEREX,3,delayTime,totalDamage,successType,isSeal,sizeRate,0,0,0,2); if(sq_GetIntData(obj, SKILL_BYKK_TRANSFORMFLAPPEREX, 3) > 0) obj.setTimeEvent(2,currentAni.getDelaySum(0,9),1,false); else obj.setTimeEvent(1,currentAni.getDelaySum(0,7),1,false); break; case 1: obj.sq_ZStop(); obj.sq_SetCurrentAnimation(62); local successType = getSuccessType_bykk(obj,SKILL_BYKK_TRANSFORMFLAPPER); local currentAni = obj.getCurrentAnimation(); local delayTime = currentAni.getDelaySum(false); sq_ClearAttackBox(currentAni); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_TRANSFORMFLAPPEREX, SKILL_BYKK_TRANSFORMFLAPPEREX, 0, 1.0) + 100; local transformflapper_skill = sq_GetSkill(obj,SKILL_BYKK_TRANSFORMFLAPPER); local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_TRANSFORMFLAPPEREX, SKILL_BYKK_TRANSFORMFLAPPEREX, 8, 1.0) + 100; local isSeal = 1; if(transformflapper_skill.isSealFunction()) isSeal = 0; cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPEREX,2,delayTime,0,0,0,0,0,0,0,0); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,0,0,obj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPEREX,4,delayTime,totalDamage,successType,isSeal,sizeRate,0,0,0,2); if(sq_GetIntData(obj, SKILL_BYKK_TRANSFORMFLAPPEREX, 3) > 0) obj.setTimeEvent(2,currentAni.getDelaySum(0,2),1,false); break; } 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_TransformFlapperEx_bykk(obj) { if(!obj) return; if(!obj.sq_IsMyControlObject()) return; local substate = obj.getSkillSubState(); switch(substate){ case 0: // obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); // break; case 1: local successType = obj.getVar("transformflapper").get_vector(0); switch(successType){ case 0: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_fail_d.ani",75,0,10); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_fail_n.ani",75,-1,9); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/cloud.ani",75,-2,8); break; case 1: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_success_d.ani",75,0,10); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_success_n.ani",75,-1,9); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/cloud.ani",75,-2,8); break; case 2: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_great_d.ani",75,0,10); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_great_n.ani",75,-1,9); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/cloud.ani",75,-2,8); break; case 3: sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_great_d.ani",75,0,10); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/finish_great_n.ani",75,-1,9); sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/witch_bykk/transformflapper/cloud.ani",75,-2,8); break; } if(obj.getVar("transBoolex").getBool(0)){ obj.getVar("transBoolex").setBool(0, false); obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(SKILL_BYKK_TRANSFORMFLAPPEREX, STATE_PRIORITY_USER, true); } else{ obj.sq_IntVectClear(); obj.sq_IntVectPush(1); obj.sq_IntVectPush(0); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_USER, true); } break; } } function onProcCon_TransformFlapperEx_bykk(obj) { if(!obj) return; local substate = obj.getSkillSubState(); switch(substate){ case 0: local pAni = obj.getCurrentAnimation();//得到ani local currentT = sq_GetCurrentTime(pAni);//当前时间 local fireT = pAni.getDelaySum(0, 5);//总时间 local vz = sq_GetUniformVelocity(0, 20, currentT, fireT); sq_setCurrentAxisPos(obj, 2, vz);//设置当前z坐标 break; } } function onKeyFrameFlag_TransformFlapperEx_bykk(obj, flagIndex) { if(!obj) return false; } function onTimeEvent_TransformFlapperEx_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: break; case 1: local successType = obj.getVar("transformflapper").get_vector(0); local aniPath1 = "character/mage/effect/animation/witch_bykk/transformflapperex/land/"; local aniPath2 = ["flyflapex_land_ground_crack.ani","flyflapex_land_front.ani"]; for(local i = 0; i < 2; i++){ local effectObj = createOnlyDrawObject_witch_bykk(obj,aniPath1 + aniPath2[i],true,obj.getDirection(),sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(),150+successType*15),sq_GetYPos(obj) + i,0 + i,ENUM_DRAWLAYER_BOTTOM); local pAni = effectObj.getCurrentAnimation(); pAni.setImageRateFromOriginal(1.0+successType*0.1, 1.0+successType*0.1); } break; case 2: local totalDamage = (obj.sq_GetBonusRateWithPassive(SKILL_BYKK_TRANSFORMFLAPPEREX, SKILL_BYKK_TRANSFORMFLAPPEREX, 0, 1.0) + 100) * 33 / 100; cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,0,obj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPEREX,5,0,0,0,0,0,0,0,0,0); cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,150,0,0,obj.getDirection(),SKILL_BYKK_TRANSFORMFLAPPEREX,7,totalDamage,0,0,0,0,0,0,0,0); break; } } function onEndState_TransformFlapperEx_bykk(obj, new_state) { if(!obj) return; } function checkExecutableSkill_Uroboros_bykk(obj) { if (!obj) return false; local b_useskill = obj.sq_IsUseSkill(SKILL_BYKK_UROBOROS); if(b_useskill){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(SKILL_BYKK_UROBOROS, STATE_PRIORITY_USER, true); return 1; } return 0; } function onSetState_Uroboros_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 timer = obj.getVar("uroboros").get_ct_vector(0); if(timer) obj.getVar("uroboros").clear_ct_vector(); obj.sq_SetCurrentAnimation(ANIMATION_BYKK_UROBOROSSTART); local attackInfo = sq_GetCustomAttackInfo(obj, 50); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_UROBOROS, SKILL_BYKK_UROBOROS, 0, 1.0) + 100; sq_SetCurrentAttackInfo(obj, attackInfo); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); obj.getVar("uroboros_move").clear_vector(); obj.getVar("uroboros_move").push_vector(sq_GetXPos(obj)); obj.sq_PlaySound("WZ_UROBOROS"); 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_SetCurrentAnimation(ANIMATION_BYKK_UROBOROSREADY); obj.sq_PlaySound("WZ_UROBOROS_RIDE"); local hitTime = sq_GetIntData(obj, SKILL_BYKK_UROBOROS, 3) * (100 - UROBOROS_TIAOZHENG4) / 100; local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_UROBOROS, SKILL_BYKK_UROBOROS, 1, 1.0) + 100; cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,1,185,obj.getDirection(),SKILL_BYKK_UROBOROS,2,totalDamage,hitTime,0,0,0,0,0,0,0); obj.setTimeEvent(2,20,-1,true); obj.setTimeEvent(3,2000,-1,true); obj.setTimeEvent(4,700,-1,true); local appendage = sq_AttractToMe(obj, 600, 100, 1200); obj.getVar("uroborosSet").setAppendage(0,appendage); obj.getVar("uroborosTar").clear_obj_vector(); break; case 2: obj.sq_SetCurrentAnimation(ANIMATION_BYKK_UROBOROSIDLE); if(obj.getVar("uroboros").getBool(0)){ obj.getVar("uroboros").setBool(0, false); local attackInfo = sq_GetCustomAttackInfo(obj, 51); local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_UROBOROS, SKILL_BYKK_UROBOROS, 0, 1.0) + 100; local bonusRate = 1; 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(); sq_SetCurrentAttackInfo(obj, attackInfo); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage); if(!obj.isExistTimeEvent(1)) obj.setTimeEvent(1,100,-1,false); if(!obj.isExistTimeEvent(2)) obj.setTimeEvent(2,20,-1,true); if(!obj.isExistTimeEvent(3)) obj.setTimeEvent(3,2000,-1,true); if(!obj.isExistTimeEvent(4)) obj.setTimeEvent(4,700,-1,true); } break; case 3: obj.sq_SetCurrentAnimation(ANIMATION_BYKK_UROBOROSENERGETIC); local currentAni = obj.getCurrentAnimation(); currentAni.setSpeedRate(150.0); 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 100: obj.sq_SetCurrentAnimation(205); sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 1)); local attackInfo = sq_GetCurrentAttackInfo(obj); if(attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) obj.getVar("element_kk").setInt(0, 100); else obj.getVar("element_kk").setInt(0, 0); if(attackInfo.isValidElement(ENUM_ELEMENT_WATER)) obj.getVar("element_kk").setInt(1, 100); else obj.getVar("element_kk").setInt(1, 0); if(attackInfo.isValidElement(ENUM_ELEMENT_DARK)) obj.getVar("element_kk").setInt(2, 100); else obj.getVar("element_kk").setInt(2, 0); if(attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) obj.getVar("element_kk").setInt(3, 100); else obj.getVar("element_kk").setInt(3, 0); break; } } function onEndCurrentAni_Uroboros_bykk(obj) { if(!obj) return; if(!obj.sq_IsMyControlObject()) return; local substate = obj.getSkillSubState(); switch(substate){ case 0: case 1: obj.sq_IntVectClear(); obj.sq_IntVectPush(substate + 1); obj.sq_AddSetStatePacket(SKILL_BYKK_UROBOROS, STATE_PRIORITY_USER, true); if(substate == 0){ obj.getVar("uroboros").clear_ct_vector(); obj.getVar("uroboros").push_ct_vector(); local timer = obj.getVar("uroboros").get_ct_vector(0); timer.Reset(); timer.Start(10000,0); obj.getVar("uroboros").setBool(0, true); } else if(substate == 1) obj.setTimeEvent(1,100,1,false); break; case 100: obj.sq_IntVectClear(); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, true); break; } } function onProcCon_Uroboros_bykk(obj) { if(!obj) return; //加快 sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput(); local timer = obj.getVar("uroboros").get_ct_vector(0); if(timer){ local lifeTime = sq_GetIntData(obj, SKILL_BYKK_UROBOROS, 0) + UROBOROS_TIAOZHENG3; local currentT = timer.Get(); if(currentT >= lifeTime){ obj.stopSound(4399); local attackObj = obj.getVar("uroboros").get_obj_vector(0); if(attackObj){attackObj = sq_GetCNRDObjectToCollisionObject(attackObj);attackObj.setValid(false);} local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_UROBOROS, SKILL_BYKK_UROBOROS, 3, 1.0) + 100; cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,1,0,obj.getDirection(),SKILL_BYKK_UROBOROS,1,totalDamage,0,0,0,0,0,0,0,1); obj.getVar("uroboros").setBool(0, false); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); return; } } local substate = obj.getSkillSubState(); switch(substate){ case 2: case 3: if(sq_GetSkillLevel(obj, SKILL_BYKK_EMERGENCYESCAPE) > 0){ sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){ obj.stopSound(4399); local attackObj = obj.getVar("uroboros").get_obj_vector(0); if(attackObj){attackObj = sq_GetCNRDObjectToCollisionObject(attackObj);attackObj.setValid(false);} local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_UROBOROS, SKILL_BYKK_UROBOROS, 3, 1.0) + 100; cearteSkillPassive_Witch_bykk(obj,obj,PASSIVEOBJECT_BYKK_WITCH,0,1,0,obj.getDirection(),SKILL_BYKK_UROBOROS,1,totalDamage,0,0,0,0,0,0,0,1); obj.getVar("uroboros").setBool(0, false); obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); return; } } break; } } function onKeyFrameFlag_Uroboros_bykk(obj, flagIndex) { if(!obj) return false; } function onTimeEvent_Uroboros_bykk(obj, timeEventIndex, timeEventCount) { if(!obj) return false; switch(timeEventIndex){ case 0: break; case 1: local inputConut = obj.getRapidInputFrequency(); inputConut = inputConut.tointeger(); local inputMax = 2; local gapByInputMin = sq_GetIntData(obj,SKILL_BYKK_UROBOROS,4) * UROBOROS_TIAOZHENG1 / 100; local gapByInputMax = sq_GetIntData(obj,SKILL_BYKK_UROBOROS,2) * UROBOROS_TIAOZHENG2 / 100; if(inputConut >= inputMax){ obj.setTimeEvent(1, gapByInputMin, 1,false); if(obj.getSkillSubState() != 3){ obj.sq_IntVectClear(); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(SKILL_BYKK_UROBOROS, STATE_PRIORITY_USER, true); } } else{ obj.setTimeEvent(1, gapByInputMax, 1,false); if(obj.getSkillSubState() != 2){ obj.sq_IntVectClear(); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(SKILL_BYKK_UROBOROS, STATE_PRIORITY_USER, true); } } obj.resetHitObjectList(); break; case 2: if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(obj.getXPos() - 5,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, obj.getXPos() - 5); } else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){ if(obj.isMovablePos(obj.getXPos() + 5,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, obj.getXPos() + 5); } 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); obj.getVar("uroboros").setBool(0, true); } 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); obj.getVar("uroboros").setBool(0, true); } break; case 3: obj.stopSound(4399); obj.sq_PlaySound("UROBOROS_ROTATE_LOOP",4399); break; case 4: local save_posX = obj.getVar("uroboros_move").get_vector(0); local base_X = sq_GetXPos(obj); local aniPath = ["character/mage/effect/animation/witch_bykk/uroboros/move/movedust_01.ani", "character/mage/effect/animation/witch_bykk/uroboros/move/movedustbig_01.ani"]; if(base_X != save_posX){ if(base_X > save_posX) createOnlyDrawObject_witch_bykk(obj,aniPath[sq_getRandom(0,1)],true,ENUM_DIRECTION_RIGHT,sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(),-80),sq_GetYPos(obj),sq_GetZPos(obj),ENUM_DRAWLAYER_NORMAL); else createOnlyDrawObject_witch_bykk(obj,aniPath[sq_getRandom(0,1)],true,ENUM_DIRECTION_LEFT,sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(), 80),sq_GetYPos(obj),sq_GetZPos(obj),ENUM_DRAWLAYER_NORMAL); obj.getVar("uroboros_move").set_vector(0, sq_GetXPos(obj)); } break; } } function onEndState_Uroboros_bykk(obj, new_state) { if(!obj) return; if(new_state != SKILL_BYKK_UROBOROS){ local appendage = obj.getVar("uroborosSet").getAppendage(0); if(appendage) appendage.setValid(false); local size = obj.getVar("uroborosTar").get_obj_vector_size(); if(size > 0){ for(local i = 0; i < size; i++){ local targetObj = obj.getVar("uroborosTar").get_obj_vector(i); if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "appendage/character/ap_common_hold.nut"); } } } } function procSkill_Witch(obj) { procSkill_Witch_bykk(obj); } /////////////////////////witch_end