Rindro-Sqr/user/114.66.51.249/5_gunner_3.c

1971 lines
71 KiB
C

function getMissilePtl_bykk(number)
{
local ptlPath;
switch(number){
case 1:
ptlPath = "particle/tempestermissile1.ptl";
break;
case 2:
ptlPath = "particle/tempestermissile2.ptl";
break;
case 3:
ptlPath = "particle/tempestermissile3.ptl";
break;
case 4:
ptlPath = "particle/tempestermissile4.ptl";
break;
}
return ptlPath;
}
function checkExecutableSkill_RobotRX78_bykk(obj)
{
if(!obj) return false;
if(obj.getVar("virtualrush").getBool(0) == true && !sq_GetSkill(obj, 27).isInCoolTime()){
local effect_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar("VIRTUALRUSH_SUB1").get_obj_vector(0));
local offsetX = sq_getRandom(-240,240);
local offsetY = sq_getRandom(-30,60);
createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,27,1,offsetX,offsetY,0);
if(sq_GetSkillLevel(obj, 42) > 0) createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,27,1,offsetX,offsetY - 30,0);
sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotafront_00.ani", 0, 1, 1);
sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotaback_00.ani", 0, 1, 1);
sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotgunnerback1_00.ani", 0, 1, 1);
//obj.startSkillCoolTime(27, sq_GetSkillLevel(obj, 27), -1);
obj.sq_PlaySound("GN_LADNRUNNER");
if(obj.getState() == 14){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(14, STATE_PRIORITY_IGNORE_FORCE, true);
}
else if(obj.getState() == 0){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true);
}
return true;
}
local b_useskill = obj.sq_IsUseSkill(27);
if(b_useskill){
if(sq_getGrowType(obj) == 3){
local skill_level = sq_GetSkillLevel(obj, SKILL_GUNNER_HS1);
if(skill_level > 0){
sendSkillPacket_hs1(obj,27);
}
else{
obj.sq_IntVectClear();
obj.sq_IntVectPush(5);
obj.sq_IntVectPush(27);
obj.sq_AddSetStatePacket(STATE_GUNNER_VIRTUALRUSH, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
return true;
}
return false;
}
function checkExecutableSkill_RobotEz8_bykk(obj)
{
if(!obj) return false;
local skill = sq_GetSkill(obj, SKILL_GUNNER_HOLDANDGO);
if(obj.getVar("virtualrush").getBool(0) == true && !sq_GetSkill(obj, 28).isInCoolTime()){
local effect_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar("VIRTUALRUSH_SUB1").get_obj_vector(0));
local offsetX = sq_getRandom(-240,240);
local offsetY = sq_getRandom(-30,60);
createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,28,1,offsetX,offsetY,0);
if(sq_GetLevelData(obj, 28, 6, sq_GetSkillLevel(obj, 28)) > 0) createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,28,1,offsetX + 5,offsetY - 5,0);
sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotafront_00.ani", 0, 1, 1);
sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotaback_00.ani", 0, 1, 1);
sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotgunnerback1_00.ani", 0, 1, 1);
//obj.startSkillCoolTime(28, sq_GetSkillLevel(obj, 28), -1);
if(obj.getState() == 14){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(14, STATE_PRIORITY_IGNORE_FORCE, true);
}
else if(obj.getState() == 0){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true);
}
obj.sq_PlaySound("R_GN_COUNTDOWN");
return true;
}
local b_useskill = obj.sq_IsUseSkill(28);
if(b_useskill){
if(sq_getGrowType(obj) == 3){
local skill_level = sq_GetSkillLevel(obj, SKILL_GUNNER_HS1);
if(skill_level > 0){
sendSkillPacket_hs1(obj,28);
}
else{
obj.sq_IntVectClear();
obj.sq_IntVectPush(5);
obj.sq_IntVectPush(28);
obj.sq_AddSetStatePacket(STATE_GUNNER_VIRTUALRUSH, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
return true;
}
return false;
}
function checkExecutableSkill_RobotExs_bykk(obj)
{
if (!obj){
return false;
}
local size = obj.getVar("ExsS_OBJ").get_obj_vector_size();
local maxnum = obj.sq_GetIntData(29,6);
// printp("size="+size.tostring()+", maxnum="+maxnum.tostring()+"\n");
// if(size > 0){
// obj.sq_PlaySound("GN_SOPHIA_SYNC");
// local size = obj.getVar("ExsS_OBJ").get_obj_vector_size();
// for(local i = 0; i < size; i++){
// local activeObj = sq_GetCNRDObjectToCollisionObject(obj.getVar("ExsS_OBJ").get_obj_vector(i));
// if(activeObj){
// for(local ui = 0; ui < 10; ui++){
// local moveX = sq_GetDistancePos(obj.getXPos(), obj.getDirection(), 150) + sq_getRandom(-50,60);
// local moveY = obj.getYPos() + sq_getRandom(-30,30);
// if(obj.isMovablePos(moveX, moveY)){
// activeObj.getVar("move").clear_vector();
// activeObj.getVar("move").push_vector(moveX);
// activeObj.getVar("move").push_vector(moveY);
// activeObj.addSetStatePacket(23, null, STATE_PRIORITY_FORCE, false, "");
// break;
// }
// }
// }
// }
// }
if(size >= maxnum){
if(obj.getState() == 14){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(14, STATE_PRIORITY_IGNORE_FORCE, true);
}
else if(obj.getState() == 0){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true);
}
return true;
}
local b_useskill = obj.sq_IsUseSkill(29);
if(b_useskill){
if(sq_getGrowType(obj) == 3){
local skill_level = sq_GetSkillLevel(obj, SKILL_GUNNER_HS1);
if(skill_level > 0){
sendSkillPacket_hs1(obj,29);
}
else{
obj.sq_IntVectClear();
obj.sq_IntVectPush(5);
obj.sq_IntVectPush(29);
obj.sq_AddSetStatePacket(STATE_GUNNER_VIRTUALRUSH, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
return true;
}
return false;
}
function checkExecutableSkill_RobotExsEx_bykk(obj)
{
if (!obj) return false;
local b_useskill = obj.sq_IsUseSkill(106);
if(b_useskill){
if(sq_getGrowType(obj) == 3){
local skill_level = sq_GetSkillLevel(obj, SKILL_GUNNER_HS1);
if(skill_level > 0){
sendSkillPacket_hs1(obj,106);
}
else{
obj.sq_IntVectClear();
obj.sq_IntVectPush(5);
obj.sq_IntVectPush(106);
obj.sq_AddSetStatePacket(STATE_GUNNER_VIRTUALRUSH, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
return true;
}
return false;
}
function checkExecutableSkill_RobotEz8Ex_bykk(obj)
{
if(!obj) return false;
if(obj.getVar("virtualrush").getBool(0) == true && !sq_GetSkill(obj, 105).isInCoolTime()){
local effect_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar("VIRTUALRUSH_SUB1").get_obj_vector(0));
local offsetX = sq_getRandom(-240,240);
local offsetY = sq_getRandom(-30,60);
createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,105,1,offsetX,offsetY,0);
sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotafront_00.ani", 0, 1, 1);
sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotaback_00.ani", 0, 1, 1);
sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotgunnerback1_00.ani", 0, 1, 1);
//obj.startSkillCoolTime(28, sq_GetSkillLevel(obj, 28), -1);
if(obj.getState() == 14){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(14, STATE_PRIORITY_IGNORE_FORCE, true);
}
else if(obj.getState() == 0){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true);
}
obj.sq_PlaySound("R_GN_COUNTDOWN");
return true;
}
local b_useskill = obj.sq_IsUseSkill(105);
if(b_useskill){
if(sq_getGrowType(obj) == 3){
local skill_level = sq_GetSkillLevel(obj, SKILL_GUNNER_HS1);
if(skill_level > 0){
sendSkillPacket_hs1(obj,105);
}
}
return true;
}
return false;
}
function checkExecutableSkill_RobotTempester_bykk(obj)
{
if (!obj) return false;
local number = obj.getVar("TEMPObj").get_obj_vector_size();
local numberMax = sq_GetLevelData(obj, 63, 6, sq_GetSkillLevel(obj, 63));
if(number >= numberMax){
local state = obj.getState();
if(state == 0 || state == 14){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true);
}
return true;
}
// local skillnumber = sq_GetBonusRateWithPassive(obj, 63, 63, 6, 1.0) + 100;
if(number > 0 && sq_GetSkillLevel(obj, SKILL_GUNNER_VIRTUALRUSH) > 0 && sq_GetLevelData(obj, 63, 7, sq_GetSkillLevel(obj, 63)) > 0 && !sq_GetSkill(obj, 63).isInCoolTime()){
obj.startSkillCoolTime(63, sq_GetSkillLevel(obj, 63), -1);
for(local i = 0; i < number; i++){
local activeObj = sq_GetCNRDObjectToActiveObject(obj.getVar("TEMPObj").get_obj_vector(i));
if(activeObj){
local apdPath = "character/gunner/madeby_kak_mechanic/ap/ap_kk_tempester_buff.nut";
if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, apdPath)){
CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath);
}
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, apdPath, true);
local buffTime = sq_GetLevelData(obj, 63, 8, sq_GetSkillLevel(obj, 63));
sq_EffectLayerAppendage(activeObj,sq_RGB(250,20,10),150,0,0,buffTime);
// AddAppendage.sq_AddEffectBack("character/mage/effect/animation/avatar/avatarauraloopbot_eff_01.ani");//背后
// AddAppendage.sq_AddEffectFront("character/mage/effect/animation/avatar/avatarauralooptop_eff_01.ani");//身前
AddAppendage.sq_SetValidTime(buffTime);
local normalAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_tempester.nut");
local totalDamage = normalAppendage.getVar("custom").get_vector(5);
local totalDamage2 = normalAppendage.getVar("custom").get_vector(6);
normalAppendage.getVar("custom").set_vector(5, totalDamage * 150 / 100);
normalAppendage.getVar("custom").set_vector(6, totalDamage2 * 150 / 100);
local t_01 = normalAppendage.getVar("skill_1").get_timer_vector(0);
local t_02 = normalAppendage.getVar("skill_2").get_timer_vector(0);
local bullet = t_01.getEventTerm();
local missile = t_02.getEventTerm();
print(bullet);
print(missile);
t_01.setEventTerm(bullet / 2);
t_02.setEventTerm(missile / 2);
local moveX = sq_GetDistancePos(obj.getXPos(), obj.getDirection(), 50);
local moveY = obj.getYPos();
if(activeObj.isMovablePos(moveX, moveY)){
activeObj.getVar("move").clear_vector();
activeObj.getVar("move").push_vector(moveX);
activeObj.getVar("move").push_vector(moveY);
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 3);
sq_AddSetStatePacketActiveObject(activeObj, 8, pIntVec, STATE_PRIORITY_USER);
obj.sq_PlaySound("GN_TRMPESTER");
if(obj.getState() == 14){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(14, STATE_PRIORITY_IGNORE_FORCE, true);
}
else if(obj.getState() == 0){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
}
}
return true;
}
local b_useskill = obj.sq_IsUseSkill(63);
if(b_useskill){
local chr = sq_GetMyMasterCharacter();
if(!isSameObject(obj, chr)){
obj.sq_IntVectClear();
obj.sq_IntVectPush(5);
obj.sq_IntVectPush(63);
obj.sq_AddSetStatePacket(STATE_GUNNER_VIRTUALRUSH, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
if(sq_getGrowType(obj) == 3){
local skill_level = sq_GetSkillLevel(obj, SKILL_GUNNER_HS1);
if(skill_level > 0){
sendSkillPacket_hs1(obj,63);
}
else{
obj.sq_IntVectClear();
obj.sq_IntVectPush(5);
obj.sq_IntVectPush(63);
obj.sq_AddSetStatePacket(STATE_GUNNER_VIRTUALRUSH, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
return true;
}
return false;
}
function checkExecutableSkill_MechaDrop_bykk(obj)
{
if(!obj) return false;
if(obj.getVar("virtualrush").getBool(0) == true && !sq_GetSkill(obj, 59).isInCoolTime()){
local effect_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar("VIRTUALRUSH_SUB1").get_obj_vector(0));
local offsetX = sq_getRandom(-50,50);
local offsetY = sq_getRandom(-40,40);
local skill_level = sq_GetSkillLevel(obj, 59);
local number = obj.sq_GetLevelData(59, 3, skill_level);
local distanceX = 50;
if(number >= 30) distanceX = 40;
if(number >= 50) distanceX = 30;
local sperobot_number = obj.sq_GetLevelData(59, 4, skill_level);
obj.getVar("sperobot").clear_vector();
for(local io = 0; io < sperobot_number; io ++){
local numberlen = (number / sperobot_number).tointeger();
local random_number = sq_getRandom(0 + io * numberlen, (io + 1) * numberlen - 1);
obj.getVar("sperobot").push_vector(random_number);
}
for(local i = 1; i < number + 1; i++){
local rebotnumer = 3;
for(local ui = 0; ui < obj.getVar("sperobot").size_vector(); ui++){
if((i - 1) == obj.getVar("sperobot").get_vector(ui)){
rebotnumer = sq_getRandom(1,2).tointeger();
break;
}
}
//printp("i="+i.tostring()+",,"+((i/3).tointeger()*24).tostring()+"\n");
if(i % 3 == 1){
createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,59,rebotnumer,offsetX-150+(i/3).tointeger()*distanceX+sq_getRandom(-5,5),offsetY - 40 + sq_getRandom(-8,8),0);
}
else if(i % 3 == 2){
createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,59,rebotnumer,offsetX-150+(i/3).tointeger()*distanceX+sq_getRandom(-5,5),offsetY + sq_getRandom(-8,8),0);
}
else if(i % 3 == 0){
createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,59,rebotnumer,offsetX-175+(i/3).tointeger()*distanceX+sq_getRandom(-5,5),offsetY + 40 + sq_getRandom(-8,8),0);
}
}
sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotafront_00.ani", 0, 1, 1);
sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotaback_00.ani", 0, 1, 1);
sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotgunnerback1_00.ani", 0, 1, 1);
//obj.startSkillCoolTime(59, sq_GetSkillLevel(obj, 59), -1);
if(obj.getState() == 14){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(14, STATE_PRIORITY_IGNORE_FORCE, true);
}
else if(obj.getState() == 0){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true);
}
obj.sq_PlaySound("DROPSHIP_PASSING");
obj.sq_PlaySound("DROPSHIP_RADIO_01");
return true;
}
local b_useskill = obj.sq_IsUseSkill(59);
if(b_useskill){
obj.sq_IntVectClear();
obj.sq_IntVectPush(4);
obj.sq_AddSetStatePacket(STATE_GUNNER_VIRTUALRUSH, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkExecutableSkill_SparrowFactory_bykk(obj)
{
if(!obj) return false;
if(obj.getVar("virtualrush").getBool(0) == true && !sq_GetSkill(obj, 83).isInCoolTime()){
local effect_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar("VIRTUALRUSH_SUB1").get_obj_vector(0));
local offsetX = sq_getRandom(-50,50);
local offsetY = sq_getRandom(-30,60);
createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,83,1,offsetX,offsetY,0);
local number = obj.sq_GetIntData(83, 2);
for(local i = 0; i < number; i++){
createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,83,2,offsetX+sq_getRandom(-100,100),offsetY+sq_getRandom(-20,20),120);
}
sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotafront_00.ani", 0, 1, 1);
sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotaback_00.ani", 0, 1, 1);
sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotgunnerback1_00.ani", 0, 1, 1);
//obj.startSkillCoolTime(83, sq_GetSkillLevel(obj, 83), -1);
if(obj.getState() == 14){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(14, STATE_PRIORITY_IGNORE_FORCE, true);
}
else if(obj.getState() == 0){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true);
}
obj.sq_PlaySound("GN_SPARROW_FACTORY");
return true;
}
local b_useskill = obj.sq_IsUseSkill(83);
if(b_useskill){
if(sq_getGrowType(obj) == 3){
local skill_level = sq_GetSkillLevel(obj, SKILL_GUNNER_HS1);
if(skill_level > 0){
sendSkillPacket_hs1(obj,83);
}
else{
obj.sq_IntVectClear();
obj.sq_IntVectPush(5);
obj.sq_IntVectPush(83);
obj.sq_AddSetStatePacket(STATE_GUNNER_VIRTUALRUSH, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
return true;
}
return false;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_robotsexplosion_bykk(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_GUNNER_ROBOTSEXPLOSION);
if (isUse)
{
obj.sq_IsEnterSkillLastKeyUnits(SKILL_GUNNER_ROBOTSEXPLOSION);
obj.sq_AddSetStatePacket(SKILL_GUNNER_ROBOTSEXPLOSION, STATE_PRIORITY_USER, false);
return true;
}
return false;
}
function onSetState_robotsexplosion_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(CUSTOM_ANI_GUNNER_COMMAND);
local skill_level = sq_GetSkillLevel(obj, SKILL_GUNNER_ROBOTSEXPLOSION);//技能等级
local castTime = sq_GetCastTime(obj, SKILL_GUNNER_ROBOTSEXPLOSION, skill_level) / 3;//得到技能里面的施放时间
sq_StartDrawCastGauge(obj, castTime, true);
obj.getVar("robotsexplosion").setBool(0,true);
}
function onEndCurrentAni_robotsexplosion_bykk(obj)
{
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
function onProcCon_robotsexplosion_bykk(obj)
{
if(!obj) return;
local stateTime = obj.sq_GetStateTimer();
local bDownKey = obj.isDownSkillLastKey();
local posX = obj.getXPos();
local posY = obj.getYPos();
local skill_level = sq_GetSkillLevel(obj, SKILL_GUNNER_ROBOTSEXPLOSION);
local size = obj.sq_GetLevelData(SKILL_GUNNER_ROBOTSEXPLOSION, 0, skill_level) / 2;
local sizeRate = size.tofloat() / 210;
if(!bDownKey && stateTime < 250 && obj.getVar("robotsexplosion").getBool(0) == true){
for(local i =1; i < 4; i++){
local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/robotsexplosion"+i.tostring()+".ani", 0, 0, 0);
local pAni = pooledObj.getCurrentAnimation();
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
}
obj.getVar("robotsexplosion").setBool(0,false);
obj.getVar("robotsexplosion").clear_vector();
obj.setTimeEvent(0, 350 - stateTime, 1, false);
if(obj.getVar("virtualrush").getBool(0) == true){
sendrobotstate_byKK(obj,3);
local hs1_obj01 = sq_GetCNRDObjectToCollisionObject(obj.getVar("hs1_obj").get_obj_vector(0));
local hs1_obj02 = sq_GetCNRDObjectToCollisionObject(obj.getVar("hs1_obj").get_obj_vector(1));
if(hs1_obj01.getZPos() > 200 && hs1_obj01.getState() == 27){
hs1_obj01.addSetStatePacket(sq_getRandom(20,25).tointeger(), null, STATE_PRIORITY_AUTO, false, "");
}
else if(hs1_obj02.getZPos() > 200 && hs1_obj02.getState() == 27){
hs1_obj02.addSetStatePacket(sq_getRandom(20,25).tointeger(), null, STATE_PRIORITY_AUTO, false, "");
}
obj.sq_PlaySound("GN_VIRTUALRUSH_02");
}
else{
sendrobotstate_byKK(obj,1);
obj.sq_PlaySound("GN_FIRE");
}
}
else if((!bDownKey && stateTime >= 250 && obj.getVar("robotsexplosion").getBool(0) == true) || (bDownKey && stateTime >= 1200 && obj.getVar("robotsexplosion").getBool(0) == true)){
for(local i =1; i < 4; i++){
local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/robotsexplosion"+i.tostring()+".ani", 0, 0, 0);
local pAni = pooledObj.getCurrentAnimation();
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
}
local aimPosX = obj.sq_GetAimPosX(posX, posY, false);
local aimPosY = obj.sq_GetAimPosY(posX, posY, false);
// printp("aimPosX="+aimPosX.tostring()+" aimPosY="+aimPosY.tostring()+"\n");
obj.getVar("robotsexplosion").clear_vector();
obj.getVar("robotsexplosion").push_vector(aimPosX);
obj.getVar("robotsexplosion").push_vector(aimPosY);
obj.getVar("robotsexplosion").setBool(0,false);
obj.setTimeEvent(0, 100, 1, false);
if(obj.getVar("virtualrush").getBool(0) == true){
sendrobotstate_byKK(obj,5);
local hs1_obj01 = sq_GetCNRDObjectToCollisionObject(obj.getVar("hs1_obj").get_obj_vector(0));
local hs1_obj02 = sq_GetCNRDObjectToCollisionObject(obj.getVar("hs1_obj").get_obj_vector(1));
if(hs1_obj01.getZPos() > 200 && hs1_obj01.getState() == 27){
hs1_obj01.addSetStatePacket(sq_getRandom(20,25).tointeger(), null, STATE_PRIORITY_AUTO, false, "");
}
else if(hs1_obj02.getZPos() > 200 && hs1_obj02.getState() == 27){
hs1_obj02.addSetStatePacket(sq_getRandom(20,25).tointeger(), null, STATE_PRIORITY_AUTO, false, "");
}
obj.sq_PlaySound("GN_VIRTUALRUSH_02");
}
else{
sendrobotstate_byKK(obj,2);
obj.sq_PlaySound("GN_FALLDOWN");
}
}
}
function onKeyFrameFlag_robotsexplosion_bykk(obj, flagIndex)
{
if(!obj) return false;
if(flagIndex == 1){
//
if(obj.getVar("robotsexplosion").getBool(0) == true){
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
local offsetX = 130;
offsetX = obj.sq_GetDistancePos(posX, obj.sq_GetDirection(), offsetX);
local vX = 800;
local vY = 300;
obj.sq_AddAimPointMark(offsetX, posY, vX, vY);
}
}
return true;
}
function onTimeEvent_robotsexplosion_bykk(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 0:
obj.sq_RemoveAimPointMark();
if(obj.getVar("virtualrush").getBool(0) == true){
createPointFireExplosion_byKK(obj,3);
obj.getVar("VIRTUALRUSH_SUB1").clear_obj_vector();
obj.getVar("VIRTUALRUSH_SUB2").clear_obj_vector();
obj.getVar("virtualrush").setBool(0,false);
}
else{
createPointFireExplosion_byKK(obj,1);
}
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
}
}
function onEndState_robotsexplosion_bykk(obj, new_state)
{
if(!obj) return;
if(new_state != SKILL_GUNNER_ROBOTSEXPLOSION){
obj.sq_RemoveAimPointMark();
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_robotrx60_bykk(obj)
{
if (!obj) return false;
if(obj.getVar("virtualrush").getBool(0) == true && !sq_GetSkill(obj, SKILL_GUNNER_ROBOTRX60).isInCoolTime()){
local effect_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar("VIRTUALRUSH_SUB1").get_obj_vector(0));
local offsetX = sq_getRandom(-150,150);
local offsetY = sq_getRandom(-30,30);
createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,SKILL_GUNNER_ROBOTRX60,1,offsetX,offsetY,0);
sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotafront_00.ani", 0, 1, 1);
sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotaback_00.ani", 0, 1, 1);
sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotgunnerback1_00.ani", 0, 1, 1);
obj.startSkillCoolTime(SKILL_GUNNER_ROBOTRX60, sq_GetSkillLevel(obj, SKILL_GUNNER_ROBOTRX60), -1);
obj.sq_PlaySound("GN_LADNRUNNER");
return true;
}
local isUse = obj.sq_IsUseSkill(SKILL_GUNNER_ROBOTRX60);
if (isUse)
{
local skill_level = sq_GetSkillLevel(obj, SKILL_GUNNER_HS1);
if(skill_level > 0){
sendSkillPacket_hs1(obj,SKILL_GUNNER_ROBOTRX60);
}
else{
obj.sq_AddSetStatePacket(STATE_GUNNER_ROBOTRX60, STATE_PRIORITY_USER, false);
}
return true;
}
return false;
}
function onSetState_robotrx60_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(CUSTOM_ANI_SETROBOT);
local skill_level = sq_GetSkillLevel(obj, SKILL_GUNNER_ROBOTRX60);
local level = obj.sq_GetLevelData(SKILL_GUNNER_ROBOTRX60, 0, skill_level);
summonmonster_mechanic(obj,100,0,0,0,77630,600000,level,0);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_ateam_bykk(obj)
{
if (!obj) return false;
if(obj.getVar("virtualrush").getBool(0) == true && !sq_GetSkill(obj, SKILL_GUNNER_ATEAM).isInCoolTime()){
local effect_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar("VIRTUALRUSH_SUB1").get_obj_vector(0));
local offsetX = sq_getRandom(-150,150);
local offsetY = sq_getRandom(-30,30);
createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,SKILL_GUNNER_ATEAM,1,offsetX,offsetY-25,0);
createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,SKILL_GUNNER_ATEAM,2,offsetX,offsetY+25,0);
createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,SKILL_GUNNER_ATEAM,3,offsetX+60,offsetY-1,0);
createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,SKILL_GUNNER_ATEAM,4,offsetX-50,offsetY-50,0);
createSkillPassiveObj_nanjixie(obj,effect_obj,SKILL_GUNNER_VIRTUALRUSH,2,0,SKILL_GUNNER_ATEAM,5,offsetX-50,offsetY+50,0);
sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotafront_00.ani", 0, 1, 1);
sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotaback_00.ani", 0, 1, 1);
sq_AddDrawOnlyAniFromParent(effect_obj,"character/gunner/effect/animation/virtualrush/castrobotgunnerback1_00.ani", 0, 1, 1);
obj.startSkillCoolTime(SKILL_GUNNER_ATEAM, sq_GetSkillLevel(obj, SKILL_GUNNER_ATEAM), -1);
obj.sq_PlaySound("GN_LADNRUNNER");
return true;
}
local isUse = obj.sq_IsUseSkill(SKILL_GUNNER_ATEAM);
if (isUse)
{
local skill_level = sq_GetSkillLevel(obj, SKILL_GUNNER_HS1);
if(skill_level > 0){
sendSkillPacket_hs1(obj,SKILL_GUNNER_ATEAM);
}
else{
obj.sq_AddSetStatePacket(STATE_GUNNER_ATEAM, STATE_PRIORITY_USER, false);
}
return true;
}
return false;
}
function onSetState_ateam_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(CUSTOM_ANI_SETROBOT);
local skill_level = sq_GetSkillLevel(obj, SKILL_GUNNER_ATEAM);
local level = obj.sq_GetLevelData(SKILL_GUNNER_ATEAM, 0, skill_level);
summonmonster_mechanic(obj,150, -25, 0, 0, 77625, 600000, level, 0);
summonmonster_mechanic(obj,150, 25, 0, 0, 77626, 600000, level, 0);
summonmonster_mechanic(obj,210, 0, 0, 0, 77627, 600000, level, 0);
summonmonster_mechanic(obj,100, -50, 0, 0, 77628, 600000, level, 0);
summonmonster_mechanic(obj,100, 50, 0, 0, 77629, 600000, level, 0);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_virtualrush_bykk(obj)
{
if (!obj) return false;
if(obj.getVar("virtualrush").getBool(0) == true){
obj.sq_IsEnterSkillLastKeyUnits(SKILL_GUNNER_VIRTUALRUSH);
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(STATE_GUNNER_VIRTUALRUSH, STATE_PRIORITY_USER, true);
return true;
}
local isUse = obj.sq_IsUseSkill(SKILL_GUNNER_VIRTUALRUSH);
if (isUse){
sendSkillPacket_hs1(obj,SKILL_GUNNER_VIRTUALRUSH);
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_GUNNER_VIRTUALRUSH, STATE_PRIORITY_USER, true);
return true;
}
return false;
}
function onSetState_virtualrush_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
local substate = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(substate);
switch(substate){
case 1:
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(CUSTOM_ANI_VIRTUALRUSH_BODY);
obj.sq_PlaySound("GN_VIRTUALRUSH_01");
obj.getVar("virtualrush").setBool(0,true);
break;
case 2:
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(CUSTOM_ANI_VIRTUALRUSH_EXPLOSION1);
obj.sq_PlaySound("GN_VIRTUALRUSH_02");
obj.getVar("virtualrush").setBool(1,true);
break;
case 3:
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(CUSTOM_ANI_VIRTUALRUSH_EXPLOSION2);
//obj.sq_PlaySound("GN_VIRTUALRUSH_03");
local hs1_obj01 = sq_GetCNRDObjectToCollisionObject(obj.getVar("hs1_obj").get_obj_vector(0));
local hs1_obj02 = sq_GetCNRDObjectToCollisionObject(obj.getVar("hs1_obj").get_obj_vector(1));
if(hs1_obj01.getZPos() > 200 && hs1_obj01.getState() == 27){
hs1_obj01.addSetStatePacket(sq_getRandom(20,25).tointeger(), null, STATE_PRIORITY_AUTO, false, "");
}
else if(hs1_obj02.getZPos() > 200 && hs1_obj02.getState() == 27){
hs1_obj02.addSetStatePacket(sq_getRandom(20,25).tointeger(), null, STATE_PRIORITY_AUTO, false, "");
}
break;
case 4://空投支援
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(CUSTOM_ANI_GUNNER_COMMAND);
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(0, 0);
local speedRate = delaySum.tofloat() / 90.0;
local castTime = (1000.0 * speedRate).tointeger();
sq_StartDrawCastGauge(obj, 100, true);
obj.setTimeEvent(1, castTime, 1, false);
obj.setTimeEvent(2, 100, 1, false);
obj.sq_PlaySound("DROPSHIP_PASSING");
obj.sq_PlaySound("DROPSHIP_RADIO_01");
break;
case 5://拦截机工厂
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(CUSTOM_ANI_SETROBOT);
sq_StartDrawCastGauge(obj, 100, true);
local skillIndex = sq_GetVectorData(datas, 1);
switch(skillIndex){
case 83:
sq_BinaryStartWrite();
sq_BinaryWriteDword(83);//skillIndex
sq_BinaryWriteDword(1);//subtype
sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_PASSIVEOBJECT , 0, 150, 0, 0, obj.getDirection());
obj.sq_PlaySound("GN_SPARROW_FACTORY");
break;
case 29:
local skill_level = sq_GetSkillLevel(obj, skillIndex);
local bonusrate = sq_GetBonusRateWithPassive(obj, skillIndex, 29, 1, 1.0) + 100;
local lifetime = obj.sq_GetLevelData(skillIndex, 3, skill_level);
local resttime = obj.sq_GetIntData(skillIndex, 2);
local bullet_number = obj.sq_GetIntData(skillIndex, 1);
sq_BinaryStartWrite();
sq_BinaryWriteDword(29);//skillIndex
sq_BinaryWriteDword(4);//subtype
sq_BinaryWriteDword(bonusrate);
sq_BinaryWriteDword(lifetime);
sq_BinaryWriteDword(resttime);
sq_BinaryWriteDword(bullet_number);
sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_PASSIVEOBJECT , 0, 80, 0, 0, obj.getDirection());
obj.sq_PlaySound("GN_VIPER");
break;
case 106:
local skill_level = sq_GetSkillLevel(obj, skillIndex);
local bonusrate = sq_GetBonusRateWithPassive(obj, skillIndex, -1, 1, 1.0) + 100;
local bonusrate2 = sq_GetBonusRateWithPassive(obj, skillIndex, -1, 4, 1.0) + 100;
local lifetime = obj.sq_GetLevelData(skillIndex, 3, skill_level);
local resttime = obj.sq_GetIntData(skillIndex, 2);
local bullet_number = obj.sq_GetIntData(skillIndex, 1);
sq_BinaryStartWrite();
sq_BinaryWriteDword(29);//skillIndex
sq_BinaryWriteDword(5);//subtype
sq_BinaryWriteDword(bonusrate);
sq_BinaryWriteDword(lifetime);
sq_BinaryWriteDword(resttime);
sq_BinaryWriteDword(bullet_number);
sq_BinaryWriteDword(bonusrate2);
if(sq_GetLevelData(obj, skillIndex, 8, skill_level) > 0){
sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_PASSIVEOBJECT , 0, 80, -5, 0, obj.getDirection());
sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_PASSIVEOBJECT , 0, 80, 5, 0, obj.getDirection());
}
else sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_PASSIVEOBJECT , 0, 80, 0, 0, obj.getDirection());
obj.sq_PlaySound("GN_VIPER");
break;
case 28:
local skill_level = sq_GetSkillLevel(obj, 28);
local level = obj.sq_GetLevelData(28, 0, skill_level);
summonmonster_mechanic(obj, 50, 0, 0, 0, 77621, 600000, level, 0);
if(sq_GetLevelData(obj, 28, 6, skill_level) > 0) summonmonster_mechanic(obj, 55, 0, -5, 0, 77621, 600000, level, 0);
obj.sq_PlaySound("R_GN_COUNTDOWN");
break;
case 27:
local skill_level = sq_GetSkillLevel(obj, 27);
local level = obj.sq_GetLevelData(27, 0, skill_level);
local skill_level02 = sq_GetSkillLevel(obj, 42);
if(skill_level02 > 0){
summonmonster_mechanic(obj, 50, -10, 0, 0, 77620, 600000, level, 0);
summonmonster_mechanic(obj, 50, 20, 0, 0, 77620, 600000, level, 0);
}
else{
summonmonster_mechanic(obj, 50, 0, 0, 0, 77620, 600000, level, 0);
}
obj.sq_PlaySound("GN_LADNRUNNER");
break;
case 63:
local skill_level = sq_GetSkillLevel(obj, skillIndex);
local level = obj.sq_GetLevelData(skillIndex, 0, skill_level);
local number = obj.sq_GetLevelData(skillIndex, 6, skill_level);
local time = obj.sq_GetLevelData(skillIndex, 5, skill_level);
for(local i = 0; i < number; i++){
summonmonster_mechanic(obj,100 + i * 30,0,150,0,77623,time,level,0);//GN_TRMPESTER 60018
}
obj.sq_PlaySound("GN_TRMPESTER");
break;
}
break;
}
}
function onEndCurrentAni_virtualrush_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;
case 2:
obj.sq_IntVectClear();
obj.sq_IntVectPush(3);
obj.sq_AddSetStatePacket(STATE_GUNNER_VIRTUALRUSH, STATE_PRIORITY_USER, true);
break;
case 3:
// for(local i = 0; i < obj.getVar("VIRTUALRUSH_SUB1").get_obj_vector_size(); i++){
// local effect_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar("VIRTUALRUSH_SUB1").get_obj_vector(i));
// effect_obj.setValid(false);
// }
obj.getVar("VIRTUALRUSH_SUB1").clear_obj_vector();
obj.getVar("VIRTUALRUSH_SUB2").clear_obj_vector();
obj.getVar("virtualrush").setBool(0,false);
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
case 5:
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
}
}
function onProcCon_virtualrush_bykk(obj)
{
if(!obj) return;
local stateTime = obj.sq_GetStateTimer();
local substate = obj.getSkillSubState();
local bDownKey = obj.isDownSkillLastKey();
switch(substate){
case 2:
if(!bDownKey && stateTime < 250 && obj.getVar("virtualrush").getBool(1) == true){
obj.getVar("virtualrush").setBool(1,false);
obj.getVar("virtualrush").clear_vector();
obj.setTimeEvent(0, 350 - stateTime, 1, false);
sendrobotstate_byKK(obj,3);
}
else if((!bDownKey && stateTime >= 250 && obj.getVar("virtualrush").getBool(1) == true) || (bDownKey && stateTime >= 1200 && obj.getVar("virtualrush").getBool(1) == true)){
local aimPosX = obj.sq_GetAimPosX(obj.getXPos(), obj.getYPos(), false);
local aimPosY = obj.sq_GetAimPosY(obj.getXPos(), obj.getYPos(), false);
// printp("aimPosX="+aimPosX.tostring()+" aimPosY="+aimPosY.tostring()+"\n");
obj.getVar("virtualrush").clear_vector();
obj.getVar("virtualrush").push_vector(aimPosX);
obj.getVar("virtualrush").push_vector(aimPosY);
obj.getVar("virtualrush").setBool(1,false);
obj.setTimeEvent(0, 200, 1, false);
sendrobotstate_byKK(obj,4);
local hs1_obj01 = sq_GetCNRDObjectToCollisionObject(obj.getVar("hs1_obj").get_obj_vector(0));
local hs1_obj02 = sq_GetCNRDObjectToCollisionObject(obj.getVar("hs1_obj").get_obj_vector(1));
if(hs1_obj01.getZPos() > 200 && hs1_obj01.getState() == 27){
sq_setCurrentAxisPos(hs1_obj01, 0, aimPosX);
sq_setCurrentAxisPos(hs1_obj01, 1, aimPosY);
}
else if(hs1_obj02.getZPos() > 200 && hs1_obj02.getState() == 27){
sq_setCurrentAxisPos(hs1_obj02, 0, aimPosX);
sq_setCurrentAxisPos(hs1_obj02, 1, aimPosY);
}
}
break;
}
}
function onKeyFrameFlag_virtualrush_bykk(obj, flagIndex)
{
if(!obj) return false;
if(flagIndex == 1){
if(obj.getVar("virtualrush").getBool(1) == true){
local posX = obj.getXPos();
local posY = obj.getYPos();
local offsetX = 130;
offsetX = obj.sq_GetDistancePos(posX, obj.sq_GetDirection(), offsetX);
local vX = 800;
local vY = 300;
obj.sq_AddAimPointMark(offsetX, posY, vX, vY);
}
}
return true;
}
function onTimeEvent_virtualrush_bykk(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 0:
createPointFireExplosion_byKK(obj,2);
obj.sq_RemoveAimPointMark();
obj.sq_IntVectClear();
obj.sq_IntVectPush(3);
obj.sq_AddSetStatePacket(STATE_GUNNER_VIRTUALRUSH, STATE_PRIORITY_USER, true);
break;
case 1:
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
case 2:
local baseX = sq_GetDistancePos(obj.getXPos(), obj.getDirection(), -150);
if(!obj.isMovablePos(baseX, obj.getYPos())) baseX = sq_GetDistancePos(obj.getXPos(), obj.getDirection(), -100);
if(!obj.isMovablePos(baseX, obj.getYPos())) baseX = sq_GetDistancePos(obj.getXPos(), obj.getDirection(), -50);
if(!obj.isMovablePos(baseX, obj.getYPos())) baseX = sq_GetDistancePos(obj.getXPos(), obj.getDirection(), 0);
sq_BinaryStartWrite();
sq_BinaryWriteDword(59);//skillIndex
sq_BinaryWriteDword(1);//subtype
sq_BinaryWriteDword(baseX);//subtype
sq_BinaryWriteDword(obj.getYPos());//subtype
sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_PASSIVEOBJECT , 0, -300, 0, 0, obj.getDirection());
break;
case 3:
break;
}
}
function onEndState_virtualrush_bykk(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_GUNNER_VIRTUALRUSH){
obj.sq_RemoveAimPointMark();
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_holdandgo_bykk(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_GUNNER_HOLDANDGO);
if (isUse){
obj.sq_AddSetStatePacket(STATE_GUNNER_HOLDANDGO, STATE_PRIORITY_USER, false);
return true;
}
return false;
}
function onSetState_holdandgo_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(CUSTOM_ANI_GUNNER_COMMAND);
local skill_level = sq_GetSkillLevel(obj, SKILL_GUNNER_HOLDANDGO);
local castTime = sq_GetCastTime(obj, SKILL_GUNNER_HOLDANDGO, skill_level) / 3;
sq_StartDrawCastGauge(obj, castTime, true);
// local skill = sq_GetSkill(obj, SKILL_GUNNER_HOLDANDGO);
// if(skill.isSealActiveFunction()){
// skill.setSealActiveFunction(false);//?
// // if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/gunner/z_nanjixie/ap2/ap_holdandgo.nut")){
// // CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_GUNNER_HOLDANDGO, false, "character/gunner/z_nanjixie/ap2/ap_holdandgo.nut", true);
// // }
// obj.getVar("holdandgo").setBool(0,true);
// obj.sq_PlaySound("HOLD_GO_CAST");
// }
// else{
// skill.setSealActiveFunction(true);//?
// // if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/gunner/z_nanjixie/ap2/ap_holdandgo.nut")){
// // CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/gunner/z_nanjixie/ap2/ap_holdandgo.nut");
// // }
// obj.getVar("holdandgo").setBool(0,false);
// obj.sq_PlaySound("HOLD_GO_FINGER");
// }
if(obj.getVar("holdandgo").getBool(0)){
obj.getVar("holdandgo").setBool(0,false);
obj.sq_PlaySound("HOLD_GO_FINGER");
}
else{
obj.getVar("holdandgo").setBool(0,true);
obj.sq_PlaySound("HOLD_GO_CAST");
}
// print(obj.getVar("holdandgo").getBool(0));
}
function onEndCurrentAni_holdandgo_bykk(obj)
{
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
function onKeyFrameFlag_holdandgo_bykk(obj, flagIndex)
{
if(!obj) return false;
if(flagIndex == 1){
obj.setTimeEvent(0, 100, 1, false);
}
return true;
}
function onTimeEvent_holdandgo_bykk(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 0:
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_dimensionrunner_bykk(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_GUNNER_DIMENSIONRUNNER);
if (isUse)
{
obj.sq_IsEnterSkillLastKeyUnits(SKILL_GUNNER_DIMENSIONRUNNER);
obj.sq_AddSetStatePacket(STATE_GUNNER_DIMENSIONRUNNER, STATE_PRIORITY_USER, false);
return true;
}
return false;
}
function onSetState_dimensionrunner_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(CUSTOM_ANI_GUNNER_COMMAND);
obj.getVar("dimensionrunner").setBool(0,true);
//sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/new/missileexplosiontalisman_03.ani",150,0,0);
}
function onEndCurrentAni_dimensionrunner_bykk(obj)
{
if(!obj) return;
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
function onKeyFrameFlag_dimensionrunner_bykk(obj, flagIndex)
{
if(!obj) return false;
if(flagIndex == 1 && obj.getVar("dimensionrunner").getBool(0) == true){
local posX = obj.getXPos();
local posY = obj.getYPos();
local vX = 500;
local vY = 250;
obj.sq_AddAimPointMark(posX, posY, vX, vY);
}
return true;
}
function onProcCon_dimensionrunner_bykk(obj)
{
if(!obj) return;
local stateTime = obj.sq_GetStateTimer();
local bDownKey = obj.isDownSkillLastKey();
local posX = obj.getXPos();
local posY = obj.getYPos();
if(!bDownKey && stateTime < 250 && obj.getVar("dimensionrunner").getBool(0) == true){//原地生成
obj.getVar("dimensionrunner").setBool(0,false);
obj.setTimeEvent(0, 350 - stateTime, 1, false);
local totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_GUNNER_DIMENSIONRUNNER, SKILL_GUNNER_DIMENSIONRUNNER, 1, 1.0) + 100;
local totalDamage2 = sq_GetBonusRateWithPassive(obj, SKILL_GUNNER_DIMENSIONRUNNER, SKILL_GUNNER_DIMENSIONRUNNER, 0, 1.0) + 100;
createSkillPassiveObj_nanjixie(obj,obj,SKILL_GUNNER_DIMENSIONRUNNER,1,totalDamage,6,totalDamage2,0,0,0);
}
else if((!bDownKey && stateTime >= 250 && obj.getVar("dimensionrunner").getBool(0) == true) || (bDownKey && stateTime >= 1200 && obj.getVar("dimensionrunner").getBool(0) == true)){//定点生成
obj.getVar("dimensionrunner").setBool(0,false);
local aimPosX = obj.sq_GetAimPosX(posX, posY, false);
local aimPosY = obj.sq_GetAimPosY(posX, posY, false);
local offsetX = aimPosX - posX;
local offsetY = aimPosY - posY;
if(obj.getDirection() == ENUM_DIRECTION_LEFT) offsetX = posX - aimPosX;
local totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_GUNNER_DIMENSIONRUNNER, SKILL_GUNNER_DIMENSIONRUNNER, 1, 1.0) + 100;
local totalDamage2 = sq_GetBonusRateWithPassive(obj, SKILL_GUNNER_DIMENSIONRUNNER, SKILL_GUNNER_DIMENSIONRUNNER, 0, 1.0) + 100;
createSkillPassiveObj_nanjixie(obj,obj,SKILL_GUNNER_DIMENSIONRUNNER,1,totalDamage,6,totalDamage2,offsetX,offsetY,0);
obj.setTimeEvent(0, 100, 1, false);
}
}
function onTimeEvent_dimensionrunner_bykk(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 0:
obj.sq_RemoveAimPointMark();
obj.getVar("dimensionrunner").setBool(0, false);
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
}
}
function onEndState_dimensionrunner_bykk(obj, new_state)
{
if(!obj) return;
if(new_state != SKILL_GUNNER_DIMENSIONRUNNER){
obj.sq_RemoveAimPointMark();
obj.getVar("dimensionrunner").setBool(0, false);
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_hellmarch_bykk(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_GUNNER_HELLMARCH);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_GUNNER_HELLMARCH, STATE_PRIORITY_USER, true);
return true;
}
return false;
}
function onSetState_hellmarch_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
local substate = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(substate);
switch(substate){
case 0:
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(CUSTOM_ANI_VIRTUALRUSH_BODY);
obj.sq_PlaySound("GN_HELLMARCH");
local direction = obj.getDirection();
createSkillPassiveObj_hellmarch_bykk(obj,1,0,4000,0,-150,0,-75,direction);
createSkillPassiveObj_hellmarch_bykk(obj,2,0,4000,0,-150,-175,-75,direction);
createSkillPassiveObj_hellmarch_bykk(obj,1,0,4000,0,-750,0,-75,sq_GetOppositeDirection(direction));
createSkillPassiveObj_hellmarch_bykk(obj,2,0,4000,0,-750,-175,-75,sq_GetOppositeDirection(direction));
obj.getVar("hellmarch").setBool(0, true);
print("set hellmarch");
break;
case 1:
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(CUSTOM_ANI_VIRTUALRUSH_EXPLOSION1);
break;
}
}
function onEndCurrentAni_hellmarch_bykk(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
switch(substate){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_GUNNER_HELLMARCH, STATE_PRIORITY_USER, true);
break;
case 1:
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
}
}
function onKeyFrameFlag_hellmarch_bykk(obj, flagIndex)
{
if(!obj) return false;
obj.setTimeEvent(0, 100, 1, false);
return true;
}
function onTimeEvent_hellmarch_bykk(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 0:
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
}
}
function createSkillPassiveObj_hellmarch_bykk(obj,subtype,totalDamage,etc_num1,etc_num2,x,y,z,direction)
{
sq_BinaryStartWrite();
sq_BinaryWriteDword(SKILL_GUNNER_HELLMARCH);
sq_BinaryWriteDword(subtype);//subtype
sq_BinaryWriteDword(totalDamage);
sq_BinaryWriteDword(etc_num1);
sq_BinaryWriteDword(etc_num2);
sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_PASSIVEOBJECT , 0, x, y, z, direction);
}
function checkExecutableSkill_G1(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_GUNNER_G1);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_GUNNER_G1, STATE_PRIORITY_USER, true);
return true;
}
return false;
}
function checkCommandEnable_G1(obj)
{
if (!obj) return false;
return true;
}
function onSetState_G1(obj, state, datas, isResetTimer)
{
if(!obj) return;
local substate = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(substate);
switch(substate){
case 0:
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(CUSTOM_ANI_GUNNER_COMMAND);
obj.sq_PlaySound("GN_G1");
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local castTime = sq_GetCastTime(obj, SKILL_GUNNER_G1, sq_GetSkillLevel(obj, SKILL_GUNNER_G1));
obj.setTimeEvent(0, castTime, 1, false);
sq_StartDrawCastGauge(obj, castTime, true);
break;
}
}
function onEndCurrentAni_G1(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
switch(substate){
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
}
}
function onProcCon_G1(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_G1(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1:
local skillLevel = sq_GetSkillLevel(obj, SKILL_GUNNER_G1);
local totalDamage = sq_GetLevelData(obj, SKILL_GUNNER_G1, 0, skillLevel);
local lifeTime = sq_GetLevelData(obj, SKILL_GUNNER_G1, 1, skillLevel) + 150;
local hitDelayRate = sq_GetLevelData(obj, SKILL_GUNNER_G1, 2, skillLevel);
local hitCoolTime = sq_GetIntData(obj, SKILL_GUNNER_G1, 4);
local sizeRate = sq_GetIntData(obj, SKILL_GUNNER_G1, 7);
local offset = [-75,0,60];
local Gset = obj.getVar("Gset").getInt(10);
switch(Gset){
case SKILL_GUNNER_G2:
local size = obj.getVar("G2_obj").get_obj_vector_size();
if(size > 0){
local g2_addRate = sq_GetLevelData(obj, SKILL_GUNNER_G1, 3, skillLevel);
totalDamage = totalDamage * (100 + g2_addRate) / 100;
local loadSlot = obj.sq_GetSkillLoad(Gset);
if(loadSlot){
local allCoolTime = loadSlot.getEndCoolTime();
local nowCoolTime = loadSlot.getCurrentCoolTime();
lifeTime = allCoolTime - nowCoolTime + sq_GetIntData(obj, SKILL_GUNNER_G1, 2) + 150;
}
offset = [50, 0, 60];
obj.sq_RemoveSkillLoad(Gset);
for(local i = 0; i < size; i++){
local G2_obj = obj.getVar("G2_obj").get_obj_vector(i);
if(G2_obj){
local colObj = sq_GetCNRDObjectToCollisionObject(G2_obj);
colObj.addSetStatePacket(24, null, STATE_PRIORITY_IGNORE_FORCE, false, "");
}
}
}
break;
case SKILL_GUNNER_G3:
local size = obj.getVar("G3_obj").get_obj_vector_size();
if(size > 0){
local g3_addRate = sq_GetLevelData(obj, SKILL_GUNNER_G1, 4, skillLevel);
totalDamage = totalDamage * (100 + g3_addRate) / 100;
local loadSlot = obj.sq_GetSkillLoad(Gset);
if(loadSlot){
local allCoolTime = loadSlot.getEndCoolTime();
local nowCoolTime = loadSlot.getCurrentCoolTime();
lifeTime = allCoolTime - nowCoolTime + sq_GetIntData(obj, SKILL_GUNNER_G1, 2) + 150;
}
obj.sq_RemoveSkillLoad(Gset);
for(local i = 0; i < size; i++){
local G3_obj = obj.getVar("G3_obj").get_obj_vector(i);
if(G3_obj){
local colObj = sq_GetCNRDObjectToCollisionObject(G3_obj);
colObj.addSetStatePacket(24, null, STATE_PRIORITY_IGNORE_FORCE, false, "");
}
}
}
size = obj.getVar("G3_att_obj").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local G3_obj = obj.getVar("G3_att_obj").get_obj_vector(i);
if(G3_obj){
local colObj = sq_GetCNRDObjectToCollisionObject(G3_obj);
colObj.setValid(false);
}
}
}
break;
}
sq_BinaryStartWrite();
sq_BinaryWriteDword(SKILL_GUNNER_G1);//skillIndex
sq_BinaryWriteDword(1);//subtype
sq_BinaryWriteDword(totalDamage);
sq_BinaryWriteDword(lifeTime);
sq_BinaryWriteDword(hitDelayRate);
sq_BinaryWriteDword(hitCoolTime);
sq_BinaryWriteDword(sizeRate);
sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_PASSIVEOBJECT, 0, offset[0], offset[1], offset[2], obj.getDirection());
obj.sq_AddSkillLoad(SKILL_GUNNER_G1, 16, 1, lifeTime);
local loadSlot = obj.sq_GetSkillLoad(SKILL_GUNNER_G1);
obj.getVar("Gset").setInt(10, SKILL_GUNNER_G1);
loadSlot.setStartCool();
break;
}
return true;
}
function onTimeEvent_G1(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 0:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
}
}
function onEndState_G1(obj, new_state)
{
if(!obj) return;
if(new_state != SKILL_GUNNER_G1){
sq_EndDrawCastGauge(obj);
}
}
function checkExecutableSkill_G2(obj)
{
if (!obj) return false;
local size = obj.getVar("G2_obj").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local G2_obj = obj.getVar("G2_obj").get_obj_vector(i);
if(G2_obj){
local colObj = sq_GetCNRDObjectToCollisionObject(G2_obj);
colObj.stopTimeEvent(10);
colObj.setTimeEvent(2, 625, 1 ,false);
if(G2_obj.getState() == 22) colObj.addSetStatePacket(23, null, STATE_PRIORITY_IGNORE_FORCE, false, "");
}
}
return false;
}
if(obj.getVar("G1_obj").get_obj_vector_size() < 1 && obj.getVar("G3_obj").get_obj_vector_size() < 1) return false;
// local Gset = obj.getVar("Gset").getInt(10);
// local loadSlot = obj.sq_GetSkillLoad(SKILL_GUNNER_G1);
// local nowCoolTime = loadSlot.getCurrentCoolTime();
// if(nowCoolTime <= sq_GetIntData(obj, SKILL_GUNNER_G1, 3)) return false;
local isUse = obj.sq_IsUseSkill(SKILL_GUNNER_G2);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_GUNNER_G2, STATE_PRIORITY_USER, true);
return true;
}
return true;
}
function checkCommandEnable_G2(obj)
{
if (!obj) return false;
return true;
}
function onSetState_G2(obj, state, datas, isResetTimer)
{
if(!obj) return;
local substate = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(substate);
switch(substate){
case 0:
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(CUSTOM_ANI_GUNNER_COMMAND);
obj.sq_PlaySound("GN_G2");
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local castTime = sq_GetCastTime(obj, SKILL_GUNNER_G2, sq_GetSkillLevel(obj, SKILL_GUNNER_G2));
obj.setTimeEvent(0, castTime, 1, false);
sq_StartDrawCastGauge(obj, castTime, true);
break;
}
}
function onEndCurrentAni_G2(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
switch(substate){
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
}
}
function onProcCon_G2(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_G2(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1:
local skillLevel = sq_GetSkillLevel(obj, SKILL_GUNNER_G2);
local totalDamage = sq_GetLevelData(obj, SKILL_GUNNER_G2, 0, skillLevel);
local totalDamage2 = sq_GetLevelData(obj, SKILL_GUNNER_G2, 1, skillLevel);
local chargeTime = sq_GetIntData(obj, SKILL_GUNNER_G2, 1);
local hitCoolTime = sq_GetIntData(obj, SKILL_GUNNER_G2, 3);
local Gset = obj.getVar("Gset").getInt(10);
local loadSlot = obj.sq_GetSkillLoad(Gset);
if(!loadSlot) return true;
local allCoolTime = loadSlot.getEndCoolTime();
local nowCoolTime = loadSlot.getCurrentCoolTime();
local lifeTime = allCoolTime - nowCoolTime + sq_GetIntData(obj, SKILL_GUNNER_G2, 2) + 150;
obj.sq_RemoveSkillLoad(Gset);
switch(Gset){
case SKILL_GUNNER_G1:
totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_GUNNER_G2, 2, skillLevel)) / 100;
totalDamage2 = totalDamage * (100 + sq_GetLevelData(obj, SKILL_GUNNER_G2, 2, skillLevel)) / 100;
local G1_obj = obj.getVar("G1_obj").get_obj_vector(0);
if(G1_obj){
local colObj = sq_GetCNRDObjectToCollisionObject(G1_obj);
colObj.addSetStatePacket(23, null, STATE_PRIORITY_IGNORE_FORCE, false, "");
}
break;
case SKILL_GUNNER_G3:
totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_GUNNER_G2, 3, skillLevel)) / 100;
totalDamage2 = totalDamage * (100 + sq_GetLevelData(obj, SKILL_GUNNER_G2, 3, skillLevel)) / 100;
local size = obj.getVar("G3_obj").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local G3_obj = obj.getVar("G3_obj").get_obj_vector(i);
if(G3_obj){
local colObj = sq_GetCNRDObjectToCollisionObject(G3_obj);
colObj.addSetStatePacket(24, null, STATE_PRIORITY_IGNORE_FORCE, false, "");
}
}
}
size = obj.getVar("G3_att_obj").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local G3_obj = obj.getVar("G3_att_obj").get_obj_vector(i);
if(G3_obj){
local colObj = sq_GetCNRDObjectToCollisionObject(G3_obj);
colObj.setValid(false);
}
}
}
break;
}
obj.sq_AddSkillLoad(SKILL_GUNNER_G2, 18, 1, lifeTime);
loadSlot = obj.sq_GetSkillLoad(SKILL_GUNNER_G2);
obj.getVar("Gset").setInt(10, SKILL_GUNNER_G2);
loadSlot.setStartCool();
for(local i = 0; i < 3; i++){
sq_BinaryStartWrite();
sq_BinaryWriteDword(SKILL_GUNNER_G2);//skillIndex
sq_BinaryWriteDword(1);//subtype
sq_BinaryWriteDword(totalDamage);
sq_BinaryWriteDword(totalDamage2);
sq_BinaryWriteDword(chargeTime);
sq_BinaryWriteDword(hitCoolTime);
sq_BinaryWriteDword(i);
sq_BinaryWriteDword(lifeTime);
sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_PASSIVEOBJECT, 0, -75, 0, 60, obj.getDirection());
}
break;
}
return true;
}
function onTimeEvent_G2(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 0:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
}
}
function onEndState_G2(obj, new_state)
{
if(!obj) return;
if(new_state != SKILL_GUNNER_G2){
sq_EndDrawCastGauge(obj);
}
}
function checkExecutableSkill_G3(obj)
{
if (!obj) return false;
local size = obj.getVar("G3_obj").get_obj_vector_size();
if(size > 0){
if(obj.getVar("G3_Bool").getBool(0)){
obj.getVar("G3_Bool").setBool(0, false);
obj.getVar("G3_count").setInt(10, 0);
for(local i = 0; i < size; i++){
local G3_obj = obj.getVar("G3_obj").get_obj_vector(i);
if(G3_obj){
local colObj = sq_GetCNRDObjectToCollisionObject(G3_obj);
if(colObj.getState() == 22){
obj.getVar("G3_count").setInt(10, obj.getVar("G3_count").getInt(10) + 1);
continue;
}
colObj.stopTimeEvent(13);
colObj.sq_PlaySound("G3_MOVE");
if(colObj.getState() != 24) colObj.addSetStatePacket(20, null, STATE_PRIORITY_IGNORE_FORCE, false, "");
}
}
local size2 = obj.getVar("G3_att_obj").get_obj_vector_size();
if(size2 > 0){
for(local ui = 0; ui < size2; ui++){
local G3_att_obj = obj.getVar("G3_att_obj").get_obj_vector(ui);
if(G3_att_obj){
local colObj = sq_GetCNRDObjectToCollisionObject(G3_att_obj);
colObj.setValid(false);
}
}
}
if(obj.getVar("G3_count").getInt(10) == 6){
local range = sq_GetIntData(obj, SKILL_GUNNER_G3, 4);
obj.getVar("G3_bosstar").clear_obj_vector();
obj.getVar("G3_namedtar").clear_obj_vector();
obj.getVar("G3_normaltar").clear_obj_vector();
obj.getVar("G3_tar").clear_obj_vector();
local objectManager = obj.getObjectManager();//得到對象管理器
for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){
local object = objectManager.getCollisionObject(i);//得到控制類對象
if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) <= range && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= range / 2){
local activeObj = sq_GetCNRDObjectToActiveObject(object);
if(sq_IsBoss(activeObj)){obj.getVar("G3_bosstar").push_obj_vector(activeObj);}
else if(sq_IsNamed(activeObj)){obj.getVar("G3_namedtar").push_obj_vector(activeObj);}
else{obj.getVar("G3_normaltar").push_obj_vector(activeObj);}
}
}
if(obj.getVar("G3_bosstar").get_obj_vector_size() > 0){
for(local i = 0; i < obj.getVar("G3_bosstar").get_obj_vector_size(); i++){
local targetObj = obj.getVar("G3_bosstar").get_obj_vector(i);
obj.getVar("G3_tar").push_obj_vector(targetObj);
}
}
if(obj.getVar("G3_namedtar").get_obj_vector_size() > 0){
for(local i = 0; i < obj.getVar("G3_namedtar").get_obj_vector_size(); i++){
local targetObj = obj.getVar("G3_namedtar").get_obj_vector(i);
obj.getVar("G3_tar").push_obj_vector(targetObj);
}
}
if(obj.getVar("G3_normaltar").get_obj_vector_size() > 0){
for(local i = 0; i < obj.getVar("G3_normaltar").get_obj_vector_size(); i++){
local targetObj = obj.getVar("G3_normaltar").get_obj_vector(i);
obj.getVar("G3_tar").push_obj_vector(targetObj);
}
}
if(obj.getVar("G3_tar").get_obj_vector_size() < 1) return false;
obj.getVar("G3_Bool").setBool(0, true);
for(local i = 0; i < 6; i++){
local sub = i;
if(sq_GetLevelData(obj, SKILL_GUNNER_G3, 8, sq_GetSkillLevel(obj, SKILL_GUNNER_G3)) > 0) sub = 0;
local targetObj = obj.getVar("G3_tar").get_obj_vector(sub);
if(!targetObj) continue;
local G3_obj = obj.getVar("G3_obj").get_obj_vector(i);
if(G3_obj){
local colObj = sq_GetCNRDObjectToCollisionObject(G3_obj);
if(colObj.getState() != 22){
if(obj.getVar("G3_Bool").getBool(0) == false) obj.getVar("G3_Bool").setBool(0, true);
continue;
}
colObj.setTimeEvent(11, 400, 1, false);
colObj.sq_PlaySound("G3_MOVE");
colObj.getVar("move").setInt(10, sq_GetXPos(colObj));
colObj.getVar("move").setInt(11, sq_GetYPos(colObj));
colObj.getVar("move").setInt(12, sq_GetZPos(colObj));
colObj.getVar("move").setInt(13, sq_GetXPos(targetObj));
colObj.getVar("move").setInt(14, sq_GetYPos(targetObj));
colObj.getVar("move").setInt(15, sq_GetZPos(targetObj) + sq_GetObjectHeight(targetObj) + 60);
colObj.setTimeEvent(12, 10, 30, false);
colObj.addSetStatePacket(21, null, STATE_PRIORITY_IGNORE_FORCE, false, "");
colObj.getVar("target").clear_obj_vector();
colObj.getVar("target").push_obj_vector(targetObj);
}
}
}
}
else{
local range = sq_GetIntData(obj, SKILL_GUNNER_G3, 4);
obj.getVar("G3_bosstar").clear_obj_vector();
obj.getVar("G3_namedtar").clear_obj_vector();
obj.getVar("G3_normaltar").clear_obj_vector();
obj.getVar("G3_tar").clear_obj_vector();
local objectManager = obj.getObjectManager();//得到對象管理器
for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){
local object = objectManager.getCollisionObject(i);//得到控制類對象
if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) <= range && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= range / 2){
local activeObj = sq_GetCNRDObjectToActiveObject(object);
if(sq_IsBoss(activeObj)){obj.getVar("G3_bosstar").push_obj_vector(activeObj);}
else if(sq_IsNamed(activeObj)){obj.getVar("G3_namedtar").push_obj_vector(activeObj);}
else{obj.getVar("G3_normaltar").push_obj_vector(activeObj);}
}
}
if(obj.getVar("G3_bosstar").get_obj_vector_size() > 0){
for(local i = 0; i < obj.getVar("G3_bosstar").get_obj_vector_size(); i++){
local targetObj = obj.getVar("G3_bosstar").get_obj_vector(i);
obj.getVar("G3_tar").push_obj_vector(targetObj);
}
}
if(obj.getVar("G3_namedtar").get_obj_vector_size() > 0){
for(local i = 0; i < obj.getVar("G3_namedtar").get_obj_vector_size(); i++){
local targetObj = obj.getVar("G3_namedtar").get_obj_vector(i);
obj.getVar("G3_tar").push_obj_vector(targetObj);
}
}
if(obj.getVar("G3_normaltar").get_obj_vector_size() > 0){
for(local i = 0; i < obj.getVar("G3_normaltar").get_obj_vector_size(); i++){
local targetObj = obj.getVar("G3_normaltar").get_obj_vector(i);
obj.getVar("G3_tar").push_obj_vector(targetObj);
}
}
if(obj.getVar("G3_tar").get_obj_vector_size() < 1) return false;
obj.getVar("G3_Bool").setBool(0, true);
for(local i = 0; i < 6; i++){
local sub = i;
if(sq_GetLevelData(obj, SKILL_GUNNER_G3, 8, sq_GetSkillLevel(obj, SKILL_GUNNER_G3)) > 0) sub = 0;
local targetObj = obj.getVar("G3_tar").get_obj_vector(sub);
if(!targetObj) continue;
local G3_obj = obj.getVar("G3_obj").get_obj_vector(i);
if(G3_obj){
local colObj = sq_GetCNRDObjectToCollisionObject(G3_obj);
if(colObj.getState() != 22){
if(obj.getVar("G3_Bool").getBool(0) == false) obj.getVar("G3_Bool").setBool(0, true);
continue;
}
colObj.setTimeEvent(11, 400, 1, false);
colObj.sq_PlaySound("G3_MOVE");
colObj.getVar("move").setInt(10, sq_GetXPos(colObj));
colObj.getVar("move").setInt(11, sq_GetYPos(colObj));
colObj.getVar("move").setInt(12, sq_GetZPos(colObj));
colObj.getVar("move").setInt(13, sq_GetXPos(targetObj));
colObj.getVar("move").setInt(14, sq_GetYPos(targetObj));
colObj.getVar("move").setInt(15, sq_GetZPos(targetObj) + sq_GetObjectHeight(targetObj) + 60);
colObj.setTimeEvent(12, 10, 30, false);
colObj.addSetStatePacket(21, null, STATE_PRIORITY_IGNORE_FORCE, false, "");
colObj.getVar("target").clear_obj_vector();
colObj.getVar("target").push_obj_vector(targetObj);
}
}
}
return false;
}
if(obj.getVar("G1_obj").get_obj_vector_size() < 1 && obj.getVar("G2_obj").get_obj_vector_size() < 1) return false;
// local Gset = obj.getVar("Gset").getInt(10);
// local loadSlot = obj.sq_GetSkillLoad(Gset);
// local nowCoolTime = loadSlot.getCurrentCoolTime();
// if(nowCoolTime <= sq_GetIntData(obj, SKILL_GUNNER_G1, 3)) return false;
local isUse = obj.sq_IsUseSkill(SKILL_GUNNER_G3);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_GUNNER_G3, STATE_PRIORITY_USER, true);
return true;
}
return false;
}
function checkCommandEnable_G3(obj)
{
if (!obj) return false;
return true;
}
function onSetState_G3(obj, state, datas, isResetTimer)
{
if(!obj) return;
local substate = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(substate);
switch(substate){
case 0:
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(CUSTOM_ANI_GUNNER_COMMAND);
obj.sq_PlaySound("GN_G3");
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local castTime = sq_GetCastTime(obj, SKILL_GUNNER_G3, sq_GetSkillLevel(obj, SKILL_GUNNER_G3));
obj.setTimeEvent(0, castTime, 1, false);
break;
}
}
function onEndCurrentAni_G3(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
switch(substate){
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
}
}
function onProcCon_G3(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_G3(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1:
local offset = [-75,0,60];
local Gset = obj.getVar("Gset").getInt(10);
local loadSlot = obj.sq_GetSkillLoad(Gset);
if(!loadSlot) return true;
local allCoolTime = loadSlot.getEndCoolTime();
local nowCoolTime = loadSlot.getCurrentCoolTime();
local lifeTime = allCoolTime - nowCoolTime + sq_GetIntData(obj, SKILL_GUNNER_G3, 2) + 150;
local skillLevel = sq_GetSkillLevel(obj, SKILL_GUNNER_G3);
local totalDamage = sq_GetLevelData(obj, SKILL_GUNNER_G3, 0, skillLevel) * (100 + sq_GetLevelData(obj, SKILL_GUNNER_G3, 2, skillLevel)) / 100;
local hitCoolTime = sq_GetIntData(obj, SKILL_GUNNER_G3, 1);
if(sq_GetLevelData(obj, SKILL_GUNNER_G3, 4, skillLevel) > 0) hitCoolTime = sq_GetLevelData(obj, SKILL_GUNNER_G3, 4, skillLevel);
switch(Gset){
case SKILL_GUNNER_G1:
if(Gset == SKILL_GUNNER_G1){
local G1_obj = obj.getVar("G1_obj").get_obj_vector(0);
if(G1_obj){
local colObj = sq_GetCNRDObjectToCollisionObject(G1_obj);
colObj.addSetStatePacket(23, null, STATE_PRIORITY_IGNORE_FORCE, false, "");
}
}
break;
case SKILL_GUNNER_G2:
offset = [50,0,75];
local size = obj.getVar("G2_obj").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local G2_obj = obj.getVar("G2_obj").get_obj_vector(i);
if(G2_obj){
local colObj = sq_GetCNRDObjectToCollisionObject(G2_obj);
colObj.addSetStatePacket(24, null, STATE_PRIORITY_IGNORE_FORCE, false, "");
}
}
}
break;
}
obj.sq_RemoveSkillLoad(Gset);
obj.sq_AddSkillLoad(SKILL_GUNNER_G3, 20, 1, lifeTime);
loadSlot = obj.sq_GetSkillLoad(SKILL_GUNNER_G3);
obj.getVar("Gset").setInt(10, SKILL_GUNNER_G3);
loadSlot.setStartCool();
for(local i = 0; i < 6; i++){
sq_BinaryStartWrite();
sq_BinaryWriteDword(SKILL_GUNNER_G3);//skillIndex
sq_BinaryWriteDword(1);//subtype
sq_BinaryWriteDword(totalDamage);
sq_BinaryWriteDword(hitCoolTime);
sq_BinaryWriteDword(i);
sq_BinaryWriteDword(allCoolTime - nowCoolTime + sq_GetIntData(obj, SKILL_GUNNER_G3, 2) + 150);
sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_PASSIVEOBJECT, 0, offset[0], offset[1], offset[2], obj.getDirection());
}
break;
}
return true;
}
function onTimeEvent_G3(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 0:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
}
}
function onEndState_G3(obj, new_state)
{
if(!obj) return;
if(new_state != SKILL_GUNNER_G3){
sq_EndDrawCastGauge(obj);
}
}
//男机械结束
function setCustomData_po_msc7bullet_bykk(obj, receiveData)
{
if(!obj) return;
local totalDamage = receiveData.readDword();
local sizeRate = receiveData.readDword() * 120 / 100;
local speed = receiveData.readDword();
obj.getVar("custom").setInt(1, totalDamage);
obj.getVar("custom").setInt(2, sizeRate);
obj.getVar("custom").setInt(3, speed);
obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, "");
}
function setState_po_msc7bullet_bykk(obj, state, datas)
{
if(!obj) return;
obj.getVar("state").setInt(0, state);
switch(state){
case 20:
local aniPath = "passiveobject/gunner_skl95_bykk/animation/msc7/talisman/missile_01.ani";
local ani = sq_CreateAnimation("", aniPath);
obj.setCurrentAnimation(ani);
// obj.sq_SetMoveParticle("particle/standbyreadygrenade.ptl", 0.0, 25.0);
sq_SetCustomRotate(obj, sq_ToRadian(25.0));
local speed = obj.getVar("custom").getInt(3) * 130 / 100;
local timeMax = 10 * 1300 / speed;
obj.getVar("move").setInt(0, sq_GetXPos(obj));
obj.getVar("move").setInt(1, sq_GetZPos(obj));
obj.setTimeEvent(1, timeMax, 20, true);
// if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed.tofloat());
// else sq_SetVelocity(obj, 0, -speed.tofloat());
// sq_SetVelocity(obj, 2, speed.tofloat() * 0.4);
// sq_SetSpeedToMoveParticle(obj,0,speed);
// sq_SetSpeedToMoveParticle(obj,2,0);
break;
case 21:
// sq_SetVelocity(obj, 0, 0.0);
// sq_SetVelocity(obj, 2, 0.0);
local aniPath = "passiveobject/gunner_skl95_bykk/animation/msc7/talisman/explosion_08.ani";
local ani = sq_CreateAnimation("", aniPath);
obj.setCurrentAnimation(ani);
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(1));
local currentAni = obj.getCurrentAnimation();
local sizeRate = obj.getVar("custom").getInt(2).tofloat() / 100.0;
currentAni.setImageRateFromOriginal(sizeRate, sizeRate);
currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate);
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/gunner_skl95_bykk/animation/msc7/talisman/explosion_mldrs-95missilebboombottom_00.ani", 0, 0, -sq_GetZPos(obj));
sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM);
break;
}
}
function onEndCurrentAni_po_msc7bullet_bykk(obj)
{
if(!obj) return;
local state = obj.getVar("state").getInt(0);
if(state == 20) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
else if(state == 21) sq_SendDestroyPacketPassiveObject(obj);
}
function onTimeEvent_po_msc7bullet_bykk(obj, timeEventIndex, timeEventCount)
{
if(!obj) return;
switch(timeEventIndex){
case 1:
local base_X = obj.getVar("move").getInt(0);
local base_Z = obj.getVar("move").getInt(1);
local dstX = sq_GetDistancePos(base_X, obj.getDirection(), timeEventCount * 18);
sq_setCurrentAxisPos(obj, 0, dstX);
sq_setCurrentAxisPos(obj, 2, base_Z + timeEventCount * 7);
if(timeEventCount >= 20) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
break;
}
}
function procAppend_po_msc7bullet_bykk(obj)
{
if(!obj) return;
return;
local state = obj.getVar("state").getInt(0);
switch(state){
case 20:
local time = sq_GetObjectTime(obj);
if(time > 200 && obj.getVar().getBool(0) == false){
obj.getVar().setBool(0, true);
obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
}
break;
}
}
function setCustomData_po_msc7knockbackobject(obj, receiveData)
{
if(!obj) return;
local totalDamage = receiveData.readDword();
local rateDamagerAdd = receiveData.readDword();
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local attackInfo = sq_GetCurrentAttackInfo(obj);
local rateDamager = sq_GetAttackInfoHitDelayRateDamager(attackInfo);
rateDamager = rateDamager.tofloat() * (100 + rateDamagerAdd).tofloat() / 100.0;
sq_SetAttackInfoHitDelayRateDamager(attackInfo, rateDamager);
// sq_SetCurrentAttacknBackForce(attackInfo, 1200);
}
function onEndCurrentAni_po_msc7knockbackobject(obj)
{
if(!obj) return;
sq_SendDestroyPacketPassiveObject(obj);
}