/////////////////////////elementalmaster////////////////////// function setState_elementalmaster_bykk(obj, state, datas, isResetTimer) { if(state == 17 && sq_GetVectorData(datas, 0) == 29){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(ELEMENTALMASTER_STATE_ELEMENTALCHAIN, STATE_PRIORITY_IGNORE_FORCE, true); } else if(state == 17 && sq_GetVectorData(datas, 0) == 2){ obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_ASSIMILATE, STATE_PRIORITY_IGNORE_FORCE, true); } } function onAfterSetState_Throw_elementalmaster_bykk(obj, state, datas, isResetTimer) { local ThrowIndex = obj.getThrowIndex(); local throwState = obj.getThrowState(); 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], [57] = [0,0,1,0], [56] = [0,1,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(throwState == 0 && Mightyrune_T.rawin(ThrowIndex)){ switch(ThrowIndex){ case 15: case 26: case 58: case 59: case 27: obj.sq_IntVectClear(); obj.sq_IntVectPush(10); obj.sq_IntVectPush(ThrowIndex); obj.sq_IntVectPush(1); obj.sq_AddSetStatePacket(ELEMENTALMASTER_STATE_ELEMENTALCHAIN, STATE_PRIORITY_IGNORE_FORCE, true); break; case 16: case 31: obj.sq_IntVectClear(); obj.sq_IntVectPush(20); obj.sq_IntVectPush(ThrowIndex); obj.sq_IntVectPush(3); obj.sq_AddSetStatePacket(ELEMENTALMASTER_STATE_ELEMENTALCHAIN, STATE_PRIORITY_IGNORE_FORCE, true); break; case 17: obj.sq_IntVectClear(); obj.sq_IntVectPush(30); obj.sq_IntVectPush(ThrowIndex); obj.sq_IntVectPush(2); obj.sq_AddSetStatePacket(ELEMENTALMASTER_STATE_ELEMENTALCHAIN, STATE_PRIORITY_IGNORE_FORCE, true); break; case 18: obj.sq_IntVectClear(); obj.sq_IntVectPush(40); obj.sq_IntVectPush(ThrowIndex); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(ELEMENTALMASTER_STATE_ELEMENTALCHAIN, STATE_PRIORITY_IGNORE_FORCE, true); break; case 57: obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_FLAMESTRIKE, STATE_PRIORITY_IGNORE_FORCE, true); break; case 55: obj.sq_IntVectClear(); obj.sq_IntVectPush(0); obj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_THUNDERCALLING, STATE_PRIORITY_IGNORE_FORCE, true); break; } return; } if(throwState == 1 && Mightyrune_T.rawin(ThrowIndex)){ sq_BinaryStartWrite(); foreach(elsement in Mightyrune_T[ThrowIndex]){ sq_BinaryWriteDword(elsement); } sq_SendChangeSkillEffectPacket(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN); if(ThrowIndex == 56){ elementalmaster_setelementSkillBonusRate(obj, 56); } else if(ThrowIndex == 74){ elementalmaster_setelementSkillBonusRate(obj, 74); } } } function onEndCurrentAni_Mage_Throw_elementalmaster(obj) { } function reset_elementalmaster_bykk(obj) { local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"appendage/character/ap_common_suck.nut"); if(!addAppendage) return; CNSquirrelAppendage.sq_RemoveAppendage(obj, "appendage/character/ap_common_suck.nut"); 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) bhObj.setValid(false); } } obj.getVar("blackhole").clear_obj_vector(); } function onChangeSkillEffect_Mage_elementalmaster(obj, skillIndex, reciveData) { switch(skillIndex){ case ELEMENTALMASTER_SKILL_ELEMENTALCHAIN: local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_elementalchain.nut"); if(!addAppendage) return; local pushstate = 22; if(sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_MIGHTYRUNE) > 0) pushstate = 25; local assimilate_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ASSIMILATE); local buff1 = reciveData.readDword(); local buff2 = reciveData.readDword(); local buff3 = reciveData.readDword(); local buff4 = reciveData.readDword(); local buffnum = []; local buffname = ["","light","ice","fire","dark"]; if(buff1 > 0) buffnum.push(1); if(buff2 > 0) buffnum.push(2); if(buff3 > 0) buffnum.push(3); if(buff4 > 0) buffnum.push(4); for(local i = 0; i < buffnum.len(); i++){ local anum = buffnum[i]; addAppendage.getVar().setBool(anum, true); local effectObj = obj.getVar("elementalchain_"+buffname[anum]).get_obj_vector(0); if(effectObj){ local colObj = sq_GetCNRDObjectToCollisionObject(effectObj); if(assimilate_level > 0){ local pooledObj = createOnlyDrawObject_elementalmaster_bykk(obj,"character/mage/effect/animation/elementalmaster_bykk/mightyrune/lv95assimilate/"+buffname[anum]+"activate_00.ani",true,colObj.getDirection(),sq_GetXPos(colObj),sq_GetYPos(colObj) + 1,sq_GetZPos(colObj) + 1,ENUM_DRAWLAYER_NORMAL); sq_moveWithParent(colObj, pooledObj); } else colObj.addSetStatePacket(pushstate, null, STATE_PRIORITY_AUTO, false, ""); } } setElementalChainBuff_bykk(obj,skillIndex,addAppendage); break; } } function onStartDungeon_Elementalmaster_bykk(obj) { local loadSlot = obj.sq_GetSkillLoad(ELEMENTALMASTER_SKILL_ELEMENTMASTERY); if(loadSlot) obj.sq_RemoveSkillLoad(ELEMENTALMASTER_SKILL_ELEMENTMASTERY); local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_elementalchain.nut"); if(!addAppendage) return; CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_elementalchain.nut"); local addAppendage2 = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_moveoncast.nut"); if(!addAppendage2) return; addAppendage2.getVar().setBool(0, false); } function setElementalChainBuff_bykk(obj,skillIndex,addAppendage) { return; // local skillLevel = sq_GetSkillLevel(obj, skillIndex); // local buff_num = []; // if(addAppendage.getVar().getBool(1)) buff_num.push(1); // if(addAppendage.getVar().getBool(2)) buff_num.push(1); // if(addAppendage.getVar().getBool(3)) buff_num.push(1); // if(addAppendage.getVar().getBool(4)) buff_num.push(1); // local value1 = 0; // switch(buff_num.len()){ // case 1: value1 = sq_GetLevelData(obj, skillIndex, 6, skillLevel); break; // case 2: value1 = sq_GetLevelData(obj, skillIndex, 7, skillLevel); break; // case 3: value1 = sq_GetLevelData(obj, skillIndex, 8, skillLevel); break; // case 4: value1 = sq_GetLevelData(obj, skillIndex, 9, skillLevel); break; // } // local change_appendage = addAppendage.sq_getChangeStatus("elementalchain"); // if(!change_appendage) change_appendage = addAppendage.sq_AddChangeStatus("elementalchain",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK,true, value1); // if(change_appendage){ // change_appendage.clearParameter(); // if(value1 > 0){ // change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (value1 * 0.01).tofloat()); // change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (value1 * 0.01).tofloat()); // } // } } function onStart_appendage_elementmastery_bykk(appendage) { local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false);return;} local skillLevel = parentObj.sq_GetSkillLevel(ELEMENTALMASTER_SKILL_ELEMENTMASTERY); local value1 = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_ELEMENTMASTERY, 4, skillLevel); local value2 = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_ELEMENTMASTERY, 5, skillLevel); local mightyrune_level = parentObj.sq_GetSkillLevel(ELEMENTALMASTER_SKILL_MIGHTYRUNE); if(mightyrune_level > 0){ local add_Rate = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_MIGHTYRUNE, 3, mightyrune_level); value1 = value1 * (1000 + add_Rate) / 1000; } local change_appendage = appendage.sq_getChangeStatus("elementmastery"); if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("elementmastery",parentObj, parentObj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value1); if(change_appendage){ change_appendage.clearParameter(); //change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (value1 * 0.1).tofloat()); //change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (value1 * 0.1).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_ALL, false, (value2).tofloat()); } } function onStart_appendage_assimilate_bykk(appendage) { local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false);return;} // local skillLevel = parentObj.sq_GetSkillLevel(ELEMENTALMASTER_SKILL_ASSIMILATE); // local value1 = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_ASSIMILATE, 0, skillLevel); // local change_appendage = appendage.sq_getChangeStatus("assimilate"); // if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("assimilate",parentObj, parentObj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value1); // if(change_appendage){ // change_appendage.clearParameter(); // change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (value1 * 0.1).tofloat()); // change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (value1 * 0.1).tofloat()); // } } function onStart_appendage_elementalpotential_bykk(appendage) { local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false);return;} local skillLevel = parentObj.sq_GetSkillLevel(ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL); local value1 = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 7, skillLevel); local change_appendage = appendage.sq_getChangeStatus("elementalpotential"); if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("elementalpotential",parentObj, parentObj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value1); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (value1 * 0.1).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (value1 * 0.1).tofloat()); } } function onStart_appendage_elementalweak_bykk(appendage) { local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false);return;} local skillLevel = parentObj.sq_GetSkillLevel(ELEMENTALMASTER_SKILL_ELEMENTALWEAK); local value1 = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_ELEMENTALWEAK, 5, skillLevel); local value2 = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_ELEMENTALWEAK, 6, skillLevel); local mightyrune_level = parentObj.sq_GetSkillLevel(ELEMENTALMASTER_SKILL_MIGHTYRUNE); if(mightyrune_level > 0){ local add_Rate = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_MIGHTYRUNE, 2, mightyrune_level); value2 = value2 * (1000 + add_Rate) / 1000; } local change_appendage = appendage.sq_getChangeStatus("elementalweak"); if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("elementalweak",parentObj, parentObj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value1); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (value1 * 0.1).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (value1 * 0.1).tofloat()); change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_HIT_RATE, false, (value2 * 0.1).tofloat()); } } function onAttackParent_appendage_elementalweak(appendage, realAttacker, damager, boundingBox, isStuck) { if(!appendage) return; return; if(isStuck) return; local parentObj = appendage.getParent(); local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); if(!obj || obj.getState() == STATE_DIE) return; if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return; local activeObj = sq_GetCNRDObjectToActiveObject(damager); local maxLoad = sq_GetIntData(obj, ELEMENTALMASTER_SKILL_ELEMENTALWEAK, 0); local skillLevel = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALWEAK); local decrease = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALWEAK, 0, skillLevel); local time = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALWEAK, 2, skillLevel); local attackInfo = sq_GetCurrentAttackInfo(realAttacker); local element = [ENUM_ELEMENT_FIRE,ENUM_ELEMENT_WATER,ENUM_ELEMENT_DARK,ENUM_ELEMENT_LIGHT]; local element2 = ["attack_fire","attack_ice","attack_dark","attack_light"]; for(local i = 0; i < 4; i++){ if(attackInfo.isValidElement(element[i])){ local addAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, ELEMENTALWEAKDEBUFF_APDPATH); if(!addAppendage){ addAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, ELEMENTALWEAKDEBUFF_APDPATH, true); addAppendage.getVar("custom").setInt(10, maxLoad); addAppendage.getVar("custom").setInt(11, decrease); addAppendage.getVar("custom").setInt(12, time); } for(local ui = 10; ui < 10 + maxLoad; ui++){ if(addAppendage.getVar(element2[i]).getBool(ui) == false){ addAppendage.getVar(element2[i]).setBool(ui, true); } } } } } function proc_appendage_elementalweakdebuff(appendage) { if(!appendage) return; local targetObj = appendage.getParent(); local sqrChr = appendage.getSource(); targetObj = sq_GetCNRDObjectToActiveObject(targetObj); sqrChr = sq_GetCNRDObjectToSQRCharacter(sqrChr); if(!targetObj || targetObj.getState() == STATE_DIE){ appendage.setValid(false); return; } local maxLoad = appendage.getVar("custom").getInt(10); local decrease = appendage.getVar("custom").getInt(11); local time = appendage.getVar("custom").getInt(12); local element = ["attack_fire","attack_ice","attack_dark","attack_light"]; for(local i = 0; i < element.len(); i++){ local timer = appendage.getVar(element[i]).get_ct_vector(0); if(!timer){ appendage.getVar(element[i]).clear_ct_vector(); appendage.getVar(element[i]).push_ct_vector(); timer = appendage.getVar(element[i]).get_ct_vector(0); timer.Reset(); timer.Start(10000,0); } local currentT = timer.Get(); if(currentT >= time){ for(local oi = 0; oi < maxLoad; oi++){ appendage.getVar(element[i]).setBool(10 + oi, false); appendage.getVar(element[i]).setBool(20 + oi, false); } timer.Reset(); timer.Start(10000,0); } for(local ui = 0; ui < maxLoad; ui++){ if(appendage.getVar(element[i]).getBool(10 + ui) && appendage.getVar(element[i]).getBool(20 + ui) == false){ appendage.getVar(element[i]).setBool(20 + ui, true); local ap = sq_CreateChangeStatus(20 + i, false, -decrease.tofloat() , 0); if (ap){ ap.getAppendageInfo().setValidTime(time); ap.sq_Append(targetObj, sqrChr); } } } } } function useSkill_before_Mage_elementalmaster_bykk(obj, skillIndex, consumeMp, consumeItem, oldSkillMpRate) { //printp(" consumpMp:" + consumeMp + " oldSkillMpRate:" + oldSkillMpRate); local skillLevel = obj.sq_GetSkillLevel(ELEMENTALMASTER_SKILL_ELEMENTMASTERY); if(skillLevel > 0){ local mpComsumeRate = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTMASTERY, 3, skillLevel); if(oldSkillMpRate != 1.0) oldSkillMpRate = 1.0; local newMpRate = oldSkillMpRate.tofloat() * (100 - mpComsumeRate.tofloat()) / 100; // print(" newMpRate:" + newMpRate); obj.setSkillMpRate(skillIndex, newMpRate.tofloat()); } //print(" now consumpMp:" + obj.getSkillMpRate(skillIndex)); return true; } function cearteSkillPassive_Elementalmaster_bykk(obj,passiveObj,objnum,x,y,z,direction,skillIndex,subtype,pushv1,pushv2,pushv3,pushv4,pushv5,pushv6,pushv7,pushv8,bonusnum,powernum) { if(!obj || !passiveObj) return; if(pushv1 == null) pushv1 = 0; if(pushv2 == null) pushv2 = 0; if(pushv3 == null) pushv3 = 0; if(pushv4 == null) pushv4 = 0; if(pushv5 == null) pushv5 = 0; if(pushv6 == null) pushv6 = 0; if(pushv7 == null) pushv7 = 0; if(pushv8 == null) pushv8 = 0; if(bonusnum > 0){ local bonusRate = 1.0;//obj.getVar("witchs_bonusRate").get_vector(0).tofloat() / 1000.0; local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL); if(skill_level > 0){ local add_Rate = 0.0; switch(skillIndex){ case ELEMENTALMASTER_SKILL_ELEMENTALCHAIN: add_Rate = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 7, skill_level); case ELEMENTALMASTER_SKILL_FLAMESTRIKE: case ELEMENTALMASTER_SKILL_VOID: case ELEMENTALMASTER_SKILL_SUNBURST: add_Rate = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 8, skill_level); break; case ELEMENTALMASTER_SKILL_THUNDERCALLING: add_Rate = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 12, skill_level); break; case ELEMENTALMASTER_SKILL_ARCTICPISTE: add_Rate = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 15, skill_level); break; case ELEMENTALMASTER_SKILL_BLACKHOLE: add_Rate = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 14, skill_level); break; case ELEMENTALMASTER_SKILL_HALLOWEENBUSTER: add_Rate = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 13, skill_level); break; case ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND: case ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN: case ELEMENTALMASTER_SKILL_ELEMENTALQUAKE: case ELEMENTALMASTER_SKILL_THEGATE: case ELEMENTALMASTER_SKILL_SESTOELEMENTO: case ELEMENTALMASTER_SKILL_THUNDERRAGE: add_Rate = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 16, skill_level); break; } bonusRate += add_Rate.tofloat() / 1000.0; } switch (bonusnum) { case 1: pushv1 = (pushv1.tofloat() * bonusRate).tointeger(); break; case 2: pushv2 = (pushv2.tofloat() * bonusRate).tointeger(); break; case 3: pushv3 = (pushv3.tofloat() * bonusRate).tointeger(); break; case 4: pushv4 = (pushv4.tofloat() * bonusRate).tointeger(); break; case 5: pushv5 = (pushv5.tofloat() * bonusRate).tointeger(); break; case 6: pushv6 = (pushv6.tofloat() * bonusRate).tointeger(); break; case 7: pushv7 = (pushv7.tofloat() * bonusRate).tointeger(); break; case 8: pushv8 = (pushv8.tofloat() * bonusRate).tointeger(); break; } } if(powernum > 0){ local bonusRate = 1.0;//obj.getVar("witchs_bonusRate").get_vector(0).tofloat() / 1000.0; local skill_level = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL); if(skill_level > 0){ local add_Rate = 0.0; if(skillIndex == ELEMENTALMASTER_SKILL_ELEMENTALCHAIN) add_Rate = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 7, skill_level); bonusRate += add_Rate.tofloat() / 1000.0; } switch (powernum) { case 1: pushv1 = (pushv1.tofloat() * bonusRate).tointeger(); break; case 2: pushv2 = (pushv2.tofloat() * bonusRate).tointeger(); break; case 3: pushv3 = (pushv3.tofloat() * bonusRate).tointeger(); break; case 4: pushv4 = (pushv4.tofloat() * bonusRate).tointeger(); break; case 5: pushv5 = (pushv5.tofloat() * bonusRate).tointeger(); break; case 6: pushv6 = (pushv6.tofloat() * bonusRate).tointeger(); break; case 7: pushv7 = (pushv7.tofloat() * bonusRate).tointeger(); break; case 8: pushv8 = (pushv8.tofloat() * bonusRate).tointeger(); break; } } local destX_01 = 0; local destY_01 = 0; if(!isSameObject(obj, passiveObj)){ destX_01 = passiveObj.getXPos() - obj.getXPos(); destY_01 = passiveObj.getYPos() - obj.getYPos(); z = z - obj.getZPos(); if(direction == ENUM_DIRECTION_LEFT) destX_01 = obj.getXPos() - passiveObj.getXPos(); } sq_BinaryStartWrite(); sq_BinaryWriteDword(skillIndex); sq_BinaryWriteDword(subtype); sq_BinaryWriteDword(pushv1); sq_BinaryWriteDword(pushv2); sq_BinaryWriteDword(pushv3); sq_BinaryWriteDword(pushv4); sq_BinaryWriteDword(pushv5); sq_BinaryWriteDword(pushv6); sq_BinaryWriteDword(pushv7); sq_BinaryWriteDword(pushv8); sq_SendCreatePassiveObjectPacket(obj, objnum, 0, destX_01 + x, destY_01 + y, z, direction); } function createOnlyDrawObject_elementalmaster_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer) { local ani = sq_CreateAnimation("",aniPath); local pooledObj = sq_CreatePooledObject(ani,isTrue); sq_SetCurrentDirection(pooledObj, direction); pooledObj.setCurrentPos(x,y,z); pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer); sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false); return pooledObj; } function onStart_appendage_elementalchain_bykk(appendage) { local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); local skillLevel = sq_GetSkillLevel(parentObj,ELEMENTALMASTER_SKILL_ELEMENTALCHAIN); local lightTime = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN, 1, skillLevel); appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, ENUM_CHARACTERJOB_MAGE, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN, skillLevel); appendage.setEnableIsBuff(true); appendage.setBuffIconImage(28); local value0 = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN, 6, skillLevel) local value1 = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN, 7, skillLevel); local value2 = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN, 8, skillLevel); local value3 = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN, 9, skillLevel); appendage.getVar("custom").setInt(0, value0); appendage.getVar("custom").setInt(1, value1); appendage.getVar("custom").setInt(2, value2); appendage.getVar("custom").setInt(3, value3); appendage.getVar().setBool(1,false); appendage.getVar().setBool(2,false); appendage.getVar().setBool(3,false); appendage.getVar().setBool(4,false); local offset_x = [35,35,-35,-35]; local offset_y = [-20,20,20,-20]; local offset_z = [23,30,30,30]; local sub = 0; local mightyrune_level = sq_GetSkillLevel(parentObj, ELEMENTALMASTER_SKILL_MIGHTYRUNE); if(mightyrune_level > 0){ sub = 1; offset_z = [30,30,30,30]; lightTime = lightTime * (1000 + sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_MIGHTYRUNE, 0, mightyrune_level)) / 1000; } local assimilate_level = sq_GetSkillLevel(parentObj, ELEMENTALMASTER_SKILL_ASSIMILATE); if(assimilate_level > 0){ sub = 2; offset_z = [30,30,30,30]; appendage.getVar().setBool(1,true); appendage.getVar().setBool(2,true); appendage.getVar().setBool(3,true); appendage.getVar().setBool(4,true); setElementalChainBuff_bykk(parentObj,ELEMENTALMASTER_SKILL_ELEMENTALCHAIN,appendage); } for(local i = 1; i < 5; i++){ cearteSkillPassive_Elementalmaster_bykk(parentObj,parentObj,PASSIVEOBJECT_BYKK_ELEMENTALMASTER,offset_x[i-1],offset_y[i-1],offset_z[i-1],ENUM_DIRECTION_RIGHT,ELEMENTALMASTER_SKILL_ELEMENTALCHAIN,i,lightTime,sub,0,0,0,0,0,0,0,0); } } function onEnd_appendage_elementalchain_bykk(appendage) { local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); local name = ["elementalchain_light","elementalchain_ice","elementalchain_fire","elementalchain_dark"]; for(local i = 0; i < name.len(); i++){ local size = parentObj.getVar(name[i]).get_obj_vector_size(); for(local ui = 0; ui < size; ui++){ local effectObj = parentObj.getVar(name[i]).get_obj_vector(ui); if(effectObj) effectObj.setValid(false); } } } function onStart_appendage_magicaltempoup_bykk(appendage) { local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); local skillLevel = sq_GetSkillLevel(parentObj,ELEMENTALMASTER_SKILL_MAGICALTEMPOUP); appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, ENUM_CHARACTERJOB_MAGE, ELEMENTALMASTER_SKILL_MAGICALTEMPOUP, skillLevel); appendage.setEnableIsBuff(true); appendage.setBuffIconImage(34); local lifeTime = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_MAGICALTEMPOUP, 0, skillLevel); local value1 = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_MAGICALTEMPOUP, 1, skillLevel); local value2 = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_MAGICALTEMPOUP, 2, skillLevel); local mightyrune_level = parentObj.sq_GetSkillLevel(ELEMENTALMASTER_SKILL_MIGHTYRUNE); if(mightyrune_level > 0){ appendage.getAppendageInfo().setValidTime(0); local add_Rate = sq_GetLevelData(parentObj, ELEMENTALMASTER_SKILL_MIGHTYRUNE, 4, mightyrune_level); value1 = value1 * (1000 + add_Rate) / 1000; value2 = value2 * (1000 + add_Rate) / 1000; } else if((sq_getGrowType(parentObj) == 4 && sq_GetSkillLevel(parentObj, SKILL_BYKK_LAPISPHILOSOPHORUM) > 0) || (sq_getGrowType(parentObj) == 2 && parentObj.getVar("eclipsehive_select").getBool(0))){ appendage.getAppendageInfo().setValidTime(0); } else appendage.getAppendageInfo().setValidTime(lifeTime); local change_appendage = appendage.sq_getChangeStatus("magicaltempoup"); if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("magicaltempoup",parentObj, parentObj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value1); if(change_appendage){ change_appendage.clearParameter(); change_appendage.addParameter(CHANGE_STATUS_TYPE_CAST_SPEED, false, (value2 * 1).tofloat()); } } function onStart_appendage_mightyrune_bykk(appendage) { local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); local skillLevel = sq_GetSkillLevel(parentObj,ELEMENTALMASTER_SKILL_MIGHTYRUNE); appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, ENUM_CHARACTERJOB_MAGE, ELEMENTALMASTER_SKILL_MIGHTYRUNE, skillLevel); } function onStart_appendage_moveoncast_bykk(appendage) { // } function proc_appendage_moveoncast_bykk(appendage) { if(!appendage) return; local parentObj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent()); if(parentObj.getState() == 13 && parentObj.getThrowIndex() == 74){ sq_SetKeyxEnable(parentObj, E_JUMP_COMMAND, true); if(sq_IsEnterCommand(parentObj, E_JUMP_COMMAND)){ parentObj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); } } if(appendage.getVar().getBool(0)){ for(local i = 1; i < 255; i++){ parentObj.setSkillCommandEnable(i, false); } if(parentObj.getState() == 0 || parentObj.getState() == 14){ local bDownKey = parentObj.isDownSkillLastKey(); if(!bDownKey){ appendage.getVar().setBool(0, false); if(appendage.getVar().getInt(1) == ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN){ parentObj.sq_IntVectClear(); parentObj.sq_IntVectPush(1); parentObj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN, STATE_PRIORITY_USER, true); return; } else if(appendage.getVar().getInt(1) == ELEMENTALMASTER_SKILL_ELEMENTALQUAKE){ parentObj.sq_IntVectClear(); parentObj.sq_IntVectPush(1); parentObj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_ELEMENTALQUAKE, STATE_PRIORITY_USER, true); return; } else if(appendage.getVar().getInt(1) == ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND){ parentObj.sq_IntVectClear(); parentObj.sq_IntVectPush(1); parentObj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND, STATE_PRIORITY_USER, true); return; } else if(appendage.getVar().getInt(1) == ELEMENTALMASTER_SKILL_THUNDERRAGE){ parentObj.sq_IntVectClear(); parentObj.sq_IntVectPush(2); parentObj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_THUNDERRAGE, STATE_PRIORITY_USER, true); return; } else if(appendage.getVar().getInt(1) == ELEMENTALMASTER_SKILL_SESTOELEMENTO){ parentObj.sq_IntVectClear(); parentObj.sq_IntVectPush(0); parentObj.sq_AddSetStatePacket(ELEMENTALMASTER_SKILL_SESTOELEMENTO, STATE_PRIORITY_USER, true); return; } parentObj.sq_IntVectClear(); parentObj.sq_IntVectPush(appendage.getVar().getInt(3) + 1); parentObj.sq_IntVectPush(appendage.getVar().getInt(1)); parentObj.sq_IntVectPush(appendage.getVar().getInt(2)); // print(appendage.getVar().getInt(3)+" && "+appendage.getVar().getInt(1)+" && "+appendage.getVar().getInt(2)); parentObj.sq_AddSetStatePacket(ELEMENTALMASTER_STATE_ELEMENTALCHAIN, STATE_PRIORITY_USER, true); } } } } function onEnd_appendage_moveoncast_bykk(appendage) { // } function monsterpulled_elementalmaster_bykk(obj,monsterobj,x,y,z,time,range) { if(!obj.isMovablePos(sq_GetXPos(monsterobj), sq_GetYPos(monsterobj))) return; local objectManager = obj.getObjectManager(); local objectNumber = objectManager.getCollisionObjectNumber(); for(local i = 0; i < objectNumber; i++){ local targetObj = objectManager.getCollisionObject(i); if(targetObj && targetObj.isObjectType(OBJECTTYPE_ACTIVE) && targetObj.isEnemy(obj) && !CNSquirrelAppendage.sq_IsAppendAppendage(targetObj, "character/mage/k_k_made/appendage/aptomonster/debuff/ap_pulledmonster.nut") && sq_GetDistanceObject(monsterobj, targetObj, true) <= range){ local appendagePath = "character/mage/k_k_made/appendage/aptomonster/debuff/ap_pulledmonster.nut"; local MasterAppendage = CNSquirrelAppendage.sq_AppendAppendage(targetObj, obj, -1, false, appendagePath, true); if(MasterAppendage){ sq_AccelMoveToAppendageForce(targetObj, obj, monsterobj, x, y, z, time, true, MasterAppendage, true); local validT = MasterAppendage.getAppendageInfo() validT.setValidTime(2000); } } } } function elementalmaster_setbonusRate(obj) { local bonusRate = 1000; if(sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ASSIMILATE) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj,ELEMENTALMASTER_SKILL_ASSIMILATE, 0, sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ASSIMILATE))) / 1000; if(sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALWEAK) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj,ELEMENTALMASTER_SKILL_ELEMENTALWEAK, 5, sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALWEAK))) / 1000; if(sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTMASTERY) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTMASTERY, 4, sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTMASTERY))) / 1000; if(sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL) > 0){ if(obj.sq_GetState() == 13){ switch(obj.getThrowIndex()){ case 56: bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 8, sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL))) / 1000; break; case 74: bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL, 16, sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALPOTENTIAL))) / 1000; break; } } } if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ELEMENTMASTERYBUFF)){ local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, APDPATH_ELEMENTMASTERYBUFF); if(!addAppendage){ obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); return; } local addRate = addAppendage.getVar("custom").getInt(10); bonusRate = bonusRate * (1000 + addRate) / 1000; } if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/elementalmaster_bykk/ap/ap_elementalchain.nut")){ local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/mage/elementalmaster_bykk/ap/ap_elementalchain.nut"); if(!addAppendage){ obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); return; } local skillLevel = sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN); local buff_num = []; if(addAppendage.getVar().getBool(1)) buff_num.push(1); if(addAppendage.getVar().getBool(2)) buff_num.push(1); if(addAppendage.getVar().getBool(3)) buff_num.push(1); if(addAppendage.getVar().getBool(4)) buff_num.push(1); local value1 = 0; switch(buff_num.len()){ case 1: value1 = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN, 6, skillLevel); break; case 2: value1 = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN, 7, skillLevel); break; case 3: value1 = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN, 8, skillLevel); break; case 4: value1 = sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTALCHAIN, 9, skillLevel); break; } bonusRate = bonusRate * (10000 + value1) / 10000; } obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger()); } function getElementalMaster_RestAni(obj) { local animation = obj.sq_GetRestAni(); if(obj.sq_GetSkillLevel(ELEMENTALMASTER_SKILL_ASSIMILATE) > 0) animation = obj.sq_GetCustomAni(ANIMATION_ELEMENTALMASTER_ELEMENTALMASTER_3RD_BODY); return animation; } function elementalmaster_setelementSkillBonusRate(obj, skillIndex) { if(sq_GetLevelData(obj, ELEMENTALMASTER_SKILL_ELEMENTMASTERY, 10, sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTMASTERY)) > 0){ local AddAppendage; if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ELEMENTMASTERYBUFF)){ AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,APDPATH_ELEMENTMASTERYBUFF); AddAppendage.sq_SetValidTime(8000); AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), ELEMENTALMASTER_SKILL_ELEMENTMASTERY, sq_GetSkillLevel(obj, ELEMENTALMASTER_SKILL_ELEMENTMASTERY)); CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true); } else{ AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_ELEMENTMASTERYBUFF, true); AddAppendage.getVar("custom").setInt(10, 0); obj.sq_AddSkillLoad(ELEMENTALMASTER_SKILL_ELEMENTMASTERY, 64, 0, 500); } local now_BonusRate = AddAppendage.getVar("custom").getInt(10); local new_BonusRate = 0; switch(skillIndex){ case 15: case 16: case 17: case 18: new_BonusRate = now_BonusRate + 30; break; case ELEMENTALMASTER_SKILL_VOID: case ELEMENTALMASTER_SKILL_SUNBURST: case ELEMENTALMASTER_SKILL_WALLOFICE: case ELEMENTALMASTER_SKILL_FLAMESTRIKE: new_BonusRate = now_BonusRate + 30; break; case ELEMENTALMASTER_SKILL_HALLOWEENBUSTER: case ELEMENTALMASTER_SKILL_BLACKHOLE: case ELEMENTALMASTER_SKILL_THUNDERCALLING: case ELEMENTALMASTER_SKILL_ARCTICPISTE: new_BonusRate = now_BonusRate + 50; break; case ELEMENTALMASTER_SKILL_ELEMENTALSHOWER: case ELEMENTALMASTER_SKILL_ELEMENTALQUAKE: case ELEMENTALMASTER_SKILL_ELEMENTALCURTAIN: case ELEMENTALMASTER_SKILL_CRYSTALOFOVERMIND: case ELEMENTALMASTER_SKILL_THEGATE: case ELEMENTALMASTER_SKILL_SESTOELEMENTO: case ELEMENTALMASTER_SKILL_THUNDERRAGE: new_BonusRate = now_BonusRate + 80; break; } if(new_BonusRate > 500) new_BonusRate = 500; AddAppendage.getVar("custom").setInt(10, new_BonusRate); local loadSlot = obj.sq_GetSkillLoad(ELEMENTALMASTER_SKILL_ELEMENTMASTERY); if(loadSlot){ local getload = loadSlot.getRemainLoadNumber(); if(new_BonusRate / 10 + getload > 50) loadSlot.increaseLoadCount(50 - getload); else loadSlot.increaseLoadCount(new_BonusRate / 10); } } else{ if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ELEMENTMASTERYBUFF)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_ELEMENTMASTERYBUFF); } } function onEnd_appendage_elementmastery_buff(appendage) { if(!appendage) return; } function proc_appendage_elementmastery_buff(appendage) { if(!appendage) return; if(!appendage.isValid()) return; local parentObj = appendage.getParent(); if(!parentObj || parentObj.getState() == STATE_DIE){ appendage.setValid(false); return; } } function onStart_appendage_elementmastery_buff(appendage) { if(!appendage) return; } function onVaildTimeEnd_appendage_elementmastery_buff(appendage) { if(!appendage) return; local parentObj = appendage.getParent(); if(!parentObj || parentObj.getState() == STATE_DIE){ appendage.setValid(false); return; } local obj = sq_GetCNRDObjectToSQRCharacter(parentObj); local loadSlot = obj.sq_GetSkillLoad(ELEMENTALMASTER_SKILL_ELEMENTMASTERY); if(loadSlot) obj.sq_RemoveSkillLoad(ELEMENTALMASTER_SKILL_ELEMENTMASTERY); } 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//////////////////////