Rindro-Sqr/user/116.205.165.25/test2.nut

2680 lines
107 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}
function proc_appendage_elementalquake_bykk(appendage)
{
local sourceObj = appendage.getSource();
if(!sourceObj){
appendage.setValid(false);
return;
}
}
function checkExecutableSkill_Arcticpiste_bykk(obj)
{
// print("test Arcticpiste");
return 1;
}
function onSetState_Arcticpiste_bykk(obj, state, datas, isResetTimer)
{
}
function onEndCurrentAni_Arcticpiste_bykk(obj)
{
}
function onProcCon_Arcticpiste_bykk(obj)
{
}
function onKeyFrameFlag_Arcticpiste_bykk(obj, flagIndex)
{
}
function onTimeEvent_Arcticpiste_bykk(obj, timeEventIndex, timeEventCount)
{
}
function onEndState_Arcticpiste_bykk(obj, new_state)
{
}
function checkExecutableSkill_BlackHole_bykk(obj)
{
// print("test BlackHole");
return 1;
}
function onSetState_BlackHole_bykk(obj, state, datas, isResetTimer)
{
}
function onEndCurrentAni_BlackHole_bykk(obj)
{
}
function onProcCon_BlackHole_bykk(obj)
{
}
function onKeyFrameFlag_BlackHole_bykk(obj, flagIndex)
{
}
function onTimeEvent_BlackHole_bykk(obj, timeEventIndex, timeEventCount)
{
}
function onEndState_BlackHole_bykk(obj, new_state)
{
}
function checkExecutableSkill_Crystalofovermind_bykk(obj)
{
// print("test Crystalofovermind");
local istalisman = obj.getVar("crystal_talisman").getInt(0);
if(istalisman > 0){
local crystalObj = obj.getVar("crystal").get_obj_vector(0);
if(crystalObj){
local colObj = sq_GetCNRDObjectToCollisionObject(crystalObj);
local state = colObj.getState();
if(state <= 23){
local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND);
local totalDamage = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND, 0, skill_level);
switch(state){
case 20: totalDamage = totalDamage * 80 / 100; break;
case 21: totalDamage = totalDamage * 90 / 100; break;
case 22: totalDamage = totalDamage * 100 / 100; break;
case 23: totalDamage = totalDamage * 125 / 100; break;
}
colObj.getVar("custom").setInt(2,totalDamage);
colObj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, "");
obj.getVar("crystal_talisman").setInt(0,0);
}
}
}
local b_useskill = obj.sq_IsUseSkill(ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND);
if(b_useskill){
obj.sq_IsEnterSkillLastKeyUnits(ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND, STATE_PRIORITY_USER, true);
return 1;
}
return 0;
}
function onSetState_Crystalofovermind_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
obj.sq_StopMove();
local substate = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(substate);
switch(substate){
case 0:
local Ani = obj.sq_GetThrowChargeAni(1);
obj.setCurrentAnimation(Ani);
local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND);
local castTime = sq_GetCastTime(obj, ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND, skill_level);
if(castTime > 1000){local pAni = obj.getCurrentAnimation();sq_SetFrameDelayTime(pAni, 1, castTime);}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local pAni = obj.getCurrentAnimation();
local delaySum = pAni.getDelaySum(false);
sq_StartDrawCastGauge(obj, delaySum, true);
obj.getVar("crystal").setInt(1,delaySum);
//音效
if(sq_getRandom(1,100) > 50) obj.sq_PlaySound("WZ_CRYSTALOVERMIND_01_1");
else obj.sq_PlaySound("WZ_CRYSTALOVERMIND_01_2");
//设置效果
sq_SetBodyEffect(obj, obj, true, sq_RGB(255, 255, 255), 100, 200, 999000, sq_ALPHA(100));
//蓄气时钟开启
obj.getVar("Crystalofovermind").clear_ct_vector();
obj.getVar("Crystalofovermind").push_ct_vector();
local timer = obj.getVar("Crystalofovermind").get_ct_vector(0);
timer.Reset();
timer.Start(10000,0);
//获取蓄气上限
local energycharge_Max = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND, 3);
local minus_Rate = 0,minus_Rate2 = 0,minus_Rate3 = 0;
local memorize_level = sq_GetSkillLevel(obj, 19);
if(memorize_level > 0){
minus_Rate = sq_GetLevelData(obj, 19, 1, memorize_level);
}
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut")){
local magicaltempoup_level = sq_GetSkillLevel(obj, 2);
minus_Rate3 = sq_GetLevelData(obj, 2, 3, magicaltempoup_level);
}
local minus_Rate4 = 1000 - minus_Rate - minus_Rate3;
local fullcharge = 0;
if(minus_Rate4 > 0) energycharge_Max = energycharge_Max * minus_Rate4 / 1000;
else fullcharge = 1;
obj.getVar("moveoncast").setInt(2,energycharge_Max);
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,80,obj.getDirection(),38,1,energycharge_Max,4,fullcharge,0,0,0,0,0,0,0);
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_ELEMENTALMASTER_ELEMENTALQUAKE_CASTINGLOOPA_BODY);
sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/elementalmaster_bykk/crystalofovermind/crystalofovermind_summon_body_front.ani",0,0,0);
sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/elementalmaster_bykk/crystalofovermind/crystalofovermind_side_front_start01.ani",250,0,0);
obj.stopSound(18);
//设置效果
sq_SetBodyEffect(obj, obj, true, sq_RGB(255, 255, 255), 100, 100, 0, sq_ALPHA(100));
//声音
if(sq_getRandom(1,100) > 50) obj.sq_PlaySound("WZ_CRYSTALOVERMIND_02_1");
else obj.sq_PlaySound("WZ_CRYSTALOVERMIND_02_2");
local charge_obj = obj.getVar("moveoncast").get_obj_vector(0);
if(charge_obj) charge_obj.setValid(false);
local timer = obj.getVar("Crystalofovermind").get_ct_vector(0);
local currentT = 0;
if(timer) currentT = timer.Get();
local energycharge_Max = obj.getVar("moveoncast").getInt(2);
local xiuzheng = 1;
if(currentT > energycharge_Max) xiuzheng = 0;
sq_BinaryStartWrite();
sq_BinaryWriteDword(1);
sq_BinaryWriteDword(1);
sq_BinaryWriteDword(1);
sq_BinaryWriteDword(1);
sq_SendChangeSkillEffectPacket(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN);
local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND);
local totalDamage = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND, 0, skill_level);
local sizeRate = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND, 3 - xiuzheng);
local istalisman = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND, 9);
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,300,0,0,obj.getDirection(),ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND,1,totalDamage,sizeRate,istalisman,0,0,0,0,0,1,0);
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,300,0,0,obj.getDirection(),ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND,2,sizeRate,0,0,0,0,0,0,0,0,0);
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,300,0,0,obj.getDirection(),ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND,3,sizeRate,0,0,0,0,0,0,0,0,0);
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,300,0,0,obj.getDirection(),ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND,4,sizeRate,0,0,0,0,0,0,0,0,0);
obj.getVar("crystal_talisman").setInt(0,istalisman);
elementalmaster_setelementSkillBonusRate(obj, ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND);
break;
}
}
function onEndCurrentAni_Crystalofovermind_bykk(obj)
{
if(!obj) return;
if(!obj.sq_IsMyControlObject()) return;
local substate = obj.getSkillSubState();
switch(substate){
case 1:
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
}
}
function onProcCon_Crystalofovermind_bykk(obj)
{
local substate = obj.getSkillSubState();
switch(substate){
case 0:
local stateTime = obj.sq_GetStateTimer();
if(stateTime < obj.getVar("crystal").getInt(1)) return;
local bDownKey = obj.isDownSkillLastKey();
if(!bDownKey){
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND, STATE_PRIORITY_USER, true);
}
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
//移动施法技能大于0时获取人物身上移动施法APpush技能子状态及技能编号等
if(sq_GetSkillLevel(obj, 38) > 0){
local mocAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_moveoncast.nut");
if(mocAppendage){
mocAppendage.getVar().setInt(1, ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND);
mocAppendage.getVar().setBool(0, true);
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
}
}
break;
}
}
function onKeyFrameFlag_Crystalofovermind_bykk(obj, flagIndex)
{
}
function onTimeEvent_Crystalofovermind_bykk(obj, timeEventIndex, timeEventCount)
{
}
function onEndState_Crystalofovermind_bykk(obj, new_state)
{
if(!obj) return;
if(new_state != ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN){
sq_EndDrawCastGauge(obj);
}
if(new_state == STATE_DIE || new_state == STATE_DAMAGE || new_state == STATE_DOWN || new_state == STATE_HOLD){
if(sq_GetSkillLevel(obj, 38) > 0){
local mocAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_moveoncast.nut");
if(mocAppendage) mocAppendage.getVar().setBool(0, false);
}
}
}
function checkExecutableSkill_ElementalChain_bykk(obj)
{
return 0;
}
function onSetState_ElementalChain_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
obj.sq_StopMove();
local substate = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(substate);
switch(substate){
case 0:
local Ani = obj.sq_GetThrowChargeAni(3);
obj.setCurrentAnimation(Ani);
local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN);
local castTime = sq_GetCastTime(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN, skill_level);
if(castTime > 800){local pAni = obj.getCurrentAnimation();sq_SetFrameDelayTime(pAni, 1, castTime);}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local pAni = obj.getCurrentAnimation();
local delaySum = pAni.getDelaySum(false);
sq_StartDrawCastGauge(obj, castTime, true);
break;
case 1:
local Ani = obj.sq_GetThrowShootAni(3);
obj.setCurrentAnimation(Ani);
createOnlyDrawObject_elementalmaster_bykk(obj,"character/mage/effect/animation/elementalmaster_bykk/elementalchain/start.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj) + 40,ENUM_DRAWLAYER_NORMAL);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_elementalchain.nut"))
CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_elementalchain.nut");
local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN, false, "character/mage/elementalmaster_bykk/ap/ap_elementalchain.nut", true);
break;
case 10:
case 20:
case 30:
case 40:
local skillIndex = obj.sq_GetVectorData(datas, 1);
local sub = obj.sq_GetVectorData(datas, 2);
local Ani = obj.sq_GetThrowChargeAni(sub);
obj.setCurrentAnimation(Ani);
obj.getVar("moveoncast").setInt(0,skillIndex);
obj.getVar("moveoncast").setInt(1,sub);
//移動施法技能大于0時獲取人物身上移動施法APpush技能子狀態及技能編號等
if(sq_GetSkillLevel(obj, 38) > 0){
obj.sq_IsEnterSkillLastKeyUnits(skillIndex);
local mocAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_moveoncast.nut");
if(mocAppendage){
mocAppendage.getVar().setInt(3, obj.sq_GetVectorData(datas, 0));
mocAppendage.getVar().setInt(1, skillIndex);
mocAppendage.getVar().setInt(2, sub);
mocAppendage.getVar().setBool(0, true);
}
}
if(skillIndex == 31) obj.getVar("sunburst_bool").setBool(0, false);
//蓄氣時鍾開啓
obj.getVar("ElementalChain").clear_ct_vector();
obj.getVar("ElementalChain").push_ct_vector();
local timer = obj.getVar("ElementalChain").get_ct_vector(0);
timer.Reset();
timer.Start(10000,0);
//設置效果
sq_SetBodyEffect(obj, obj, true, sq_RGB(255, 255, 255), 100, 200, 999000, sq_ALPHA(100));
//獲取蓄氣上限
local energycharge_Max = 0;
switch(skillIndex){
case 15: energycharge_Max = sq_GetIntData(obj, skillIndex, 1); break;//傑克爆彈
case 16: energycharge_Max = sq_GetIntData(obj, skillIndex, 5); break;//冰霜雪人
case 17: energycharge_Max = sq_GetIntData(obj, skillIndex, 2); break;//光電鳗
case 18: energycharge_Max = sq_GetIntData(obj, skillIndex, 1); break;//暗影夜貓
case 26: energycharge_Max = sq_GetIntData(obj, skillIndex, 2); break;//虛無之球
case 27: energycharge_Max = sq_GetIntData(obj, skillIndex, 2); break;//傑克降臨
case 31: energycharge_Max = sq_GetIntData(obj, skillIndex, 0); break;//雷旋
case 58: energycharge_Max = sq_GetIntData(obj, skillIndex, 0); break;//黑洞
case 59: energycharge_Max = sq_GetIntData(obj, skillIndex, 3); break;//極冰盛宴
}
local minus_Rate = 0,minus_Rate2 = 0,minus_Rate3 = 0;
local memorize_level = sq_GetSkillLevel(obj, 19);
if(memorize_level > 0){
minus_Rate = sq_GetLevelData(obj, 19, 1, memorize_level);
minus_Rate2 = sq_GetLevelData(obj, 19, 2, memorize_level);
}
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut")){
local magicaltempoup_level = sq_GetSkillLevel(obj, 2);
minus_Rate3 = sq_GetLevelData(obj, 2, 3, magicaltempoup_level);
}
local minus_Rate4 = 1000 - minus_Rate - minus_Rate3;
local minus_Rate5 = 1000 - minus_Rate - minus_Rate2 - minus_Rate3;
local fullcharge = 0;
if(minus_Rate5 > 0 && skillIndex <= 20) energycharge_Max = energycharge_Max * minus_Rate5 / 1000;
else if(minus_Rate5 < 0 && skillIndex <= 20){energycharge_Max = 0;fullcharge = 1;}
else if(minus_Rate4 > 0) energycharge_Max = energycharge_Max * minus_Rate4 / 1000;
else fullcharge = 1;
obj.getVar("moveoncast").setInt(2,energycharge_Max);
if(skillIndex > 20 && sq_GetSkillLevel(obj,ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL) > 0){
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,80,obj.getDirection(),38,1,energycharge_Max,4,fullcharge,0,0,0,0,0,0,0);
return;
}
switch(skillIndex){
case 15:
case 27:
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,80,obj.getDirection(),38,1,energycharge_Max,0,fullcharge,0,0,0,0,0,0,0);
break;
case 16:
case 59:
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,80,obj.getDirection(),38,1,energycharge_Max,1,fullcharge,0,0,0,0,0,0,0);
break;
case 26:
case 18:
case 58:
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,80,obj.getDirection(),38,1,energycharge_Max,2,fullcharge,0,0,0,0,0,0,0);
break;
case 17:
case 31:
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,80,obj.getDirection(),38,1,energycharge_Max,3,fullcharge,0,0,0,0,0,0,0);
if(skillIndex == 31){
local aniPath = ["character/mage/effect/animation/sunburstcast1.ani","character/mage/effect/animation/sunburstcast2.ani","character/mage/effect/animation/sunburstcast3.ani","character/mage/effect/animation/sunburstfloor1.ani","character/mage/effect/animation/sunburstfloor2.ani"];
local drawlayer = [ENUM_DRAWLAYER_NORMAL,ENUM_DRAWLAYER_NORMAL,ENUM_DRAWLAYER_NORMAL,ENUM_DRAWLAYER_BOTTOM,ENUM_DRAWLAYER_BOTTOM];
for(local i = 0; i < aniPath.len(); i++){
createOnlyDrawObject_elementalmaster_bykk(obj,aniPath[i],true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj),drawlayer[i]);
}
}
break;
}
break;
case 11:
case 21:
case 31:
case 41:
local skillIndex = obj.sq_GetVectorData(datas, 1);
obj.getVar("skillIndex").setInt(100, skillIndex);
local sub = obj.sq_GetVectorData(datas, 2);
local Ani = obj.sq_GetThrowShootAni(sub);
obj.setCurrentAnimation(Ani);
obj.stopSound(18);
//設置效果
sq_SetBodyEffect(obj, obj, true, sq_RGB(255, 255, 255), 100, 100, 0, sq_ALPHA(100));
//聲音
switch(skillIndex){
case 26: obj.sq_PlaySound("WZ_VOID"); break;
case 31: obj.sq_PlaySound("WZ_SUNBURST"); break;
case 15: obj.sq_PlaySound("WZ_LANTERN_FIRE"); break;
case 16: obj.sq_PlaySound("WZ_FROSTHEAD"); break;
case 17: obj.sq_PlaySound("WZ_FLUORE"); break;
case 18: obj.sq_PlaySound("WZ_LAUNCH_PLUTO"); break;
case 27: obj.sq_PlaySound("R_WZ_SHOOTING_STAR"); break;
case 58: obj.sq_PlaySound("WZ_NIGHTH_02"); break;
case 59: obj.sq_PlaySound("WZ_MAGIC_MISSILE"); break;
}
local timer = obj.getVar("ElementalChain").get_ct_vector(0);
local currentT = 0;
if(timer) currentT = timer.Get();
local energycharge_Max = obj.getVar("moveoncast").getInt(2);
obj.getVar("ElementalChain").clear_ct_vector();
local skill_level = sq_GetSkillLevel(obj, skillIndex);
local Mightyrune_T =
{//light,ice,fire,dark
[15] = [0,0,1,0],
[16] = [0,1,0,0],
[18] = [0,0,0,1],
[17] = [1,0,0,0],
[26] = [0,0,0,1],
[31] = [1,0,0,0],
[27] = [0,0,1,0],
[59] = [0,1,0,0],
[55] = [1,0,0,0],
[58] = [0,0,0,1]
}
if(Mightyrune_T.rawin(skillIndex)){
sq_BinaryStartWrite();
foreach(elsement in Mightyrune_T[skillIndex]){
sq_BinaryWriteDword(elsement);
}
sq_SendChangeSkillEffectPacket(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN);
}
local charge_obj = obj.getVar("moveoncast").get_obj_vector(0);
if(charge_obj) charge_obj.setValid(false);
local xiuzheng = 1;
if(currentT > energycharge_Max) xiuzheng = 0;
switch(skillIndex){//滿蓄力
case 15://傑克爆彈
local totalDamage = sq_GetLevelData(obj, skillIndex, 1 - xiuzheng, skill_level);
local powerDamage = sq_GetLevelData(obj, skillIndex, 9 - xiuzheng, skill_level);
local nurmal_rate = sq_GetLevelData(obj, skillIndex, 5 - xiuzheng, skill_level) * 130 /100;
local exp_rate = sq_GetLevelData(obj, skillIndex, 7 - xiuzheng, skill_level) * 130 /100;
local shoot_range = sq_GetLevelData(obj, skillIndex, 3 - xiuzheng, skill_level);
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,75,0,50,obj.getDirection(),ELEMENTALMASTER_SKILL_ELEMENTALCHAIN,15,totalDamage,powerDamage,nurmal_rate,exp_rate,shoot_range,0,0,0,1,2);
break;
case 16://冰霜雪人
local totalDamage = sq_GetLevelData(obj, skillIndex, 1 - xiuzheng, skill_level);
local powerDamage = sq_GetLevelData(obj, skillIndex, 15 - xiuzheng, skill_level);
local nurmal_rate = sq_GetLevelData(obj, skillIndex, 6 - xiuzheng, skill_level) * 150 /100;
local lifeTime = sq_GetLevelData(obj, skillIndex, 3 - xiuzheng, skill_level);
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,50,0,80,obj.getDirection(),ELEMENTALMASTER_SKILL_ELEMENTALCHAIN,16,totalDamage,powerDamage,nurmal_rate,lifeTime,0,0,0,0,1,2);
local size = sq_GetLevelData(obj, skillIndex, 20, skill_level);
if(size > 0){
for(local i = 0; i < size; i++){
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,50,0,80 + 10 * (i + 1),obj.getDirection(),ELEMENTALMASTER_SKILL_ELEMENTALCHAIN,16,totalDamage,powerDamage,nurmal_rate,lifeTime,0,0,0,0,1,2);
}
}
break;
case 17://光電鳗
local number = sq_GetIntData(obj, skillIndex, 1);
local totalDamage = sq_GetLevelData(obj, skillIndex, 1 - xiuzheng, skill_level);
local powerDamage = sq_GetLevelData(obj, skillIndex, 7 - xiuzheng, skill_level);
local nurmal_rate = sq_GetLevelData(obj, skillIndex, 5 - xiuzheng, skill_level) * 150 /100;
local lifeTime = sq_GetLevelData(obj, skillIndex, 3 - xiuzheng, skill_level);
for(local i = 0; i < number; i++){
local angle = 360 / number * i;
local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 65.0).tointeger();
local y = (sq_Sin(sq_ToRadian(angle.tofloat())) * 65.0).tointeger();
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,x,y,40,obj.getDirection(),ELEMENTALMASTER_SKILL_ELEMENTALCHAIN,17,totalDamage,powerDamage,nurmal_rate,lifeTime,angle,sq_GetXPos(obj),sq_GetYPos(obj),0,1,2);
}
break;
case 18://暗影夜貓
local totalDamage = sq_GetLevelData(obj, skillIndex, 1 - xiuzheng, skill_level);
local powerDamage = sq_GetLevelData(obj, skillIndex, 9 - xiuzheng, skill_level);
local sizeRate = sq_GetLevelData(obj, skillIndex, 7 - xiuzheng, skill_level) * 130 /100;
local speed_rate = sq_GetLevelData(obj, skillIndex, 3 - xiuzheng, skill_level);
local shoot_range = sq_GetLevelData(obj, skillIndex, 5 - xiuzheng, skill_level);
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,75,0,50,obj.getDirection(),ELEMENTALMASTER_SKILL_ELEMENTALCHAIN,18,totalDamage,powerDamage,sizeRate,speed_rate,shoot_range,0,0,0,1,2);
break;
case 26://虛無之球
local totalDamage = sq_GetLevelData(obj, skillIndex, 1 - xiuzheng, skill_level);
local sizeRate = sq_GetIntData(obj, skillIndex, 7 - xiuzheng) * 230 / 100;
if(sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_VOIDEX) > 0){
local prob = 100 - sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_VOIDEX) * 8 - sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_VOID, 9, sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_VOID));
if(sq_getRandom(1, 100) > prob) sizeRate = sizeRate * 250 / 100;
}
local shoot_range = sq_GetLevelData(obj, skillIndex, 3 - xiuzheng, skill_level) / 20;
local hittime = sq_GetIntData(obj, skillIndex, 1);
if(sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ASSIMILATE) > 0){
hittime = hittime / 2;
local timeMax = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ASSIMILATE, 2);
local damageRate = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ASSIMILATE, 4);
local damageRate2 = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ASSIMILATE, 5);
local isExp = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ASSIMILATE, 16);
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,120,0,60,obj.getDirection(),ELEMENTALMASTER_SKILL_VOID,2,totalDamage,hittime,timeMax,damageRate,damageRate2,sizeRate,isExp,0,1,0);
}
else cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,75,0,50,obj.getDirection(),ELEMENTALMASTER_SKILL_VOID,1,totalDamage,sizeRate,shoot_range,hittime,0,0,0,0,1,0);
break;
case 27://傑克降臨
local sub = sq_GetIntData(obj, skillIndex, 6);
local totalDamage = sq_GetLevelData(obj, skillIndex, 1 - xiuzheng, skill_level);
local totalDamage2 = sq_GetLevelData(obj, skillIndex, 3 - xiuzheng, skill_level);
local sizeRate = sq_GetLevelData(obj, skillIndex, 7 - xiuzheng, skill_level) * 110 / 100;
local sizeRate2 = sq_GetLevelData(obj, skillIndex, 5 - xiuzheng, skill_level) * 110 / 100;
local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger();
local number = sq_GetIntData(obj, skillIndex, 3) + 1;
local x = 150, y = 0, z = 0, targetObj = obj;
if(sq_GetIntData(obj, ELEMENTALMASTER_SKILL_HALLOWEENBUSTER, 4) > 0){
local bhObj = obj.getVar("blackhole").get_obj_vector(0);
if(bhObj){x = 0; y = 0;targetObj = bhObj;}
else{
local totalDamage = 100;
local totalDamage2 = 100;
local sizeRate = 40;
local lifeTime = 1200;
local attractPower = 600;
local range = 400;
local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger();
local hitTime = 2000;
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,x,y,80,obj.getDirection(),ELEMENTALMASTER_SKILL_BLACKHOLE,1,totalDamage,sizeRate,lifeTime,damageRate,attractPower,range,0,hitTime,0,0);
}
}
if(sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL) > 0 && !sq_GetSkill(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL).isSealFunction()){
local elementalpotential_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL);
local add_sizeRate = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 8);
// local add_damageRate = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 13, elementalpotential_level);
// totalDamage = totalDamage * (1000 + add_damageRate) / 1000;
sizeRate = sizeRate * (100 + add_sizeRate) / 100;
sizeRate2 = sizeRate2 * (100 + add_sizeRate) / 100;
cearteSkillPassive_Elementalmaster_bykk(obj,targetObj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,x,y,z,obj.getDirection(),ELEMENTALMASTER_SKILL_HALLOWEENBUSTER,0,totalDamage,sizeRate,sizeRate2,damageRate,sub,2,number,0,1,0);
}
else{
cearteSkillPassive_Elementalmaster_bykk(obj,targetObj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,x,y,z,obj.getDirection(),ELEMENTALMASTER_SKILL_HALLOWEENBUSTER,0,totalDamage,sizeRate,sizeRate2,damageRate,sub,1,number,0,1,0);
}
break;
case 31://雷旋
local totalDamage = sq_GetLevelData(obj, skillIndex, 1 - xiuzheng, skill_level);
local sizeRate = sq_GetIntData(obj, skillIndex, 2 - xiuzheng) * 230 /100;
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,50,obj.getDirection(),ELEMENTALMASTER_SKILL_SUNBURST,1,totalDamage,sizeRate,0,0,0,0,0,0,1,0);
local aniPath = ["passiveobject/elementalmaster_bykk/animation/sunburst/sunburstlayer2.ani","passiveobject/elementalmaster_bykk/animation/sunburst/sunburstlayer1.ani"];
local offset_y = [1,-1];
sizeRate = sizeRate.tofloat() / 100.0;
for(local i = 0; i < aniPath.len(); i++){
local pooledObj = sq_AddDrawOnlyAniFromParent(obj,aniPath[i],0,offset_y[i],50 + offset_y[i]);
local pAni = pooledObj.getCurrentAnimation();
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
}
break;
case 58://黑洞
local size = obj.getVar("blackhole").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local bhObj = obj.getVar("blackhole").get_obj_vector(i);
if(bhObj){
local colObj = sq_GetCNRDObjectToCollisionObject(bhObj);
colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
}
}
}
local sub = sq_GetIntData(obj, skillIndex, 6);
local totalDamage = sq_GetLevelData(obj, skillIndex, 7 - xiuzheng, skill_level);
local totalDamage2 = sq_GetLevelData(obj, skillIndex, 9 - xiuzheng, skill_level);
local sizeRate = 100 + sq_GetIntData(obj, skillIndex, 5);
local lifeTime = sq_GetLevelData(obj, skillIndex, 5 - xiuzheng, skill_level);
local attractPower = sq_GetLevelData(obj, skillIndex, 1 - xiuzheng, skill_level);
local range = sq_GetIntData(obj, skillIndex, 2 + xiuzheng);
local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger();
local hitTime = 300;
if(sub > 0){
lifeTime = lifeTime / 2;
hitTime = hitTime / 3;
}
if(sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL) > 0 && !sq_GetSkill(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL).isSealFunction()){
local elementalpotential_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL);
local add_sizeRate = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 0);
local minus_Rate = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 2);
// local add_damageRate = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 14, elementalpotential_level);
// totalDamage = totalDamage * (1000 + add_damageRate) / 1000;
sizeRate = sizeRate * (100 + add_sizeRate) / 100;
hitTime = hitTime * (100 - minus_Rate) / 100;
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,150,0,120,obj.getDirection(),ELEMENTALMASTER_SKILL_BLACKHOLE,2,totalDamage,sizeRate,lifeTime,damageRate,attractPower,range,sub,hitTime,1,0);
}
else{
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,150,0,100,obj.getDirection(),ELEMENTALMASTER_SKILL_BLACKHOLE,1,totalDamage,sizeRate,lifeTime,damageRate,attractPower,range,sub,hitTime,1,0);
}
break;
case 59://極冰盛宴
local totalDamage = sq_GetLevelData(obj, skillIndex, 1 - xiuzheng, skill_level);
local sizeRate = sq_GetLevelData(obj, skillIndex, 9 - xiuzheng, skill_level) * 160 / 100;
local hitMax = sq_GetIntData(obj, skillIndex, 5);
local hitTime = sq_GetIntData(obj, skillIndex, 2 - xiuzheng);
local offset_x = sq_GetIntData(obj, skillIndex, 4);
local speedRate = 30000 / sq_GetIntData(obj, skillIndex, 0);
if(sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL) > 0 && !sq_GetSkill(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL).isSealFunction()){
local elementalpotential_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL);
local speed_rate = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 2);
hitMax = hitMax + sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 16, elementalpotential_level);
// local add_damageRate = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 15, elementalpotential_level);
// totalDamage = totalDamage * (1000 + add_damageRate) / 1000;
hitTime = hitTime * (100 - speed_rate) / 100;
local sub = 0;
local isBig = sq_GetLevelData(obj, skillIndex, 11, skill_level);
if(isBig > 0){sub = 2;offset_x = offset_x - 150;}
else if(sq_GetLevelData(obj, skillIndex, 10, skill_level) > 0) sub = 1;
if(sub == 2) cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,offset_x,0,0,obj.getDirection(),ELEMENTALMASTER_SKILL_ARCTICPISTE,4,totalDamage * hitMax,sizeRate * 15 / 10, speedRate, isBig,0,0,0,0,1,0);
else cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,offset_x,0,0,obj.getDirection(),ELEMENTALMASTER_SKILL_ARCTICPISTE,2,totalDamage,sizeRate,hitMax,hitTime,speedRate,sub,0,0,1,0);
obj.setTimeEvent(100,50,1,false);
}
else{
local sub = 0;
local isBig = sq_GetLevelData(obj, skillIndex, 11, skill_level);
if(isBig > 0){sub = 2;offset_x = offset_x - 150;}
else if(sq_GetLevelData(obj, skillIndex, 10, skill_level) > 0) sub = 1;
if(sub == 2) cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,offset_x,0,0,obj.getDirection(),ELEMENTALMASTER_SKILL_ARCTICPISTE,3,totalDamage * hitMax,sizeRate * 15 / 10, speedRate, isBig,0,0,0,0,1,0);
else cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,offset_x,0,0,obj.getDirection(),ELEMENTALMASTER_SKILL_ARCTICPISTE,1,totalDamage,sizeRate,hitMax,hitTime,speedRate,sub,0,0,1,0);
}
break;
}
elementalmaster_setelementSkillBonusRate(obj, skillIndex);
break;
}
}
function onEndCurrentAni_ElementalChain_bykk(obj)
{
if(!obj) return;
if(!obj.sq_IsMyControlObject()) return;
local substate = obj.getSkillSubState();
switch(substate){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(ELEMENTALMASTER_STATE_ELEMENTALCHAIN, STATE_PRIORITY_USER, true);
break;
case 1:
case 11:
case 21:
case 31:
case 41:
if(obj.getVar("skillIndex").getInt(100) == 31 && sq_GetLevelData(obj, 31, 4, sq_GetSkillLevel(obj, 31)) > 0 && obj.getVar("sunburst_bool").getBool(0) == false){
if(sq_getRandom(1, 99) > 100 - sq_GetLevelData(obj, 31, 4, sq_GetSkillLevel(obj, 31))){
obj.getVar("sunburst_bool").setBool(0, true);
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,50,obj.getDirection(),ELEMENTALMASTER_SKILL_SUNBURST,2,200,0,0,0,0,0,0,0,0,0);
}
}
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
}
}
function onProcCon_ElementalChain_bykk(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
switch(substate){
case 10:
case 20:
case 30:
case 40:
local bDownKey = obj.isDownSkillLastKey();
if(!bDownKey){
local mocAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_moveoncast.nut");
if(mocAppendage) mocAppendage.getVar().setBool(0, false);
obj.sq_IntVectClear();
obj.sq_IntVectPush(substate + 1);
obj.sq_IntVectPush(obj.getVar("moveoncast").getInt(0));
obj.sq_IntVectPush(obj.getVar("moveoncast").getInt(1));
obj.sq_AddSetStatePacket(ELEMENTALMASTER_STATE_ELEMENTALCHAIN, STATE_PRIORITY_USER, true);
}
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
break;
}
}
function onKeyFrameFlag_ElementalChain_bykk(obj, flagIndex)
{}
function onTimeEvent_ElementalChain_bykk(obj, timeEventIndex, timeEventCount)
{
switch(timeEventIndex){
case 100: obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); break;
}
}
function onEndState_ElementalChain_bykk(obj, new_state)
{
if(!obj) return;
if(new_state != ELEMENTALMASTER_SKILL_ELEMENTALCHAIN){
sq_EndDrawCastGauge(obj);
}
if(new_state == STATE_DIE || new_state == STATE_DAMAGE || new_state == STATE_DOWN || new_state == STATE_HOLD){
if(sq_GetSkillLevel(obj, 38) > 0){
local mocAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_moveoncast.nut");
if(mocAppendage) mocAppendage.getVar().setBool(0, false);
}
}
}
function onCreateObject_ElementalChain_bykk(obj, createObject)
{}
function checkExecutableSkill_Elementalcurtain_bykk(obj)
{
//print("test Elementalcurtain");
local b_useskill = obj.sq_IsUseSkill(ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN);
if(b_useskill){
local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN);
obj.startSkillCoolTime(ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN, skill_level, -1);
obj.sq_IsEnterSkillLastKeyUnits(ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN, STATE_PRIORITY_USER, true);
return 1;
}
return 0;
}
function onSetState_Elementalcurtain_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
obj.sq_StopMove();
local substate = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(substate);
switch(substate){
case 0:
obj.sq_SetCurrentAnimation(ANIMATION_ELEMENTALMASTER_ELEMENTALCURTAIN_CAST_BODY);
obj.getVar("moveoncast").setInt(0,ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN);
local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN);
local castTime = sq_GetCastTime(obj, ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN, skill_level);
if(castTime > 1000){local pAni = obj.getCurrentAnimation();sq_SetFrameDelayTime(pAni, 4, castTime);}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local pAni = obj.getCurrentAnimation();
local delaySum = pAni.getDelaySum(false);
sq_StartDrawCastGauge(obj, delaySum, true);
obj.getVar("elementalcurtain").setInt(1,delaySum);
//音效
obj.sq_PlaySound("WZ_ELEMENTALCURTAIN_01_1",18);//WZ_ELEMENTALCURTAIN_01_2
//设置效果
sq_SetBodyEffect(obj, obj, true, sq_RGB(255, 255, 255), 100, 200, 999000, sq_ALPHA(100));
sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/elementalmaster_bykk/elementalcurtain/elementalcurtain_cast_effect.ani",0,0,0);
//蓄气时钟开启
obj.getVar("ElementalChain").clear_ct_vector();
obj.getVar("ElementalChain").push_ct_vector();
local timer = obj.getVar("ElementalChain").get_ct_vector(0);
timer.Reset();
timer.Start(10000,0);
//获取蓄气上限
local energycharge_Max = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN, 4);
local minus_Rate = 0,minus_Rate2 = 0,minus_Rate3 = 0;
local memorize_level = sq_GetSkillLevel(obj, 19);
if(memorize_level > 0){
minus_Rate = sq_GetLevelData(obj, 19, 1, memorize_level);
}
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut")){
local magicaltempoup_level = sq_GetSkillLevel(obj, 2);
minus_Rate3 = sq_GetLevelData(obj, 2, 3, magicaltempoup_level);
}
local minus_Rate4 = 1000 - minus_Rate - minus_Rate3;
local fullcharge = 0;
if(minus_Rate4 > 0) energycharge_Max = energycharge_Max * minus_Rate4 / 1000;
else fullcharge = 1;
obj.getVar("moveoncast").setInt(2,energycharge_Max);
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,80,obj.getDirection(),38,1,energycharge_Max,4,fullcharge,0,0,0,0,0,0,0);
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_ELEMENTALMASTER_ELEMENTALCURTAIN_SHOOT_BODY);
obj.stopSound(18);
//设置效果
sq_SetBodyEffect(obj, obj, true, sq_RGB(255, 255, 255), 100, 100, 0, sq_ALPHA(100));
//声音
obj.sq_PlaySound("WZ_ELEMENTALCURTAIN_02_1");//WZ_ELEMENTALCURTAIN_02_2
local charge_obj = obj.getVar("moveoncast").get_obj_vector(0);
if(charge_obj) charge_obj.setValid(false);
local timer = obj.getVar("ElementalChain").get_ct_vector(0);
local currentT = 0;
if(timer) currentT = timer.Get();
local energycharge_Max = obj.getVar("moveoncast").getInt(2);
local xiuzheng = 1;
if(currentT > energycharge_Max) xiuzheng = 0;
local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN);
local istalisman = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN, 8) + 1;
local totalDamage = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN, 0, skill_level);
local totalDamage2 = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN, 1, skill_level);
local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger();
local sizeRate = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN, 1 - xiuzheng);
local lifeTime = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN, 2);
local hitTime = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN, 3);
local hitMax = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN, 7);
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,300,0,0,obj.getDirection(),ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN,1,totalDamage,sizeRate,lifeTime,damageRate,hitTime,hitMax,istalisman,0,1,0);
if(istalisman > 0) obj.setTimeEvent(2,660,1,false);
sq_BinaryStartWrite();
sq_BinaryWriteDword(1);
sq_BinaryWriteDword(1);
sq_BinaryWriteDword(1);
sq_BinaryWriteDword(1);
sq_SendChangeSkillEffectPacket(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN);
elementalmaster_setelementSkillBonusRate(obj, ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN);
break;
}
}
function onEndCurrentAni_Elementalcurtain_bykk(obj)
{
if(!obj) return;
if(!obj.sq_IsMyControlObject()) return;
local substate = obj.getSkillSubState();
switch(substate){
case 1:
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
}
}
function onProcCon_Elementalcurtain_bykk(obj)
{
local substate = obj.getSkillSubState();
switch(substate){
case 0:
local stateTime = obj.sq_GetStateTimer();
if(stateTime < obj.getVar("elementalcurtain").getInt(1)) return;
local bDownKey = obj.isDownSkillLastKey();
if(!bDownKey){
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN, STATE_PRIORITY_USER, true);
}
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
//移动施法技能大于0时获取人物身上移动施法APpush技能子状态及技能编号等
if(sq_GetSkillLevel(obj, 38) > 0){
local mocAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_moveoncast.nut");
if(mocAppendage){
mocAppendage.getVar().setInt(1, ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN);
mocAppendage.getVar().setBool(0, true);
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
}
}
break;
}
}
function onKeyFrameFlag_Elementalcurtain_bykk(obj, flagIndex)
{
}
function onTimeEvent_Elementalcurtain_bykk(obj, timeEventIndex, timeEventCount)
{
switch(timeEventIndex){
case 1:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN, STATE_PRIORITY_USER, true);
break;
case 2:
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
}
}
function onEndState_Elementalcurtain_bykk(obj, new_state)
{
if(!obj) return;
if(new_state != ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN){
sq_EndDrawCastGauge(obj);
}
if(new_state == STATE_DIE || new_state == STATE_DAMAGE || new_state == STATE_DOWN || new_state == STATE_HOLD){
if(sq_GetSkillLevel(obj, 38) > 0){
local mocAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_moveoncast.nut");
if(mocAppendage) mocAppendage.getVar().setBool(0, false);
}
}
}
function onCreateObject_Elementalcurtain_bykk(obj, createObject)
{
}
function checkExecutableSkill_Elementalquake_bykk(obj)
{
// print("test Elementalquake");
local b_useskill = obj.sq_IsUseSkill(ELEMENTALMASTER_SKILL_ELEMENTALQUAKE);
if(b_useskill){
// local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALQUAKE);
// obj.startSkillCoolTime(ELEMENTALMASTER_SKILL_ELEMENTALQUAKE, skill_level, -1);
obj.sq_IsEnterSkillLastKeyUnits(ELEMENTALMASTER_SKILL_ELEMENTALQUAKE);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_ELEMENTALQUAKE, STATE_PRIORITY_USER, true);
return 1;
}
return 0;
}
function onSetState_Elementalquake_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
obj.sq_StopMove();
local substate = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(substate);
switch(substate){
case 0:
obj.sq_SetCurrentAnimation(ANIMATION_ELEMENTALMASTER_ELEMENTALQUAKE_CASTINGSTART_BODY);
sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/elementalmaster_bykk/elementalquake/castingstart_crack.ani",0,0,0);
sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/elementalmaster_bykk/elementalquake/castingstarteffect_stone.ani",0,0,0);
local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALQUAKE);
local castTime = sq_GetCastTime(obj, ELEMENTALMASTER_SKILL_ELEMENTALQUAKE, skill_level);
if(castTime > 1000){local pAni = obj.getCurrentAnimation();sq_SetFrameDelayTime(pAni, 1, castTime);}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local pAni = obj.getCurrentAnimation();
local delaySum = pAni.getDelaySum(false);
sq_StartDrawCastGauge(obj, delaySum, true);
obj.getVar("elementalquake").setInt(1,delaySum);
//音效
if(sq_getRandom(1,100) > 50) obj.sq_PlaySound("WZ_ELEMENTALQUAKE_01_1");
else obj.sq_PlaySound("WZ_ELEMENTALQUAKE_01_2");
//设置效果
sq_SetBodyEffect(obj, obj, true, sq_RGB(255, 255, 255), 100, 200, 999000, sq_ALPHA(100));
//蓄气时钟开启
obj.getVar("Elementalquake").clear_ct_vector();
obj.getVar("Elementalquake").push_ct_vector();
local timer = obj.getVar("Elementalquake").get_ct_vector(0);
timer.Reset();
timer.Start(10000,0);
//获取蓄气上限
local energycharge_Max = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ELEMENTALQUAKE, 3);
local minus_Rate = 0,minus_Rate2 = 0,minus_Rate3 = 0;
local memorize_level = sq_GetSkillLevel(obj, 19);
if(memorize_level > 0){
minus_Rate = sq_GetLevelData(obj, 19, 1, memorize_level);
}
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut")){
local magicaltempoup_level = sq_GetSkillLevel(obj, 2);
minus_Rate3 = sq_GetLevelData(obj, 2, 3, magicaltempoup_level);
}
local minus_Rate4 = 1000 - minus_Rate - minus_Rate3;
local fullcharge = 0;
if(minus_Rate4 > 0) energycharge_Max = energycharge_Max * minus_Rate4 / 1000;
else fullcharge = 1;
obj.getVar("moveoncast").setInt(2,energycharge_Max);
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,80,obj.getDirection(),38,1,energycharge_Max,4,fullcharge,0,0,0,0,0,0,0);
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_ELEMENTALMASTER_ELEMENTALQUAKE_CASTINGLOOPA_BODY);
obj.stopSound(18);
//设置效果
sq_SetBodyEffect(obj, obj, true, sq_RGB(255, 255, 255), 100, 100, 0, sq_ALPHA(100));
//声音
if(sq_getRandom(1,100) > 50) obj.sq_PlaySound("WZ_ELEMENTALQUAKE_02_1");
else obj.sq_PlaySound("WZ_ELEMENTALQUAKE_02_2");
local charge_obj = obj.getVar("moveoncast").get_obj_vector(0);
if(charge_obj) charge_obj.setValid(false);
local timer = obj.getVar("Elementalquake").get_ct_vector(0);
local currentT = 0;
if(timer) currentT = timer.Get();
local energycharge_Max = obj.getVar("moveoncast").getInt(2);
local xiuzheng = 1;
if(currentT > energycharge_Max) xiuzheng = 0;
sq_BinaryStartWrite();
sq_BinaryWriteDword(1);
sq_BinaryWriteDword(1);
sq_BinaryWriteDword(1);
sq_BinaryWriteDword(1);
sq_SendChangeSkillEffectPacket(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN);
local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALQUAKE);
local totalDamage = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALQUAKE, 0, skill_level);
local totalDamage2 = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALQUAKE, 1, skill_level);
local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger();
local sizeRate = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ELEMENTALQUAKE, 8 - xiuzheng);
local istalisman = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ELEMENTALQUAKE, 9) + 1;
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,300,0,0,obj.getDirection(),ELEMENTALMASTER_SKILL_ELEMENTALQUAKE,1,totalDamage,damageRate,sizeRate,istalisman,0,0,0,0,1,0);
obj.getVar("elementalquake_talisman").setInt(0,istalisman);
elementalmaster_setelementSkillBonusRate(obj, ELEMENTALMASTER_SKILL_ELEMENTALQUAKE);
break;
case 2:
obj.sq_SetCurrentAnimation(ANIMATION_ELEMENTALMASTER_ELEMENTALQUAKE_CASTINGLOOPB_BODY);
if(obj.getVar("elementalquake_talisman").getInt(0) > 0) obj.setTimeEvent(1,500,1,false);
break;
case 3:
obj.sq_SetCurrentAnimation(ANIMATION_ELEMENTALMASTER_ELEMENTALQUAKE_CASTINGEND_BODY);
break;
}
}
function onEndCurrentAni_Elementalquake_bykk(obj)
{
if(!obj) return;
if(!obj.sq_IsMyControlObject()) return;
local substate = obj.getSkillSubState();
switch(substate){
case 0:
// obj.sq_IntVectClear();
// obj.sq_IntVectPush(1);
// obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_ELEMENTALQUAKE, STATE_PRIORITY_USER, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_ELEMENTALQUAKE, STATE_PRIORITY_USER, true);
break;
case 3:
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
}
}
function onProcCon_Elementalquake_bykk(obj)
{
local substate = obj.getSkillSubState();
switch(substate){
case 0:
local stateTime = obj.sq_GetStateTimer();
if(stateTime < obj.getVar("elementalquake").getInt(1)) return;
local bDownKey = obj.isDownSkillLastKey();
if(!bDownKey){
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_ELEMENTALQUAKE, STATE_PRIORITY_USER, true);
}
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
//移动施法技能大于0时获取人物身上移动施法APpush技能子状态及技能编号等
if(sq_GetSkillLevel(obj, 38) > 0){
local mocAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_moveoncast.nut");
if(mocAppendage){
mocAppendage.getVar().setInt(1, ELEMENTALMASTER_SKILL_ELEMENTALQUAKE);
mocAppendage.getVar().setBool(0, true);
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
}
}
break;
}
}
function onKeyFrameFlag_Elementalquake_bykk(obj, flagIndex)
{
}
function onTimeEvent_Elementalquake_bykk(obj, timeEventIndex, timeEventCount)
{
switch(timeEventIndex){
case 1:
obj.sq_IntVectClear();
obj.sq_IntVectPush(3);
obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_ELEMENTALQUAKE, STATE_PRIORITY_USER, true);
break;
}
}
function onEndState_Elementalquake_bykk(obj, new_state)
{
if(!obj) return;
if(new_state != ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN){
sq_EndDrawCastGauge(obj);
}
if(new_state == STATE_DIE || new_state == STATE_DAMAGE || new_state == STATE_DOWN || new_state == STATE_HOLD){
if(sq_GetSkillLevel(obj, 38) > 0){
local mocAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_moveoncast.nut");
if(mocAppendage) mocAppendage.getVar().setBool(0, false);
}
}
}
function checkExecutableSkill_ElementalShower_bykk(obj)
{
//print("test ElementalShower");
local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALSHOWER);
if(sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALSHOWER, 9, skill_level) > 0){
local b_useskill = obj.sq_IsUseSkill(ELEMENTALMASTER_SKILL_ELEMENTALSHOWER);
if(b_useskill){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_ELEMENTALSHOWER, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
}
}
function onSetState_ElementalShower_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
obj.sq_StopMove();
local substate = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(substate);
obj.sq_StopMove();
switch(substate){
case 0:
local Ani = obj.sq_GetThrowChargeAni(2);
obj.setCurrentAnimation(Ani);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
// local currentAni = obj.getCurrentAnimation();
// currentAni.setSpeedRate(80.0);
// local delaySum = currentAni.getDelaySum(false);
// obj.sq_SetXScrollStart(200, delaySum);
//obj.sq_PlaySound("WZ_SHOOTING_STAR_READY", 2000);
break;
case 1:
local Ani = obj.sq_GetThrowShootAni(2);
obj.setCurrentAnimation(Ani);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
// local currentAni = obj.getCurrentAnimation();
// local delaySum = currentAni.getDelaySum(false);
obj.stopSound(2000);
obj.sq_PlaySound("WZ_SHOOTING_STAR");
local skillLevel = sq_GetSkillLevel(obj, 74);
local totalDamage = sq_GetLevelData(obj, 74, 3, skillLevel);
local totalDamage2 = sq_GetLevelData(obj, 74, 4, skillLevel);
local number = sq_GetIntData(obj, 74, 10);
local baseangle = sq_getRandom(0, 90);
for(local i = 0; i < number; i++){
local angle = 360 / number * i + baseangle;
local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 130.0).tointeger();
local y = (sq_Sin(sq_ToRadian(angle.tofloat())) * 65.0).tointeger();
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,225 + x, y, 300, obj.getDirection(),ELEMENTALMASTER_SKILL_ELEMENTALSHOWER,1,totalDamage,totalDamage2,0,0,0,0,0,0,1,0);
}
elementalmaster_setelementSkillBonusRate(obj, ELEMENTALMASTER_SKILL_ELEMENTALSHOWER);
break;
}
}
function onEndCurrentAni_ElementalShower_bykk(obj)
{
if(!obj) return;
if(!obj.sq_IsMyControlObject()) return;
local substate = obj.getSkillSubState();
switch(substate){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_ELEMENTALSHOWER, STATE_PRIORITY_USER, true);
break;
case 1:
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
}
}
function onProcCon_ElementalShower_bykk(obj)
{
}
function onKeyFrameFlag_ElementalShower_bykk(obj, flagIndex)
{
}
function onTimeEvent_ElementalShower_bykk(obj, timeEventIndex, timeEventCount)
{
}
function onEndState_ElementalShower_bykk(obj, new_state)
{
if(!obj) return;
if(new_state != ELEMENTALMASTER_SKILL_ELEMENTALCHAIN){
obj.sq_SetXScrollStop(100);
}
}
function checkExecutableSkill_FlameStrike_bykk(obj)
{
//print("test FlameStrike");
return 0;
}
function onSetState_FlameStrike_bykk(obj, state, datas, isResetTimer)
{
obj.sq_StopMove();
local substate = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(substate);
switch(substate){
case 0:
obj.sq_RemoveAimPointMark();
local Ani = obj.sq_GetThrowChargeAni(1);
obj.setCurrentAnimation(Ani);
sq_StartDrawCastGauge(obj, 200, true);
obj.setTimeEvent(0,100,1,true);
break;
case 1:
obj.sq_RemoveAimPointMark();
local Ani = obj.sq_GetThrowShootAni(1);
obj.setCurrentAnimation(Ani);
local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_FLAMESTRIKE);
local totalDamage = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_FLAMESTRIKE, 0, skill_level);
local sizeRate = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_FLAMESTRIKE, 5) * 125 /100;
local etcTime = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_FLAMESTRIKE, 3, skill_level);
local aimPosX = obj.sq_GetVectorData(datas, 1) - sq_GetXPos(obj);
local aimPosY = obj.sq_GetVectorData(datas, 2) - sq_GetYPos(obj);
if(sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ASSIMILATE) > 0){
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,aimPosX.tointeger(),aimPosY.tointeger(),0,ENUM_DIRECTION_RIGHT,ELEMENTALMASTER_SKILL_FLAMESTRIKE,2,totalDamage,sizeRate,etcTime,0,0,0,0,0,1,0);
}
else{
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,aimPosX.tointeger(),aimPosY.tointeger(),0,ENUM_DIRECTION_RIGHT,ELEMENTALMASTER_SKILL_FLAMESTRIKE,1,totalDamage,sizeRate,0,0,0,0,0,0,1,0);}
// [56] = [0,1,0,0],
sq_BinaryStartWrite();
sq_BinaryWriteDword(0);
sq_BinaryWriteDword(0);
sq_BinaryWriteDword(1);
sq_BinaryWriteDword(0);
sq_SendChangeSkillEffectPacket(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN);
break;
}
}
function onEndCurrentAni_FlameStrike_bykk(obj)
{
if(!obj) return;
if(!obj.sq_IsMyControlObject()) return;
local substate = obj.getSkillSubState();
switch(substate){
case 0:
// obj.sq_IntVectClear();
// obj.sq_IntVectPush(1);
// obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_FLAMESTRIKE, STATE_PRIORITY_USER, true);
break;
case 1:
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
}
}
function onProcCon_FlameStrike_bykk(obj)
{
local substate = obj.getSkillSubState();
switch(substate){
case 0:
local stateTime = obj.sq_GetStateTimer();
if(stateTime <= 200) return;
local bDownKey = obj.isDownSkillLastKey();
local posX = obj.getXPos();
local posY = obj.getYPos();
if(!bDownKey || stateTime >= 1000){
local aimPosX = obj.sq_GetAimPosX(posX, posY, false);
local aimPosY = obj.sq_GetAimPosY(posX, posY, false);
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(aimPosX);
obj.sq_IntVectPush(aimPosY);
obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_FLAMESTRIKE, STATE_PRIORITY_USER, true);
}
break;
}
}
function onKeyFrameFlag_FlameStrike_bykk(obj, flagIndex)
{
}
function onTimeEvent_FlameStrike_bykk(obj, timeEventIndex, timeEventCount)
{
switch(timeEventIndex){
case 0:
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
local offsetX = 150;
offsetX = obj.sq_GetDistancePos(posX, obj.sq_GetDirection(), offsetX);
local vX = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_FLAMESTRIKE, 2) * 2;
local vY = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_FLAMESTRIKE, 3) * 2;
obj.sq_AddAimPointMark(offsetX, posY, vX, vY);
break;
}
}
function onEndState_FlameStrike_bykk(obj, new_state)
{
if(new_state != ELEMENTALMASTER_SKILL_FLAMESTRIKE) obj.sq_RemoveAimPointMark();
}
function checkExecutableSkill_HalloweenBuster_bykk(obj)
{
// print("test HalloweenBuster");
}
function onSetState_HalloweenBuster_bykk(obj, state, datas, isResetTimer)
{
}
function onEndCurrentAni_HalloweenBuster_bykk(obj)
{
}
function onProcCon_HalloweenBuster_bykk(obj)
{
}
function onKeyFrameFlag_HalloweenBuster_bykk(obj, flagIndex)
{
}
function onTimeEvent_HalloweenBuster_bykk(obj, timeEventIndex, timeEventCount)
{
}
function onEndState_HalloweenBuster_bykk(obj, new_state)
{
}
function checkExecutableSkill_MagicalTempoUp_bykk(obj)
{
print("test MagicalTempoUp");
}
function onSetState_MagicalTempoUp_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
obj.sq_StopMove();
local substate = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(substate);
switch(substate){
case 0:
local Ani = obj.sq_GetThrowChargeAni(3);
obj.setCurrentAnimation(Ani);
local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_MAGICALTEMPOUP);
local castTime = sq_GetCastTime(obj, ELEMENTALMASTER_SKILL_MAGICALTEMPOUP, skill_level);
if(castTime > 800){local pAni = obj.getCurrentAnimation();sq_SetFrameDelayTime(pAni, 1, castTime);}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
sq_StartDrawCastGauge(obj, castTime, true);
local pAni = obj.getCurrentAnimation();
print(pAni.getDelaySum(false));
break;
case 1:
local Ani = obj.sq_GetThrowShootAni(3);
obj.setCurrentAnimation(Ani);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut"))
CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut");
local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, ELEMENTALMASTER_SKILL_MAGICALTEMPOUP, false, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut", true);
break;
}
}
function onEndCurrentAni_MagicalTempoUp_bykk(obj)
{
if(!obj) return;
if(!obj.sq_IsMyControlObject()) return;
local substate = obj.getSkillSubState();
switch(substate){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_ASSIMILATE, STATE_PRIORITY_USER, true);
break;
case 1:
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
}
}
function onProcCon_MagicalTempoUp_bykk(obj)
{
}
function onKeyFrameFlag_MagicalTempoUp_bykk(obj, flagIndex)
{
}
function onTimeEvent_MagicalTempoUp_bykk(obj, timeEventIndex, timeEventCount)
{
}
function onEndState_MagicalTempoUp_bykk(obj, new_state)
{
if(!obj) return;
if(new_state != ELEMENTALMASTER_SKILL_ASSIMILATE) sq_EndDrawCastGauge(obj);
}
function checkExecutableSkill_Mightyrune_bykk(obj)
{
// print("test Mightyrune");
// if(obj.getVar("elementalchain_light").get_obj_vector_size() > 0){
// local name = ["elementalchain_light","elementalchain_ice","elementalchain_fire","elementalchain_dark"];
// for(local i = 0; i < 4; i++){
// local effectObj = obj.getVar(name[i]).get_obj_vector(0);
// if(effectObj){local colObj = sq_GetCNRDObjectToCollisionObject(effectObj);colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");}
// }
// }
local b_useskill = obj.sq_IsUseSkill(ELEMENTALMASTER_SKILL_MIGHTYRUNE);
if(b_useskill){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(ELEMENTALMASTER_STATE_MIGHTYRUNE, STATE_PRIORITY_USER, true);
return 1;
}
return 0;
}
function onSetState_Mightyrune_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
obj.sq_StopMove();
local substate = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(substate);
switch(substate){
case 0:
local Ani = obj.sq_GetThrowChargeAni(3);
obj.setCurrentAnimation(Ani);
local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN);
local castTime = sq_GetCastTime(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN, skill_level);
if(castTime > 800){local pAni = obj.getCurrentAnimation();sq_SetFrameDelayTime(pAni, 1, castTime);}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local pAni = obj.getCurrentAnimation();
local delaySum = pAni.getDelaySum(false);
sq_StartDrawCastGauge(obj, delaySum, true);
break;
case 1:
local Ani = obj.sq_GetThrowShootAni(3);
obj.setCurrentAnimation(Ani);
obj.sq_PlaySound("WZ_MIGHTYRUNE");
sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/elementalmaster_bykk/mightyrune/runecast_01.ani",0,0,0);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_elementalchain.nut"))
CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_elementalchain.nut");
CNSquirrelAppendage.sq_AppendAppendage(obj, obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN, false, "character/mage/elementalmaster_bykk/ap/ap_elementalchain.nut", true);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut"))
CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut");
CNSquirrelAppendage.sq_AppendAppendage(obj, obj, ELEMENTALMASTER_SKILL_MAGICALTEMPOUP, false, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut", true);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_mightyrune.nut"))
CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_mightyrune.nut");
CNSquirrelAppendage.sq_AppendAppendage(obj, obj, ELEMENTALMASTER_SKILL_MIGHTYRUNE, false, "character/mage/elementalmaster_bykk/ap/ap_mightyrune.nut", true);
break;
}
}
function onEndCurrentAni_Mightyrune_bykk(obj)
{
if(!obj) return;
if(!obj.sq_IsMyControlObject()) return;
local substate = obj.getSkillSubState();
switch(substate){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(ELEMENTALMASTER_STATE_MIGHTYRUNE, STATE_PRIORITY_USER, true);
break;
case 1:
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
}
}
function onProcCon_Mightyrune_bykk(obj)
{
}
function onKeyFrameFlag_Mightyrune_bykk(obj, flagIndex)
{
}
function onTimeEvent_Mightyrune_bykk(obj, timeEventIndex, timeEventCount)
{
}
function onEndState_Mightyrune_bykk(obj, new_state)
{
if(!obj) return;
if(new_state != ELEMENTALMASTER_SKILL_ELEMENTALCHAIN) sq_EndDrawCastGauge(obj);
}
function checkExecutableSkill_Sestoelemento_bykk(obj)
{
// print("test Sestoelemento");
local b_useskill = obj.sq_IsUseSkill(ELEMENTALMASTER_SKILL_SESTOELEMENTO);
if(b_useskill){
obj.sq_IsEnterSkillLastKeyUnits(ELEMENTALMASTER_SKILL_SESTOELEMENTO);
obj.sq_IntVectClear();
obj.sq_IntVectPush(10);
obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_SESTOELEMENTO, STATE_PRIORITY_USER, true);
return 1;
}
return 0;
}
function onSetState_Sestoelemento_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
obj.sq_StopMove();
local substate = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(substate);
switch(substate){
case 0:
obj.sq_SetCurrentAnimation(ANIMATION_ELEMENTALMASTER_SESTOELEMENTOCAST);
obj.setTimeEvent(1,2500,1,false);
// local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/elementalmaster_bykk/animation/sestoelemento/start_main.ani",350,-1,150);
sq_SetBodyEffect(obj, obj, true, sq_RGB(255, 255, 255), 100, 100, 0, sq_ALPHA(100));
sq_flashScreen(obj,1000,3500,300,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
obj.sq_SetXScroll(350, 300, 3000, 100);
local totalDamage = obj.sq_GetBonusRateWithPassive(ELEMENTALMASTER_SKILL_SESTOELEMENTO, ELEMENTALMASTER_SKILL_SESTOELEMENTO, 0, 1.0) + 100;
local hitMax = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_SESTOELEMENTO, 0);
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,350,0,150,obj.getDirection(),ELEMENTALMASTER_SKILL_SESTOELEMENTO,1,totalDamage,hitMax,0,0,0,0,0,0,1,0);
sq_SendMessage(obj, 0, 1, 0);
elementalmaster_setelementSkillBonusRate(obj, ELEMENTALMASTER_SKILL_SESTOELEMENTO);
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_ELEMENTALMASTER_SESTOELEMENTOREADY);
break;
case 2:
obj.sq_SetCurrentAnimation(ANIMATION_ELEMENTALMASTER_SESTOELEMENTOCHARGE);
break;
case 3:
obj.sq_SetCurrentAnimation(ANIMATION_ELEMENTALMASTER_SESTOELEMENTOEXP);
obj.sq_PlaySound("WZ_SESTOELEMENTO");
// sq_AddDrawOnlyAniFromParent(obj,"passiveobject/elementalmaster_bykk/animation/sestoelemento/explosion_main.ani",350,-1,150);
local totalDamage = obj.sq_GetBonusRateWithPassive(ELEMENTALMASTER_SKILL_SESTOELEMENTO, ELEMENTALMASTER_SKILL_SESTOELEMENTO, 1, 1.0) + 100;
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,350,0,150,obj.getDirection(),ELEMENTALMASTER_SKILL_SESTOELEMENTO,2,totalDamage,0,0,0,0,0,0,0,1,0);
break;
case 10:
local Ani = obj.sq_GetThrowChargeAni(1);
obj.setCurrentAnimation(Ani);
obj.sq_PlaySound("WZ_SESTOELEMENTO_CAST");
local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_SESTOELEMENTO);
local castTime = sq_GetCastTime(obj, ELEMENTALMASTER_SKILL_SESTOELEMENTO, skill_level);
if(castTime > 300){local pAni = obj.getCurrentAnimation();sq_SetFrameDelayTime(pAni, 2, castTime - 200);}
local pAni = obj.getCurrentAnimation();
local delaySum = pAni.getDelaySum(false);
sq_StartDrawCastGauge(obj, delaySum, true);
obj.sq_IsEnterSkillLastKeyUnits(ELEMENTALMASTER_SKILL_SESTOELEMENTO);
sq_SetBodyEffect(obj, obj, true, sq_RGB(255, 255, 255), 100, 200, 999000, sq_ALPHA(100));
break;
}
}
function onEndCurrentAni_Sestoelemento_bykk(obj)
{
if(!obj) return;
if(!obj.sq_IsMyControlObject()) return;
local substate = obj.getSkillSubState();
switch(substate){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_SESTOELEMENTO, STATE_PRIORITY_USER, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_SESTOELEMENTO, STATE_PRIORITY_USER, true);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_IntVectPush(3);
obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_SESTOELEMENTO, STATE_PRIORITY_USER, true);
break;
case 3:
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
// case 10:
// obj.sq_IntVectClear();
// obj.sq_IntVectPush(0);
// obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_SESTOELEMENTO, STATE_PRIORITY_USER, true);
// break;
}
}
function onProcCon_Sestoelemento_bykk(obj)
{
local substate = obj.getSkillSubState();
switch(substate){
case 10:
local stateTime = obj.sq_GetStateTimer();
if(stateTime < 200) return;
local bDownKey = obj.isDownSkillLastKey();
if(!bDownKey){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_SESTOELEMENTO, STATE_PRIORITY_USER, true);
}
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
//移动施法技能大于0时获取人物身上移动施法APpush技能子状态及技能编号等
if(sq_GetSkillLevel(obj, 38) > 0){
local mocAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_moveoncast.nut");
if(mocAppendage){
mocAppendage.getVar().setInt(1, ELEMENTALMASTER_SKILL_SESTOELEMENTO);
mocAppendage.getVar().setBool(0, true);
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
}
}
break;
}
}
function onKeyFrameFlag_Sestoelemento_bykk(obj, flagIndex)
{
}
function onTimeEvent_Sestoelemento_bykk(obj, timeEventIndex, timeEventCount)
{
switch(timeEventIndex){
case 1:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_SESTOELEMENTO, STATE_PRIORITY_USER, true);
break;
}
}
function onEndState_Sestoelemento_bykk(obj, new_state)
{
sq_SendMessage(obj, 0, 0, 0);
}
function onCreateObject_Sestoelemento_bykk(obj, createObject)
{
}
function checkExecutableSkill_SunBurst_bykk(obj)
{
// print("test SunBurst");
return 1;
}
function onSetState_SunBurst_bykk(obj, state, datas, isResetTimer)
{
}
function onEndCurrentAni_SunBurst_bykk(obj)
{
}
function onProcCon_SunBurst_bykk(obj)
{
}
function onKeyFrameFlag_SunBurst_bykk(obj, flagIndex)
{
}
function onTimeEvent_SunBurst_bykk(obj, timeEventIndex, timeEventCount)
{
}
function onEndState_SunBurst_bykk(obj, new_state)
{
}
function checkExecutableSkill_Thegate_bykk(obj)
{
// print("test Thegate");
local b_useskill = obj.sq_IsUseSkill(ELEMENTALMASTER_SKILL_THEGATE);
if(b_useskill){
obj.sq_IsEnterSkillLastKeyUnits(ELEMENTALMASTER_SKILL_THEGATE);
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_THEGATE, STATE_PRIORITY_USER, true);
return 1;
}
return 0;
}
function onSetState_Thegate_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
obj.sq_StopMove();
local substate = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(substate);
switch(substate){
case 0:
local Ani = obj.sq_GetThrowChargeAni(1);
obj.setCurrentAnimation(Ani);
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_ELEMENTALMASTER_THEGATECAST_BODY);
break;
}
}
function onEndCurrentAni_Thegate_bykk(obj)
{
if(!obj) return;
if(!obj.sq_IsMyControlObject()) return;
local substate = obj.getSkillSubState();
switch(substate){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_THEGATE, STATE_PRIORITY_USER, true);
break;
case 1:
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
}
}
function onProcCon_Thegate_bykk(obj)
{
}
function onKeyFrameFlag_Thegate_bykk(obj, flagIndex)
{
switch(flagIndex){
case 1:
sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/elementalmaster_bykk/thegate/cast_start_maincircle.ani",75,0,60);
break;
case 2:
local target_number = 0;
local target_Max = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_THEGATE, 0);
local create_time = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_THEGATE, 2);
local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_THEGATE);
local create_number = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_THEGATE, 0, skill_level);
local totalDamage = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_THEGATE, 1, skill_level);
print("totalDamage = "+totalDamage);
local damageRate = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_THEGATE, 2, skill_level);
obj.getVar("thegate_target").clear_obj_vector();
local objectManager = obj.getObjectManager();//得到对象管理器
local objectNumber = objectManager.getCollisionObjectNumber();//总数
for (local i = 0; i < objectNumber; i++){
local object = objectManager.getCollisionObject(i);//得到控制类对象
if(object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj)){
target_number = target_number + 1;
obj.getVar("thegate_target").push_obj_vector(object);
}
}
if(target_number > 0){
if(target_number.tofloat() / target_Max.tofloat() <= 0.5) totalDamage = totalDamage * damageRate / 100;
print("totalDamage count: "+totalDamage);
//local skill = sq_GetSkill(obj, ELEMENTALMASTER_SKILL_THEGATE);
local sub = sq_getRandom(0,3), isSeal = false;
if(sq_GetIntData(obj, ELEMENTALMASTER_SKILL_THEGATE, 12) > 0){
isSeal = true;
totalDamage = totalDamage * 15;
print("totalDamage on: "+totalDamage);
}
for(local i = 0; i < target_number; i++){
local targetObj = obj.getVar("thegate_target").get_obj_vector(i);
if(targetObj){
local activeObj = sq_GetCNRDObjectToActiveObject(targetObj);
if(isSeal == true){
cearteSkillPassive_Elementalmaster_bykk(obj,activeObj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,380,obj.getDirection(),ELEMENTALMASTER_SKILL_THEGATE,10,totalDamage,sub,sq_GetGroup(activeObj),sq_GetUniqueId(activeObj),0,0,0,0,1,0);
}
else cearteSkillPassive_Elementalmaster_bykk(obj,activeObj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,380,obj.getDirection(),ELEMENTALMASTER_SKILL_THEGATE,1,totalDamage,create_number,create_time,sq_getRandom(1,4),sq_GetGroup(activeObj),sq_GetUniqueId(activeObj),0,0,1,0);
}
}
}
elementalmaster_setelementSkillBonusRate(obj, ELEMENTALMASTER_SKILL_THEGATE);
break;
case 3:
sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/elementalmaster_bykk/thegate/cast_end_maincircle.ani",75,0,60);
break;
}
}
function onTimeEvent_Thegate_bykk(obj, timeEventIndex, timeEventCount)
{
}
function onEndState_Thegate_bykk(obj, new_state)
{
}
function onCreateObject_Thegate_bykk(obj, createObject)
{
}
function checkExecutableSkill_ThunderCalling_bykk(obj)
{
// print("test ThunderCalling");
}
function onSetState_ThunderCalling_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
obj.sq_StopMove();
local substate = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(substate);
switch(substate){
case 0:
obj.sq_RemoveAimPointMark();
obj.sq_IsEnterSkillLastKeyUnits(ELEMENTALMASTER_SKILL_THUNDERCALLING);
local Ani = obj.sq_GetThrowChargeAni(3);
obj.setCurrentAnimation(Ani);
obj.setTimeEvent(0,200,1,false);
sq_StartDrawCastGauge(obj, 200, true);
// obj.sq_PlaySound("WZ_THUNDERC_01");
break;
case 1:
obj.sq_RemoveAimPointMark();
local Ani = obj.sq_GetThrowShootAni(3);
obj.setCurrentAnimation(Ani);
obj.sq_PlaySound("WZ_THUNDERC_02");
local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_THUNDERCALLING);
local totalDamage = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_THUNDERCALLING, 3, skill_level);
local countMax = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_THUNDERCALLING, 0, skill_level);
if(sq_GetIntData(obj, ELEMENTALMASTER_SKILL_THUNDERCALLING, 11) > 0) countMax = 1;
local sizeRate = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_THUNDERCALLING, 10) * 125 /100;
local hitTime = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_THUNDERCALLING, 2);
local aimPosX = obj.sq_GetVectorData(datas, 1) - sq_GetXPos(obj);
local aimPosY = obj.sq_GetVectorData(datas, 2) - sq_GetYPos(obj);
local thunderstrikeEx_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_THUNDERSTRIKEEX)
if(thunderstrikeEx_level > 0){
local add_Rate = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_THUNDERSTRIKEEX, 0, thunderstrikeEx_level);
totalDamage = totalDamage * (1000 + add_Rate) / 1000;
hitTime = hitTime / 2;
}
if(sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL) > 0 && !sq_GetSkill(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL).isSealFunction()){
local range = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 3, sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL));
local minus_Rate = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 1);
hitTime = hitTime * (100 - minus_Rate) / 100;
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,aimPosX.tointeger(),aimPosY.tointeger(),0,ENUM_DIRECTION_RIGHT,ELEMENTALMASTER_SKILL_THUNDERCALLING,0,totalDamage,sizeRate,countMax,hitTime,range,2,0,0,1,0);
}
else{
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,aimPosX.tointeger(),aimPosY.tointeger(),0,ENUM_DIRECTION_RIGHT,ELEMENTALMASTER_SKILL_THUNDERCALLING,0,totalDamage,sizeRate,countMax,hitTime,0,1,0,0,1,0);
}
if(sq_GetIntData(obj, ELEMENTALMASTER_SKILL_THUNDERCALLING, 12) > 1000){
local objectManager = obj.getObjectManager();
local objectNumber = objectManager.getCollisionObjectNumber();
local damage = totalDamage * 33 / 100;
for (local i = 0; i < objectNumber; i++){
local object = objectManager.getCollisionObject(i);
if(object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) <= 650 && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= 325){
local activeObj = sq_GetCNRDObjectToActiveObject(object);
cearteSkillPassive_Elementalmaster_bykk(obj,activeObj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,0,ENUM_DIRECTION_RIGHT,ELEMENTALMASTER_SKILL_THUNDERCALLING,3,damage,0,0,0,0,0,0,0,1,0);
}
}
}
sq_BinaryStartWrite();
sq_BinaryWriteDword(1);
sq_BinaryWriteDword(0);
sq_BinaryWriteDword(0);
sq_BinaryWriteDword(0);
sq_SendChangeSkillEffectPacket(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN);
elementalmaster_setelementSkillBonusRate(obj, ELEMENTALMASTER_SKILL_THUNDERCALLING);
break;
}
}
function onEndCurrentAni_ThunderCalling_bykk(obj)
{
if(!obj) return;
if(!obj.sq_IsMyControlObject()) return;
local substate = obj.getSkillSubState();
switch(substate){
case 1:
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
}
}
function onProcCon_ThunderCalling_bykk(obj)
{
local substate = obj.getSkillSubState();
switch(substate){
case 0:
local stateTime = obj.sq_GetStateTimer();
if(stateTime <= 200) return;
local bDownKey = obj.isDownSkillLastKey();
local posX = obj.getXPos();
local posY = obj.getYPos();
if(!bDownKey || stateTime >= 1200){
local aimPosX = obj.sq_GetAimPosX(posX, posY, false);
local aimPosY = obj.sq_GetAimPosY(posX, posY, false);
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(aimPosX);
obj.sq_IntVectPush(aimPosY);
obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_THUNDERCALLING, STATE_PRIORITY_USER, true);
}
break;
}
}
function onKeyFrameFlag_ThunderCalling_bykk(obj, flagIndex)
{
}
function onTimeEvent_ThunderCalling_bykk(obj, timeEventIndex, timeEventCount)
{
switch(timeEventIndex){
case 0:
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
local offsetX = 150;
offsetX = obj.sq_GetDistancePos(posX, obj.sq_GetDirection(), offsetX);
local vX = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_THUNDERCALLING, 5);
local vY = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_THUNDERCALLING, 6);
// local thunderstrikeEx_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_THUNDERSTRIKEEX)
// if(thunderstrikeEx_level > 0){vX = vX * 2;vY = vY * 2;}
obj.sq_AddAimPointMark(offsetX, posY, vX, vY);
break;
}
}
function onEndState_ThunderCalling_bykk(obj, new_state)
{
if(new_state != ELEMENTALMASTER_SKILL_FLAMESTRIKE) obj.sq_RemoveAimPointMark();
}
function checkExecutableSkill_Thunderrage_bykk(obj)
{
// print("test Thunderrage");
local b_useskill = obj.sq_IsUseSkill(ELEMENTALMASTER_SKILL_THUNDERRAGE);
if(b_useskill){
obj.sq_IsEnterSkillLastKeyUnits(ELEMENTALMASTER_SKILL_THUNDERRAGE);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_THUNDERRAGE, STATE_PRIORITY_USER, true);
return 1;
}
return 0;
}
function onSetState_Thunderrage_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
obj.sq_StopMove();
local substate = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(substate);
switch(substate){
case 0:
obj.sq_SetCurrentAnimation(ANIMATION_ELEMENTALMASTER_THUNDERRAGE_CAST_START_00);
local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_THUNDERRAGE);
local castTime = sq_GetCastTime(obj, ELEMENTALMASTER_SKILL_THUNDERRAGE, skill_level);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local pAni = obj.getCurrentAnimation();
local delaySum = pAni.getDelaySum(false);
sq_StartDrawCastGauge(obj, delaySum, true);
obj.getVar("thunderrage").setInt(1,delaySum);
//音效
obj.sq_PlaySound("R_WZ_THUNDER_RAGE_01_1",18);
// else obj.sq_PlaySound("WZ_CRYSTALOVERMIND_01_2");
//设置效果
sq_SetBodyEffect(obj, obj, true, sq_RGB(255, 255, 255), 100, 200, 999000, sq_ALPHA(100));
//蓄气时钟开启
obj.getVar("Thunderrage").clear_ct_vector();
obj.getVar("Thunderrage").push_ct_vector();
local timer = obj.getVar("Thunderrage").get_ct_vector(0);
timer.Reset();
timer.Start(10000,0);
//获取蓄气上限
local energycharge_Max = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_THUNDERRAGE, 4);
local minus_Rate = 0,minus_Rate2 = 0,minus_Rate3 = 0;
local memorize_level = sq_GetSkillLevel(obj, 19);
if(memorize_level > 0){
minus_Rate = sq_GetLevelData(obj, 19, 1, memorize_level);
}
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut")){
local magicaltempoup_level = sq_GetSkillLevel(obj, 2);
minus_Rate3 = sq_GetLevelData(obj, 2, 3, magicaltempoup_level);
}
local minus_Rate4 = 1000 - minus_Rate - minus_Rate3;
local fullcharge = 0;
if(minus_Rate4 > 0) energycharge_Max = energycharge_Max * minus_Rate4 / 1000;
else fullcharge = 1;
obj.getVar("moveoncast").setInt(2,energycharge_Max);
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,0,0,80,obj.getDirection(),38,1,energycharge_Max,4,fullcharge,0,0,0,0,0,0,0);
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_ELEMENTALMASTER_THUNDERRAGE_CAST_LOOP_00);
break;
case 2:
obj.sq_SetCurrentAnimation(ANIMATION_ELEMENTALMASTER_THUNDERRAGE_CAST_END_BODY);
sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/elementalmaster_bykk/thunderrage/thunderrage_cast_end_shot_front_00.ani",45,0,55);
obj.stopSound(18);
//设置效果
sq_SetBodyEffect(obj, obj, true, sq_RGB(255, 255, 255), 100, 100, 0, sq_ALPHA(100));
//声音
obj.sq_PlaySound("R_WZ_THUNDER_RAGE_01_2");
// else obj.sq_PlaySound("WZ_CRYSTALOVERMIND_02_2");
local charge_obj = obj.getVar("moveoncast").get_obj_vector(0);
if(charge_obj) charge_obj.setValid(false);
local timer = obj.getVar("Thunderrage").get_ct_vector(0);
local currentT = 0;
if(timer) currentT = timer.Get();
local energycharge_Max = obj.getVar("moveoncast").getInt(2);
local xiuzheng = 100;
if(currentT > energycharge_Max) xiuzheng = 120;
sq_BinaryStartWrite();
sq_BinaryWriteDword(1);
sq_BinaryWriteDword(1);
sq_BinaryWriteDword(1);
sq_BinaryWriteDword(1);
sq_SendChangeSkillEffectPacket(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN);
local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_THUNDERRAGE);
local totalDamage = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_THUNDERRAGE, 0, skill_level) * xiuzheng / 100;
local hitMax = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_THUNDERRAGE, 0);
local sizeRate = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_THUNDERRAGE, 2);
if(xiuzheng > 100) sizeRate = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_THUNDERRAGE, 3);
cearteSkillPassive_Elementalmaster_bykk(obj,obj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,45,0,55,obj.getDirection(),ELEMENTALMASTER_SKILL_THUNDERRAGE,1,totalDamage,sizeRate,hitMax,0,0,0,0,0,1,0);
elementalmaster_setelementSkillBonusRate(obj, ELEMENTALMASTER_SKILL_THUNDERRAGE);
break;
}
}
function onEndCurrentAni_Thunderrage_bykk(obj)
{
if(!obj) return;
if(!obj.sq_IsMyControlObject()) return;
local substate = obj.getSkillSubState();
switch(substate){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_THUNDERRAGE, STATE_PRIORITY_USER, true);
break;
case 2:
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
}
}
function onProcCon_Thunderrage_bykk(obj)
{
local substate = obj.getSkillSubState();
switch(substate){
case 0:
case 1:
local timer = obj.getVar("Thunderrage").get_ct_vector(0);
if(!timer) return;
local currentT = timer.Get();
if(currentT < obj.getVar("thunderrage").getInt(1)) return;
local bDownKey = obj.isDownSkillLastKey();
if(!bDownKey){
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_THUNDERRAGE, STATE_PRIORITY_USER, true);
}
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
//移动施法技能大于0时获取人物身上移动施法APpush技能子状态及技能编号等
if(sq_GetSkillLevel(obj, 38) > 0){
local mocAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_moveoncast.nut");
if(mocAppendage){
mocAppendage.getVar().setInt(1, ELEMENTALMASTER_SKILL_THUNDERRAGE);
mocAppendage.getVar().setBool(0, true);
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
}
}
break;
}
}
function onKeyFrameFlag_Thunderrage_bykk(obj, flagIndex)
{
}
function onTimeEvent_Thunderrage_bykk(obj, timeEventIndex, timeEventCount)
{
}
function onEndState_Thunderrage_bykk(obj, new_state)
{
if(!obj) return;
if(new_state != ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN){
sq_EndDrawCastGauge(obj);
}
if(new_state == STATE_DIE || new_state == STATE_DAMAGE || new_state == STATE_DOWN || new_state == STATE_HOLD){
if(sq_GetSkillLevel(obj, 38) > 0){
local mocAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_moveoncast.nut");
if(mocAppendage) mocAppendage.getVar().setBool(0, false);
}
}
}
function checkExecutableSkill_Void_bykk(obj)
{
// print("test Void");
return 1;
}
function onSetState_Void_bykk(obj, state, datas, isResetTimer)
{
}
function onEndCurrentAni_Void_bykk(obj)
{
}
function onProcCon_Void_bykk(obj)
{
}
function onKeyFrameFlag_Void_bykk(obj, flagIndex)
{
}
function onTimeEvent_Void_bykk(obj, timeEventIndex, timeEventCount)
{
}
function onEndState_Void_bykk(obj, new_state)
{
}
function checkExecutableSkill_WallOfIce_bykk(obj)
{
// print("test WallOfIce");
return 1;
}
function onSetState_WallOfIce_bykk(obj, state, datas, isResetTimer)
{
}
function onEndCurrentAni_WallOfIce_bykk(obj)
{
}
function onProcCon_WallOfIce_bykk(obj)
{
}
function onKeyFrameFlag_WallOfIce_bykk(obj, flagIndex)
{
}
function onTimeEvent_WallOfIce_bykk(obj, timeEventIndex, timeEventCount)
{
}
function onEndState_WallOfIce_bykk(obj, new_state)
{
}
//聖靈符文
function procSkill_Mightyrue(obj)
{
if(sq_GetSkillLevel(obj, 34) < 1) return;
obj.setSkillCommandEnable(2 , false);
obj.setSkillCommandEnable(29 , false);
}
/////////////////////////elementalmaster_end//////////////////////