2680 lines
107 KiB
Plaintext
2680 lines
107 KiB
Plaintext
|
||
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时,获取人物身上移动施法AP,push技能子状态及技能编号等
|
||
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時,獲取人物身上移動施法AP,push技能子狀態及技能編號等
|
||
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时,获取人物身上移动施法AP,push技能子状态及技能编号等
|
||
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时,获取人物身上移动施法AP,push技能子状态及技能编号等
|
||
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时,获取人物身上移动施法AP,push技能子状态及技能编号等
|
||
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时,获取人物身上移动施法AP,push技能子状态及技能编号等
|
||
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//////////////////////
|
||
|