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//////////////////////