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

2678 lines
126 KiB
C

function setCustomData_po_elementalmaster_bykk_kak(obj, receiveData)
{
if(!obj) return;
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter());
if(!sqrChr) return;
local skillIndex = receiveData.readDword();
local subtype = receiveData.readDword();
obj.getVar("skillIndex").clear_vector();
obj.getVar("skillIndex").push_vector(skillIndex);
obj.getVar("subtype").clear_vector();
obj.getVar("subtype").push_vector(subtype);
switch(skillIndex){
case ELEMENTALMASTER_SKILL_ARCTICPISTE://極冰綻放
switch(subtype){
case 1:
case 2://totalDamage,sizeRate,hitMax,hitTime,speedRate
local totalDamage = receiveData.readDword();
local sizeRate = receiveData.readDword();
local hitMax = receiveData.readDword();
local hitTime = receiveData.readDword();
local speedRate = receiveData.readDword();
local sub = receiveData.readDword();
obj.getVar("custom").clear_vector();
obj.getVar("custom").push_vector(sizeRate);
obj.getVar("custom").push_vector(hitMax);
obj.getVar("custom").push_vector(hitTime);
obj.getVar("custom").push_vector(speedRate);
obj.getVar("custom").push_vector(sub);
local attackIndex = 20;
if(subtype == 2) attackIndex = 8;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
if(subtype == 2){
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER);
if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE);
if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT);
if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK);
}
local skill_level = sq_GetSkillLevel(sqrChr, ELEMENTALMASTER_SKILL_ARCTICPISTE);
local prob = sq_GetLevelData(sqrChr, ELEMENTALMASTER_SKILL_ARCTICPISTE, 5, skill_level);
local level = sq_GetLevelData(sqrChr, ELEMENTALMASTER_SKILL_ARCTICPISTE, 6, skill_level);
local time = sq_GetLevelData(sqrChr, ELEMENTALMASTER_SKILL_ARCTICPISTE, 7, skill_level);
local minus_Rate = sq_GetLevelData(sqrChr, ELEMENTALMASTER_SKILL_ARCTICPISTE, 4, skill_level);
obj.getVar("custom").push_vector(minus_Rate);
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_FREEZE, prob, level, time);
sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM);
obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, "");
break;
case 3:
case 4:
local totalDamage = receiveData.readDword();
local sizeRate = receiveData.readDword();
local speedRate = receiveData.readDword();
local isBig = receiveData.readDword();
obj.getVar("custom").setInt(10, sizeRate);
local aniPath = "passiveobject/elementalmaster_bykk/animation/icefield/new/icearea_att_3.ani";
if(sq_getRandom(1, 100) > 50) aniPath = "passiveobject/elementalmaster_bykk/animation/icefield/new/icearea_att2_3.ani";
if(subtype == 3){
aniPath = "passiveobject/elementalmaster_bykk/animation/icefield/new/icefieldnormal1.ani";
if(sq_getRandom(1, 100) > 50) aniPath = "passiveobject/elementalmaster_bykk/animation/icefield/new/icefieldnormal2.ani";
}
local ani = sq_CreateAnimation("",aniPath);
obj.setCurrentAnimation(ani);
sizeRate = sizeRate.tofloat() / 100.0;
local pAni = obj.getCurrentAnimation();
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
if(isBig > 300) sizeRate = sizeRate * 2.0;
sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate);
pAni.setSpeedRate(speedRate.tofloat());
local attackIndex = 20;
if(subtype == 2) attackIndex = 8;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
if(subtype == 2){
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER);
if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE);
if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT);
if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK);
}
local skill_level = sq_GetSkillLevel(sqrChr, ELEMENTALMASTER_SKILL_ARCTICPISTE);
local prob = sq_GetLevelData(sqrChr, ELEMENTALMASTER_SKILL_ARCTICPISTE, 5, skill_level);
local level = sq_GetLevelData(sqrChr, ELEMENTALMASTER_SKILL_ARCTICPISTE, 6, skill_level);
local time = sq_GetLevelData(sqrChr, ELEMENTALMASTER_SKILL_ARCTICPISTE, 7, skill_level);
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_FREEZE, prob, level, time);
break;
}
break;
case ELEMENTALMASTER_SKILL_BLACKHOLE://黑洞
if(sqrChr.getVar("blackhole").get_obj_vector_size() < 1){
sqrChr.getVar("blackhole").clear_obj_vector();
sqrChr.getVar("blackhole").push_obj_vector(obj);
}
if(!sqrChr.getVar("blackhole").is_obj_vector(obj)) sqrChr.getVar("blackhole").push_obj_vector(obj);
switch(subtype){
case 1:
case 2://totalDamage,sizeRate,lifeTime,damageRate,attractPower,hitTime
local totalDamage = receiveData.readDword();
local sizeRate = receiveData.readDword();
local lifeTime = receiveData.readDword();
local damageRate = receiveData.readDword();
local attractPower = receiveData.readDword();
local range = receiveData.readDword();
local sub = receiveData.readDword();
local hitTime = receiveData.readDword();
local totalDamage2 = totalDamage * damageRate / 100;
obj.getVar("custom").clear_vector();
obj.getVar("custom").push_vector(sizeRate);
obj.getVar("custom").push_vector(attractPower);
obj.getVar("custom").push_vector(range);
obj.getVar("custom").push_vector(totalDamage2);
obj.getVar("custom").push_vector(lifeTime);
obj.getVar("custom").push_vector(totalDamage);
obj.getVar("custom").push_vector(sub);
obj.getVar("custom").push_vector(hitTime);
local attackIndex = 37;
if(subtype == 2) attackIndex = 38;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
if(subtype == 2){
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER);
if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE);
if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT);
if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK);
}
if(sq_GetLevelData(sqrChr, 58, 10, sq_GetSkillLevel(sqrChr, 58)) < 1) obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, "");
else obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
break;
case 3:
local lifeTime = receiveData.readDword();
local sub = receiveData.readDword();
local sizeRate = receiveData.readDword();
local aniPath = "passiveobject/elementalmaster_bykk/animation/nighthollow/normal/shockwave1_dodge.ani";
if(sub == 2) aniPath = "passiveobject/elementalmaster_bykk/animation/nighthollow/elementalpotential/shockwave2_dodge.ani";
local ani = sq_CreateAnimation("",aniPath);
obj.setCurrentAnimation(ani);
obj.setTimeEvent(0,lifeTime,1,false);
sizeRate = sizeRate.tofloat() / 100.0;
local pAni = obj.getCurrentAnimation();
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM);
break;
}
break;
case ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND://聖靈水晶
switch(subtype){
case 1:
if(sqrChr.getVar("crystal").get_obj_vector_size() > 0) sqrChr.getVar("crystal").push_obj_vector(obj);
else{
sqrChr.getVar("crystal").clear_obj_vector();
sqrChr.getVar("crystal").push_obj_vector(obj);
}
local totalDamage = receiveData.readDword();
local sizeRate = receiveData.readDword();
local sub = receiveData.readDword();
obj.getVar("custom").setInt(1,sizeRate);
obj.getVar("custom").setInt(2,totalDamage);
if(sub > 0){
obj.setTimeEvent(2, 2600, 1, false);
obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");
}
else obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, "");
break;
case 2:
case 3:
case 4:
if(sqrChr.getVar("crystal_effect" + subtype.tostring()).get_obj_vector_size() > 0) sqrChr.getVar("crystal_effect" + subtype.tostring()).push_obj_vector(obj);
else{
sqrChr.getVar("crystal_effect" + subtype.tostring()).clear_obj_vector();
sqrChr.getVar("crystal_effect" + subtype.tostring()).push_obj_vector(obj);
}
local sizeRate = receiveData.readDword();
obj.getVar("custom").setInt(1,sizeRate);
if(subtype == 4){sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM);}//obj.setTimeEvent(1,3300,1,false);
// else{obj.setTimeEvent(1,3000,1,false);}
obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, "");
break;
}
break;
case ELEMENTALMASTER_SKILL_ELEMENTALCHAIN://元素點燃
switch(subtype){
case 1:
sqrChr.getVar("elementalchain_light").clear_obj_vector();sqrChr.getVar("elementalchain_light").push_obj_vector(obj);
case 2:
sqrChr.getVar("elementalchain_ice").clear_obj_vector();sqrChr.getVar("elementalchain_ice").push_obj_vector(obj);
case 3:
sqrChr.getVar("elementalchain_fire").clear_obj_vector();sqrChr.getVar("elementalchain_fire").push_obj_vector(obj);
case 4:
if(subtype == 4){sqrChr.getVar("elementalchain_dark").clear_obj_vector();sqrChr.getVar("elementalchain_dark").push_obj_vector(obj);}
local lightTime = receiveData.readDword();
local sub = receiveData.readDword();
obj.getVar("custom").clear_vector();
obj.getVar("custom").push_vector(lightTime);
obj.getVar("custom").push_vector(sub);
obj.setDirection(ENUM_DIRECTION_RIGHT);
obj.setMapFollowParent(sqrChr);
obj.setMapFollowType(1);
if(sub <= 1) sq_moveWithParent(sqrChr, obj);
if(sub == 1) obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");
else if(sub == 2) obj.addSetStatePacket(28, null, STATE_PRIORITY_AUTO, false, "");
else obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, "");
break;
case 15:
local totalDamage = receiveData.readDword();
local powerDamage = receiveData.readDword();
local normal_rate = receiveData.readDword();
local exp_rate = receiveData.readDword();
local shoot_range = receiveData.readDword();
obj.getVar("custom").clear_vector();
obj.getVar("custom").push_vector(normal_rate);
obj.getVar("custom").push_vector(exp_rate);
obj.getVar("custom").push_vector(shoot_range);
obj.getVar("custom").push_vector(sq_GetXPos(obj));
obj.getVar("custom").push_vector(totalDamage);
obj.getVar("custom").push_vector(powerDamage);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 24));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
sq_SetCurrentAttackPower(sq_GetCurrentAttackInfo(obj), powerDamage);
obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, "");
break;
case 150:
local ani = sq_CreateAnimation("","passiveobject/common/animation/fireexplosion.ani");
obj.setCurrentAnimation(ani);
local totalDamage = receiveData.readDword();
local powerDamage = receiveData.readDword();
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 14));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
sq_SetCurrentAttackPower(sq_GetCurrentAttackInfo(obj), powerDamage);
local currentAni = obj.getCurrentAnimation();//得到當前ani
local sizeRate = receiveData.readDword();
obj.getVar("custom").clear_vector();
obj.getVar("custom").push_vector(sizeRate);
sizeRate = sizeRate.tofloat() / 1000.0;
sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate);
obj.setTimeEvent(1, 200, 2, true);
obj.setTimeEvent(2, 50, 2, true);
obj.setTimeEvent(3, 15, 4, true);
obj.setTimeEvent(4, 100, 2, true);
break;
case 16:
local totalDamage = receiveData.readDword();
local powerDamage = receiveData.readDword();
local normal_rate = receiveData.readDword();
local lifeTime = receiveData.readDword();
obj.setTimeEvent(0,lifeTime,1,false);
obj.getVar("custom").clear_vector();
obj.getVar("custom").push_vector(normal_rate);
obj.getVar("custom").push_vector(sq_GetXPos(obj));
obj.getVar("custom").push_vector(sq_GetYPos(obj));
obj.getVar("custom").push_vector(sq_GetZPos(obj));
obj.getVar("custom").push_vector(80);
obj.getVar("custom").push_vector(0);
obj.getVar("custom").push_vector(0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 23));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
sq_SetCurrentAttackPower(sq_GetCurrentAttackInfo(obj), powerDamage);
local skill_level = sq_GetSkillLevel(sqrChr, 16);
local prob = sq_GetLevelData(sqrChr, 16, 11, skill_level);
local level = sq_GetLevelData(sqrChr, 16, 12, skill_level);
local time = sq_GetLevelData(sqrChr, 16, 13, skill_level);
local speed_level = sq_GetLevelData(sqrChr, 16, 7, skill_level);
local speed_time = sq_GetLevelData(sqrChr, 16, 8, skill_level);
local movespeed_rate = sq_GetLevelData(sqrChr, 16, 9, skill_level);
local attackspeed_rate = sq_GetLevelData(sqrChr, 16, 10, skill_level);
obj.getVar("custom").push_vector(speed_level);
obj.getVar("custom").push_vector(speed_time);
obj.getVar("custom").push_vector(movespeed_rate);
obj.getVar("custom").push_vector(attackspeed_rate);
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_FREEZE, prob, level, time);
obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, "");
break;
case 17:
local totalDamage = receiveData.readDword();
local powerDamage = receiveData.readDword();
local sizeRate = receiveData.readDword();
local lifeTime = receiveData.readDword();
local angle = receiveData.readDword();
local baseX = receiveData.readDword();
local baseY = receiveData.readDword();
obj.setTimeEvent(0,lifeTime,1,false);
obj.getVar("custom").clear_vector();
obj.getVar("custom").push_vector(angle);
obj.getVar("custom").push_vector(baseX);
obj.getVar("custom").push_vector(baseY);
local ani = sq_CreateAnimation("","passiveobject/character/mage/animation/launchfluorescent1.ani");
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/character/mage/animation/launchfluorescent2.ani"),true);
currentAni.addLayerAnimation(3,sq_CreateAnimation("","passiveobject/character/mage/animation/launchfluorescent3.ani"),true);
currentAni.addLayerAnimation(2,sq_CreateAnimation("","passiveobject/character/mage/animation/launchfluorescent4.ani"),true);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 22));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
sq_SetCurrentAttackPower(sq_GetCurrentAttackInfo(obj), powerDamage);
sizeRate = sizeRate.tofloat() / 1000.0;
local pAni = obj.getCurrentAnimation();
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate);
break;
case 18:
local totalDamage = receiveData.readDword();
local powerDamage = receiveData.readDword();
local sizeRate = receiveData.readDword();
local speed_rate = receiveData.readDword();
local shoot_range = receiveData.readDword();
obj.getVar("custom").clear_vector();
obj.getVar("custom").push_vector(sizeRate);
obj.getVar("custom").push_vector(speed_rate);
obj.getVar("custom").push_vector(shoot_range);
obj.getVar("custom").push_vector(sq_GetXPos(obj));
obj.getVar("custom").push_vector(sq_GetZPos(obj));
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 21));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
sq_SetCurrentAttackPower(sq_GetCurrentAttackInfo(obj), powerDamage);
obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, "");
break;
}
break;
case ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN://元素之幕
local sizeRate = 100;
switch(subtype){
case 1:
//totalDamage,sizeRate,lifeTime,damageRate,hitTime,hitMax
local totalDamage = receiveData.readDword();
sizeRate = receiveData.readDword();
local lifeTime = receiveData.readDword();
local damageRate = receiveData.readDword();
local hitTime = receiveData.readDword();
local hitMax = receiveData.readDword();
local istalisman = receiveData.readDword();
local totalDamage2 = totalDamage * damageRate / 100;
obj.getVar("custom").clear_vector();
obj.getVar("custom").push_vector(sizeRate);
obj.getVar("custom").push_vector(totalDamage2);
obj.getVar("custom").push_vector(hitMax);
obj.getVar("custom").push_vector(totalDamage);
obj.getVar("custom").push_vector(istalisman);
obj.getVar("target").clear_obj_vector();
local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalcurtain/blankwallhorizonbottom.ani");
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalcurtain/elementalcurtain_aurora.ani"),true);
currentAni.addLayerAnimation(-1000,sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalcurtain/elementalcurtain_aurorabehind_aurora1.ani"),true);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 3));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER);
if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE);
if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT);
if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK);
obj.setTimeEvent(0,hitTime,-1,true);
obj.setTimeEvent(1,lifeTime,1,false);
cearteSkillPassive_Elementalmaster_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,sq_GetZPos(obj) + 400,obj.getDirection(),ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN,2,lifeTime,sizeRate,0,0,0,0,0,0,0,0);
cearteSkillPassive_Elementalmaster_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,sq_GetZPos(obj),obj.getDirection(),ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN,3,lifeTime,sizeRate,0,0,0,0,0,0,0,0);
break;
case 2:
local lifeTime = receiveData.readDword();
sizeRate = receiveData.readDword();
obj.setTimeEvent(1,lifeTime + 300,1,false);
local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalcurtain/elementalcurtain_aurorafront_sky1.ani");
obj.setCurrentAnimation(ani);
break;
case 3:
local lifeTime = receiveData.readDword();
sizeRate = receiveData.readDword();
obj.setTimeEvent(1,lifeTime + 300,1,false);
local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalcurtain/elementalcurtain_groundcircle.ani");
obj.setCurrentAnimation(ani);
sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM);
break;
case 4:
local totalDamage = receiveData.readDword();
sizeRate = receiveData.readDword();
local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalcurtain/elementalcurtain_auroraend_broken.ani");
obj.setCurrentAnimation(ani);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 4));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER);
if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE);
if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT);
if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK);
sq_flashScreen(obj,720,0,200,51, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
obj.setTimeEvent(1,1000,1,false);
break;
}
sizeRate = sizeRate.tofloat() / 100.0;
local pAni = obj.getCurrentAnimation();
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate);
break;
case ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL://元素奧義
break;
case ELEMENTALMASTER_SKILL_ELEMENTALQUAKE://元素震蕩
switch(subtype){
case 1:
local totalDamage = receiveData.readDword();
local damageRate = receiveData.readDword();
local sizeRate = receiveData.readDword();
local istalisman = receiveData.readDword();
obj.getVar("custom").clear_vector();
obj.getVar("custom").push_vector(totalDamage);
obj.getVar("custom").push_vector(damageRate);
obj.getVar("custom").push_vector(sizeRate);
obj.getVar("custom").push_vector(istalisman);
sizeRate = sizeRate.tofloat() / 100.0;
local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/elementalmaster_bykk/animation/elementalquake/magiccircle.ani",0,0,0);
local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/elementalmaster_bykk/animation/elementalquake/quake_glowbeam.ani",0,0,0);
local effectObj = [pooledObj,pooledObj2];
for(local i = 0; i < effectObj.len(); i++){
local pAni = effectObj[i].getCurrentAnimation();
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
}
obj.setTimeEvent(1,400,1,false);
if(istalisman > 0) obj.setTimeEvent(2,120,20,false);
break;
case 2:
local totalDamage = receiveData.readDword();
local sizeRate = receiveData.readDword();
local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalquake/elementalquakefireexpdummy.ani");
obj.setCurrentAnimation(ani);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 13));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER);
if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE);
if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT);
if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK);
sizeRate = sizeRate.tofloat() / 100.0;
local pAni = obj.getCurrentAnimation();
pAni.setLoop(false);
sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate);
local randomnumber = sq_getRandom(1,100);
local pooledObj;
if(randomnumber > 67) pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/elementalmaster_bykk/animation/elementalquake/flamestrike_blast_front02.ani",sq_getRandom(-350,350),sq_getRandom(-40,40),0);
else if(randomnumber > 33 && randomnumber <= 67) pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/elementalmaster_bykk/animation/elementalquake/flamestrike_blast_front02.ani",sq_getRandom(-233,233),sq_getRandom(-80,80),0);
else pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/elementalmaster_bykk/animation/elementalquake/flamestrike_blast_front02.ani",sq_getRandom(-115,115),sq_getRandom(-120,120),0);
local currentAni = pooledObj.getCurrentAnimation();
currentAni.setImageRateFromOriginal(0.4, 0.4);
currentAni.setAutoLayerWorkAnimationAddSizeRate(0.4);
break;
}
break;
case ELEMENTALMASTER_SKILL_ELEMENTALSHOWER://隕星幻滅
switch(subtype){
case 1:
local totalDamage = receiveData.readDword();
local totalDamage2 = receiveData.readDword();
obj.getVar("custom").setInt(10, totalDamage2);
local randomnumber = sq_getRandom(1, 4);
obj.getVar("custom").setInt(11, randomnumber);
obj.getVar("custom").setInt(12, sq_GetZPos(obj));
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 41));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, "");
break;
}
break;
case ELEMENTALMASTER_SKILL_FLAMESTRIKE://烈焰沖擊
switch(subtype){
case 1:
local totalDamage = receiveData.readDword();
local sizeRate = receiveData.readDword();
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 15));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
obj.getVar("custom").clear_vector();
obj.getVar("custom").push_vector(sizeRate);
obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, "");
break;
case 2:
local totalDamage = receiveData.readDword();
local sizeRate = receiveData.readDword();
local etcTime = receiveData.readDword();
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 15));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER);
if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE);
local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/flamestrike/lv95assimilate/flamestrikebottoma_00.ani");
obj.setCurrentAnimation(ani);
obj.getVar("custom").clear_vector();
obj.getVar("custom").push_vector(sizeRate);
obj.getVar("custom").push_vector(totalDamage);
obj.getVar("custom").push_vector(etcTime);
local sizeRate = obj.getVar("custom").get_vector(0);
sizeRate = sizeRate.tofloat() / 100.0;
local pAni = obj.getCurrentAnimation();
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate);
obj.getVar("targetObj").clear_obj_vector();
obj.setTimeEvent(0,600,1,false);
sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM);
break;
case 3:
local totalDamage = receiveData.readDword();
local sizeRate = receiveData.readDword();
local group = receiveData.readDword();
local uniqueId = receiveData.readDword();
obj.getVar("custom").clear_vector();
obj.getVar("custom").push_vector(sizeRate);
obj.getVar("custom").push_vector(group);
obj.getVar("custom").push_vector(uniqueId);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 15));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER);
if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE);
obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, "");
break;
}
break;
case ELEMENTALMASTER_SKILL_HALLOWEENBUSTER://傑克降臨
switch(subtype){
case 0:
local totalDamage = receiveData.readDword();
local sizeRate = receiveData.readDword();
local sizeRate2 = receiveData.readDword();
local damageRate = receiveData.readDword();
local sub = receiveData.readDword();
local typesub = receiveData.readDword();
local number = receiveData.readDword();
obj.getVar("custom").clear_vector();
obj.getVar("custom").push_vector(sizeRate);
obj.getVar("custom").push_vector(sizeRate2);
obj.getVar("custom").push_vector(damageRate);
obj.getVar("custom").push_vector(totalDamage);
obj.getVar("custom").push_vector(sub);
obj.getVar("custom").push_vector(typesub);
obj.getVar("custom").push_vector(number);
obj.setTimeEvent(3,1000+220 * number,1,false);
obj.setTimeEvent(4,800,1,false);
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/elementalmaster_bykk/animation/elementalpotential/magictargetwarningterrible.ani",0,0,0);
break;
case 1:
case 2:
local totalDamage = receiveData.readDword();
local sizeRate = receiveData.readDword();
local sizeRate2 = receiveData.readDword();
local damageRate = receiveData.readDword();
local sub = receiveData.readDword();
print("sub = "+sub);
local totalDamage2 = totalDamage * damageRate / 100;
if(sub > 0){sizeRate = sizeRate * 166 / 100;sizeRate2 = sizeRate2 * 166 / 100;totalDamage = totalDamage * 10 / 100;totalDamage2 = totalDamage2 * 154 / 100;}
obj.getVar("custom").clear_vector();
obj.getVar("custom").push_vector(sizeRate);
obj.getVar("custom").push_vector(sizeRate2);
obj.getVar("custom").push_vector(totalDamage2);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 18));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
if(subtype == 2){
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER);
if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE);
if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT);
if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK);
}
local time = 1000;
if(sub > 0) time = 1500;
local speedRate = sq_GetLevelData(sqrChr, ELEMENTALMASTER_SKILL_HALLOWEENBUSTER, 8, sq_GetSkillLevel(sqrChr, ELEMENTALMASTER_SKILL_HALLOWEENBUSTER));
if(speedRate > 0){
time = time / (100 + speedRate) * 100;
}
obj.getVar("move").setInt(10, sq_GetXPos(obj));
obj.getVar("move").setInt(11, sq_GetZPos(obj));
obj.setTimeEvent(5, time / 40, 40, true);
obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, "");
break;
}
break;
case ELEMENTALMASTER_SKILL_MIGHTYRUNE://聖靈符文
break;
case ELEMENTALMASTER_SKILL_SESTOELEMENTO://第六元素
switch(subtype){
case 1:
local totalDamage = receiveData.readDword();
local hitMax = receiveData.readDword();
local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/sestoelemento/start_main.ani");
obj.setCurrentAnimation(ani);
obj.sq_PlaySound("SESTOELEMENTO");
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 26));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER);
if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE);
if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT);
if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK);
obj.setTimeEvent(1,3000/(hitMax+1),hitMax,true);
sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM);
local appendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, "appendage/character/ap_common_suck.nut", false);
if(appendage){
CNSquirrelAppendage.sq_Append(appendage, sqrChr, obj);
local auraAppendage = appendage.sq_getAuraMaster("auraMaster");
if(!auraAppendage) auraAppendage = appendage.sq_AddAuraMaster("auraMaster", sqrChr, obj, 1200, 18, 5, 0);
if(auraAppendage) auraAppendage.setAttractionInfo(600, 600, 800, 100);
}
break;
case 2:
local totalDamage = receiveData.readDword();
local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/sestoelemento/explosion_main.ani");
obj.setCurrentAnimation(ani);
obj.sq_PlaySound("SESTOELEMENTO_EXP");
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 25));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER);
if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE);
if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT);
if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK);
sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM);
if(!sqrChr) break;
CNSquirrelAppendage.sq_RemoveAppendage(sqrChr, "appendage/character/ap_common_suck.nut");
break;
}
break;
case ELEMENTALMASTER_SKILL_SUNBURST://雷旋
switch(subtype){
case 1://
local totalDamage = receiveData.readDword();
local sizeRate = receiveData.readDword();
local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/sunburst/sunburst.ani");
obj.setCurrentAnimation(ani);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 27));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
sizeRate = sizeRate.tofloat() / 100.0;
local pAni = obj.getCurrentAnimation();
sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate);
break;
case 2:
local time = receiveData.readDword();
obj.setTimeEvent(1, time, 1, false);
break;
}
break;
case ELEMENTALMASTER_SKILL_THEGATE://元素之門
switch(subtype){
case 1:
local totalDamage = receiveData.readDword();
local create_number = receiveData.readDword();
local create_time = receiveData.readDword();
local sub = receiveData.readDword();
local group = receiveData.readDword();
local uniqueId = receiveData.readDword();
local targetObj = sq_GetObject(obj, group, uniqueId);
sq_moveWithParent(targetObj, obj);
obj.getVar().clear_obj_vector();
obj.getVar().push_obj_vector(targetObj);
obj.getVar("custom").clear_vector();
obj.getVar("custom").push_vector(totalDamage);
obj.getVar("custom").push_vector(create_number);
obj.getVar("custom").push_vector(create_time);
obj.getVar("custom").push_vector(sub);
obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, "");
break;
case 2:
local totalDamage = receiveData.readDword();
local sub = receiveData.readDword();
local aniPath1 = "passiveobject/elementalmaster_bykk/animation/thegate/";
local aniPath2 = "light";
switch(sub){
case 2: aniPath2 = "ice"; break;
case 3: aniPath2 = "fire"; break;
case 4: aniPath2 = "dark"; break;
}
local ani = sq_CreateAnimation("",aniPath1 + aniPath2 + "/" + aniPath2 + "_crystal.ani");
obj.setCurrentAnimation(ani);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 28));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
sq_CreateParticle("passiveobject/elementalmaster_bykk/particle/thegate"+aniPath2+"tail.ptl", obj, 0, 0, 0, true, 10, 0, 3);
local attackInfo = sq_GetCurrentAttackInfo(obj);
switch(sub){
case 1: if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT); break;
case 2: if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER); break;
case 3: if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE); break;
case 4: if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK); break;
}
obj.getVar("custom").clear_vector();
obj.getVar("custom").push_vector(sq_GetZPos(obj));
obj.getVar("custom").push_vector(sub);
break;
case 10:
local totalDamage = receiveData.readDword();
local sub = receiveData.readDword();
local group = receiveData.readDword();
local uniqueId = receiveData.readDword();
local targetObj = sq_GetObject(obj, group, uniqueId);
if(targetObj){
obj.getVar("custom").setInt(0, totalDamage);
obj.getVar("custom").setInt(1, sub);
obj.getVar("custom").setInt(2, group);
obj.getVar("custom").setInt(3, uniqueId);
local aniPath0 = "passiveobject/elementalmaster_bykk/animation/thegate/talisman/";
local aniPath1 = ["magiccircleblue","magiccirclepurple","magiccirclered","magiccircleyellow"];
local aniPath2 = [["/magiccircleblue_01.ani","/magiccirclepurple_01.ani","/magiccirclered_01.ani","/magiccircleyellow_01.ani"],
["/magiccircleblue_line_00.ani","/magiccirclepurple_line_00.ani","/magiccirclered_line_00.ani","/magiccircleyellow_line_00.ani"]];
local ani = sq_CreateAnimation("",aniPath0 + aniPath1[sub] + aniPath2[0][sub]);
obj.setCurrentAnimation(ani);
local pAni = obj.getCurrentAnimation();
pAni.addLayerAnimation(-1,sq_CreateAnimation("",aniPath0 + aniPath1[sub] + aniPath2[1][sub]),true);
local activeObj = sq_GetCNRDObjectToActiveObject(targetObj);
if(!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, "character/mage/elementalmaster_bykk/ap_mage_hold.nut")){
CNSquirrelAppendage.sq_RemoveAppendage(activeObj, "character/mage/elementalmaster_bykk/ap_mage_hold.nut");
}
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, "character/mage/elementalmaster_bykk/ap_mage_hold.nut", true);
sq_HoldAndDelayDie(activeObj, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage);
}
else sq_SendDestroyPacketPassiveObject(obj);
break;
case 11:
local totalDamage = receiveData.readDword();
local sub = receiveData.readDword();
local group = receiveData.readDword();
local uniqueId = receiveData.readDword();
local targetObj = sq_GetObject(obj, group, uniqueId);
if(targetObj){
obj.getVar("tar").clear_obj_vector();
obj.getVar("tar").push_obj_vector(targetObj);
local aniPath0 = "passiveobject/elementalmaster_bykk/animation/thegate/talisman/";
local aniPath1 = ["magiccircleblue","magiccirclepurple","magiccirclered","magiccircleyellow"];
local aniPath2 = ["/explosionblue_04.ani","/explosionpurple_05.ani","/explosionred_04.ani","/explosionyellow_04.ani"];
// print("path = "+aniPath0 + aniPath1[sub] + aniPath2[sub]);
local ani = sq_CreateAnimation("",aniPath0 + aniPath1[sub] + aniPath2[sub]);
obj.setCurrentAnimation(ani);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 28));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local attackInfo = sq_GetCurrentAttackInfo(obj);
attackInfo.setElement(ENUM_ELEMENT_FIRE);
attackInfo.setElement(ENUM_ELEMENT_WATER);
attackInfo.setElement(ENUM_ELEMENT_DARK);
attackInfo.setElement(ENUM_ELEMENT_LIGHT);
obj.setTimeEvent(2,50,1,false);
sq_SetShake(obj, 15, 300);
}
else sq_SendDestroyPacketPassiveObject(obj);
break;
}
break;
case ELEMENTALMASTER_SKILL_THUNDERCALLING://天雷
switch(subtype){
case 0://totalDamage,sizeRate,countMax,hitTime,range,2
local totalDamage = receiveData.readDword();
local sizeRate = receiveData.readDword();
local countMax = receiveData.readDword();
local hitTime = receiveData.readDword();
local range = receiveData.readDword();
local sub = receiveData.readDword();
obj.getVar("custom").clear_vector();
obj.getVar("custom").push_vector(totalDamage);
obj.getVar("custom").push_vector(sizeRate);
obj.getVar("custom").push_vector(countMax);
obj.getVar("custom").push_vector(range);
obj.getVar("custom").push_vector(sub);
obj.getVar("custom").push_vector(hitTime);
local skill_level = sq_GetSkillLevel(sqrChr, ELEMENTALMASTER_SKILL_THUNDERCALLING);
local prob = sq_GetLevelData(sqrChr, ELEMENTALMASTER_SKILL_THUNDERCALLING, 4, skill_level);
local level = sq_GetLevelData(sqrChr, ELEMENTALMASTER_SKILL_THUNDERCALLING, 5, skill_level);
local time = sq_GetLevelData(sqrChr, ELEMENTALMASTER_SKILL_THUNDERCALLING, 6, skill_level);
obj.getVar("custom").push_vector(prob);
obj.getVar("custom").push_vector(level);
obj.getVar("custom").push_vector(time);
if((countMax * hitTime) > 4000){
local pAni = obj.getCurrentAnimation();
sq_SetFrameDelayTime(pAni, 0, countMax * hitTime);
}
obj.setTimeEvent(3,1000+(hitTime + 20) * countMax,1,false);
obj.setTimeEvent(4,800,1,false);
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/elementalmaster_bykk/animation/elementalpotential/magictargetwarningterrible.ani",0,0,0);
break;
case 1:
case 2:
local totalDamage = receiveData.readDword();
local sizeRate = receiveData.readDword();
local range = receiveData.readDword();
local prob = receiveData.readDword();
local level = receiveData.readDword();
local time = receiveData.readDword();
local aniPath = "passiveobject/elementalmaster_bykk/animation/thunderstrike/thunderstrike_lightning01.ani";
if(subtype == 2) aniPath = "passiveobject/elementalmaster_bykk/animation/elementalpotential/thunderstrike/epthunderstrike_lightning01.ani";
local ani = sq_CreateAnimation("",aniPath);
obj.setCurrentAnimation(ani);
local attackIndex = 29;
if(subtype == 2) attackIndex = 11;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(attackInfo) sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_STUN, prob, level, time);
if(subtype == 1){
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/elementalmaster_bykk/animation/thunderstrike/thunderstrike_hit01.ani",0,0,0);
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/elementalmaster_bykk/animation/thunderstrike/thunderstrike_floor.ani",0,0,0);
}
else if(subtype == 2){
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/elementalmaster_bykk/animation/elementalpotential/thunderstrike/epthunderstrike_hit01.ani",0,0,0);
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER);
if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE);
if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT);
if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK);
}
sizeRate = sizeRate.tofloat() / 100.0;
local pAni = obj.getCurrentAnimation();
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate);
obj.sq_PlaySound("THUNDERC_LIGHTNING");
obj.setTimeEvent(1,200,1,false);
break;
case 3:
local totalDamage = receiveData.readDword();
print("totalDamage = "+totalDamage);
local aniPath = "passiveobject/character/mage/animation/thunderstrike.ani";
local ani = sq_CreateAnimation("",aniPath);
obj.setCurrentAnimation(ani);
sq_AddDrawOnlyAniFromParent(obj, "passiveobject/character/mage/animation/thunderstrikeeffect.ani", 0, -1, 0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 29));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
}
break;
case ELEMENTALMASTER_SKILL_THUNDERRAGE://光與暗的交響
switch(subtype){
case 1:
local totalDamage = receiveData.readDword();
local sizeRate = receiveData.readDword();
local hitMax = receiveData.readDword();
local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/thunderrage/thunderrage_cast_end_shot_back_05.ani");
obj.setCurrentAnimation(ani);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 30));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER);
if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE);
if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT);
if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK);
sizeRate = sizeRate.tofloat() / 1000.0;
local pAni = obj.getCurrentAnimation();
local delaySum = pAni.getDelaySum(0,13);
obj.setTimeEvent(1,delaySum/(hitMax + 1),hitMax,true);
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate);
break;
}
break;
case ELEMENTALMASTER_SKILL_VOID://虛無之球
switch(subtype){
case 1:
local totalDamage = receiveData.readDword();
local sizeRate = receiveData.readDword();
local shoot_range = receiveData.readDword();
local hittime = receiveData.readDword();
obj.getVar("custom").clear_vector();
obj.getVar("custom").push_vector(shoot_range);
obj.getVar("custom").push_vector(sq_GetXPos(obj));
obj.getVar("custom").push_vector(sizeRate);
obj.setTimeEvent(0,hittime,-1,false);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 31));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
obj.sq_SetMoveParticle("particle/void.ptl", 0.0, 0.0);
// sq_SetSpeedToMoveParticle(obj,0,speed);
obj.setTimeEvent(1,20,-1,false);
obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, "");
break;
case 2:
local totalDamage = receiveData.readDword();
local hittime = receiveData.readDword();
local timeMax = receiveData.readDword();
local damageRate = receiveData.readDword();
local damageRate2 = receiveData.readDword();
local sizeRate = receiveData.readDword();
local isExp = receiveData.readDword();
local totalDamage2 = (totalDamage.tofloat() * damageRate.tofloat() / 100.0).tointeger();
local totalDamage3 = (totalDamage.tofloat() * damageRate2.tofloat() / 100.0).tointeger();
obj.getVar("custom").clear_vector();
obj.getVar("custom").push_vector(hittime);
obj.getVar("custom").push_vector(timeMax);
obj.getVar("custom").push_vector(totalDamage3);
obj.getVar("custom").push_vector(sizeRate);
obj.getVar("custom").push_vector(isExp);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 32));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage2);
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT);
if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK);
obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, "");
break;
}
break;
case ELEMENTALMASTER_SKILL_WALLOFICE://冰牆
break;
case 38://移動施法
sqrChr.getVar("moveoncast").clear_obj_vector();
sqrChr.getVar("moveoncast").push_obj_vector(obj);
local chargeTime = receiveData.readDword();
local sub = receiveData.readDword();
local fullcharge = receiveData.readDword();
obj.setTimeEvent(0,chargeTime,1,false);
obj.getVar("custom").clear_vector();
obj.getVar("custom").push_vector(sub);
obj.setMapFollowParent(obj.getParent());
obj.setMapFollowType(1);
sq_moveWithParent(sqrChr, obj);
if(fullcharge > 0) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
else obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, "");
break;
}
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(attackInfo){
local element_kk_fire = sqrChr.getVar("element_kk").getInt(0);
local element_kk_water = sqrChr.getVar("element_kk").getInt(1);
local element_kk_dark = sqrChr.getVar("element_kk").getInt(2);
local element_kk_light = sqrChr.getVar("element_kk").getInt(3);
if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE);
if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER);
if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK);
if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT);
}
}
function setState_po_elementalmaster_bykk_kak(obj, state, datas)
{
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);
obj.getVar("state").clear_vector();
obj.getVar("state").push_vector(state);
switch(skillIndex){
case ELEMENTALMASTER_SKILL_ARCTICPISTE://極冰綻放
switch(subtype){
case 1:
case 2:
switch(state){
case 20:
local aniPath = "passiveobject/elementalmaster_bykk/animation/icefield/icefieldfloorappear.ani";
if(subtype == 2) aniPath = "passiveobject/elementalmaster_bykk/animation/elementalpotential/icearea/field2floorappear.ani";
local ani = sq_CreateAnimation("",aniPath);
obj.setCurrentAnimation(ani);
local speedRate = obj.getVar("custom").get_vector(3);
local pAni = obj.getCurrentAnimation();
sq_SetFrameDelayTime(pAni, 0, 300);
pAni.setSpeedRate(speedRate.tofloat());
break;
case 21:
local aniPath = "passiveobject/elementalmaster_bykk/animation/icefield/icefield.ani";
if(subtype == 2) aniPath = "passiveobject/elementalmaster_bykk/animation/elementalpotential/icearea/field2.ani";
local ani = sq_CreateAnimation("",aniPath);
obj.setCurrentAnimation(ani);
local hitTime = obj.getVar("custom").get_vector(2);
local sub = obj.getVar("custom").get_vector(4);
obj.setTimeEvent(1,hitTime,-1,false);
if(sub == 0) obj.setTimeEvent(2,hitTime / 2,-1,false);
else if(sub == 1) obj.setTimeEvent(3,900,-1,true);
break;
case 22:
obj.stopTimeEvent(1);
local aniPath = "passiveobject/elementalmaster_bykk/animation/icefield/icefieldfloordisappear.ani";
if(subtype == 2) aniPath = "passiveobject/elementalmaster_bykk/animation/elementalpotential/icearea/field2disappear.ani";
local ani = sq_CreateAnimation("",aniPath);
obj.setCurrentAnimation(ani);
break;
}
local sizeRate = obj.getVar("custom").get_vector(0);
sizeRate = sizeRate.tofloat() / 100.0;
local pAni = obj.getCurrentAnimation();
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate);
break;
}
break;
case ELEMENTALMASTER_SKILL_BLACKHOLE://黑洞
switch(subtype){
case 1:
case 2:
switch(state){
case 20:
local aniPath = "passiveobject/elementalmaster_bykk/animation/nighthollow/normal/nighthollow1_start_dodge.ani";
if(subtype == 2) aniPath = "passiveobject/elementalmaster_bykk/animation/nighthollow/elementalpotential/nighthollow2_start_dodge.ani";
local ani = sq_CreateAnimation("",aniPath);
obj.setCurrentAnimation(ani);
obj.sq_PlaySound("NIGHTH_IN")
break;
case 21:
local aniPath = "passiveobject/elementalmaster_bykk/animation/nighthollow/normal/nighthollow1_loop_dodge.ani";
if(subtype == 2) aniPath = "passiveobject/elementalmaster_bykk/animation/nighthollow/elementalpotential/nighthollow2_loop_dodge.ani";
local ani = sq_CreateAnimation("",aniPath);
obj.setCurrentAnimation(ani);
local lifeTime = obj.getVar("custom").get_vector(4);
local sizeRate = obj.getVar("custom").get_vector(0);
cearteSkillPassive_Elementalmaster_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,0,obj.getDirection(),ELEMENTALMASTER_SKILL_BLACKHOLE,3,lifeTime,subtype,sizeRate,0,0,0,0,0,0,0);
local hitTime = obj.getVar("custom").get_vector(7);
obj.setTimeEvent(1,hitTime,-1,false);
obj.setTimeEvent(0,lifeTime,1,false);
obj.setTimeEvent(3,1800,-1,true);
if(!sqrChr) break;
local attractPower = obj.getVar("custom").get_vector(1);
local range = obj.getVar("custom").get_vector(2);
if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, "appendage/character/ap_common_suck.nut")) CNSquirrelAppendage.sq_RemoveAppendage(sqrChr, "appendage/character/ap_common_suck.nut");
local appendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, "appendage/character/ap_common_suck.nut", false);
if(appendage){
CNSquirrelAppendage.sq_Append(appendage, sqrChr, obj);
local auraAppendage = appendage.sq_getAuraMaster("auraMaster");
if(!auraAppendage) auraAppendage = appendage.sq_AddAuraMaster("auraMaster", sqrChr, obj, 1200, 18, 5, 0);
if(auraAppendage) auraAppendage.setAttractionInfo(attractPower, attractPower, range, 100);
}
break;
case 22:
obj.stopTimeEvent(1);
obj.stopTimeEvent(3);
local aniPath = "passiveobject/elementalmaster_bykk/animation/nighthollow/normal/nighthollow1_exp_dodge.ani";
if(subtype == 2) aniPath = "passiveobject/elementalmaster_bykk/animation/nighthollow/elementalpotential/nighthollow2_exp_dodge.ani";
local ani = sq_CreateAnimation("",aniPath);
obj.setCurrentAnimation(ani);
obj.sq_PlaySound("NIGHTH_OUT");
obj.setTimeEvent(2,400,1,false);
local totalDamage = obj.getVar("custom").get_vector(3);
local attackIndex = 40;
if(subtype == 2) attackIndex = 39;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
if(subtype == 2){
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER);
if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE);
if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT);
if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK);
}
if(!sqrChr) break;
CNSquirrelAppendage.sq_RemoveAppendage(sqrChr, "appendage/character/ap_common_suck.nut");
break;
}
local sizeRate = obj.getVar("custom").get_vector(0);
sizeRate = sizeRate.tofloat() / 100.0;
local pAni = obj.getCurrentAnimation();
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate);
break;
}
break;
case ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND://聖靈水晶
switch(subtype){
case 1:
switch(state){
case 20:
local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/crystalofovermind/crystalofovermind_grow01_loop.ani");//
obj.setCurrentAnimation(ani);
sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/elementalmaster_bykk/crystalofovermind/groweffect/crystalofovermind_grow01_start.ani",0,0,50);
obj.setTimeEvent(2,650,4,false);
break;
case 21:
local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/crystalofovermind/crystalofovermind_grow02_loop.ani");//
obj.setCurrentAnimation(ani);
sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/elementalmaster_bykk/crystalofovermind/groweffect/crystalofovermind_grow02_start.ani",0,0,50);
break;
case 22:
local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/crystalofovermind/crystalofovermind_grow03_loop.ani");//
obj.setCurrentAnimation(ani);
sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/elementalmaster_bykk/crystalofovermind/groweffect/crystalofovermind_grow03_start.ani",0,0,50);
break;
case 23:
local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/crystalofovermind/crystalofovermind_grow04_loop.ani");//
obj.setCurrentAnimation(ani);
sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/elementalmaster_bykk/crystalofovermind/groweffect/crystalofovermind_grow04_start_back.ani",0,0,50);
sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/elementalmaster_bykk/crystalofovermind/groweffect/crystalofovermind_grow04_start.ani",0,0,50);
break;
case 24:
obj.stopTimeEvent(2);
local effectObj2 = sqrChr.getVar("crystal_effect2").get_obj_vector(0);
if(effectObj2){local colObj = sq_GetCNRDObjectToCollisionObject(effectObj2);colObj.setTimeEvent(1,100,1,true);}
local effectObj3 = sqrChr.getVar("crystal_effect3").get_obj_vector(0);
if(effectObj3){local colObj = sq_GetCNRDObjectToCollisionObject(effectObj3);colObj.setTimeEvent(1,100,1,true);}
local effectObj4 = sqrChr.getVar("crystal_effect4").get_obj_vector(0);
if(effectObj4){local colObj = sq_GetCNRDObjectToCollisionObject(effectObj4);colObj.setTimeEvent(1,500,1,false);}
local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/crystalofovermind/finish/front/crystalofovermind_finish_front_00.ani");
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/crystalofovermind/finish/back/crystalofovermind_finish_back_00.ani"),true);
local totalDamage = obj.getVar("custom").getInt(2);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 2));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER);
if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE);
if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT);
if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK);
break;
}
local sizeRate = obj.getVar("custom").getInt(1);
sizeRate = sizeRate.tofloat() / 100.0;
local pAni = obj.getCurrentAnimation();
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate);
break;
case 2:
case 3:
case 4:
local aniPath1 = "character/mage/effect/animation/elementalmaster_bykk/crystalofovermind/";
switch(state){
case 20:
local aniPath2 = "crystalofmind_side_back01_start.ani";
if(subtype == 3) aniPath2 = "crystalofmind_side_front_start.ani";
if(subtype == 4) aniPath2 = "crystalofovermind_background_01.ani";
local ani = sq_CreateAnimation("",aniPath1 + "start/" + aniPath2);
obj.setCurrentAnimation(ani);
break;
case 21:
local aniPath2 = "crystalofmind_side_back01.ani";
if(subtype == 3) aniPath2 = "crystalofmind_side_front_loop01.ani";
if(subtype == 4) aniPath2 = "crystalofovermind_background_01.ani";
local ani = sq_CreateAnimation("",aniPath1 + "loop/" + aniPath2);
obj.setCurrentAnimation(ani);
break;
case 22:
local aniPath2 = "crystalofmind_side_back01_finish.ani";
if(subtype == 3) aniPath2 = "crystalofmind_side_front_finish.ani";
if(subtype == 4) {sq_SendDestroyPacketPassiveObject(obj);return;}
local ani = sq_CreateAnimation("",aniPath1 + "end/" + aniPath2);
obj.setCurrentAnimation(ani);
break;
}
local sizeRate = obj.getVar("custom").getInt(1);
sizeRate = sizeRate.tofloat() / 100.0;
local pAni = obj.getCurrentAnimation();
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
break;
}
break;
case ELEMENTALMASTER_SKILL_ELEMENTALCHAIN://元素點燃
switch(subtype){
case 1:
case 2:
case 3:
case 4:
local aniPath1 = "character/mage/effect/animation/elementalmaster_bykk/elementalchain/mark";
local aniPath2 = "light";
if(subtype == 2) aniPath2 = "ice";
if(subtype == 3) aniPath2 = "fire";
if(subtype == 4) aniPath2 = "dark";
if(obj.getVar("custom").get_vector(1) == 1) aniPath1 = "character/mage/effect/animation/elementalmaster_bykk/mightyrune/";
if(obj.getVar("custom").get_vector(1) == 2) aniPath1 = "character/mage/effect/animation/elementalmaster_bykk/mightyrune/lv95assimilate/";
switch(state){
case 20:
local ani = sq_CreateAnimation("",aniPath1 + "appear_" + aniPath2 + "_1.ani");
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(-1,sq_CreateAnimation("",aniPath1 + "appear_" + aniPath2 + "_2.ani"),true);
break;
case 21:
local ani = sq_CreateAnimation("",aniPath1 + "stay_" + aniPath2 + "_1.ani");
obj.setCurrentAnimation(ani);
if(subtype == 1) sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 23);
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(-1,sq_CreateAnimation("",aniPath1 + "stay_" + aniPath2 + "_2.ani"),true);
break;
case 22:
if(obj.isExistTimeEvent(1)) obj.stopTimeEvent(1);
local ani = sq_CreateAnimation("",aniPath1 + "activate_" + aniPath2 + "_1.ani");
obj.setCurrentAnimation(ani);
local lifeTime = obj.getVar("custom").get_vector(0);
obj.setTimeEvent(1,lifeTime,1,false);
if(subtype == 1) sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 30);
if(subtype == 4) sq_setCurrentAxisPos(obj, 2, sq_GetZPos(sqrChr) + 35);
break;
case 23:
local ani = sq_CreateAnimation("",aniPath1 + aniPath2 + "/rune" + aniPath2 + "cast.ani");
obj.setCurrentAnimation(ani);
break;
case 24:
local ani = sq_CreateAnimation("",aniPath1 + aniPath2 + "/rune" + aniPath2 + "off_02.ani");
obj.setCurrentAnimation(ani);
break;
case 25:
local ani = sq_CreateAnimation("",aniPath1 + aniPath2 + "/rune" + aniPath2 + "changeon_02.ani");
obj.setCurrentAnimation(ani);
break;
case 26:
if(obj.isExistTimeEvent(2)) obj.stopTimeEvent(2);
local ani = sq_CreateAnimation("",aniPath1 + aniPath2 + "/rune" + aniPath2 + "on_02.ani");
obj.setCurrentAnimation(ani);
local lightTime = obj.getVar("custom").get_vector(0);
obj.setTimeEvent(1,lightTime,1,false);
break;
case 27:
local ani = sq_CreateAnimation("",aniPath1 + aniPath2 + "/rune" + aniPath2 + "changeoff.ani");
obj.setCurrentAnimation(ani);
break;
case 28:
local ani = sq_CreateAnimation("",aniPath1 + aniPath2 + "spherestart_00.ani ");
obj.setCurrentAnimation(ani);
break;
case 29:
local ani = sq_CreateAnimation("",aniPath1 + aniPath2 + "sphereloop_00.ani");
obj.setCurrentAnimation(ani);
break;
}
break;
case 15:
switch(state){
case 20:
local ani = sq_CreateAnimation("","passiveobject/character/mage/animation/launchjolstart.ani");
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/character/mage/animation/launchjolfirestart.ani"),true);
break;
case 21:
local ani = sq_CreateAnimation("","passiveobject/character/mage/animation/launchjolmove.ani");
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/character/mage/animation/launchjolfiremove.ani"),true);
break;
}
local sizeRate = obj.getVar("custom").get_vector(0);
sizeRate = sizeRate.tofloat() / 1000.0;
local pAni = obj.getCurrentAnimation();
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate);
break;
case 16:
switch(state){
case 20:
local ani = sq_CreateAnimation("","passiveobject/character/mage/animation/launchfrosthead.ani");
obj.setCurrentAnimation(ani);
local pAni = obj.getCurrentAnimation();
pAni.setLoop(true);
break;
case 21:
local ani = sq_CreateAnimation("","passiveobject/character/mage/animation/launchfrostheadjump.ani");
obj.setCurrentAnimation(ani);
obj.getVar("custom").set_vector(1,sq_GetXPos(obj));
obj.getVar("custom").set_vector(2,sq_GetYPos(obj));
obj.getVar("custom").set_vector(3,sq_GetZPos(obj));
local targetObj = obj.sq_FindFirstTarget(-9999, 19998, 9999, 9999);
if(targetObj){
local targetObj_y = sq_GetYPos(targetObj) - sq_GetYPos(obj);
obj.getVar("custom").set_vector(5,targetObj_y);
if(sq_GetXPos(targetObj) > sq_GetXPos(obj) && obj.getDirection() == ENUM_DIRECTION_LEFT) sq_SetCurrentDirection(obj, ENUM_DIRECTION_RIGHT);
else if(sq_GetXPos(targetObj) < sq_GetXPos(obj) && obj.getDirection() == ENUM_DIRECTION_RIGHT) sq_SetCurrentDirection(obj, ENUM_DIRECTION_LEFT);
}
obj.getVar("custom").set_vector(6,130);
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/character/mage/animation/launchfrostheadjumpeffect.ani",0,-1,-1);
break;
case 22:
local ani = sq_CreateAnimation("","passiveobject/character/mage/animation/launchfrostheadhit.ani");
obj.setCurrentAnimation(ani);
break;
case 23:
local ani = sq_CreateAnimation("","passiveobject/character/mage/animation/launchfrostheaddisappear.ani");
obj.setCurrentAnimation(ani);
break;
}
local sizeRate = obj.getVar("custom").get_vector(0);
sizeRate = sizeRate.tofloat() / 1000.0;
local pAni = obj.getCurrentAnimation();
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate);
break;
case 18:
switch(state){
case 20:
local ani = sq_CreateAnimation("","passiveobject/character/mage/animation/launchblackcatshoot1.ani");
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/character/mage/animation/launchblackcatshoot2.ani"),true);
break;
case 21:
local ani = sq_CreateAnimation("","passiveobject/character/mage/animation/launchblackcatmovego1.ani");
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/character/mage/animation/launchblackcatmovego2.ani"),true);
break;
case 22:
local ani = sq_CreateAnimation("","passiveobject/character/mage/animation/launchblackcatturn1.ani");
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/character/mage/animation/launchblackcatturn2.ani"),true);
obj.getVar("custom").set_vector(3,sq_GetXPos(obj));
break;
case 23:
local ani = sq_CreateAnimation("","passiveobject/character/mage/animation/launchblackcatmovereturn1.ani");
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/character/mage/animation/launchblackcatmovereturn2.ani"),true);
obj.resetHitObjectList();
break;
case 24:
local ani = sq_CreateAnimation("","passiveobject/character/mage/animation/launchblackcatreturn1.ani");
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/character/mage/animation/launchblackcatreturn2.ani"),true);
break;
}
local sizeRate = obj.getVar("custom").get_vector(0);
sizeRate = sizeRate.tofloat() / 1000.0;
local pAni = obj.getCurrentAnimation();
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate);
break;
}
break;
case ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN://元素之幕
break;
case ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL://元素奧義
break;
case ELEMENTALMASTER_SKILL_ELEMENTALQUAKE://元素震蕩
break;
case ELEMENTALMASTER_SKILL_ELEMENTALSHOWER://隕星幻滅
switch(subtype){
case 1:
switch(state){
case 20:
local randomnumber = obj.getVar("custom").getInt(11);
local aniPath = "passiveobject/elementalmaster_bykk/animation/elementalshower/darkdrop.ani";
if(randomnumber == 2) aniPath = "passiveobject/elementalmaster_bykk/animation/elementalshower/firedrop.ani";
if(randomnumber == 3) aniPath = "passiveobject/elementalmaster_bykk/animation/elementalshower/lightdrop.ani";
if(randomnumber == 4) aniPath = "passiveobject/elementalmaster_bykk/animation/elementalshower/waterdrop.ani";
local ani = sq_CreateAnimation("",aniPath);
obj.setCurrentAnimation(ani);
local pAni = obj.getCurrentAnimation();
sq_SetFrameDelayTime(pAni, 0, 100);
local sizeRate = 2.5;
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate);
obj.setTimeEvent(1, 10, 13, true);
obj.sq_PlaySound("COLORLESS_CHASER");
break;
case 21:
local randomnumber = obj.getVar("custom").getInt(11);
local aniPath = "passiveobject/elementalmaster_bykk/animation/elementalshower/darkexp.ani";
if(randomnumber == 2) aniPath = "passiveobject/elementalmaster_bykk/animation/elementalshower/fireexp.ani";
if(randomnumber == 3) aniPath = "passiveobject/elementalmaster_bykk/animation/elementalshower/lightexp.ani";
if(randomnumber == 4) aniPath = "passiveobject/elementalmaster_bykk/animation/elementalshower/waterexp.ani";
local ani = sq_CreateAnimation("",aniPath);
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
switch(randomnumber){
case 1: currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalshower/darkexplayer.ani"),true); obj.sq_PlaySound("DARK_BOMB"); break;
case 2: currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalshower/fireexplayer.ani"),true); obj.sq_PlaySound("FIRE_BOMB"); break;
case 3: currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalshower/lightexplayer.ani"),true); obj.sq_PlaySound("LIGHT_BOMB"); break;
case 4: currentAni.addLayerAnimation(6,sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalshower/waterexplayer.ani"),true); obj.sq_PlaySound("WATER_BOMB"); break;
}
local sizeRate = 2.5;
currentAni.setImageRateFromOriginal(sizeRate, sizeRate);
currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate);
local totalDamage = obj.getVar("custom").getInt(10);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 42));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
//obj.sq_PlaySound("CHASER_EXPLOSION");
break;
}
break;
}
break;
case ELEMENTALMASTER_SKILL_FLAMESTRIKE://烈焰沖擊
switch(subtype){
case 1:
switch(state){
case 20:
local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/flamestrike/new/flamestrike_start_floor01.ani");
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/flamestrike/new/flamestrike_start_floor03.ani"),true);
break;
case 21:
local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/flamestrike/new/flamestrike_blast_front02.ani");
obj.setCurrentAnimation(ani);
sq_CreateParticle("passiveobject/character/mage/particle/flamestrikeparticle-1.ptl", obj, 0, 0, 0, true, 1, 0, 1);
sq_CreateParticle("passiveobject/character/mage/particle/flamestrikeparticle-2.ptl", obj, 0, 0, 0, true, 1, 0, 1);
sq_SetMyShake(obj, 10, 150);
break;
}
local sizeRate = obj.getVar("custom").get_vector(0);
sizeRate = sizeRate.tofloat() / 100.0;
local pAni = obj.getCurrentAnimation();
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate);
break;
case 3:
switch(state){
case 20:
local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/flamestrike/lv95assimilate/flamestrikea_00.ani");
obj.setCurrentAnimation(ani);
break;
case 21:
local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/flamestrike/lv95assimilate/flamestrikeb_02.ani");
obj.setCurrentAnimation(ani);
local group = obj.getVar("custom").get_vector(1);
local uniqueId = obj.getVar("custom").get_vector(2);
local targetObj = sq_GetObject(obj, group, uniqueId);
if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,0);
sq_CreateParticle("passiveobject/elementalmaster_bykk/particle/flamestrikeparticlenew1.ptl", obj, 0, 0, 0, true, 1, 0, 1);
sq_CreateParticle("passiveobject/elementalmaster_bykk/particle/flamestrikeparticlenew2.ptl", obj, 0, 0, 0, true, 1, 0, 1);
sq_SetMyShake(obj, 10, 150);
break;
}
local sizeRate = obj.getVar("custom").get_vector(0);
sizeRate = sizeRate.tofloat() / 100.0;
local pAni = obj.getCurrentAnimation();
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate);
break;
}
break;
case ELEMENTALMASTER_SKILL_HALLOWEENBUSTER://傑克降臨
switch(subtype){
case 1:
case 2:
switch(state){
case 20:
local aniPath = "passiveobject/elementalmaster_bykk/animation/halloweenbuster/halloweenbustera_meteor_base01.ani";
if(subtype == 2) aniPath = "passiveobject/elementalmaster_bykk/animation/elementalpotential/halloweenbuster/ep_halloweenbustera_meteor_base01.ani";
local ani = sq_CreateAnimation("",aniPath);
obj.setCurrentAnimation(ani);
if(subtype == 2){
sq_CreateParticle("passiveobject/elementalmaster_bykk/particle/elementalpotentialhalloweenbursterexp.ptl", obj, 0, 0, 0, true, 30, 0, 1);
sq_CreateParticle("passiveobject/elementalmaster_bykk/particle/elementalpotentialhalloweenbursterexpsmoke.ptl", obj, 0, 0, 0, true, 10, 0, 1);
}
break;
case 21:
obj.sq_RemoveMoveParticle();
obj.stopTimeEvent(0);
obj.stopTimeEvent(1);
local aniPath = "passiveobject/elementalmaster_bykk/animation/halloweenbuster/halloweenbuster_explosion_04.ani";
if(subtype == 2) aniPath = "passiveobject/elementalmaster_bykk/animation/elementalpotential/halloweenbuster/ep_halloweenbuster_explosion_04.ani";
local ani = sq_CreateAnimation("",aniPath);
obj.setCurrentAnimation(ani);
local totalDamage = obj.getVar("custom").get_vector(2);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 19));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
if(subtype == 2){
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER);
if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE);
if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT);
if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK);
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/character/mage/animation/elementalpotential/halloweenbuster/ep_halloweenbuster_particle01.ani",0,0,0);
}
break;
}
local sizeRate = obj.getVar("custom").get_vector(0);
if(state == 21) sizeRate = obj.getVar("custom").get_vector(1);
sizeRate = sizeRate.tofloat() / 1000.0;
local pAni = obj.getCurrentAnimation();
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate);
break;
}
break;
case ELEMENTALMASTER_SKILL_MIGHTYRUNE://聖靈符文
break;
case ELEMENTALMASTER_SKILL_SESTOELEMENTO://第六元素
break;
case ELEMENTALMASTER_SKILL_SUNBURST://雷旋
break;
case ELEMENTALMASTER_SKILL_THEGATE://元素之門
switch(subtype){
case 1:
local aniPath1 = "passiveobject/elementalmaster_bykk/animation/thegate/";
local aniPath2 = "light";
switch(obj.getVar("custom").get_vector(3)){
case 2: aniPath2 = "ice"; break;
case 3: aniPath2 = "fire"; break;
case 4: aniPath2 = "dark"; break;
}
switch(state){
case 20:
local ani = sq_CreateAnimation("",aniPath1 + aniPath2 + "/start/" + aniPath2 + "_magic.ani");
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath1 + aniPath2 + "/start/" + aniPath2 + "_aura.ani"),true);
local pAni = obj.getCurrentAnimation();
pAni.setSpeedRate(200.0);
break;
case 21:
local ani = sq_CreateAnimation("",aniPath1 + aniPath2 + "/loop/" + aniPath2 + "_magic.ani");
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath1 + aniPath2 + "/loop/" + aniPath2 + "_aura.ani"),true);
local create_time = obj.getVar("custom").get_vector(2);
obj.setTimeEvent(1,create_time,-1,true);
break;
case 22:
obj.stopTimeEvent(1);
local ani = sq_CreateAnimation("",aniPath1 + aniPath2 + "/end/" + aniPath2 + "_magic.ani");
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(0,sq_CreateAnimation("",aniPath1 + aniPath2 + "/end/" + aniPath2 + "_aura.ani"),true);
break;
}
break;
}
break;
case ELEMENTALMASTER_SKILL_THUNDERCALLING://天雷
break;
case ELEMENTALMASTER_SKILL_THUNDERRAGE://光與暗的交響
break;
case ELEMENTALMASTER_SKILL_VOID://虛無之球
switch(subtype){
case 1:
switch(state){
case 20:
local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/void/void1_start.ani");
obj.setCurrentAnimation(ani);
break;
case 21:
local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/void/void1_loop.ani");
obj.setCurrentAnimation(ani);
break;
case 22:
local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/void/void1_end.ani");
obj.setCurrentAnimation(ani);
break;
}
local sizeRate = obj.getVar("custom").get_vector(2);
sizeRate = sizeRate.tofloat() / 100.0;
local pAni = obj.getCurrentAnimation();
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate);
break;
case 2:
switch(state){
case 20:
local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/void/lv95assimilate/start_00.ani");
obj.setCurrentAnimation(ani);
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/elementalmaster_bykk/animation/void/lv95assimilate/start_06.ani",0,0,0);
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/elementalmaster_bykk/animation/void/lv95assimilate/start_07.ani",0,0,0);
break;
case 21:
local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/void/lv95assimilate/loop_00.ani");
obj.setCurrentAnimation(ani);
local timeMax = obj.getVar("custom").get_vector(1);
print("timemax = "+timeMax);
obj.setTimeEvent(1, timeMax, 1, false);
break;
case 22:
obj.stopTimeEvent(0);
local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/void/lv95assimilate/end_04.ani");
obj.setCurrentAnimation(ani);
local totalDamage = obj.getVar("custom").get_vector(2);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 33));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
}
local sizeRate = obj.getVar("custom").get_vector(3);
sizeRate = sizeRate.tofloat() / 230.0;
local pAni = obj.getCurrentAnimation();
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate);
break;
}
break;
case ELEMENTALMASTER_SKILL_WALLOFICE://冰牆
break;
case 38://移動施法
local aniPath1 = "character/mage/effect/animation/magic";
local sub = obj.getVar("custom").get_vector(0);
if(sub == 4){
switch(state){
case 20:
local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalpotential/icearea/magiconcharge2_1.ani");
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalpotential/icearea/magiconcharge2_2.ani"),true);
break;
case 21:
local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalpotential/icearea/magicfullcharge2_1.ani");
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(-1,sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalpotential/icearea/magicfullcharge22_1.ani"),true);
break;
}
return;
}
switch(state){
case 20:
local ani = sq_CreateAnimation("",aniPath1 + "oncharge" + sub.tostring() + "1.ani");
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(-1,sq_CreateAnimation("",aniPath1 + "oncharge" + sub.tostring() + "2.ani"),true);
break;
case 21:
local ani = sq_CreateAnimation("",aniPath1 + "fullcharge" + sub + "1.ani");
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(-1,sq_CreateAnimation("",aniPath1 + "oncharge" + sub.tostring() + "2.ani"),true);
break;
}
break;
}
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(attackInfo){
local element_kk_fire = sqrChr.getVar("element_kk").getInt(0);
local element_kk_water = sqrChr.getVar("element_kk").getInt(1);
local element_kk_dark = sqrChr.getVar("element_kk").getInt(2);
local element_kk_light = sqrChr.getVar("element_kk").getInt(3);
if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE);
if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER);
if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK);
if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT);
}
}
function onEndCurrentAni_po_elementalmaster_bykk_kak(obj)
{
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 ELEMENTALMASTER_SKILL_ARCTICPISTE://極冰綻放
switch(subtype){
case 1:
case 2:
switch(state){
case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break;
case 22: sq_SendDestroyPacketPassiveObject(obj); break;
}
break;
case 3:
case 4:
sq_SendDestroyPacketPassiveObject(obj);
break;
}
break;
case ELEMENTALMASTER_SKILL_BLACKHOLE://黑洞
switch(subtype){
case 1:
case 2:
switch(state){
case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break;
case 22: sq_SendDestroyPacketPassiveObject(obj); break;
}
break;
}
break;
case ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND://聖靈水晶
switch(subtype){
case 1:
switch(state){
case 20:
case 21:
case 22:
case 23:
obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, "");
break;
case 24:
sq_SendDestroyPacketPassiveObject(obj);
break;
}
break;
case 2:
case 3:
case 4:
switch(state){
case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break;
case 22: sq_SendDestroyPacketPassiveObject(obj); break;
}
break;
}
break;
case ELEMENTALMASTER_SKILL_ELEMENTALCHAIN://元素點燃
switch(subtype){
case 1:
case 2:
case 3:
case 4:
switch(state){
case 20:
case 22:
obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
break;
case 23:
case 25:
case 28:
obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, "");
break;
case 27:
obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, "");
break;
}
break;
case 15:
if(state == 20) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
break;
case 150:
sq_SendDestroyPacketPassiveObject(obj);
break;
case 16:
if(state == 21) obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, "");
else if(state == 22 || state == 23) sq_SendDestroyPacketPassiveObject(obj);
break;
case 18:
switch(state){
case 20:
case 21:
case 22:
case 23:
obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, "");
break;
case 24: sq_SendDestroyPacketPassiveObject(obj); break
}
break;
}
break;
case ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN://元素之幕
break;
case ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL://元素奧義
break;
case ELEMENTALMASTER_SKILL_ELEMENTALQUAKE://元素震蕩
switch(subtype){
case 1: sq_SendDestroyPacketPassiveObject(obj); break;
case 2: sq_SendDestroyPacketPassiveObject(obj); break;
}
break;
case ELEMENTALMASTER_SKILL_ELEMENTALSHOWER://隕星幻滅
switch(subtype){
case 1:
switch(state){
case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break;
case 21: sq_SendDestroyPacketPassiveObject(obj); break;
}
break;
}
break;
case ELEMENTALMASTER_SKILL_FLAMESTRIKE://烈焰沖擊
switch(subtype){
case 1:
case 3:
if(state == 20) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
else sq_SendDestroyPacketPassiveObject(obj);
break;
case 2:
sq_SendDestroyPacketPassiveObject(obj);
break;
}
break;
case ELEMENTALMASTER_SKILL_HALLOWEENBUSTER://傑克降臨
if(subtype == 0 || state == 21) sq_SendDestroyPacketPassiveObject(obj);
break;
case ELEMENTALMASTER_SKILL_MIGHTYRUNE://聖靈符文
break;
case ELEMENTALMASTER_SKILL_SESTOELEMENTO://第六元素
sq_SendDestroyPacketPassiveObject(obj);
break;
case ELEMENTALMASTER_SKILL_SUNBURST://雷旋
sq_SendDestroyPacketPassiveObject(obj);
break;
case ELEMENTALMASTER_SKILL_THEGATE://元素之門
switch(subtype){
case 1:
switch(state){
case 20: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break;
case 22: sq_SendDestroyPacketPassiveObject(obj); break;
}
break;
case 2: sq_SendDestroyPacketPassiveObject(obj); break;
case 10: sq_SendDestroyPacketPassiveObject(obj); break;
case 11: sq_SendDestroyPacketPassiveObject(obj); break;
}
break;
case ELEMENTALMASTER_SKILL_THUNDERCALLING://天雷
sq_SendDestroyPacketPassiveObject(obj);
break;
case ELEMENTALMASTER_SKILL_THUNDERRAGE://光與暗的交響
sq_SendDestroyPacketPassiveObject(obj);
break;
case ELEMENTALMASTER_SKILL_VOID://虛無之球
switch(subtype){
case 1:
case 2:
switch(state){
case 20:
if(obj.getVar("custom").get_vector(4) > 0) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
else obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
break;
case 22: sq_SendDestroyPacketPassiveObject(obj); break;
}
break;
}
break;
case ELEMENTALMASTER_SKILL_WALLOFICE://冰牆
break;
case 38://移動施法
if(state == 21) sq_SendDestroyPacketPassiveObject(obj);
break;
}
}
function onTimeEvent_po_elementalmaster_bykk_kak(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 ELEMENTALMASTER_SKILL_ARCTICPISTE://極冰綻放
switch(timeEventIndex){
case 1:
if(timeEventCount >= obj.getVar("custom").get_vector(1)){
obj.stopTimeEvent(1);
obj.stopTimeEvent(2);
obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
return;
}
obj.resetHitObjectList();
obj.sq_PlaySound("ARCTICF_MCIRCLE");
break;
case 2:
local aniPath = ["passiveobject/elementalmaster_bykk/animation/icefield/icefieldnormal1.ani","passiveobject/elementalmaster_bykk/animation/icefield/icefieldnormal2.ani"];
if(subtype == 2) aniPath = ["passiveobject/elementalmaster_bykk/animation/elementalpotential/icearea/icearea_att_3.ani","passiveobject/elementalmaster_bykk/animation/elementalpotential/icearea/icearea_att2_3.ani"];
local sizeRate = obj.getVar("custom").get_vector(0);
local sizeRate_balance = 120;
local randomnumber = sq_getRandom(1,100);
if(randomnumber > 75) sq_AddDrawOnlyAniFromParent(obj,aniPath[sq_getRandom(0,1)],sq_getRandom(-113,113)*sizeRate/sizeRate_balance,sq_getRandom(-71,71)*sizeRate/sizeRate_balance,0);
else if(randomnumber <= 75 && randomnumber > 50) sq_AddDrawOnlyAniFromParent(obj,aniPath[sq_getRandom(0,1)],sq_getRandom(-250,250)*sizeRate/sizeRate_balance,sq_getRandom(-20,20)*sizeRate/sizeRate_balance,0);
else if(randomnumber <= 50 && randomnumber > 25) sq_AddDrawOnlyAniFromParent(obj,aniPath[sq_getRandom(0,1)],sq_getRandom(-172,172)*sizeRate/sizeRate_balance,sq_getRandom(-30,30)*sizeRate/sizeRate_balance,0);
else sq_AddDrawOnlyAniFromParent(obj,aniPath[sq_getRandom(0,1)],sq_getRandom(-217,217)*sizeRate/sizeRate_balance,sq_getRandom(-43,43)*sizeRate/sizeRate_balance,0);
obj.sq_PlaySound("ARCTICF_ICE_OUT");
break;
case 3:
local pooledObj = createOnlyDrawObject_elementalmaster_bykk(obj,"passiveobject/elementalmaster_bykk/animation/flamestrike/lv95assimilate/flamestrikebottoma_00.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj),ENUM_DRAWLAYER_BOTTOM);
local sizeRate = obj.getVar("custom").get_vector(0);
sizeRate = sizeRate.tofloat() / 100.0;
local pAni = pooledObj.getCurrentAnimation();
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
break;
}
break;
case ELEMENTALMASTER_SKILL_BLACKHOLE://黑洞
switch(timeEventIndex){
case 0:
switch(subtype){
case 1:
case 2:
obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
break;
case 3: sq_SendDestroyPacketPassiveObject(obj); break;
}
break;
case 1: obj.resetHitObjectList(); break;
case 2:
local sub = obj.getVar("custom").get_vector(6);
if(sub > 0){
local sizeRate = obj.getVar("custom").get_vector(0) / 2;
local attractPower = obj.getVar("custom").get_vector(1) * 150 / 100;
local range = obj.getVar("custom").get_vector(2);
local totalDamage2 = obj.getVar("custom").get_vector(3) * 25 / 100;
local lifeTime = obj.getVar("custom").get_vector(4) / 2;
local totalDamage = obj.getVar("custom").get_vector(5) * 25 / 100;
local hitTime = obj.getVar("custom").get_vector(7);
local damageRate = totalDamage2 / totalDamage * 100;
cearteSkillPassive_Elementalmaster_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,sq_GetZPos(obj),obj.getDirection(),ELEMENTALMASTER_SKILL_BLACKHOLE,subtype,totalDamage,sizeRate,lifeTime,damageRate,attractPower,range,0,hitTime,0,0);
}
break;
case 3:
obj.stopSound(20);
obj.sq_PlaySound("NIGHTH_LOOP",20);
break;
}
break;
case ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND://聖靈水晶
switch(timeEventIndex){
case 1: obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, ""); break;
case 2: obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, ""); break;
}
break;
case ELEMENTALMASTER_SKILL_ELEMENTALCHAIN://元素點燃
switch(subtype){
case 1:
case 2:
case 3:
case 4:
switch(timeEventIndex){
case 0:
sqrChr.getVar("elementalchain").setBool(0, false);
sq_SendDestroyPacketPassiveObject(obj);
break;
case 1:
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(sqrChr,"character/mage/elementalmaster_bykk/ap/ap_elementalchain.nut");
if(!addAppendage) return;
addAppendage.getVar().setBool(subtype, false);
setElementalChainBuff_bykk(sqrChr,ELEMENTALMASTER_SKILL_ELEMENTALCHAIN,addAppendage);
if(obj.getVar("custom").get_vector(1) > 0) obj.addSetStatePacket(27, null, STATE_PRIORITY_AUTO, false, "");
else obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
break;
}
break;
case 150:
local sizeRate = obj.getVar("custom").get_vector(0);
sizeRate = sizeRate.tofloat() / 1000.0;
switch(timeEventIndex){
case 1:
local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle1.ani", sq_getRandom(-10,10), sq_getRandom(-10,10), sq_getRandom(-10,10));
local currentAni = pooledObj.getCurrentAnimation();
currentAni.setImageRateFromOriginal(sizeRate, sizeRate);
break;
case 2:
local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle2.ani", 0, 2, 0);
local currentAni = pooledObj.getCurrentAnimation();
currentAni.setImageRateFromOriginal(sizeRate, sizeRate);
break;
case 3:
local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle3.ani", 0, 1, 1);
local currentAni = pooledObj.getCurrentAnimation();
local angle = sq_ToRadian(360.0 * timeEventCount / 16);
sq_SetfRotateAngle(currentAni, angle);
currentAni.setImageRateFromOriginal(sizeRate * 2.0, sizeRate * 2.0);
break;
case 4:
local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/common/animation/fireexplosionparticle4.ani", sq_getRandom(-30,30), sq_getRandom(-30,30), sq_getRandom(-30,30));
local currentAni = pooledObj.getCurrentAnimation();
currentAni.setImageRateFromOriginal(sizeRate, sizeRate);
break;
}
break;
case 16:
switch(timeEventIndex){
case 0: obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, ""); break;
case 1: obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, ""); break;
}
break;
case 17:
sq_SendDestroyPacketPassiveObject(obj);
break;
}
break;
case ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN://元素之幕
switch(timeEventIndex){
case 0:
local hitMax = obj.getVar("custom").get_vector(2);
if(timeEventCount >= hitMax - 2 && obj.getVar().getBool(0) == false){
obj.getVar().setBool(0,true);
local totalDamage = obj.getVar("custom").get_vector(1);
local sizeRate = obj.getVar("custom").get_vector(0);
cearteSkillPassive_Elementalmaster_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,sq_GetZPos(obj),obj.getDirection(),ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN,4,totalDamage,sizeRate,0,0,0,0,0,0,0,0);
}
if(timeEventCount >= hitMax){obj.stopTimeEvent(0);return;}
obj.resetHitObjectList();
break;
case 1:
if(subtype == 1 && obj.getVar("custom").get_vector(4) > 0){
local size = obj.getVar("targetObj").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("targetObj").get_obj_vector(i);
if(targetObj){
local activeObj = sq_GetCNRDObjectToActiveObject(targetObj);
if(activeObj.getVar("elementalcurtain").getBool(0) == true) activeObj.getVar("elementalcurtain").setBool(0, false);
}
}
}
}
if(subtype == 1){
local size = obj.getVar("target").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("target").get_obj_vector(i);
if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/mage/elementalmaster_bykk/ap/ap_elementalcurtain.nut");
}
}
}
sq_SendDestroyPacketPassiveObject(obj);
break;
}
break;
case ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL://元素奧義
break;
case ELEMENTALMASTER_SKILL_ELEMENTALQUAKE://元素震蕩
switch(timeEventIndex){
case 1:
local ani = sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/elementalquake/quakebottom_crack.ani");
obj.setCurrentAnimation(ani);
local totalDamage = obj.getVar("custom").get_vector(0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 12));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER)) attackInfo.setElement(ENUM_ELEMENT_WATER);
if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) attackInfo.setElement(ENUM_ELEMENT_FIRE);
if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) attackInfo.setElement(ENUM_ELEMENT_LIGHT);
if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK)) attackInfo.setElement(ENUM_ELEMENT_DARK);
local sizeRate = obj.getVar("custom").get_vector(2);
sizeRate = sizeRate.tofloat() / 100.0;
local pAni = obj.getCurrentAnimation();
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
sq_SetAttackBoundingBoxSizeRate(pAni, sizeRate, sizeRate, sizeRate);
sq_ChangeDrawLayer(obj, ENUM_DRAWLAYER_BOTTOM);
break;
case 2:
local totalDamage = obj.getVar("custom").get_vector(0) * 10 / 100;
local sizeRate = obj.getVar("custom").get_vector(2);
cearteSkillPassive_Elementalmaster_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,sq_GetZPos(obj),obj.getDirection(),ELEMENTALMASTER_SKILL_ELEMENTALQUAKE,2,totalDamage,sizeRate,0,0,0,0,0,0,0,0);
break;
}
break;
case ELEMENTALMASTER_SKILL_ELEMENTALSHOWER://隕星幻滅
switch(timeEventIndex){
case 1:
local baseZ = obj.getVar("custom").getInt(12);
local MoveZ = sq_GetUniformVelocity(baseZ, 0, timeEventCount, 13);
sq_setCurrentAxisPos(obj, 2, MoveZ);
if(timeEventCount >= 13){
sq_SetMyShake(obj, 20, 200);
local randomnumber = obj.getVar("custom").getInt(11);
switch(randomnumber){
case 1: obj.sq_PlaySound("DARK_CHASER"); break;
case 1: obj.sq_PlaySound("FIRE_CHASER"); break;
case 1: obj.sq_PlaySound("LIGHT_CHASER"); break;
case 1: obj.sq_PlaySound("WATER_CHASER"); break;
}
}
break;
}
break;
case ELEMENTALMASTER_SKILL_FLAMESTRIKE://烈焰沖擊
break;
case ELEMENTALMASTER_SKILL_HALLOWEENBUSTER://傑克降臨
switch(timeEventIndex){
case 0: obj.resetHitObjectList(); break;
case 1: if(sq_GetZPos(obj) <= 0) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break;
case 2:
local sizeRate = obj.getVar("custom").get_vector(0);
local sizeRate2 = obj.getVar("custom").get_vector(1);
local damageRate = obj.getVar("custom").get_vector(2);
local totalDamage = obj.getVar("custom").get_vector(3);
local sub = obj.getVar("custom").get_vector(4);
local typesub = obj.getVar("custom").get_vector(5);
cearteSkillPassive_Elementalmaster_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,-500,0,sq_GetZPos(obj) + 400,obj.getDirection(),ELEMENTALMASTER_SKILL_HALLOWEENBUSTER,typesub,totalDamage,sizeRate,sizeRate2,damageRate,sub,0,0,0,0,0);
break;
case 3: sq_SendDestroyPacketPassiveObject(obj); break;
case 4: obj.setTimeEvent(2,200,obj.getVar("custom").get_vector(6),true); break;
case 5:
local x = sq_GetUniformVelocity(0, 500, timeEventCount, 40);
local moveX = sq_GetDistancePos(obj.getVar("move").getInt(10), obj.getDirection(), x);
local moveZ = sq_GetUniformVelocity(obj.getVar("move").getInt(11), 0, timeEventCount, 40);
sq_setCurrentAxisPos(obj, 0, moveX);
sq_setCurrentAxisPos(obj, 2, moveZ);
if(timeEventCount >= 40) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
break;
}
break;
case ELEMENTALMASTER_SKILL_MIGHTYRUNE://聖靈符文
break;
case ELEMENTALMASTER_SKILL_SESTOELEMENTO://第六元素
if(timeEventIndex == 1) obj.resetHitObjectList();
break;
case ELEMENTALMASTER_SKILL_SUNBURST://雷旋
switch(timeEventIndex){
case 1:
sqrChr.sq_IntVectClear();
sqrChr.sq_IntVectPush(21);
sqrChr.sq_IntVectPush(31);
sqrChr.sq_IntVectPush(3);
sqrChr.sq_AddSetStatePacket(ELEMENTALMASTER_STATE_ELEMENTALCHAIN, STATE_PRIORITY_IGNORE_FORCE, true);
sq_SendDestroyPacketPassiveObject(obj);
break;
}
break;
case ELEMENTALMASTER_SKILL_THEGATE://元素之門
switch(timeEventIndex){
case 1:
local create_number = obj.getVar("custom").get_vector(1);
local totalDamage = obj.getVar("custom").get_vector(0);
local sub = obj.getVar("custom").get_vector(3);
cearteSkillPassive_Elementalmaster_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,sq_GetZPos(obj) - 20,obj.getDirection(),ELEMENTALMASTER_SKILL_THEGATE,2,totalDamage,sub,0,0,0,0,0,0,0,0);
if(timeEventCount >= create_number){
obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
return;
}
break;
case 2:
local targetObj = obj.getVar("tar").get_obj_vector(0);
if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,33);
break;
}
break;
case ELEMENTALMASTER_SKILL_THUNDERCALLING://天雷
switch(timeEventIndex){
case 0: break;
case 1: sq_SetMyShake(obj,2,100); break;
case 2:
local totalDamage = obj.getVar("custom").get_vector(0);
local sizeRate = obj.getVar("custom").get_vector(1);
local range = obj.getVar("custom").get_vector(3);
local sub = obj.getVar("custom").get_vector(4);
local prob = obj.getVar("custom").get_vector(6);
local level = obj.getVar("custom").get_vector(7);
local time = obj.getVar("custom").get_vector(8);
cearteSkillPassive_Elementalmaster_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,sq_GetZPos(obj),obj.getDirection(),ELEMENTALMASTER_SKILL_THUNDERCALLING,sub,totalDamage,sizeRate,range,prob,level,time,0,0,0,0);
if(obj.getVar().getBool(0) == false && sub == 2){
if(range <= 0) return;
monsterpulled_elementalmaster_bykk(sqrChr,obj,0,0,0,200,range);
}
break;
case 3: sq_SendDestroyPacketPassiveObject(obj); break;
case 4:
local hitTime = obj.getVar("custom").get_vector(5);
local countMax = obj.getVar("custom").get_vector(2);
obj.setTimeEvent(2,hitTime,countMax,true);
break;
}
break;
case ELEMENTALMASTER_SKILL_THUNDERRAGE://光與暗的交響
if(timeEventIndex == 1) obj.resetHitObjectList();
break;
case ELEMENTALMASTER_SKILL_VOID://虛無之球
switch(subtype){
case 1:
switch(timeEventIndex){
case 0: obj.resetHitObjectList(); break;
case 1:
local shoot_range = obj.getVar("custom").get_vector(0);
local baseX = obj.getVar("custom").get_vector(1);
if(sq_Abs(sq_GetXPos(obj) - baseX) > shoot_range){
obj.stopTimeEvent(0);
sq_SendDestroyPacketPassiveObject(obj);
}
break;
}
break;
case 2:
if(timeEventIndex == 0) obj.resetHitObjectList();
else if(timeEventIndex == 1) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
break;
}
break;
case ELEMENTALMASTER_SKILL_WALLOFICE://冰牆
break;
case 38://移動施法
if(timeEventIndex == 0) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
break;
}
}
function onAttack_po_elementalmaster_bykk_kak(obj, damager, boundingBox, isStuck)
{
if(!obj) return;
//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 ELEMENTALMASTER_SKILL_ARCTICPISTE://極冰綻放
if(damager.isObjectType(OBJECTTYPE_ACTIVE) && damager.getState() != STATE_DIE){
local activeObj = sq_GetCNRDObjectToActiveObject(damager);
local minus_Rate = obj.getVar("custom").get_vector(4);
if(!sq_IsFixture(activeObj) && activeObj.getVar().getInt(100) < 1){
activeObj.getVar().setInt(100,100);
local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_MOVE_SPEED, true, -minus_Rate.tofloat(), 0);
if(ap){
ap.getAppendageInfo().setValidTime(3000);
ap.sq_Append(activeObj, obj);
}
}
}
break;
case ELEMENTALMASTER_SKILL_BLACKHOLE://黑洞
break;
case ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND://聖靈水晶
break;
case ELEMENTALMASTER_SKILL_ELEMENTALCHAIN://元素點燃
switch(subtype){
case 15:
switch(state){
case 21:
local totalDamage = obj.getVar("custom").get_vector(4);
local powerDamage = obj.getVar("custom").get_vector(5);
local sizeRate = obj.getVar("custom").get_vector(1);
cearteSkillPassive_Elementalmaster_bykk(sqrChr,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,sq_GetZPos(obj),obj.getDirection(),ELEMENTALMASTER_SKILL_ELEMENTALCHAIN,150,totalDamage,powerDamage,sizeRate,0,0,0,0,0,0,0);
sq_SendDestroyPacketPassiveObject(obj);
break;
}
break;
case 16:
obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
break;
case 17:
local speed_time = obj.getVar("custom").get_vector(8);
local movespeed_rate = obj.getVar("custom").get_vector(9);
local attackspeed_rate = obj.getVar("custom").get_vector(10);
local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_MOVE_SPEED, true, -(movespeed_rate * 0.1).tofloat(), speed_time);
local ap2 = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ATTACK_SPEED, true, -(attackspeed_rate * 0.1).tofloat(), speed_time);
if(ap && damager.getVar().getBool(0) == false) {damager.getVar().setBool(0,true);ap.sq_Append(damager, obj);}
if(ap2 && damager.getVar().getBool(1) == false) {damager.getVar().setBool(1,true);ap2.sq_Append(damager, obj);}
sq_SendDestroyPacketPassiveObject(obj);
break;
}
break;
case ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN://元素之幕
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
damager = sq_GetCNRDObjectToActiveObject(damager);
if(damager.getState() == STATE_DIE) return;
switch(subtype){
case 1:
sq_AddDrawOnlyAniFromParent(damager,"passiveobject/elementalmaster_bykk/animation/elementalcurtain/elementalcurtain_hit.ani",0,0,sq_GetCenterZPos(boundingBox));
if(damager.getVar("elementalcurtain").getBool(0) == false && obj.getVar("custom").get_vector(4) > 0){
damager.getVar("elementalcurtain").setBool(0, true);
obj.getVar("targetObj").push_obj_vector(damager);
local totalDamage = obj.getVar("custom").get_vector(3) * 45 / 100;
cearteSkillPassive_Elementalmaster_bykk(sqrChr,damager,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,sq_GetZPos(obj) + 380,obj.getDirection(),ELEMENTALMASTER_SKILL_THEGATE,1,totalDamage,20,100,sq_getRandom(1,4),sq_GetGroup(damager),sq_GetUniqueId(damager),0,0,0,0);
}
if(damager.isObjectType(OBJECTTYPE_ACTIVE) && !CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/mage/elementalmaster_bykk/ap/ap_elementalcurtain.nut")){
obj.getVar("target").push_obj_vector(damager);
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/mage/elementalmaster_bykk/ap/ap_elementalcurtain.nut", true);
sq_HoldAndDelayDie(damager, obj, true, false, false, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage);
}
break;
case 2:
sq_AddDrawOnlyAniFromParent(damager,"passiveobject/elementalmaster_bykk/animation/elementalcurtain/elementalcurtain_finishhit.ani",0,0,sq_GetCenterZPos(boundingBox));
break;
}
}
break;
case ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL://元素奧義
break;
case ELEMENTALMASTER_SKILL_ELEMENTALQUAKE://元素震蕩
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/elementalmaster_bykk/skillnut/ap_elementalquake.nut")){
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/mage/elementalmaster_bykk/skillnut/ap_elementalquake.nut", true);
sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage);
}
}
break;
case ELEMENTALMASTER_SKILL_ELEMENTALSHOWER://隕星幻滅
break;
case ELEMENTALMASTER_SKILL_FLAMESTRIKE://烈焰沖擊
switch(subtype){
case 2:
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
damager = sq_GetCNRDObjectToActiveObject(damager);
if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/mage/elementalmaster_bykk/ap/ap_flamestrike.nut")) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_flamestrike.nut");
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/mage/elementalmaster_bykk/ap/ap_flamestrike.nut", true);
local time = 600 + obj.getVar("custom").get_vector(2);
AddAppendage.sq_SetValidTime(time);
sq_HoldAndDelayDie(damager, obj, true, true, true, 50, 300, ENUM_DIRECTION_NEUTRAL , AddAppendage);
local sizeRate = obj.getVar("custom").get_vector(0);
local totalDamage = obj.getVar("custom").get_vector(1);
local group = sq_GetGroup(damager);
local uniqueId = sq_GetUniqueId(damager);
cearteSkillPassive_Elementalmaster_bykk(sqrChr,damager,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,sq_GetZPos(obj),ENUM_DIRECTION_RIGHT,ELEMENTALMASTER_SKILL_FLAMESTRIKE,3,totalDamage,sizeRate,group,uniqueId,0,0,0,0,0,0);
}
break;
}
break;
case ELEMENTALMASTER_SKILL_HALLOWEENBUSTER://傑克降臨
break;
case ELEMENTALMASTER_SKILL_MIGHTYRUNE://聖靈符文
break;
case ELEMENTALMASTER_SKILL_SESTOELEMENTO://第六元素
break;
case ELEMENTALMASTER_SKILL_SUNBURST://雷旋
break;
case ELEMENTALMASTER_SKILL_THEGATE://元素之門
switch(subtype){
case 2:
local sub = obj.getVar("custom").get_vector(1);
local aniPath2 = "light";
switch(sub){
case 2: aniPath2 = "ice"; break;
case 3: aniPath2 = "fire"; break;
case 4: aniPath2 = "dark"; break;
}
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/elementalmaster_bykk/animation/thegate/"+aniPath2+"/"+aniPath2+"_shock.ani",0,0,0);
sq_SendDestroyPacketPassiveObject(obj);
break;
}
break;
case ELEMENTALMASTER_SKILL_THUNDERCALLING://天雷
break;
case ELEMENTALMASTER_SKILL_THUNDERRAGE://光與暗的交響
break;
case ELEMENTALMASTER_SKILL_VOID://虛無之球
break;
case ELEMENTALMASTER_SKILL_WALLOFICE://冰牆
break;
case 38://移動施法
break;
}
}
function onKeyFrameFlag_po_elementalmaster_bykk_kak(obj, flagIndex)
{
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 ELEMENTALMASTER_SKILL_ARCTICPISTE://極冰綻放
if(flagIndex == 1){
local sizeRate = obj.getVar("custom").getInt(10);
sizeRate = sizeRate.tofloat() / 100.0;
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/elementalmaster_bykk/animation/icefield/new/icefielddisappear1.ani", 0, 0, 0);
local pAni = pooledObj.getCurrentAnimation();
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
}
break;
case ELEMENTALMASTER_SKILL_BLACKHOLE://黑洞
break;
case ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND://聖靈水晶
break;
case ELEMENTALMASTER_SKILL_ELEMENTALCHAIN://元素點燃
break;
case ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN://元素之幕
switch(flagIndex){
case 1: sq_SetMyShake(obj,8,200); break;
}
break;
case ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL://元素奧義
break;
case ELEMENTALMASTER_SKILL_ELEMENTALQUAKE://元素震蕩
switch(flagIndex){
case 1:
sq_flashScreen(obj,0, 50, 150, 51, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj,6,360);
break;
case 2:
obj.resetHitObjectList();
break;
case 3:
sq_flashScreen(obj,0, 50, 200, 76, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj,7,360);
break;
case 4:
sq_flashScreen(obj,0, 300, 300, 102, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj,8,500);
break;
case 5:
local totalDamage = obj.getVar("custom").get_vector(0);
local damageRate = obj.getVar("custom").get_vector(1);
totalDamage = totalDamage * damageRate / 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 12));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
if(obj.getVar("custom").get_vector(3) < 1){
if(sqrChr){
sqrChr.sq_IntVectClear();
sqrChr.sq_IntVectPush(3);
sqrChr.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_ELEMENTALQUAKE, STATE_PRIORITY_USER, true);
}
}
break;
case 6:
sq_flashScreen(obj,0, 60, 500, 127, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj,10,500);
break;
}
break;
case ELEMENTALMASTER_SKILL_ELEMENTALSHOWER://隕星幻滅
break;
case ELEMENTALMASTER_SKILL_FLAMESTRIKE://烈焰沖擊
break;
case ELEMENTALMASTER_SKILL_HALLOWEENBUSTER://傑克降臨
break;
case ELEMENTALMASTER_SKILL_MIGHTYRUNE://聖靈符文
break;
case ELEMENTALMASTER_SKILL_SESTOELEMENTO://第六元素
break;
case ELEMENTALMASTER_SKILL_SUNBURST://雷旋
break;
case ELEMENTALMASTER_SKILL_THEGATE://元素之門
switch(flagIndex){
case 25:
local totalDamage = obj.getVar("custom").getInt(0);
local sub = obj.getVar("custom").getInt(1);
local group = obj.getVar("custom").getInt(2);
local uniqueId = obj.getVar("custom").getInt(3);
local targetObj = sq_GetObject(obj, group, uniqueId);
if(targetObj && targetObj.getState() != STATE_DIE){
cearteSkillPassive_Elementalmaster_bykk(obj,targetObj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,0,obj.getDirection(),ELEMENTALMASTER_SKILL_THEGATE,11,totalDamage,sub,group,uniqueId,0,0,0,0,0,0);
}
break;
}
break;
case ELEMENTALMASTER_SKILL_THUNDERCALLING://天雷
break;
case ELEMENTALMASTER_SKILL_THUNDERRAGE://光與暗的交響
break;
case ELEMENTALMASTER_SKILL_VOID://虛無之球
if(subtype == 1 && flagIndex == 1){
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(3,sq_CreateAnimation("","passiveobject/elementalmaster_bykk/animation/void/void4.ani"),true);
}
if(subtype == 2 && flagIndex == 1){
local hitTime = obj.getVar("custom").get_vector(0);
print("hittime = "+hitTime);
obj.setTimeEvent(0,hitTime,-1,false);
}
break;
case ELEMENTALMASTER_SKILL_WALLOFICE://冰牆
break;
case 38://移動施法
break;
}
}
function procAppend_po_elementalmaster_bykk_kak(obj)
{
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 ELEMENTALMASTER_SKILL_ARCTICPISTE://極冰綻放
break;
case ELEMENTALMASTER_SKILL_BLACKHOLE://黑洞
break;
case ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND://聖靈水晶
break;
case ELEMENTALMASTER_SKILL_ELEMENTALCHAIN://元素點燃
switch(subtype){
case 1:
case 2:
case 3:
case 4:
if(!sqrChr || sqrChr.getState() == STATE_DIE){sq_SendDestroyPacketPassiveObject(obj); break;}
switch(state){
case 28:
case 29:
local currentT = sq_GetObjectTime(obj);
local currentSpeedRate = 1.0 ;
local defaultRoundTime = 5120;
local radius = 50;
local base100Angle = 0;
switch(subtype){
case 1: base100Angle = 4500; break;
case 2: base100Angle = 13500; break;
case 3: base100Angle = 22500; break;
case 4: base100Angle = 31500; break;
}
local baseX = sqrChr.getXPos();
local baseY = sqrChr.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 = 50 * 0.5;
local upMovLen = radius * sq_SinTable(angle.tointeger()) * axisMagnifyRate / 100;
local mov_y = baseY + upMovLen.tointeger();
local mov_z = sq_GetZPos(sqrChr) + 35;
local offset_z = 13;
if(subtype == 2 || subtype == 4) offset_z = -13;
if(currentT % defaultRoundTime <= 1280 && currentT % defaultRoundTime > 0) mov_z = mov_z + sq_GetUniformVelocity(0, offset_z, currentT % defaultRoundTime, 1280);
else if(currentT % defaultRoundTime <= 2560 && currentT % defaultRoundTime > 1280) mov_z = mov_z + sq_GetUniformVelocity(offset_z, 0, currentT % defaultRoundTime - 1280, 1280);
else if(currentT % defaultRoundTime <= 3840 && currentT % defaultRoundTime > 2560) mov_z = mov_z + sq_GetUniformVelocity(0, -offset_z, currentT % defaultRoundTime - 2560, 1280);
else if(currentT % defaultRoundTime <= 5120 && currentT % defaultRoundTime > 3840) mov_z = mov_z + sq_GetUniformVelocity(-offset_z, 0, currentT % defaultRoundTime - 3840, 1280);
sq_setCurrentAxisPos(obj, 0, mov_x);
sq_setCurrentAxisPos(obj, 1, mov_y);
sq_setCurrentAxisPos(obj, 2, mov_z);//sqrChr.getZPos() + 30);
break;
}
break;
case 15:
switch(state){
case 21:
local pAni = obj.getCurrentAnimation();
local currentT = sq_GetCurrentTime(pAni);
local fireT = 800;
local srcX = obj.getVar("custom").get_vector(3);
local MoveX = obj.getVar("custom").get_vector(2) * 4 / 10;
local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT);
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);
sq_setCurrentAxisPos(obj, 0, dstX);
if(currentT > fireT) sq_SendDestroyPacketPassiveObject(obj);
break;
}
break;
case 16:
switch(state){
case 20:
local pAni = obj.getCurrentAnimation();
local currentT = sq_GetCurrentTime(pAni);
local fireT = 500;
local srcX = obj.getVar("custom").get_vector(1);
local srcY = obj.getVar("custom").get_vector(2);
local srcZ = obj.getVar("custom").get_vector(3);
local MoveX = obj.getVar("custom").get_vector(4);
local MoveY = obj.getVar("custom").get_vector(5);
local MoveZ = obj.getVar("custom").get_vector(6);
if(MoveY != 0){
if(MoveY > 8) MoveY = 8;
else if(MoveY < -8) MoveY = -8;
local vy = sq_GetUniformVelocity(0, MoveY, currentT, fireT);
sq_setCurrentAxisPos(obj, 1, srcY + vy);
}
local vx = sq_GetUniformVelocity(0, MoveX, currentT, fireT);
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), vx);//根據方向運算當前數值
sq_setCurrentAxisPos(obj, 0, dstX);//設置當前x坐標
local vz = 0;
if(MoveZ > 0){
vz = sq_GetAccel(0, MoveZ, currentT, fireT, true);
if(currentT > 250) vz = sq_GetAccel(MoveZ, 0, currentT, fireT, false);
}
else{
vz = sq_GetAccel(sq_GetZPos(obj), 0, currentT, fireT, false);
currentT = currentT + 250;
}
sq_setCurrentAxisPos(obj, 2, vz);//設置當前x坐標
if(currentT >= fireT) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
break;
}
break;
case 17:
local currentT = sq_GetObjectTime(obj);
local currentSpeedRate = 1.0 ;
local defaultRoundTime = 1200;
local radius = 65;
local base100Angle = obj.getVar("custom").get_vector(0) * 100;
local baseX = obj.getVar("custom").get_vector(1);
local baseY = obj.getVar("custom").get_vector(2);
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 = radius * 0.5;
local upMovLen = radius * sq_SinTable(angle.tointeger()) * axisMagnifyRate / 100;
local mov_y = baseY + upMovLen.tointeger();
sq_setCurrentAxisPos(obj, 0, mov_x);
sq_setCurrentAxisPos(obj, 1, mov_y);
break;
case 18:
switch(state){
case 21:
local pAni = obj.getCurrentAnimation();
local currentT = sq_GetCurrentTime(pAni);
local fireT = 300;
local speed_rate = obj.getVar("custom").get_vector(1);
if(speed_rate > 0) fireT = fireT * (1000 - speed_rate) / 1000;
local srcX = obj.getVar("custom").get_vector(3);
local srcZ = obj.getVar("custom").get_vector(4);
local MoveX = obj.getVar("custom").get_vector(2);
local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT);
local vz = sq_GetUniformVelocity(srcZ, 0, currentT, fireT);
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);
sq_setCurrentAxisPos(obj, 0, dstX);
sq_setCurrentAxisPos(obj, 2, vz);
if(currentT > fireT) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
break;
case 23:
if(!sqrChr) sq_SendDestroyPacketPassiveObject(obj);
local pAni = obj.getCurrentAnimation();
local currentT = sq_GetCurrentTime(pAni);
local fireT = 400;
local speed_rate = obj.getVar("custom").get_vector(1);
if(speed_rate > 0) fireT = fireT * (1000 - speed_rate) / 1000;
if(sq_GetDistanceObject(obj, sqrChr, false) < 20){
obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, "");
}
local srcZ = obj.getVar("custom").get_vector(4);
local X1 = sq_GetAccel(obj.getXPos(), sqrChr.getXPos(), currentT, fireT, true);
local Y1 = sq_GetAccel(obj.getYPos(), sqrChr.getYPos(), currentT, fireT, true);
local vz = sq_GetAccel(0, srcZ * 2, currentT, fireT, true);
sq_setCurrentAxisPos(obj, 0, X1);
sq_setCurrentAxisPos(obj, 1, Y1);
sq_setCurrentAxisPos(obj, 2, vz);
break;
}
break;
}
break;
case ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN://元素之幕
break;
case ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL://元素奧義
break;
case ELEMENTALMASTER_SKILL_ELEMENTALQUAKE://元素震蕩
break;
case ELEMENTALMASTER_SKILL_ELEMENTALSHOWER://隕星幻滅
break;
case ELEMENTALMASTER_SKILL_FLAMESTRIKE://烈焰沖擊
break;
case ELEMENTALMASTER_SKILL_HALLOWEENBUSTER://傑克降臨
break;
case ELEMENTALMASTER_SKILL_MIGHTYRUNE://聖靈符文
break;
case ELEMENTALMASTER_SKILL_SESTOELEMENTO://第六元素
break;
case ELEMENTALMASTER_SKILL_SUNBURST://雷旋
break;
case ELEMENTALMASTER_SKILL_THEGATE://元素之門
switch(subtype){
case 1:
switch(state){
case 20:
case 21:
local targetObj = obj.getVar().get_obj_vector(0);
if(!targetObj || targetObj.getState() == STATE_DIE) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
break;
}
break;
case 2:
local pAni = obj.getCurrentAnimation();
local currentT = sq_GetCurrentTime(pAni);
local fireT = pAni.getDelaySum(false);
local srcZ = obj.getVar("custom").get_vector(0);
local v = sq_GetUniformVelocity(srcZ, 0, currentT, fireT);
sq_setCurrentAxisPos(obj, 2, v);
break;
}
break;
case ELEMENTALMASTER_SKILL_THUNDERCALLING://天雷
break;
case ELEMENTALMASTER_SKILL_THUNDERRAGE://光與暗的交響
break;
case ELEMENTALMASTER_SKILL_VOID://虛無之球
break;
case ELEMENTALMASTER_SKILL_WALLOFICE://冰牆
break;
case 38://移動施法
break;
}
}