3580 lines
143 KiB
C
3580 lines
143 KiB
C
|
|
function onTimeEvent_po_summoners(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return;
|
|
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter());
|
|
local skillIndex = obj.getVar("skillIndex").get_vector(0);
|
|
local subtype = obj.getVar("subtype").get_vector(0);
|
|
local state = obj.getVar("state").get_vector(0);
|
|
|
|
switch(skillIndex){
|
|
case 25://hodor
|
|
break;
|
|
case 44://sandor
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
sq_SendDestroyPacketPassiveObject(obj);
|
|
break;
|
|
}
|
|
break;
|
|
case 45://auxo
|
|
break;
|
|
case 46://luis
|
|
switch(subtype){
|
|
case 3:
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
//?嚙踝蕭ptl
|
|
obj.sq_SetMoveParticle("particle/luis/fireball.ptl", 0.0, 0.0);
|
|
local etcSub = obj.getVar("custom").getInt(10);
|
|
if(etcSub > 0){
|
|
sq_SetSpeedToMoveParticle(obj, 0, 1000);
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 5:
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(11).tofloat() / 100.0;
|
|
// if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 23) > 0) eclipsehive_bonus = eclipsehive_bonus + 0.5;
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 46, 46, 20, eclipsehive_bonus) + 100;
|
|
local totalDamage2 = sq_GetBonusRateWithPassive(sqrChr, 46, 46, 21, eclipsehive_bonus) + 100;
|
|
local etcSub = obj.getVar("custom").getInt(10);
|
|
local bonusRate = obj.getVar("custom").getInt(11);
|
|
if(bonusRate > 1){
|
|
totalDamage = totalDamage * bonusRate;
|
|
totalDamage2 = totalDamage2 * bonusRate;
|
|
}
|
|
createPassiveObject_k_k(sqrChr,obj,46,6,-300,0,600,totalDamage,totalDamage2,etcSub,0,0);
|
|
break;
|
|
case 2:
|
|
obj.setTimeEvent(3,100,10,false);
|
|
break;
|
|
case 3:
|
|
local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(11).tofloat() / 100.0;
|
|
// if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 23) > 0) eclipsehive_bonus = eclipsehive_bonus + 0.5;
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 46, 46, 20, 0.17*eclipsehive_bonus) + 100;
|
|
local totalDamage2 = sq_GetBonusRateWithPassive(sqrChr, 46, 46, 21, 0.17*eclipsehive_bonus) + 100;
|
|
local etcSub = obj.getVar("custom").getInt(10);
|
|
local bonusRate = obj.getVar("custom").getInt(11);
|
|
if(bonusRate > 1){
|
|
totalDamage = totalDamage * bonusRate;
|
|
totalDamage2 = totalDamage2 * bonusRate;
|
|
}
|
|
createPassiveObject_k_k(sqrChr,obj,46,6,-300+sq_getRandom(-50,50),sq_getRandom(-40,40),600,totalDamage,totalDamage2,etcSub,0,0);
|
|
if(timeEventCount >= 10) sq_SendDestroyPacketPassiveObject(obj);
|
|
break;
|
|
}
|
|
break;
|
|
case 10:
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
local sub = obj.getVar("custom").getInt(10);
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/blacklunatic/blacklunaticwing"+sub.tostring()+"crack_00.ani", 0, 0, 0);
|
|
local targetObj = obj.getVar("tar").get_obj_vector(0);
|
|
sq_moveWithParent(targetObj, pooledObj);
|
|
//print("sub = "+sub);
|
|
// if(sub == 3){
|
|
// if(targetObj){
|
|
// CNSquirrelAppendage.sq_RemoveAppendage(targetObj, BLACKLUNATIC_APDPATH);
|
|
// print("remove");
|
|
// }
|
|
// }
|
|
sq_SendDestroyPacketPassiveObject(obj);
|
|
break;
|
|
case 1:
|
|
local targetObj = obj.getVar("tar").get_obj_vector(0);
|
|
if(targetObj){
|
|
sq_setCurrentAxisPos(obj, 0, sq_GetXPos(targetObj));
|
|
sq_setCurrentAxisPos(obj, 1, sq_GetYPos(targetObj) - 1);
|
|
sq_setCurrentAxisPos(obj, 2, sq_GetZPos(targetObj));
|
|
sq_SetCurrentDirection(obj, targetObj.getDirection());
|
|
if(!CNSquirrelAppendage.sq_IsAppendAppendage(targetObj, BLACKLUNATIC_APDPATH)) sq_SendDestroyPacketPassiveObject(obj);
|
|
}
|
|
else sq_SendDestroyPacketPassiveObject(obj);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 47://echeverra
|
|
switch(subtype){
|
|
case 2:
|
|
case 5:
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
obj.resetHitObjectList();
|
|
break;
|
|
case 1:
|
|
//?嚙踝蕭ptl
|
|
obj.sq_SetMoveParticle("particle/spikeking/grandwave.ptl", 0.0, 0.0);
|
|
break;
|
|
case 2:
|
|
sq_SendDestroyPacketPassiveObject(obj);
|
|
break;
|
|
}
|
|
break;
|
|
case 4:
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
createPassiveObject_k_k(sqrChr,obj,47,41,75 * (timeEventCount - 1),0,0,0,0,0,0,0);
|
|
break;
|
|
case 1:
|
|
obj.sq_PlaySound("SSTAR_DMG");
|
|
break;
|
|
}
|
|
break;
|
|
case 51:
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
obj.resetHitObjectList();
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 76://spiritdarkhigher
|
|
switch(subtype){
|
|
case 3:
|
|
case 41:
|
|
case 61:
|
|
case 62:
|
|
case 63:
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
|
|
break;
|
|
case 2:
|
|
sq_SetMyShake(obj,1,100);
|
|
obj.resetHitObjectList();
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/madeby_k_k/animation/spirit/darkhigherspirit/darkskill/test/animation/cylindercrack_0"+(timeEventCount - 1).tostring()+".ani",0,0,0);
|
|
local pAni = pooledObj.getCurrentAnimation();
|
|
local time = obj.getVar("time").get_vector(0) / 4;
|
|
local speedRate = 150000.0 / time.tofloat();
|
|
pAni.setSpeedRate(speedRate);
|
|
obj.stopSound(101);
|
|
obj.sq_PlaySound("DESCHAMPS_METAL_CHAIN",101);
|
|
break;
|
|
case 4:
|
|
obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
|
|
break;
|
|
}
|
|
break;
|
|
case 4:
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
sq_SendDestroyPacketPassiveObject(obj);
|
|
break;
|
|
case 1:
|
|
obj.resetHitObjectList();
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 77://spiritlighthigher
|
|
switch(subtype){
|
|
case 2:
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(10).tofloat() / 100.0;
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER, SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER, 7, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,obj,SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER,21,timeEventCount * 70,0,0,totalDamage,0,0,0,0);
|
|
break;
|
|
}
|
|
break;
|
|
case 9:
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER, SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER, 28, 1.0) + 100;
|
|
createPassiveObject_k_k(sqrChr,obj,SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER,10,sq_getRandom(-50,200), sq_getRandom(-35,35),0,totalDamage,0,0,0,0);
|
|
break;
|
|
}
|
|
break;
|
|
case 10:
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
//obj.resetHitObjectList();
|
|
//"WORDSWORTH_LIGHTNING_0"+sq_getRandom(1,4).tostring());
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 78://spiritwaterhigher
|
|
switch(subtype){
|
|
case 1:
|
|
case 11:
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(10).tofloat() / 100.0;
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITWATERHIGHER, SKILL_BYKK_SUMMONSPIRITWATERHIGHER, 6, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,obj,SKILL_BYKK_SUMMONSPIRITWATERHIGHER,11,0,0,timeEventCount * 115 + 80,totalDamage,timeEventCount,0,0,0);
|
|
break;
|
|
case 1:
|
|
obj.sq_SetMoveParticle("particle/spirit/water_spirit_higher_ice_move.ptl", 0.0, 0.0);
|
|
break;
|
|
}
|
|
break;
|
|
case 4:
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(11).tofloat() / 100.0;
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITWATERHIGHER, SKILL_BYKK_SUMMONSPIRITWATERHIGHER, 19, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,obj,SKILL_BYKK_SUMMONSPIRITWATERHIGHER,41,sq_getRandom(-50,100),sq_getRandom(-15,30),0,totalDamage,timeEventCount - 1,0,0,0);
|
|
break;
|
|
}
|
|
break;
|
|
case 9:
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITWATERHIGHER, SKILL_BYKK_SUMMONSPIRITWATERHIGHER, 22, 1.0) + 100;
|
|
local time = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITWATERHIGHER, SKILL_BYKK_SUMMONSPIRITWATERHIGHER, 23, 1.0) + 100;
|
|
createPassiveObject_k_k(sqrChr,obj,SKILL_BYKK_SUMMONSPIRITWATERHIGHER,10,0,0,0,totalDamage,time,timeEventCount,0,0);
|
|
break;
|
|
}
|
|
break;
|
|
case 10:
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, "");
|
|
break;
|
|
case 1:
|
|
obj.resetHitObjectList();
|
|
break;
|
|
case 2:
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 79://spiritfirehigher
|
|
switch(subtype){
|
|
case 4:
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
obj.resetHitObjectList();
|
|
break;
|
|
}
|
|
break;
|
|
case 61:
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
|
|
break;
|
|
case 1:
|
|
obj.resetHitObjectList();
|
|
break;
|
|
case 2:
|
|
obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
|
|
break;
|
|
case 3:
|
|
obj.sq_PlaySound("SASCHA_TORNADO_LOOP");
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 80://babydragon
|
|
switch(timeEventIndex){
|
|
case 1:
|
|
obj.resetHitObjectList();
|
|
if(timeEventCount >= 10) obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, "");
|
|
break;
|
|
case 2:
|
|
local totalDamage = obj.getVar("custom").getInt(10);
|
|
if(subtype == 12) createPassiveObject_k_k(sqrChr, obj, 80, 121, 85, 0, 290, totalDamage, 0, 0, 0, 0);
|
|
else createPassiveObject_k_k(sqrChr, obj, 80, 131, 265, 0, 0, totalDamage, 0, 0, 0, 0);
|
|
break;
|
|
case 3: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break;
|
|
case 4: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break;
|
|
case 10:
|
|
local hittime = obj.getVar("custom").getInt(10);
|
|
obj.setTimeEvent(11, hittime, -1, false);
|
|
break;
|
|
case 11: obj.resetHitObjectList(); break;
|
|
}
|
|
break;
|
|
case 82://casillas
|
|
break;
|
|
case 118://sandorex
|
|
break;
|
|
case 119://heilrom
|
|
break;
|
|
case 120://spiritfireex
|
|
break;
|
|
case 121://kruta
|
|
switch(subtype){
|
|
case 2:
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
obj.resetHitObjectList();
|
|
break;
|
|
}
|
|
break;
|
|
case 10:
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
sq_SendDestroyPacketPassiveObject(obj);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 122://ramos
|
|
switch(subtype){
|
|
case 41:
|
|
case 5:
|
|
case 71:
|
|
case 72:
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
obj.resetHitObjectList();
|
|
break;
|
|
}
|
|
break;
|
|
case 200:
|
|
switch(timeEventIndex){
|
|
case 1:
|
|
local monster_level = sq_GetSkillLevel(sqrChr, 174);
|
|
summonmonster_mage_plus_Kwk(sqrChr,obj,0,0,0,0,MONSTER_ID_RAMOS,3600000,monster_level,0);
|
|
sq_SendDestroyPacketPassiveObject(obj);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case SKILL_BYKK_SUMMONSPIRITCOMMON:
|
|
switch(subtype){
|
|
case 202:
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
sq_SendDestroyPacketPassiveObject(obj);
|
|
break;
|
|
case 1:
|
|
obj.resetHitObjectList();
|
|
break;
|
|
}
|
|
break;
|
|
case 102:
|
|
case 302:
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
obj.resetHitObjectList();
|
|
break;
|
|
}
|
|
break;
|
|
case 1001:
|
|
local sizeRate = obj.getVar("sizeRate").get_vector(0).tofloat() / 100;
|
|
sizeRate = sizeRate.tofloat();
|
|
local sub = obj.getVar("sizeRate").get_vector(1);
|
|
switch(timeEventIndex){
|
|
case 1:
|
|
local anipath;
|
|
switch(sub){
|
|
case 1:
|
|
anipath = "passiveobject/common/animation/darkexplosionparticle1.ani";
|
|
break;
|
|
case 2:
|
|
anipath = "passiveobject/common/animation/fireexplosionparticle1.ani";
|
|
break;
|
|
case 3:
|
|
anipath = "passiveobject/common/animation/lightexplosionparticle1.ani";
|
|
break;
|
|
case 4:
|
|
anipath = "passiveobject/character/mage/animation/icefireexplosionparticle1.ani";
|
|
break;
|
|
}
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj,anipath, sq_getRandom(-10,10), sq_getRandom(-10,10), sq_getRandom(-10,10));
|
|
local currentAni = pooledObj.getCurrentAnimation();
|
|
currentAni.setImageRateFromOriginal(sizeRate, sizeRate);
|
|
break;
|
|
case 2:
|
|
local anipath;
|
|
switch(sub){
|
|
case 1:
|
|
anipath = "passiveobject/common/animation/darkexplosionparticle2.ani";
|
|
break;
|
|
case 2:
|
|
anipath = "passiveobject/common/animation/fireexplosionparticle2.ani";
|
|
break;
|
|
case 3:
|
|
anipath = "passiveobject/common/animation/lightexplosionparticle2.ani";
|
|
break;
|
|
case 4:
|
|
anipath = "passiveobject/character/mage/animation/icefireexplosionparticle2.ani";
|
|
break;
|
|
}
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj,anipath, 0, 2, 0);
|
|
local currentAni = pooledObj.getCurrentAnimation();
|
|
currentAni.setImageRateFromOriginal(sizeRate, sizeRate);
|
|
break;
|
|
case 3:
|
|
local anipath;
|
|
switch(sub){
|
|
case 1:
|
|
anipath = "passiveobject/common/animation/darkexplosionparticle3.ani";
|
|
break;
|
|
case 2:
|
|
anipath = "passiveobject/common/animation/fireexplosionparticle3.ani";
|
|
break;
|
|
case 3:
|
|
anipath = "passiveobject/common/animation/lightexplosionparticle3.ani";
|
|
break;
|
|
case 4:
|
|
anipath = "passiveobject/character/mage/animation/icefireexplosionparticle3.ani";
|
|
break;
|
|
}
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj,anipath, 0, 1, 1);
|
|
local currentAni = pooledObj.getCurrentAnimation();
|
|
local angle = sq_ToRadian(360.0 * timeEventCount / 8);
|
|
sq_SetfRotateAngle(currentAni, angle);
|
|
currentAni.setImageRateFromOriginal(sizeRate * 2.0, sizeRate * 2.0);
|
|
break;
|
|
case 4:
|
|
local anipath;
|
|
switch(sub){
|
|
case 1:
|
|
anipath = "passiveobject/common/animation/darkexplosionparticle4.ani";
|
|
break;
|
|
case 2:
|
|
anipath = "passiveobject/common/animation/fireexplosionparticle4.ani";
|
|
break;
|
|
case 3:
|
|
anipath = "passiveobject/common/animation/lightexplosionparticle4.ani";
|
|
break;
|
|
case 4:
|
|
anipath = "passiveobject/character/mage/animation/icefireexplosionparticle4.ani";
|
|
break;
|
|
}
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj,anipath, sq_getRandom(-30,30), sq_getRandom(-30,30), sq_getRandom(-30,30));
|
|
local currentAni = pooledObj.getCurrentAnimation();
|
|
currentAni.setImageRateFromOriginal(sizeRate, sizeRate);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case SKILL_BYKK_MOONSHADOW:
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, "");
|
|
break;
|
|
case 1:
|
|
local targetObj = obj.getVar("tar").get_obj_vector(0);
|
|
if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2);
|
|
else sq_SendDestroyPacketPassiveObject(obj);
|
|
if(timeEventCount >= 10) sq_SendDestroyPacketPassiveObject(obj);
|
|
break;
|
|
}
|
|
break;
|
|
case SKILL_BYKK_BLACKLUNATIC:
|
|
switch(subtype){
|
|
case 1:
|
|
switch(timeEventIndex){
|
|
case 0: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break;
|
|
case 1:
|
|
local srcX = obj.getVar("custom").getInt(10);
|
|
local vx = sq_GetUniformVelocity(0, obj.getVar("custom").getInt(12), timeEventCount, 30);
|
|
local vz = sq_GetUniformVelocity(obj.getVar("custom").getInt(11), 30, timeEventCount, 30);
|
|
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), vx);
|
|
sq_setCurrentAxisPos(obj, 0, dstX);
|
|
sq_setCurrentAxisPos(obj, 2, vz);
|
|
if(timeEventCount >= 30) obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case SKILL_BYKK_HIGHESTECHEVERRA:
|
|
switch(timeEventIndex){
|
|
case 1: obj.resetHitObjectList(); break;
|
|
case 2:
|
|
local EcheverraObj = sqrChr.getVar("EcheverraObj").get_obj_vector(0);
|
|
if(EcheverraObj && EcheverraObj.getState() != STATE_DIE){
|
|
local monsterObj = sq_GetCNRDObjectToActiveObject(EcheverraObj);
|
|
sq_IntVectorClear(sq_GetGlobalIntVector());
|
|
sq_AddSetStatePacketActiveObject(monsterObj, 0, sq_GetGlobalIntVector(), STATE_PRIORITY_USER);
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function procAppend_po_summoners(obj)
|
|
{
|
|
if(!obj) return;
|
|
|
|
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter());
|
|
if(obj.getZPos() >= 1000 && obj.getVar().getBool(0) == false){
|
|
local parentObj = obj.getParent();
|
|
if(!parentObj) sq_SendDestroyPacketPassiveObject(obj);
|
|
local id = parentObj.getCollisionObjectIndex();
|
|
obj.getVar().setBool(0, true);
|
|
// print("id:" + id);
|
|
if(sq_IsMyControlObject(sqrChr)) {
|
|
sq_BinaryStartWrite();
|
|
sq_BinaryWriteDword(1);
|
|
sq_BinaryWriteDword(id);
|
|
sq_BinaryWriteDword(sq_GetGroup(parentObj));
|
|
sq_BinaryWriteDword(sq_GetUniqueId(parentObj));
|
|
sq_SendChangeSkillEffectPacket(sqrChr, SKILL_BYKK_COMMUNION);
|
|
sq_SendDestroyPacketPassiveObject(obj);
|
|
}
|
|
sq_SendDestroyPacketPassiveObject(obj);
|
|
}
|
|
|
|
local skillIndex = obj.getVar("skillIndex").get_vector(0);
|
|
local subtype = obj.getVar("subtype").get_vector(0);
|
|
local state = obj.getVar("state").get_vector(0);
|
|
|
|
switch(skillIndex){
|
|
case 25://hodor
|
|
switch(subtype){
|
|
case 7://嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭
|
|
switch(state){
|
|
case 20:
|
|
local pAni = obj.getCurrentAnimation();
|
|
local currentT = sq_GetCurrentTime(pAni);
|
|
local fireT = 800;
|
|
local srcX = obj.getVar("move").get_vector(0);
|
|
local srcY = obj.getVar("move").get_vector(1);
|
|
local MoveX = obj.getVar("move").get_vector(2);
|
|
local MoveY = obj.getVar("move").get_vector(3);
|
|
local vx = sq_GetUniformVelocity(0, MoveX, currentT, fireT);
|
|
local vy = sq_GetUniformVelocity(0, MoveY, currentT, fireT);
|
|
sq_setCurrentAxisPos(obj, 0, srcX + vx);//?嚙踝蕭?嚙踝蕭x嚙?
|
|
sq_setCurrentAxisPos(obj, 1, srcY + vy);//?嚙踝蕭?嚙踝蕭y嚙?
|
|
|
|
if(obj.getZPos() <= 0){
|
|
obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 44://sandor
|
|
break;
|
|
case 45://auxo
|
|
switch(subtype){
|
|
case 5:
|
|
case 15:
|
|
switch(state){
|
|
case 20:
|
|
if(obj.getZPos() <= 0){
|
|
if(subtype == 5) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
|
|
if(subtype == 15) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 13:
|
|
switch(state){
|
|
case 20:
|
|
if(obj.getZPos() <= 0){
|
|
obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
|
|
}
|
|
break;
|
|
case 22:
|
|
local targetObj = sq_GetCNRDObjectToActiveObject(obj.getVar("targetObj").get_obj_vector(0));
|
|
if(targetObj){
|
|
if(sq_GetDistanceObject(obj, targetObj, false) <= 5){
|
|
local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(10).tofloat() / 100.0;
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 45, 45, 28, eclipsehive_bonus) + 100;
|
|
targetObj.getVar("auxohit").clear_vector();
|
|
targetObj.getVar("auxohit").push_vector(1);
|
|
targetObj.getVar("auxohittime").clear_vector();
|
|
targetObj.getVar("auxohittime").push_vector(100);
|
|
targetObj.getVar("auxohitbonus").clear_vector();
|
|
targetObj.getVar("auxohitbonus").push_vector(totalDamage * 6);
|
|
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(targetObj, sqrChr, 199, true, "character/mage/k_k_made/appendage/aptomonster/ap_auxoex_skillthree.nut", true);
|
|
sq_SendDestroyPacketPassiveObject(obj);
|
|
return;
|
|
}
|
|
local pAni = obj.getCurrentAnimation();
|
|
local currentT = sq_GetCurrentTime(pAni);
|
|
local fireT = pAni.getDelaySum(false);
|
|
local X1 = sq_GetUniformVelocity(obj.getXPos(), targetObj.getXPos(), currentT, fireT);
|
|
local Y1 = sq_GetUniformVelocity(obj.getYPos(), targetObj.getYPos(), currentT, fireT);
|
|
sq_setCurrentAxisPos(obj, 0, X1);
|
|
sq_setCurrentAxisPos(obj, 1, Y1);
|
|
}
|
|
else{
|
|
sq_SendDestroyPacketPassiveObject(obj);
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 14:
|
|
switch(state){
|
|
case 20:
|
|
local pAni = obj.getCurrentAnimation();
|
|
local currentT = sq_GetCurrentTime(pAni);
|
|
local fireT = pAni.getDelaySum(false);
|
|
local angle = sq_GetAccel(5, -90, currentT, fireT, true);
|
|
sq_SetCustomRotate(obj, sq_ToRadian(angle.tofloat()));
|
|
if(obj.getZPos() <= 0){
|
|
obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 46://luis
|
|
switch(subtype){
|
|
case 2:
|
|
local pAni = obj.getCurrentAnimation();//嚙踝蕭嚙踝蕭ani
|
|
local currentT = sq_GetCurrentTime(pAni);//?嚙踝蕭??
|
|
local etcSub = obj.getVar("custom").getInt(10);
|
|
local time = 3000;
|
|
if(etcSub > 0) time = 1500;
|
|
if(currentT >= time) sq_SendDestroyPacketPassiveObject(obj);
|
|
break;
|
|
case 6:
|
|
switch(state){
|
|
case 20:
|
|
if(obj.getZPos() <= 0){
|
|
//obj.resetHitObjectList();
|
|
obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 10:
|
|
break;
|
|
}
|
|
break;
|
|
case 47://echeverra
|
|
switch(subtype){
|
|
case 8:
|
|
switch(state){
|
|
case 21:
|
|
local targetObj = sq_GetCNRDObjectToActiveObject(obj.getVar().get_obj_vector(0));
|
|
if(targetObj){
|
|
if(sq_GetDistanceObject(obj, targetObj, false) <= 5){
|
|
if(obj.getVar().getBool(0) == false){
|
|
sq_AddDrawOnlyAniFromParent(targetObj,"passiveobject/test/kcontents3/curseofbloodyfruit/buff/animation/absorb_element_01.ani",0,0,30);
|
|
obj.getVar().setBool(0,true);
|
|
}
|
|
sq_SendDestroyPacketPassiveObject(obj);
|
|
return;
|
|
}
|
|
local pAni = obj.getCurrentAnimation();
|
|
local currentT = sq_GetCurrentTime(pAni);
|
|
local fireT = 800;// pAni.getDelaySum(false);
|
|
local X1 = sq_GetAccel(obj.getXPos(), targetObj.getXPos(), currentT, fireT, false);
|
|
local Y1 = sq_GetAccel(obj.getYPos(), targetObj.getYPos(), currentT, fireT, false);
|
|
local sizeRate = sq_GetUniformVelocity(20, 2, currentT, fireT).tofloat() / 10.0;
|
|
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
|
|
pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
|
|
sq_setCurrentAxisPos(obj, 0, X1);
|
|
sq_setCurrentAxisPos(obj, 1, Y1);
|
|
}
|
|
else{
|
|
sq_SendDestroyPacketPassiveObject(obj);
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 76://spiritdarkhigher
|
|
break;
|
|
case 77://spiritlighthigher
|
|
break;
|
|
case 78://spiritwaterhigher
|
|
switch(subtype){
|
|
case 11:
|
|
switch(state){
|
|
case 20:
|
|
case 21:
|
|
if(obj.getZPos() <= 0){
|
|
obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 10:
|
|
switch(state){
|
|
case 21:
|
|
local currentT = sq_GetObjectTime(obj);;//?嚙踝蕭??
|
|
local fireT = 3000;//???
|
|
local srcX = obj.getVar("move").get_vector(0);
|
|
local MoveX = obj.getVar("move").get_vector(1);
|
|
local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT);
|
|
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);
|
|
if(sqrChr.isMovablePos(dstX, obj.getYPos())){
|
|
sq_setCurrentAxisPos(obj, 0, dstX);
|
|
}
|
|
else{
|
|
obj.getVar("move").set_vector(0,obj.getXPos());
|
|
obj.getVar("move").set_vector(1,0);
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 79://spiritfirehigher
|
|
switch(subtype){
|
|
case 61:
|
|
switch(state){
|
|
case 20:
|
|
case 21:
|
|
case 22:
|
|
local sub = obj.getVar("sub").get_vector(0);
|
|
local sub_all = obj.getVar("sub").get_vector(1);
|
|
local parentObj = sq_GetCNRDObjectToActiveObject(obj.getVar("parentObj").get_obj_vector(0));
|
|
if(parentObj){
|
|
local base100Angle = (36000 / sub_all) * sub;
|
|
local currentT = sq_GetObjectTime(obj);
|
|
local currentSpeedRate = 1.0;
|
|
local defaultRoundTime = 960;
|
|
local radius = 125;
|
|
local baseX = parentObj.getXPos();
|
|
local baseZ = parentObj.getYPos();
|
|
local current100Angle = (base100Angle + (36000 * currentSpeedRate * currentT / defaultRoundTime)) % 36000;
|
|
local angle = (current100Angle.tofloat() / 100.0);
|
|
|
|
local disMovLen = radius * sq_CosTable(angle.tointeger());
|
|
local mov_x = sq_GetDistancePos(baseX, ENUM_DIRECTION_LEFT, disMovLen.tointeger());
|
|
|
|
local axisMagnifyRate = 125 * 0.33;
|
|
local upMovLen = radius * sq_SinTable(angle.tointeger()) * axisMagnifyRate / 100;
|
|
|
|
local mov_y = baseZ + upMovLen.tointeger();
|
|
|
|
sq_setCurrentAxisPos(obj, 0, mov_x);
|
|
sq_setCurrentAxisPos(obj, 1, mov_y);
|
|
//sq_setCurrentAxisPos(obj, 2, parentObj.getZPos());
|
|
}
|
|
else{
|
|
sq_SendDestroyPacketPassiveObject(obj);
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 80://babydragon
|
|
break;
|
|
case 82://casillas
|
|
break;
|
|
case 118://sandorex
|
|
break;
|
|
case 119://heilrom
|
|
break;
|
|
case 120://spiritfireex
|
|
break;
|
|
case 121://kruta
|
|
break;
|
|
case 122://ramos
|
|
switch(subtype){
|
|
case 41:
|
|
switch(state){
|
|
case 20:
|
|
local pAni = obj.getCurrentAnimation();
|
|
local currentT = sq_GetCurrentTime(pAni);
|
|
local fireT = pAni.getDelaySum(false);
|
|
local srcX = obj.getVar("move").get_vector(0);
|
|
local MoveX = obj.getVar("move").get_vector(1);
|
|
local v = sq_GetAccel(0, MoveX, currentT, fireT, false);
|
|
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);
|
|
sq_setCurrentAxisPos(obj, 0, dstX);
|
|
break;
|
|
}
|
|
break;
|
|
case 200:
|
|
switch(state){
|
|
case 21:
|
|
local pAni = obj.getCurrentAnimation();
|
|
local currentT = sq_GetCurrentTime(pAni);
|
|
local fireT = 1000;
|
|
local srcX = obj.getVar("move").get_vector(0);
|
|
local MoveX = obj.getVar("move").get_vector(1);
|
|
local v = sq_GetAccel(0, MoveX, currentT, fireT, true);
|
|
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);
|
|
if(sqrChr.isMovablePos(dstX,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, dstX);
|
|
if(currentT > fireT) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case SKILL_BYKK_SUMMONSPIRITCOMMON:
|
|
break;
|
|
case SKILL_BYKK_MOONSHADOW:
|
|
switch(subtype){
|
|
case 1:
|
|
switch(state){
|
|
case 20:
|
|
case 21:
|
|
case 22:
|
|
local loadSlot = sqrChr.sq_GetSkillLoad(SKILL_BYKK_MOONSHADOW);
|
|
if(loadSlot){
|
|
local attacknumber = loadSlot.getRemainLoadNumber();
|
|
if(attacknumber <= 0){
|
|
obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");
|
|
return;
|
|
}
|
|
}
|
|
else{
|
|
obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");
|
|
}
|
|
local time = sq_GetObjectTime(obj);
|
|
if(time >= obj.getVar("custom").getInt(0)){
|
|
obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");
|
|
return;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 150:
|
|
switch(subtype){
|
|
case 1:
|
|
if(sq_GetObjectTime(obj) >= 5000) sq_SendDestroyPacketPassiveObject(obj);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onAttack_po_summoners(obj, damager, boundingBox, isStuck)
|
|
{
|
|
if(!obj) return 0;
|
|
//enableClearDeadEnemies(obj, damager);
|
|
|
|
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter());
|
|
local skillIndex = obj.getVar("skillIndex").get_vector(0);
|
|
local subtype = obj.getVar("subtype").get_vector(0);
|
|
local state = obj.getVar("state").get_vector(0);
|
|
|
|
switch(skillIndex){
|
|
case 25://hodor
|
|
switch(subtype){
|
|
case 4:
|
|
case 5:
|
|
case 6:
|
|
if(obj.getVar("custom").getInt(10) < 1) sq_SendDestroyPacketPassiveObject(obj);
|
|
break;
|
|
case 7:
|
|
switch(state){
|
|
case 20:
|
|
obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 44://sandor
|
|
break;
|
|
case 45://auxo
|
|
switch(subtype){
|
|
case 3:
|
|
local skill_level = sqrChr.sq_GetSkillLevel(45);
|
|
local level = 40 + skill_level * 2;
|
|
local prob = sq_GetLevelData(sqrChr, 45, 19, skill_level);
|
|
local time = sq_GetLevelData(sqrChr, 45, 21, skill_level);
|
|
sq_sendSetActiveStatusPacket(damager, sqrChr, ACTIVESTATUS_CONFUSE, prob.tofloat(), level.tointeger(), false, time.tointeger());
|
|
break;
|
|
}
|
|
break;
|
|
case 46://luis
|
|
switch(subtype){
|
|
case 3:
|
|
sq_SendDestroyPacketPassiveObject(obj);
|
|
break;
|
|
}
|
|
break;
|
|
case 47://echeverra
|
|
break;
|
|
case 76://spiritdarkhigher
|
|
switch(subtype){
|
|
case 61:
|
|
switch(state){
|
|
case 21:
|
|
local appendagePath = "character/mage/k_k_made/appendage/aptomonster/debuff/ap_holdedmonster.nut";
|
|
if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, appendagePath)){
|
|
local MasterAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, 128, false, appendagePath, true);
|
|
if(MasterAppendage){
|
|
sq_HoldAndDelayDie(damager, obj, true, false, false, 100, 500, ENUM_DIRECTION_NEUTRAL , MasterAppendage);
|
|
local validT = MasterAppendage.getAppendageInfo()
|
|
local time = obj.getVar("time").get_vector(0);
|
|
validT.setValidTime(time);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 77://spiritlighthigher
|
|
break;
|
|
case 78://spiritwaterhigher
|
|
switch(subtype){
|
|
case 3:
|
|
case 11:
|
|
switch(state){
|
|
case 20:
|
|
case 21:
|
|
obj.sq_RemoveMoveParticle();
|
|
obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
|
|
if(subtype == 3) sq_AddDrawOnlyAniFromParent(obj,"passiveobject/madeby_k_k/animation/spirit/waterhigherspirit/element_water_ice_spear_exp_dodge.ani",0,0,0);
|
|
break;
|
|
}
|
|
break;
|
|
case 10:
|
|
if(obj.getVar().getBool(0)){
|
|
obj.sq_RemoveMoveParticle();
|
|
obj.sq_SetMoveParticle("particle/ramos/targetingmove.ptl", 0.0, 0.0);
|
|
sq_SetSpeedToMoveParticle(obj,0,50);
|
|
obj.getVar().setBool(0,false);
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 79://spiritfirehigher
|
|
switch(subtype){
|
|
case 31:
|
|
case 32:
|
|
case 33:
|
|
local eclipsehive_bonus = sqrChr.getVar("eclipsehive_bonus").getInt(10).tofloat() / 100.0;
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, 24, eclipsehive_bonus) + 100;
|
|
local sizeRate = 110;
|
|
sq_BinaryStartWrite();
|
|
sq_BinaryWriteWord(sizeRate);
|
|
sq_BinaryWriteWord(totalDamage);
|
|
sq_SendCreatePassiveObjectPacketPos(sqrChr, 24281, 0, damager.getXPos(), damager.getYPos() + 1, sq_GetCenterZPos(boundingBox));
|
|
break;
|
|
}
|
|
break;
|
|
case 80://babydragon
|
|
switch(subtype){
|
|
case 3:
|
|
sq_CreateParticle("passiveobject/common/particle/fireexplosionparticle1.ptl", obj, 0, 0, 0, true, 30, 0, 1);
|
|
sq_CreateParticle("passiveobject/common/particle/fireexplosionparticle2.ptl", obj, 0, 0, 0, true, 30, 0, 1);
|
|
sq_CreateParticle("passiveobject/common/particle/fireexplosionparticle3.ptl", obj, 0, 0, 0, true, 30, 0, 1);
|
|
sq_CreateParticle("passiveobject/common/particle/fireexplosionparticle4.ptl", obj, 0, 0, 0, true, 30, 0, 1);
|
|
case 5:
|
|
if(obj.getVar("custom").getInt(10) > 0) break;
|
|
sq_SendDestroyPacketPassiveObject(obj);
|
|
break;
|
|
}
|
|
break;
|
|
case 82://casillas
|
|
switch(subtype){
|
|
case 100:
|
|
if(damager && damager.isObjectType(OBJECTTYPE_ACTIVE)){
|
|
local activeObj = sq_GetCNRDObjectToActiveObject(damager);
|
|
local hpMax = activeObj.getHpMax();
|
|
local hp = activeObj.getHp();
|
|
local decrease_hp = (hpMax.tofloat() * 0.1).tointeger();
|
|
if(sq_IsBoss(activeObj)) decrease_hp = (hp.tofloat() * 0.03).tointeger();
|
|
else if(sq_IsNamed(activeObj)) decrease_hp = (hp.tofloat() * 0.06).tointeger();
|
|
// print("hpMax = "+hpMax+" + hp = "+hp+" + decrease_hp = "+decrease_hp);
|
|
if(decrease_hp > hp) activeObj.setHp(0, null, true);
|
|
else activeObj.setHp(hp - decrease_hp, null, true);
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 118://sandorex
|
|
break;
|
|
case 119://heilrom
|
|
break;
|
|
case 120://spiritfireex
|
|
break;
|
|
case 121://kruta
|
|
switch(subtype){
|
|
case 41:
|
|
if(!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";
|
|
local MasterAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, sqrChr, -1, false, appendagePath, true);
|
|
if(MasterAppendage){
|
|
sq_AccelMoveToAppendageForce(damager, sqrChr, obj, 325, 0, 0, 400, true, MasterAppendage, false);
|
|
local validT = MasterAppendage.getAppendageInfo()
|
|
validT.setValidTime(700);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 122://ramos
|
|
switch(subtype){
|
|
case 5:
|
|
if(!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";
|
|
local MasterAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, sqrChr, -1, false, appendagePath, true);
|
|
if(MasterAppendage){
|
|
sq_AccelMoveToAppendageForce(damager, sqrChr, obj, 200, 0, 0, 800, true, MasterAppendage, false);
|
|
local validT = MasterAppendage.getAppendageInfo()
|
|
validT.setValidTime(1000);
|
|
}
|
|
}
|
|
sq_AddDrawOnlyAniFromParent(damager,"monster/character/mage/madeby_k_k/ramos/animation/gather/gatherhit_03.ani",0,0,sq_GetCenterZPos(boundingBox));
|
|
break;
|
|
}
|
|
break;
|
|
case SKILL_BYKK_SUMMONSPIRITCOMMON:
|
|
break;
|
|
case SKILL_BYKK_MOONSHADOW:
|
|
break;
|
|
case 150:
|
|
switch(subtype){
|
|
case 1:
|
|
if(damager.isObjectType(OBJECTTYPE_ACTIVE) && damager.isInDamagableState(obj)){
|
|
local holdTime = obj.getVar("custom").getInt(1);
|
|
if(holdTime == 0) holdTime = 3000;
|
|
local totalDamage = obj.getVar("custom").getInt(0);
|
|
createPassiveObject_k_k(obj,obj,150,2,0,0,sq_GetCenterZPos(boundingBox),totalDamage,holdTime,0,0,0);
|
|
sq_SendDestroyPacketPassiveObject(obj);
|
|
}
|
|
break;
|
|
case 2:
|
|
if(damager.isObjectType(OBJECTTYPE_ACTIVE) && damager.isInDamagableState(obj)){
|
|
local apdPath = "character/mage/k_k_made/appendage/aptoemeny/ap_throwstickytrap_hold.nut";
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(damager, apdPath);
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, true, apdPath, true);
|
|
sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage);
|
|
local holdTime = obj.getVar("custom").getInt(1);
|
|
AddAppendage.sq_SetValidTime(holdTime);
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
|
|
local timer = sqrChr.getVar("time").get_ct_vector(0);
|
|
if(timer){
|
|
local timer_t1 = timer.Get();
|
|
if(timer_t1 > 1680){
|
|
local loadSlot = sqrChr.sq_GetSkillLoad(SKILL_BYKK_MOONSHADOW);
|
|
if(loadSlot){
|
|
local attacknumber = loadSlot.getRemainLoadNumber();
|
|
if(attacknumber > 0 && skillIndex != SKILL_BYKK_MOONSHADOW && subtype != 2){
|
|
loadSlot.decreaseLoadCount(1);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_MOONSHADOW, -1, 10, 1.0) + 100;
|
|
createPassiveObject_k_k(sqrChr,damager,SKILL_BYKK_MOONSHADOW,2,0,0,sq_GetCenterZPos(boundingBox),totalDamage,0,0,0,0);
|
|
}
|
|
attacknumber = loadSlot.getRemainLoadNumber();
|
|
if(attacknumber <= 0) sqrChr.sq_RemoveSkillLoad(SKILL_BYKK_MOONSHADOW);
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
function onAfterAttack_po_summoners(obj, damager, boundingBox, isStuck)
|
|
{
|
|
if(!obj) return 0;
|
|
|
|
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter());
|
|
local skillIndex = obj.getVar("skillIndex").get_vector(0);
|
|
local subtype = obj.getVar("subtype").get_vector(0);
|
|
local state = obj.getVar("state").get_vector(0);
|
|
|
|
switch(skillIndex){
|
|
case 25://hodor
|
|
break;
|
|
case 44://sandor
|
|
break;
|
|
case 45://auxo
|
|
break;
|
|
case 46://luis
|
|
break;
|
|
case 47://echeverra
|
|
break;
|
|
case 76://spiritdarkhigher
|
|
switch(subtype){
|
|
case 61:
|
|
switch(state){
|
|
case 22:
|
|
//嚙踝蕭?
|
|
if(damager && damager.isObjectType(OBJECTTYPE_ACTIVE)){// && damager.getVar().getBool(0) == false
|
|
//damager.getVar().setBool(0,true);
|
|
local activeObj = sq_GetCNRDObjectToActiveObject(damager);
|
|
local hpMax = activeObj.getHpMax();
|
|
local hp = activeObj.getHp();
|
|
local hp_percentage = (hp.tofloat() / hpMax.tofloat()) * 100;
|
|
local killpoint = (sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, 24, 1.0) + 100).tofloat();
|
|
local hide_percent = 89;
|
|
if(sq_IsBoss(activeObj)){killpoint = killpoint.tofloat() / 3.0;hide_percent = 98;}
|
|
else if(sq_IsNamed(activeObj)){killpoint = killpoint.tofloat() / 2.0;hide_percent = 94;}
|
|
if((hp_percentage <= killpoint && hp_percentage > 0) || sq_getRandom(0,99) > hide_percent){
|
|
local group = sq_GetGroup(activeObj);
|
|
local uniqueId = sq_GetUniqueId(activeObj);
|
|
local z = activeObj.getObjectHeight();
|
|
createPassiveObject_k_k(sqrChr,activeObj,SKILL_BYKK_SUMMONSPIRITDARKHIGHER,63,0,1,z / 4 + 1,0,500,group,uniqueId,0);
|
|
}
|
|
}
|
|
return;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 77://spiritlighthigher
|
|
break;
|
|
case 78://spiritwaterhigher
|
|
break;
|
|
case 79://spiritfirehigher
|
|
break;
|
|
case 80://babydragon
|
|
break;
|
|
case 82://casillas
|
|
// if(damager && damager.isObjectType(OBJECTTYPE_ACTIVE)){
|
|
// local activeObj = sq_GetCNRDObjectToActiveObject(damager);
|
|
// if(activeObj.getHp() <= 0) activeObj.setValid(false);
|
|
// }
|
|
break;
|
|
case 118://sandorex
|
|
break;
|
|
case 119://heilrom
|
|
break;
|
|
case 120://spiritfireex
|
|
break;
|
|
case 121://kruta
|
|
break;
|
|
case 122://ramos
|
|
break;
|
|
case SKILL_BYKK_SUMMONSPIRITCOMMON:
|
|
break;
|
|
case SKILL_BYKK_MOONSHADOW:
|
|
break;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
function startSkillCoolTime_mage_bykk(obj, skillIndex, skillLevel, currentCoolTime)
|
|
{
|
|
|
|
local nct = currentCoolTime;
|
|
if((CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut") || CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/witch_skill_bykk/passiveskill/ap_magicaltempoup.nut")) && nct > 0){
|
|
local value1 = sq_GetLevelData(obj, 2, 1, sq_GetSkillLevel(obj, 2));
|
|
local mightyrune_level = obj.sq_GetSkillLevel(ELEMENTALMASTER_SKILL_MIGHTYRUNE);
|
|
if(mightyrune_level > 0){
|
|
local add_Rate = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_MIGHTYRUNE, 4, mightyrune_level);
|
|
value1 = value1 * (1000 + add_Rate) / 1000;
|
|
}
|
|
// print("value1 = "+value1);
|
|
nct = nct * (1000 - value1) / 1000;
|
|
}
|
|
// print("nct = "+nct);
|
|
|
|
local newCoolTime = 0;
|
|
switch(skillIndex){
|
|
case SKILL_BYKK_BLACKLUNATIC:
|
|
return 40000;
|
|
break;
|
|
// case 45:
|
|
// if(nct < 3500) return 3500;
|
|
// else return nct;
|
|
// break;
|
|
case 46:
|
|
if(obj.getVar("eclipsehive_select").getBool(0) && sq_GetIntData(obj, SKILL_BYKK_BLACKLUNATIC, 51) > 0){
|
|
newCoolTime = nct * 50 / 100;
|
|
return newCoolTime;
|
|
}
|
|
else return nct;
|
|
break;
|
|
case 49:
|
|
if(obj.getVar("eclipsehive_select").getBool(0)){
|
|
local decreaseRate = 0;
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 37) > 0) decreaseRate = decreaseRate - 10;
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ECLIPSEHIVE, 38) > 0) decreaseRate = decreaseRate - 10;
|
|
if(decreaseRate < 0){
|
|
newCoolTime = nct * (100 + decreaseRate) / 100;
|
|
return newCoolTime;
|
|
}
|
|
else return nct;
|
|
}
|
|
else return nct;
|
|
break;
|
|
case 2:
|
|
if(currentCoolTime < 40000) return 40000;
|
|
break;
|
|
case SKILL_BYKK_CHASERLAUNCH:
|
|
newCoolTime = 100;
|
|
if(sq_isPVPMode()) newCoolTime = 1000;
|
|
// switch(obj.getState()){
|
|
// case SKILL_BYKK_DRAGONSPEAR:
|
|
// newCoolTime = newCoolTime - sq_GetLevelData(obj, SKILL_BYKK_DRAGONSPEAR, 10, sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONSPEAR));
|
|
// break;
|
|
// case SKILL_BYKK_RANDOMPIERCESTRIKE:
|
|
// newCoolTime = newCoolTime - sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKE, 9, sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKE));
|
|
// break;
|
|
// case STATE_BYKK_RANDOMPIERCESTRIKEEX:
|
|
// newCoolTime = newCoolTime - sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 6, sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX));
|
|
// break;
|
|
// }
|
|
// print("newCoolTime = "+newCoolTime);
|
|
return newCoolTime;
|
|
break;
|
|
case SKILL_BYKK_CHASERSEXPLOSION:
|
|
return nct;
|
|
break;
|
|
default:
|
|
if(sq_getGrowType(obj) == 3) return currentCoolTime;
|
|
else return nct;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/////////////////////////summoner
|
|
|
|
|
|
function proc_appendage_summonerwait(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj || parentObj.getState() == STATE_DIE)
|
|
{
|
|
appendage.setValid(false);
|
|
return;
|
|
}
|
|
|
|
local monster_Name = ["SandorObj","AuxoObj","AuxooldObj","LuisObj","EcheverraObj","DarkhigherspiritObj","LighthigherspiritObj","WaterhigherspiritObj","FirehigherspiritObj","BabydragonObj","KrutaObj","HeilromObj","CassillasObj","HodorObj","RamosObj"];
|
|
for(local i = 0; i < monster_Name.len(); i++){
|
|
local monster_num = parentObj.getVar(monster_Name[i]).get_obj_vector_size();
|
|
if(monster_num > 0){
|
|
for(local ui = 0; ui < monster_num; ui++){
|
|
local monsterObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar(monster_Name[i]).get_obj_vector(ui));
|
|
if(!CNSquirrelAppendage.sq_IsAppendAppendage(monsterObj, "character/mage/appendage/kks_ap/ap_summonmonsterwait.nut")){
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(monsterObj, parentObj, 199, false, "character/mage/appendage/kks_ap/ap_summonmonsterwait.nut", true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
function onEnd_appendage_summonerwait(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
|
|
local monster_Name = ["SandorObj","AuxoObj","AuxooldObj","LuisObj","EcheverraObj","DarkhigherspiritObj","LighthigherspiritObj","WaterhigherspiritObj","FirehigherspiritObj","BabydragonObj","KrutaObj","HeilromObj","CassillasObj","HodorObj","RamosObj"];
|
|
for(local i = 0; i < monster_Name.len(); i++){
|
|
local monster_num = parentObj.getVar(monster_Name[i]).get_obj_vector_size();
|
|
if(monster_num > 0){
|
|
for(local ui = 0; ui < monster_num; ui++){
|
|
local monsterObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar(monster_Name[i]).get_obj_vector(ui));
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(monsterObj, "character/mage/appendage/kks_ap/ap_summonmonsterwait.nut")){
|
|
CNSquirrelAppendage.sq_RemoveAppendage(monsterObj, "character/mage/appendage/kks_ap/ap_summonmonsterwait.nut");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function onSourceKeyFrameFlag_appendage_auxo_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, 45, 45, 7, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,45,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, 45, 45, 9, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,targetObj,45,2,0,0,0,totalDamage,0,0,0,0);
|
|
}
|
|
break;
|
|
case 301://堋?嚙踝蕭嚙踝蕭?堋?
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 45, 45, 11, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,45,3,0,0,0,totalDamage,0,0,0,0);
|
|
break;
|
|
case 401://嚙踝蕭嚙踝蕭
|
|
local sizeRate = 100;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 21) > 0){
|
|
sizeRate = sizeRate + 20;
|
|
}
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 22) > 0){
|
|
sizeRate = sizeRate + 20;
|
|
eclipsehive_bonus2 = eclipsehive_bonus2 + 0.1;
|
|
}
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 23) > 0){
|
|
sizeRate = sizeRate + 30;
|
|
eclipsehive_bonus2 = eclipsehive_bonus2 + 0.1;
|
|
}
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 45, 45, 23, eclipsehive_bonus2) + 100;
|
|
if(appendage.getVar("bool").getBool(10)){
|
|
appendage.getVar("bool").setBool(10, false);
|
|
totalDamage = totalDamage * 50 / 100;
|
|
}
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 23) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0) && parentObj.getVar("ronghe_bool").getBool(0)){
|
|
local number = sqrChr.getVar("AuxoObj").get_obj_vector_size();
|
|
local tz_number = 0;
|
|
local max_number = 9;
|
|
if(number > max_number) {tz_number = number - max_number; number = max_number;}
|
|
print("totalDamage_before = "+totalDamage);
|
|
totalDamage = (totalDamage * (number.tofloat() + tz_number.tofloat() / 2.5)).tointeger();
|
|
print("totalDamage_after = "+totalDamage);
|
|
parentObj.getVar("ronghe_bool").setBool(0, false);
|
|
}
|
|
createPassiveObject_k_k(sqrChr,parentObj,45,4,50,0,0,totalDamage,sizeRate,0,0,0);
|
|
break;
|
|
case 501://嚙踝蕭嚙踝蕭嚙?
|
|
local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0));
|
|
if(targetObj){
|
|
local yPos = targetObj.getYPos();
|
|
local xPos = sq_GetDistancePos(targetObj.getXPos(), parentObj.getDirection(), -50);
|
|
sq_MoveToNearMovablePos(parentObj, xPos, yPos, 0, xPos, yPos, 0, 100, -1, 5);
|
|
}
|
|
break;
|
|
case 502://嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭
|
|
appendage.getVar("bool").setBool(1, true);
|
|
//monsterattack_ksk(parentObj,0);
|
|
break;
|
|
case 503://嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 45, 45, 9, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,45,100,0,0,0,totalDamage,0,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_SUMMONAUXO).isInCoolTime()) sqrChr.startSkillCoolTime(SKILL_BYKK_SUMMONAUXO, sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONAUXO), -1);
|
|
break;
|
|
case 1002://?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭
|
|
local pIntVec = sq_GetGlobalIntVector();
|
|
sq_IntVectorClear(pIntVec);
|
|
sq_IntVectorPush(pIntVec, 3);
|
|
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function proc_appendage_auxo_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,4);
|
|
local timer = appendage.getVar("atktime").get_ct_vector(0);
|
|
local currentTT = timer.Get();
|
|
local tiaozheng = 0;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 23) > 0) tiaozheng = 200;
|
|
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_04,t_03,t_02,t_01];
|
|
local attackIndex = [3,2,1,0];
|
|
local distanceX = [80,60,500,60];
|
|
local distanceXmin = [30,0,0,0];
|
|
local distanceY = [10,10,200,10];
|
|
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, 0) < 1 && i == 0) return;
|
|
if(i == 0) appendage.getVar("bool").setBool(10, true);
|
|
monsterattack_ksk(parentObj,attackIndex[i]);
|
|
return;
|
|
}
|
|
else if(i == 1 || i == 3){
|
|
local prob = 69;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 23) > 0) prob = 20;
|
|
if(sq_getRandom(0,99) >= prob && appendage.getVar("bool").getBool(0) == true){
|
|
appendage.getVar("bool").setBool(0,false);
|
|
monsterattack_ksk(parentObj,6);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
targetObj = sq_FindTarget( parentObj, -1000, 1000, 800, 350);
|
|
if(targetObj){
|
|
sq_SetCurrentDirection(parentObj, sq_GetOppositeDirection(sq_GetDirection(parentObj)));
|
|
}
|
|
}
|
|
break;
|
|
case STATE_ATTACK:
|
|
appendage.getVar("bool").setBool(0,true);
|
|
if(attackIndex == 4){
|
|
if(sqrChr.getVar("summonmonsterwait").getBool(0) == false) parentObj.sendStateOnlyPacket(STATE_STAND);
|
|
}
|
|
else if(attackIndex == 5 && appendage.getVar("bool").getBool(1) == true){
|
|
appendage.getVar("bool").setBool(1, false);
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 23) > 0){
|
|
local ani = parentObj.getCurrentAnimation();
|
|
ani.setSpeedRate(200.0);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onStart_appendage_auxo_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_auxo_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj) return;
|
|
parentObj.sendDestroyPacket(true);
|
|
}
|
|
|
|
function onSourceKeyFrameFlag_appendage_auxoex_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 targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0));
|
|
if(targetObj){
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 45, 45, 27, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,targetObj,45,11,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, 45, 45, 27, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,targetObj,45,12,0,0,0,totalDamage,0,0,0,0);
|
|
}
|
|
break;
|
|
case 301:
|
|
local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0));
|
|
if(targetObj){
|
|
local group = sq_GetGroup(targetObj),uniqueId = sq_GetUniqueId(targetObj);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 45, 45, 28, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr, parentObj, 45, 13, 150, 0, 50, totalDamage * 2, 20, group, uniqueId, 0);
|
|
}
|
|
break;
|
|
case 401:
|
|
local sizeRate = 100;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 21) > 0){
|
|
sizeRate = sizeRate + 20;
|
|
}
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 22) > 0){
|
|
sizeRate = sizeRate + 20;
|
|
eclipsehive_bonus2 = eclipsehive_bonus2 + 0.1;
|
|
}
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 23) > 0){
|
|
sizeRate = sizeRate + 30;
|
|
eclipsehive_bonus2 = eclipsehive_bonus2 + 0.1;
|
|
}
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 45, 45, 29, eclipsehive_bonus2) + 100;
|
|
if(appendage.getVar("bool").getBool(10)){
|
|
appendage.getVar("bool").setBool(10, false);
|
|
totalDamage = totalDamage * 50 / 100;
|
|
}
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 23) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0) && parentObj.getVar("ronghe_bool").getBool(0)){
|
|
totalDamage = totalDamage * sqrChr.getVar("AuxoObj").get_obj_vector_size();
|
|
parentObj.getVar("ronghe_bool").setBool(0, false);
|
|
}
|
|
createPassiveObject_k_k(sqrChr,parentObj,45,14,155,-1,124,totalDamage,sizeRate,0,0,0);
|
|
break;
|
|
case 601:
|
|
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_SUMMONAUXO).isInCoolTime()) sqrChr.startSkillCoolTime(SKILL_BYKK_SUMMONAUXO, sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONAUXO), -1);
|
|
|
|
local pIntVec = sq_GetGlobalIntVector();
|
|
sq_IntVectorClear(pIntVec);
|
|
sq_IntVectorPush(pIntVec, 6);
|
|
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
|
|
break;
|
|
case 701:
|
|
local pIntVec = sq_GetGlobalIntVector();
|
|
sq_IntVectorClear(pIntVec);
|
|
sq_IntVectorPush(pIntVec, 3);
|
|
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function proc_appendage_auxoex_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 currentT = appendage.getTimer().Get();
|
|
|
|
local state = parentObj.getState();
|
|
local attackIndex = parentObj.getAttackIndex();
|
|
|
|
switch(state){
|
|
case STATE_STAND:
|
|
// appendage.getVar("speed").setBool(0,true);
|
|
if(sqrChr.getVar("summonmonsterwait").getBool(0)) monsterattack_ksk(parentObj,4);
|
|
local timer = appendage.getVar("atktime").get_ct_vector(0);
|
|
local currentTT = timer.Get();
|
|
local tiaozheng = 0;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 23) > 0) tiaozheng = 200;
|
|
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 sizeRate = 1;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 23) > 0) sizeRate = 2;
|
|
local skillt = [t_03,t_02,t_01];
|
|
local attackIndex = [3,2,0];
|
|
local distanceX = [450,400 * sizeRate,400 * sizeRate];
|
|
local distanceXmin = [200,0,0];
|
|
local distanceY = [50,150,150];
|
|
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, 0) < 1 && i == 0) return;
|
|
if(i == 0) appendage.getVar("bool").setBool(10, true);
|
|
if(i == 2 && sq_getRandom(0,99) >= 69) attackIndex[i] = 1;
|
|
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:
|
|
appendage.getVar("bool").setBool(0,true);
|
|
if(attackIndex == 4){
|
|
if(sqrChr.getVar("summonmonsterwait").getBool(0) == false) parentObj.sendStateOnlyPacket(STATE_STAND);
|
|
}
|
|
// if(appendage.getVar("speed").getBool(0) == true){
|
|
// appendage.getVar("speed").setBool(0,false);
|
|
// parentObj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, eclipsehive_bonus);
|
|
// }
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onStart_appendage_auxoex_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_auxoex_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj) return;
|
|
parentObj.sendDestroyPacket(true);
|
|
}
|
|
|
|
function onSourceKeyFrameFlag_appendage_babydragon_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, 80, 80, 7, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,80,1,0,0,0,totalDamage,0,0,0,0);
|
|
break;
|
|
case 201://?嚙踝蕭2
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 80, 80, 7, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,80,2,0,0,0,totalDamage,0,0,0,0);
|
|
break;
|
|
case 301://嚙踝蕭牊
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 80, 80, 9, eclipsehive_bonus) + 100;
|
|
local sizeRate = 100;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 28) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0) == false) sizeRate = 250;
|
|
createPassiveObject_k_k(sqrChr,parentObj,80,3,80,0,40,totalDamage,sizeRate,0,0,0);
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 29) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0) == false) createPassiveObject_k_k(sqrChr,parentObj,80,3,100,0,40,totalDamage,sizeRate,0,0,0);
|
|
break;
|
|
case 401://嚙踝蕭嚙踝蕭
|
|
local xpos = 150;
|
|
if(parentObj.getDirection() == ENUM_DIRECTION_LEFT) xpos = -150;
|
|
local sizeRate = 100;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 29) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0) == false) sizeRate = 150;
|
|
sq_CreateParticle("monster/character/mage/madeby_k_k/babydragon/particle/flamethrower.ptl", parentObj, xpos, 0, 30, true, 20, 0, 10);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 80, 80, 10, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,80,4,0,0,0,totalDamage,sizeRate,0,0,0);
|
|
break;
|
|
case 501://嚙踝蕭?
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 80, 80, 9, eclipsehive_bonus) + 100;
|
|
local etcSub = 0;
|
|
local sizeRate = 100;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 28) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0) == false) sizeRate = 250;
|
|
if(sq_GetBonusRateWithPassive(sqrChr, 80, 80, 11, 1.0) + 100 > 0) etcSub = 1;
|
|
createPassiveObject_k_k(sqrChr,parentObj,80,5,80,0,40,totalDamage, etcSub, sizeRate,0,0);
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 29) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0) == false) createPassiveObject_k_k(sqrChr,parentObj,80,5,100,0,40,totalDamage, etcSub, sizeRate,0,0);
|
|
break;
|
|
case 601://旓?1
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 80, 80, 18, eclipsehive_bonus2) + 100;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 29) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0) && parentObj.getVar("ronghe_bool").getBool(0)){
|
|
totalDamage = totalDamage * sqrChr.getVar("BabydragonObj").get_obj_vector_size();
|
|
parentObj.getVar("ronghe_bool").setBool(0, false);
|
|
}
|
|
local ani = parentObj.getCurrentAnimation();
|
|
local delay = ani.getDelaySum(0,0);
|
|
local sizeRate = 100;
|
|
local hittime = delay * 2;
|
|
local add_bonus = 0;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 27) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0)) sizeRate = sizeRate + 10;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 28) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0)){add_bonus = add_bonus + 10; hittime = hittime * 70 /100;}
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 29) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0)){sizeRate = sizeRate + 20; add_bonus = add_bonus + 20;}
|
|
if(add_bonus > 0) totalDamage = totalDamage * (100 + add_bonus) / 100;
|
|
if(appendage.getVar("bool").getBool(10)){
|
|
appendage.getVar("bool").setBool(10, false);
|
|
totalDamage = totalDamage * 50 / 100;
|
|
}
|
|
createPassiveObject_k_k(sqrChr,parentObj,80,6,0,0,0,totalDamage,delay,sizeRate,hittime,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_SUMMONBABYDRAGON).isInCoolTime()) sqrChr.startSkillCoolTime(SKILL_BYKK_SUMMONBABYDRAGON, sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONBABYDRAGON), -1);
|
|
break;
|
|
case 1002://?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭
|
|
local attackIndex = 5;
|
|
if(sqrChr.getVar("eclipsehive_select").getBool(0) && appendage.getVar("custom").getBool(0)) attackIndex = 9;
|
|
local pIntVec = sq_GetGlobalIntVector();
|
|
sq_IntVectorClear(pIntVec);
|
|
sq_IntVectorPush(pIntVec, attackIndex);
|
|
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
|
|
break;
|
|
case 10001://裁決
|
|
sq_AddDrawOnlyAniFromParent(parentObj, "passiveobject/madeby_k_k/animation/babydragon/newskill/stormbreath/astractransform_starteff05.ani", 0, 0, sq_GetObjectHeight(parentObj) / 2);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 80, 80, 9, 1.0) + 100;
|
|
local group = sq_GetGroup(parentObj);
|
|
local uniqueId = sq_GetUniqueId(parentObj);
|
|
createPassiveObject_k_k(sqrChr,parentObj,80,11,0,0,0,totalDamage,group,uniqueId,0,0);
|
|
sq_SendCreatePassiveObjectPacketPos(parentObj, 1008605, 0, 0, 0, 600);
|
|
break;
|
|
case 10002://嘶吼
|
|
sq_AddDrawOnlyAniFromParent(parentObj, "passiveobject/madeby_k_k/animation/babydragon/newskill/stormbreath/astractransform_starteff05.ani", 0, 0, sq_GetObjectHeight(parentObj) / 2);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 80, 80, 18, 1.0) + 100;
|
|
local group = sq_GetGroup(parentObj);
|
|
local uniqueId = sq_GetUniqueId(parentObj);
|
|
createPassiveObject_k_k(sqrChr,parentObj,80,12,0,0,320,totalDamage,group,uniqueId,0,0);
|
|
sq_SendCreatePassiveObjectPacketPos(parentObj, 1008605, 0, 0, 0, 600);
|
|
break;
|
|
case 10003://龍息
|
|
sq_AddDrawOnlyAniFromParent(parentObj, "passiveobject/madeby_k_k/animation/babydragon/newskill/stormbreath/astractransform_starteff05.ani", 0, 0, sq_GetObjectHeight(parentObj) / 2);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 80, 80, 9, 1.0) + 100;
|
|
local group = sq_GetGroup(parentObj);
|
|
local uniqueId = sq_GetUniqueId(parentObj);
|
|
createPassiveObject_k_k(sqrChr,parentObj,80,13,0,0,320,totalDamage,group,uniqueId,0,0);
|
|
sq_SendCreatePassiveObjectPacketPos(parentObj, 1008605, 0, 0, 0, 600);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function proc_appendage_babydragon_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 skill_level = sq_GetSkillLevel(sqrChr, 72);
|
|
local attackIndex = parentObj.getAttackIndex();
|
|
|
|
switch(state){
|
|
case STATE_STAND:
|
|
if(sqrChr.getVar("summonmonsterwait").getBool(0)) monsterattack_ksk(parentObj,6);
|
|
local timer = appendage.getVar("atktime").get_ct_vector(0);
|
|
local currentTT = timer.Get();
|
|
local balance = 0;
|
|
//if(appendage.getVar("custom").getBool(0)) balance = -100;
|
|
if(currentTT < ATK_TIME + balance) 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 = [5,3,2,0];
|
|
local distanceX = [300,300,300,30];
|
|
local distanceXmin = [40,40,40,0];
|
|
local distanceY = [100,10,20,10];
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 28) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0) == false){
|
|
distanceX = [300,500,700,30];
|
|
distanceY = [100,40,60,30];
|
|
}
|
|
for(local i = 0;i < skillt.len(); i++){
|
|
if(skillt[i] && skillt[i].isOnEvent(currentT) && 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 == 3 && sq_getRandom(0,100) >= 50) attackIndex[i] = 1;
|
|
if(i == 2 && sq_getRandom(0,100) >= 50) attackIndex[i] = 4;
|
|
if(sq_IsMyControlObject(parentObj)){
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 1) < 1 && i == 0) return;
|
|
if(i == 0) appendage.getVar("bool").setBool(10, true);
|
|
if(appendage.getVar("custom").getBool(0)){
|
|
if(sq_getRandom(1,10000) > 6666){
|
|
monsterattack_ksk(parentObj,8 + sq_getRandom(0, 1) * 2);
|
|
return;
|
|
}
|
|
}
|
|
monsterattack_ksk(parentObj,attackIndex[i]);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case STATE_ATTACK:
|
|
if(attackIndex == 6){
|
|
if(sqrChr.getVar("summonmonsterwait").getBool(0) == false) parentObj.sendStateOnlyPacket(STATE_STAND);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onStart_appendage_babydragon_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_babydragon_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj) return;
|
|
parentObj.sendDestroyPacket(true);
|
|
}
|
|
|
|
function onSourceKeyFrameFlag_appendage_casillas_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://嚙誶g蕭?嚙踝蕭 嚙踝蕭??
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONCASILLAS, SKILL_BYKK_SUMMONCASILLAS, 8, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONCASILLAS,1,0,0,0,totalDamage,0,0,0,0);
|
|
break;
|
|
case 201://嚙誶g蕭?嚙踝蕭 嚙踝蕭??
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONCASILLAS, SKILL_BYKK_SUMMONCASILLAS, 9, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONCASILLAS,2,0,0,0,totalDamage,0,0,0,0);
|
|
break;
|
|
case 301://嚙誶g蕭?嚙踝蕭 ?嚙踝蕭?
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONCASILLAS, SKILL_BYKK_SUMMONCASILLAS, 10, eclipsehive_bonus) + 100;
|
|
local group = sq_GetGroup(parentObj);
|
|
local uniqueId = sq_GetUniqueId(parentObj);
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONCASILLAS,3,0,0,0,totalDamage,group,uniqueId,0,0);
|
|
break;
|
|
case 401://嚙踝蕭?? 嚙踝蕭 嚙踝蕭苤?嚙踝蕭嚙踝蕭嚙踝蕭琲嚙踝蕭
|
|
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_SUMMONCASILLAS).isInCoolTime()) sqrChr.startSkillCoolTime(SKILL_BYKK_SUMMONCASILLAS, sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONCASILLAS), -1);
|
|
break;
|
|
case 402://嚙踝蕭?? 嚙踝蕭 嚙踝蕭苤?嚙踝蕭嚙?茷
|
|
monsterattack_ksk(parentObj,5);
|
|
break;
|
|
case 403://嚙踝蕭?? 嚙踝蕭 嚙踝蕭苤? 嚙踝蕭嚙?
|
|
local direction = parentObj.getDirection();
|
|
local xPos = parentObj.getXPos();
|
|
local yPos = parentObj.getYPos();
|
|
local xPos_distance = sq_GetDistancePos(xPos, parentObj.getDirection(), 200);
|
|
sq_MoveToNearMovablePos(parentObj, xPos_distance, yPos, 0, xPos, yPos, 0, 100, -1, 5);
|
|
sq_SetCurrentDirection(parentObj, direction);
|
|
break;
|
|
case 404://嚙踝蕭?? 嚙踝蕭 嚙踝蕭苤? 嚙踝蕭嚙?
|
|
local direction = parentObj.getDirection();
|
|
local xPos = parentObj.getXPos();
|
|
local yPos = parentObj.getYPos();
|
|
local xPos_distance = sq_GetDistancePos(xPos, parentObj.getDirection(), 180);
|
|
sq_MoveToNearMovablePos(parentObj, xPos_distance, yPos, 0, xPos, yPos, 0, 100, -1, 5);
|
|
sq_SetCurrentDirection(parentObj, direction);
|
|
break;
|
|
case 405://嚙踝蕭?? 嚙踝蕭 嚙踝蕭苤? 嚙踝蕭嚙? 嚙踝蕭?
|
|
local direction = parentObj.getDirection();
|
|
local xPos = parentObj.getXPos();
|
|
local yPos = parentObj.getYPos();
|
|
local xPos_distance = sq_GetDistancePos(xPos, parentObj.getDirection(), 30);
|
|
sq_MoveToNearMovablePos(parentObj, xPos_distance, yPos, 0, xPos, yPos, 0, 100, -1, 5);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONCASILLAS, SKILL_BYKK_SUMMONCASILLAS, 11, eclipsehive_bonus2) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONCASILLAS,41,0,0,0,totalDamage,0,0,0,0);
|
|
break;
|
|
case 406://嚙踝蕭?? 嚙踝蕭 嚙踝蕭苤?嚙踝蕭嚙?茷
|
|
monsterattack_ksk(parentObj,6);
|
|
break;
|
|
case 407://嚙踝蕭?? 嚙踝蕭 嚙踝蕭苤?嚙?茷 嚙踝蕭?
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local delay = pAni.getDelaySum(2, 2);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONCASILLAS, SKILL_BYKK_SUMMONCASILLAS, 11, eclipsehive_bonus2) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONCASILLAS,42,0,0,0,totalDamage,delay,0,0,0);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function proc_appendage_casillas_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);//嚙誶g蕭?嚙踝蕭 嚙踝蕭??
|
|
local t_02 = appendage.getVar("skill_2").get_timer_vector(0);//嚙誶g蕭?嚙踝蕭 嚙踝蕭??
|
|
local t_03 = appendage.getVar("skill_3").get_timer_vector(0);//嚙誶g蕭?嚙踝蕭 ?嚙踝蕭?
|
|
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:
|
|
// appendage.getVar("speed").setBool(0,true);
|
|
if(sqrChr.getVar("summonmonsterwait").getBool(0)) monsterattack_ksk(parentObj,3);
|
|
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_04 && t_04.isOnEvent(currentT) == true){
|
|
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) && !CNSquirrelAppendage.sq_IsAppendAppendage(targetObj, "character/mage/k_k_made/appendage/aptomonster/skill_ap/ap_casillas_skill.nut")){
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(targetObj, sqrChr, -1, false, "character/mage/k_k_made/appendage/aptomonster/skill_ap/ap_casillas_skill.nut", true);
|
|
targetObj.getVar("casillasatck").clear_vector();
|
|
targetObj.getVar("casillasatck").push_vector(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_03,t_02,t_01];
|
|
local attackIndex = [2,1,0];
|
|
local distanceX = [300,200,200];
|
|
local distanceXmin = [0,0,0];
|
|
local distanceY = [30,30,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 2:
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local currentT = sq_GetCurrentTime(pAni);
|
|
local frameIndex = sq_GetAnimationFrameIndex(pAni);
|
|
local fireT = pAni.getDelaySum(0, 7);
|
|
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 >= 4 && frameIndex <= 7){
|
|
if(parentObj.isMovablePos(dstX,parentObj.getYPos())) sq_setCurrentAxisPos(parentObj, 0, dstX);
|
|
}
|
|
break;
|
|
case 3:
|
|
if(sqrChr.getVar("summonmonsterwait").getBool(0) == false) parentObj.sendStateOnlyPacket(STATE_STAND);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onStart_appendage_casillas_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_casillas_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj) return;
|
|
|
|
parentObj.sendDestroyPacket(true);
|
|
|
|
}
|
|
|
|
function onSourceKeyFrameFlag_appendage_darkhigherspirit_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 totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, 6, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITDARKHIGHER,1,0,0,0,totalDamage,0,0,0,0);
|
|
break;
|
|
case 201://嚙踝蕭嚙踝蕭?嚙踝蕭嚙踝蕭?
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, 7, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITDARKHIGHER,2,0,0,0,totalDamage,0,0,0,0);
|
|
break;
|
|
case 301://嚙踝蕭嚙踝蕭?
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, 19, eclipsehive_bonus) + 100;
|
|
local time = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, 18, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITDARKHIGHER,3,150,0,0,totalDamage,time,0,0,0);
|
|
break;
|
|
case 401://嚙踝蕭?
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, 19, eclipsehive_bonus) + 100;
|
|
local time = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, 18, eclipsehive_bonus) + 100;
|
|
local sub = 1;
|
|
if(parentObj.getVar("skill").getBool(0) == true){
|
|
totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, 20, eclipsehive_bonus2) + 100;
|
|
time = 3500;
|
|
sub = 2;
|
|
}
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITDARKHIGHER,4,150,0,0,totalDamage,time,sub,0,0);
|
|
parentObj.getVar("skill").setBool(0, false);
|
|
break;
|
|
case 601://晬嚙?
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, SKILL_BYKK_SUMMONSPIRITDARKHIGHER, 23, 1.0) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITDARKHIGHER,62,150,-1,-1,0,3000,0,0,0);
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITDARKHIGHER,61,150,0,0,totalDamage,3000,0,0,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_SUMMONSPIRITDARKHIGHER).isInCoolTime()) sqrChr.startSkillCoolTime(SKILL_BYKK_SUMMONSPIRITDARKHIGHER, sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONSPIRITDARKHIGHER), -1);
|
|
break;
|
|
case 1002://?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭
|
|
parentObj.getVar("skill").setBool(0, true);
|
|
monsterattack_ksk(parentObj,3);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function proc_appendage_darkhigherspirit_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, 200, 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 = [300,200,200,100];
|
|
local distanceXmin = [0,0,0,0];
|
|
local distanceY = [50,40,20,10];
|
|
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, 10) < 1 && i == 0) return;
|
|
monsterattack_ksk(parentObj,attackIndex[i]);
|
|
if(parentObj.getVar("darkaura").size_vector() > 0){
|
|
local attacknum = parentObj.getVar("darkaura").get_vector(0);
|
|
parentObj.getVar("darkaura").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_darkhigherspirit_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_darkhigherspirit_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj) return;
|
|
parentObj.sendDestroyPacket(true);
|
|
}
|
|
|
|
function onSourceKeyFrameFlag_appendage_echeverra_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://嚙踝蕭嚙踝蕭嚙?
|
|
parentObj.sq_PlaySound("ECHEVERRA_ARM_ATK");
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 47, 47, 13, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,47,1,0,0,0,totalDamage,0,0,0,0);
|
|
break;
|
|
case 201://嚙踝蕭嚙踝蕭嚙踝蕭?
|
|
parentObj.sq_PlaySound("ECHEVERRA_WAVE");
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 47, 47, 10, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,47,2,80,0,100,totalDamage,0,0,0,0);
|
|
break;
|
|
case 301://阰嚙踝蕭嚙踝蕭?
|
|
parentObj.sq_PlaySound("ECHEVERRA_INTENSE_AURA");
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/mage/k_k_made/appendage/aptomonster/ap_echeverra_buff.nut")){
|
|
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/mage/k_k_made/appendage/aptomonster/ap_echeverra_buff.nut");
|
|
}
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(parentObj, sqrChr, -1, false, "character/mage/k_k_made/appendage/aptomonster/ap_echeverra_buff.nut", true);
|
|
AddAppendage.sq_SetValidTime(25000);
|
|
break;
|
|
case 401://??ECHEVERRA_READY
|
|
createPassiveObject_k_k(sqrChr,parentObj,47,4,100,0,0,0,0,0,0,0);
|
|
break;
|
|
case 501://怑嚙踝蕭
|
|
parentObj.sq_PlaySound("ECHEVERRA_LASER");
|
|
local hit = 3;
|
|
if(parentObj.getVar("skill").getBool(0) == true){
|
|
parentObj.getVar("skill").setBool(0, false);
|
|
if(sq_getRandom(0,99) >= 49){
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 47, 47, 25, eclipsehive_bonus2) + 100;
|
|
if(appendage.getVar("bool").getBool(10)){
|
|
appendage.getVar("bool").setBool(10, false);
|
|
totalDamage = totalDamage * 50 / 100;
|
|
}
|
|
createPassiveObject_k_k(sqrChr,parentObj,47,51,250,0,0,totalDamage,0,0,0,0);
|
|
return true;
|
|
}
|
|
hit = 8;
|
|
}
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 47, 47, 12, eclipsehive_bonus) + 100;
|
|
if(hit == 8) totalDamage = sq_GetBonusRateWithPassive(sqrChr, 47, 47, 25, eclipsehive_bonus2) + 100;
|
|
if(appendage.getVar("bool").getBool(10)){
|
|
appendage.getVar("bool").setBool(10, false);
|
|
totalDamage = totalDamage * 50 / 100;
|
|
}
|
|
createPassiveObject_k_k(sqrChr,parentObj,47,5,50,0,80,totalDamage,hit,0,0,0);
|
|
sq_SendCreatePassiveObjectPacket(parentObj, 30555, 0, 100, 0, 90, parentObj.getDirection());
|
|
break;
|
|
case 901:
|
|
sq_SendCreatePassiveObjectPacket(parentObj, 1008607, 0, 0, 0, 325, parentObj.getDirection());
|
|
|
|
local number = 0;
|
|
if(parentObj.getVar("grant").getBool(1) == true) number = 1;
|
|
if(parentObj.getVar("grant").getBool(2) == true) number = 2;
|
|
if(parentObj.getVar("grant").getBool(3) == true) number = 3;
|
|
local monstername = ["DarkhigherspiritObj","FirehigherspiritObj","LighthigherspiritObj","WaterhigherspiritObj"];
|
|
local monsterObj = sqrChr.getVar(monstername[number]).get_obj_vector(0);
|
|
|
|
local group = sq_GetGroup(monsterObj);
|
|
local uniqueId = sq_GetUniqueId(monsterObj);
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local Delay = pAni.getDelaySum(0,3);
|
|
sq_flashScreen(parentObj,300,Delay - 300,200,230, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
createPassiveObject_k_k(parentObj,parentObj,47,9,-15,0,0,0,group,uniqueId,Delay,0);
|
|
for(local i = 0; i < 4; i++){
|
|
parentObj.getVar("grant").setBool(i,false);
|
|
}
|
|
break;
|
|
case 902:
|
|
parentObj.sq_PlaySound("SARPOZA_PUNCH_CAST_01");
|
|
local objject = parentObj.getVar("kingsobj").get_obj_vector(0);
|
|
if(objject){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(objject);
|
|
colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
|
|
}
|
|
break;
|
|
case 903:
|
|
parentObj.sq_PlaySound("ECHEVERRA_ARM_ATK");
|
|
local objject = parentObj.getVar("kingsobj").get_obj_vector(0);
|
|
if(objject){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(objject);
|
|
colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
|
|
}
|
|
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_SUMMONECHEVERRA).isInCoolTime()) sqrChr.startSkillCoolTime(SKILL_BYKK_SUMMONECHEVERRA, sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONECHEVERRA), -1);
|
|
break;
|
|
case 1002://?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭
|
|
parentObj.getVar("skill").setBool(0,true);
|
|
local atkIndex = 4;
|
|
if(parentObj.getVar("isHighestEcheverra").getBool(0)){
|
|
parentObj.getVar("isHighestEcheverra").setBool(0, false);
|
|
atkIndex = 8;
|
|
}
|
|
monsterattack_ksk(parentObj,atkIndex);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function proc_appendage_echeverra_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 activeObj = sq_GetCNRDObjectToActiveObject(parentObj);
|
|
if(sq_IsValidActiveStatus(activeObj, ACTIVESTATUS_SLOW)){
|
|
sq_ReleaseActiveStatus(activeObj, ACTIVESTATUS_SLOW);
|
|
}
|
|
|
|
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_6").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,6);
|
|
local objject = parentObj.getVar("kingsobj").get_obj_vector(0);
|
|
if(objject && objject.getState() == 20) objject.setValid(false);
|
|
local grant_timer = sqrChr.getVar("grant").get_ct_vector(0);
|
|
if(grant_timer){
|
|
if(sq_GetIntData(sqrChr, 47, 13) < 1){
|
|
sqrChr.getVar("grant").clear_ct_vector();
|
|
return;
|
|
}
|
|
//print(sq_GetIntData(sqrChr, 47, 13));
|
|
local grant_time = grant_timer.Get();
|
|
local cooltime = 15000;
|
|
local size = sqrChr.getVar("EcheverraObj").get_obj_vector_size();
|
|
if(size > 1) cooltime = cooltime / size + 1000;
|
|
if(grant_time >= cooltime){
|
|
grant_timer.Reset();
|
|
grant_timer.Start(10000,0);
|
|
local number01 = sqrChr.getVar("DarkhigherspiritObj").get_obj_vector_size();
|
|
local number02 = sqrChr.getVar("FirehigherspiritObj").get_obj_vector_size();
|
|
local number03 = sqrChr.getVar("LighthigherspiritObj").get_obj_vector_size();
|
|
local number04 = sqrChr.getVar("WaterhigherspiritObj").get_obj_vector_size();
|
|
local monstername = [];
|
|
if(number01 > 0) monstername.push("DarkhigherspiritObj");
|
|
if(number02 > 0) monstername.push("FirehigherspiritObj");
|
|
if(number03 > 0) monstername.push("LighthigherspiritObj");
|
|
if(number04 > 0) monstername.push("WaterhigherspiritObj");
|
|
if(monstername.len() <= 0) return;
|
|
local random_number;
|
|
if(monstername.len() == 1){
|
|
random_number = 0;
|
|
}
|
|
else if(monstername.len() == 2){
|
|
random_number = sq_getRandom(0,1);
|
|
}
|
|
else{
|
|
random_number = sq_getRandom(0,monstername.len() - 1);
|
|
}
|
|
// print(random_number);
|
|
local monsterObj = sq_GetCNRDObjectToActiveObject(sqrChr.getVar(monstername[random_number]).get_obj_vector(0));
|
|
if(monsterObj && !CNSquirrelAppendage.sq_IsAppendAppendage(monsterObj, "character/mage/k_k_made/appendage/aptomonster/skill_ap/ap_spikeking_grant.nut")){
|
|
switch(monsterObj.getCollisionObjectIndex()){
|
|
case MONSTER_ID_DARKHIGHERSPIRIT:
|
|
parentObj.getVar("grant").setBool(0,true);
|
|
break;
|
|
case MONSTER_ID_FIREHIGHERSPIRIT:
|
|
parentObj.getVar("grant").setBool(1,true);
|
|
break;
|
|
case MONSTER_ID_LIGHTHIGHERSPIRIT:
|
|
parentObj.getVar("grant").setBool(2,true);
|
|
break;
|
|
case MONSTER_ID_WATERHIGHERSPIRIT:
|
|
parentObj.getVar("grant").setBool(3,true);
|
|
break;
|
|
}
|
|
}
|
|
else{
|
|
if(monstername.len() == 1) return;
|
|
local random_number2 = sq_getRandom(0,monstername.len() - 1);
|
|
if(random_number2 == random_number && random_number2 != 0) random_number2 = random_number2 - 1;
|
|
if(random_number2 == random_number && random_number2 == 0) random_number2 = 1;
|
|
local monsterObj = sq_GetCNRDObjectToActiveObject(sqrChr.getVar(monstername[random_number2]).get_obj_vector(0));
|
|
if(monsterObj && !CNSquirrelAppendage.sq_IsAppendAppendage(monsterObj, "character/mage/k_k_made/appendage/aptomonster/skill_ap/ap_spikeking_grant.nut")){
|
|
switch(monsterObj.getCollisionObjectIndex()){
|
|
case MONSTER_ID_DARKHIGHERSPIRIT:
|
|
parentObj.getVar("grant").setBool(0,true);
|
|
break;
|
|
case MONSTER_ID_FIREHIGHERSPIRIT:
|
|
parentObj.getVar("grant").setBool(1,true);
|
|
break;
|
|
case MONSTER_ID_LIGHTHIGHERSPIRIT:
|
|
parentObj.getVar("grant").setBool(2,true);
|
|
break;
|
|
case MONSTER_ID_WATERHIGHERSPIRIT:
|
|
parentObj.getVar("grant").setBool(3,true);
|
|
break;
|
|
}
|
|
}
|
|
else return;
|
|
}
|
|
monsterattack_ksk(parentObj,7);
|
|
}
|
|
}
|
|
else{
|
|
if(sq_GetIntData(sqrChr, 47, 13) > 0){
|
|
sqrChr.getVar("grant").clear_ct_vector();
|
|
sqrChr.getVar("grant").push_ct_vector();
|
|
local timer = sqrChr.getVar("grant").get_ct_vector(0);
|
|
timer.Reset();
|
|
timer.Start(10000,0);
|
|
}
|
|
}
|
|
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;
|
|
}
|
|
appendage.getVar("speed").setBool(0,true);
|
|
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_06,t_05,t_04,t_02,t_01];
|
|
local attackIndex = [4,4,3,1,0];
|
|
local distanceX = [800,800,500,800,150];
|
|
local distanceXmin = [0,0,0,0,0];
|
|
local distanceY = [30,30,10,25,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(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 3) < 1 && i == 0) return;
|
|
else parentObj.getVar("skill").setBool(0,true);
|
|
if(i == 1) parentObj.getVar("skill").setBool(0,false);
|
|
if(i == 0) appendage.getVar("bool").setBool(10, true);
|
|
monsterattack_ksk(parentObj,attackIndex[i]);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case STATE_ATTACK:
|
|
if(attackIndex == 6){
|
|
if(sqrChr.getVar("summonmonsterwait").getBool(0) == false) parentObj.sendStateOnlyPacket(STATE_STAND);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onStart_appendage_echeverra_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
parentObj.sq_PlaySound("ECHEVERRA_INVOKE");
|
|
if(sq_IsMyControlObject(parentObj)){
|
|
monsterattack_ksk(parentObj,2);
|
|
}
|
|
|
|
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_echeverra_bykk(appendage)
|
|
{
|
|
if(!appendage) return;
|
|
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj) return;
|
|
parentObj.sendDestroyPacket(true);
|
|
}
|
|
|
|
function onSourceKeyFrameFlag_appendage_firehigherspirit_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 totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, 6, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITFIREHIGHER,1,0,0,0,totalDamage,0,0,0,0);
|
|
break;
|
|
case 201:
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, 7, eclipsehive_bonus) + 100;
|
|
local totalDamage2 = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, 12, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITFIREHIGHER,2,0,0,0,totalDamage,0,0,0,0);
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITFIREHIGHER,21,50,0,0,totalDamage2,0,0,0,0);
|
|
break;
|
|
case 301:
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, 21, eclipsehive_bonus) + 100;
|
|
local group = sq_GetGroup(parentObj);
|
|
local uniqueId = sq_GetUniqueId(parentObj);
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITFIREHIGHER,31,0,0,0,totalDamage,group,uniqueId,0,0);
|
|
local speed = 75.0;
|
|
if(parentObj.getDirection() == ENUM_DIRECTION_LEFT) speed = -75.0;
|
|
sq_SetVelocity(parentObj, 0, speed);
|
|
break;
|
|
case 302:
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, 22, eclipsehive_bonus) + 100;
|
|
local group = sq_GetGroup(parentObj);
|
|
local uniqueId = sq_GetUniqueId(parentObj);
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITFIREHIGHER,32,0,0,0,totalDamage,group,uniqueId,0,0);
|
|
break;
|
|
case 303:
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, 22, eclipsehive_bonus) + 100;
|
|
local group = sq_GetGroup(parentObj);
|
|
local uniqueId = sq_GetUniqueId(parentObj);
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITFIREHIGHER,33,0,0,0,totalDamage,group,uniqueId,0,0);
|
|
break;
|
|
case 401:
|
|
local totalDamage1 = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, 21, eclipsehive_bonus2) + 100;
|
|
local totalDamage2 = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, 22, eclipsehive_bonus2) + 100;
|
|
local totalDamage3 = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, 23, eclipsehive_bonus2) + 100;
|
|
local totalDamage = totalDamage1 + totalDamage2 + totalDamage3;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITFIREHIGHER,4,150,0,0,totalDamage,0,0,0,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_SUMMONSPIRITFIREHIGHER).isInCoolTime()) sqrChr.startSkillCoolTime(SKILL_BYKK_SUMMONSPIRITFIREHIGHER, sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONSPIRITFIREHIGHER), -1);
|
|
break;
|
|
case 1002://?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭
|
|
monsterattack_ksk(parentObj,3);
|
|
break;
|
|
case 1006://嚙踝蕭?
|
|
sq_SendCreatePassiveObjectPacket(parentObj, 1008607, 0, 0, 0, 120, parentObj.getDirection());
|
|
local number = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, 27, 1.0) + 100;
|
|
for(local i = 0; i < number; i++){
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, SKILL_BYKK_SUMMONSPIRITFIREHIGHER, 29, 1.0) + 100;
|
|
local group = sq_GetGroup(parentObj);//?
|
|
local uniqueId = sq_GetUniqueId(parentObj);//嚙踝蕭嚙踝蕭ID
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITFIREHIGHER,61,0,0,0,totalDamage,number,i + 1,group,uniqueId);
|
|
}
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function proc_appendage_firehigherspirit_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);
|
|
|
|
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)){
|
|
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 = [300,200,200,100];
|
|
local distanceXmin = [50,0,0,0];
|
|
local distanceY = [50,40,20,10];
|
|
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, 11) < 1 && i == 0) return;
|
|
monsterattack_ksk(parentObj,attackIndex[i]);
|
|
if(parentObj.getVar("firestorm").size_vector() > 0){
|
|
local attacknum = parentObj.getVar("firestorm").get_vector(0);
|
|
parentObj.getVar("firestorm").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_firehigherspirit_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_firehigherspirit_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj) return;
|
|
parentObj.sendDestroyPacket(true);
|
|
}
|
|
|
|
function onSourceKeyFrameFlag_appendage_heilrom_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;
|
|
|
|
switch(flagIndex){
|
|
case 101:
|
|
sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/heilrom/animation/skill_heilrom_effect_back.ani", 0, -1, 0);
|
|
sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/heilrom/animation/skill_heilrom_effect_front.ani", 0, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/heilrom/animation/skill_heilrom_effect00.ani", 0, -1, -40);
|
|
break;
|
|
case 102:
|
|
if(!sq_GetSkill(sqrChr, SKILL_BYKK_SUMMONHEILROM).isInCoolTime()) sqrChr.startSkillCoolTime(SKILL_BYKK_SUMMONHEILROM, sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONHEILROM), -1);
|
|
local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONHEILROM);
|
|
local HP_heal = sq_GetLevelData(sqrChr, SKILL_BYKK_SUMMONHEILROM, 14, skillLevel);
|
|
local objmg = parentObj.getObjectManager();
|
|
for(local i= 0; i < objmg.getCollisionObjectNumber(); i++){
|
|
local object = objmg.getCollisionObject(i);
|
|
if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && !parentObj.isEnemy(object)){
|
|
local activeObj = sq_GetCNRDObjectToActiveObject(object);
|
|
local hpMax = activeObj.getHpMax();
|
|
local MpMax = activeObj.getMpMax();
|
|
local hp = activeObj.getHp();
|
|
local mp = activeObj.getMp();
|
|
if(!isSameObject(activeObj,sqrChr)){
|
|
activeObj.setHp(hp + hpMax * HP_heal / 1000, null, true);
|
|
}
|
|
else{
|
|
sqrChr.sq_SendSetHpPacket(hp + hpMax * HP_heal / 1000, false, parentObj);
|
|
sqrChr.sq_SendSetMpPacket(mp + MpMax * HP_heal / 1000, false, parentObj);
|
|
}
|
|
}
|
|
}
|
|
//printp("111111111111111111"+"\n");
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function proc_appendage_heilrom_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 = appendage.getVar("buff01").get_timer_vector(0);
|
|
local t2 = appendage.getVar("buff02").get_timer_vector(0);
|
|
local currentT = appendage.getTimer().Get();
|
|
|
|
if(t2 && t2.isOnEvent(currentT) == true){
|
|
monsterattack_ksk(parentObj,0);
|
|
return;
|
|
}
|
|
|
|
if(t && t.isOnEvent(currentT) == true){
|
|
local buff_range = appendage.getVar("buffPx").get_vector(0);
|
|
local elementAttack = appendage.getVar("buffPx").get_vector(1);
|
|
local attackSpeed = appendage.getVar("buffPx").get_vector(2);
|
|
local moveSpeed = appendage.getVar("buffPx").get_vector(3);
|
|
local castSpeed = appendage.getVar("buffPx").get_vector(4);
|
|
local skillLevel = appendage.getVar("buffPx").get_vector(5);
|
|
|
|
local objmg = sqrChr.getObjectManager(); //嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭庢嚙踝蕭嚙踝蕭
|
|
for(local i= 0; i < objmg.getCollisionObjectNumber(); i++){
|
|
local object = objmg.getCollisionObject(i);
|
|
if(object.isObjectType(OBJECTTYPE_ACTIVE) && !sqrChr.isEnemy(object)){
|
|
local activeObj = sq_GetCNRDObjectToActiveObject(object);
|
|
if(sq_Abs(activeObj.getXPos() - parentObj.getXPos()) <= buff_range && sq_Abs(activeObj.getYPos() - parentObj.getYPos()) <= buff_range / 2){
|
|
if(!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, "character/mage/k_k_made/appendage/aptomonster/ap_heilrom_normalbuff.nut")){
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, parentObj, SKILL_BYKK_SUMMONHEILROM, false, "character/mage/k_k_made/appendage/aptomonster/ap_heilrom_normalbuff.nut", true);
|
|
AddAppendage.getVar().clear_vector();
|
|
AddAppendage.getVar().push_vector(buff_range);
|
|
AddAppendage.getVar().push_vector(skillLevel);
|
|
|
|
AddAppendage.getVar().clear_timer_vector();
|
|
AddAppendage.getVar().push_timer_vector();
|
|
local t_01 = AddAppendage.getVar().get_timer_vector(0);
|
|
t_01.setParameter(1000, -1);
|
|
t_01.resetInstant(0);
|
|
|
|
AddAppendage.getVar("status").clear_vector();
|
|
AddAppendage.getVar("status").push_vector(elementAttack);
|
|
AddAppendage.getVar("status").push_vector(attackSpeed);
|
|
AddAppendage.getVar("status").push_vector(moveSpeed);
|
|
AddAppendage.getVar("status").push_vector(castSpeed);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
|
|
function onEnd_appendage_heilrom_bykk(appendage)
|
|
{
|
|
if(!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
parentObj.sendDestroyPacket(true);
|
|
}
|
|
|
|
function onStart_appendage_heilrom_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
|
|
local parentObj = appendage.getParent();
|
|
|
|
local pooledObj_01 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/heilrom/animation/skill_heilrom_effect_back.ani", 0, -1, 0);
|
|
local pooledObj_02 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/heilrom/animation/skill_heilrom_effect_front.ani", 0, 1, 0);
|
|
local pooledObj_03 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/heilrom/animation/skill_heilrom_effect00.ani", 0, -1, -40);
|
|
}
|
|
|
|
function onSourceKeyFrameFlag_appendage_hodor_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, 25, 25, 13, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,25,1,0,0,0,totalDamage,0,0,0,0);
|
|
break;
|
|
case 201:
|
|
local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_MOVE_SPEED, true, 20.0, 20000);
|
|
if(ap) ap.sq_Append(parentObj, parentObj);
|
|
local ap2 = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ATTACK_SPEED, true, 20.0, 20000);
|
|
if(ap2) ap2.sq_Append(parentObj, parentObj);
|
|
break;
|
|
case 301:
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 25, 25, 15, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,parentObj,25,3,0,0,0,totalDamage,0,0,0,0);
|
|
break;
|
|
case 401:
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 25, 25, 17, eclipsehive_bonus) + 100;
|
|
local sub = 0;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 32) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0) == false) sub = 1;
|
|
createPassiveObject_k_k(sqrChr,parentObj,25,4,50,0,50,totalDamage,sub,0,0,0);
|
|
if(sq_GetIntData(sqrChr, 25, 10) > 0) createPassiveObject_k_k(sqrChr,parentObj,25,4,75,0,50,totalDamage,sub,0,0,0);
|
|
break;
|
|
case 501:
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 25, 25, 19, eclipsehive_bonus) + 100;
|
|
local sub = 0;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 32) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0) == false) sub = 1;
|
|
createPassiveObject_k_k(sqrChr,parentObj,25,5,50,0,50,totalDamage,sub,0,0,0);
|
|
if(sq_GetIntData(sqrChr, 25, 10) > 0) createPassiveObject_k_k(sqrChr,parentObj,25,5,75,0,50,totalDamage,sub,0,0,0);
|
|
break;
|
|
case 601:
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 25, 25, 21, eclipsehive_bonus) + 100;
|
|
local sub = 0;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 32) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0) == false) sub = 1;
|
|
local add_number = sq_GetIntData(sqrChr, 25, 10);
|
|
for(local i = 0; i < 5; i++){
|
|
createPassiveObject_k_k(sqrChr,parentObj,25,6,50,0,50,totalDamage,sub,i,0,0);
|
|
if(add_number > 0) createPassiveObject_k_k(sqrChr,parentObj,25,6,75,0,50,totalDamage,sub,i,0,0);
|
|
}
|
|
break;
|
|
case 701:
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 25, 25, 23, eclipsehive_bonus) + 100;
|
|
local totalDamage2 = sq_GetBonusRateWithPassive(sqrChr, 25, 25, 25, eclipsehive_bonus) + 100;
|
|
local targetObj = parentObj.getVar("targetObj").get_obj_vector(0);
|
|
local moveX = targetObj.getXPos() - parentObj.getXPos() + sq_getRandom(-10,10);
|
|
local moveY = targetObj.getYPos() - parentObj.getYPos() + sq_getRandom(-8,8);
|
|
if(parentObj.getDirection() == ENUM_DIRECTION_LEFT) moveX = moveX + 50;
|
|
if(parentObj.getDirection() == ENUM_DIRECTION_RIGHT) moveX = moveX - 50;
|
|
createPassiveObject_k_k(sqrChr,parentObj,25,7,50,0,50,totalDamage,totalDamage2,moveX,moveY,0);
|
|
if(sq_GetIntData(sqrChr, 25, 10) > 0) createPassiveObject_k_k(sqrChr,parentObj,25,7,50,0,55,totalDamage,totalDamage2,moveX,moveY,0);
|
|
break;
|
|
case 801:
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 25, 25, 27, eclipsehive_bonus2) + 100;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 30) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0)) totalDamage = totalDamage * 110 / 100;
|
|
local group = sq_GetGroup(parentObj);
|
|
local uniqueId = sq_GetUniqueId(parentObj);
|
|
createPassiveObject_k_k(sqrChr,parentObj,25,8,0,0,0,totalDamage,group,uniqueId,0,0);
|
|
break;
|
|
case 901:
|
|
case 902:
|
|
case 903:
|
|
if(flagIndex == 901) sq_AddDrawOnlyAniFromParent(parentObj, "monster/character/mage/madeby_k_k/hodor/animation/hita_01.ani", 50, 0, 25);
|
|
if(flagIndex == 902) sq_AddDrawOnlyAniFromParent(parentObj, "monster/character/mage/madeby_k_k/hodor/animation/hitb_01.ani", 50, 0, 25);
|
|
if(flagIndex == 903) sq_AddDrawOnlyAniFromParent(parentObj, "monster/character/mage/madeby_k_k/hodor/animation/hitc_01.ani", 50, 0, 25);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 25, 25, 27, eclipsehive_bonus2) + 100;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 30) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0)) totalDamage = totalDamage * 110 / 100;
|
|
if(appendage.getVar("bool").getBool(10)){
|
|
appendage.getVar("bool").setBool(10, false);
|
|
totalDamage = totalDamage * 50 / 100;
|
|
}
|
|
createPassiveObject_k_k(sqrChr,parentObj,25,9,0,0,0,totalDamage,1,0,0,0);
|
|
break;
|
|
case 904:
|
|
sq_AddDrawOnlyAniFromParent(parentObj, "monster/character/mage/madeby_k_k/hodor/animation/hitd_01.ani", 50, 0, 25);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 25, 25, 29, eclipsehive_bonus2) + 100;
|
|
local size = 100;
|
|
if(sqrChr.getVar("eclipsehive_select").getBool(0)){
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 30) > 0) totalDamage = totalDamage * 110 / 100;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 31) > 0) totalDamage = totalDamage * 130 / 100;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 32) > 0) size = 200;
|
|
}
|
|
if(appendage.getVar("bool").getBool(10)){
|
|
appendage.getVar("bool").setBool(10, false);
|
|
totalDamage = totalDamage * 50 / 100;
|
|
}
|
|
createPassiveObject_k_k(sqrChr,parentObj,25,9,0,0,0,totalDamage,2,size,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_SUMMONHODOR).isInCoolTime()) sqrChr.startSkillCoolTime(SKILL_BYKK_SUMMONHODOR, sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONHODOR), -1);
|
|
break;
|
|
case 1002:
|
|
local targetObj = sq_FindTarget( sqrChr, 0, 500, 500, 350);
|
|
if(targetObj){
|
|
parentObj.getVar("targetObj").clear_obj_vector();
|
|
parentObj.getVar("targetObj").push_obj_vector(targetObj);
|
|
local pIntVec = sq_GetGlobalIntVector();
|
|
sq_IntVectorClear(pIntVec);
|
|
sq_IntVectorPush(pIntVec, 7);
|
|
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
|
|
}
|
|
else{
|
|
local pIntVec = sq_GetGlobalIntVector();
|
|
sq_IntVectorClear(pIntVec);
|
|
sq_IntVectorPush(pIntVec, 1);
|
|
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
|
|
}
|
|
break;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
function proc_appendage_hodor_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_6").get_timer_vector(0);
|
|
local t_07 = appendage.getVar("skill_7").get_timer_vector(0);
|
|
local t_08 = appendage.getVar("skill_8").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,9);
|
|
if(t_02 && t_02.isOnEvent(currentT)){
|
|
if(sq_IsMyControlObject(parentObj)){
|
|
monsterattack_ksk(parentObj,1);
|
|
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_08,t_07,t_06,t_05,t_04,t_03,t_01];
|
|
local attackIndex = [7,6,5,4,3,2,0];
|
|
local distanceX = [300,300,300,300,300,300,30,30];
|
|
local distanceXmin = [40,40,40,40,40,40,0,0];
|
|
local distanceY = [150,150,80,10,10,10,10,10,10];
|
|
for(local i = 0;i < skillt.len(); i++){
|
|
if(skillt[i] && skillt[i].isOnEvent(currentT) && 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_IsMyControlObject(parentObj)){
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 5) < 1 && i == 0) return;
|
|
if(i == 0) appendage.getVar("bool").setBool(10, true);
|
|
monsterattack_ksk(parentObj,attackIndex[i]);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case STATE_ATTACK:
|
|
switch(attackIndex){
|
|
case 7:
|
|
local targetObj = sq_GetCNRDObjectToActiveObject(parentObj.getVar("targetObj").get_obj_vector(0));
|
|
if(targetObj){
|
|
if(sq_GetDistanceObject(parentObj, targetObj, false) < 20){
|
|
local pIntVec = sq_GetGlobalIntVector();
|
|
sq_IntVectorClear(pIntVec);
|
|
sq_IntVectorPush(pIntVec, 8);
|
|
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
|
|
return;
|
|
}
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local currentT = sq_GetCurrentTime(pAni);
|
|
local fireT = pAni.getDelaySum(false);
|
|
local X1 = sq_GetUniformVelocity(parentObj.getXPos(), targetObj.getXPos(), currentT, fireT);
|
|
local Y1 = sq_GetUniformVelocity(parentObj.getYPos(), targetObj.getYPos(), currentT, fireT);
|
|
sq_setCurrentAxisPos(parentObj, 0, X1);
|
|
sq_setCurrentAxisPos(parentObj, 1, Y1);
|
|
}
|
|
break;
|
|
case 9:
|
|
if(sqrChr.getVar("summonmonsterwait").getBool(0) == false) parentObj.sendStateOnlyPacket(STATE_STAND);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onStart_appendage_hodor_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_hodor_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj) return;
|
|
parentObj.sendDestroyPacket(true);
|
|
}
|
|
|
|
function onSourceKeyFrameFlag_appendage_kruta_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, SKILL_BYKK_SUMMONKRUTA, SKILL_BYKK_SUMMONKRUTA, 7, eclipsehive_bonus) + 100;
|
|
local sizeRate = 100 + (sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONKRUTA, SKILL_BYKK_SUMMONKRUTA, 15, 1.0) + 100) * 10;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONKRUTA,1,0,0,0,totalDamage,sizeRate,0,0,0);
|
|
parentObj.sq_PlaySound("SUMMON_KRUTA_SWISH_01");
|
|
break;
|
|
case 201:
|
|
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,200);
|
|
parentObj.getVar("skill2").set_vector(2,moveX);
|
|
parentObj.getVar("skill2").set_vector(3,targetObj.getYPos() - parentObj.getYPos());
|
|
}
|
|
monsterattack_ksk(parentObj,3);
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONKRUTA, SKILL_BYKK_SUMMONKRUTA, 8, eclipsehive_bonus) + 100;
|
|
local group = sq_GetGroup(parentObj);
|
|
local uniqueId = sq_GetUniqueId(parentObj);
|
|
local sizeRate = 100 + (sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONKRUTA, SKILL_BYKK_SUMMONKRUTA, 15, 1.0) + 100) * 10;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONKRUTA,2,0,0,0,totalDamage,group,uniqueId,sizeRate,0);
|
|
parentObj.sq_PlaySound("SUMMON_KRUTA_RUSH");
|
|
break;
|
|
case 301:
|
|
sq_SetMyShake(parentObj,3,720);
|
|
parentObj.sq_PlaySound("SUMMON_KRUTA_SCREAM");
|
|
break;
|
|
case 302:
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONKRUTA, SKILL_BYKK_SUMMONKRUTA, 9, eclipsehive_bonus) + 100;
|
|
local sizeRate = 100 + (sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONKRUTA, SKILL_BYKK_SUMMONKRUTA, 15, 1.0) + 100) * 10;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONKRUTA,3,0,0,0,totalDamage,sizeRate,0,0,0);
|
|
break;
|
|
case 401:
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONKRUTA, SKILL_BYKK_SUMMONKRUTA, 10, eclipsehive_bonus2) + 100;
|
|
local sizeRate = 100 + (sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONKRUTA, SKILL_BYKK_SUMMONKRUTA, 15, 1.0) + 100) * 10;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 30) > 0 && sqrChr.getVar("eclipsehive_select").getBool(0)){
|
|
totalDamage = totalDamage * 110 / 100;
|
|
}
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONKRUTA,41,0,0,0,totalDamage,sizeRate,0,0,0);
|
|
parentObj.sq_PlaySound("SUMMON_KRUTA_SWISH_02");
|
|
break;
|
|
case 402:
|
|
monsterattack_ksk(parentObj,5);
|
|
break;
|
|
case 4022:
|
|
parentObj.sq_PlaySound("SUMMON_KRUTA_CHARGE");
|
|
break;
|
|
case 403:
|
|
monsterattack_ksk(parentObj,6);
|
|
break;
|
|
case 404:
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONKRUTA, SKILL_BYKK_SUMMONKRUTA, 11, eclipsehive_bonus2) + 100;
|
|
local sizeRate = 100 + (sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONKRUTA, SKILL_BYKK_SUMMONKRUTA, 15, 1.0) + 100) * 10;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONKRUTA,42,0,0,0,totalDamage,sizeRate,0,0,0);
|
|
sq_SetMyShake(parentObj,3,320);
|
|
sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/ragefinisheff_01.ani",375,0,0);
|
|
sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/ragefinishfloor_f01.ani",375,-1,-1);
|
|
parentObj.sq_PlaySound("SUMMON_KRUTA_SMASH");
|
|
break;
|
|
case 501:
|
|
monsterattack_ksk(parentObj,8);
|
|
parentObj.sq_PlaySound("SUMMON_KRUTA_IMPACT");
|
|
break;
|
|
case 502:
|
|
monsterattack_ksk(parentObj,9);
|
|
break;
|
|
case 503:
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_REPEATEDSMASHOFRAGE, SKILL_BYKK_REPEATEDSMASHOFRAGE, 0, eclipsehive_bonus2) + 100;
|
|
if(sqrChr.getVar("eclipsehive_select").getBool(0)){
|
|
local add_Rate = 0;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 31) > 0) add_Rate = add_Rate + 20;
|
|
if(sq_GetIntData(sqrChr, SKILL_BYKK_ECLIPSEHIVE, 32) > 0) add_Rate = add_Rate + 20;
|
|
if(add_Rate > 0) totalDamage = totalDamage * (100 + add_Rate) / 100;
|
|
}
|
|
local sizeRate = 100 + (sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONKRUTA, SKILL_BYKK_SUMMONKRUTA, 15, 1.0) + 100) * 10;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONKRUTA,52,0,0,0,totalDamage,sizeRate,0,0,0);
|
|
local hit = parentObj.getVar("skill").get_vector(0);
|
|
local pooledObj1, pooledObj2, pooledObj3, pooledObj4;
|
|
switch(hit){
|
|
case 4:
|
|
pooledObj1 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkaxeeffect_dust.ani",200,0,0);
|
|
pooledObj2 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkeffectbottom01_crack.ani",200,-1,-1);
|
|
pooledObj3 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkeffectbottom01_rock.ani",200,-1,-1);
|
|
pooledObj4 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkeffecttop01_crack.ani",200,1,1);
|
|
break;
|
|
case 3:
|
|
pooledObj1 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkaxeeffect_dust.ani",200,0,0);
|
|
pooledObj2 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkeffectbottom02_crack.ani",200,-1,-1);
|
|
pooledObj3 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkeffectbottom02_rock.ani",200,-1,-1);
|
|
pooledObj4 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkeffecttop02_crack.ani",200,1,1);
|
|
break;
|
|
case 2:
|
|
pooledObj1 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkaxeeffect_dust.ani",200,0,0);
|
|
pooledObj2 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkeffectbottom03_crack.ani",200,-1,-1);
|
|
pooledObj3 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkeffectbottom03_rock.ani",200,-1,-1);
|
|
pooledObj4 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkeffecttop03_crack.ani",200,1,1);
|
|
break;
|
|
case 1:
|
|
pooledObj1 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkaxeeffect_dust.ani",200,0,0);
|
|
pooledObj2 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkeffectbottom04_crack.ani",200,-1,-1);
|
|
pooledObj3 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkeffectbottom04_rock.ani",200,-1,-1);
|
|
pooledObj4 = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/atkeffecttop04_crack.ani",200,1,1);
|
|
break;
|
|
}
|
|
if(sizeRate > 100){
|
|
local pooledObj = [pooledObj1, pooledObj2, pooledObj3, pooledObj4];
|
|
sizeRate = sizeRate.tofloat() / 100.0;
|
|
for(local i = 0; i < 4; i++){
|
|
local pAni = pooledObj[i].getCurrentAnimation();
|
|
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
|
|
pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
|
|
}
|
|
}
|
|
break;
|
|
case 504:
|
|
sq_SetMyShake(parentObj,5,90);
|
|
parentObj.sq_PlaySound("R_SUMMON_KRUTA_STRIKE");
|
|
break;
|
|
case 506:
|
|
local hitnumber = parentObj.getVar("skill").get_vector(0);
|
|
if(hitnumber <= 1){
|
|
monsterattack_ksk(parentObj,10);
|
|
}
|
|
else{
|
|
parentObj.getVar("skill").set_vector(0, hitnumber - 1);
|
|
monsterattack_ksk(parentObj,9);
|
|
}
|
|
break;
|
|
case 5061:
|
|
case 6011:
|
|
parentObj.sq_PlaySound("SUMMON_KRUTA_SWISH_03");
|
|
break;
|
|
case 507:
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_REPEATEDSMASHOFRAGE, SKILL_BYKK_REPEATEDSMASHOFRAGE, 1, eclipsehive_bonus2) + 100;
|
|
local sizeRate = 100 + (sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONKRUTA, SKILL_BYKK_SUMMONKRUTA, 15, 1.0) + 100) * 10;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONKRUTA,53,0,0,0,totalDamage,sizeRate,0,0,0);
|
|
sq_SetMyShake(parentObj,3,300);
|
|
sq_flashScreen(parentObj,0,100,0,102, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
parentObj.getVar("skill").set_vector(0, 4);
|
|
sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/finishaxeeffect_dust.ani",400,0,0);
|
|
sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/finisheffectbottom_crack.ani",400,-1,-1);
|
|
sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/finisheffectbottom_crackb.ani",400,-1,-1);
|
|
sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/finisheffecttop_cracka.ani",400,1,1);
|
|
sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/finisheffecttop_rock.ani",400,1,1);
|
|
parentObj.sq_PlaySound("SUMMON_KRUTA_STRIKE_FINISH");
|
|
break;
|
|
case 600:
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local fireT = pAni.getDelaySum(0,20);
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONKRUTA,10,-135,0,80,fireT,0,0,0,0);
|
|
parentObj.sq_PlaySound("SUMMON_KRUTA_CHARGE");
|
|
break;
|
|
case 601:
|
|
monsterattack_ksk(parentObj,12);
|
|
break;
|
|
case 602:
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_REPEATEDSMASHOFRAGE, -1, 0, 4.4*eclipsehive_bonus2) + sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_REPEATEDSMASHOFRAGE, -1, 1, 1.1*eclipsehive_bonus2) + 200;
|
|
local sizeRate = 100 + (sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONKRUTA, SKILL_BYKK_SUMMONKRUTA, 15, 1.0) + 100) * 10;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONKRUTA,6,0,0,0,totalDamage,sizeRate,0,0,0);
|
|
sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/finisheffectbottom_crack.ani",300,-1,-1);
|
|
sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/finisheffectbottom_crackb.ani",300,-1,-1);
|
|
sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/finisheffecttop_rock.ani",300,1,1);
|
|
sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/talisman/landingexplosion_eff_00.ani",300,0,0);
|
|
parentObj.sq_PlaySound("SUMMON_KRUTA_STRIKE_FINISH");
|
|
break;
|
|
case 603:
|
|
sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/mage/madeby_k_k/kruta/animation/finishaxeeffect_dust.ani",300,-1,-1);
|
|
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_SUMMONKRUTA).isInCoolTime()) sqrChr.startSkillCoolTime(SKILL_BYKK_SUMMONKRUTA, sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONKRUTA), -1);
|
|
break;
|
|
case 1002:
|
|
local skillIndex = parentObj.getVar("skillIndex").get_vector(0);
|
|
monsterattack_ksk(parentObj,skillIndex);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function proc_appendage_kruta_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:
|
|
// appendage.getVar("speed").setBool(0,true);
|
|
if(sqrChr.getVar("summonmonsterwait").getBool(0)) monsterattack_ksk(parentObj,14);
|
|
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 = [4,2,1,0];
|
|
local distanceX = [350,200,600,200];
|
|
local distanceXmin = [50,0,0,0];
|
|
local distanceY = [50,40,400,40];
|
|
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, 6) < 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 3:
|
|
local pAni = parentObj.getCurrentAnimation();
|
|
local currentT = sq_GetCurrentTime(pAni);
|
|
local fireT = 600;
|
|
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);
|
|
sq_setCurrentAxisPos(parentObj, 1, srcY + vy);
|
|
}
|
|
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;
|
|
case 14:
|
|
if(sqrChr.getVar("summonmonsterwait").getBool(0) == false) parentObj.sendStateOnlyPacket(STATE_STAND);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onStart_appendage_kruta_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_kruta_bykk(appendage)
|
|
{
|
|
if(!appendage) return;
|
|
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj) return;
|
|
parentObj.sendDestroyPacket(true);
|
|
}
|
|
|
|
function onSourceKeyFrameFlag_appendage_lighthigherspirit_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){
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER, SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER, 6, eclipsehive_bonus) + 100;
|
|
createPassiveObject_k_k(sqrChr,targetObj,SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER,1,0,0,0,totalDamage,0,0,0,0);
|
|
}
|
|
break;
|
|
case 201:
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER,2,0,0,0,5,0,0,0,0);
|
|
break;
|
|
case 301://??嚙踝蕭
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/mage/k_k_made/appendage/aptomonster/ap_lighthigherspirit_buff.nut")) CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/mage/k_k_made/appendage/aptomonster/ap_lighthigherspirit_buff.nut");
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(parentObj, sqrChr, 77, false, "character/mage/k_k_made/appendage/aptomonster/ap_lighthigherspirit_buff.nut", true);
|
|
AddAppendage.sq_SetValidTime(8000);
|
|
break;
|
|
case 401:
|
|
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER, SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER, 25, eclipsehive_bonus2) + 100;
|
|
local subtype = 41;
|
|
if(parentObj.getVar("skill4").getBool(0) == true) subtype = 42;
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER,subtype,150,0,0,totalDamage,0,0,0,0);
|
|
parentObj.getVar("skill4").setBool(0,false);
|
|
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_SUMMONSPIRITLIGHTHIGHER).isInCoolTime()) sqrChr.startSkillCoolTime(SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER, sq_GetSkillLevel(sqrChr, SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER), -1);
|
|
break;
|
|
case 1002://?嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭
|
|
parentObj.getVar("skill4").setBool(0,true);
|
|
monsterattack_ksk(parentObj,3);
|
|
break;
|
|
case 1005:
|
|
createPassiveObject_k_k(sqrChr,parentObj,SKILL_BYKK_SUMMONSPIRITLIGHTHIGHER,9,100,0,0,0,15,0,0,0);
|
|
sq_SendCreatePassiveObjectPacket(parentObj, 1008607, 0, 0, 0, 60, parentObj.getDirection());
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function proc_appendage_lighthigherspirit_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);//??5??
|
|
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, 80, 200)){
|
|
grant_timer.Reset();
|
|
grant_timer.Start(10000,0);
|
|
monsterattack_ksk(parentObj,6);
|
|
return;
|
|
}
|
|
}
|
|
|
|
if(t_03 && t_03.isOnEvent(currentT)){
|
|
monsterattack_ksk(parentObj,2);
|
|
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_02,t_01];
|
|
local attackIndex = [3,1,0];
|
|
local distanceX = [300,200,300];
|
|
local distanceXmin = [50,0,0];
|
|
local distanceY = [100,30,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, 12) < 1 && i == 0) return;
|
|
monsterattack_ksk(parentObj,attackIndex[i]);
|
|
if(parentObj.getVar("lightning").size_vector() > 0){
|
|
local attacknum = parentObj.getVar("lightning").get_vector(0);
|
|
parentObj.getVar("lightning").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_lighthigherspirit_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_lighthigherspirit_bykk(appendage)
|
|
{
|
|
if (!appendage) return;
|
|
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj) return;
|
|
|
|
parentObj.sendDestroyPacket(true);
|
|
}
|