3302 lines
135 KiB
C
3302 lines
135 KiB
C
|
||
|
||
/////////////////////////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");
|
||
}
|
||
}
|
||
|
||
|
||
|