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

3302 lines
135 KiB
C
Raw Normal View History

2025-11-08 12:21:06 +08:00
/////////////////////////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");
}
}