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

2133 lines
92 KiB
C

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