2133 lines
92 KiB
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
|
|
|
|
|