Rindro-Sqr/user/114.66.51.249/6_mage_12.c

3302 lines
135 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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