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

3202 lines
128 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.

function setCustomData_po_nanjixie_bykk(obj, receiveData)
{
if(!obj) return;
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter());
local skillIndex = receiveData.readDword();
local subtype = receiveData.readDword();
obj.getVar("skillIndex").clear_vector();
obj.getVar("skillIndex").push_vector(skillIndex);
obj.getVar("subtype").clear_vector();
obj.getVar("subtype").push_vector(subtype);
switch(skillIndex){
case 29:
local totalDamage = receiveData.readDword();
obj.getVar("totalDamage").clear_vector();
obj.getVar("totalDamage").push_vector(totalDamage);
switch(subtype){
case 3:
local lifetime = receiveData.readDword();
obj.getVar("lifetime").clear_vector();
obj.getVar("lifetime").push_vector(lifetime);
local resttime = receiveData.readDword();
obj.getVar("resttime").clear_vector();
obj.getVar("resttime").push_vector(resttime);
local bullet_number = receiveData.readDword();
obj.getVar("bullet_number").clear_vector();
obj.getVar("bullet_number").push_vector(bullet_number);
local dsp_number = sqrChr.getVar("ExsS_OBJ").get_obj_vector_size();
if(dsp_number > 0){
sqrChr.getVar("ExsS_OBJ").push_obj_vector(obj);
}
else{
sqrChr.getVar("ExsS_OBJ").clear_obj_vector();
sqrChr.getVar("ExsS_OBJ").push_obj_vector(obj);
}
break;
case 4:
local lifetime = receiveData.readDword();
obj.getVar("lifetime").clear_vector();
obj.getVar("lifetime").push_vector(lifetime);
local resttime = receiveData.readDword();
obj.getVar("resttime").clear_vector();
obj.getVar("resttime").push_vector(resttime);
local bullet_number = receiveData.readDword();
obj.getVar("bullet_number").clear_vector();
obj.getVar("bullet_number").push_vector(bullet_number);
local dsp_number = sqrChr.getVar("Exs_OBJ").get_obj_vector_size();
if(dsp_number > 0){
sqrChr.getVar("Exs_OBJ").push_obj_vector(obj);
}
else{
sqrChr.getVar("Exs_OBJ").clear_obj_vector();
sqrChr.getVar("Exs_OBJ").push_obj_vector(obj);
}
break;
case 5:
local lifetime = receiveData.readDword();
obj.getVar("lifetime").clear_vector();
obj.getVar("lifetime").push_vector(lifetime);
local resttime = receiveData.readDword();
obj.getVar("resttime").clear_vector();
obj.getVar("resttime").push_vector(resttime);
local bullet_number = receiveData.readDword();
obj.getVar("bullet_number").clear_vector();
obj.getVar("bullet_number").push_vector(bullet_number);
local totalDamage2 = receiveData.readDword();
obj.getVar("totalDamage2").clear_vector();
obj.getVar("totalDamage2").push_vector(totalDamage2);
local dsp_number = sqrChr.getVar("ExsEx_OBJ").get_obj_vector_size();
if(dsp_number > 0){
sqrChr.getVar("ExsEx_OBJ").push_obj_vector(obj);
}
else{
sqrChr.getVar("ExsEx_OBJ").clear_obj_vector();
sqrChr.getVar("ExsEx_OBJ").push_obj_vector(obj);
}
break;
}
if(subtype == 3 || subtype == 4 || subtype == 5){
obj.setMapFollowParent(obj.getParent());
obj.setMapFollowType(1);
}
break;
case 59:
switch(subtype){
case 1:
local XPos = receiveData.readDword();
local YPos = receiveData.readDword();
obj.getVar("basepos").clear_vector();
obj.getVar("basepos").push_vector(XPos);
obj.getVar("basepos").push_vector(YPos);
break;
case 2:
local type = receiveData.readDword();
obj.getVar("type").clear_vector();
obj.getVar("type").push_vector(type);
break;
}
break;
case 63://风暴
local totalDamage = receiveData.readDword();
obj.getVar("totalDamage").clear_vector();
obj.getVar("totalDamage").push_vector(totalDamage);
switch(subtype){
case 1://子弹
local angleX = receiveData.readDword();
local angleZ = receiveData.readDword();
obj.getVar("angle").clear_vector();
obj.getVar("angle").push_vector(angleX);
obj.getVar("angle").push_vector(angleZ);
break;
case 2://导弹
local group = receiveData.readDword();
local uniqueId = receiveData.readDword();
local targetObj = sq_GetObject(obj, group, uniqueId);
if(targetObj){
obj.getVar("targetObj").clear_obj_vector();
obj.getVar("targetObj").push_obj_vector(targetObj)
}
else sq_SendDestroyPacketPassiveObject(obj);
break;
case 3://更新子弹
local hitMax = receiveData.readDword();
obj.getVar("custom").setInt(10, totalDamage);
obj.getVar("custom").setInt(11, hitMax);
break;
}
break;
case SKILL_GUNNER_G1://G1
switch(subtype){
case 1:
sqrChr.getVar("G1_obj").clear_obj_vector();
sqrChr.getVar("G1_obj").push_obj_vector(obj);
local totalDamage = receiveData.readDword();
local lifeTime = receiveData.readDword();
local stunTime = receiveData.readDword();
local hitCoolTime = receiveData.readDword();
local sizeRate = receiveData.readDword();
obj.getVar("custom").setInt(10, totalDamage);
obj.getVar("custom").setInt(11, lifeTime);
obj.getVar("custom").setInt(12, stunTime);
obj.getVar("custom").setInt(13, hitCoolTime);
obj.getVar("custom").setInt(14, sizeRate);
obj.setMapFollowParent(sqrChr);
obj.setMapFollowType(1);
// print("hitCoolTime = "+hitCoolTime);
break;
case 2:
local totalDamage = receiveData.readDword();
local stunTime = receiveData.readDword();
local sizeRate = receiveData.readDword();
obj.getVar("custom").setInt(10, totalDamage);
obj.getVar("custom").setInt(11, stunTime);
obj.getVar("custom").setInt(12, sizeRate);
break;
}
break;
case SKILL_GUNNER_G2://G2
if(sqrChr.getVar("G2_obj").get_obj_vector_size() < 0) sqrChr.getVar("G2_obj").clear_obj_vector();
sqrChr.getVar("G2_obj").push_obj_vector(obj);
local totalDamage = receiveData.readDword();
local totalDamage2 = receiveData.readDword();
local chargeTime = receiveData.readDword();
local hitCoolTime = receiveData.readDword();
local sub = receiveData.readDword();
local lifeTime = receiveData.readDword();
obj.getVar("custom").setInt(10, totalDamage);
obj.getVar("custom").setInt(11, totalDamage2);
obj.getVar("custom").setInt(12, chargeTime);
obj.getVar("custom").setInt(13, hitCoolTime);
obj.getVar("custom").setInt(14, sub);
obj.getVar("custom").setInt(15, lifeTime);
obj.setMapFollowParent(sqrChr);
obj.setMapFollowType(1);
break;
case SKILL_GUNNER_G3://G3
switch(subtype){
case 1:
if(sqrChr.getVar("G3_obj").get_obj_vector_size() < 0) sqrChr.getVar("G3_obj").clear_obj_vector();
sqrChr.getVar("G3_obj").push_obj_vector(obj);
local totalDamage = receiveData.readDword();
local hitCoolTime = receiveData.readDword();
local sub = receiveData.readDword();
local lifeTime = receiveData.readDword();
obj.getVar("custom").setInt(10, totalDamage);
obj.getVar("custom").setInt(11, hitCoolTime);
obj.getVar("custom").setInt(12, sub);
obj.getVar("custom").setInt(13, lifeTime);
if(obj.getDirection() != ENUM_DIRECTION_RIGHT) sq_SetCurrentDirection(obj, ENUM_DIRECTION_RIGHT);
obj.setMapFollowParent(sqrChr);
obj.setMapFollowType(1);
break;
case 2:
if(sqrChr.getVar("G3_att_obj").get_obj_vector_size() < 0) sqrChr.getVar("G3_att_obj").clear_obj_vector();
sqrChr.getVar("G3_att_obj").push_obj_vector(obj);
local totalDamage = receiveData.readDword();
local hitCoolTime = receiveData.readDword();
obj.getVar("custom").setInt(10, totalDamage);
obj.getVar("custom").setInt(11, hitCoolTime);
local group = receiveData.readDword();
local uniqueId = receiveData.readDword();
local targetObj = sq_GetObject(obj, group, uniqueId);
if(targetObj){
obj.getVar("target").clear_obj_vector();
obj.getVar("target").push_obj_vector(targetObj);
sq_moveWithParent(targetObj, obj);
}
local sub = receiveData.readDword();
local sub2 = receiveData.readDword();
obj.getVar("custom").setInt(12, sub);
obj.getVar("custom").setInt(13, sub2);
break;
}
break;
case 83:
switch(subtype){
case 1:
local vtr_number = sqrChr.getVar("SPAFACOBJ").get_obj_vector_size();
if(vtr_number > 0){
sqrChr.getVar("SPAFACOBJ").push_obj_vector(obj);
}
else{
sqrChr.getVar("SPAFACOBJ").clear_obj_vector();
sqrChr.getVar("SPAFACOBJ").push_obj_vector(obj);
}
break;
case 2:
local vtr_number = sqrChr.getVar("SPARROWOBJ").get_obj_vector_size();
if(vtr_number > 0){
sqrChr.getVar("SPARROWOBJ").push_obj_vector(obj);
}
else{
sqrChr.getVar("SPARROWOBJ").clear_obj_vector();
sqrChr.getVar("SPARROWOBJ").push_obj_vector(obj);
}
break;
case 3:
local totalDamage = receiveData.readDword();
obj.getVar("totalDamage").clear_vector();
obj.getVar("totalDamage").push_vector(totalDamage);
break;
}
break;
case SKILL_GUNNER_VIRTUALRUSH:
switch(subtype){
case 1:
local vtr_number = sqrChr.getVar("VIRTUALRUSH_SUB1").get_obj_vector_size();
if(vtr_number > 0){
sqrChr.getVar("VIRTUALRUSH_SUB1").push_obj_vector(obj);
}
else{
sqrChr.getVar("VIRTUALRUSH_SUB1").clear_obj_vector();
sqrChr.getVar("VIRTUALRUSH_SUB1").push_obj_vector(obj);
}
break;
case 2:
local vtr_number = sqrChr.getVar("VIRTUALRUSH_SUB2").get_obj_vector_size();
if(vtr_number > 0){
sqrChr.getVar("VIRTUALRUSH_SUB2").push_obj_vector(obj);
}
else{
sqrChr.getVar("VIRTUALRUSH_SUB2").clear_obj_vector();
sqrChr.getVar("VIRTUALRUSH_SUB2").push_obj_vector(obj);
}
local totalDamage = receiveData.readDword();
local skillIndex_sub1 = receiveData.readDword();
local skillIndex_sub2 = receiveData.readDword();
obj.getVar("skillIndex_sub1").clear_vector();
obj.getVar("skillIndex_sub1").push_vector(skillIndex_sub1);
obj.getVar("skillIndex_sub2").clear_vector();
obj.getVar("skillIndex_sub2").push_vector(skillIndex_sub2);
break;
}
break;
case SKILL_GUNNER_ROBOTRX60:
switch(subtype){
case 1:
local range = receiveData.readDword();
obj.getVar("range").clear_vector();
obj.getVar("range").push_vector(range);
local parentObj = obj.getParent();
sq_moveWithParent(parentObj, obj);
break;
}
break;
case SKILL_GUNNER_DIMENSIONRUNNER:
switch(subtype){
case 1://T80本体
local totalDamage = receiveData.readDword();
local missile_number = receiveData.readDword();
local missile_totalDamage = receiveData.readDword();
obj.getVar("totalDamage").clear_vector();
obj.getVar("totalDamage").push_vector(totalDamage);
obj.getVar("totalDamage").push_vector(missile_totalDamage);
obj.getVar("missile_number").clear_vector();
obj.getVar("missile_number").push_vector(missile_number);
break;
case 2://导弹
local totalDamage = receiveData.readDword();
local angle = receiveData.readDword();
obj.getVar("custom").clear_vector();
obj.getVar("custom").push_vector(totalDamage);
obj.getVar("custom").push_vector(obj.getXPos());
obj.getVar("custom").push_vector(obj.getYPos());
obj.getVar("custom").push_vector(obj.getZPos());
obj.getVar("custom").push_vector(sq_getRandom(250,500));
obj.getVar("custom").push_vector(sq_getRandom(-20,20));
obj.getVar("custom").push_vector(angle);
break;
}
break;
case SKILL_GUNNER_HELLMARCH:
switch(subtype){
case 1://门
case 2://门
local totalDamage = receiveData.readDword();
local time = receiveData.readDword();
obj.setTimeEvent(0,time,1,false);
break;
case 3:
case 4:
case 5:
local totalDamage = receiveData.readDword();
local moveX = receiveData.readDword();
local number = receiveData.readDword();
obj.getVar("custom").clear_vector();
obj.getVar("custom").push_vector(obj.getXPos());
obj.getVar("custom").push_vector(moveX);
if(subtype == 5){
obj.getVar("custom").push_vector(number);
obj.setTimeEvent(3,2250 - 450 * number,1,false);
}
break;
case 6:
local totalDamage = receiveData.readDword();
local totalDamage2 = receiveData.readDword();
obj.getVar("custom").clear_vector();
obj.getVar("custom").push_vector(totalDamage);
obj.getVar("custom").push_vector(totalDamage2);
break;
}
break;
case 200:
local sizeRate = receiveData.readDword();
local totalDamage = receiveData.readDword();
obj.getVar("sizeRate").clear_vector();
obj.getVar("sizeRate").push_vector(sizeRate);
obj.getVar("totalDamage").clear_vector();
obj.getVar("totalDamage").push_vector(totalDamage);
//printp("sizeRate="+sizeRate.tostring()+" ,totalDamage="+totalDamage.tostring()+"\n");
break;
case 201://12
//设置ATK百分比
local sizeRate = receiveData.readDword();
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 12));
//设置ANI
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/explosion/fireexplosion.ani");
obj.setCurrentAnimation(ani);
//大小
local currentAni = obj.getCurrentAnimation();//得到当前ani
sizeRate = sizeRate.tofloat() / 100.0;
sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate);//攻击框x y z比率
return;
break;
}
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(attackInfo){
local element_kk_fire = sqrChr.getVar("element_kk").getInt(0);
local element_kk_water = sqrChr.getVar("element_kk").getInt(1);
local element_kk_dark = sqrChr.getVar("element_kk").getInt(2);
local element_kk_light = sqrChr.getVar("element_kk").getInt(3);
if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE);
if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER);
if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK);
if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT);
}
obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, "");
}
function setState_po_nanjixie_bykk(obj, state, datas)
{
if(!obj) return;
local skillIndex = obj.getVar("skillIndex").get_vector(0);
local subtype = obj.getVar("subtype").get_vector(0);
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter());
//把state存入数组
obj.getVar("state").clear_vector();
obj.getVar("state").push_vector(state);
switch(skillIndex){
case 29://毒蛇炮
switch(subtype){
case 1://子弹
switch(state){
case 20:
//设置ATK百分比
local bonusrater = obj.getVar("totalDamage").get_vector(0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 5));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater);
//设置ANI
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/exs/exsviperbulletnormal.ani");
obj.setCurrentAnimation(ani);
//设置PTL
obj.sq_SetMoveParticle("particle/exsviperbullet.ptl", 0.0, 0.0);
//Z轴放大攻击框
local currentAni = obj.getCurrentAnimation();
sq_SetAttackBoundingBoxSizeRate(currentAni, 1.0, 1.0, 5.0);//攻击框x y z比率
currentAni.addLayerAnimation(-10,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/exs/exsviperbulletdodge.ani"),true);
// currentAni.addLayerAnimation(1000,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/exs/exsviperbullet.ani"),true);//增加层ani
currentAni.setRGBA(255, 255, 0, 255);
break;
}
break;
case 2://激光
switch(state){
case 20:
//设置ATK百分比
local bonusrater = obj.getVar("totalDamage").get_vector(0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 5));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater);
//设置ANI
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/exs/exslaser/laserfire.ani");
obj.setCurrentAnimation(ani);
//设置效果
local currentAni = obj.getCurrentAnimation();
sq_SetAttackBoundingBoxSizeRate(currentAni, 1.0, 1.0, 2.0);//攻击框x y z比率
currentAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/exs/exslaser/lasertile.ani"),true);
obj.setTimeEvent(0,70,3,true);
break;
}
break;
case 3://sophia毒蛇炮
switch(state){
case 20:
//设置ANI
local ani = sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exssophia_ani/sophia_robot3_tel_out.ani");
obj.setCurrentAnimation(ani);
local lifetime = obj.getVar("lifetime").get_vector(0);
obj.setTimeEvent(1001,lifetime,1,false);
break;
case 21:
//设置ANI
local ani = sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exssophia_ani/sophia_body.ani");
obj.setCurrentAnimation(ani);
sq_AddDrawOnlyAniFromParent(obj,"monster/character/gunner/robot_by_kk/exssophia_ani/sophia_smoke.ani", 0, 1, 50);
local resttime = obj.getVar("resttime").get_vector(0);
if(sqrChr.getVar("holdandgo").getBool(0) == false) obj.setTimeEvent(0,resttime,1,false);
break;
case 22:
//设置ANI
local ani = sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exssophia_ani/sophia_attack.ani");
obj.setCurrentAnimation(ani);
local bullet_number = obj.getVar("bullet_number").get_vector(0);
local bullet_time = 1000 / bullet_number;
obj.setTimeEvent(1,bullet_time,bullet_number,true);
break;
case 23:
//设置ANI
local ani = sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exssophia_ani/sophia_robot3_tel_on.ani");
obj.setCurrentAnimation(ani);
obj.setTimeEvent(1002,250,1,false);
break;
case 24:
//设置ANI
local ani = sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exssophia_ani/sophia_robot3_tel_on.ani");
obj.setCurrentAnimation(ani);
obj.setTimeEvent(1003,250,1,false);
break;
case 25:
//设置ANI
local ani = sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exssophia_ani/sophia_robot3_tel_out.ani");
obj.setCurrentAnimation(ani);
obj.setTimeEvent(1004,200,1,false);
break;
}
break;
case 4://普通毒蛇炮
switch(state){
case 20:
//设置ANI
local ani = sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exs_ani/body.ani");
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(1,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exs_ani/cannonstand.ani"),true);
currentAni.addLayerAnimation(1,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exs_ani/bodyback.ani"),true);
currentAni.addLayerAnimation(1,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exs_ani/robot1.ani"),true);
local lifetime = obj.getVar("lifetime").get_vector(0);
obj.setTimeEvent(1001,lifetime,1,false);
if(sqrChr.getVar("holdandgo").getBool(0) == false) obj.setTimeEvent(0,100,1,false);
break;
case 21:
//设置ANI
local ani = sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exs_ani/body.ani");
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(1,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exs_ani/cannonstand.ani"),true);
currentAni.addLayerAnimation(1,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exs_ani/bodyback.ani"),true);
currentAni.addLayerAnimation(1,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exs_ani/robot1.ani"),true);
sq_AddDrawOnlyAniFromParent(obj,"monster/character/gunner/robot_by_kk/exssophia_ani/sophia_smoke.ani", 0, 1, 50);
local resttime = obj.getVar("resttime").get_vector(0);
if(sqrChr.getVar("holdandgo").getBool(0) == false) obj.setTimeEvent(0,resttime,1,false);
break;
case 22:
//设置ANI
local ani = sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exs_ani/attack.ani");
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(1,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exs_ani/bodyback.ani"),true);
currentAni.addLayerAnimation(1,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exs_ani/robot2.ani"),true);
local bullet_number = obj.getVar("bullet_number").get_vector(0);
local bullet_time = 1000 / bullet_number;
obj.setTimeEvent(1,bullet_time,bullet_number,true);
break;
}
break;
case 5://EX毒蛇炮
switch(state){
case 20:
//设置ANI
local ani = sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exsex_ani/body.ani");
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
local lifetime = obj.getVar("lifetime").get_vector(0);
obj.setTimeEvent(1001,lifetime,1,false);
if(sqrChr.getVar("holdandgo").getBool(0) == false) obj.setTimeEvent(0,100,1,false);
break;
case 21:
//设置ANI
local ani = sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exsex_ani/body.ani");
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
sq_AddDrawOnlyAniFromParent(obj,"monster/character/gunner/robot_by_kk/exssophia_ani/sophia_smoke.ani", 0, 1, 50);
local resttime = obj.getVar("resttime").get_vector(0);
if(sqrChr.getVar("holdandgo").getBool(0) == false) obj.setTimeEvent(0,resttime,1,false);
break;
case 22:
//设置ANI
local ani = sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exsex_ani/attack.ani");
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
currentAni.setLoop(true);
currentAni.addLayerAnimation(1,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exsex_ani/bodyback.ani"),true);
currentAni.addLayerAnimation(10003,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/exsex_ani/robot2.ani"),true);
local bullet_number = obj.getVar("bullet_number").get_vector(0);
local bullet_time = 1000 / bullet_number;
obj.setTimeEvent(1,bullet_time,-1,true);
obj.setTimeEvent(2,300,-1,true);
break;
}
break;
}
break;
case 59://空投支援
switch(subtype){
case 1:
switch(state){
case 20:
//设置ANI
local ani = sq_CreateAnimation("","passiveobject/character/gunner/animation/mechadropappear.ani");
obj.setCurrentAnimation(ani);
if(obj.getDirection() == ENUM_DIRECTION_LEFT){
sq_SetVelocity(obj, 0, -400.0);
}
else{
sq_SetVelocity(obj, 0, 400.0);
}
obj.setTimeEvent(0,200,1,false);
break;
case 21:
//设置ANI
local ani = sq_CreateAnimation("","passiveobject/character/gunner/animation/mechadropmove.ani");
obj.setCurrentAnimation(ani);
if(obj.getDirection() == ENUM_DIRECTION_LEFT){
sq_SetVelocity(obj, 0, -400.0);
}
else{
sq_SetVelocity(obj, 0, 400.0);
}
break;
case 22:
//设置ANI
local ani = sq_CreateAnimation("","passiveobject/character/gunner/animation/mechadropdisappear.ani");
obj.setCurrentAnimation(ani);
if(obj.getDirection() == ENUM_DIRECTION_LEFT){
sq_SetVelocity(obj, 0, -400.0);
}
else{
sq_SetVelocity(obj, 0, 400.0);
}
break;
}
break;
case 2:
switch(state){
case 20:
//设置ANI
local anipath = "";
local type = obj.getVar("type").get_vector(0);
switch(type){
case 1:
case 2:
anipath = "monster/character/gunner/robot_by_kk/healrx78_ani/drop.ani";
break;
case 3:
anipath = "monster/character/gunner/robot_by_kk/headingrx78_ani/drop.ani";
break;
case 4:
case 5:
anipath = "monster/character/gunner/robot_by_kk/firerx78_ani/drop.ani";
break;
}
local ani = sq_CreateAnimation("", anipath);
obj.setCurrentAnimation(ani);
//
local currentAni = obj.getCurrentAnimation();
switch(type){
case 1:
case 2:
currentAni.addLayerAnimation(6,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/healrx78_ani/dropeffect.ani"),true);
break;
case 3:
currentAni.addLayerAnimation(6,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/headingrx78_ani/dropeffect.ani"),true);
break;
case 4:
case 5:
currentAni.addLayerAnimation(6,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/firerx78_ani/dropeffect.ani"),true);
break;
}
obj.sq_SetMoveParticle("particle/mechadrop.ptl", 0.0, 0.0);
break;
case 21:
//设置ANI
local anipath = "";
local type = obj.getVar("type").get_vector(0);
switch(type){
case 1:
case 2:
anipath = "monster/character/gunner/robot_by_kk/healrx78_ani/land.ani";
break;
case 3:
anipath = "monster/character/gunner/robot_by_kk/headingrx78_ani/land.ani";
break;
case 4:
case 5:
anipath = "monster/character/gunner/robot_by_kk/firerx78_ani/land.ani";
break;
}
local ani = sq_CreateAnimation("", anipath);
obj.setCurrentAnimation(ani);
//
local currentAni = obj.getCurrentAnimation();
switch(type){
case 1:
case 2:
currentAni.addLayerAnimation(6,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/healrx78_ani/dropeffect.ani"),true);
break;
case 3:
currentAni.addLayerAnimation(6,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/headingrx78_ani/dropeffect.ani"),true);
break;
case 4:
case 5:
currentAni.addLayerAnimation(6,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/firerx78_ani/dropeffect.ani"),true);
break;
}
break;
}
break;
}
break;
case 63://暴风
switch(subtype){
case 1://子弹
switch(state){
case 20:
//设置ATK百分比
local bonusrater = obj.getVar("totalDamage").get_vector(0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 7));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater);
//设置ANI
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/tempester/gunbullet.ani");
obj.setCurrentAnimation(ani);
//设置PTL
local angleX = obj.getVar("angle").get_vector(0);
local angleZ = obj.getVar("angle").get_vector(1);
//printp("angleX="+angleX.tostring()+"angleZ="+angleZ.tostring()+"\n");
//printp(sq_ToDegree(sq_Atan2(angleX.tofloat(),angleZ.tofloat())).tostring()+"\n");
local angle = sq_ToDegree(sq_Atan2(angleX.tofloat(), angleZ.tofloat()));//sq_ToDegree(sq_Atan2(angleX.tofloat(), angleZ.tofloat()));
obj.sq_SetMoveParticle("particle/tempestergunbullet.ptl", 0.0, angle);
sq_SetCustomRotate(obj, sq_ToRadian(angle - 90).tofloat());
break;
}
break;
case 2://导弹
switch(state){
case 20:
//设置ATK百分比
local bonusrater = (obj.getVar("totalDamage").get_vector(0).tofloat() * 0.3).tointeger();
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 8));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater);
//设置ANI
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/tempester/missile.ani");
obj.setCurrentAnimation(ani);
//设置PTL
local number = sq_getRandom(1,4);
obj.getVar().clear_vector();
obj.getVar().push_vector(number);
local ptlPath = getMissilePtl_bykk(number);
obj.sq_SetMoveParticle(ptlPath, 0.0, 0.0);
//烟雾时钟
obj.setTimeEvent(0,50,-1,true);
break;
case 21:
case 22:
obj.stopTimeEvent(0);
obj.sq_RemoveMoveParticle();
//设置ATK百分比
local bonusrater = (obj.getVar("totalDamage").get_vector(0).tofloat() * 1.0).tointeger();
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 9));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater);
//设置ANI
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/tempester/expairdodge.ani");
if(state == 22) ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/tempester/explanddodge.ani");
obj.setCurrentAnimation(ani);
//效果
if(state == 21){
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/tempester/expairnormal.ani",0,-1,-1);
}
else if(state == 22){
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/tempester/explandnormal.ani",0,-1,-1);
}
//设置旋转
sq_SetCustomRotate(obj, sq_ToRadian(0.0));
break;
}
break;
case 3:
local totalDamage = obj.getVar("custom").getInt(10);
local hitMax = obj.getVar("custom").getInt(11);
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/tempester/dummy.ani");
obj.setCurrentAnimation(ani);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 7));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local pAni = obj.getCurrentAnimation();
local delaySum = pAni.getDelaySum(false);
obj.setTimeEvent(0, delaySum / (hitMax + 1),hitMax, true);
break;
}
break;
case SKILL_GUNNER_G1://G1
switch(subtype){
case 1:
switch(state){
case 20://出现
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g1/joint.ani");
obj.setCurrentAnimation(ani);
local pAni = obj.getCurrentAnimation();
pAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/character/gunner/animation/g1/transformeffect.ani"),true);
break;
case 21://持续
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g1/staynormal.ani");
obj.setCurrentAnimation(ani);
local pAni = obj.getCurrentAnimation();
pAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g1/staydodge.ani"),true);
if(!obj.isExistTimeEvent(0)) obj.setTimeEvent(0, obj.getVar("custom").getInt(11), 1, false);
obj.setTimeEvent(10, obj.getVar("custom").getInt(13), 1, false);
break;
case 22://攻击
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g1/staynormal.ani");
obj.setCurrentAnimation(ani);
local pAni = obj.getCurrentAnimation();
sq_SetFrameDelayTime(pAni, 0, 180);
pAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g1/staydodge.ani"),true);
pAni.addLayerAnimation(10002,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g1/firevolt/attack1.ani"),true);
local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/mechanic_bykk/animation/g1/firevolt/attack2.ani", 30, 1, 10);
sq_moveWithParent(obj, pooledObj2);
obj.setTimeEvent(1, 120, 1, false);
obj.getVar("move").setInt(10, sq_GetXPos(obj));
obj.setTimeEvent(2, 10, 12, true);
break;
case 23://消失
obj.removeAllTimeEvent();
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g1/disjoint.ani");
obj.setCurrentAnimation(ani);
local pAni = obj.getCurrentAnimation();
pAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/character/gunner/animation/g1/transformeffect.ani"),true);
break;
}
break;
case 2:
switch(state){
case 20:
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g1/firevolt/bullet.ani");
obj.setCurrentAnimation(ani);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 20));
obj.sq_SetMoveParticle("particle/g1.ptl", 0.0, 0.0);
break;
case 21:
case 22:
obj.sq_RemoveMoveParticle();
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g1/firevolt/expair.ani");
if(state == 22) ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g1/firevolt/expland.ani");
obj.setCurrentAnimation(ani);
local bonusrater = obj.getVar("custom").getInt(10);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 21));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater);
local hitDelayRate = obj.getVar("custom").getInt(11) / 50;
print("hitDelayRate = "+hitDelayRate);
local attackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetAttackInfoHitDelayRateDamager(attackInfo, hitDelayRate.tofloat());
local sizeRate = obj.getVar("custom").getInt(12);
if(sizeRate > 100){
local currentAni = obj.getCurrentAnimation();
sizeRate = sizeRate.tofloat() / 100.0;
currentAni.setImageRateFromOriginal(sizeRate, sizeRate);
currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate);
}
break;
}
break;
}
break;
case SKILL_GUNNER_G2://G2
switch(state){
case 20://开始
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g2/joint.ani");
obj.setCurrentAnimation(ani);
local pAni = obj.getCurrentAnimation();
pAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g2/firevolt/effect.ani"),true);
obj.setTimeEvent(8,50,1,false);
break;
case 21://持续
obj.stopTimeEvent(1);
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g2/staynormal.ani");
obj.setCurrentAnimation(ani);
local pAni = obj.getCurrentAnimation();
pAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g2/firevolt/staydodge.ani"),true);
local chargeTime = obj.getVar("custom").getInt(12) * (1 + obj.getVar("custom").getInt(14));
obj.setTimeEvent(0, chargeTime, 1, false);
local lifeTime = obj.getVar("custom").getInt(15);
if(!obj.isExistTimeEvent(3)) obj.setTimeEvent(3, lifeTime, 1, false);
break;
case 22://充能
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g2/staychargenormal.ani");
obj.setCurrentAnimation(ani);
local pAni = obj.getCurrentAnimation();
pAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g2/firevolt/staychargedodge.ani"),true);
local bonusrater = obj.getVar("custom").getInt(10);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 22));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater);
obj.setTimeEvent(1, obj.getVar("custom").getInt(13), -1 ,false);
break;
case 23://充能攻击
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g2/attacknormal.ani");
obj.setCurrentAnimation(ani);
local pAni = obj.getCurrentAnimation();
pAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g2/firevolt/attackdodge.ani"),true);
pAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g2/firevolt/spark.ani"),true);
local bonusrater = obj.getVar("custom").getInt(11);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 23));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater);
break;
case 24://结束
obj.removeAllTimeEvent();
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g2/disjoint.ani");
obj.setCurrentAnimation(ani);
local pAni = obj.getCurrentAnimation();
pAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g2/firevolt/effect.ani"),true);
break;
}
break;
case SKILL_GUNNER_G3://G3
switch(subtype){
case 1:
switch(state){
case 20://生成
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g3/move1.ani");
if(obj.getVar("custom").getInt(12) % 2 == 0) ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g3/move2.ani");
obj.setCurrentAnimation(ani);
obj.setTimeEvent(0, 150, 1, false);
break;
case 21://移动
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g3/move1.ani");
if(obj.getVar("custom").getInt(12) % 2 == 0) ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g3/move2.ani");
obj.setCurrentAnimation(ani);
break;
case 22://环绕
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g3/round.ani");
obj.setCurrentAnimation(ani);
local pAni = obj.getCurrentAnimation();
if(!obj.isExistTimeEvent(3)) obj.setTimeEvent(3, obj.getVar("custom").getInt(13), 1, false);
break;
case 23://攻击
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g3/round.ani");
obj.setCurrentAnimation(ani);
local pAni = obj.getCurrentAnimation();
sq_SetFrameDelayTime(pAni, 9, 999999);
pAni.setCurrentFrameWithChildLayer(9);
pAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g3/firevolt/spark.ani"),true);
pAni.addLayerAnimation(1,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g3/firevolt/beam3.ani"),true);
local targetObj = sq_GetCNRDObjectToActiveObject(obj.getVar("target").get_obj_vector(0));
if(targetObj){
local totalDamage = obj.getVar("custom").getInt(10);
local hitCoolTime = obj.getVar("custom").getInt(11);
local group = sq_GetGroup(targetObj);
local uniqueId = sq_GetUniqueId(targetObj);
sq_BinaryStartWrite();
sq_BinaryWriteDword(SKILL_GUNNER_G3);//skillIndex
sq_BinaryWriteDword(2);//subtype
sq_BinaryWriteDword(totalDamage);
sq_BinaryWriteDword(hitCoolTime);
sq_BinaryWriteDword(group);
sq_BinaryWriteDword(uniqueId);
sq_BinaryWriteDword(obj.getVar("custom").getInt(12));
sq_BinaryWriteDword(obj.getVar("custom").getInt(12) + 3);
sq_SendCreatePassiveObjectPacketPos(sqrChr, NUM_BYKK_PASSIVEOBJECT, 0, sq_GetXPos(targetObj), sq_GetYPos(targetObj), targetObj.getZPos() + sq_GetObjectHeight(targetObj) + 40 - 60);
}
break;
case 24://消失
obj.removeAllTimeEvent();
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g3/broken.ani");
obj.setCurrentAnimation(ani);
local pAni = obj.getCurrentAnimation();
pAni.setLoop(false);
// local loadSlot = sqrChr.sq_GetSkillLoad(SKILL_GUNNER_G1);
// if(loadSlot){
// sqrChr.sq_RemoveSkillLoad(SKILL_GUNNER_G1);
// sqrChr.startSkillCoolTime(SKILL_GUNNER_G1, sq_GetSkillLevel(sqrChr), -1);
// }
local size2 = sqrChr.getVar("G3_att_obj").get_obj_vector_size();
if(size2 > 0){
for(local ui = 0; ui < size2; ui++){
local G3_att_obj = sqrChr.getVar("G3_att_obj").get_obj_vector(ui);
if(G3_att_obj){
local colObj = sq_GetCNRDObjectToCollisionObject(G3_att_obj);
colObj.setValid(false);
}
}
}
break;
}
break;
case 2:
switch(state){
case 20:
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/g3/firevolt/hit.ani");
obj.setCurrentAnimation(ani);
local pAni = obj.getCurrentAnimation();
local bonusrater = obj.getVar("custom").getInt(10);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 24));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater);
obj.setTimeEvent(100, obj.getVar("custom").getInt(11), -1, true);
break;
}
break;
}
break;
case 83://拦截机工厂
switch(subtype){
case 1://二觉后工厂
switch(state){
case 20://召唤效果
//设置ANI
local anipath = "passiveobject/mechanic_bykk/animation/sparrowfactory/appearbody.ani";
local skill_level = sq_GetSkillLevel(sqrChr, SKILL_GUNNER_HS1);
if(skill_level > 0) anipath = "passiveobject/mechanic_bykk/animation/sparrowfactory/teleportsparrowfactorystart_00.ani";
local ani = sq_CreateAnimation("", anipath);
obj.setCurrentAnimation(ani);
if(skill_level <= 0){
//增加效果
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(10001,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/sparrowfactory/appeareffect.ani"),true);
}
//音效
obj.sq_PlaySound("SPARROW_FACTORY");
//设置跟随
obj.setMapFollowParent(sqrChr);
obj.setMapFollowType(1);
break;
case 21://持续效果
//设置ANI
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/sparrowfactory/body.ani");
obj.setCurrentAnimation(ani);
//修改持续时间
local currentAni = obj.getCurrentAnimation();
local skill_level = sq_GetSkillLevel(sqrChr, 83);
local lifetime = sqrChr.sq_GetLevelData(83, 0, skill_level);
sq_SetFrameDelayTime(currentAni, 0, lifetime);
//增加效果
currentAni.addLayerAnimation(1001,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/sparrowfactory/effect.ani"),true);
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/sparrowfactory/summoneffect1.ani", 0, 0, 0);
//判断是否为单HIT否则召唤飞机
local skill = sq_GetSkill(sqrChr, 98);
local skill_level02 = sq_GetSkillLevel(sqrChr, 98);
if(skill_level02 > 0){
if(!skill.isSealFunction()){
obj.setTimeEvent(3, 620, 1, false);
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/sparrowfactory/solarlight01_02.ani", 0, 0, 0);
}
else{
obj.setTimeEvent(0, 160, 1, false);
obj.setTimeEvent(2, 960, 1, false);
}
}
else{
obj.setTimeEvent(0, 160, 1, false);
obj.setTimeEvent(2, 960, 1, false);
}
break;
}
break;
case 2://拦截机
switch(state){
case 20://起飞
//设置ANI
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/sparrowboom/body1.ani");
obj.setCurrentAnimation(ani);
//设置跟随
obj.setMapFollowParent(sqrChr);
obj.setMapFollowType(1);
break;
case 21://飞行
//设置ANI
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/sparrowboom/sparrow_sparrow.ani");
obj.setCurrentAnimation(ani);
break;
case 22://传送开始
//设置ANI
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/sparrowboom/teleportsparrowstart_00.ani");
obj.setCurrentAnimation(ani);
break;
case 23://传送结束
//设置ANI
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/sparrowboom/teleportsparrowend_00.ani");
obj.setCurrentAnimation(ani);
break;
case 24://发射
//设置ANI
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/sparrowboom/body3.ani");
obj.setCurrentAnimation(ani);
//增加效果
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(1001,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/sparrowfactory/sparrowmove3.ani"),true);
//音效
obj.getVar().setBool(10,true);
break;
}
break;
case 3://模块单HIT
switch(state){
case 20:
//设置ATK百分比
local bonusrater = obj.getVar("totalDamage").get_vector(0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 10));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater);
//设置ANI
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/sparrowfactory/solarlight02_03.ani");
obj.setCurrentAnimation(ani);
break;
}
break;
}
break;
case SKILL_GUNNER_VIRTUALRUSH://全息机械猎手
switch(subtype){
case 1://光效
switch(state){
case 20:
//设置ANI
local ani = sq_CreateAnimation("", "passiveobject/mechanic_bykk/animation/dummy.ani");
obj.setCurrentAnimation(ani);
//效果
sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/virtualrush/hologramstartfront_00.ani", 0, -1, -1);
sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/virtualrush/hologramstartbottom_00.ani", 0, -1, -1);
sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/virtualrush/hologramstartback_00.ani", 0, -1, -1);
//LOOP时钟
obj.setTimeEvent(0, 600, 1, false);
break;
case 21:
//设置ANI
local ani = sq_CreateAnimation("", "passiveobject/mechanic_bykk/animation/dummy.ani");
obj.setCurrentAnimation(ani);
//效果
local pAni = obj.getCurrentAnimation();
local ani1 = sq_CreateAnimation("","character/gunner/effect/animation/virtualrush/hologramloopfront_00.ani");
local ani2 = sq_CreateAnimation("","character/gunner/effect/animation/virtualrush/hologramloopbottom_00.ani");
local ani3 = sq_CreateAnimation("","character/gunner/effect/animation/virtualrush/hologramloopback_00.ani");
pAni.addLayerAnimation(-10,ani1,true);
pAni.addLayerAnimation(-10,ani2,true);
pAni.addLayerAnimation(-10,ani3,true);
break;
case 22:
//设置ANI
local ani = sq_CreateAnimation("", "passiveobject/mechanic_bykk/animation/dummy.ani");
obj.setCurrentAnimation(ani);
//设置帧延时
local pAni = obj.getCurrentAnimation();
sq_SetFrameDelayTime(pAni, 0, 100);
sq_SetFrameDelayTime(pAni, 1, 1000);
//效果
sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/virtualrush/hologramendfront_00.ani", 0, -1, -1);
sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/virtualrush/hologramendbottom_00.ani", 0, -1, -1);
sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/virtualrush/hologramendback_00.ani", 0, -1, -1);
//爆炸时钟
if(sqrChr.getVar("VIRTUALRUSH_SUB2").get_obj_vector_size() > 0){
obj.setTimeEvent(1, 650, 1, false);
}
break;
case 23:
//设置ATK百分比
local bonusrater = sq_GetBonusRateWithPassive(sqrChr, SKILL_GUNNER_VIRTUALRUSH, STATE_GUNNER_VIRTUALRUSH, 0, 1.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater);
//设置ANI
local ani = sq_CreateAnimation("", "passiveobject/mechanic_bykk/animation/explosion/fireexplosion.ani");
obj.setCurrentAnimation(ani);
//设置帧延时
local pAni = obj.getCurrentAnimation();
sq_SetAttackBoundingBoxSizeRate(pAni, 4.0, 4.0, 4.0);//攻击框x y z比率
sq_SetFrameDelayTime(pAni, 0, 50);
sq_SetFrameDelayTime(pAni, 1, 50);
//效果
sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/virtualrush/hologramboomfront_00.ani", 0, -1, -1);
sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/virtualrush/hologramboombottom_00.ani", 0, -1, -1);
break;
}
break;
case 2://召唤效果
switch(state){
case 20://普通开始
//根据技能选择不同ANI地址
local anipath;
local skillIndex_sub1 = obj.getVar("skillIndex_sub1").get_vector(0);
local skillIndex_sub2 = obj.getVar("skillIndex_sub2").get_vector(0);
switch(skillIndex_sub1){
case SKILL_GUNNER_ATEAM:
switch(skillIndex_sub2){
case 1:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramd1start_01.ani";
break;
case 2:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramg1start_01.ani";
break;
case 3:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramh1start_01.ani";
break;
case 4:
anipath = "character/gunner/effect/animation/virtualrush/hologram/holograms1start_01.ani";
break;
case 5:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramt1start_01.ani";
break;
}
break;
case SKILL_GUNNER_ROBOTRX60:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramrx60start_01.ani";
break;
case 27:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramrx78start_01.ani";
break;
case 28:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramez8start_01.ani";
break;
case 59:
switch(skillIndex_sub2){
case 1:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramhealrx78start_01.ani";
break;
case 2:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramheadingrx78start_00.ani";
break;
case 3:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramfirerx78start_01.ani";
break;
}
break;
case 83:
switch(skillIndex_sub2){
case 1:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramsparrowfactorystart_00.ani";
break;
case 2:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramsparrowstart_01.ani";
break;
}
break;
case 105:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramez8exstart_01.ani";
break;
}
local ani = sq_CreateAnimation("", anipath);
obj.setCurrentAnimation(ani);
break;
case 21://普通过程
//根据技能选择不同ANI地址
local anipath;
local skillIndex_sub1 = obj.getVar("skillIndex_sub1").get_vector(0);
local skillIndex_sub2 = obj.getVar("skillIndex_sub2").get_vector(0);
switch(skillIndex_sub1){
case SKILL_GUNNER_ATEAM:
switch(skillIndex_sub2){
case 1:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramd1loop_00.ani";
break;
case 2:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramg1loop_00.ani";
break;
case 3:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramh1loop_00.ani";
break;
case 4:
anipath = "character/gunner/effect/animation/virtualrush/hologram/holograms1loop_00.ani";
break;
case 5:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramt1loop_00.ani";
break;
}
break;
case SKILL_GUNNER_ROBOTRX60:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramrx60loop_00.ani";
break;
case 27:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramrx78loop_00.ani";
break;
case 28:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramez8loop_00.ani";
break;
case 59:
switch(skillIndex_sub2){
case 1:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramhealrx78loop_00.ani";
break;
case 2:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramheadingrx78loop_00.ani";
break;
case 3:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramfirerx78loop_00.ani";
break;
}
break;
case 83:
switch(skillIndex_sub2){
case 1:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramsparrowfactoryloop_00.ani";
break;
case 2:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramsparrowloop_00.ani";
break;
}
break;
case 105:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramez8exloop_00.ani";
break;
}
local ani = sq_CreateAnimation("", anipath);
obj.setCurrentAnimation(ani);
break;
case 22://普通结束
//根据技能选择不同ANI地址
local anipath;
local skillIndex_sub1 = obj.getVar("skillIndex_sub1").get_vector(0);
local skillIndex_sub2 = obj.getVar("skillIndex_sub2").get_vector(0);
switch(skillIndex_sub1){
case SKILL_GUNNER_ATEAM:
switch(skillIndex_sub2){
case 1:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramd1end_00.ani";
break;
case 2:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramg1end_00.ani";
break;
case 3:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramh1end_00.ani";
break;
case 4:
anipath = "character/gunner/effect/animation/virtualrush/hologram/holograms1end_00.ani";
break;
case 5:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramt1end_00.ani";
break;
}
break;
case SKILL_GUNNER_ROBOTRX60:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramrx60end_02.ani";
break;
case 27:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramrx78end_02.ani";
break;
case 28:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramez8end_02.ani";
break;
case 59:
switch(skillIndex_sub2){
case 1:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramheadingrx78end_02.ani";
break;
case 2:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramheadingrx78start_00.ani";
break;
case 3:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramfirerx78end_02.ani";
break;
}
break;
case 83:
switch(skillIndex_sub2){
case 1:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramsparrowfactoryend_02.ani";
break;
case 2:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramsparrowend_02.ani";
break;
}
break;
case 105:
anipath = "character/gunner/effect/animation/virtualrush/hologram/hologramez8exend_02.ani";
break;
}
local ani = sq_CreateAnimation("", anipath);
obj.setCurrentAnimation(ani);
break;
case 23://传送开始
//根据技能选择不同ANI地址
local anipath;
local skillIndex_sub1 = obj.getVar("skillIndex_sub1").get_vector(0);
local skillIndex_sub2 = obj.getVar("skillIndex_sub2").get_vector(0);
switch(skillIndex_sub1){
case SKILL_GUNNER_ATEAM:
switch(skillIndex_sub2){
case 1:
anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportd1start_00.ani";
break;
case 2:
anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportg1start_00.ani";
break;
case 3:
anipath = "character/gunner/effect/animation/virtualrush/teleport/teleporth1start_00.ani";
break;
case 4:
anipath = "character/gunner/effect/animation/virtualrush/teleport/teleports1start_00.ani";
break;
case 5:
anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportt1start_00.ani";
break;
}
break;
case SKILL_GUNNER_ROBOTRX60:
anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportrx60start_00.ani";
break;
case 27:
anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportrx78start_00.ani";
break;
case 28:
anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportez8start_00.ani";
break;
case 59:
switch(skillIndex_sub2){
case 1:
anipath = "character/gunner/effect/animation/virtualrush/teleport/teleporthealrx78start_00.ani";
break;
case 2:
anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportheadingrx78start_00.ani";
break;
case 3:
anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportfirerx78start_00.ani";
break;
}
break;
case 83:
switch(skillIndex_sub2){
case 1:
anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportsparrowfactorystart_00.ani";
break;
case 2:
anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportsparrowstart_00.ani";
break;
}
break;
case 105:
anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportez8exstart_00.ani";
break;
}
local ani = sq_CreateAnimation("", anipath);
obj.setCurrentAnimation(ani);
// local pAni = obj.getCurrentAnimation();//得到ani
// local fireT = pAni.getDelaySum(false);
// printp("skillIndex_sub1="+skillIndex_sub1.tostring()+" skillIndex_sub2="+skillIndex_sub2.tostring()+" fireT="+fireT.tostring()+"\n");
break;
case 24://传送结束
//根据技能选择不同ANI地址
local anipath;
local skillIndex_sub1 = obj.getVar("skillIndex_sub1").get_vector(0);
local skillIndex_sub2 = obj.getVar("skillIndex_sub2").get_vector(0);
switch(skillIndex_sub1){
case SKILL_GUNNER_ATEAM:
switch(skillIndex_sub2){
case 1:
anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportd1end_00.ani";
break;
case 2:
anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportg1end_00.ani";
break;
case 3:
anipath = "character/gunner/effect/animation/virtualrush/teleport/teleporth1end_00.ani";
break;
case 4:
anipath = "character/gunner/effect/animation/virtualrush/teleport/teleports1end_00.ani";
break;
case 5:
anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportt1end_00.ani";
break;
}
break;
case SKILL_GUNNER_ROBOTRX60:
anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportrx60end_00.ani";
break;
case 27:
anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportrx78end_00.ani";
break;
case 28:
anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportez8end_00.ani";
break;
case 59:
switch(skillIndex_sub2){
case 1:
anipath = "character/gunner/effect/animation/virtualrush/teleport/teleporthealrx78end_00.ani";
break;
case 2:
anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportheadingrx78end_00.ani";
break;
case 3:
anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportfirerx78end_00.ani";
break;
}
break;
case 83:
switch(skillIndex_sub2){
case 1:
anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportsparrowfactoryend_00.ani";
break;
case 2:
anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportsparrowend_00.ani";
break;
}
break;
case 105:
anipath = "character/gunner/effect/animation/virtualrush/teleport/teleportez8exend_00.ani";
break;
}
local ani = sq_CreateAnimation("", anipath);
obj.setCurrentAnimation(ani);
//
local aimPosX = sqrChr.getVar("virtualrush").get_vector(0);
local aimPosY = sqrChr.getVar("virtualrush").get_vector(1);
sq_setCurrentAxisPos(obj, 0, aimPosX);
sq_setCurrentAxisPos(obj, 1, aimPosY);
break;
}
break;
}
break;
case SKILL_GUNNER_ROBOTRX60:
switch(subtype){
case 1:
switch(state){
case 20:
//设置ANI
local ani = sq_CreateAnimation("","character/gunner/effect/animation/rx-60/rx-60_ground_a.ani");
obj.setCurrentAnimation(ani);
//修改范围
local range = 250;
local recive_range = obj.getVar("range").get_vector(0);
local sizeRate = recive_range.tofloat() / range;
local currentAni = obj.getCurrentAnimation();
currentAni.setImageRateFromOriginal(sizeRate, sizeRate);
currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
//设置ap
local parentObj = obj.getParent();
local appendage = CNSquirrelAppendage.sq_AppendAppendage(parentObj, obj, SKILL_GUNNER_ROBOTRX60, false, "character/gunner/madeby_kak_mechanic/ap2/ap_virtualrush.nut", false);
if(appendage){
CNSquirrelAppendage.sq_Append(appendage, parentObj, obj);
local auraAppendage = appendage.sq_getAuraMaster("auraMaster");
if(!auraAppendage) auraAppendage = appendage.sq_AddAuraMaster("auraMaster", parentObj, obj, 1200, 18, 5, 0);
if(auraAppendage){
auraAppendage.setAttractionInfo(250, 250, recive_range, 100);//300,300,150,100
}
}
break;
}
break;
}
break;
case SKILL_GUNNER_DIMENSIONRUNNER://TN80
switch(subtype){
case 1://本体
switch(state){
case 20://出场
//设置ANI
local ani = sq_CreateAnimation("", "passiveobject/mechanic_bykk/animation/dimensionrunner/new/dimensionrunnerready_body.ani");
obj.setCurrentAnimation(ani);
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/dimensionrunner_a.ani",0,0,0);
obj.setTimeEvent(0,800,1,false);
local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/dimensionrunner_c.ani",0,0,0);
local pAni = pooledObj.getCurrentAnimation();
pAni.setSpeedRate(150.0);
break;
case 21://导弹
//设置ANI
local ani = sq_CreateAnimation("", "passiveobject/mechanic_bykk/animation/dimensionrunner/new/dimensionrunnerfire_body.ani");
obj.setCurrentAnimation(ani);
local totalDamage = obj.getVar("totalDamage").get_vector(1);
createSkillPassiveObj_nanjixie(sqrChr, obj, SKILL_GUNNER_DIMENSIONRUNNER, 2, totalDamage, 60, 0, -50, 4, 134);
createSkillPassiveObj_nanjixie(sqrChr, obj, SKILL_GUNNER_DIMENSIONRUNNER, 2, totalDamage, 60, 0, 65, 1, 126);
if(sq_getRandom(0,99) > 33) createSkillPassiveObj_nanjixie(sqrChr, obj, SKILL_GUNNER_DIMENSIONRUNNER, 2, totalDamage, 30, 0, -16, 3, 153);
if(sq_getRandom(0,99) > 33) createSkillPassiveObj_nanjixie(sqrChr, obj, SKILL_GUNNER_DIMENSIONRUNNER, 2, totalDamage, 30, 0, 25, 2, 157);
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/new/dimensionrunnerfirea_00.ani",0,-1,-1);
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/new/dimensionrunnerfireb_00.ani",0,-1,-1);
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/new/dimensionrunnerfirec_00.ani",0,-1,-1);
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/new/dimensionrunnerfired_00.ani",0,-1,-1);
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/new/missilefireglow_a.ani",0,0,0);
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/new/missilefireglow_b.ani",0,0,0);
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/new/missilefireglow_c.ani",0,0,0);
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/new/missilefireglow_d.ani",0,0,0);
break;
case 22://是否抓人
//设置ANI
local ani = sq_CreateAnimation("", "passiveobject/mechanic_bykk/animation/dimensionrunner/new/dimensionrunnersuicideready_body.ani");
obj.setCurrentAnimation(ani);
break;
case 23://抓人
//设置ANI
local ani = sq_CreateAnimation("", "passiveobject/mechanic_bykk/animation/dimensionrunner/new/dimensionrunnersuicide_body.ani");
obj.setCurrentAnimation(ani);
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/new/suicidedust_00.ani",0,0,0);
break;
case 24://抓住
//设置ANI
local ani = sq_CreateAnimation("", "passiveobject/mechanic_bykk/animation/dimensionrunner/new/suisideexplosiona_body.ani");
obj.setCurrentAnimation(ani);
break;
case 25://爆炸
//设置ATK百分比
local bonusrater = obj.getVar("totalDamage").get_vector(0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 16));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater);
//设置ANI
local ani = sq_CreateAnimation("", "passiveobject/mechanic_bykk/animation/dimensionrunner/new/suisideexplosionb_04.ani");
obj.setCurrentAnimation(ani);
obj.setTimeEvent(2,800,1,false);
break;
}
break;
case 2://导弹
switch(state){
case 20:
//设置ANI
local ani = sq_CreateAnimation("", "passiveobject/mechanic_bykk/animation/dimensionrunner/new/missile_01.ani");
obj.setCurrentAnimation(ani);
local angle = obj.getVar("custom").get_vector(6).tofloat();
sq_SetCustomRotate(obj, sq_ToRadian(-angle));
// if(obj.getDirection() == ENUM_DIRECTION_LEFT) sq_SetCustomRotate(obj, sq_ToRadian(45.0));
obj.setTimeEvent(10,100,-1,false);
break;
case 21:
obj.stopTimeEvent(10);
sq_SetCustomRotate(obj, sq_ToRadian(0.0));
//设置ANI
local ani = sq_CreateAnimation("", "passiveobject/mechanic_bykk/animation/dimensionrunner/new/missileexplosiontalisman_03.ani");
obj.setCurrentAnimation(ani);
//设置ATK百分比
local bonusrater = obj.getVar("custom").get_vector(0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 13));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater);
break;
}
break;
}
break;
case SKILL_GUNNER_HELLMARCH:
switch(subtype){
case 1:
switch(state){
case 20:
//设置ANI
local ani = sq_CreateAnimation("", "character/gunner/effect/animation/hellmarch/gate/front/gatestart_dot2.ani");
obj.setCurrentAnimation(ani);
// local currentAni = obj.getCurrentAnimation();
// currentAni.addLayerAnimation(-1,sq_CreateAnimation("",""),true);
sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/hellmarch/gate/laser_electric02.ani",0,0,0);
obj.setTimeEvent(1,880,1,false);
obj.setTimeEvent(2,1000,1,false);
break;
case 21:
//设置ANI
local ani = sq_CreateAnimation("", "character/gunner/effect/animation/hellmarch/gate/front/gateloop_dot2.ani");
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(-1,sq_CreateAnimation("","character/gunner/effect/animation/hellmarch/gate/gateground_03.ani"),true);
sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/hellmarch/gate/laser_attack.ani",0,0,0);
sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/hellmarch/gate/laser_direct01.ani",0,0,0);
sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/hellmarch/gate/laser_direct02.ani",0,0,0);
obj.setTimeEvent(9,150,1,false);
break;
case 22:
//设置ANI
local ani = sq_CreateAnimation("", "character/gunner/effect/animation/hellmarch/gate/front/gateend_dot2.ani");
obj.setCurrentAnimation(ani);
break;
}
break;
case 2:
switch(state){
case 20:
//设置ANI
local ani = sq_CreateAnimation("", "character/gunner/effect/animation/hellmarch/gate/back/gatestart_dot4.ani");
obj.setCurrentAnimation(ani);
break;
case 21:
//设置ANI
local ani = sq_CreateAnimation("", "character/gunner/effect/animation/hellmarch/gate/back/gateloop_dot4.ani");
obj.setCurrentAnimation(ani);
break;
case 22:
//设置ANI
local ani = sq_CreateAnimation("", "character/gunner/effect/animation/hellmarch/gate/back/gateend_dot4.ani");
obj.setCurrentAnimation(ani);
break;
}
break;
case 3://蓝色队长
case 4://红色队长
case 5://红色队长
local anipath = "passiveobject/mechanic_bykk/animation/hellmarch/leaderblue/leader_";
if(subtype == 4) anipath = "passiveobject/mechanic_bykk/animation/hellmarch/leaderred/leader_";
if(subtype == 5) anipath = "passiveobject/mechanic_bykk/animation/hellmarch/soldier/soldier_";
switch(state){
case 20:
//设置ANI
local ani = sq_CreateAnimation("", anipath + "appear_leftfootmove1.ani");
obj.setCurrentAnimation(ani);
if(subtype == 5) obj.sq_PlaySound("R_HELLMARCH_SOLDIERS");
break;
case 21:
//设置ANI
local ani = sq_CreateAnimation("", anipath + "appear_rightfootmove1.ani");
obj.setCurrentAnimation(ani);
if(subtype == 5) obj.sq_PlaySound("R_HELLMARCH_SOLDIERS");
break;
case 22:
//设置ANI
local ani = sq_CreateAnimation("", anipath + "leftfootmove.ani");
obj.setCurrentAnimation(ani);
local pooledObj = sq_AddDrawOnlyAniFromParent(obj,anipath + "appear_leftfootmove1.ani",0,1,1);
sq_moveWithParent(obj, pooledObj);
if(subtype == 5) obj.sq_PlaySound("R_HELLMARCH_SOLDIERS");
break;
case 23:
//设置ANI
local ani = sq_CreateAnimation("", anipath + "rightfootmove.ani");
obj.setCurrentAnimation(ani);
local pooledObj = sq_AddDrawOnlyAniFromParent(obj,anipath + "appear_rightfootmove1.ani",0,1,1);
sq_moveWithParent(obj, pooledObj);
if(subtype == 5) obj.sq_PlaySound("R_HELLMARCH_SOLDIERS");
break;
case 24:
//设置ANI
local ani = sq_CreateAnimation("", anipath + "leftfootmove.ani");
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
sq_SetFrameDelayTime(currentAni, 0, 50);
sq_SetFrameDelayTime(currentAni, 1, 50);
if(subtype == 5) obj.sq_PlaySound("R_HELLMARCH_SOLDIERS");
break;
case 25:
//设置ANI
local ani = sq_CreateAnimation("", anipath + "rightfootmove.ani");
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
sq_SetFrameDelayTime(currentAni, 0, 50);
sq_SetFrameDelayTime(currentAni, 1, 50);
if(subtype == 5) obj.sq_PlaySound("R_HELLMARCH_SOLDIERS");
break;
case 26:
//设置ANI
local ani = sq_CreateAnimation("", anipath + "sir.ani");
obj.setCurrentAnimation(ani);
break;
case 27:
//设置ANI
local ani = sq_CreateAnimation("", anipath + "readytoexplosion.ani");
obj.setCurrentAnimation(ani);
break;
case 28:
//设置ANI
local ani = sq_CreateAnimation("", "passiveobject/mechanic_bykk/animation/hellmarch/bombnew/explosion_04.ani");
obj.setCurrentAnimation(ani);
if(subtype == 3 || subtype == 4){
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(1001,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/hellmarch/bombnew/hellboom_dodge.ani"),true);
currentAni.addLayerAnimation(1001,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/hellmarch/bombnew/hellboom01_dodge.ani"),true);
currentAni.addLayerAnimation(1001,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/hellmarch/bombnew/hellboom02_dodge.ani"),true);
currentAni.addLayerAnimation(1001,sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/hellmarch/bombnew/hellboom03_dodge.ani"),true);
}
sq_setCurrentAxisPos(obj, 2, 75);
break;
}
if(subtype == 5){
local currentAni = obj.getCurrentAnimation();
currentAni.setImageRateFromOriginal(0.95, 0.95);
currentAni.setAutoLayerWorkAnimationAddSizeRate(0.95);
}
break;
case 6://攻击主体
switch(state){
case 20:
//设置ATK百分比
local bonusrater = obj.getVar("custom").get_vector(0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 19));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater);
//设置ANI
local ani = sq_CreateAnimation("", "passiveobject/mechanic_bykk/animation/hellmarch/hellmarchdummyexplosion.ani");
obj.setCurrentAnimation(ani);
obj.setTimeEvent(21,450,3,false);
local currentAni = obj.getCurrentAnimation();
sq_SetFrameDelayTime(currentAni, 0, 3340);
break;
}
break;
}
break;
case 200:
switch(state){
case 20:
//设置ATK百分比
local bonusrater = obj.getVar("totalDamage").get_vector(0);
//printp("bonusrater="+bonusrater.tostring()+"\n");
if(subtype == 1){
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0));
}
else if(subtype == 2){
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 11));
}
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater);
//设置ANI
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/explosion/fireexplosion.ani");
obj.setCurrentAnimation(ani);
//大小
local currentAni = obj.getCurrentAnimation();//得到当前ani
local sizeRate = obj.getVar("sizeRate").get_vector(0).tofloat() / 100;
sizeRate = sizeRate.tofloat();
sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate);//攻击框x y z比率
// local attackInfo = sq_GetCurrentAttackInfo(obj);
// if (attackInfo){
// attackInfo.setElement(ENUM_ELEMENT_WATER);
// attackInfo.setElement(ENUM_ELEMENT_LIGHT);
// attackInfo.setElement(ENUM_ELEMENT_FIRE);
// attackInfo.setElement(ENUM_ELEMENT_DARK);
// }
//声音
obj.sq_PlaySound("B_FIRE_EXPLOSION");
//特效
if(subtype == 1){
obj.setTimeEvent(1, 200, 2, true);
obj.setTimeEvent(2, 50, 4, true);
obj.setTimeEvent(3, 15, 16, true);
obj.setTimeEvent(4, 100, 2, true);
}
else if(subtype == 2){
obj.setTimeEvent(1, 100, 4, true);
obj.setTimeEvent(2, 25, 8, true);
obj.setTimeEvent(3, 7, 32, true);
obj.setTimeEvent(4, 50, 4, true);
}
break;
}
break;
case 250:
//设置ANI
local ani = sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/dummy.ani");
obj.setCurrentAnimation(ani);
obj.setTimeEvent(0,200,4,true);
break;
}
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(attackInfo){
local element_kk_fire = sqrChr.getVar("element_kk").getInt(0);
local element_kk_water = sqrChr.getVar("element_kk").getInt(1);
local element_kk_dark = sqrChr.getVar("element_kk").getInt(2);
local element_kk_light = sqrChr.getVar("element_kk").getInt(3);
if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE);
if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER);
if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK);
if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT);
}
}
function onTimeEvent_po_nanjixie_bykk(obj, timeEventIndex, timeEventCount)
{
if(!obj) return;
local skillIndex = obj.getVar("skillIndex").get_vector(0);
local subtype = obj.getVar("subtype").get_vector(0);
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter());
local state = obj.getVar("state").get_vector(0);
switch(skillIndex){
case 29:
switch(subtype){
case 2:
switch(timeEventIndex){
case 0:
switch(timeEventCount){
case 1:
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/exs/exslaser/lasersub1.ani", 0, 1, 1);
break;
case 2:
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/exs/exslaser/lasersub2.ani", 0, 1, 1);
break;
case 3:
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/exs/exslaser/lasersub3.ani", 0, 1, 1);
break;
}
break;
}
break;
case 3:
case 4:
case 5:
switch(timeEventIndex){
case 0:
obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
break;
case 1:
local bullet_number = obj.getVar("bullet_number").get_vector(0);
if(sqrChr.getVar("holdandgo").getBool(0)){
obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
if(subtype == 5){
obj.stopTimeEvent(1);
obj.stopTimeEvent(2);
}
}
if(timeEventCount >= bullet_number && subtype != 5) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
local speedRate = (bullet_number.tofloat() * 180.0 / 1000.0) * 100.0;
local anipath1 = "monster/character/gunner/robot_by_kk/exssophia_ani/sophia_cannonattack.ani";
local anipath2 = "monster/character/gunner/robot_by_kk/exssophia_ani/sophia_cannonattackglow.ani";
local anipath3 = "monster/character/gunner/robot_by_kk/exssophia_ani/sophia_attackglow.ani";
local anipath4 = "monster/character/gunner/robot_by_kk/exssophia_ani/sophia_shoot.ani";
if(subtype == 4){
anipath1 = "monster/character/gunner/robot_by_kk/exs_ani/cannonattack.ani";
anipath2 = "monster/character/gunner/robot_by_kk/exs_ani/cannonattackglow.ani";
anipath3 = "monster/character/gunner/robot_by_kk/exs_ani/attackglow.ani";
anipath4 = "monster/character/gunner/robot_by_kk/exssophia_ani/sophia_shoot.ani";
}
else if(subtype == 5){
anipath1 = "monster/character/gunner/robot_by_kk/exsex_ani/cannonattack.ani";
anipath2 = "monster/character/gunner/robot_by_kk/exsex_ani/cannonattackglow.ani";
anipath3 = "monster/character/gunner/robot_by_kk/exsex_ani/attackglow.ani";
anipath4 = "monster/character/gunner/robot_by_kk/exssophia_ani/sophia_shoot.ani";
}
local pooledObj1 = sq_AddDrawOnlyAniFromParent(obj, anipath1, 0, -1, -1);
local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj, anipath2, 0, 1, 1);
local pooledObj3 = sq_AddDrawOnlyAniFromParent(obj, anipath3, 0, 1, 1);
local pooledObj4 = sq_AddDrawOnlyAniFromParent(obj, anipath4, 50, 1, 74);
local pAni1 = pooledObj1.getCurrentAnimation();
local pAni2 = pooledObj2.getCurrentAnimation();
local pAni3 = pooledObj3.getCurrentAnimation();
local pAni4 = pooledObj3.getCurrentAnimation();
pAni1.setSpeedRate(speedRate.tofloat());
pAni2.setSpeedRate(speedRate.tofloat());
pAni3.setSpeedRate(speedRate.tofloat());
pAni4.setSpeedRate(speedRate.tofloat());
local totalDamage = obj.getVar("totalDamage").get_vector(0);
createSkillPassiveObj_nanjixie(sqrChr, obj, 29, 1, totalDamage, 0, 0, 88, 0, 70);
obj.sq_PlaySound("P_VIPER_SHOT_02");
break;
case 2:
sq_AddDrawOnlyAniFromParent(obj, "monster/character/gunner/robot_by_kk/exsex_ani/ex_body_light.ani", 0, 2, 52);
sq_AddDrawOnlyAniFromParent(obj, "monster/character/gunner/robot_by_kk/exsex_ani/ex_laser_attack_front.ani", 0, 1, 1);
sq_AddDrawOnlyAniFromParent(obj, "monster/character/gunner/robot_by_kk/exsex_ani/ex_laser_attack_back.ani", 0, 1, 1);
sq_AddDrawOnlyAniFromParent(obj, "monster/character/gunner/robot_by_kk/exsex_ani/ex_laser_attack_flash.ani", 30, 1, 66);
local totalDamage2 = obj.getVar("totalDamage2").get_vector(0);
createSkillPassiveObj_nanjixie(sqrChr, obj, 29, 2, totalDamage2, 0, 0, 50, 1, 66);
break;
case 1001:
if(sqrChr.getVar("holdandgo").getBool(0) == false){
local sizeRate = 150;
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 29, 29, 2, 1.0) + 100;
createFireExplosion_nanjixie(sqrChr,obj,sizeRate,totalDamage, 20, false);
sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/exs_robotboom.ptl", obj, 0, 1, 20, true, 30, 0, 1);
sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/exs_boom.ptl", obj, 0, 1, 20, true, 30, 0, 1);
sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/exs_bullet.ptl", obj, 0, 1, 20, true, 30, 0, 1);
}
sq_SendDestroyPacketPassiveObject(obj);
break;
case 1002:
local moveX = obj.getVar("move").get_vector(0);
local moveY = obj.getVar("move").get_vector(1);
sq_setCurrentAxisPos(obj, 0, moveX);//设置当前x坐标
sq_setCurrentAxisPos(obj, 1, moveY);//设置当前y坐标
sq_SetCurrentDirection(obj, sqrChr.getDirection());
break;
case 1003:
local moveX = sqrChr.getVar("robotsexplosion").get_vector(0);
local moveY = sqrChr.getVar("robotsexplosion").get_vector(1);
sq_setCurrentAxisPos(obj, 0, moveX);//设置当前x坐标
sq_setCurrentAxisPos(obj, 1, moveY);//设置当前y坐标
sq_SetCurrentDirection(obj, sqrChr.getDirection());
obj.addSetStatePacket(25, null, STATE_PRIORITY_AUTO, false, "");
break;
case 1004:
sq_SendDestroyPacketPassiveObject(obj);
break;
}
break;
}
break;
case 59:
switch(subtype){
case 1:
switch(timeEventIndex){
case 0:
local skill_level = sq_GetSkillLevel(sqrChr, 59);
local number = sqrChr.sq_GetLevelData(59, 3, skill_level);
obj.getVar().clear_vector();
obj.getVar().push_vector(number);
local sperobot_number = sqrChr.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);
}
obj.setTimeEvent(1, 5, number,true);
break;
case 1:
local basexpos = obj.getVar("basepos").get_vector(0);
local baseypos = obj.getVar("basepos").get_vector(1);
local number = obj.getVar().get_vector(0);
local level = sq_GetSkillLevel(sqrChr, 174);
local distanceX = 50;
if(number >= 30) distanceX = 40;
if(number >= 50) distanceX = 30;
local rebotnumer = 77634;
timeEventCount = timeEventCount - 1;
for(local ui = 0; ui < obj.getVar("sperobot").size_vector(); ui++){
if(timeEventCount == obj.getVar("sperobot").get_vector(ui)){
rebotnumer = sq_getRandom(77631,77633).tointeger();
break;
}
}
local destX_01 = 0;
local destY_01 = baseypos - sqrChr.getYPos();
if(obj.getDirection() == ENUM_DIRECTION_RIGHT){
destX_01 = basexpos - sqrChr.getXPos();
}
else if(obj.getDirection() == ENUM_DIRECTION_LEFT){
destX_01 = sqrChr.getXPos() - basexpos;
}
if(timeEventCount % 3 == 1){
//createSkillPassiveObj_nanjixie(sqrChr,obj,59,2,rebotnumer,0,0,-400+sq_getRandom(-5,5),0 - 40 + sq_getRandom(-8,8),400);
summonmonster_mechanic(sqrChr, destX_01 + (timeEventCount/3).tointeger()*distanceX + sq_getRandom(-5,5), destY_01 - 40 + sq_getRandom(-8,8), 600, 0, rebotnumer, 600000, level, 0);
}
else if(timeEventCount % 3 == 2){
//createSkillPassiveObj_nanjixie(sqrChr,obj,59,2,rebotnumer,0,0,-400+sq_getRandom(-5,5),0 + sq_getRandom(-8,8),400);
summonmonster_mechanic(sqrChr, destX_01 + (timeEventCount/3).tointeger()*distanceX + sq_getRandom(-5,5), destY_01 + sq_getRandom(-8,8), 600, 0, rebotnumer, 600000, level, 0);
}
else if(timeEventCount % 3 == 0){
//createSkillPassiveObj_nanjixie(sqrChr,obj,59,2,rebotnumer,0,0,-400+sq_getRandom(-5,5),0 + 40 + sq_getRandom(-8,8),400);
summonmonster_mechanic(sqrChr, destX_01 + (timeEventCount/3).tointeger()*distanceX + sq_getRandom(-5,5), destY_01 + 40 + sq_getRandom(-8,8), 600, 0, rebotnumer, 600000, level, 0);
}
break;
}
break;
}
break;
case 63:
switch(subtype){
case 2:
switch(timeEventIndex){
case 0:
local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/tempester/missilesmoke"+sq_getRandom(1,3)+".ani", 0, -1, -1);
break;
}
break;
case 3:
switch(timeEventIndex){
case 0: obj.resetHitObjectList(); break;
}
break;
}
break;
case SKILL_GUNNER_G1://G1
switch(timeEventIndex){
case 0: obj.addSetStatePacket(23, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); break;
case 1:
local totalDamage = obj.getVar("custom").getInt(10);
local stunTime = obj.getVar("custom").getInt(12);
local sizeRate = obj.getVar("custom").getInt(14);
sq_BinaryStartWrite();
sq_BinaryWriteDword(SKILL_GUNNER_G1);//skillIndex
sq_BinaryWriteDword(2);//subtype
sq_BinaryWriteDword(totalDamage);
sq_BinaryWriteDword(stunTime);
sq_BinaryWriteDword(sizeRate);
sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_PASSIVEOBJECT, 0, 30, 0, 10, obj.getDirection());
obj.sq_PlaySound("G1_SHOT");
break;
case 2:
local vx = sq_GetUniformVelocity(0, -12, timeEventCount, 12);
local dstX = sq_GetDistancePos(obj.getVar("move").getInt(10), obj.getDirection(), vx);
sq_setCurrentAxisPos(obj, 0, dstX);
break;
case 10:
obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
break;
case 100://判斷距離
local base_X = -75;
local disX = sq_Abs(sq_GetXPos(obj) - sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),base_X));
local disY = sq_Abs(sq_GetYPos(obj) - sq_GetYPos(sqrChr));
local disZ = sq_Abs(sq_GetZPos(obj) - sq_GetZPos(sqrChr) - 60);
local direction = sqrChr.getDirection();
if(obj.getDirection() != direction) obj.setDirection(direction);
if(disX > 10){
local baseM = 30;
local moveX = disX / baseM + 2;
if(sq_GetXPos(obj) > sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),base_X)) sq_setCurrentAxisPos(obj, 0, sq_GetXPos(obj) - moveX);
else sq_setCurrentAxisPos(obj, 0, sq_GetXPos(obj) + moveX);
}
if(disY > 10){
local baseM = 30;
local moveY = disY / baseM + 1;
if(sq_GetYPos(obj) > sq_GetYPos(sqrChr)) sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) - moveY);
else sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) + moveY);
}
if(disZ > 5){
local baseM = 30;
local moveZ = disZ / baseM + 1;
if(sq_GetZPos(obj) - 60 > sq_GetZPos(sqrChr)) sq_setCurrentAxisPos(obj, 2, sq_GetZPos(obj) - moveZ);
else sq_setCurrentAxisPos(obj, 2, sq_GetZPos(obj) + moveZ);
}
if(disX <= 10 && disY <= 10 && disZ <= 5){
obj.stopTimeEvent(100);
obj.setTimeEvent(101,300,-1,false);
}
break;
case 101://移動
local base_X = -75;
local disX = sq_Abs(sq_GetXPos(obj) - sq_GetDistancePos(sq_GetXPos(sqrChr),sqrChr.getDirection(),base_X));
local disY = sq_Abs(sq_GetYPos(obj) - sq_GetYPos(sqrChr));
local disZ = sq_Abs(sq_GetZPos(obj) - sq_GetZPos(sqrChr) - 60);
if(disX > 10 || disY > 10 || disZ > 5){
obj.stopTimeEvent(101);
obj.setTimeEvent(100,15,-1,false);
}
break;
}
break;
case SKILL_GUNNER_G2://G2
switch(timeEventIndex){
case 0:
obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
break;
case 1:
obj.resetHitObjectList();
break;
case 2:
obj.setTimeEvent(10,5,-1,false);
break;
case 3:
obj.sq_PlaySound("G2_CHARGE");
obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, "");
break;
case 8:
obj.getVar("move").setInt(10, sq_GetXPos(obj));
obj.getVar("move").setInt(11, sq_GetDistancePos(sq_GetXPos(sqrChr), sqrChr.getDirection(), 50));
obj.setTimeEvent(9, 5, 30, true);
break;
case 9:
local v = sq_GetUniformVelocity(obj.getVar("move").getInt(10), obj.getVar("move").getInt(11), timeEventCount, 30);
sq_setCurrentAxisPos(obj, 0, v);
if(timeEventCount >= 30) obj.setTimeEvent(10,5,-1,false);
break;
case 10:
if(timeEventCount % 30 == 0) obj.sq_PlaySound("G2_LOOP");
local time = timeEventCount * 5;
local hitCoolTime = obj.getVar("custom").getInt(13);
local sub = obj.getVar("custom").getInt(14);
local roundTime = hitCoolTime * 1;
local direction = sqrChr.getDirection();
if(obj.getDirection() != direction) obj.setDirection(direction);
local base100Angle = 36000 / 3 * (sub + 1);
local baseY = sqrChr.getYPos();
local baseZ = sqrChr.getZPos() + 75;
local current100Angle = (base100Angle + (36000 * time / roundTime)) % 36000;
local angle = (current100Angle.tofloat() / 100.0);
local disMovLen = 35 * sq_CosTable(angle.tointeger());
if(direction == ENUM_DIRECTION_LEFT) disMovLen = -disMovLen;
local upMovLen = 50 * sq_SinTable(angle.tointeger());
local mov_x = sq_GetDistancePos(sq_GetXPos(sqrChr), sqrChr.getDirection(), disMovLen.tointeger() + 60);
local mov_z = baseZ + upMovLen.tointeger();
sq_setCurrentAxisPos(obj, 0, mov_x);
sq_setCurrentAxisPos(obj, 1, baseY + 1);
sq_setCurrentAxisPos(obj, 2, mov_z);
break;
}
break;
case SKILL_GUNNER_G3://G3
switch(timeEventIndex){
case 0:
obj.getVar("move").setInt(10, sq_GetXPos(obj));
obj.getVar("move").setInt(11, sq_GetYPos(obj));
obj.getVar("move").setInt(12, sq_GetZPos(obj));
obj.getVar("move").setInt(13, sq_GetXPos(sqrChr));
obj.getVar("move").setInt(14, sq_GetYPos(sqrChr));
obj.getVar("move").setInt(15, sq_GetZPos(sqrChr) + sq_GetObjectHeight(sqrChr) + 60);
obj.setTimeEvent(1, 5, 30, true);
break;
case 1:
local vx = sq_GetUniformVelocity(obj.getVar("move").getInt(10), obj.getVar("move").getInt(13), timeEventCount, 30);
local vy = sq_GetUniformVelocity(obj.getVar("move").getInt(11), obj.getVar("move").getInt(14), timeEventCount, 30);
local vz = sq_GetUniformVelocity(obj.getVar("move").getInt(12), obj.getVar("move").getInt(15), timeEventCount, 30);
sq_setCurrentAxisPos(obj, 0, vx);
sq_setCurrentAxisPos(obj, 1, vy);
sq_setCurrentAxisPos(obj, 2, vz);
if(timeEventCount >= 30){
obj.getVar("target").clear_obj_vector();
obj.getVar("target").push_obj_vector(sqrChr);
obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
if(!obj.isExistTimeEvent(10)) obj.setTimeEvent(10, 20, -1, true);
}
break;
case 3:
obj.removeAllTimeEvent();
obj.addSetStatePacket(24, null, STATE_PRIORITY_IGNORE_FORCE, false, "");
break;
case 10:
if(state != 22) break;
if(timeEventCount % 10 == 0) obj.sq_PlaySound("G3_LOOP");
local targetObj = sq_GetCNRDObjectToActiveObject(obj.getVar("target").get_obj_vector(0));
local pAni = obj.getCurrentAnimation();
local currentT = (timeEventCount - 1) * 20;
local defaultRoundTime = 1800;
local base100Angle = 36000 / 6 * (obj.getVar("custom").getInt(12) + 0);
local baseX = sq_GetXPos(targetObj);
local baseY = sq_GetYPos(targetObj)
local current100Angle = (base100Angle + (36000 * currentT / defaultRoundTime)) % 36000;
local angle = (current100Angle.tofloat() / 100.0);
if(angle >= 345 && angle < 15 && sq_GetAnimationFrameIndex(pAni) != 0){pAni.setCurrentFrameWithChildLayer(0);}
if(angle >= 15 && angle < 45 && sq_GetAnimationFrameIndex(pAni) != 1){pAni.setCurrentFrameWithChildLayer(1);}
if(angle >= 45 && angle < 75 && sq_GetAnimationFrameIndex(pAni) != 2){pAni.setCurrentFrameWithChildLayer(2);}
if(angle >= 75 && angle < 105 && sq_GetAnimationFrameIndex(pAni) != 3){pAni.setCurrentFrameWithChildLayer(3);}
if(angle >= 105 && angle < 135 && sq_GetAnimationFrameIndex(pAni) != 4){pAni.setCurrentFrameWithChildLayer(4);}
if(angle >= 135 && angle < 165 && sq_GetAnimationFrameIndex(pAni) != 5){pAni.setCurrentFrameWithChildLayer(5);}
if(angle >= 165 && angle < 195 && sq_GetAnimationFrameIndex(pAni) != 6){pAni.setCurrentFrameWithChildLayer(6);}
if(angle >= 195 && angle < 225 && sq_GetAnimationFrameIndex(pAni) != 7){pAni.setCurrentFrameWithChildLayer(7);}
if(angle >= 225 && angle < 255 && sq_GetAnimationFrameIndex(pAni) != 8){pAni.setCurrentFrameWithChildLayer(8);}
if(angle >= 255 && angle < 285 && sq_GetAnimationFrameIndex(pAni) != 9){pAni.setCurrentFrameWithChildLayer(9);}
if(angle >= 285 && angle < 315 && sq_GetAnimationFrameIndex(pAni) != 10){pAni.setCurrentFrameWithChildLayer(10);}
if(angle >= 315 && angle < 345 && sq_GetAnimationFrameIndex(pAni) != 11){pAni.setCurrentFrameWithChildLayer(11);}
local disMovLen = 80 * sq_CosTable(angle.tointeger());
local upMovLen = 40 * sq_SinTable(angle.tointeger());
local mov_x = sq_GetDistancePos(baseX, ENUM_DIRECTION_RIGHT, disMovLen.tointeger());
local mov_y = baseY + upMovLen.tointeger();
sq_setCurrentAxisPos(obj, 0, mov_x);
sq_setCurrentAxisPos(obj, 1, mov_y);
sq_setCurrentAxisPos(obj, 2, targetObj.getZPos() + sq_GetObjectHeight(targetObj) + 40);
// print("mov_x = "+mov_x+",,mov_y = "+mov_y);
break;
case 11:
obj.setTimeEvent(13, 20, -1, true);
obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");
break;
case 12:
local vx = sq_GetUniformVelocity(obj.getVar("move").getInt(10), obj.getVar("move").getInt(13), timeEventCount, 30);
local vy = sq_GetUniformVelocity(obj.getVar("move").getInt(11), obj.getVar("move").getInt(14), timeEventCount, 30);
local vz = sq_GetUniformVelocity(obj.getVar("move").getInt(12), obj.getVar("move").getInt(15), timeEventCount, 30);
sq_setCurrentAxisPos(obj, 0, vx);
sq_setCurrentAxisPos(obj, 1, vy);
sq_setCurrentAxisPos(obj, 2, vz);
break;
case 13:
local targetObj = sq_GetCNRDObjectToActiveObject(obj.getVar("target").get_obj_vector(0));
if(targetObj && targetObj.getState() != STATE_DIE){
sq_setCurrentAxisPos(obj, 0, sq_GetXPos(targetObj));
sq_setCurrentAxisPos(obj, 1, sq_GetYPos(targetObj));
sq_setCurrentAxisPos(obj, 2, sq_GetZPos(targetObj) + sq_GetObjectHeight(targetObj) + 60);
}
else{
obj.stopTimeEvent(13);
if(obj.getState() != 24) obj.addSetStatePacket(20, null, STATE_PRIORITY_IGNORE_FORCE, false, "");
}
break;
case 100:
local targetObj = obj.getVar("target").get_obj_vector(0);
if(targetObj && targetObj.getState() != STATE_DIE){
obj.sq_PlaySound("G3_SHOT_LOOP");
sq_SendHitObjectPacket(obj,targetObj, 0, 0, targetObj.getZPos() + sq_GetObjectHeight(targetObj) + 40 - 60);
}
else{
sq_SendDestroyPacketPassiveObject(obj);
}
break;
}
break;
case 83:
switch(subtype){
case 1:
switch(timeEventIndex){
case 0:
local number = sqrChr.sq_GetIntData(83, 2);
obj.setTimeEvent(1, 250, number, false);
break;
case 1:
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/sparrowfactory/sparrowcreate.ani", -10, 0, 40);
createSkillPassiveObj_nanjixie(sqrChr,obj,83,2,0,0,0,0,0,30);
break;
case 2:
local currentAni = obj.getCurrentAnimation();
currentAni.addLayerAnimation(1001, sq_CreateAnimation("","passiveobject/mechanic_bykk/animation/sparrowfactory/summoneffect1_loop.ani"), true);
break;
case 3:
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 83, 29, 6, 1.0) + 100;
// print("totalDamage = "+totalDamage);
createSkillPassiveObj_nanjixie(sqrChr,obj,83,3,totalDamage,0,0,0,0,0);
obj.setTimeEvent(4, 1000, 1, false);
obj.setTimeEvent(5, 320, 1, false);
break;
case 4:
local sizeRate = sqrChr.sq_GetIntData(83, 7);
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 83, 29, 4, 1.0) + 100;
createFireExplosion_nanjixie(sqrChr,obj,sizeRate,totalDamage, 0, false);
sq_CreateParticle("passiveobject/character/gunner/particle/sparrowfactorydestroy.ptl", obj, 0, 1, 0, true, 30, 0, 1);
sq_SendDestroyPacketPassiveObject(obj);
break;
case 5:
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/sparrowfactory/solarlight02_11.ani", 0, 1, 101);
break;
}
break;
}
break;
case SKILL_GUNNER_VIRTUALRUSH:
switch(subtype){
case 1:
switch(timeEventIndex){
case 0:
obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
break;
case 1:
sqrChr.getVar("virtualrush").setBool(0,false);
sqrChr.getVar("VIRTUALRUSH_SUB1").clear_obj_vector();
if(sq_GetIntData(sqrChr, SKILL_GUNNER_VIRTUALRUSH, 20) > 0){
sq_SendDestroyPacketPassiveObject(obj);
break;
}
obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");
break;
}
break;
}
break;
case SKILL_GUNNER_DIMENSIONRUNNER:
switch(timeEventIndex){
case 0:
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/new/targetarea.ani",100,0,0);
break;
case 1:
obj.addSetStatePacket(25, null, STATE_PRIORITY_AUTO, false, "");
break;
case 2:
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/last/dimensionrunnerfinishhand.ani",0,0,0);
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/last/dimensionrunnerfinishhandeff_hand_dodge.ani",0,0,0);
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/last/dimensionrunnerfinishhandeff_ground_normal.ani",0,-1,-1);
break;
case 10:
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/dimensionrunner/new/missilesmoke_00.ani",0,-1,-1);
break;
}
break;
case SKILL_GUNNER_HELLMARCH:
switch(timeEventIndex){
case 0:
obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
break;
case 1:
sq_SetMyShake(obj,2,1000);
break;
case 2:
sq_flashScreen(obj,0,0,160,178, sq_RGB(255,255,255), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_BOTTOM);
break;
case 3:
obj.addSetStatePacket(26, null, STATE_PRIORITY_AUTO, false, "");
break;
case 9:
local direction = obj.getDirection();
if(direction == ENUM_DIRECTION_RIGHT) createSkillPassiveObj_hellmarch_bykk(obj,3,0,300,0,20,-75,0,direction);
else createSkillPassiveObj_hellmarch_bykk(obj,4,0,300,0,20,-75,0,direction);
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_GUNNER_HELLMARCH, SKILL_GUNNER_HELLMARCH, 2, 1.0) + 100;
local totalDamage2 = sq_GetBonusRateWithPassive(sqrChr, SKILL_GUNNER_HELLMARCH, SKILL_GUNNER_HELLMARCH, 3, 1.0) + 100;
if(sqrChr.getVar("hellmarch").getBool(0)){
sqrChr.getVar("hellmarch").setBool(0, false);
createSkillPassiveObj_nanjixie(sqrChr, obj, SKILL_GUNNER_HELLMARCH, 6, totalDamage, totalDamage2, 0, 0, 0, 0);
}
obj.setTimeEvent(10,450,3,false);
break;
case 10:
local direction = obj.getDirection();
for(local i = 0; i < 6; i++){
createSkillPassiveObj_hellmarch_bykk(obj,5,0,300 - 100 * timeEventCount,timeEventCount,100 - 35 * i,-155 + 30 * i,0,direction);
}
break;
case 20:
obj.resetHitObjectList();
break;
case 21:
obj.setTimeEvent(20,10,3,false);
break;
}
break;
case 200:
local sizeRate = obj.getVar("sizeRate").get_vector(0).tofloat() / 100;
sizeRate = sizeRate.tofloat();
switch(timeEventIndex){
case 1:
local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/explosion/fireexplosionparticle1.ani", sq_getRandom(-10,10), sq_getRandom(-10,10), sq_getRandom(-10,10));
local currentAni = pooledObj.getCurrentAnimation();
currentAni.setImageRateFromOriginal(sizeRate, sizeRate);
break;
case 2:
local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/explosion/fireexplosionparticle2.ani", 0, 2, 0);
local currentAni = pooledObj.getCurrentAnimation();
currentAni.setImageRateFromOriginal(sizeRate, sizeRate);
break;
case 3:
local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/explosion/fireexplosionparticle3.ani", 0, 1, 1);
local currentAni = pooledObj.getCurrentAnimation();
local angle = sq_ToRadian(360.0 * timeEventCount / 16);
sq_SetfRotateAngle(currentAni, angle);
currentAni.setImageRateFromOriginal(sizeRate * 2.0, sizeRate * 2.0);
break;
case 4:
local pooledObj = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/explosion/fireexplosionparticle4.ani", sq_getRandom(-30,30), sq_getRandom(-30,30), sq_getRandom(-30,30));
local currentAni = pooledObj.getCurrentAnimation();
currentAni.setImageRateFromOriginal(sizeRate, sizeRate);
break;
}
break;
case 250:
if(timeEventIndex == 0){
switch(timeEventCount){
case 1:
sqrChr.sq_IntVectClear();
sqrChr.sq_IntVectPush(0);
sqrChr.sq_IntVectPush(0);
sqrChr.sq_IntVectPush(75);
sqrChr.sq_IntVectPush(100);
sqrChr.sq_IntVectPush(450);
sqrChr.sq_IntVectPush(0);
sqrChr.sq_IntVectPush(4);
sqrChr.sq_IntVectPush(0);
sqrChr.sq_AddSetStatePacket(13, STATE_PRIORITY_USER, true);
break;
case 2:
local posX = sqrChr.getXPos() + 125;
sq_SendCreatePassiveObjectPacketPos(sqrChr,20011, sq_GetSkillLevel(sqrChr, 25) ,posX,sqrChr.getYPos(), 0);
break;
case 3:
local posX = sqrChr.getXPos() + 125;
sq_SendCreatePassiveObjectPacketPos(sqrChr,20013, sq_GetSkillLevel(sqrChr, 41) ,posX,sqrChr.getYPos(), 0);
break;
case 4:
local posX = sqrChr.getXPos() + 125;
sq_SendCreatePassiveObjectPacketPos(sqrChr,20012, sq_GetSkillLevel(sqrChr, 36) ,posX,sqrChr.getYPos(), 0);
break;
}
}
break;
}
}
function onAttack_po_nanjixie_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj) return;
local skillIndex = obj.getVar("skillIndex").get_vector(0);
local subtype = obj.getVar("subtype").get_vector(0);
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter());
local state = obj.getVar("state").get_vector(0);
switch(skillIndex){
case 63:
switch(subtype){
case 1:
switch(state){
case 20:
sq_SendDestroyPacketPassiveObject(obj);
break;
}
break;
case 2:
switch(state){
case 20:
obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
break;
case 21:
case 22:
//sq_SendDestroyPacketPassiveObject(obj);
break;
}
break;
}
break;
case SKILL_GUNNER_G1://G1
switch(subtype){
case 2:
if(isStuck) break;
if(state != 20) break;
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
obj.addSetStatePacket(21, null, STATE_PRIORITY_IGNORE_FORCE, false, "");
}
break;
}
break;
case SKILL_GUNNER_G2://G2
break;
case SKILL_GUNNER_G3://G3
break;
case SKILL_GUNNER_DIMENSIONRUNNER:
break;
case SKILL_GUNNER_HELLMARCH:
break;
}
}
function onEndCurrentAni_po_nanjixie_bykk(obj)
{
if(!obj) return;
local skillIndex = obj.getVar("skillIndex").get_vector(0);
local subtype = obj.getVar("subtype").get_vector(0);
local state = obj.getVar("state").get_vector(0);
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter());
switch(skillIndex){
case 29:
switch(subtype){
case 3:
switch(state){
case 20:
if(sqrChr.getVar("holdandgo").getBool(0) == false) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
else obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
return;
break;
case 23:
obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, "");
return;
break;
case 25:
sq_SendDestroyPacketPassiveObject(obj);
break;
}
break;
}
break;
case 59:
switch(subtype){
case 1:
switch(state){
case 20:
obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
return;
break;
case 21:
obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
return;
break;
}
break;
case 2:
switch(state){
case 20:
obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
return;
break;
case 21:
break;
}
break;
}
break;
case 63:
switch(subtype){
case 2:
switch(state){
case 20:
return;
break;
}
break;
}
break;
case SKILL_GUNNER_G1://G1
switch(subtype){
case 1:
switch(state){
case 20:
obj.setTimeEvent(100,15,-1,false);
obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
break;
case 22: obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, ""); break;
case 23:
local loadSlot = sqrChr.sq_GetSkillLoad(SKILL_GUNNER_G1);
if(loadSlot){
sqrChr.sq_RemoveSkillLoad(SKILL_GUNNER_G1);
//sqrChr.startSkillCoolTime(SKILL_GUNNER_G1, sq_GetSkillLevel(sqrChr), -1);
}
sq_SendDestroyPacketPassiveObject(obj);
break;
}
return;
break;
}
break;
case SKILL_GUNNER_G2://G2
switch(state){
case 20:
obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
break;
case 23:
obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
break;
case 24:
local loadSlot = sqrChr.sq_GetSkillLoad(SKILL_GUNNER_G2);
if(loadSlot){
sqrChr.sq_RemoveSkillLoad(SKILL_GUNNER_G2);
// sqrChr.startSkillCoolTime(SKILL_GUNNER_G3, sq_GetSkillLevel(sqrChr), -1);
}
sq_SendDestroyPacketPassiveObject(obj);
break;
}
return;
break;
case SKILL_GUNNER_G3://G3
switch(subtype){
case 1:
switch(state){
case 24:
local loadSlot = sqrChr.sq_GetSkillLoad(SKILL_GUNNER_G3);
if(loadSlot){
sqrChr.sq_RemoveSkillLoad(SKILL_GUNNER_G3);
// sqrChr.startSkillCoolTime(SKILL_GUNNER_G3, sq_GetSkillLevel(sqrChr), -1);
}
sq_SendDestroyPacketPassiveObject(obj);
break;
}
break;
}
return;
break;
case 83:
switch(subtype){
case 1:
switch(state){
case 20:
obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
return;
break;
case 21:
local sizeRate = sqrChr.sq_GetIntData(83, 7);
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 83, 29, 4, 1.0) + 100;
createFireExplosion_nanjixie(sqrChr,obj,sizeRate,totalDamage, 0, false);
sq_CreateParticle("passiveobject/character/gunner/particle/sparrowfactorydestroy.ptl", obj, 0, 1, 0, true, 30, 0, 1);
sq_SendDestroyPacketPassiveObject(obj);
break;
}
break;
case 2:
switch(state){
case 20:
obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
return;
break;
case 22:
obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");
return;
break;
case 24:
local sizeRate = sq_GetIntData(sqrChr, 83, 11);
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 83, 29, 4, 1.0) + 100;
createFireExplosion_nanjixie(sqrChr, obj, sizeRate, totalDamage, obj.getZPos(), true);
sq_SendDestroyPacketPassiveObject(obj);
break;
}
break;
}
break;
case SKILL_GUNNER_VIRTUALRUSH:
switch(subtype){
case 1:
switch(state){
case 21:
obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
return;
break;
case 22:
sqrChr.getVar("virtualrush").setBool(0,false);
sqrChr.getVar("VIRTUALRUSH_SUB1").clear_obj_vector();
break;
case 23:
sq_SendDestroyPacketPassiveObject(obj);
break;
}
break;
case 2:
switch(state){
case 20:
obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
return;
break;
case 22:
case 24:
local skillIndex_sub1 = obj.getVar("skillIndex_sub1").get_vector(0);
local skillIndex_sub2 = obj.getVar("skillIndex_sub2").get_vector(0);
local skill_level = sq_GetSkillLevel(sqrChr,skillIndex_sub1);
// local pAni = obj.getCurrentAnimation();//得到ani
// local currentT = sq_GetCurrentTime(pAni);//当前时间
local sizeRate;
local totalDamage;
switch(skillIndex_sub1){
case SKILL_GUNNER_ATEAM:
switch(skillIndex_sub2){
case 1:
sizeRate = sq_GetIntData(sqrChr,skillIndex_sub1,6);
totalDamage = sq_GetBonusRateWithPassive(sqrChr, skillIndex_sub1, 29, 4, 1.0) + 100;
break;
case 2:
sizeRate = sq_GetIntData(sqrChr,skillIndex_sub1,7);
totalDamage = sq_GetBonusRateWithPassive(sqrChr, skillIndex_sub1, 29, 5, 1.0) + 100;
break;
case 3:
sizeRate = sq_GetIntData(sqrChr,skillIndex_sub1,8);
totalDamage = sq_GetBonusRateWithPassive(sqrChr, skillIndex_sub1, 29, 6, 1.0) + 100;
break;
case 4:
sizeRate = sq_GetIntData(sqrChr,skillIndex_sub1,9);
totalDamage = sq_GetBonusRateWithPassive(sqrChr, skillIndex_sub1, 29, 3, 1.0) + 100;
break;
case 5:
sizeRate = sq_GetIntData(sqrChr,skillIndex_sub1,10);
totalDamage = sq_GetBonusRateWithPassive(sqrChr, skillIndex_sub1, 29, 2, 1.0) + 100;
break;
}
break;
case SKILL_GUNNER_ROBOTRX60:
sizeRate = sq_GetIntData(sqrChr, SKILL_GUNNER_ROBOTRX60, 1);
totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_GUNNER_ROBOTRX60, 29, 1, 1.0) + 100;
break;
case 27:
sizeRate = sq_GetIntData(sqrChr, 27, 1);
totalDamage = sq_GetBonusRateWithPassive(sqrChr, 27, 29, 1, 1.0) + 100;
break;
case 28:
sizeRate = sqrChr.sq_GetLevelData(28, 3, skill_level);
totalDamage = sq_GetBonusRateWithPassive(sqrChr, 28, 29, 1, 1.0) + 100;
break;
case 59:
sizeRate = sq_GetIntData(sqrChr, 59, 14);
switch(skillIndex_sub2){
case 1:
case 2:
totalDamage = sq_GetBonusRateWithPassive(sqrChr, 59, 29, 7, 1.0) + sq_GetBonusRateWithPassive(sqrChr, 59, -1, 19, 1.0) + 200;
break;
case 3:
totalDamage = sq_GetBonusRateWithPassive(sqrChr, 59, 29, 9, 1.0) + sq_GetBonusRateWithPassive(sqrChr, 59, -1, 19, 1.0) + 200;
break;
}
break;
case 83:
sizeRate = sq_GetIntData(sqrChr, 83, 11);
totalDamage = sq_GetBonusRateWithPassive(sqrChr, 83, 29, 4, 1.0) + 100;
break;
case 105:
sizeRate = sqrChr.sq_GetLevelData(105, 3, skill_level);
totalDamage = sq_GetBonusRateWithPassive(sqrChr, 105, 29, 1, 1.0) + 100;
break;
}
if(state == 22){
createFireExplosion_nanjixie(sqrChr, obj, sizeRate, totalDamage, 50, false);
}
break;
case 23:
obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, "");
return;
break;
}
break;
}
break;
case SKILL_GUNNER_DIMENSIONRUNNER:
switch(subtype){
case 1:
switch(state){
case 20:
case 22:
case 24:
if(state == 22){
local boss_number = 0;
local nameed_number = 0;
local targetObj;
local objectManager = sqrChr.getObjectManager();
local objectNumber = objectManager.getCollisionObjectNumber();
for (local i = 0; i < objectNumber; i++){
local object = objectManager.getCollisionObject(i);
if(object.isObjectType(OBJECTTYPE_ACTIVE)){
local activeObj = sq_GetCNRDObjectToActiveObject(object);
if(sq_IsBoss(activeObj)){
boss_number = boss_number + 1;
targetObj = activeObj;
break;
}
else if(sq_IsNamed(activeObj)){
nameed_number = nameed_number + 1;
targetObj = activeObj;
break;
}
}
}
if(boss_number <= 0 || nameed_number <= 0){
targetObj = sq_FindTarget(sqrChr, 0, 1500, 500, 500);
}
if(!targetObj){
obj.setTimeEvent(1,1000,1,false);
return;
}
else{
obj.getVar().clear_obj_vector();
obj.getVar().push_obj_vector(targetObj);
}
}
obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, "");
return;
break;
case 21:
local missile_number = obj.getVar("missile_number").get_vector(0);
if(missile_number - 1 > 0){
obj.getVar("missile_number").set_vector(0,missile_number - 1);
obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
return;
}
else{
obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
return;
}
break;
}
break;
}
break;
case SKILL_GUNNER_HELLMARCH:
switch(subtype){
case 1:
case 2:
switch(state){
case 20:
obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
return;
break;
}
break;
case 3:
case 4:
case 5:
switch(state){
case 20:
case 21:
case 22:
case 23:
case 24:
case 25:
case 26:
case 27:
obj.addSetStatePacket(state + 1, null, STATE_PRIORITY_AUTO, false, "");
return;
break;
}
break;
}
break;
}
sq_SendDestroyPacketPassiveObject(obj);
}
function onKeyFrameFlag_po_nanjixie_bykk(obj, flagIndex)
{
if(!obj) return false;
local skillIndex = obj.getVar("skillIndex").get_vector(0);
local subtype = obj.getVar("subtype").get_vector(0);
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter());
local state = obj.getVar("state").get_vector(0);
switch(skillIndex){
case SKILL_GUNNER_G1://G1
break;
case SKILL_GUNNER_G2://G2
break;
case SKILL_GUNNER_G3://G3
break;
case 83:
switch(subtype){
case 2:
switch(flagIndex){
case 1:
local moveX = sqrChr.getVar("robotsexplosion").get_vector(0);
local moveY = sqrChr.getVar("robotsexplosion").get_vector(1);
sq_setCurrentAxisPos(obj, 0, moveX);
sq_setCurrentAxisPos(obj, 1, moveY);
sq_setCurrentAxisPos(obj, 2, 0);
sq_SetCurrentDirection(obj, sqrChr.getDirection());
obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");
break;
case 2:
// local sizeRate = sq_GetIntData(sqrChr, 83, 11);
// local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 83, 29, 4, 1.0) + 100;
// createFireExplosion_nanjixie(sqrChr, obj, sizeRate, totalDamage, obj.getZPos(), true);
sq_SendDestroyPacketPassiveObject(obj);
break;
case 1001:
local randomX = sq_getRandom(-300,300);
local randomY = sq_getRandom(-60,60);
obj.getVar().clear_vector();
obj.getVar().push_vector(randomX);
obj.getVar().push_vector(randomY);
sq_SetVelocity(obj, 0, randomX.tofloat());
sq_SetVelocity(obj, 1, randomY.tofloat());
break;
case 1002:
local randomX = obj.getVar().get_vector(0);
local randomY = obj.getVar().get_vector(1);
sq_SetVelocity(obj, 0, -randomX.tofloat());
sq_SetVelocity(obj, 1, -randomY.tofloat());
break;
}
break;
}
break;
case SKILL_GUNNER_DIMENSIONRUNNER:
break;
case SKILL_GUNNER_HELLMARCH:
if(subtype == 6 && flagIndex == 1){
//设置ATK百分比
local bonusrater = obj.getVar("custom").get_vector(1);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 18));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), bonusrater);
local count = sqrChr.sq_GetBonusRateWithPassive(SKILL_GUNNER_HELLMARCH, SKILL_GUNNER_HELLMARCH, 5, 1.0) + 100;
obj.setTimeEvent(20,100,count - 1,false);
}
break;
}
return true;
}
function procAppend_po_nanjixie_bykk(obj)
{
if(!obj) return;
local skillIndex = obj.getVar("skillIndex").get_vector(0);
local subtype = obj.getVar("subtype").get_vector(0);
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter());
local state = obj.getVar("state").get_vector(0);
switch(skillIndex){
case 29:
switch(subtype){
case 3:
case 4:
case 5:
switch(state){
case 20:
if(sqrChr.getVar("holdandgo").getBool(0) == false && subtype == 5){
obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
return;
}
case 21:
if(sqrChr.getVar("holdandgo").getBool(0) == false){
obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
return;
}
break;
}
break;
}
if(sqrChr.getState() == STATE_DIE) {
sq_SendDestroyPacketPassiveObject(obj);
}
break;
case 59:
switch(subtype){
case 2:
if(obj.getZPos() <= 0 && obj.getVar().getBool(0) == false){
obj.getVar().setBool(0,true);
local level = sq_GetSkillLevel(sqrChr, 174);
local destX_01 = 0;
local destY_01 = obj.getYPos() - sqrChr.getYPos();
if(obj.getDirection() == ENUM_DIRECTION_RIGHT){
destX_01 = obj.getXPos() - sqrChr.getXPos();
}
else if(obj.getDirection() == ENUM_DIRECTION_LEFT){
destX_01 = sqrChr.getXPos() - obj.getXPos();
}
local type = obj.getVar("type").get_vector(0);
switch(type){
case 1:
summonmonster_mechanic(sqrChr,destX_01,destY_01,0,0,77631,600000,level,0);
break;
case 2:
summonmonster_mechanic(sqrChr,destX_01,destY_01,0,0,77632,600000,level,0);
break;
case 3:
summonmonster_mechanic(sqrChr,destX_01,destY_01,0,0,77633,600000,level,0);
break;
case 4:
case 5:
summonmonster_mechanic(sqrChr,destX_01,destY_01,0,0,77634,600000,level,0);
break;
}
sq_SendDestroyPacketPassiveObject(obj);
}
break;
}
break;
case 63:
switch(subtype){
case 1:
switch(state){
case 20:
if(obj.getZPos() <= 0){
sq_SendDestroyPacketPassiveObject(obj);
}
break;
}
break;
case 2:
switch(state){
case 20:
local currentT = sq_GetObjectTime(obj);
local object = obj.getVar("targetObj").get_obj_vector(0);
local fireT = 8000;
if(object){
if(sq_GetDistanceObject(obj, object, false) < 5){
obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
}
local X1 = sq_GetUniformVelocity(obj.getXPos(), object.getXPos(), currentT, fireT);
local Y1 = sq_GetUniformVelocity(obj.getYPos(), object.getYPos(), currentT, fireT);
sq_setCurrentAxisPos(obj, 0, X1);
sq_setCurrentAxisPos(obj, 1, Y1);
local angle = sq_GetUniformVelocity(45, -45, currentT, 500);
sq_SetCustomRotate(obj, sq_ToRadian(angle.tofloat()));
}
if(obj.getZPos() <= 0){
obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
}
break;
}
break;
}
break;
case SKILL_GUNNER_G1://G1
switch(subtype){
case 2:
switch(state){
case 20:
if(sq_GetZPos(obj) <= 0) obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
break;
}
break;
}
break;
case SKILL_GUNNER_G2://G2
// switch(state){
// case 21:
// case 22:
// case 23:
// break;
// }
break;
case SKILL_GUNNER_G3://G3
break;
case 83:
switch(subtype){
case 2:
switch(state){
case 20:
local pAni = obj.getCurrentAnimation();//得到ani
local currentT = sq_GetCurrentTime(pAni);//当前时间
local fireT = pAni.getDelaySum(false);//总时间
local vz = sq_GetUniformVelocity(30, 120, currentT, fireT);
sq_setCurrentAxisPos(obj, 2, vz);//设置当前z坐标
break;
case 21:
local pAni = obj.getCurrentAnimation();//得到ani
local currentT = sq_GetCurrentTime(pAni);//当前时间
local skill_level = sq_GetSkillLevel(sqrChr, 83);
local lifetime = sqrChr.sq_GetLevelData(83, 0, skill_level);
local target_range = sqrChr.sq_GetLevelData(83, 0, skill_level);
if(currentT >= lifetime){
local targetObj = sq_FindTarget(sqrChr, -target_range, target_range, target_range, target_range);
if(targetObj){
local distance = sq_GetDistance(obj.getXPos(), obj.getYPos(), targetObj.getXPos(), targetObj.getYPos(), true);
if(distance <= target_range){
obj.getVar("tar").clear_obj_vector();
obj.getVar("tar").push_obj_vector(targetObj);
obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, "");
return;
}
}
}
break;
case 24:
local targetObj = sq_GetCNRDObjectToActiveObject(obj.getVar("tar").get_obj_vector(0));
local pAni = obj.getCurrentAnimation();//得到ani
local currentT = sq_GetCurrentTime(pAni);//当前时间
local fireT = pAni.getDelaySum(false);//总时间
local skill_level = sq_GetSkillLevel(sqrChr, 83);
local target_range = sqrChr.sq_GetLevelData(83, 0, skill_level);
if(!targetObj){
targetObj = sq_GetCNRDObjectToActiveObject(sq_FindTarget(sqrChr, -target_range, target_range, target_range, target_range));
}
if(targetObj){
if(obj.getVar().getBool(10) == true){
obj.sq_PlaySound("R_SPARROW_SUICIDE");
obj.getVar().setBool(10,false);
}
if(sq_GetDistanceObject(obj, targetObj, false) < 10){
local sizeRate = sq_GetIntData(sqrChr, 83, 7);
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 83, 29, 4, 1.0) + 100;
createFireExplosion_nanjixie(sqrChr, obj, sizeRate, totalDamage, obj.getZPos(), true);
sq_SendDestroyPacketPassiveObject(obj);
}
local X1 = sq_GetUniformVelocity(obj.getXPos(), targetObj.getXPos(), currentT, fireT);
local Y1 = sq_GetUniformVelocity(obj.getYPos(), targetObj.getYPos(), currentT, fireT);
local Z1 = sq_GetUniformVelocity(120, 0, currentT, fireT);
sq_setCurrentAxisPos(obj, 0, X1);
sq_setCurrentAxisPos(obj, 1, Y1);
sq_setCurrentAxisPos(obj, 2, Z1);
}
else{
local sizeRate = sq_GetIntData(sqrChr, 83, 11);
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 83, 29, 4, 1.0) + 100;
createFireExplosion_nanjixie(sqrChr, obj, sizeRate, totalDamage, obj.getZPos(), true);
sq_SendDestroyPacketPassiveObject(obj);
}
break;
}
break;
}
break;
case SKILL_GUNNER_VIRTUALRUSH:
if(!sqrChr || sqrChr.getState() == STATE_DIE) sq_SendDestroyPacketPassiveObject(obj);
switch(subtype){
case 1:
switch(state){
case 21:
break;
}
break;
case 2:
switch(state){
case 21:
if(sqrChr.getVar("VIRTUALRUSH_SUB1").get_obj_vector_size() <= 0){
obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
return;
}
break;
}
break;
}
break;
case SKILL_GUNNER_ROBOTRX60:
switch(subtype){
case 1:
local parentObj = obj.getParent();
if(!parentObj || parentObj.getState() == STATE_DIE){
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/mechanic_bykk/ap2/ap_virtualrush.nut");
sq_SendDestroyPacketPassiveObject(obj);
}
break;
}
break;
case SKILL_GUNNER_DIMENSIONRUNNER:
switch(subtype){
case 1:
switch(state){
case 23:
local time = sq_GetObjectTime(obj);
local targetObj = sq_GetCNRDObjectToActiveObject(obj.getVar().get_obj_vector(0));
if(targetObj){
if(sq_GetDistanceObject(obj, targetObj, false) < 10){
obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, "");
return;
}
local pAni = obj.getCurrentAnimation();
local currentT = sq_GetCurrentTime(pAni);
local fireT = 1000;//pAni.getDelaySum(0,3);
local X1 = sq_GetAccel(obj.getXPos(), targetObj.getXPos(), currentT, fireT, false);
local Y1 = sq_GetAccel(obj.getYPos(), targetObj.getYPos(), currentT, fireT, false);
if(sqrChr.isMovablePos(X1, Y1)){
sq_setCurrentAxisPos(obj, 0, X1);
sq_setCurrentAxisPos(obj, 1, Y1);
}
else{
obj.addSetStatePacket(25, null, STATE_PRIORITY_AUTO, false, "");
}
if((obj.getXPos() > targetObj.getXPos() && obj.getDirection() == ENUM_DIRECTION_RIGHT) || (obj.getXPos() < targetObj.getXPos() && obj.getDirection() == ENUM_DIRECTION_LEFT)) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj)));
}
else obj.addSetStatePacket(25, null, STATE_PRIORITY_AUTO, false, "");
break;
}
break;
case 2:
switch(state){
case 20:
local time = sq_GetObjectTime(obj);
local fireT = 1200;
local srcX = obj.getVar("custom").get_vector(1);
local srcY = obj.getVar("custom").get_vector(2);
local srcZ = obj.getVar("custom").get_vector(3);
local MoveX = obj.getVar("custom").get_vector(4);
local MoveY = obj.getVar("custom").get_vector(5);
local angle1 = obj.getVar("custom").get_vector(6);
local vx = sq_GetUniformVelocity(0, MoveX, time, fireT)
local vy = sq_GetUniformVelocity(0, MoveY, time, fireT);
local vz = 0;
if(time <= 400) vz = sq_GetUniformVelocity(0, 100, time, fireT);
else vz = sq_GetUniformVelocity(0, srcZ + 100, time - 400, fireT) * -1;
local angle = sq_GetAccel(-angle1, -135, time, fireT * 80 / 100, true);
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), vx);
sq_setCurrentAxisPos(obj, 0, dstX);
sq_setCurrentAxisPos(obj, 1, srcY + vy);
sq_setCurrentAxisPos(obj, 2, srcZ + vz);
sq_SetCustomRotate(obj, sq_ToRadian(angle.tofloat()));
if(obj.getZPos() <= 0) obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
break;
}
break;
}
break;
case SKILL_GUNNER_HELLMARCH:
switch(subtype){
case 3:
case 4:
case 5:
local time = sq_GetObjectTime(obj);
local fireT = 2150;
if(subtype == 5){
local number = obj.getVar("custom").get_vector(2);
fireT = 2100 - 450 * number;
}
local srcX = obj.getVar("custom").get_vector(0);
local MoveX = obj.getVar("custom").get_vector(1);
local vx = sq_GetUniformVelocity(0, MoveX, time, fireT);
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), vx);
if(time <= fireT) sq_setCurrentAxisPos(obj, 0, dstX);
break;
}
break;
}
if(obj.getZPos() >= 1000){
local parentObj = obj.getParent();
local pChr = obj.getTopCharacter();
local id = parentObj.getCollisionObjectIndex();
if(!id || !pChr) return;
if(pChr.isMyControlObject()) {
sq_BinaryStartWrite();
sq_BinaryWriteDword(1);
sq_BinaryWriteDword(id);
sq_BinaryWriteDword(sq_GetGroup(parentObj));
sq_BinaryWriteDword(sq_GetUniqueId(parentObj));
sq_SendChangeSkillEffectPacket(pChr, SKILL_GUNNER_HS1);
sq_SendDestroyPacketPassiveObject(obj);
}
sq_SendDestroyPacketPassiveObject(obj);
}
}