Rindro-Sqr/user/114.66.51.249/6_mage_4.c

3013 lines
122 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

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

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