3092 lines
133 KiB
C
3092 lines
133 KiB
C
|
|
|
|
|
|
function onSourceKeyFrameFlag_appendage_luis_bykk(appendage,flagIndex)
|
|
{
|
|
if(!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj){
|
|
appendage.setValid(false);
|
|
return true;
|
|
}
|
|
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
|
|
if(!sqrChr) return true;
|
|
// if(!sq_IsMyControlObject(sqrChr)) return true;
|
|
|
|
local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(10).tofloat() / 100.0;
|
|
local eclipsehive_bonus2 = sqrChr.getVar("eclipsehive_bonus").getInt(11).tofloat() / 100.0;
|
|
|
|
switch(flagIndex){
|
|
case 101://嚙踝蕭?
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 46, 46, 11, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,46,1,0,0,0,totalDamage,0,0,0,0);
|
|
break;
|
|
case 201://???嚙踝蕭
|
|
local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0));
|
|
if(targetObj){
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 46, 46, 12, eclipsehive_bonus) + 100;
|
|
local etcSub = sq_GetLevelData(sqrChr, 46, 25, sq_GetSkillLevel(sqrChr, 46));
|
|
createPassiveObject_k_k(sqrChr,targetObj,46,2,0,0,0,totalDamage,etcSub,0,0,0);
|
|
}
|
|
break;
|
|
case 301://嚙踝蕭牊
|
|
sq_AddDrawOnlyAniFromParent(parentObj,"passiveobject/madeby_k_k/animation/luis/fireballstart.ani", 85, 1, 80);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 46, 46, 13, eclipsehive_bonus) + 100;
|
|
local etcSub = sq_GetLevelData(sqrChr, 46, 25, sq_GetSkillLevel(sqrChr, 46));
|
|
createPassiveObject_k_k(sqrChr,parentObj,46,3,65,0,100,totalDamage,etcSub,0,0,0);
|
|
break;
|
|
case 401://嚙??嚙?
|
|
local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0));
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 46, 46, 14, eclipsehive_bonus) + 100;
|
|
local etcSub = sq_GetLevelData(sqrChr, 46, 25, sq_GetSkillLevel(sqrChr, 46));
|
|
createPassiveObject_k_k(sqrChr,targetObj,46,4,0,0,0,totalDamage,etcSub,0,0,0);
|
|
break;
|
|
case 501://嚙??嚙?
|
|
local etcSub = sq_GetLevelData(sqrChr, 46, 25, sq_GetSkillLevel(sqrChr, 46)), bonusRate = 1;
|
|
if(sqrChr.getVar("eclipsehive_select").getBool(0) && parentObj.getVar("ronghe_bool").getBool(0)){//sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 23) > 0 &&
|
|
bonusRate = sqrChr.getVar("LuisObj").get_obj_vector_size();
|
|
parentObj.getVar("ronghe_bool").setBool(0, false);
|
|
}
|
|
if(parentObj.getVar("skill").getBool(0) == true){
|
|
parentObj.getVar("skill").setBool(0,false);
|
|
local sub = 1;
|
|
if(etcSub > 0) sub = 10;
|
|
createPassiveObject_k_k(sqrChr,parentObj,46,5,150,0,0,0,sub,etcSub,bonusRate,0);
|
|
}
|
|
else{
|
|
local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0));
|
|
if(targetObj) createPassiveObject_k_k(sqrChr,targetObj,46,5,0,0,0,0,1,etcSub,bonusRate,0);
|
|
}
|
|
break;
|
|
case 1001://?嚙踝蕭嚙踝蕭嚙?
|
|
local direction = sqrChr.getDirection();
|
|
local yPos = sqrChr.getYPos();
|
|
local zPos = parentObj.getZPos();
|
|
local xPos = sq_GetDistancePos(sqrChr.getXPos(), sqrChr.getDirection(), 50);
|
|
sq_MoveToNearMovablePos(parentObj, xPos, yPos, zPos, xPos, yPos, zPos, 100, -1, 5);
|
|
sq_SetCurrentDirection(parentObj, direction);
|
|
if(!sq_GetSkill(sqrChr, SKILL_BYKK_SUMMONLUIS).isInCoolTime()) sqrChr.startSkillCoolTime(SKILL_BYKK_SUMMONLUIS, sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONLUIS), -1);
|
|
break;
|
|
case 1002://?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭
|
|
parentObj.getVar("skill").setBool(0,true);
|
|
local attackIndex = 4;
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, BLACKLUNATIC_APDPATH)) attackIndex = 10;
|
|
local pIntVec = sq_GetGlobalIntVector();
|
|
sq_IntVectorClear(pIntVec);
|
|
sq_IntVectorPush(pIntVec, attackIndex);
|
|
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
|
|
break;
|
|
case 2001://月蝕長矛
|
|
local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0));
|
|
if(targetObj){
|
|
parentObj.sq_PlaySound("R_LUIS_ATK");
|
|
parentObj.sq_PlaySound("BLACK_LUNATIC_SPEAR_CAST");
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_BLACKLUNATIC, -1, 3, eclipsehive_bonus) + 100;
|
|
local count = sq_GetIntData(sqrChr, SKILL_BYKK_BLACKLUNATIC, 10);
|
|
for(local i = 0; i < count; i++){
|
|
local base_X = -200 + i * 50;
|
|
local base_Z = 180 + i * 30;
|
|
if(i % 2 = 1) base_Z = base_Z + 20;
|
|
local angle = sq_ToDegree(sq_Atan2(base_X.tofloat(), (base_Z-30).tofloat()));
|
|
local moveX = -base_X;
|
|
createPassiveObjectEx_k_k(sqrChr,parentObj,targetObj,SKILL_BYKK_BLACKLUNATIC,1,base_X,0,base_Z,parentObj.getDirection(),totalDamage,angle.tointeger(),moveX,0,0);
|
|
}
|
|
}
|
|
break;
|
|
case 2002://月空破碎
|
|
local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0));
|
|
if(targetObj){
|
|
parentObj.sq_PlaySound("R_LUIS_ATK");
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_BLACKLUNATIC, -1, 2, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,targetObj,SKILL_BYKK_BLACKLUNATIC,2,0,0,0,totalDamage,0,0,0,0);
|
|
}
|
|
break;
|
|
case 2003://月光追擊
|
|
local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0));
|
|
if(targetObj){
|
|
parentObj.sq_PlaySound("R_LUIS_ATK");
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_BLACKLUNATIC, -1, 1, eclipsehive_bonus) + 100;
|
|
local count = sq_GetIntData(sqrChr, SKILL_BYKK_BLACKLUNATIC, 13);
|
|
for(local i = 0; i < count; i++){
|
|
createPassiveObject_k_k(sqrChr,targetObj,SKILL_BYKK_BLACKLUNATIC,3,sq_getRandom(-100,100),sq_getRandom(-50,50),0,totalDamage,0,0,0,0);
|
|
}
|
|
}
|
|
break;
|
|
case 2004://黑暗閃電
|
|
parentObj.sq_PlaySound("R_LUIS_ATK");
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_BLACKLUNATIC, -1, 1, eclipsehive_bonus) + 100;
|
|
totalDamage = totalDamage * sq_GetIntData(sqrChr, SKILL_BYKK_BLACKLUNATIC, 13) * 110 / 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_BLACKLUNATIC,4,250,0,0,totalDamage,0,0,0,0);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function proc_appendage_luis_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
|
|
local parentObj = appendage.getParent();
|
|
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
|
|
if((!sqrChr || sqrChr.getState() == STATE_DIE) || (!parentObj || parentObj.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 t_03 = appendage.getVar("skill_3").get_timer_vector(0);
|
|
local t_04 = appendage.getVar("skill_4").get_timer_vector(0);
|
|
local t_05 = appendage.getVar("skill_5").get_timer_vector(0);
|
|
local t_06 = appendage.getVar("skill_10").get_timer_vector(0);
|
|
local t_07 = appendage.getVar("skill_11").get_timer_vector(0);
|
|
local t_08 = appendage.getVar("skill_12").get_timer_vector(0);
|
|
local currentT = appendage.getTimer().Get();
|
|
|
|
local state = parentObj.getState();
|
|
local attackIndex = parentObj.getAttackIndex();
|
|
|
|
switch(state){
|
|
case STATE_STAND:
|
|
if(sqrChr.getVar("summonmonsterwait").getBool(0)) monsterattack_ksk(parentObj,5);
|
|
local timer = appendage.getVar("atktime").get_ct_vector(0);
|
|
local currentTT = timer.Get();
|
|
if(currentTT < ATK_TIME) 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_05,t_04,t_03,t_02,t_01];
|
|
local attackIndex = [4,3,2,1,0];
|
|
local distanceX = [800,800,500,800,100];
|
|
local distanceXmin = [0,0,50,0,0];
|
|
local distanceY = [800,800,20,800,20];
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, BLACKLUNATIC_APDPATH)){
|
|
skillt = [t_08,t_07,t_06];
|
|
attackIndex = [9,8,7];
|
|
distanceX = [600,600,600];
|
|
distanceXmin = [0,0,0];
|
|
distanceY = [200,200,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]){
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 7) < 1 && i == 0 && !CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, BLACKLUNATIC_APDPATH)) return;
|
|
monsterattack_ksk(parentObj,attackIndex[i]);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case STATE_ATTACK:
|
|
if(attackIndex == 5){
|
|
if(sqrChr.getVar("summonmonsterwait").getBool(0) == false) parentObj.sendStateOnlyPacket(STATE_STAND);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
function onStart_appendage_luis_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
|
|
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);
|
|
}
|
|
|
|
function onEnd_appendage_luis_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj) return;
|
|
parentObj.sendDestroyPacket(true);
|
|
}
|
|
|
|
function onSourceKeyFrameFlag_appendage_ramos_bykk(appendage,flagIndex)
|
|
{
|
|
if(!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj){
|
|
appendage.setValid(false);
|
|
return true;
|
|
}
|
|
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
|
|
if(!sqrChr) return true;
|
|
// if(!sq_IsMyControlObject(sqrChr)) return true;
|
|
|
|
local number = 0;
|
|
local bonus = 1.0;
|
|
local bonus_Max = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONRAMOS, SKILL_BYKK_SUMMONRAMOS, 23, 1.0) + 1100;
|
|
local bonus_deed = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONRAMOS, SKILL_BYKK_SUMMONRAMOS, 24, 1.0) + 100;
|
|
local bonus_spirit = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONRAMOS, SKILL_BYKK_SUMMONRAMOS, 25, 1.0) + 100;
|
|
local monster_Name_spirit = ["EcheverraObj","DarkhigherspiritObj","LighthigherspiritObj","WaterhigherspiritObj","FirehigherspiritObj","SpiritDarkObj","SpiritFireObj","SpiritLightObj","SpiritWaterObj"];
|
|
local monster_Name_deed = ["SandorObj","AuxoObj","LuisObj","BabydragonObj","KrutaObj","HodorObj"];
|
|
for(local i = 0; i < monster_Name_spirit.len(); i++){
|
|
local monster_num_spirit = sqrChr.getVar(monster_Name_spirit[i]).get_obj_vector_size();
|
|
if(monster_num_spirit > 0) number = number + monster_num_spirit;
|
|
}
|
|
bonus = bonus + (number * bonus_spirit).tofloat() / 1000.0;
|
|
number = 0;
|
|
for(local ui = 0; ui < monster_Name_deed.len(); ui++){
|
|
local monster_num_deed = sqrChr.getVar(monster_Name_deed[ui]).get_obj_vector_size();
|
|
if(monster_num_deed > 0) number = number + monster_num_deed;
|
|
}
|
|
bonus = bonus + (number * bonus_deed).tofloat() / 1000.0;
|
|
if(bonus > bonus_Max.tofloat() / 1000.0) bonus = bonus_Max.tofloat() / 1000.0;
|
|
|
|
local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(10).tofloat() / 100.0;
|
|
local eclipsehive_bonus2 = sqrChr.getVar("eclipsehive_bonus").getInt(11).tofloat() / 100.0;
|
|
|
|
switch(flagIndex){
|
|
case 101://嚙踝蕭?
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONRAMOS, SKILL_BYKK_SUMMONRAMOS, 2, bonus*eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONRAMOS,1,0,0,0,totalDamage,0,0,0,0);
|
|
break;
|
|
case 201://嚙踝蕭嚙踝蕭1
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local delay1 = pAni.getDelaySum(0,0);
|
|
local delay2 = pAni.getDelaySum(4,4);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONRAMOS, SKILL_BYKK_SUMMONRAMOS, 5, bonus*eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONRAMOS,21,0,0,0,totalDamage,delay1,delay2,0,0);
|
|
break;
|
|
case 202://嚙踝蕭嚙踝蕭嚙踝蕭2
|
|
monsterattack_ksk(parentObj,2);
|
|
break;
|
|
case 203://嚙踝蕭嚙踝蕭2
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local delay1 = pAni.getDelaySum(0,0);
|
|
local delay2 = pAni.getDelaySum(1,1);
|
|
local delay3 = pAni.getDelaySum(4,4);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONRAMOS, SKILL_BYKK_SUMMONRAMOS, 6, bonus*eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONRAMOS,22,0,0,0,totalDamage,delay1,delay2,delay3,0);
|
|
break;
|
|
case 301://嚙踝蕭?嚙踝蕭?嚙踝蕭嚙踝蕭嚙踝蕭?
|
|
monsterattack_ksk(parentObj,4);
|
|
break;
|
|
case 302://嚙踝蕭?
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local delay1 = pAni.getDelaySum(0,0);
|
|
local delay2 = pAni.getDelaySum(3,3);
|
|
local group = sq_GetGroup(parentObj);
|
|
local uniqueId = sq_GetUniqueId(parentObj);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONRAMOS, SKILL_BYKK_SUMMONRAMOS, 7, bonus*eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONRAMOS,31,0,0,0,totalDamage,group,uniqueId,delay1,delay2);
|
|
break;
|
|
case 303://嚙踝蕭?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭?1
|
|
monsterattack_ksk(parentObj,5);
|
|
break;
|
|
case 304://嚙踝蕭?1
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local delay1 = pAni.getDelaySum(0,0);
|
|
local delay2 = pAni.getDelaySum(4,4);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONRAMOS, SKILL_BYKK_SUMMONRAMOS, 8, bonus*eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONRAMOS,32,0,0,0,totalDamage,delay1,delay2,0,0);
|
|
break;
|
|
case 305://嚙踝蕭?1嚙踝蕭嚙踝蕭?2
|
|
monsterattack_ksk(parentObj,6);
|
|
break;
|
|
case 306://嚙踝蕭?2
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local delay1 = pAni.getDelaySum(0,0);
|
|
local delay2 = pAni.getDelaySum(1,1);
|
|
local delay3 = pAni.getDelaySum(4,4);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONRAMOS, SKILL_BYKK_SUMMONRAMOS, 9, bonus*eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONRAMOS,33,0,0,0,totalDamage,delay1,delay2,delay3,0);
|
|
break;
|
|
case 401://嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local delay = pAni.getDelaySum(0,0);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONRAMOS, SKILL_BYKK_SUMMONRAMOS, 10, bonus*eclipsehive_bonus) + 100;
|
|
local totalDamage2 = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONRAMOS, SKILL_BYKK_SUMMONRAMOS, 11, bonus*eclipsehive_bonus) + 100;
|
|
local hittime = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONRAMOS, SKILL_BYKK_SUMMONRAMOS, 22, 1.0) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONRAMOS,41,100,0,0,totalDamage,totalDamage2,hittime,delay,0);
|
|
break;
|
|
case 402://嚙踝蕭?嚙踝蕭
|
|
monsterattack_ksk(parentObj,8);
|
|
break;
|
|
case 403://嚙踝蕭?嚙踝蕭
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local delay = pAni.getDelaySum(0,0);
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONRAMOS,42,300,0,75,0,delay,0,0,0);
|
|
monsterattack_ksk(parentObj,9);
|
|
break;
|
|
case 501://?嚙踝蕭
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local delay = pAni.getDelaySum(0,0);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONRAMOS, SKILL_BYKK_SUMMONRAMOS, 15, bonus*eclipsehive_bonus2) + 100;
|
|
local hittime = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONRAMOS, SKILL_BYKK_SUMMONRAMOS, 14, 1.0*eclipsehive_bonus2) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONRAMOS,5,0,0,0,totalDamage,hittime,delay,0,0);
|
|
sq_SendCreatePassiveObjectPacket(parentObj, 1008605, 0, 0, 0, 600, parentObj.getDirection());
|
|
break;
|
|
case 502:
|
|
sq_SendCreatePassiveObjectPacket(parentObj, 1008605, 0, 0, 0, 100, parentObj.getDirection());
|
|
break;
|
|
case 601://嚙踝蕭嚙?嚙?
|
|
break;
|
|
case 602://嚙踝蕭?
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local delay = pAni.getDelaySum(6,6);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONRAMOS, SKILL_BYKK_SUMMONRAMOS, 4, bonus*eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONRAMOS,6,0,0,0,totalDamage,delay,0,0,0);
|
|
break;
|
|
case 603://嚙踝蕭嚙?
|
|
parentObj.sendDestroyPacket(true);
|
|
break;
|
|
case 701://嚙踝蕭瓊嚙踝蕭?嚙踝蕭嚙?
|
|
parentObj.getVar("skill").setBool(0,false);
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONRAMOS,74,0,-1,-1,0,0,0,0,0);
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONRAMOS,75,0,-1,-1,0,0,0,0,0);
|
|
sq_SendCreatePassiveObjectPacket(parentObj, 1008605, 0, 0, 0, 600, parentObj.getDirection());
|
|
local objectManager = sqrChr.getObjectManager();
|
|
local objectNumber = objectManager.getCollisionObjectNumber();
|
|
for(local i = 0; i < objectNumber; i++){
|
|
local targetObj = objectManager.getCollisionObject(i);
|
|
if(targetObj && targetObj.isObjectType(OBJECTTYPE_ACTIVE) && targetObj.isEnemy(sqrChr)){
|
|
targetObj = sq_GetCNRDObjectToActiveObject(targetObj);
|
|
sq_AddDrawOnlyAniFromParent(targetObj,"monster/character/mage/madeby_k_k/ramos/animation/meal/2down_03.ani", 0, 0, 0);
|
|
local appendagePath = "character/mage/k_k_made/appendage/aptomonster/debuff/ap_holdedmonster.nut";
|
|
local MasterAppendage = CNSquirrelAppendage.sq_AppendAppendage(targetObj, sqrChr, -1, false, appendagePath, true);
|
|
if(MasterAppendage){
|
|
sq_HoldAndDelayDie(targetObj, sqrChr, true, false, false, 100, 5000, ENUM_DIRECTION_NEUTRAL , MasterAppendage);
|
|
local validT = MasterAppendage.getAppendageInfo();
|
|
validT.setValidTime(5500);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 702://嚙踝蕭?
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local delay = pAni.getDelaySum(9,9);
|
|
local delay2 = pAni.getDelaySum(10,10);
|
|
local delay3 = pAni.getDelaySum(23,23);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_BUGFALL, SKILL_BYKK_BUGFALL, 1, bonus) + 100;
|
|
local hittime = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_BUGFALL, SKILL_BYKK_BUGFALL, 2, 1.0) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONRAMOS,71,0,0,0,totalDamage,hittime,delay,delay2,delay3);
|
|
break;
|
|
case 703://嚙踝蕭??葞?嚙踝蕭?嚙賦ㄛ嚙踝蕭?嚙踝蕭
|
|
local effectObj1 = sqrChr.getVar("RamosEffect1").get_obj_vector(0);
|
|
local effectObj2 = sqrChr.getVar("RamosEffect2").get_obj_vector(0);
|
|
if(effectObj1) effectObj1.setValid(false);
|
|
if(effectObj2) effectObj2.setValid(false);
|
|
sq_SendCreatePassiveObjectPacket(parentObj, 1008605, 0, 0, 0, 100, parentObj.getDirection());
|
|
local monsternumber = 0;
|
|
local objectManager = sqrChr.getObjectManager();
|
|
local objectNumber = objectManager.getCollisionObjectNumber();
|
|
for(local i = 0; i < objectNumber; i++){
|
|
local targetObj = objectManager.getCollisionObject(i);
|
|
if(targetObj && targetObj.isObjectType(OBJECTTYPE_ACTIVE) && targetObj.isEnemy(sqrChr)){
|
|
monsternumber = monsternumber + 1;
|
|
}
|
|
}
|
|
if(monsternumber > 0){
|
|
monsterattack_ksk(parentObj,13);
|
|
}
|
|
else{
|
|
monsterattack_ksk(parentObj,14);
|
|
}
|
|
break;
|
|
case 704://嚙踝蕭?嚙踝蕭嚙踝蕭?
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local delay = pAni.getDelaySum(0,0);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_BUGFALL, SKILL_BYKK_BUGFALL, 3, bonus) + 100;
|
|
local hittime = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_BUGFALL, SKILL_BYKK_BUGFALL, 4, 1.0) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONRAMOS,72,0,0,0,totalDamage,hittime,delay,0,0);
|
|
break;
|
|
case 705://嚙踝蕭?嚙踝蕭
|
|
monsterattack_ksk(parentObj,15);//14
|
|
break;
|
|
case 706://晡嚙踝蕭嚙?+嚙踝蕭嚙踝蕭
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local delay = pAni.getDelaySum(0,0);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_BUGFALL, SKILL_BYKK_BUGFALL, 5, bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONRAMOS,73,0,0,0,totalDamage,delay,0,0,0);
|
|
break;
|
|
case 1001://?嚙踝蕭嚙踝蕭嚙?
|
|
local direction = sqrChr.getDirection();
|
|
local yPos = sqrChr.getYPos();
|
|
local xPos = sq_GetDistancePos(sqrChr.getXPos(), sqrChr.getDirection(), 50);
|
|
sq_MoveToNearMovablePos(parentObj, xPos, yPos, 0, xPos, yPos, 0, 100, -1, 5);
|
|
sq_SetCurrentDirection(parentObj, direction);
|
|
if(!sq_GetSkill(sqrChr, SKILL_BYKK_SUMMONRAMOS).isInCoolTime()) sqrChr.startSkillCoolTime(SKILL_BYKK_SUMMONRAMOS, sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONRAMOS), -1);
|
|
break;
|
|
case 1002://?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭
|
|
local attackIndex = 10;
|
|
if(parentObj.getVar("skill").getBool(0) == true) attackIndex = 12;
|
|
local pIntVec = sq_GetGlobalIntVector();
|
|
sq_IntVectorClear(pIntVec);
|
|
sq_IntVectorPush(pIntVec, attackIndex);
|
|
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function proc_appendage_ramos_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
|
|
local parentObj = appendage.getParent();
|
|
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
|
|
if((!sqrChr || sqrChr.getState() == STATE_DIE) || (!parentObj || parentObj.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 t_03 = appendage.getVar("skill_3").get_timer_vector(0);//?嚙踝蕭
|
|
local t_04 = appendage.getVar("skill_4").get_timer_vector(0);//?嚙踝蕭
|
|
local currentT = appendage.getTimer().Get();
|
|
|
|
local state = parentObj.getState();
|
|
local attackIndex = parentObj.getAttackIndex();
|
|
|
|
if(sqrChr.getState() == 53){
|
|
monsterattack_ksk(parentObj,11);
|
|
return;
|
|
}
|
|
|
|
switch(state){
|
|
case STATE_STAND:
|
|
if(sqrChr.getVar("summonmonsterwait").getBool(0)){
|
|
local pIntVec = sq_GetGlobalIntVector();
|
|
sq_IntVectorClear(pIntVec);
|
|
sq_IntVectorPush(pIntVec, 16);
|
|
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_IGNORE_FORCE);
|
|
}
|
|
local timer = appendage.getVar("atktime").get_ct_vector(0);
|
|
local currentTT = timer.Get();
|
|
if(currentTT < ATK_TIME) 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_04,t_03,t_02,t_01];
|
|
local attackIndex = [10,7,3,1];
|
|
local distanceX = [400,350,800,200];
|
|
local distanceXmin = [0,0,0,0];
|
|
local distanceY = [50,30,600,30];
|
|
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_ksk(parentObj,attackIndex[i]);
|
|
if(attackIndex[i] == 2){
|
|
parentObj.getVar("move").set_vector(0,parentObj.getXPos());
|
|
parentObj.getVar("move").set_vector(1,150);
|
|
}
|
|
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 4:
|
|
local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0));
|
|
if(targetObj){
|
|
if(sq_GetDistanceObject(parentObj, targetObj, false) < 90){
|
|
monsterattack_ksk(parentObj,5);
|
|
return;
|
|
}
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local currentT = sq_GetCurrentTime(pAni);
|
|
local fireT = 600;//pAni.getDelaySum(0,3);
|
|
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);
|
|
}
|
|
}
|
|
break;
|
|
case 16:
|
|
if(sqrChr.getVar("summonmonsterwait").getBool(0) == false) parentObj.sendStateOnlyPacket(STATE_STAND);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onStart_appendage_ramos_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
if(sq_IsMyControlObject(parentObj)){
|
|
monsterattack_ksk(parentObj,0);
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
function onEnd_appendage_ramos_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj) return;
|
|
// parentObj.sendDestroyPacket(true);
|
|
parentObj.setValid(false);
|
|
}
|
|
|
|
function onAttackParent_appendage_ramos_bykk(appendage, realAttacker, damager, boundingBox, isStuck)
|
|
{
|
|
if(!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
|
|
local attackIndex = parentObj.getAttackIndex();
|
|
switch(attackIndex){
|
|
case 10:
|
|
if(damager && !CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/mage/k_k_made/appendage/aptomonster/debuff/ap_pulledmonster.nut")){
|
|
local appendagePath = "character/mage/k_k_made/appendage/aptomonster/debuff/ap_pulledmonster.nut";
|
|
damager = sq_GetCNRDObjectToActiveObject(damager);
|
|
local MasterAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, sqrChr, -1, false, appendagePath, true);
|
|
if(MasterAppendage){
|
|
sq_AccelMoveToAppendageForce(damager, sqrChr, parentObj, 200, 0, 0, 1000, true, MasterAppendage, true);
|
|
local validT = MasterAppendage.getAppendageInfo()
|
|
validT.setValidTime(2000);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onSourceKeyFrameFlag_appendage_sandor_bykk(appendage,flagIndex)
|
|
{
|
|
if(!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj){
|
|
appendage.setValid(false);
|
|
return true;
|
|
}
|
|
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
|
|
if(!sqrChr) return true;
|
|
// if(!sq_IsMyControlObject(sqrChr)) return true;
|
|
|
|
local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(10).tofloat() / 100.0;
|
|
local eclipsehive_bonus2 = sqrChr.getVar("eclipsehive_bonus").getInt(11).tofloat() / 100.0;
|
|
|
|
switch(flagIndex){
|
|
case 101://?嚙踝蕭
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local delay1 = pAni.getDelaySum(4,4);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSANDOR, SKILL_BYKK_SUMMONSANDOR, 12, eclipsehive_bonus) + 100;
|
|
local group = sq_GetGroup(parentObj);
|
|
local uniqueId = sq_GetUniqueId(parentObj);
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 35) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0) == true){
|
|
totalDamage = totalDamage * 70 / 100;
|
|
}
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSANDOR,1,0,0,0,totalDamage,delay1,group,uniqueId,0);
|
|
break;
|
|
case 102:
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 33) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0) == false){
|
|
if(parentObj.getVar("attackbool").getBool(0)){
|
|
parentObj.getVar("attackbool").setBool(0, false);
|
|
parentObj.getVar("move").set_vector(0,parentObj.getXPos());
|
|
parentObj.getVar("move").set_vector(1,0);
|
|
parentObj.getVar("move").set_vector(2,0);
|
|
parentObj.getVar("move").set_vector(3,4);
|
|
monsterattack_ksk(parentObj,0);
|
|
}
|
|
else{
|
|
parentObj.getVar("attackbool").setBool(0, true);
|
|
}
|
|
}
|
|
break;
|
|
case 201://嚙踝蕭嚙踝蕭
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local delay1 = pAni.getDelaySum(4,4);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSANDOR, SKILL_BYKK_SUMMONSANDOR, 14, eclipsehive_bonus) + 100;
|
|
local group = sq_GetGroup(parentObj);
|
|
local uniqueId = sq_GetUniqueId(parentObj);
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 35) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0) == true){
|
|
totalDamage = totalDamage * 70 / 100;
|
|
}
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSANDOR,1,0,0,0,totalDamage,delay1,group,uniqueId,0);
|
|
break;
|
|
case 202:
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 34) > 0){
|
|
parentObj.getVar("attackbool").setBool(1, true);
|
|
parentObj.getVar("move").set_vector(0,parentObj.getXPos());
|
|
parentObj.getVar("move").set_vector(1,0);
|
|
parentObj.getVar("move").set_vector(2,0);
|
|
parentObj.getVar("move").set_vector(3,4);
|
|
monsterattack_ksk(parentObj,0);
|
|
}
|
|
break;
|
|
case 301:
|
|
local attackIndex = parentObj.getAttackIndex();
|
|
switch(attackIndex){
|
|
case 2:
|
|
local hpMax = parentObj.getHpMax();
|
|
local hp = parentObj.getHp();
|
|
parentObj.setHp((hp + hpMax / 100 * 20).tointeger(), null, true);
|
|
break;
|
|
case 3:
|
|
if(!CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/mage/k_k_made/appendage/aptomonster/skill_ap/ap_sandor_buff.nut")){
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(parentObj, sqrChr, 44, false, "character/mage/k_k_made/appendage/aptomonster/skill_ap/ap_sandor_buff.nut", true);
|
|
AddAppendage.getVar("sqrChr").clear_obj_vector();
|
|
AddAppendage.getVar("sqrChr").push_obj_vector(sqrChr);
|
|
AddAppendage.sq_SetValidTime(35000);
|
|
AddAppendage.getVar("custominfo").clear_vector();
|
|
AddAppendage.getVar("custominfo").push_vector(300);
|
|
AddAppendage.getVar("custominfo").push_vector(20);
|
|
AddAppendage.getVar("custominfo").push_vector(20);
|
|
local skill_level = sq_GetSkillLevel(sqrChr, 44);
|
|
AddAppendage.getVar("custominfo").push_vector(skill_level);
|
|
|
|
AddAppendage.getVar("a").clear_timer_vector();
|
|
AddAppendage.getVar("a").push_timer_vector();
|
|
local t = AddAppendage.getVar("a").get_timer_vector(0);
|
|
t.setParameter(1500, -1);
|
|
t.resetInstant(0);
|
|
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 401:
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local delay1 = pAni.getDelaySum(7,7);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSANDOR, SKILL_BYKK_SUMMONSANDOR, 16, eclipsehive_bonus2) + 100;
|
|
local sizeRate = 100;
|
|
local add_Rate = 0;
|
|
if(sqrChr.getVar("eclipsehive_select").getBool(0)){
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 33) > 0){
|
|
sizeRate = sizeRate + 10; add_Rate = add_Rate + 10;
|
|
}
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 34) > 0){
|
|
sizeRate = sizeRate + 20; add_Rate = add_Rate + 20;
|
|
}
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 35) > 0){
|
|
sizeRate = sizeRate + 20;
|
|
}
|
|
}
|
|
if(add_Rate > 0) totalDamage = totalDamage * (100 + add_Rate) / 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSANDOR,4,25,0,50,totalDamage,delay1,sizeRate,0,0);
|
|
break;
|
|
case 501:
|
|
for(local i = 0; i < 12; i++){
|
|
sq_ReleaseActiveStatus(parentObj, i);
|
|
}
|
|
break;
|
|
case 1001:
|
|
local direction = parentObj.getVar("teleport").getInt(10);
|
|
local yPos = parentObj.getVar("teleport").getInt(12);
|
|
local xPos = parentObj.getVar("teleport").getInt(11);
|
|
sq_MoveToNearMovablePos(parentObj, xPos, yPos, 0, xPos, yPos, 0, 100, -1, 5);
|
|
sq_SetCurrentDirection(parentObj, direction);
|
|
sq_SimpleMoveToNearMovablePos(parentObj,200);
|
|
if(!sq_GetSkill(sqrChr, SKILL_BYKK_SUMMONSANDOR).isInCoolTime()) sqrChr.startSkillCoolTime(SKILL_BYKK_SUMMONSANDOR, sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONSANDOR), -1);
|
|
break;
|
|
case 1002:
|
|
parentObj.getVar("move").set_vector(0,parentObj.getXPos());
|
|
parentObj.getVar("move").set_vector(1,80);
|
|
parentObj.getVar("move").set_vector(2,7);
|
|
parentObj.getVar("move").set_vector(3,16);
|
|
monsterattack_ksk(parentObj,4);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function proc_appendage_sandor_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
|
|
local parentObj = appendage.getParent();
|
|
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
|
|
if((!sqrChr || sqrChr.getState() == STATE_DIE) || (!parentObj || parentObj.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 t_03 = appendage.getVar("skill_3").get_timer_vector(0);
|
|
local t_04 = appendage.getVar("skill_4").get_timer_vector(0);
|
|
local t_05 = appendage.getVar("skill_5").get_timer_vector(0);
|
|
local currentT = appendage.getTimer().Get();
|
|
|
|
local state = parentObj.getState();
|
|
local attackIndex = parentObj.getAttackIndex();
|
|
|
|
switch(state){
|
|
case STATE_STAND:
|
|
if(sqrChr.getVar("summonmonsterwait").getBool(0)) monsterattack_ksk(parentObj,5);
|
|
local timer = appendage.getVar("atktime").get_ct_vector(0);
|
|
local currentTT = timer.Get();
|
|
if(currentTT < ATK_TIME) return;
|
|
timer.Reset();
|
|
timer.Start(10000,0);
|
|
|
|
if(t_03 && t_03.isOnEvent(currentT)){
|
|
monsterattack_ksk(parentObj,2);
|
|
return;
|
|
}
|
|
else if(t_04 && t_04.isOnEvent(currentT)){
|
|
monsterattack_ksk(parentObj,3);
|
|
return;
|
|
}
|
|
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_05,t_02,t_01];
|
|
local attackIndex = [4,1,0];
|
|
local distanceX = [300,200,200];
|
|
local distanceXmin = [0,0,0];
|
|
local distanceY = [30,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]){
|
|
if(i == 2){
|
|
parentObj.getVar("move").set_vector(0,parentObj.getXPos());
|
|
parentObj.getVar("move").set_vector(1,30);
|
|
parentObj.getVar("move").set_vector(2,0);
|
|
parentObj.getVar("move").set_vector(3,4);
|
|
}
|
|
else if(i == 1){
|
|
parentObj.getVar("move").set_vector(0,parentObj.getXPos());
|
|
parentObj.getVar("move").set_vector(1,60);
|
|
parentObj.getVar("move").set_vector(2,4);
|
|
parentObj.getVar("move").set_vector(3,6);
|
|
}
|
|
else if(i == 0){
|
|
parentObj.getVar("move").set_vector(0,parentObj.getXPos());
|
|
parentObj.getVar("move").set_vector(1,60);
|
|
parentObj.getVar("move").set_vector(2,7);
|
|
parentObj.getVar("move").set_vector(3,16);
|
|
}
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 9) < 1 && i == 0) return;
|
|
monsterattack_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:
|
|
case 1:
|
|
case 4:
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local currentT = sq_GetCurrentTime(pAni);
|
|
if(attackIndex == 1) currentT = currentT - pAni.getDelaySum(0, 3);
|
|
if(attackIndex == 4) currentT = currentT - pAni.getDelaySum(0, 6);
|
|
local frameIndex = sq_GetAnimationFrameIndex(pAni);
|
|
local framestart = parentObj.getVar("move").get_vector(2);
|
|
local frameend = parentObj.getVar("move").get_vector(3);
|
|
local fireT = pAni.getDelaySum(framestart, frameend);
|
|
local srcX = parentObj.getVar("move").get_vector(0);
|
|
local MoveX = parentObj.getVar("move").get_vector(1);
|
|
local v = sq_GetAccel(0, MoveX, currentT, fireT, false);
|
|
local dstX = sq_GetDistancePos(srcX, parentObj.getDirection(), v);
|
|
if(frameIndex >= framestart && frameIndex <= frameend){
|
|
if(parentObj.isMovablePos(dstX,parentObj.getYPos())){
|
|
sq_setCurrentAxisPos(parentObj, 0, dstX);
|
|
}
|
|
else{
|
|
parentObj.getVar("skill2").set_vector(0,parentObj.getXPos());
|
|
parentObj.getVar("move").set_vector(1,0);
|
|
}
|
|
}
|
|
break;
|
|
case 5:
|
|
if(sqrChr.getVar("summonmonsterwait").getBool(0) == false) parentObj.sendStateOnlyPacket(STATE_STAND);
|
|
break;
|
|
}
|
|
break;
|
|
case STATE_SIT_FOREVER:
|
|
case STATE_DAMAGE:
|
|
case STATE_HOLD:
|
|
local timer = parentObj.getVar().get_ct_vector(0);
|
|
local currentT = timer.Get();
|
|
if(currentT > 5000){
|
|
monsterattack_ksk(parentObj,7);
|
|
timer.Reset();//嚙踝蕭嚙踝蕭嚙?
|
|
timer.Start(10000,0);//???嚙?
|
|
return;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onStart_appendage_sandor_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
//local parentObj = appendage.getParent();
|
|
|
|
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);
|
|
}
|
|
|
|
function onEnd_appendage_sandor_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj) return;
|
|
parentObj.sendDestroyPacket(true);
|
|
}
|
|
|
|
function onSourceKeyFrameFlag_appendage_spirit_bykk(appendage,flagIndex)
|
|
{
|
|
if(!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj){
|
|
appendage.setValid(false);
|
|
return true;
|
|
}
|
|
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
|
|
if(!sqrChr) return true;
|
|
// if(!sq_IsMyControlObject(sqrChr)) return true;
|
|
|
|
local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(10).tofloat() / 100.0;
|
|
local eclipsehive_bonus2 = sqrChr.getVar("eclipsehive_bonus").getInt(11).tofloat() / 100.0;
|
|
|
|
if(sqrChr.getVar("eclipsehive_select").getBool(0) == false){
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 36) > 0) eclipsehive_bonus = eclipsehive_bonus + 0.1;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 37) > 0) eclipsehive_bonus = eclipsehive_bonus + 0.1;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 38) > 0){
|
|
if(flagIndex != 201 && flagIndex != 202 && flagIndex != 203 && flagIndex != 1002) eclipsehive_bonus = eclipsehive_bonus + 0.6;
|
|
else eclipsehive_bonus = eclipsehive_bonus + 0.1;
|
|
}
|
|
}
|
|
|
|
switch(flagIndex){
|
|
case 101://嚙踝蕭1
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local delay1 = pAni.getDelaySum(2,2);
|
|
local delay2 = pAni.getDelaySum(3,3);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITDARK, SKILL_BYKK_SUMMONSPIRITDARK, 5, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITCOMMON,101,0,0,0,totalDamage,delay1,delay2,0,0);
|
|
break;
|
|
case 102://嚙踝蕭2
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local delay1 = pAni.getDelaySum(4,4);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITDARK, SKILL_BYKK_SUMMONSPIRITDARK, 5, 1.2*eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITCOMMON,102,0,0,0,totalDamage,delay1,0,0,0);
|
|
break;
|
|
case 201://嚙踝蕭1
|
|
case 202://嚙踝蕭1
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local delay1 = pAni.getDelaySum(1,1);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITFIRE, SKILL_BYKK_SUMMONSPIRITFIRE, 6, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITCOMMON,201,0,0,0,totalDamage,delay1,0,0,0);
|
|
break;
|
|
case 203:
|
|
local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0));
|
|
if(targetObj){
|
|
parentObj.getVar("skill2").set_vector(0,parentObj.getXPos());
|
|
parentObj.getVar("skill2").set_vector(1,parentObj.getYPos());
|
|
local moveX = sq_Abs(targetObj.getXPos() - parentObj.getXPos()) + sq_getRandom(0,60);
|
|
parentObj.getVar("skill2").set_vector(2,moveX);
|
|
parentObj.getVar("skill2").set_vector(3,targetObj.getYPos() - parentObj.getYPos());
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITFIRE, SKILL_BYKK_SUMMONSPIRITFIRE, 6, 1.2*eclipsehive_bonus) + 100;
|
|
local group = sq_GetGroup(parentObj);
|
|
local uniqueId = sq_GetUniqueId(parentObj);
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITCOMMON,202,0,0,0,totalDamage,500,group,uniqueId,0);
|
|
}
|
|
monsterattack_ksk(parentObj,4);
|
|
break;
|
|
case 301://嚙踝蕭1
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local delay1 = pAni.getDelaySum(3,3);
|
|
local delay2 = pAni.getDelaySum(5,5);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITLIGHT, SKILL_BYKK_SUMMONSPIRITLIGHT, 6, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITCOMMON,301,0,0,0,totalDamage,delay1,delay2,0,0);
|
|
break;
|
|
case 302://嚙踝蕭2
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local delay1 = pAni.getDelaySum(2,2);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITLIGHT, SKILL_BYKK_SUMMONSPIRITLIGHT, 6, 1.2*eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITCOMMON,302,0,0,0,totalDamage,delay1,0,0,0);
|
|
break;
|
|
case 401://?1
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local delay1 = pAni.getDelaySum(2,2);
|
|
local delay2 = pAni.getDelaySum(3,3);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITWATER, SKILL_BYKK_SUMMONSPIRITWATER, 6, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITCOMMON,401,0,0,0,totalDamage,delay1,delay2,0,0);
|
|
break;
|
|
case 402://?2
|
|
local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0));
|
|
if(targetObj){
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITWATER, SKILL_BYKK_SUMMONSPIRITWATER, 6, 1.2*eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,targetObj,SKILL_BYKK_SUMMONSPIRITCOMMON,402,0,0,0,totalDamage,0,0,0,0);
|
|
}
|
|
break;
|
|
case 1001://?嚙踝蕭嚙踝蕭嚙?
|
|
local direction = sqrChr.getDirection();
|
|
local yPos = sqrChr.getYPos()+sq_getRandom(-10,10);
|
|
local xPos = sq_GetDistancePos(sqrChr.getXPos(), sqrChr.getDirection(), 200+sq_getRandom(-20,20));
|
|
sq_MoveToNearMovablePos(parentObj, xPos, yPos, 0, xPos, yPos, 0, 100, -1, 5);
|
|
sq_SetCurrentDirection(parentObj, direction);
|
|
break;
|
|
case 1002://?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭
|
|
local Index = parentObj.getCollisionObjectIndex();
|
|
local skill_level = sq_GetSkillLevel(sqrChr, 49);
|
|
switch(Index){
|
|
case MONSTER_ID_SPIRITDARK://嚙踝蕭
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 49, 49, 20, 1.0) + 100,sizeRate = sq_GetBonusRateWithPassive(sqrChr, 49, 49, 19, 1.0) + 100,prob = sq_GetLevelData(sqrChr,49, 21, skill_level),time = sq_GetLevelData(sqrChr,49, 23, skill_level);
|
|
local Ex_level = sq_GetSkillLevel(sqrChr, 53);
|
|
if(Ex_level > 0){
|
|
totalDamage = sq_GetBonusRateWithPassive(sqrChr, 53, 53, 1, 1.0) + 100;
|
|
sizeRate = sq_GetBonusRateWithPassive(sqrChr, 53, 53, 0, 1.0) + 100;
|
|
prob = sq_GetLevelData(sqrChr,53, 2, Ex_level);
|
|
time = sq_GetLevelData(sqrChr,53, 4, Ex_level);
|
|
}
|
|
if(sqrChr.getVar("eclipsehive_select").getBool(0)){
|
|
local add_Rate = 0, add_Rate2 = 0;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 36) > 0){add_Rate = add_Rate + 10; add_Rate2 = add_Rate2 + 10;}
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 37) > 0){add_Rate = add_Rate + 10; add_Rate2 = add_Rate2 + 10;}
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 38) > 0){add_Rate = add_Rate + 30;}
|
|
if(add_Rate > 0){ sizeRate = sizeRate * (100 + add_Rate) / 100; totalDamage = totalDamage * (100 + add_Rate2) / 100; }
|
|
}
|
|
local sub = 1002;
|
|
if(sqrChr.getVar("sacrifice").getBool(0)){
|
|
sub = 1001;
|
|
sqrChr.getVar("sacrifice").setBool(0, false);
|
|
}
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITCOMMON,sub,0,0,20,totalDamage,sizeRate,1,prob,time);
|
|
break;
|
|
case MONSTER_ID_SPIRITFIRE://嚙踝蕭
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 49, 49, 7, 1.0) + 100,sizeRate = sq_GetBonusRateWithPassive(sqrChr, 49, 49, 6, 1.0) + 100,prob = sq_GetLevelData(sqrChr,49, 8, skill_level),time = sq_GetLevelData(sqrChr,49, 10, skill_level);
|
|
local Ex_level = sq_GetSkillLevel(sqrChr, 51);
|
|
if(Ex_level > 0){
|
|
totalDamage = sq_GetBonusRateWithPassive(sqrChr, 51, 51, 1, 1.0) + 100;
|
|
sizeRate = sq_GetBonusRateWithPassive(sqrChr, 51, 51, 0, 1.0) + 100;
|
|
prob = sq_GetLevelData(sqrChr,51, 2, Ex_level);
|
|
time = sq_GetLevelData(sqrChr,51, 4, Ex_level);
|
|
}
|
|
if(sqrChr.getVar("eclipsehive_select").getBool(0)){
|
|
local add_Rate = 0, add_Rate2 = 0;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 36) > 0){add_Rate = add_Rate + 10; add_Rate2 = add_Rate2 + 10;}
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 37) > 0){add_Rate = add_Rate + 10; add_Rate2 = add_Rate2 + 10;}
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 38) > 0){add_Rate = add_Rate + 30;}
|
|
if(add_Rate > 0){ sizeRate = sizeRate * (100 + add_Rate) / 100; totalDamage = totalDamage * (100 + add_Rate2) / 100; }
|
|
}
|
|
local sub = 1002;
|
|
if(sqrChr.getVar("sacrifice").getBool(1)){
|
|
sub = 1001;
|
|
sqrChr.getVar("sacrifice").setBool(1, false);
|
|
}
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITCOMMON,sub,0,0,35,totalDamage,sizeRate,2,prob,time);
|
|
break;
|
|
case MONSTER_ID_SPIRITLIGHT://嚙踝蕭
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 49, 49, 26, 1.0) + 100,sizeRate = sq_GetBonusRateWithPassive(sqrChr, 49, 49, 25, 0.67) + 100,prob = sq_GetLevelData(sqrChr,49, 27, skill_level),time = sq_GetLevelData(sqrChr,49, 29, skill_level);
|
|
local Ex_level = sq_GetSkillLevel(sqrChr, 54);
|
|
if(Ex_level > 0){
|
|
totalDamage = sq_GetBonusRateWithPassive(sqrChr, 54, 54, 1, 1.0) + 100;
|
|
sizeRate = sq_GetBonusRateWithPassive(sqrChr, 54, 54, 0, 0.67) + 100;
|
|
prob = sq_GetLevelData(sqrChr,54, 2, Ex_level);
|
|
time = sq_GetLevelData(sqrChr,54, 4, Ex_level);
|
|
}
|
|
if(sqrChr.getVar("eclipsehive_select").getBool(0)){
|
|
local add_Rate = 0, add_Rate2 = 0;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 36) > 0){add_Rate = add_Rate + 10; add_Rate2 = add_Rate2 + 10;}
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 37) > 0){add_Rate = add_Rate + 10; add_Rate2 = add_Rate2 + 10;}
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 38) > 0){add_Rate = add_Rate + 30;}
|
|
if(add_Rate > 0){ sizeRate = sizeRate * (100 + add_Rate) / 100; totalDamage = totalDamage * (100 + add_Rate2) / 100; }
|
|
}
|
|
local sub = 1002;
|
|
if(sqrChr.getVar("sacrifice").getBool(2)){
|
|
sub = 1001;
|
|
sqrChr.getVar("sacrifice").setBool(2, false);
|
|
}
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITCOMMON,sub,0,0,35,totalDamage,sizeRate,3,prob,time);
|
|
break;
|
|
case MONSTER_ID_SPIRITWATER://?
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 49, 49, 15, 1.0) + 100,sizeRate = sq_GetBonusRateWithPassive(sqrChr, 49, 49, 14, 0.2) + 100,prob = sq_GetLevelData(sqrChr,49, 16, skill_level),time = sq_GetLevelData(sqrChr,49, 18, skill_level);
|
|
local Ex_level = sq_GetSkillLevel(sqrChr, 52);
|
|
if(Ex_level > 0){
|
|
totalDamage = sq_GetBonusRateWithPassive(sqrChr, 52, 52, 1, 1.0) + 100;
|
|
sizeRate = sq_GetBonusRateWithPassive(sqrChr, 52, 52, 0, 0.2) + 100;
|
|
prob = sq_GetLevelData(sqrChr,52, 2, Ex_level);
|
|
time = sq_GetLevelData(sqrChr,52, 4, Ex_level);
|
|
}
|
|
if(sqrChr.getVar("eclipsehive_select").getBool(0)){
|
|
local add_Rate = 0, add_Rate2 = 0;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 36) > 0){add_Rate = add_Rate + 10; add_Rate2 = add_Rate2 + 10;}
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 37) > 0){add_Rate = add_Rate + 10; add_Rate2 = add_Rate2 + 10;}
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 38) > 0){add_Rate = add_Rate + 30;}
|
|
if(add_Rate > 0){ sizeRate = sizeRate * (100 + add_Rate) / 100; totalDamage = totalDamage * (100 + add_Rate2) / 100; }
|
|
}
|
|
local sub = 1002;
|
|
if(sqrChr.getVar("sacrifice").getBool(3)){
|
|
sub = 1001;
|
|
sqrChr.getVar("sacrifice").setBool(3, false);
|
|
}
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITCOMMON,sub,0,0,35,totalDamage,sizeRate,4,prob,time);
|
|
break;
|
|
}
|
|
parentObj.setValid(false);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function proc_appendage_spirit_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
|
|
local parentObj = appendage.getParent();
|
|
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
|
|
if((!sqrChr || sqrChr.getState() == STATE_DIE) || (!parentObj || parentObj.getState() == STATE_DIE)){
|
|
appendage.setValid(false);
|
|
return;
|
|
}
|
|
|
|
if(!sq_IsMyControlObject(sqrChr)) return;
|
|
|
|
local t_01 = appendage.getVar("skill_1").get_timer_vector(0);//嚙踝蕭嚙踝蕭1
|
|
local t_02 = appendage.getVar("skill_2").get_timer_vector(0);//嚙踝蕭嚙踝蕭2
|
|
local currentT = appendage.getTimer().Get();
|
|
|
|
local state = parentObj.getState();
|
|
local attackIndex = parentObj.getAttackIndex();
|
|
local Index = parentObj.getCollisionObjectIndex();
|
|
|
|
switch(state){
|
|
case STATE_STAND:
|
|
if(sqrChr.getVar("summonmonsterwait").getBool(0)) monsterattack_ksk(parentObj,2);
|
|
local timer = appendage.getVar("atktime").get_ct_vector(0);
|
|
local currentTT = timer.Get();
|
|
local tiaozheng = 0;
|
|
if(sqrChr.getVar("eclipsehive_select").getBool(0) == false){
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 37) > 0) tiaozheng = tiaozheng - 100;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 38) > 0) tiaozheng = tiaozheng - 100;
|
|
}
|
|
if(currentTT < ATK_TIME + tiaozheng) 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],attackIndex = [1,0],distanceX,distanceY;
|
|
switch(Index){
|
|
case MONSTER_ID_SPIRITDARK://嚙踝蕭
|
|
distanceX = [75,50];distanceY = [15,8];
|
|
break;
|
|
case MONSTER_ID_SPIRITFIRE://嚙踝蕭
|
|
distanceX = [400,50];distanceY = [300,8];
|
|
break;
|
|
case MONSTER_ID_SPIRITLIGHT://嚙踝蕭
|
|
distanceX = [150,100];distanceY = [35,8];
|
|
break;
|
|
case MONSTER_ID_SPIRITWATER://?
|
|
distanceX = [400,75];distanceY = [400,8];
|
|
break;
|
|
}
|
|
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.getYPos() - parentObj.getYPos()) <= distanceY[i]){
|
|
monsterattack_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:
|
|
if(attackIndex == 2){
|
|
if(sqrChr.getVar("summonmonsterwait").getBool(0) == false) parentObj.sendStateOnlyPacket(STATE_STAND);
|
|
return;
|
|
}
|
|
switch(Index){
|
|
case MONSTER_ID_SPIRITDARK://嚙踝蕭
|
|
break;
|
|
case MONSTER_ID_SPIRITFIRE://嚙踝蕭
|
|
switch(attackIndex){
|
|
case 4:
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local currentT = sq_GetCurrentTime(pAni);
|
|
local fireT = 500;
|
|
local srcX = parentObj.getVar("skill2").get_vector(0);
|
|
local srcY = parentObj.getVar("skill2").get_vector(1);
|
|
local MoveX = parentObj.getVar("skill2").get_vector(2);//嚙?嚙踝蕭嚙綞嚙踝蕭?
|
|
local MoveY = parentObj.getVar("skill2").get_vector(3);//嚙?嚙踝蕭嚙緙嚙踝蕭?
|
|
local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT);
|
|
local vy = sq_GetUniformVelocity(0, MoveY, currentT, fireT);
|
|
local dstX = sq_GetDistancePos(srcX, parentObj.getDirection(), v);//嚙踝蕭嚙踝蕭菾嚙踝蕭?蓱?嚙踝蕭??
|
|
if(parentObj.isMovablePos(dstX, srcY + vy)){
|
|
sq_setCurrentAxisPos(parentObj, 0, dstX);//?嚙踝蕭?嚙踝蕭x嚙?
|
|
sq_setCurrentAxisPos(parentObj, 1, srcY + vy);//?嚙踝蕭?嚙踝蕭y嚙?
|
|
}
|
|
else{
|
|
parentObj.getVar("skill2").set_vector(0,parentObj.getXPos());
|
|
parentObj.getVar("skill2").set_vector(1,parentObj.getYPos());
|
|
parentObj.getVar("skill2").set_vector(2,0);
|
|
parentObj.getVar("skill2").set_vector(3,0);
|
|
}
|
|
if(currentT > fireT) parentObj.sendStateOnlyPacket(STATE_STAND);
|
|
break;
|
|
}
|
|
break;
|
|
case MONSTER_ID_SPIRITLIGHT://嚙踝蕭
|
|
break;
|
|
case MONSTER_ID_SPIRITWATER://?
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onStart_appendage_spirit_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
|
|
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);
|
|
}
|
|
|
|
function onEnd_appendage_spirit_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj) return;
|
|
parentObj.sendDestroyPacket(true);
|
|
}
|
|
|
|
|
|
function onSourceKeyFrameFlag_appendage_waterhigherspirit_bykk(appendage,flagIndex)
|
|
{
|
|
if(!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj){
|
|
appendage.setValid(false);
|
|
return true;
|
|
}
|
|
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
|
|
if(!sqrChr) return true;
|
|
// if(!sq_IsMyControlObject(sqrChr)) return true;
|
|
|
|
local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(10).tofloat() / 100.0;
|
|
local eclipsehive_bonus2 = sqrChr.getVar("eclipsehive_bonus").getInt(11).tofloat() / 100.0;
|
|
|
|
if(sqrChr.getVar("eclipsehive_select").getBool(0) == true){
|
|
local add_bonus = 0.0;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 24) > 0) add_bonus = add_bonus + 10.0;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 25) > 0) add_bonus = add_bonus + 10.0;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 26) > 0) add_bonus = add_bonus + 20.0;
|
|
if(add_bonus > 0) eclipsehive_bonus2 = eclipsehive_bonus2 +add_bonus / 100.0
|
|
}
|
|
|
|
switch(flagIndex){
|
|
case 101:
|
|
local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0));
|
|
if(targetObj) createPassiveObject_k_k(sqrChr,targetObj,SKILL_BYKK_SUMMONSPIRITWATERHIGHER,1,0,0,0,0,0,0,0,0);
|
|
break;
|
|
case 201:
|
|
sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/waterhigherspirit/animation/ice_wind.ani",0,0,0);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITWATERHIGHER, SKILL_BYKK_SUMMONSPIRITWATERHIGHER, 7, eclipsehive_bonus) + 100;
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local delay = pAni.getDelaySum(2, 2);
|
|
//printp("delay="+delay.tostring()+"\n");
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITWATERHIGHER,2,0,0,0,totalDamage,delay,0,0,0);
|
|
break;
|
|
case 301:
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITWATERHIGHER, SKILL_BYKK_SUMMONSPIRITWATERHIGHER, 14, eclipsehive_bonus) + 100;
|
|
for(local i = 0; i < 3; i++){
|
|
local xpos = 50;
|
|
local zpos = 75;
|
|
if(i % 3 == 1){
|
|
xpos = 60;
|
|
zpos = 55;
|
|
}
|
|
else if(i % 3 == 2){
|
|
xpos = 65;
|
|
zpos = 100;
|
|
}
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITWATERHIGHER,3,xpos,0,zpos,totalDamage,0,0,0,0);
|
|
}
|
|
break;
|
|
case 401:
|
|
if(parentObj.getVar("skill4").getBool(0) == false){
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITWATERHIGHER, SKILL_BYKK_SUMMONSPIRITWATERHIGHER, 19, eclipsehive_bonus2) + 100;
|
|
for(local i = 0; i < 7; i++){
|
|
local xpos = 50;
|
|
local zpos = 75;
|
|
if(i % 3 == 1){
|
|
xpos = 60;
|
|
zpos = 55;
|
|
}
|
|
else if(i % 3 == 2){
|
|
xpos = 65;
|
|
zpos = 100;
|
|
}
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITWATERHIGHER,3,xpos,0,zpos,totalDamage,0,0,0,0);
|
|
}
|
|
}
|
|
else{
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
pAni.setSpeedRate(150.0);
|
|
}
|
|
break;
|
|
case 402:
|
|
if(parentObj.getVar("skill4").getBool(0) == true){
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITWATERHIGHER,4,150,0,0,0,0,0,0,0);
|
|
parentObj.getVar("skill4").setBool(0, false);
|
|
}
|
|
break;
|
|
case 601:
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITWATERHIGHER,9,100,0,0,1,0,0,0,0);
|
|
sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/waterhigherspirit/animation/ice_wind.ani",0,0,0);
|
|
sq_SendCreatePassiveObjectPacket(parentObj, 1008607, 0, 0, 0, sq_getRandom(201,299), parentObj.getDirection());
|
|
break;
|
|
case 1001://?嚙踝蕭嚙踝蕭嚙?
|
|
local direction = sqrChr.getDirection();
|
|
local yPos = sqrChr.getYPos();
|
|
local zPos = parentObj.getZPos();
|
|
local xPos = sq_GetDistancePos(sqrChr.getXPos(), sqrChr.getDirection(), 50);
|
|
sq_MoveToNearMovablePos(parentObj, xPos, yPos, zPos, xPos, yPos, zPos, 100, -1, 5);
|
|
sq_SetCurrentDirection(parentObj, direction);
|
|
if(!sq_GetSkill(sqrChr, SKILL_BYKK_SUMMONSPIRITWATERHIGHER).isInCoolTime()) sqrChr.startSkillCoolTime(SKILL_BYKK_SUMMONSPIRITWATERHIGHER, sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONSPIRITWATERHIGHER), -1);
|
|
break;
|
|
case 1002://?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭
|
|
parentObj.getVar("skill4").setBool(0, true);
|
|
monsterattack_ksk(parentObj,3);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function proc_appendage_waterhigherspirit_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
|
|
local parentObj = appendage.getParent();
|
|
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
|
|
if((!sqrChr || sqrChr.getState() == STATE_DIE) || (!parentObj || parentObj.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 t_03 = appendage.getVar("skill_3").get_timer_vector(0);//???嚙踝蕭?
|
|
local t_04 = appendage.getVar("skill_4").get_timer_vector(0);//嚙踝蕭嚙踝蕭???
|
|
local currentT = appendage.getTimer().Get();
|
|
|
|
local state = parentObj.getState();
|
|
local attackIndex = parentObj.getAttackIndex();
|
|
|
|
switch(state){
|
|
case STATE_STAND:
|
|
if(sqrChr.getVar("summonmonsterwait").getBool(0)) monsterattack_ksk(parentObj,5);
|
|
local timer = appendage.getVar("atktime").get_ct_vector(0);
|
|
local currentTT = timer.Get();
|
|
if(currentTT < ATK_TIME) return;
|
|
timer.Reset();
|
|
timer.Start(10000,0);
|
|
|
|
local grant_timer = parentObj.getVar("grant").get_ct_vector(0);
|
|
if(grant_timer){
|
|
local grant_time = grant_timer.Get();
|
|
if(grant_timer && grant_time >= 4000 + sq_getRandom(0,4000) && sq_FindTarget( parentObj, 0, 400, 50, 200)){
|
|
grant_timer.Reset();
|
|
grant_timer.Start(10000,0);
|
|
monsterattack_ksk(parentObj,6);
|
|
return;
|
|
}
|
|
}
|
|
|
|
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_04,t_03,t_02,t_01];
|
|
local attackIndex = [3,2,1,0];
|
|
local distanceX = [400,300,200,300];
|
|
local distanceXmin = [50,50,10,0];
|
|
local distanceY = [20,20,20,100];
|
|
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]){
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 13) < 1 && i == 0) return;
|
|
monsterattack_ksk(parentObj,attackIndex[i]);
|
|
if(parentObj.getVar("watertornado").size_vector() > 0){
|
|
local attacknum = parentObj.getVar("watertornado").get_vector(0);
|
|
parentObj.getVar("watertornado").set_vector(0,attacknum + 1);
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
if(sq_FindTarget( parentObj, -1000, 1000, 800, 350)) sq_SetCurrentDirection(parentObj, sq_GetOppositeDirection(sq_GetDirection(parentObj)));
|
|
}
|
|
break;
|
|
case STATE_ATTACK:
|
|
if(attackIndex == 5){
|
|
if(sqrChr.getVar("summonmonsterwait").getBool(0) == false) parentObj.sendStateOnlyPacket(STATE_STAND);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onStart_appendage_waterhigherspirit_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
|
|
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);
|
|
}
|
|
|
|
function onEnd_appendage_waterhigherspirit_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj) return;
|
|
parentObj.sendDestroyPacket(true);
|
|
}
|
|
|
|
function proc_appendage_whipwithsid_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj || parentObj.getState() == STATE_DIE){
|
|
appendage.setValid(false);
|
|
return;
|
|
}
|
|
|
|
local sourceObj = appendage.getSource();
|
|
local bonusrater = parentObj.getVar("whip_kk").get_vector(1);
|
|
local hitr = parentObj.getVar("whip_kk").get_vector(0);
|
|
local ptime = parentObj.getVar("whip_kk").get_vector(2);
|
|
|
|
local t_01 = appendage.getVar("atktime").get_timer_vector(0);
|
|
local currentT = appendage.getTimer().Get();
|
|
if(t_01 && t_01.isOnEvent(currentT) == true){
|
|
local ap = sq_getNewAttackInfoPacket();
|
|
ap.powerRate = bonusrater;
|
|
ap.element = ENUM_ELEMENT_NONE ;
|
|
ap.useWeapon = true;
|
|
ap.eType = ATTACKTYPE_MAGICAL;
|
|
ap.backForce = 2;
|
|
ap.upForce = 10;
|
|
sq_SendHitObjectPacketByAttackInfo(sourceObj, parentObj, ap);
|
|
}
|
|
|
|
if(currentT >= ptime * hitr+ 200){
|
|
appendage.setValid(false);
|
|
}
|
|
}
|
|
|
|
function onStart_appendage_whipwithsid_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
|
|
local parentObj = appendage.getParent();
|
|
|
|
local hitr = parentObj.getVar("whip_kk").get_vector(0);
|
|
local ptime = parentObj.getVar("whip_kk").get_vector(2);
|
|
|
|
appendage.getVar("atktime").clear_timer_vector();
|
|
appendage.getVar("atktime").push_timer_vector();
|
|
local t_01 = appendage.getVar("atktime").get_timer_vector(0);
|
|
t_01.setParameter(ptime, hitr);
|
|
t_01.resetInstant(0);
|
|
|
|
}
|
|
|
|
function onEnd_appendage_whipwithsid_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
|
|
}
|
|
|
|
function drawAppend_appendage_whipwithsid_bykk(appendage, isOver, x, y, isFlip)
|
|
{
|
|
if (!appendage) return;
|
|
|
|
local parentObj = appendage.getParent();
|
|
if (!parentObj){
|
|
appendage.setValid(false);
|
|
return;
|
|
}
|
|
|
|
local var = appendage.getVar();
|
|
local Ani = var.GetAnimationMap("animation", "passiveobject/madeby_k_k/animation/dominionpowerup/dominionpowerupawakening_damage.ani");
|
|
if(Ani && isOver){
|
|
sq_AnimationProc(Ani);
|
|
sq_drawCurrentFrame(Ani, x, y + 1, isFlip);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
function onStart_appendage_casillas_skill_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj) appendage.setValid(false);
|
|
}
|
|
|
|
function onEnd_appendage_casillas_skill_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
local drawnumber = parentObj.getVar("drawobj").get_obj_vector_size();
|
|
for(local i = 0; i < drawnumber; i++){
|
|
local drawObj = parentObj.getVar("drawobj").get_obj_vector(i);
|
|
if(drawObj){
|
|
drawObj.setValid(false);
|
|
}
|
|
}
|
|
parentObj.getVar("drawobj").clear_obj_vector();
|
|
}
|
|
|
|
function onDamageParent_appendage_casillas_skill_bykk(appendage ,attacker, boundingBox, isStuck)
|
|
{
|
|
if (!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
local sourceObj = appendage.getSource();
|
|
if(!parentObj || parentObj.getState() == STATE_DIE) appendage.setValid(false);
|
|
|
|
local ring_number = parentObj.getVar("casillasatck").get_vector(0);
|
|
if(attacker.isObjectType(OBJECTTYPE_PASSIVE)){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(attacker);
|
|
if(colObj.getCollisionObjectIndex() == 24381 && colObj.getVar("skillIndex").get_vector(0) == 82 && colObj.getVar("subtype").get_vector(0) != 100){
|
|
ring_number = ring_number + 1;
|
|
parentObj.getVar("casillasatck").set_vector(0, ring_number);
|
|
ring_number = parentObj.getVar("casillasatck").get_vector(0);
|
|
if(ring_number >= 3){
|
|
parentObj.getVar("casillasatck").set_vector(0, 0);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sourceObj, SKILL_BYKK_SUMMONCASILLAS, SKILL_BYKK_SUMMONCASILLAS, 11, 1.0) + 100;
|
|
createPassiveObject_k_k(sourceObj,parentObj,SKILL_BYKK_SUMMONCASILLAS,100,0,0, sq_GetCenterZPos(boundingBox),totalDamage,0,0,0,0);
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
function drawAppend_appendage_casillas_skill_bykk(appendage, isOver, x, y, isFlip)
|
|
{
|
|
if (!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
if (!parentObj){
|
|
appendage.setValid(false);
|
|
return;
|
|
}
|
|
|
|
local ring_number = parentObj.getVar("casillasatck").get_vector(0);
|
|
local size = 1.5;
|
|
local var = appendage.getVar();
|
|
local Ani_01 = var.GetAnimationMap("animation_01", "passiveobject/madeby_k_k/animation/casillas/skill/skill01.ani");
|
|
local Ani_02 = var.GetAnimationMap("animation_02", "passiveobject/madeby_k_k/animation/casillas/skill/skill01.ani");
|
|
Ani_02.setImageRateFromOriginal(size, size);
|
|
local hight = parentObj.getZPos();
|
|
if(ring_number < 1) return;
|
|
if(ring_number >= 1 && Ani_01 && !isOver){
|
|
sq_AnimationProc(Ani_01);
|
|
sq_drawCurrentFrame(Ani_01, x, y + hight, isFlip);
|
|
}
|
|
if(ring_number >= 2 && Ani_01 && !isOver){
|
|
sq_AnimationProc(Ani_02);
|
|
sq_drawCurrentFrame(Ani_02, x, y + hight, isFlip);
|
|
}
|
|
}
|
|
|
|
|
|
function onStart_appendage_spikekings_grant_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
// print("test");
|
|
local monsterObj = appendage.getParent();
|
|
monsterObj.getVar("grant").clear_ct_vector();
|
|
monsterObj.getVar("grant").push_ct_vector();
|
|
local timer = monsterObj.getVar("grant").get_ct_vector(0);
|
|
timer.Reset();
|
|
timer.Start(10000,0);
|
|
}
|
|
|
|
function onEnd_appendage_spikekings_grant_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
local monsterObj = appendage.getParent();
|
|
monsterObj.getVar("grant").clear_ct_vector();
|
|
}
|
|
|
|
function drawAppend_appendage_spikekings_grant_bykk(appendage, isOver, x, y, isFlip)
|
|
{
|
|
if (!appendage) return;
|
|
|
|
local parentObj = appendage.getParent();
|
|
if (!parentObj){
|
|
appendage.setValid(false);
|
|
return;
|
|
}
|
|
|
|
local monster_id = appendage.getVar().get_vector(0);
|
|
if(!monster_id || monster_id <= 0) return;
|
|
|
|
local var = appendage.getVar();
|
|
local Ani_01;
|
|
local Ani_02;
|
|
|
|
switch(monster_id){
|
|
case MONSTER_ID_DARKHIGHERSPIRIT:
|
|
case MONSTER_ID_LIGHTHIGHERSPIRIT:
|
|
Ani_01 = var.GetAnimationMap("animation_01", "passiveobject/madeby_k_k/animation/spikeking/newskill/buff_animation/loop_circle_element.ani");
|
|
Ani_02 = var.GetAnimationMap("animation_02", "passiveobject/madeby_k_k/animation/spikeking/newskill/buff_animation/loop_energy_element.ani");
|
|
break;
|
|
case MONSTER_ID_FIREHIGHERSPIRIT:
|
|
Ani_01 = var.GetAnimationMap("animation_01", "passiveobject/madeby_k_k/animation/spikeking/newskill/buff_animation/loop_circle_red.ani");
|
|
Ani_02 = var.GetAnimationMap("animation_02", "passiveobject/madeby_k_k/animation/spikeking/newskill/buff_animation/loop_energy_red.ani");
|
|
break;
|
|
case MONSTER_ID_WATERHIGHERSPIRIT:
|
|
Ani_01 = var.GetAnimationMap("animation_01", "passiveobject/madeby_k_k/animation/spikeking/newskill/buff_animation/loop_circle_blue.ani");
|
|
Ani_02 = var.GetAnimationMap("animation_02", "passiveobject/madeby_k_k/animation/spikeking/newskill/buff_animation/loop_energy_blue.ani");
|
|
break;
|
|
}
|
|
local hight = parentObj.getZPos();
|
|
if(Ani_01 && !isOver){
|
|
sq_AnimationProc(Ani_01);
|
|
sq_drawCurrentFrame(Ani_01, x, y + hight, isFlip);
|
|
}
|
|
if(Ani_02 && isOver){
|
|
sq_AnimationProc(Ani_02);
|
|
sq_drawCurrentFrame(Ani_02, x, y + hight, isFlip);
|
|
}
|
|
}
|
|
|
|
function whip_bykk(obj,subtype)
|
|
{
|
|
local skill_level_01 = sq_GetSkillLevel(obj, SKILL_BYKK_DOMINIONPOWERUP);//??嚙踝蕭嚙踝蕭嚙?
|
|
local skill_level_02 = sq_GetSkillLevel(obj, SKILL_BYKK_ECLIPSEHIVE);//?嚙踝蕭旓?嚙踝蕭?
|
|
switch(subtype){
|
|
case 1:
|
|
if(skill_level_01 > 0){//嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭
|
|
if(obj.getVar("whip_kk").getBool(0) == true){//
|
|
if(skill_level_02 > 0){
|
|
obj.sq_SetCurrentAnimation(ANI_WHIP_AWAKENING_02);//?嚙踝蕭
|
|
}
|
|
else{
|
|
obj.sq_SetCurrentAnimation(ANI_WHIP_EX_02);//?嚙踝蕭
|
|
}
|
|
/*local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
if(attackInfo){
|
|
sq_SetCurrentAttackPower(attackInfo, -1);
|
|
sq_SetCurrentAttackBonusRate(attackInfo, 100);
|
|
}*/
|
|
obj.getVar("whip_kk").setBool(0,false);
|
|
obj.getVar("whip_kk").setBool(1,false);
|
|
}
|
|
else{//嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭嚙?
|
|
if(skill_level_02 > 0){
|
|
obj.sq_SetCurrentAnimation(ANI_WHIP_AWAKENING_01);//?嚙踝蕭
|
|
obj.getVar("whip_kk").setBool(1,true);
|
|
}
|
|
else{
|
|
obj.sq_SetCurrentAnimation(ANI_WHIP_EX_01);//?嚙踝蕭
|
|
}
|
|
/*local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
if(attackInfo){
|
|
sq_SetCurrentAttackPower(attackInfo, -1);
|
|
sq_SetCurrentAttackBonusRate(attackInfo, 100);
|
|
}*/
|
|
obj.getVar("whip_kk").setBool(0,true);
|
|
}
|
|
}
|
|
else{
|
|
//local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/whiptomonsterswing2.ani", 0, 0, 0);
|
|
//local animation = pooledObj.getCurrentAnimation();
|
|
//sq_SetFrameDelayTime(animation, 0, 40);
|
|
//sq_SetFrameDelayTime(animation, 1, 40);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/whiptomonsterswing2.ani"), 0, 0);
|
|
}
|
|
break;
|
|
case 2:
|
|
if(skill_level_01 > 0){
|
|
if(obj.getVar("whip_kk").getBool(0) == true){
|
|
obj.setSkillCommandEnable(20,true);
|
|
local b_useskill = obj.sq_IsEnterSkill(20);
|
|
if(b_useskill != -1){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(20);
|
|
obj.sq_AddSetStatePacket(24, STATE_PRIORITY_USER, true);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 3:
|
|
local state = obj.sq_GetState();
|
|
if(state == 24){
|
|
if(!obj.isEnemy(damager)){
|
|
local pooledObj = sq_CreateDrawOnlyObject(obj, "passiveobject/madeby_k_k/animation/whip/whiptomonsterhitnewbuff.ani", ENUM_DRAWLAYER_COVER, true);
|
|
pooledObj.setCurrentPos(damager.getXPos(),damager.getYPos(), sq_GetCenterZPos(bounding_box));
|
|
}
|
|
else{
|
|
if(obj.getVar("whip_kk").getBool(1) == true){
|
|
local hitr = 5;
|
|
local totalDamage1 = sq_GetBonusRateWithPassive(obj, 20, 20, 14, 1.0) + 100;
|
|
local totalDamage2 = sq_GetBonusRateWithPassive(obj, 20, 20, 16, 1.0) + 100;
|
|
local bonusrater = (totalDamage1 + totalDamage2) / 2 / hitr;
|
|
local ptime = 500;
|
|
damager.getVar("whip_kk").clear_vector();
|
|
damager.getVar("whip_kk").push_vector(hitr);
|
|
damager.getVar("whip_kk").push_vector(bonusrater);
|
|
damager.getVar("whip_kk").push_vector(ptime);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/mage/k_k_made/appendage/aptoemeny/ap_whipwithsid.nut")) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/k_k_made/appendage/aptoemeny/ap_whipwithsid.nut");
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, 24, false, "character/mage/k_k_made/appendage/aptoemeny/ap_whipwithsid.nut", true);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onattack_whip_k_k(obj, damager, bounding_box, is_stuck)
|
|
{
|
|
local state = obj.sq_GetState();
|
|
if(state == 24){
|
|
if(!obj.isEnemy(damager)){
|
|
local pooledObj = sq_CreateDrawOnlyObject(obj, "passiveobject/madeby_k_k/animation/whip/whiptomonsterhitnewbuff.ani", ENUM_DRAWLAYER_COVER, true);
|
|
pooledObj.setCurrentPos(damager.getXPos(),damager.getYPos(), sq_GetCenterZPos(bounding_box));
|
|
if(damager.isObjectType(OBJECTTYPE_ACTIVE)) damager = sq_GetCNRDObjectToActiveObject(damager);
|
|
if(sq_GetLevelData(obj, 20, 17, sq_GetSkillLevel(obj, 20)) > 0) obj.sq_SetSuperArmorUntilTime(damager, 40000);
|
|
}
|
|
else{
|
|
if(obj.getVar("whip_kk").getBool(1) == true){
|
|
local hitr = 5;
|
|
local totalDamage1 = sq_GetBonusRateWithPassive(obj, 20, 20, 14, 1.0) + 100;
|
|
local totalDamage2 = sq_GetBonusRateWithPassive(obj, 20, 20, 16, 1.0) + 100;
|
|
local bonusrater = (totalDamage1 + totalDamage2) / 2 / hitr;
|
|
local ptime = 500;
|
|
damager.getVar("whip_kk").clear_vector();
|
|
damager.getVar("whip_kk").push_vector(hitr);
|
|
damager.getVar("whip_kk").push_vector(bonusrater);
|
|
damager.getVar("whip_kk").push_vector(ptime);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/mage/k_k_made/appendage/aptoemeny/ap_whipwithsid.nut")) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/k_k_made/appendage/aptoemeny/ap_whipwithsid.nut");
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, 24, false, "character/mage/k_k_made/appendage/aptoemeny/ap_whipwithsid.nut", true);
|
|
}
|
|
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
|
|
local activeObj = sq_GetCNRDObjectToActiveObject(damager);
|
|
if(activeObj.getCollisionObjectIndex() == 66473 || activeObj.getCollisionObjectIndex() == 66467){
|
|
local group = sq_GetGroup(activeObj);
|
|
local uniqueId = sq_GetUniqueId(activeObj);
|
|
createPassiveObject_k_k(obj,activeObj,SKILL_BYKK_MOONSHADOW,3,0,0,sq_GetObjectHeight(activeObj) / 2,10,group,uniqueId,0,0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function onChangeSkillEffect_Mage_summoner(obj, skillIndex, reciveData)
|
|
{
|
|
if(!obj) return;
|
|
print("test");
|
|
switch(skillIndex){
|
|
case SKILL_BYKK_COMMUNION:
|
|
local subtype = reciveData.readDword();
|
|
switch(subtype){
|
|
case 1:
|
|
local id = reciveData.readDword();
|
|
local monster_obj = sq_GetCNRDObjectToActiveObject(sq_GetObject(obj, reciveData.readDword(), reciveData.readDword()));
|
|
switch(id){
|
|
case MONSTER_ID_RAMOS:
|
|
setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_ramos.nut", "RamosObj", 122);
|
|
break;
|
|
case MONSTER_ID_KRUTA:
|
|
setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_kruta.nut", "KrutaObj", 121);
|
|
break;
|
|
case MONSTER_ID_HEILROM:
|
|
setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_heilrom.nut", "HeilromObj", 119);
|
|
break;
|
|
case MONSTER_ID_ECHEVERRA:
|
|
setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_echeverra.nut", "EcheverraObj", 47);
|
|
break;
|
|
case MONSTER_ID_SANDOR:
|
|
setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_sandor.nut", "SandorObj", 44);
|
|
break;
|
|
case MONSTER_ID_AUXO:
|
|
setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_auxoex.nut", "AuxoObj", 45);
|
|
break;
|
|
case MONSTER_ID_AUXOOLD:
|
|
setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_auxo.nut", "AuxoObj", 45);
|
|
break;
|
|
case MONSTER_ID_LIGHTHIGHERSPIRIT:
|
|
setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_lighthigherspirit.nut", "LighthigherspiritObj", 77);
|
|
break;
|
|
case MONSTER_ID_FIREHIGHERSPIRIT:
|
|
setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_firehigherspirit.nut", "FirehigherspiritObj", 79);
|
|
break;
|
|
case MONSTER_ID_DARKHIGHERSPIRIT:
|
|
setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_darkhigherspirit.nut", "DarkhigherspiritObj", 76);
|
|
break;
|
|
case MONSTER_ID_WATERHIGHERSPIRIT:
|
|
setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_waterhigherspirit.nut", "WaterhigherspiritObj", 78);
|
|
break;
|
|
case MONSTER_ID_LUIS:
|
|
setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_luis.nut", "LuisObj", 46);
|
|
break;
|
|
case MONSTER_ID_BABYDRAGON:
|
|
setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_babydragon.nut", "BabydragonObj", 80);
|
|
break;
|
|
case MONSTER_ID_CASILLAS:
|
|
setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_casillas.nut", "CassillasObj", 82);
|
|
break;
|
|
case MONSTER_ID_HODOR:
|
|
setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_hodor.nut", "HodorObj", 25);
|
|
break;
|
|
case MONSTER_ID_SPIRITDARK://嚙踝蕭
|
|
setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_spirit.nut", "SpiritDarkObj", 23);
|
|
break;
|
|
case MONSTER_ID_SPIRITFIRE://嚙踝蕭
|
|
setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_spirit.nut", "SpiritFireObj", 21);
|
|
break;
|
|
case MONSTER_ID_SPIRITLIGHT://嚙踝蕭
|
|
setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_spirit.nut", "SpiritLightObj", 24);
|
|
break;
|
|
case MONSTER_ID_SPIRITWATER://?
|
|
setMonsterAppendage_Summoner_byKK(obj, monster_obj, "character/mage/k_k_made/appendage/aptomonster/ap_spirit.nut", "SpiritWaterObj", 22);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function setMonsterAppendage_Summoner_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);
|
|
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);
|
|
}
|
|
setMonsterInfo_Mage(obj, monster_obj, skill_index, AddAppendage);
|
|
if(sq_GetSkill(obj, skill_index).isInCoolTime()) obj.endSkillCoolTime(skill_index);
|
|
}
|
|
}
|
|
|
|
function setMonsterInfo_Mage(obj, monster_obj, skill_index, appendage)
|
|
{
|
|
if(!obj) return;
|
|
|
|
monster_obj.setMapFollowParent(obj);
|
|
monster_obj.setMapFollowType(1);
|
|
|
|
local cooltime_Balance = obj.getVar("eclipsehive_cooltime").getInt(10);
|
|
|
|
local monster_id = monster_obj.getCollisionObjectIndex();
|
|
switch(monster_id){
|
|
case MONSTER_ID_RAMOS:
|
|
|
|
local skill_level = sq_GetSkillLevel(obj, skill_index);
|
|
local coolt_01 = obj.sq_GetLevelData(skill_index, 19, skill_level) * cooltime_Balance / 100;
|
|
local coolt_02 = obj.sq_GetLevelData(skill_index, 20, skill_level) * cooltime_Balance / 100;
|
|
local coolt_03 = obj.sq_GetLevelData(skill_index, 21, skill_level) * cooltime_Balance / 100;
|
|
local coolt_04 = 12000 * cooltime_Balance / 100;
|
|
|
|
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(coolt_01, -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(coolt_02, -1);
|
|
t_02.resetInstant(0);
|
|
appendage.getVar("skill_3").clear_timer_vector();
|
|
appendage.getVar("skill_3").push_timer_vector();
|
|
local t_03 = appendage.getVar("skill_3").get_timer_vector(0);
|
|
t_03.setParameter(coolt_03, -1);
|
|
t_03.resetInstant(0);
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 8) > 0){
|
|
appendage.getVar("skill_4").clear_timer_vector();
|
|
appendage.getVar("skill_4").push_timer_vector();
|
|
local t_04 = appendage.getVar("skill_4").get_timer_vector(0);
|
|
t_04.setParameter(coolt_04, -1);
|
|
t_04.resetInstant(0);
|
|
}
|
|
break;
|
|
case MONSTER_ID_KRUTA:
|
|
|
|
monster_obj.getVar("skill").clear_vector();
|
|
monster_obj.getVar("skill").push_vector(4);
|
|
monster_obj.getVar("skill2").clear_vector();
|
|
monster_obj.getVar("skill2").push_vector(0);
|
|
monster_obj.getVar("skill2").push_vector(0);
|
|
monster_obj.getVar("skill2").push_vector(0);
|
|
monster_obj.getVar("skill2").push_vector(0);
|
|
monster_obj.getVar("skillIndex").clear_vector();
|
|
monster_obj.getVar("skillIndex").push_vector(7);
|
|
|
|
local skill_level = sq_GetSkillLevel(obj, skill_index);
|
|
local coolt_01 = obj.sq_GetLevelData(skill_index, 4, skill_level) * cooltime_Balance / 100;
|
|
local coolt_02 = obj.sq_GetLevelData(skill_index, 5, skill_level) * cooltime_Balance / 100;
|
|
local coolt_03 = obj.sq_GetLevelData(skill_index, 6, skill_level) * cooltime_Balance / 100;
|
|
local coolt_04 = 15000 * cooltime_Balance / 100;
|
|
|
|
if(obj.getVar("eclipsehive_select").getBool(0) == false){
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 30) > 0){
|
|
coolt_02 = coolt_02 - 1000;
|
|
}
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 31) > 0){
|
|
coolt_03 = coolt_03 - 1000;
|
|
}
|
|
}
|
|
|
|
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(coolt_01, -1);
|
|
t_01.resetInstant(0);
|
|
if(skill_level >= 5){
|
|
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(coolt_02, -1);
|
|
t_02.resetInstant(0);
|
|
}
|
|
if(skill_level >= 10){
|
|
appendage.getVar("skill_3").clear_timer_vector();
|
|
appendage.getVar("skill_3").push_timer_vector();
|
|
local t_03 = appendage.getVar("skill_3").get_timer_vector(0);
|
|
t_03.setParameter(coolt_03, -1);
|
|
t_03.resetInstant(0);
|
|
}
|
|
appendage.getVar("skill_4").clear_timer_vector();
|
|
appendage.getVar("skill_4").push_timer_vector();
|
|
local t_04 = appendage.getVar("skill_4").get_timer_vector(0);
|
|
t_04.setParameter(coolt_04, -1);
|
|
t_04.resetInstant(0);
|
|
|
|
local sizenum = sq_GetLevelData(obj, SKILL_BYKK_SUMMONKRUTA, 15, sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONKRUTA));
|
|
if(sizenum > 0){
|
|
sq_SendCreatePassiveObjectPacket(monster_obj, 1008606, 0, 0, 0, sizenum * 100 - 10, monster_obj.getDirection());
|
|
}
|
|
break;
|
|
case MONSTER_ID_HEILROM:
|
|
local skill_level = sq_GetSkillLevel(obj, skill_index);
|
|
local range = obj.sq_GetLevelData(SKILL_BYKK_SUMMONHEILROM, 8, skill_level);
|
|
local elementAttack = obj.sq_GetLevelData(SKILL_BYKK_SUMMONHEILROM, 4, skill_level);
|
|
local attackSpeed = obj.sq_GetLevelData(SKILL_BYKK_SUMMONHEILROM, 9, skill_level);
|
|
local moveSpeed = obj.sq_GetLevelData(SKILL_BYKK_SUMMONHEILROM, 10, skill_level);
|
|
local castSpeed = obj.sq_GetLevelData(SKILL_BYKK_SUMMONHEILROM, 11, skill_level);
|
|
appendage.getVar("buffPx").clear_vector();
|
|
appendage.getVar("buffPx").push_vector(range);
|
|
appendage.getVar("buffPx").push_vector(elementAttack);
|
|
appendage.getVar("buffPx").push_vector(attackSpeed);
|
|
appendage.getVar("buffPx").push_vector(moveSpeed);
|
|
appendage.getVar("buffPx").push_vector(castSpeed);
|
|
appendage.getVar("buffPx").push_vector(skill_level);
|
|
appendage.getVar("buff01").clear_timer_vector();
|
|
appendage.getVar("buff01").push_timer_vector();
|
|
local t = appendage.getVar("buff01").get_timer_vector(0);
|
|
t.setParameter(1000, -1);
|
|
t.resetInstant(0);
|
|
appendage.getVar("buff02").push_timer_vector();
|
|
local t2 = appendage.getVar("buff02").get_timer_vector(0);
|
|
t2.setParameter(15000, -1);
|
|
t2.resetInstant(0);
|
|
break;
|
|
case MONSTER_ID_ECHEVERRA:
|
|
local skill_level = sq_GetSkillLevel(obj, skill_index);
|
|
local coolt_01 = obj.sq_GetLevelData(skill_index, 4, skill_level) * cooltime_Balance / 100;
|
|
local coolt_02 = obj.sq_GetLevelData(skill_index, 5, skill_level) * cooltime_Balance / 100;
|
|
local coolt_03 = obj.sq_GetLevelData(skill_index, 7, skill_level) * cooltime_Balance / 100;
|
|
local coolt_04 = obj.sq_GetLevelData(skill_index, 6, skill_level) * cooltime_Balance / 100;
|
|
local coolt_05 = obj.sq_GetLevelData(skill_index, 9, skill_level) * cooltime_Balance / 100;
|
|
local coolt_06 = 15000 * cooltime_Balance / 100;
|
|
|
|
local isBool = obj.sq_GetLevelData(skill_index, 14, skill_level)
|
|
if(isBool < 1){
|
|
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(coolt_01, -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(coolt_02, -1);
|
|
t_02.resetInstant(0);
|
|
appendage.getVar("skill_3").clear_timer_vector();
|
|
appendage.getVar("skill_3").push_timer_vector();
|
|
local t_03 = appendage.getVar("skill_3").get_timer_vector(0);
|
|
t_03.setParameter(coolt_03, -1);
|
|
t_03.resetInstant(0);
|
|
if(skill_level >= 5){
|
|
appendage.getVar("skill_4").clear_timer_vector();
|
|
appendage.getVar("skill_4").push_timer_vector();
|
|
local t_04 = appendage.getVar("skill_4").get_timer_vector(0);
|
|
t_04.setParameter(coolt_04, -1);
|
|
t_04.resetInstant(0);
|
|
}
|
|
if(skill_level >= 10){
|
|
appendage.getVar("skill_5").clear_timer_vector();
|
|
appendage.getVar("skill_5").push_timer_vector();
|
|
local t_05 = appendage.getVar("skill_5").get_timer_vector(0);
|
|
t_05.setParameter(coolt_05, -1);
|
|
t_05.resetInstant(0);
|
|
}
|
|
appendage.getVar("skill_6").clear_timer_vector();
|
|
appendage.getVar("skill_6").push_timer_vector();
|
|
local t_06 = appendage.getVar("skill_6").get_timer_vector(0);
|
|
t_06.setParameter(coolt_06, -1);
|
|
t_06.resetInstant(0);
|
|
if(sq_GetIntData(obj, 47, 13) > 0 && !obj.getVar("grant").get_ct_vector(0)){
|
|
obj.getVar("grant").clear_ct_vector();
|
|
obj.getVar("grant").push_ct_vector();
|
|
local timer = obj.getVar("grant").get_ct_vector(0);
|
|
timer.Reset();
|
|
timer.Start(10000,0);
|
|
}
|
|
break;
|
|
case MONSTER_ID_SANDOR:
|
|
|
|
monster_obj.getVar("move").clear_vector();
|
|
monster_obj.getVar("move").push_vector(0);
|
|
monster_obj.getVar("move").push_vector(0);
|
|
monster_obj.getVar("move").push_vector(0);
|
|
monster_obj.getVar("move").push_vector(0);
|
|
|
|
monster_obj.getVar().clear_ct_vector();//?嚙?
|
|
monster_obj.getVar().push_ct_vector();//吤嚙踝蕭
|
|
local timer = monster_obj.getVar().get_ct_vector(0);//嚙踝蕭嚙踝蕭
|
|
timer.Reset();//嚙踝蕭嚙踝蕭嚙?
|
|
timer.Start(10000,0);//???嚙?
|
|
|
|
local skill_level = sq_GetSkillLevel(obj, skill_index);
|
|
local coolt_01 = obj.sq_GetLevelData(skill_index, 4, skill_level) * cooltime_Balance / 100;
|
|
local coolt_02 = obj.sq_GetLevelData(skill_index, 5, skill_level) * cooltime_Balance / 100;
|
|
local coolt_03 = obj.sq_GetLevelData(skill_index, 6, skill_level) * cooltime_Balance / 100;
|
|
local coolt_04 = obj.sq_GetLevelData(skill_index, 7, skill_level) * cooltime_Balance / 100;
|
|
local coolt_05 = 8000 * cooltime_Balance / 100;
|
|
|
|
local speedRate = obj.sq_GetLevelData(skill_index, 13, skill_level);
|
|
if(speedRate > 0){
|
|
local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_MOVE_SPEED, true, speedRate.tofloat(), 3600000);
|
|
if(ap) ap.sq_Append(monster_obj, monster_obj);
|
|
local ap2 = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ATTACK_SPEED, true, speedRate.tofloat(), 3600000);
|
|
if(ap2) ap2.sq_Append(monster_obj, monster_obj);
|
|
}
|
|
|
|
if(obj.getVar("eclipsehive_select").getBool(0) == false){
|
|
local decreaseRate = 0;
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 34) > 0) decreaseRate = decreaseRate - 20;
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 35) > 0) decreaseRate = decreaseRate - 20;
|
|
if(decreaseRate < 0){
|
|
coolt_01 = coolt_01 * (100 - decreaseRate) / 100;
|
|
coolt_02 = coolt_02 * (100 - decreaseRate) / 100;
|
|
}
|
|
}
|
|
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 35) > 0){
|
|
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/k_k_made/appendage/aptomonster/skill_ap/ap_sandor_protect.nut")){
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/mage/k_k_made/appendage/aptomonster/skill_ap/ap_sandor_protect.nut", true);
|
|
AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, ENUM_CHARACTERJOB_MAGE, 44, sq_GetSkillLevel(obj, 44));
|
|
}
|
|
}
|
|
//else monsterattack_ksk(monster_obj, 3);
|
|
|
|
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(coolt_01, -1);
|
|
t_01.resetInstant(0);
|
|
if(skill_level >= 5){
|
|
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(coolt_02, -1);
|
|
t_02.resetInstant(0);
|
|
}
|
|
if(skill_level >= 10){
|
|
appendage.getVar("skill_3").clear_timer_vector();
|
|
appendage.getVar("skill_3").push_timer_vector();
|
|
local t_03 = appendage.getVar("skill_3").get_timer_vector(0);
|
|
t_03.setParameter(coolt_03, -1);
|
|
t_03.resetInstant(0);
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 35) < 1){
|
|
appendage.getVar("skill_4").clear_timer_vector();
|
|
appendage.getVar("skill_4").push_timer_vector();
|
|
local t_04 = appendage.getVar("skill_4").get_timer_vector(0);
|
|
t_04.setParameter(coolt_04, -1);
|
|
t_04.resetInstant(0);
|
|
}
|
|
}
|
|
appendage.getVar("skill_5").clear_timer_vector();
|
|
appendage.getVar("skill_5").push_timer_vector();
|
|
local t_05 = appendage.getVar("skill_5").get_timer_vector(0);
|
|
t_05.setParameter(coolt_05, -1);
|
|
t_05.resetInstant(0);
|
|
break;
|
|
case MONSTER_ID_AUXO:
|
|
|
|
local skill_level = sq_GetSkillLevel(obj, skill_index);
|
|
local coolt_01 = obj.sq_GetLevelData(skill_index, 30, skill_level) * cooltime_Balance / 100;
|
|
local coolt_03 = obj.sq_GetLevelData(skill_index, 31, skill_level) * cooltime_Balance / 100;
|
|
local coolt_04 = 10000 * cooltime_Balance / 100;
|
|
|
|
if(obj.getVar("eclipsehive_select").getBool(0) == false){
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 21) > 0){
|
|
coolt_01 = coolt_01 * 90 / 100;
|
|
coolt_03 = coolt_03 * 90 / 100;
|
|
}
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 22) > 0){
|
|
coolt_03 = coolt_03 - 1000;
|
|
}
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 23) > 0){
|
|
coolt_03 = coolt_03 - 1000;
|
|
}
|
|
}
|
|
|
|
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(coolt_01, -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(coolt_03, -1);
|
|
t_02.resetInstant(0);
|
|
appendage.getVar("skill_3").clear_timer_vector();
|
|
appendage.getVar("skill_3").push_timer_vector();
|
|
local t_03 = appendage.getVar("skill_3").get_timer_vector(0);
|
|
t_03.setParameter(coolt_04, -1);
|
|
t_03.resetInstant(0);
|
|
monster_obj.getVar("Root").clear_vector();
|
|
monster_obj.getVar("Root").push_vector(0);
|
|
break;
|
|
case MONSTER_ID_AUXOOLD:
|
|
|
|
local skill_level = sq_GetSkillLevel(obj, skill_index);
|
|
local coolt_01 = obj.sq_GetLevelData(skill_index, 4, skill_level) * cooltime_Balance / 100;
|
|
local coolt_02 = obj.sq_GetLevelData(skill_index, 5, skill_level) * cooltime_Balance / 100;
|
|
local coolt_03 = obj.sq_GetLevelData(skill_index, 6, skill_level) * cooltime_Balance / 100;
|
|
local coolt_04 = 10000 * cooltime_Balance / 150;
|
|
|
|
if(obj.getVar("eclipsehive_select").getBool(0) == false){
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 21) > 0){
|
|
coolt_01 = coolt_01 * 90 / 100;
|
|
coolt_02 = coolt_02 * 90 / 100;
|
|
coolt_03 = coolt_03 * 90 / 100;
|
|
}
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 22) > 0){
|
|
coolt_03 = coolt_03 - 1000;
|
|
}
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 23) > 0){
|
|
coolt_03 = coolt_03 - 1000;
|
|
}
|
|
}
|
|
|
|
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(coolt_01, -1);
|
|
t_01.resetInstant(0);
|
|
if(skill_level >= 5){
|
|
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(coolt_02, -1);
|
|
t_02.resetInstant(0);
|
|
}
|
|
if(skill_level >= 10){
|
|
appendage.getVar("skill_3").clear_timer_vector();
|
|
appendage.getVar("skill_3").push_timer_vector();
|
|
local t_03 = appendage.getVar("skill_3").get_timer_vector(0);
|
|
t_03.setParameter(coolt_03, -1);
|
|
t_03.resetInstant(0);
|
|
}
|
|
appendage.getVar("skill_4").clear_timer_vector();
|
|
appendage.getVar("skill_4").push_timer_vector();
|
|
local t_04 = appendage.getVar("skill_4").get_timer_vector(0);
|
|
t_04.setParameter(coolt_04, -1);
|
|
t_04.resetInstant(0);
|
|
break;
|
|
case MONSTER_ID_LIGHTHIGHERSPIRIT:
|
|
|
|
local skill_level = sq_GetSkillLevel(obj, skill_index);
|
|
local coolt_01 = obj.sq_GetLevelData(skill_index, 4, skill_level) * cooltime_Balance / 100;
|
|
local coolt_02 = obj.sq_GetLevelData(skill_index, 5, skill_level) * cooltime_Balance / 100;
|
|
local coolt_03 = 10000 * cooltime_Balance / 100;
|
|
local coolt_04 = 10000 * cooltime_Balance / 100;
|
|
|
|
if(obj.getVar("eclipsehive_select").getBool(0) == false){
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 25) > 0){
|
|
coolt_01 = coolt_01 * 80 / 100;
|
|
coolt_02 = coolt_02 * 80 / 100;
|
|
}
|
|
else if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 24) > 0){
|
|
coolt_01 = coolt_01 * 90 / 100;
|
|
coolt_02 = coolt_02 * 90 / 100;
|
|
}
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 26) > 0){
|
|
coolt_03 = coolt_03 * 85 /100;
|
|
}
|
|
}
|
|
|
|
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(coolt_01, -1);
|
|
t_01.resetInstant(0);
|
|
if(skill_level >= 5){
|
|
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(coolt_02, -1);
|
|
t_02.resetInstant(0);
|
|
}
|
|
if(skill_level >= 10){
|
|
appendage.getVar("skill_3").clear_timer_vector();
|
|
appendage.getVar("skill_3").push_timer_vector();
|
|
local t_03 = appendage.getVar("skill_3").get_timer_vector(0);
|
|
t_03.setParameter(coolt_03, -1);
|
|
t_03.resetInstant(0);
|
|
}
|
|
appendage.getVar("skill_4").clear_timer_vector();
|
|
appendage.getVar("skill_4").push_timer_vector();
|
|
local t_04 = appendage.getVar("skill_4").get_timer_vector(0);
|
|
t_04.setParameter(coolt_04, -1);
|
|
t_04.resetInstant(0);
|
|
local timer = obj.getVar("pulled").get_ct_vector(0);
|
|
if(!timer){
|
|
obj.getVar("pulled").clear_ct_vector();
|
|
obj.getVar("pulled").push_ct_vector();
|
|
local timer = obj.getVar("pulled").get_ct_vector(0);
|
|
timer.Reset();
|
|
timer.Start(1000000,0);
|
|
}
|
|
else{
|
|
timer.Reset();
|
|
timer.Start(1000000,0);
|
|
}
|
|
break;
|
|
case MONSTER_ID_FIREHIGHERSPIRIT:
|
|
local skill_level = sq_GetSkillLevel(obj, skill_index);
|
|
local coolt_01 = obj.sq_GetLevelData(skill_index, 4, skill_level) * cooltime_Balance / 100;
|
|
local coolt_02 = obj.sq_GetLevelData(skill_index, 5, skill_level) * cooltime_Balance / 100;
|
|
local coolt_03 = obj.sq_GetLevelData(skill_index, 16, skill_level) * cooltime_Balance / 100;
|
|
local coolt_04 = 10000 * cooltime_Balance / 100;
|
|
|
|
if(obj.getVar("eclipsehive_select").getBool(0) == false){
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 25) > 0){
|
|
coolt_01 = coolt_01 * 80 / 100;
|
|
coolt_02 = coolt_02 * 80 / 100;
|
|
}
|
|
else if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 24) > 0){
|
|
coolt_01 = coolt_01 * 90 / 100;
|
|
coolt_02 = coolt_02 * 90 / 100;
|
|
}
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 26) > 0){
|
|
coolt_03 = coolt_03 * 85 /100;
|
|
}
|
|
}
|
|
|
|
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(coolt_01, -1);
|
|
t_01.resetInstant(0);
|
|
if(skill_level >= 5){
|
|
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(coolt_02, -1);
|
|
t_02.resetInstant(0);
|
|
}
|
|
if(skill_level >= 10){
|
|
appendage.getVar("skill_3").clear_timer_vector();
|
|
appendage.getVar("skill_3").push_timer_vector();
|
|
local t_03 = appendage.getVar("skill_3").get_timer_vector(0);
|
|
t_03.setParameter(coolt_03, -1);
|
|
t_03.resetInstant(0);
|
|
}
|
|
appendage.getVar("skill_4").clear_timer_vector();
|
|
appendage.getVar("skill_4").push_timer_vector();
|
|
local t_04 = appendage.getVar("skill_4").get_timer_vector(0);
|
|
t_04.setParameter(coolt_04, -1);
|
|
t_04.resetInstant(0);
|
|
local timer = obj.getVar("pulled").get_ct_vector(0);
|
|
if(!timer){
|
|
obj.getVar("pulled").clear_ct_vector();
|
|
obj.getVar("pulled").push_ct_vector();
|
|
local timer = obj.getVar("pulled").get_ct_vector(0);
|
|
timer.Reset();
|
|
timer.Start(1000000,0);
|
|
}
|
|
else{
|
|
timer.Reset();
|
|
timer.Start(1000000,0);
|
|
}
|
|
break;
|
|
case MONSTER_ID_DARKHIGHERSPIRIT:
|
|
local skill_level = sq_GetSkillLevel(obj, skill_index);
|
|
local coolt_01 = obj.sq_GetLevelData(skill_index, 4, skill_level) * cooltime_Balance / 100;
|
|
local coolt_02 = obj.sq_GetLevelData(skill_index, 5, skill_level) * cooltime_Balance / 100;
|
|
local coolt_03 = obj.sq_GetLevelData(skill_index, 17, skill_level) * cooltime_Balance / 100;
|
|
local coolt_04 = 10000 * cooltime_Balance / 100;
|
|
|
|
if(obj.getVar("eclipsehive_select").getBool(0) == false){
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 25) > 0){
|
|
coolt_01 = coolt_01 * 80 / 100;
|
|
coolt_02 = coolt_02 * 80 / 100;
|
|
}
|
|
else if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 24) > 0){
|
|
coolt_01 = coolt_01 * 90 / 100;
|
|
coolt_02 = coolt_02 * 90 / 100;
|
|
}
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 26) > 0){
|
|
coolt_03 = coolt_03 * 85 /100;
|
|
}
|
|
}
|
|
|
|
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(coolt_01, -1);
|
|
t_01.resetInstant(0);
|
|
if(skill_level >= 5){
|
|
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(coolt_02, -1);
|
|
t_02.resetInstant(0);
|
|
}
|
|
if(skill_level >= 10){
|
|
appendage.getVar("skill_3").clear_timer_vector();
|
|
appendage.getVar("skill_3").push_timer_vector();
|
|
local t_03 = appendage.getVar("skill_3").get_timer_vector(0);
|
|
t_03.setParameter(coolt_03, -1);
|
|
t_03.resetInstant(0);
|
|
}
|
|
appendage.getVar("skill_4").clear_timer_vector();
|
|
appendage.getVar("skill_4").push_timer_vector();
|
|
local t_04 = appendage.getVar("skill_4").get_timer_vector(0);
|
|
t_04.setParameter(coolt_04, -1);
|
|
t_04.resetInstant(0);
|
|
// if(skill_level >= 20){
|
|
// monster_obj.getVar("darkaura").clear_vector();
|
|
// monster_obj.getVar("darkaura").push_vector(0);
|
|
// }
|
|
break;
|
|
case MONSTER_ID_WATERHIGHERSPIRIT:
|
|
local skill_level = sq_GetSkillLevel(obj, skill_index);
|
|
local coolt_01 = obj.sq_GetLevelData(skill_index, 4, skill_level) * cooltime_Balance / 100;
|
|
local coolt_02 = obj.sq_GetLevelData(skill_index, 5, skill_level) * cooltime_Balance / 100;
|
|
local coolt_03 = obj.sq_GetLevelData(skill_index, 18, skill_level) * cooltime_Balance / 100;
|
|
local coolt_04 = 10000 * cooltime_Balance / 100;
|
|
|
|
if(obj.getVar("eclipsehive_select").getBool(0) == false){
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 25) > 0){
|
|
coolt_01 = coolt_01 * 80 / 100;
|
|
coolt_02 = coolt_02 * 80 / 100;
|
|
}
|
|
else if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 24) > 0){
|
|
coolt_01 = coolt_01 * 90 / 100;
|
|
coolt_02 = coolt_02 * 90 / 100;
|
|
}
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 26) > 0){
|
|
coolt_03 = coolt_03 * 85 /100;
|
|
}
|
|
}
|
|
|
|
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(coolt_01, -1);
|
|
t_01.resetInstant(0);
|
|
if(skill_level >= 5){
|
|
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(coolt_02, -1);
|
|
t_02.resetInstant(0);
|
|
}
|
|
if(skill_level >= 10){
|
|
appendage.getVar("skill_3").clear_timer_vector();
|
|
appendage.getVar("skill_3").push_timer_vector();
|
|
local t_03 = appendage.getVar("skill_3").get_timer_vector(0);
|
|
t_03.setParameter(coolt_03, -1);
|
|
t_03.resetInstant(0);
|
|
}
|
|
appendage.getVar("skill_4").clear_timer_vector();
|
|
appendage.getVar("skill_4").push_timer_vector();
|
|
local t_04 = appendage.getVar("skill_4").get_timer_vector(0);
|
|
t_04.setParameter(coolt_04, -1);
|
|
t_04.resetInstant(0);
|
|
break;
|
|
case MONSTER_ID_LUIS:
|
|
local skill_level = sq_GetSkillLevel(obj, skill_index);
|
|
local coolt_01 = obj.sq_GetLevelData(skill_index, 4, skill_level) * cooltime_Balance / 100;
|
|
local coolt_02 = obj.sq_GetLevelData(skill_index, 5, skill_level) * cooltime_Balance / 100;
|
|
local coolt_03 = obj.sq_GetLevelData(skill_index, 6, skill_level) * cooltime_Balance / 100;
|
|
local coolt_04 = obj.sq_GetLevelData(skill_index, 7, skill_level) * cooltime_Balance / 100;
|
|
// if(coolt_04 < 2500) coolt_04 = 2500;
|
|
local coolt_05 = 8000 * cooltime_Balance / 100;
|
|
|
|
if(obj.getVar("eclipsehive_select").getBool(0) == false){
|
|
if(sq_GetIntData(obj, SKILL_BYKK_BLACKLUNATIC, 51) > 0){
|
|
coolt_01 = coolt_01 * 50 / 100;
|
|
coolt_02 = coolt_02 * 50 / 100;
|
|
coolt_03 = coolt_03 * 50 / 100;
|
|
coolt_04 = coolt_04 * 50 / 100;
|
|
}
|
|
}
|
|
|
|
if(obj.sq_GetLevelData(skill_index, 24, skill_level) < 1){
|
|
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(coolt_01, -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(coolt_02, -1);
|
|
t_02.resetInstant(0);
|
|
appendage.getVar("skill_3").clear_timer_vector();
|
|
appendage.getVar("skill_3").push_timer_vector();
|
|
local t_03 = appendage.getVar("skill_3").get_timer_vector(0);
|
|
t_03.setParameter(coolt_03, -1);
|
|
t_03.resetInstant(0);
|
|
if(skill_level >= 10){
|
|
appendage.getVar("skill_4").clear_timer_vector();
|
|
appendage.getVar("skill_4").push_timer_vector();
|
|
local t_04 = appendage.getVar("skill_4").get_timer_vector(0);
|
|
t_04.setParameter(coolt_04, -1);
|
|
t_04.resetInstant(0);
|
|
}
|
|
appendage.getVar("skill_5").clear_timer_vector();
|
|
appendage.getVar("skill_5").push_timer_vector();
|
|
local t_05 = appendage.getVar("skill_5").get_timer_vector(0);
|
|
t_05.setParameter(coolt_05, -1);
|
|
t_05.resetInstant(0);
|
|
break;
|
|
case MONSTER_ID_BABYDRAGON:
|
|
local skill_level = sq_GetSkillLevel(obj, skill_index);
|
|
local coolt_01 = obj.sq_GetLevelData(skill_index, 4, skill_level) * cooltime_Balance / 100;
|
|
local coolt_02 = (obj.sq_GetLevelData(skill_index, 5, skill_level) * 110 / 100) * cooltime_Balance / 100;
|
|
local coolt_03 = (obj.sq_GetLevelData(skill_index, 6, skill_level) * 110 / 100) * cooltime_Balance / 100;
|
|
local coolt_04 = 6000 * cooltime_Balance / 100;
|
|
|
|
if(obj.sq_GetLevelData(skill_index, 12, skill_level) > 0){
|
|
appendage.getVar("custom").setBool(0, true);
|
|
coolt_01 = coolt_01 * 70 / 100;
|
|
coolt_02 = coolt_02 * 70 / 100;
|
|
coolt_03 = coolt_03 * 70 / 100;
|
|
}
|
|
|
|
if(obj.getVar("eclipsehive_select").getBool(0) == false){
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 28) > 0){
|
|
coolt_03 = coolt_03 * 70 / 100;
|
|
}
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 29) > 0){
|
|
coolt_01 = coolt_01 * 70 / 100;
|
|
coolt_02 = coolt_02 * 70 / 100;
|
|
}
|
|
}
|
|
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 27) > 0 && obj.getVar("eclipsehive_select").getBool(0) == false){
|
|
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(coolt_01, -1);
|
|
t_01.resetInstant(0);
|
|
}
|
|
if(skill_level >= 5){
|
|
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(coolt_02, -1);
|
|
t_02.resetInstant(0);
|
|
}
|
|
if(skill_level >= 10){
|
|
appendage.getVar("skill_3").clear_timer_vector();
|
|
appendage.getVar("skill_3").push_timer_vector();
|
|
local t_03 = appendage.getVar("skill_3").get_timer_vector(0);
|
|
t_03.setParameter(coolt_03, -1);
|
|
t_03.resetInstant(0);
|
|
}
|
|
appendage.getVar("skill_4").clear_timer_vector();
|
|
appendage.getVar("skill_4").push_timer_vector();
|
|
local t_04 = appendage.getVar("skill_4").get_timer_vector(0);
|
|
t_04.setParameter(coolt_04, -1);
|
|
t_04.resetInstant(0);
|
|
|
|
break;
|
|
case MONSTER_ID_CASILLAS:
|
|
monster_obj.getVar("move").clear_vector();
|
|
monster_obj.getVar("move").push_vector(0);
|
|
monster_obj.getVar("move").push_vector(0);
|
|
|
|
local skill_level = sq_GetSkillLevel(obj, skill_index);
|
|
local coolt_01 = obj.sq_GetLevelData(skill_index, 5, skill_level) * cooltime_Balance / 100;
|
|
local coolt_02 = obj.sq_GetLevelData(skill_index, 6, skill_level) * cooltime_Balance / 100;
|
|
local coolt_03 = obj.sq_GetLevelData(skill_index, 7, skill_level) * cooltime_Balance / 100;
|
|
local coolt_04 = 800 * cooltime_Balance / cooltime_Balance;
|
|
|
|
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(coolt_01, -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(coolt_02, -1);
|
|
t_02.resetInstant(0);
|
|
appendage.getVar("skill_3").clear_timer_vector();
|
|
appendage.getVar("skill_3").push_timer_vector();
|
|
local t_03 = appendage.getVar("skill_3").get_timer_vector(0);
|
|
t_03.setParameter(coolt_03, -1);
|
|
t_03.resetInstant(0);
|
|
if(obj.sq_GetLevelData(skill_index, 17, skill_level) > 0){
|
|
appendage.getVar("skill_4").clear_timer_vector();
|
|
appendage.getVar("skill_4").push_timer_vector();
|
|
local t_04 = appendage.getVar("skill_4").get_timer_vector(0);
|
|
t_04.setParameter(coolt_04, -1);
|
|
t_04.resetInstant(0);
|
|
}
|
|
break;
|
|
case MONSTER_ID_HODOR:
|
|
local skill_level = sq_GetSkillLevel(obj, skill_index);
|
|
local coolt_01 = obj.sq_GetLevelData(skill_index, 4, skill_level) * cooltime_Balance / 100;//嚙踝蕭嚙踝蕭?
|
|
local coolt_02 = obj.sq_GetLevelData(skill_index, 5, skill_level) * cooltime_Balance / 100;//吤嚙踝蕭Buff
|
|
local coolt_03 = obj.sq_GetLevelData(skill_index, 6, skill_level) * cooltime_Balance / 100;//嚙踝蕭?
|
|
local coolt_04 = obj.sq_GetLevelData(skill_index, 7, skill_level) * cooltime_Balance / 100;//嚙踝蕭?嚙?
|
|
local coolt_05 = obj.sq_GetLevelData(skill_index, 8, skill_level) * cooltime_Balance / 100;//3?嚙踝蕭
|
|
local coolt_06 = obj.sq_GetLevelData(skill_index, 9, skill_level) * cooltime_Balance / 100;//?艉
|
|
local coolt_07 = obj.sq_GetLevelData(skill_index, 10, skill_level) * cooltime_Balance / 100;//嚙踝蕭?嚙踝蕭?
|
|
local coolt_08 = 6000 * cooltime_Balance / 100;//嚙踝蕭?嚙踝蕭?
|
|
|
|
if(obj.getVar("eclipsehive_select").getBool(0) == false){
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 30) > 0){
|
|
coolt_05 = coolt_05 - 500;
|
|
coolt_06 = coolt_06 - 500;
|
|
}
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 31) > 0){
|
|
coolt_05 = coolt_05 - 500;
|
|
coolt_06 = coolt_06 - 500;
|
|
}
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 32) > 0){
|
|
coolt_05 = coolt_05 - 1000;
|
|
coolt_06 = coolt_06 - 1000;
|
|
}
|
|
}
|
|
|
|
if(obj.sq_GetLevelData(skill_index, 14, skill_level) < 1){
|
|
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(coolt_01, -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(coolt_02, -1);
|
|
t_02.resetInstant(0);
|
|
if(obj.sq_GetLevelData(skill_index, 16, skill_level) < 1){
|
|
appendage.getVar("skill_3").clear_timer_vector();
|
|
appendage.getVar("skill_3").push_timer_vector();
|
|
local t_03 = appendage.getVar("skill_3").get_timer_vector(0);
|
|
t_03.setParameter(coolt_03, -1);
|
|
t_03.resetInstant(0);
|
|
}
|
|
if(skill_level >= 5){
|
|
appendage.getVar("skill_4").clear_timer_vector();
|
|
appendage.getVar("skill_4").push_timer_vector();
|
|
local t_04 = appendage.getVar("skill_4").get_timer_vector(0);
|
|
t_04.setParameter(coolt_04, -1);
|
|
t_04.resetInstant(0);
|
|
appendage.getVar("skill_5").clear_timer_vector();
|
|
appendage.getVar("skill_5").push_timer_vector();
|
|
local t_05 = appendage.getVar("skill_5").get_timer_vector(0);
|
|
t_05.setParameter(coolt_05, -1);
|
|
t_05.resetInstant(0);
|
|
appendage.getVar("skill_6").clear_timer_vector();
|
|
appendage.getVar("skill_6").push_timer_vector();
|
|
local t_06 = appendage.getVar("skill_6").get_timer_vector(0);
|
|
t_06.setParameter(coolt_06, -1);
|
|
t_06.resetInstant(0);
|
|
}
|
|
if(skill_level >= 10){
|
|
appendage.getVar("skill_7").clear_timer_vector();
|
|
appendage.getVar("skill_7").push_timer_vector();
|
|
local t_07 = appendage.getVar("skill_7").get_timer_vector(0);
|
|
t_07.setParameter(coolt_07, -1);
|
|
t_07.resetInstant(0);
|
|
}
|
|
appendage.getVar("skill_8").clear_timer_vector();
|
|
appendage.getVar("skill_8").push_timer_vector();
|
|
local t_08 = appendage.getVar("skill_8").get_timer_vector(0);
|
|
t_08.setParameter(coolt_08, -1);
|
|
t_08.resetInstant(0);
|
|
break;
|
|
case MONSTER_ID_SPIRITDARK:
|
|
case MONSTER_ID_SPIRITFIRE:
|
|
case MONSTER_ID_SPIRITLIGHT:
|
|
case MONSTER_ID_SPIRITWATER:
|
|
if(monster_id == MONSTER_ID_SPIRITFIRE){
|
|
monster_obj.getVar("skill2").clear_vector();
|
|
monster_obj.getVar("skill2").push_vector(0);
|
|
monster_obj.getVar("skill2").push_vector(0);
|
|
monster_obj.getVar("skill2").push_vector(0);
|
|
monster_obj.getVar("skill2").push_vector(0);
|
|
}
|
|
|
|
local skill_level = sq_GetSkillLevel(obj, skill_index);
|
|
local coolt_01 = obj.sq_GetLevelData(skill_index, 4, skill_level) * cooltime_Balance / 100;
|
|
local coolt_02 = coolt_01 * 3 * cooltime_Balance / 100;
|
|
|
|
if(obj.getVar("eclipsehive_select").getBool(0) == false){
|
|
local decreaseRate = 0;
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 36) > 0) decreaseRate = decreaseRate - 10;
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 37) > 0) decreaseRate = decreaseRate - 20;
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 38) > 0) decreaseRate = decreaseRate - 20;
|
|
if(decreaseRate < 0) coolt_01 = coolt_01 * (100 + decreaseRate) / 100;
|
|
}
|
|
|
|
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(coolt_01, -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(coolt_02, -1);
|
|
t_02.resetInstant(0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function createPassiveObject_k_k(obj,monsterobj,skillIndex,subtype,x,y,z,pvector1,pvector2,pvector3,pvector4,pvector5)
|
|
{
|
|
if(!obj || !monsterobj) return;
|
|
if(pvector1 == null) pvector1 = 0;
|
|
if(pvector2 == null) pvector2 = 0;
|
|
if(pvector3 == null) pvector3 = 0;
|
|
if(pvector4 == null) pvector4 = 0;
|
|
if(pvector5 == null) pvector5 = 0;
|
|
// local bonusRate = obj.getVar("summoners_bonusRate").get_vector(0).tofloat() / 1000.0;
|
|
//print("bonusRate = "+bonusRate);
|
|
// pvector1 = (pvector1.tofloat() * bonusRate).tointeger();
|
|
if((skillIndex == SKILL_BYKK_SUMMONRAMOS && subtype == 41) || (skillIndex == 25 && subtype == 7) || (skillIndex == 46 && subtype == 6)) pvector2 = (pvector2.tofloat() * summoners_kuk_setbonusRate(obj).tofloat() / 1000.0).tointeger();
|
|
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_BinaryStartWrite();
|
|
sq_BinaryWriteDword(skillIndex);
|
|
sq_BinaryWriteDword(subtype);
|
|
sq_BinaryWriteDword(pvector1);
|
|
sq_BinaryWriteDword(pvector2);
|
|
sq_BinaryWriteDword(pvector3);
|
|
sq_BinaryWriteDword(pvector4);
|
|
sq_BinaryWriteDword(pvector5);
|
|
sq_SendCreatePassiveObjectPacket(obj, 24381, 0, destX_01 + x, destY_01 + y, z - obj.getZPos(), monsterobj.getDirection());
|
|
}
|
|
|
|
function summonmonster_mage_plus_Kwk(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 monsterattack_ksk(monsterObj,attackIndex)
|
|
{
|
|
if(!monsterObj) return;
|
|
local activeObj = sq_GetCNRDObjectToCollisionObject(monsterObj);
|
|
sq_IntVectorClear(sq_GetGlobalIntVector());
|
|
sq_IntVectorPush(sq_GetGlobalIntVector(),attackIndex);
|
|
sq_AddSetStatePacketCollisionObject(activeObj, 8, sq_GetGlobalIntVector(), STATE_PRIORITY_USER, true);
|
|
}
|
|
|
|
|
|
function monsterpulled_bykkkkkkk(obj,monsterobj,x,y,z)
|
|
{
|
|
local timer = obj.getVar("pulled").get_ct_vector(0);
|
|
if(!timer) return;
|
|
local skill = sq_GetSkill(obj, 150);
|
|
if(skill.isSealFunction()) return;
|
|
local currentT = timer.Get();
|
|
//printp("currentT="+currentT.tostring()+"\n");
|
|
if(currentT <= 2000) return;
|
|
timer.Reset();//嚙踝蕭嚙踝蕭嚙?
|
|
timer.Start(10000,0);//???嚙?
|
|
local objectManager = obj.getObjectManager();
|
|
local objectNumber = objectManager.getCollisionObjectNumber();
|
|
for(local i = 0; i < objectNumber; i++){
|
|
local targetObj = objectManager.getCollisionObject(i);
|
|
if(targetObj && targetObj.isObjectType(OBJECTTYPE_ACTIVE) && targetObj.isEnemy(obj) && !CNSquirrelAppendage.sq_IsAppendAppendage(targetObj, "character/mage/k_k_made/appendage/aptomonster/debuff/ap_pulledmonster.nut") && sq_Abs(targetObj.getXPos() - monsterobj.getXPos() + x) <= 300 && sq_Abs(targetObj.getYPos() - monsterobj.getYPos() + y) <= 150){
|
|
local appendagePath = "character/mage/k_k_made/appendage/aptomonster/debuff/ap_pulledmonster.nut";
|
|
local MasterAppendage = CNSquirrelAppendage.sq_AppendAppendage(targetObj, obj, -1, false, appendagePath, true);
|
|
if(MasterAppendage){
|
|
sq_AccelMoveToAppendageForce(targetObj, obj, monsterobj, x, y, z, 500, true, MasterAppendage, true);
|
|
local validT = MasterAppendage.getAppendageInfo()
|
|
validT.setValidTime(2000);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function creatdrawobject_kwk(obj,path,istrue,x,y,z,drawlayerkind)
|
|
{
|
|
local ani = sq_CreateAnimation("",path);
|
|
local pooledObj = sq_CreatePooledObject(ani,istrue);
|
|
sq_SetCurrentDirection(pooledObj, obj.getDirection());
|
|
pooledObj.setCurrentPos(x,y,z);
|
|
pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayerkind);
|
|
sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false);
|
|
return pooledObj;
|
|
}
|
|
|
|
function summoners_kuk_setbonusRate(obj)
|
|
{
|
|
local bonusRate = 1000;
|
|
if(sq_GetSkillLevel(obj, 48) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj,48, 1, sq_GetSkillLevel(obj, 48))) / 1000;
|
|
print("bonusRate1 = "+bonusRate);
|
|
if(sq_GetSkillLevel(obj, 75) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj,75, 3, sq_GetSkillLevel(obj, 75))) / 1000;
|
|
if(sq_GetSkillLevel(obj, 20) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj,20, 18, sq_GetSkillLevel(obj, 20)) / 10) / 1000;
|
|
print("bonusRate2 = "+bonusRate);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_COMMUNION) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_COMMUNION, 0, sq_GetSkillLevel(obj, SKILL_BYKK_COMMUNION))) / 1000;
|
|
print("bonusRate3 = "+bonusRate);
|
|
//if(obj.getVar("summoners_bonusRate").getBool(0)) bonusRate = bonusRate + sq_GetLevelData(obj, 81, 5, sq_GetSkillLevel(obj, 81));
|
|
// print("bonusRate4 = "+bonusRate);
|
|
if(obj.getVar("echeverra_buff").getBool(0)){
|
|
local number = 0;
|
|
local monster_Name = ["SandorObj","AuxoObj","LuisObj","EcheverraObj","DarkhigherspiritObj","LighthigherspiritObj","WaterhigherspiritObj","FirehigherspiritObj","BabydragonObj","KrutaObj","HeilromObj","CassillasObj","HodorObj","RamosObj","SpiritDarkObj","SpiritFireObj","SpiritLightObj","SpiritWaterObj"];
|
|
for(local i = 0; i < monster_Name.len(); i++){
|
|
local monster_num = obj.getVar(monster_Name[i]).get_obj_vector_size();
|
|
if(monster_num > 0) number = number + monster_num;
|
|
}
|
|
if(number >= 3) number = 3;
|
|
bonusRate = bonusRate * (1000 + number * 50) / 1000;
|
|
}
|
|
//print("bonusRate5 = "+bonusRate);
|
|
local monster_num = 0;
|
|
local num = 0;
|
|
local monster_Name = [];
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 23) > 0 && obj.getVar("AuxoObj").get_obj_vector_size() > 0) monster_Name = ["SandorObj","EcheverraObj","DarkhigherspiritObj","LighthigherspiritObj","WaterhigherspiritObj","FirehigherspiritObj","BabydragonObj","LuisObj","KrutaObj","HodorObj","SpiritDarkObj","SpiritFireObj","SpiritLightObj","SpiritWaterObj"];
|
|
if(sq_GetIntData(obj, SKILL_BYKK_BLACKLUNATIC, 51) > 0 && obj.getVar("LuisObj").get_obj_vector_size() > 0) monster_Name = ["SandorObj","AuxoObj","EcheverraObj","DarkhigherspiritObj","LighthigherspiritObj","WaterhigherspiritObj","FirehigherspiritObj","BabydragonObj","KrutaObj","HodorObj","SpiritDarkObj","SpiritFireObj","SpiritLightObj","SpiritWaterObj"];
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 26) > 0 && (obj.getVar("DarkhigherspiritObj").get_obj_vector_size() > 0 || obj.getVar("LighthigherspiritObj").get_obj_vector_size() > 0 || obj.getVar("WaterhigherspiritObj").get_obj_vector_size() > 0 || obj.getVar("FirehigherspiritObj").get_obj_vector_size() > 0 || obj.getVar("EcheverraObj").get_obj_vector_size() > 0)) monster_Name = ["SandorObj","AuxoObj","LuisObj","BabydragonObj","KrutaObj","HodorObj","SpiritDarkObj","SpiritFireObj","SpiritLightObj","SpiritWaterObj"];
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 29) > 0 && obj.getVar("BabydragonObj").get_obj_vector_size() > 0) monster_Name = ["SandorObj","AuxoObj","LuisObj","EcheverraObj","DarkhigherspiritObj","LighthigherspiritObj","WaterhigherspiritObj","FirehigherspiritObj","KrutaObj","HodorObj","SpiritDarkObj","SpiritFireObj","SpiritLightObj","SpiritWaterObj"];
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 32) > 0 && (obj.getVar("KrutaObj").get_obj_vector_size() > 0 || obj.getVar("HodorObj").get_obj_vector_size() > 0)) monster_Name = ["SandorObj","AuxoObj","LuisObj","EcheverraObj","DarkhigherspiritObj","LighthigherspiritObj","WaterhigherspiritObj","FirehigherspiritObj","BabydragonObj","SpiritDarkObj","SpiritFireObj","SpiritLightObj","SpiritWaterObj"];
|
|
if((sq_GetLevelData(obj, SKILL_BYKK_SUMMONCASILLAS, 18, sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONCASILLAS)) > 0 && obj.getVar("CassillasObj").get_obj_vector_size() > 0) || (sq_GetLevelData(obj, SKILL_BYKK_SUMMONRAMOS, 26, sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONRAMOS)) > 0 && obj.getVar("RamosObj").get_obj_vector_size() > 0)) monster_Name = ["SandorObj","AuxoObj","LuisObj","EcheverraObj","DarkhigherspiritObj","LighthigherspiritObj","WaterhigherspiritObj","FirehigherspiritObj","BabydragonObj","KrutaObj","HodorObj","SpiritDarkObj","SpiritFireObj","SpiritLightObj","SpiritWaterObj"];
|
|
if(monster_Name.len() > 0){
|
|
for(local ui = 0; ui < monster_Name.len(); ui++){
|
|
local number = obj.getVar(monster_Name[ui]).get_obj_vector_size();
|
|
if(number > 0) num = num + number;
|
|
}
|
|
if(num < 1) bonusRate = bonusRate * (1000 + 500) / 1000;
|
|
}
|
|
//print("bonusRate6 = "+bonusRate);
|
|
if((sq_GetLevelData(obj, SKILL_BYKK_SUMMONCASILLAS, 19, sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONCASILLAS)) > 0 && obj.getVar("CassillasObj").get_obj_vector_size() > 0) || (sq_GetLevelData(obj, SKILL_BYKK_SUMMONRAMOS, 27, sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONRAMOS)) > 0 && obj.getVar("RamosObj").get_obj_vector_size() > 0)) monster_Name = ["SandorObj","AuxoObj","LuisObj","EcheverraObj","DarkhigherspiritObj","LighthigherspiritObj","WaterhigherspiritObj","FirehigherspiritObj","BabydragonObj","KrutaObj","HodorObj","SpiritDarkObj","SpiritFireObj","SpiritLightObj","SpiritWaterObj"];
|
|
else monster_Name = [];
|
|
if(monster_Name.len() > 0){
|
|
for(local ui = 0; ui < monster_Name.len(); ui++){
|
|
local number = obj.getVar(monster_Name[ui]).get_obj_vector_size();
|
|
if(number > 0) num = num + number;
|
|
}
|
|
if(num < 1) bonusRate = bonusRate * (1000 + 500) / 1000;
|
|
}
|
|
print("bonusRate final = "+bonusRate);
|
|
obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger());
|
|
}
|
|
|
|
function summonmonster_by_kwk(obj,skillIndex)
|
|
{
|
|
if(!obj) return;
|
|
local state = 22;
|
|
switch(skillIndex){
|
|
case SKILL_BYKK_SUMMONHODOR:
|
|
case SKILL_BYKK_SUMMONSANDOR:
|
|
case SKILL_BYKK_SUMMONAUXO:
|
|
case SKILL_BYKK_SUMMONLUIS:
|
|
case SKILL_BYKK_SUMMONBABYDRAGON:
|
|
case SKILL_BYKK_SUMMONCASILLAS:
|
|
case SKILL_BYKK_SUMMONKRUTA:
|
|
case SKILL_BYKK_SUMMONRAMOS:
|
|
state = 20;
|
|
break;
|
|
}
|
|
|
|
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(state);
|
|
obj.sq_IntVectPush(skillIndex);
|
|
obj.sq_AddSetStatePacket(SKILL_BYKK_RINGOFDOMINATION , STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return;
|
|
}
|
|
|
|
function onStartDungeon_summoner_bykk(obj)
|
|
{
|
|
if(!obj) return;
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_MOONSHADOW);
|
|
if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_MOONSHADOW);
|
|
setEclipsehive_summoner_bykk(obj);
|
|
summoners_kuk_setbonusRate(obj);
|
|
}
|
|
|
|
function reset_summoner_bykk(obj)
|
|
{
|
|
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/k_k_made/appendage/aptomonster/skill_ap/ap_waterhigherspirit_skill.nut");
|
|
if(!addAppendage) return;
|
|
CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/k_k_made/appendage/aptomonster/skill_ap/ap_waterhigherspirit_skill.nut");
|
|
setEclipsehive_summoner_bykk(obj);
|
|
summoners_kuk_setbonusRate(obj);
|
|
}
|
|
|
|
function summoner_kak_monsterSkill(obj,skillIndex,monstername,attackIndex)
|
|
{
|
|
if(!obj.isMyControlObject()) return;
|
|
local number = obj.getVar(monstername).get_obj_vector_size();
|
|
if(number > 0 && !sq_GetSkill(obj, skillIndex).isInCoolTime()){
|
|
if(obj.getVar("eclipsehive_select").getBool(0) == false) number = 0;
|
|
if(skillIndex == SKILL_BYKK_SUMMONSANDOR && sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 35) > 0){
|
|
local sub = sq_getRandom(1, 3);
|
|
local direction = sq_GetDirection(obj);
|
|
switch(sub){
|
|
case 1:
|
|
for(local i = 0; i < number; i++){
|
|
local monsterObj = sq_GetCNRDObjectToActiveObject(obj.getVar(monstername).get_obj_vector(i));
|
|
if(monsterObj){
|
|
monsterObj.getVar("teleport").setInt(10, direction);
|
|
monsterObj.getVar("teleport").setInt(11, sq_GetDistancePos(sq_GetXPos(obj), direction, 50));
|
|
monsterObj.getVar("teleport").setInt(12, sq_GetYPos(obj));
|
|
monsterattack_ksk(monsterObj,attackIndex);
|
|
}
|
|
}
|
|
break;
|
|
case 2:
|
|
local randomnumber = sq_getRandom(0, 90);
|
|
for(local i = 0; i < number; i++){
|
|
local angle = 360 / number * i + randomnumber;
|
|
local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 100.0).tointeger();
|
|
local y = (sq_Sin(sq_ToRadian(angle.tofloat())) * 50.0).tointeger();
|
|
local monsterObj = sq_GetCNRDObjectToActiveObject(obj.getVar(monstername).get_obj_vector(i));
|
|
if(monsterObj){
|
|
monsterObj.getVar("teleport").setInt(10, direction);
|
|
monsterObj.getVar("teleport").setInt(11, sq_GetXPos(obj) + x);
|
|
monsterObj.getVar("teleport").setInt(12, sq_GetYPos(obj) + y);
|
|
monsterattack_ksk(monsterObj,attackIndex);
|
|
}
|
|
}
|
|
break;
|
|
case 3:
|
|
for(local i = 0; i < number; i++){
|
|
local x = 0, y = 10 * i;
|
|
if(i % 2 == 0) y = -y;
|
|
else y = 10 * (i + 1);
|
|
if(number % 2 == 0 && number > 5) x = -40 * (i / 2);
|
|
//print(x+" && "+y);
|
|
local monsterObj = sq_GetCNRDObjectToActiveObject(obj.getVar(monstername).get_obj_vector(i));
|
|
if(monsterObj){
|
|
monsterObj.getVar("teleport").setInt(10, direction);
|
|
monsterObj.getVar("teleport").setInt(11, sq_GetDistancePos(sq_GetXPos(obj), direction, 100 + x));
|
|
monsterObj.getVar("teleport").setInt(12, sq_GetYPos(obj) + y);
|
|
monsterattack_ksk(monsterObj,attackIndex);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
else{
|
|
for(local i = 0; i < number; i++){
|
|
local monsterObj = sq_GetCNRDObjectToActiveObject(obj.getVar(monstername).get_obj_vector(i));
|
|
if(monsterObj){
|
|
if(skillIndex == SKILL_BYKK_SUMMONKRUTA) monsterObj.getVar("skillIndex").set_vector(0, 4);
|
|
if(skillIndex == SKILL_BYKK_SUMMONSANDOR){
|
|
monsterObj.getVar("teleport").setInt(10, obj.getDirection());
|
|
monsterObj.getVar("teleport").setInt(11, sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 50));
|
|
monsterObj.getVar("teleport").setInt(12, sq_GetYPos(obj));
|
|
}
|
|
monsterattack_ksk(monsterObj,attackIndex);
|
|
if(((skillIndex == 80 && sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 29) > 0) || ((skillIndex == 45 || skillIndex == 46) && sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 23) > 0)) && obj.getVar("eclipsehive_select").getBool(0)){
|
|
number = 1;
|
|
monsterObj.getVar("ronghe_bool").setBool(0, true);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
local state = obj.getState();
|
|
if(state == 14 || state == 0){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
}
|
|
// obj.startSkillCoolTime(skillIndex, sq_GetSkillLevel(obj, skillIndex), -1);
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
function setEclipsehive_summoner_bykk(obj)
|
|
{
|
|
local stage = sq_GetGlobaludpModuleStage();
|
|
local mapIndex = sq_GetMapIndex(stage);
|
|
if(obj.getVar("map").getInt(10) == mapIndex || obj.getVar("map").getBool(0) == false){
|
|
obj.getVar("map").setBool(0, true);
|
|
local skill = sq_GetSkill(obj, SKILL_BYKK_ECLIPSEHIVE), skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_ECLIPSEHIVE);
|
|
if(skill.isSealFunction()){
|
|
obj.getVar("eclipsehive_select").setBool(0, false);
|
|
obj.getVar("eclipsehive_bonus").setInt(10, (1000 + sq_GetLevelData(obj, SKILL_BYKK_ECLIPSEHIVE, 6, skill_level)) / 10);
|
|
obj.getVar("eclipsehive_bonus").setInt(11, 100);
|
|
obj.getVar("eclipsehive_cooltime").setInt(10, 100);
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 16) > 0){
|
|
obj.getVar("eclipsehive_bonus").setInt(10, (1000 + sq_GetLevelData(obj, SKILL_BYKK_ECLIPSEHIVE, 6, skill_level)) / 10 + 8);
|
|
}
|
|
/*local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/mage/k_k_made/appendage/aptosummoner/ap_eclipsehive.nut");
|
|
if(addAppendage){
|
|
local change_appendage = addAppendage.sq_getChangeStatus("eclipsehive");
|
|
if(change_appendage) change_appendage.clearParameter();
|
|
}*/
|
|
local addAppendage2 = CNSquirrelAppendage.sq_GetAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut");
|
|
if(addAppendage2){
|
|
CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut");
|
|
//local skillLevel = sq_GetSkillLevel(obj, 2);
|
|
//local lifeTime = sq_GetLevelData(obj, 2, 0, skillLevel);
|
|
//addAppendage2.getAppendageInfo().setValidTime(lifeTime);
|
|
//addAppendage2.setAppendCauseSkill(BUFF_CAUSE_SKILL, ENUM_CHARACTERJOB_MAGE, 2, skillLevel);
|
|
}
|
|
}
|
|
else{
|
|
obj.getVar("eclipsehive_select").setBool(0, true);
|
|
obj.getVar("eclipsehive_bonus").setInt(10, (1000 - sq_GetLevelData(obj, SKILL_BYKK_ECLIPSEHIVE, 4, skill_level)) / 10);
|
|
obj.getVar("eclipsehive_bonus").setInt(11, (1000 + sq_GetLevelData(obj, SKILL_BYKK_ECLIPSEHIVE, 2, skill_level)) / 10);
|
|
obj.getVar("eclipsehive_cooltime").setInt(10, 100 + sq_GetLevelData(obj, SKILL_BYKK_ECLIPSEHIVE, 3, skill_level));
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 16) > 0){
|
|
obj.getVar("eclipsehive_bonus").setInt(11, (1000 + sq_GetLevelData(obj, SKILL_BYKK_ECLIPSEHIVE, 2, skill_level)) / 10 + 15);
|
|
}
|
|
/*local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/mage/k_k_made/appendage/aptosummoner/ap_eclipsehive.nut");
|
|
if(addAppendage){
|
|
local skillLevel = obj.sq_GetSkillLevel(SKILL_BYKK_ECLIPSEHIVE);
|
|
local value1 = sq_GetLevelData(obj, SKILL_BYKK_ECLIPSEHIVE, 0, skillLevel);
|
|
local change_appendage = addAppendage.sq_getChangeStatus("eclipsehive");
|
|
if(!change_appendage) change_appendage = addAppendage.sq_AddChangeStatus("eclipsehive",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value1);
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_COOLTIME_DECLINE, true, -value1.tofloat());
|
|
}
|
|
}*/
|
|
local addAppendage2 = CNSquirrelAppendage.sq_GetAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut");
|
|
if(addAppendage2){
|
|
CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut");
|
|
}
|
|
}
|
|
}
|
|
else obj.getVar("map").setInt(10, mapIndex);
|
|
}
|
|
|
|
function getImmuneTypeDamageRate_appendage_sandor_protect_bykk(appendage, damageRate, attacker)
|
|
{
|
|
//print("damageRate = "+damageRate);
|
|
local newRate = 10;
|
|
return newRate;
|
|
}
|
|
|
|
function startSkillCoolTime_summoner_bykk(obj, skillIndex, skillLevel, currentCoolTime)
|
|
{
|
|
local newCoolTime = 0;
|
|
switch(skillIndex){
|
|
case 49:
|
|
if(obj.getVar("eclipsehive_select").getBool(0)){
|
|
local decreaseRate = 0;
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 36) > 0) decreaseRate = decreaseRate - 10;
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 37) > 0) decreaseRate = decreaseRate - 10;
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 38) > 0) decreaseRate = decreaseRate - 30;
|
|
if(decreaseRate < 0){
|
|
newCoolTime = currentCoolTime * (100 + decreaseRate) / 100;
|
|
return newCoolTime;
|
|
}
|
|
}
|
|
else return currentCoolTime;
|
|
break;
|
|
case 46:
|
|
|
|
break;
|
|
case 2:
|
|
print("currentCoolTime ="+currentCoolTime);
|
|
if(currentCoolTime < 40000) return 40000;
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onAfterSetState_Throw_summoner_bykk(obj, state, datas, isResetTimer)
|
|
{
|
|
|
|
local ThrowIndex = obj.getThrowIndex();
|
|
local ThrowState = obj.getThrowState();
|
|
|
|
if(ThrowIndex == 49){
|
|
if (obj.getThrowState() == 0){
|
|
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 36) > 0 && obj.getVar("eclipsehive_select").getBool(0)){
|
|
|
|
if(obj.getHp() < obj.getHpMax() * 5 / 100){
|
|
if (obj.isMessage()) sq_AddMessage(3599);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
|
|
return;
|
|
}
|
|
else{
|
|
obj.sq_SendSetHpPacket(obj.getHp() - obj.getHpMax() * 5 / 100, true, obj);
|
|
}
|
|
|
|
local monstername = ["SpiritDarkObj","SpiritFireObj","SpiritLightObj","SpiritWaterObj"], skillIndex = [53, 51, 54, 52], bonusNum = [20, 7, 26, 15];
|
|
local num = 0;
|
|
local totalDamage = 0;
|
|
for(local ui = 0; ui < monstername.len(); ui++){
|
|
local number = obj.getVar(monstername[ui]).get_obj_vector_size();
|
|
if(number > 0){
|
|
if(sq_GetSkillLevel(obj, skillIndex[ui]) > 0)
|
|
totalDamage = totalDamage + sq_GetLevelData(obj, skillIndex[ui], 1, sq_GetSkillLevel(obj, skillIndex[ui])) * number;
|
|
else
|
|
totalDamage = totalDamage + sq_GetLevelData(obj, 49, bonusNum[ui], sq_GetSkillLevel(obj, 49)) * number;
|
|
}
|
|
num = num + number;
|
|
}
|
|
|
|
if(num > 0){
|
|
local sizeRate = 100, bonusRate = 0;
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 37) > 0){sizeRate = sizeRate + 10; bonusRate = bonusRate + 10;}
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 38) > 0){sizeRate = sizeRate + 20; bonusRate = bonusRate + 10;}
|
|
totalDamage = totalDamage * (100 + bonusRate) / 100;
|
|
// print("totalDamage = "+totalDamage);
|
|
createPassiveObject_k_k(obj, obj,SKILL_BYKK_SUMMONSPIRITCOMMON,2001,150,0,0,totalDamage,sizeRate,0,0,0);
|
|
}
|
|
return;
|
|
}
|
|
// print("test");
|
|
local num = 0;
|
|
local monstername = ["SpiritDarkObj","SpiritFireObj","SpiritLightObj","SpiritWaterObj"];
|
|
local monsternumber = [0,1,2,3];
|
|
for(local ui = 0; ui < monstername.len(); ui++){
|
|
local number = obj.getVar(monstername[ui]).get_obj_vector_size();
|
|
if(number > 0){
|
|
obj.getVar("sacrifice").setBool(monsternumber[ui], true);
|
|
for(local i = 0; i < number; i++){
|
|
local monsterObj = sq_GetCNRDObjectToActiveObject(obj.getVar(monstername[ui]).get_obj_vector(i));
|
|
if(monsterObj){
|
|
monsterattack_ksk(monsterObj,3);
|
|
num = num + 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if(num > 0 && sq_GetLevelData(obj, 49, 31, sq_GetSkillLevel(obj, 49)) > 0){
|
|
obj.sq_SendSetHpPacket(obj.getHp() + obj.getHpMax() * 2 / 100 * num, true, obj);
|
|
obj.sq_SendSetMpPacket(obj.getHp() + obj.getMpMax() * 2 / 100 * num, true, obj);
|
|
}
|
|
}
|
|
}
|
|
else if(ThrowIndex == 81){
|
|
if (obj.getThrowState() == 1){
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/k_k_made/appendage/aptosummoner/ap_masterreckless.nut")) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/k_k_made/appendage/aptosummoner/ap_masterreckless.nut");
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, 81, false, "character/mage/k_k_made/appendage/aptosummoner/ap_masterreckless.nut", true);
|
|
local rad = sq_GetLevelData(obj, 81, 5, sq_GetSkillLevel(obj, 81)) / 10;
|
|
obj.getVar("apGetSetbyKK").setInt(0, rad);
|
|
}
|
|
}
|
|
}
|
|
|