Rindro-Sqr/user/114.66.45.221/5_gunner_1.c

3059 lines
126 KiB
C
Raw Normal View History

2025-11-08 12:21:06 +08:00
//男机械
function onSourceKeyFrameFlag_appendage_kak_rx78(appendage,flagIndex)
{
if(!appendage) return;
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
if(!parentObj){
appendage.setValid(false);
return true;
}
switch(flagIndex){
case 1:
local sizeRate = sq_GetIntData(sqrChr, 27, 1);
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 27, 29, 1, 1.0) + 100;
createFireExplosion_nanjixie(sqrChr, parentObj, sizeRate, totalDamage, 0, false);
if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){
local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
dieHardAppendage.getVar().setBool(0,true);
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
}
sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 0, true, 30, 0, 1);
parentObj.setValid(false);
break;
case 11:
local moveX = sqrChr.getVar("robotsexplosion").get_vector(0);
local moveY = sqrChr.getVar("robotsexplosion").get_vector(1);
sq_setCurrentAxisPos(parentObj, 0, moveX);
sq_setCurrentAxisPos(parentObj, 1, moveY);
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 5);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
break;
case 12:
// local sizeRate = sq_GetIntData(sqrChr, 27, 1);
// local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 27, 29, 1, 1.0) + 100;
//createFireExplosion_nanjixie(sqrChr, parentObj, sizeRate, totalDamage, 0, true);
if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){
local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
dieHardAppendage.getVar().setBool(0,true);
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
}
sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 1, true, 30, 0, 1);
parentObj.setValid(false);
break;
}
}
function proc_appendage_kak_rx78(appendage)
{
if (!appendage) return;
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
if(!parentObj){
appendage.setValid(false);
return;
}
if(!sqrChr || sqrChr.getState() == STATE_DIE)
{
appendage.setValid(false);
return;
}
if(!sq_IsMyControlObject(sqrChr)) return;
local skill_level = sq_GetSkillLevel(sqrChr, 27);
local valuetime = sqrChr.sq_GetLevelData(27, 2, skill_level);
local useTime = appendage.getTimer().Get();
local ani1 = parentObj.getCurrentAnimation();
if(useTime > valuetime - 1000 && appendage.getVar().getBool(0) == false){
appendage.getVar().clear_timer_vector();
appendage.getVar().push_timer_vector();
local t = appendage.getVar().get_timer_vector(0);
t.setParameter(100, 10);
appendage.getVar().setBool(0,true)
}
local t = appendage.getVar().get_timer_vector(0);
local currentT = appendage.getTimer().Get();
if(t && t.isOnEvent(currentT) == true){
if(appendage.getVar().getBool(1) == true){
ani1.setRGBA(255, 255, 255, 255);
appendage.getVar().setBool(1,false);
}
else{
ani1.setRGBA(255, 150, 50, 255);
appendage.getVar().setBool(1,true);
}
}
if(useTime >= valuetime && sqrChr.getVar("holdandgo").getBool(0) == false){
local sizeRate = sq_GetIntData(sqrChr, 27, 1);
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 27, 29, 1, 1.0) + 100;
createFireExplosion_nanjixie(sqrChr,parentObj,sizeRate,totalDamage, 0, false);
if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){
local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
dieHardAppendage.getVar().setBool(0,true);
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
}
sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 0, true, 30, 0, 1);
parentObj.setValid(false);
}
switch(parentObj.getState()){
case STATE_STAND:
if(sqrChr.getVar("holdandgo").getBool(0)){
CNSquirrelAppendage.sq_AppendAppendage(parentObj, sqrChr, SKILL_GUNNER_HOLDANDGO, false, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut", true);
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 1);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
return;
}
local targetObj = sq_FindTarget(parentObj, -100, 900, 900, 900);
if(targetObj){
local distanceX = sq_Abs(targetObj.getXPos() - parentObj.getXPos());
local distanceY = sq_Abs(targetObj.getYPos() - parentObj.getYPos());
local distanceZ = sq_Abs(targetObj.getZPos() - parentObj.getZPos());
if(distanceX <= 20 && distanceY <= 15 && distanceZ <= 50){
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
}
}
break;
case STATE_ATTACK:
local attackIndex = parentObj.getAttackIndex();
if(attackIndex == 1){
if(sqrChr.getVar("holdandgo").getBool(0) == false){
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
parentObj.sendStateOnlyPacket(STATE_STAND);
return;
}
}
break;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function onSourceKeyFrameFlag_appendage_kak_ez8(appendage,flagIndex)
{
if(!appendage) return;
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
if(!parentObj)
{
appendage.setValid(false);
return true;
}
switch(flagIndex){
case 1:
local skill_level = sq_GetSkillLevel(sqrChr, 28);
local sizeRate = sqrChr.sq_GetLevelData(28, 3, skill_level);
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 28, 29, 1, 1.0) + 100;
createFireExplosion_nanjixie(sqrChr, parentObj, sizeRate, totalDamage, 0, false);
if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){
local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
dieHardAppendage.getVar().setBool(0,true);
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
}
parentObj.setValid(false);
break;
case 11:
local moveX = sqrChr.getVar("robotsexplosion").get_vector(0);
local moveY = sqrChr.getVar("robotsexplosion").get_vector(1);
sq_setCurrentAxisPos(parentObj, 0, moveX);
sq_setCurrentAxisPos(parentObj, 1, moveY);
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 4);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
break;
case 12:
// local skill_level = sq_GetSkillLevel(sqrChr, 28);
// local sizeRate = sqrChr.sq_GetLevelData(28, 3, skill_level);
// local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 28, 29, 1, 1.0) + 100;
//createFireExplosion_nanjixie(sqrChr, parentObj, sizeRate, totalDamage, 0, true);
if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){
local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
dieHardAppendage.getVar().setBool(0,true);
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
}
parentObj.setValid(false);
break;
}
}
function proc_appendage_kak_ez8(appendage)
{
if (!appendage) return;
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
// printp(" ,parentObj_state:"+parentObj.getState().tostring()+",attackindex:"+parentObj.getAttackIndex().tostring());
// if(parentObj.getAttackIndex() == 3) printp(",FrameIndex:"+sq_GetCurrentFrameIndex(parentObj).tostring());
if(!parentObj){
appendage.setValid(false);
return;
}
if(!sqrChr || sqrChr.getState() == STATE_DIE)
{
appendage.setValid(false);
return;
}
if(!sq_IsMyControlObject(sqrChr)) return;
local skill_level = sq_GetSkillLevel(sqrChr, 28);
local valuetime = sqrChr.sq_GetLevelData(28, 2, skill_level);
local useTime = appendage.getTimer().Get();
local ani1 = parentObj.getCurrentAnimation();
if(useTime > valuetime - 1000 && appendage.getVar().getBool(0) == false){
appendage.getVar().clear_timer_vector();
appendage.getVar().push_timer_vector();
local t = appendage.getVar().get_timer_vector(0);
t.setParameter(100, 10);
appendage.getVar().setBool(0,true)
}
local t = appendage.getVar().get_timer_vector(0);
local currentT = appendage.getTimer().Get();
if(t && t.isOnEvent(currentT) == true){
if(appendage.getVar().getBool(1) == true){
ani1.setRGBA(255, 255, 255, 255);
appendage.getVar().setBool(1,false);
}
else{
ani1.setRGBA(255, 150, 50, 255);
appendage.getVar().setBool(1,true);
}
}
if(useTime >= valuetime && sqrChr.getVar("holdandgo").getBool(0) == false){
local skill_level = sq_GetSkillLevel(sqrChr, 28);
local sizeRate = sqrChr.sq_GetLevelData(28, 3, skill_level);
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 28, 29, 1, 1.0) + 100;
createFireExplosion_nanjixie(sqrChr,parentObj,sizeRate,totalDamage, 0, false);
if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){
local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
dieHardAppendage.getVar().setBool(0,true);
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
}
sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 0, true, 30, 0, 1);
parentObj.setValid(false);
}
switch(parentObj.getState()){
case STATE_STAND:
if(sqrChr.getVar("holdandgo").getBool(0)){
CNSquirrelAppendage.sq_AppendAppendage(parentObj, sqrChr, SKILL_GUNNER_HOLDANDGO, false, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut", true);
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 2);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
return;
}
break;
case STATE_ATTACK:
local attackIndex = parentObj.getAttackIndex();
if(attackIndex == 2){
if(sqrChr.getVar("holdandgo").getBool(0) == false){
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
parentObj.sendStateOnlyPacket(STATE_STAND);
return;
}
}
break;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function onSourceKeyFrameFlag_appendage_kak_ez8ex(appendage,flagIndex)
{
if(!appendage) return;
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
if(!parentObj)
{
appendage.setValid(false);
return true;
}
switch(flagIndex){
case 1:
break;
case 11:
local moveX = sqrChr.getVar("robotsexplosion").get_vector(0);
local moveY = sqrChr.getVar("robotsexplosion").get_vector(1);
sq_setCurrentAxisPos(parentObj, 0, moveX);
sq_setCurrentAxisPos(parentObj, 1, moveY);
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 4);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
break;
case 12:
// if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){
// local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
// dieHardAppendage.getVar().setBool(0,true);
// CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
// }
local skill_level = sq_GetSkillLevel(sqrChr, 105);
local number = sqrChr.sq_GetLevelData(105, 6, skill_level);
local level = sqrChr.sq_GetLevelData(105, 0, skill_level);
local destX_01 = parentObj.getXPos() - sqrChr.getXPos();
local destY_01 = parentObj.getYPos() - sqrChr.getYPos();
if(sqrChr.getDirection() == ENUM_DIRECTION_LEFT) destX_01 = sqrChr.getXPos() - parentObj.getXPos();
for(local i = 0; i < number; i++){
summonmonster_mechanic(sqrChr,destX_01+sq_getRandom(-10,10),destY_01+sq_getRandom(-10,10),0,0,77620,20000,level,0);
}
sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/ez8_boom.ptl", parentObj, 0, 1, 0, true, 30, 0, 2);
parentObj.setValid(false);
break;
}
}
function proc_appendage_kak_ez8ex(appendage)
{
if (!appendage) return;
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
// printp(" ,parentObj_state:"+parentObj.getState().tostring()+",attackindex:"+parentObj.getAttackIndex().tostring());
// if(parentObj.getAttackIndex() == 3) printp(",FrameIndex:"+sq_GetCurrentFrameIndex(parentObj).tostring());
if(!parentObj){
appendage.setValid(false);
return;
}
if(!sqrChr || sqrChr.getState() == STATE_DIE)
{
appendage.setValid(false);
return;
}
if(!sq_IsMyControlObject(sqrChr)) return;
local valuetime = parentObj.getVar().get_vector(0);
local useTime = appendage.getTimer().Get();
if(useTime >= valuetime && sqrChr.getVar("holdandgo").getBool(0) == false){
local skill_level = sq_GetSkillLevel(sqrChr, 105);
local sizeRate = sqrChr.sq_GetLevelData(105, 3, skill_level);
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 105, 29, 1, 1.0) + 100;
createFireExplosion_nanjixie(sqrChr,parentObj,sizeRate,totalDamage, 0, false);
if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){
local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
dieHardAppendage.getVar().setBool(0,true);
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
}
sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/ez8_boom.ptl", parentObj, 0, 1, 0, true, 30, 0, 2);
local number = sqrChr.sq_GetLevelData(105, 6, skill_level);
local level = sqrChr.sq_GetLevelData(105, 0, skill_level);
local destX_01 = parentObj.getXPos() - sqrChr.getXPos();
local destY_01 = parentObj.getYPos() - sqrChr.getYPos();
if(sqrChr.getDirection() == ENUM_DIRECTION_LEFT) destX_01 = sqrChr.getXPos() - parentObj.getXPos();
for(local i = 0; i < number; i++){
summonmonster_mechanic(sqrChr,destX_01+sq_getRandom(-10,10),destY_01+sq_getRandom(-10,10),0,0,77620,600000,level,0);
}
parentObj.setValid(false);
}
switch(parentObj.getState()){
case STATE_STAND:
if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 2);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
return;
}
break;
case STATE_ATTACK:
local attackIndex = parentObj.getAttackIndex();
if(attackIndex == 2){
if(!CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){
parentObj.sendStateOnlyPacket(STATE_STAND);
return;
}
}
break;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function proc_appendage_kak_oldrobot(appendage)
{
if (!appendage) return;
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
if(!parentObj){
appendage.setValid(false);
return;
}
if(!sqrChr || sqrChr.getState() == STATE_DIE)
{
appendage.setValid(false);
return;
}
if(!sq_IsMyControlObject(sqrChr)) return;
local sqr_state = sqrChr.getState();
local bDownKey = sqrChr.isDownSkillLastKey();
local distance = sq_GetDistance(parentObj.getXPos(), parentObj.getYPos(), sqrChr.getXPos(), sqrChr.getYPos(), true);
local robotsexplosion_level = sq_GetSkillLevel(sqrChr, 93);
local skill_distance = sqrChr.sq_GetLevelData(93, 0, robotsexplosion_level) / 2;
local stateTime = sqrChr.sq_GetStateTimer();
if((sqr_state == 93 && !bDownKey && distance <= skill_distance) || (bDownKey && stateTime >= 1200)){
local moveX = sqrChr.getVar("robotsexplosion").get_vector(0);
local moveY = sqrChr.getVar("robotsexplosion").get_vector(1);
if(moveX > 0){
sq_setCurrentAxisPos(parentObj, 0, moveX);
sq_setCurrentAxisPos(parentObj, 1, moveY);
}
local skill_level = sq_GetSkillLevel(sqrChr, 28);
local sizeRate = sqrChr.sq_GetLevelData(28, 3, skill_level);
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 28, 29, 1, 1.0) + 100;
createFireExplosion_nanjixie(sqrChr,parentObj,sizeRate,totalDamage, 0, true);
if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){
local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
dieHardAppendage.getVar().setBool(0,true);
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
}
parentObj.setValid(false);
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function onSourceKeyFrameFlag_appendage_kak_exs(appendage,flagIndex)
{
if(!appendage) return;
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
if(!parentObj){
appendage.setValid(false);
return true;
}
switch(flagIndex){
case 1:
break;
case 11:
local moveX = parentObj.getVar("move").get_vector(0);
local moveY = parentObj.getVar("move").get_vector(1);
sq_setCurrentAxisPos(parentObj, 0, moveX);
sq_setCurrentAxisPos(parentObj, 1, moveY);
sq_SetCurrentDirection(parentObj, sqrChr.getDirection());
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 3);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
break;
case 12:
parentObj.sendStateOnlyPacket(STATE_STAND);
break;
}
//printp("flagIndex="+flagIndex.tostring()+"\n");
}
function proc_appendage_kak_exs(appendage)
{
if (!appendage) return;
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
// printp(" ,parentObj_state:"+parentObj.getState().tostring()+",attackindex:"+parentObj.getAttackIndex().tostring());
// if(parentObj.getAttackIndex() == 3) printp(",FrameIndex:"+sq_GetCurrentFrameIndex(parentObj).tostring());
if(!parentObj){
appendage.setValid(false);
return;
}
if(!sqrChr || sqrChr.getState() == STATE_DIE)
{
appendage.setValid(false);
return;
}
if(!sq_IsMyControlObject(sqrChr)) return;
local valuetime = appendage.getVar().get_vector(0)*0+7000;
local useTime = appendage.getTimer().Get();
if(useTime >= valuetime){
parentObj.setValid(false);
}
}
function onStart_appendage_kak_exs(appendage)
{
if (!appendage) return;
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
local skill_level = sq_GetSkillLevel(sqrChr, 29);
local valuetime = sqrChr.sq_GetLevelData(29, 3, skill_level);
appendage.getVar().clear_vector();
appendage.getVar().push_vector(valuetime);
appendage.getVar().setBool(0,true);
appendage.getVar().setBool(1,true);
appendage.getVar().setBool(2,true);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function onSourceKeyFrameFlag_appendage_kak_tempester(appendage,flagIndex)
{
if(!appendage) return;
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
if(!parentObj || parentObj.getState() == STATE_DIE){
appendage.setValid(false);
return true;
}
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
switch(flagIndex){
case 1:
break;
case 10:
local currentAni = parentObj.getCurrentAnimation();
currentAni.addLayerAnimation(-1,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/tempesterani/effectboostattack.ani"),true);
local targetObj = parentObj.getVar("targetObj").get_obj_vector(0);
if(!targetObj || targetObj.getState() == STATE_DIE) parentObj.sendStateOnlyPacket(STATE_STAND);
local hitnumber = appendage.getVar("custom").get_vector(1);
local hittime = appendage.getVar("custom").get_vector(2);
// appendage.getVar("skill_bullet").clear_timer_vector();
// appendage.getVar("skill_bullet").push_timer_vector();
// local t = appendage.getVar("skill_bullet").get_timer_vector(0);
// t.setParameter(hittime, hitnumber);
local x1 = parentObj.getVar("skill_bullet").get_vector(0);
local z1 = parentObj.getVar("skill_bullet").get_vector(1);
local angle = sq_ToDegree(sq_Atan2(x1.tofloat(), z1.tofloat()));
local offset = [[55, 0, 78],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[55, 0, 63],[50, 0, 48],[48, 0, 38],[38, 0, 31],[27, 0, 17],[10, 0, 9]];
local attackIndex = parentObj.getAttackIndex();
local pooledObj = sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/gunner/robot_by_kk/tempesterani/effectgunshoot.ani", offset[attackIndex][0], offset[attackIndex][1], offset[attackIndex][2]);
local pAni = pooledObj.getCurrentAnimation();
sq_SetfRotateAngle(pAni, sq_ToRadian(angle - 90));
local totalDamage = appendage.getVar("custom").get_vector(5);
if(!sqrChr) sqrChr = sq_getMyCharacter();
createSkillPassiveObj_nanjixie(sqrChr, targetObj, 63, 3, totalDamage, hitnumber, 0, 0, 0, 0);
break;
case 11:
// sq_SendCreatePassiveObjectPacket(parentObj, 776104, 0, 0, 0, 0, parentObj.getDirection());
// print("test");
break;
case 20:
parentObj.sq_PlaySound("TEMPESTER_MISSILE");
break;
case 21:
local hitnumber = appendage.getVar("custom").get_vector(3);
local hittime = appendage.getVar("custom").get_vector(4);
if(hitnumber % 2 == 0){
hitnumber = hitnumber / 2;
}
else if(hitnumber % 2 == 1){
hitnumber = (hitnumber / 2).tointeger() + 1;
}
// sqrChr.getVar("Debug_SubState").set_vector(4,hitnumber);
appendage.getVar("skill_missile").clear_timer_vector();
appendage.getVar("skill_missile").push_timer_vector();
local t = appendage.getVar("skill_missile").get_timer_vector(0);
t.setParameter(hittime, hitnumber);
// print(parentObj.getHp() + " && " + parentObj.getHpMax());
break;
case 101:
local moveX = parentObj.getVar("move").get_vector(0);
local moveY = parentObj.getVar("move").get_vector(1);
sq_setCurrentAxisPos(parentObj, 0, moveX);
sq_setCurrentAxisPos(parentObj, 1, moveY);
if(parentObj.getVar("move").getBool(0) == true){
sq_setCurrentAxisPos(parentObj, 2, 20);
}
sq_SetCurrentDirection(parentObj, sqrChr.getDirection());
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 4);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
break;
case 102:
if(parentObj.getVar("move").getBool(0) == true) parentObj.setValid(false);
else parentObj.sendStateOnlyPacket(STATE_STAND);
break;
}
return true;
}
function proc_appendage_kak_tempester(appendage)
{
if (!appendage) return;
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
if(!parentObj || parentObj.getState() == STATE_DIE){
appendage.setValid(false);
return;
}
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
local t_01 = appendage.getVar("skill_1").get_timer_vector(0);
local t_02 = appendage.getVar("skill_2").get_timer_vector(0);
local currentT = appendage.getTimer().Get();
switch(parentObj.getState()){
case STATE_STAND:
local chr = sq_getMyCharacter();
if(isSameObject(sqrChr,chr)){
if(sqrChr.getVar("holdandgo").getBool(0)){
CNSquirrelAppendage.sq_AppendAppendage(parentObj, sqrChr, SKILL_GUNNER_HOLDANDGO, false, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut", true);
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 2);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
return;
}
}
if(appendage.getVar().getBool(0) == false) appendage.getVar().setBool(0, true);
if(appendage.getVar().getBool(1) == false) appendage.getVar().setBool(1, true);
if(appendage.getVar().getBool(2) == false) appendage.getVar().setBool(2, true);
local targetObj = sq_FindTarget( parentObj, 0, 400, 300, 300);
if(targetObj){
local targetObjx = targetObj.getXPos();
local targetObjy = targetObj.getYPos();
local targetObjz = targetObj.getZPos();
local x1 = sq_Abs(targetObjx - parentObj.getXPos());
local z1 = sq_Abs(targetObjz - parentObj.getZPos());
if(t_02 && t_02.isOnEvent(currentT) == true){
local activeObj = sq_GetCNRDObjectToActiveObject(targetObj);
local group = sq_GetGroup(activeObj);
local uniqueId = sq_GetUniqueId(activeObj);
parentObj.getVar("skill_missile").clear_vector();
parentObj.getVar("skill_missile").push_vector(group);
parentObj.getVar("skill_missile").push_vector(uniqueId);
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 1);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
// sqrChr.getVar("Debug_SubState").set_vector(9,1000);
return;
}
else if(t_01 && t_01.isOnEvent(currentT) == true && sq_Abs(targetObj.getYPos() - parentObj.getYPos()) <= 30){
parentObj.getVar("skill_bullet").clear_vector();
parentObj.getVar("skill_bullet").push_vector(x1);
parentObj.getVar("skill_bullet").push_vector(z1);
parentObj.getVar("targetObj").clear_obj_vector();
parentObj.getVar("targetObj").push_obj_vector(targetObj);
local angle = sq_ToDegree(sq_Atan2(x1.tofloat(), z1.tofloat()));
local attackIndex;
if(angle.tointeger() > 90){
attackIndex = 0;
}
else if(angle.tointeger() == 90){
attackIndex = 6;
}
else if(angle.tointeger() < 90 && angle.tointeger() > 45){
attackIndex = 7;
}
else if(angle.tointeger() == 45){
attackIndex = 8;
}
else if(angle.tointeger() < 45 && angle.tointeger() > 30){
attackIndex = 9;
}
else if(angle.tointeger() <= 30 && angle.tointeger() > 10){
attackIndex = 10;
}
else if(angle.tointeger() <= 10){
attackIndex = 11;
}
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, attackIndex);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
return;
}
}
break;
case STATE_ATTACK:
local attackIndex = parentObj.getAttackIndex();
switch(attackIndex){
case 1:
if(appendage.getVar().getBool(0) == true){
local currentAni = parentObj.getCurrentAnimation();
currentAni.addLayerAnimation(-1,sq_CreateAnimation("","monster/character/gunner/robot_by_kk/tempesterani/effectboostattack.ani"),true);
appendage.getVar().setBool(0, false);
return;
}
local t12 = appendage.getVar("skill_missile").get_timer_vector(0);
local currentT = appendage.getTimer().Get();
if(t12 && t12.isOnEvent(currentT) == true){
local group = parentObj.getVar("skill_missile").get_vector(0);
local uniqueId = parentObj.getVar("skill_missile").get_vector(1);
local totalDamage = appendage.getVar("custom").get_vector(6);
if(!sqrChr) sqrChr = sq_getMyCharacter();
createSkillPassiveObj_nanjixie(sqrChr, parentObj, 63, 2, totalDamage, group, uniqueId, -15, 0, 70);
createSkillPassiveObj_nanjixie(sqrChr, parentObj, 63, 2, totalDamage, group, uniqueId, 30, 0, 70);
sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/gunner/robot_by_kk/tempesterani/effectmissile1.ani",-25,1,71);
sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/gunner/robot_by_kk/tempesterani/effectmissile2.ani",-25,0,70);
sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/gunner/robot_by_kk/tempesterani/effectmissile1.ani",20,1,71);
sq_AddDrawOnlyAniFromParent(parentObj,"monster/character/gunner/robot_by_kk/tempesterani/effectmissile2.ani",20,0,70);
}
local pAni = parentObj.getCurrentAnimation();
local currentT = sq_GetCurrentTime(pAni);
if(currentT >= 900 && t12.isEnd()){
local coolt_02 = appendage.getVar("custom").get_vector(7);
if(t_02 && t_02.getEventTerm() != coolt_02){
t_02.setEventTerm(coolt_02.tointeger());
}
parentObj.sendStateOnlyPacket(STATE_STAND);
return;
}
break;
case 2:
local chr = sq_getMyCharacter();
if(isSameObject(sqrChr,chr)){
if(sqrChr.getVar("holdandgo").getBool(0) == false){
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
parentObj.sendStateOnlyPacket(STATE_STAND);
return;
}
}
break;
}
break;
}
}
function onStart_appendage_kak_tempester(appendage)
{
if (!appendage) return;
appendage.getVar().setBool(0,true);
appendage.getVar().setBool(1,true);
appendage.getVar().setBool(2,true);
appendage.getVar().setBool(3,true);
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
parentObj.sq_PlaySound("TEMPESTER_APPEAR");
}
function proc_appendage_kk_tempester_buff(appendage)
{
if (!appendage) return;
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
if(!parentObj || parentObj.getState() == STATE_DIE){
appendage.setValid(false);
return;
}
}
function onStart_appendage_kk_tempester_buff(appendage)
{
if (!appendage) return;
}
function onEnd_appendage_kk_tempester_buff(appendage)
{
if (!appendage) return;
local parentObj = appendage.getParent();
if(parentObj){
local activeObj = sq_GetCNRDObjectToActiveObject(parentObj);
local normalAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_tempester.nut");
local totalDamage = normalAppendage.getVar("custom").get_vector(5);
local totalDamage2 = normalAppendage.getVar("custom").get_vector(6);
normalAppendage.getVar("custom").set_vector(5, totalDamage / 150 * 100);
normalAppendage.getVar("custom").set_vector(6, totalDamage2 / 150 * 100);
local t_01 = normalAppendage.getVar("skill_1").get_timer_vector(0);
local t_02 = normalAppendage.getVar("skill_2").get_timer_vector(0);
local bullet = t_01.getEventTerm();
local missile = t_02.getEventTerm();
print(bullet);
print(missile);
t_01.setEventTerm(bullet * 2);
t_02.setEventTerm(missile * 2);
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function onSourceKeyFrameFlag_appendage_kak_ateam(appendage,flagIndex)
{
if(!appendage) return;
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
if(!parentObj){
appendage.setValid(false);
return true;
}
switch(flagIndex){
case 1:
local sizeRate = 0;
local totalDamage = 0;
switch(parentObj.getCollisionObjectIndex()){
case 77625:
sizeRate = sq_GetIntData(sqrChr, SKILL_GUNNER_ATEAM, 6) * 2;
totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_GUNNER_ATEAM, 29, 4, 1.0) + 100;
break;
case 77626:
sizeRate = sq_GetIntData(sqrChr, SKILL_GUNNER_ATEAM, 7) * 2;
totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_GUNNER_ATEAM, 29, 5, 1.0) + 100;
break;
case 77627:
sizeRate = sq_GetIntData(sqrChr, SKILL_GUNNER_ATEAM, 8) * 2;
totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_GUNNER_ATEAM, 29, 6, 1.0) + 100;
break;
case 77628:
sizeRate = sq_GetIntData(sqrChr, SKILL_GUNNER_ATEAM, 9) * 2;
totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_GUNNER_ATEAM, 29, 2, 1.0) + 100;
break;
case 77629:
sizeRate = sq_GetIntData(sqrChr, SKILL_GUNNER_ATEAM, 10) * 2;
totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_GUNNER_ATEAM, 29, 3, 1.0) + 100;
break;
}
createFireExplosion_nanjixie(sqrChr, parentObj, sizeRate, totalDamage, 20, false);
if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){
local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
dieHardAppendage.getVar().setBool(0,true);
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
}
sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 0, true, 30, 0, 1);
parentObj.setValid(false);
break;
case 11:
local moveX = sqrChr.getVar("robotsexplosion").get_vector(0);
local moveY = sqrChr.getVar("robotsexplosion").get_vector(1);
sq_setCurrentAxisPos(parentObj, 0, moveX);
sq_setCurrentAxisPos(parentObj, 1, moveY);
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 5);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
break;
case 12:
if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){
local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
dieHardAppendage.getVar().setBool(0,true);
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
}
sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 1, true, 30, 0, 1);
parentObj.setValid(false);
break;
}
return true;
}
function proc_appendage_kak_ateam(appendage)
{
if (!appendage) return;
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
if(!parentObj){
appendage.setValid(false);
return;
}
if(!sqrChr || sqrChr.getState() == STATE_DIE)
{
appendage.setValid(false);
return;
}
if(!sq_IsMyControlObject(sqrChr)) return;
switch(parentObj.getState()){
case STATE_STAND:
if(sqrChr.getVar("holdandgo").getBool(0)){
CNSquirrelAppendage.sq_AppendAppendage(parentObj, sqrChr, SKILL_GUNNER_HOLDANDGO, false, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut", true);
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 1);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
return;
}
local targetObj = sq_FindTarget(parentObj, -100, 900, 900, 900);
if(targetObj){
local distanceX = sq_Abs(targetObj.getXPos() - parentObj.getXPos());
local distanceY = sq_Abs(targetObj.getYPos() - parentObj.getYPos());
local distanceZ = sq_Abs(targetObj.getZPos() - parentObj.getZPos());
if(distanceX <= 20 && distanceY <= 15 && distanceZ <= 50){
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
}
}
break;
case STATE_ATTACK:
local attackIndex = parentObj.getAttackIndex();
if(attackIndex == 1){
if(sqrChr.getVar("holdandgo").getBool(0) == false){
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
parentObj.sendStateOnlyPacket(STATE_STAND);
return;
}
}
break;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function onSourceKeyFrameFlag_appendage_kak_rx60(appendage,flagIndex)
{
if(!appendage) return;
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
if(!parentObj){
appendage.setValid(false);
return true;
}
switch(flagIndex){
case 1:
if(parentObj.getVar().getBool(0) == true){
parentObj.getVar().setBool(0,false);
local skill_level = sq_GetSkillLevel(sqrChr, SKILL_GUNNER_ROBOTRX60);
local range = sqrChr.sq_GetLevelData(SKILL_GUNNER_ROBOTRX60, 4, skill_level);
sq_BinaryStartWrite();
sq_BinaryWriteDword(SKILL_GUNNER_ROBOTRX60);//skillIndex
sq_BinaryWriteDword(1);//subtype
sq_BinaryWriteDword(range);
sq_SendCreatePassiveObjectPacket(parentObj, NUM_BYKK_PASSIVEOBJECT , 0, 0, 0, 0, parentObj.getDirection());
}
break;
case 11:
local moveX = sqrChr.getVar("robotsexplosion").get_vector(0);
local moveY = sqrChr.getVar("robotsexplosion").get_vector(1);
sq_setCurrentAxisPos(parentObj, 0, moveX);
sq_setCurrentAxisPos(parentObj, 1, moveY);
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 5);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
break;
case 12:
if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){
local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
dieHardAppendage.getVar().setBool(0,true);
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
}
sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 1, true, 30, 0, 1);
parentObj.setValid(false);
break;
}
return true;
}
function proc_appendage_kak_rx60(appendage)
{
if (!appendage) return;
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
if(!parentObj){
appendage.setValid(false);
return;
}
if(!sqrChr || sqrChr.getState() == STATE_DIE)
{
appendage.setValid(false);
return;
}
if(!sq_IsMyControlObject(sqrChr)) return;
local skill_level = sq_GetSkillLevel(sqrChr, SKILL_GUNNER_ROBOTRX60);
local valuetime = sqrChr.sq_GetLevelData(SKILL_GUNNER_ROBOTRX60, 3, skill_level);
local useTime = appendage.getTimer().Get();
if(useTime >= valuetime){
local sizeRate = sq_GetIntData(sqrChr, SKILL_GUNNER_ROBOTRX60, 2);
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_GUNNER_ROBOTRX60, 29, 1, 1.0) + 100;
createFireExplosion_nanjixie(sqrChr,parentObj,sizeRate,totalDamage, 0, false);
if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){
local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
dieHardAppendage.getVar().setBool(0,true);
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
}
sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 0, true, 30, 0, 1);
parentObj.setValid(false);
}
switch(parentObj.getState()){
case STATE_STAND:
if(sqrChr.getVar("holdandgo").getBool(0)){
CNSquirrelAppendage.sq_AppendAppendage(parentObj, sqrChr, SKILL_GUNNER_HOLDANDGO, false, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut", true);
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 1);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
return;
}
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
break;
case STATE_ATTACK:
local attackIndex = parentObj.getAttackIndex();
switch(attackIndex){
case 0:
if(sqrChr.getVar("holdandgo").getBool(0)){
CNSquirrelAppendage.sq_AppendAppendage(parentObj, sqrChr, SKILL_GUNNER_HOLDANDGO, false, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut", true);
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 1);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
return;
}
break;
case 1:
if(sqrChr.getVar("holdandgo").getBool(0) == false){
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
parentObj.sendStateOnlyPacket(STATE_STAND);
return;
}
break;
}
break;
}
}
function onEnd_appendage_kak_rx60(appendage)
{
if (!appendage) return;
local parentObj = appendage.getParent();
if(!parentObj) return;
parentObj.sendDestroyPacket(true);
}
function onStart_appendage_kak_rx60(appendage)
{
if (!appendage) return;
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
parentObj.getVar().setBool(0,true);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function onSourceKeyFrameFlag_appendage_kak_mechadrop1(appendage,flagIndex)
{
if(!appendage) return;
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
if(!parentObj){
appendage.setValid(false);
return true;
}
switch(flagIndex){
case 1:
if(parentObj.getVar().getBool(1) == true){
sqrChr.sq_SendSetHpPacket(sqrChr.getHp() + sqrChr.getHpMax() * 8 / 100, true, parentObj);
}
else{
local sizeRate = sq_GetIntData(sqrChr, 59, 12);
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 59, 29, 7, 1.0) + 100;
createFireExplosion_nanjixie(sqrChr, parentObj, sizeRate, totalDamage, 0, false);
sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 0, true, 30, 0, 1);
}
if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){
local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
dieHardAppendage.getVar().setBool(0,true);
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
}
parentObj.setValid(false);
break;
case 11:
local moveX = sqrChr.getVar("robotsexplosion").get_vector(0);
local moveY = sqrChr.getVar("robotsexplosion").get_vector(1);
sq_setCurrentAxisPos(parentObj, 0, moveX);
sq_setCurrentAxisPos(parentObj, 1, moveY);
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 5);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
break;
case 12:
if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){
local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
dieHardAppendage.getVar().setBool(0,true);
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
}
sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 1, true, 30, 0, 1);
parentObj.setValid(false);
break;
}
return true;
}
function proc_appendage_kak_mechadrop1(appendage)
{
if (!appendage) return;
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
if(!parentObj){
appendage.setValid(false);
return;
}
if(!sq_IsMyControlObject(sqrChr)) return;
if(!sqrChr || sqrChr.getState() == STATE_DIE)
{
appendage.setValid(false);
return;
}
local valuetime = 10000;
local useTime = appendage.getTimer().Get();
if(parentObj.getZPos() >= 300 && parentObj.getVar().getBool(10) == true){
parentObj.getVar("move").clear_vector();
parentObj.getVar("move").push_vector(parentObj.getXPos());
parentObj.getVar("move").push_vector(parentObj.getZPos());
parentObj.getVar("move").push_vector(200);
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 3);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
}
switch(parentObj.getState()){
case STATE_STAND:
if(sqrChr.getVar("holdandgo").getBool(0)){
CNSquirrelAppendage.sq_AppendAppendage(parentObj, sqrChr, SKILL_GUNNER_HOLDANDGO, false, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut", true);
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 1);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
return;
}
if(useTime > 1000){
local targetObj = sq_FindTarget(parentObj, -100, 900, 900, 900);
if(targetObj){
local distanceX = sq_Abs(targetObj.getXPos() - parentObj.getXPos());
local distanceY = sq_Abs(targetObj.getYPos() - parentObj.getYPos());
local distanceZ = sq_Abs(targetObj.getZPos() - parentObj.getZPos());
if(distanceX <= 20 && distanceY <= 15 && distanceZ <= 50){
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
}
}
}
break;
case STATE_ATTACK:
local attackIndex = parentObj.getAttackIndex();
switch(attackIndex){
case 0:
break;
case 1:
if(sqrChr.getVar("holdandgo").getBool(0) == false){
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
parentObj.sendStateOnlyPacket(STATE_STAND);
return;
}
break;
case 3:
local pAni = parentObj.getCurrentAnimation();//得到ani
local currentT = sq_GetCurrentTime(pAni);//当前时间
local fireT = pAni.getDelaySum(0, 5);//总时间
local srcX = parentObj.getVar("move").get_vector(0);//初始x坐标
local srcZ = parentObj.getVar("move").get_vector(1);//初始z坐标
local MoveX = parentObj.getVar("move").get_vector(2);//移动多少x距离
local vx = sq_GetUniformVelocity(0, MoveX, currentT, fireT);
local vz = sq_GetUniformVelocity(srcZ, 0, currentT, fireT);
local dstX = sq_GetDistancePos(srcX, parentObj.getDirection(), vx);//根据方向运算当前数值
if(parentObj.isMovablePos(dstX, parentObj.getYPos())) sq_setCurrentAxisPos(parentObj, 0, dstX);//设置当前x坐标
else{
parentObj.getVar("move").set_vector(0,parentObj.getXPos());
parentObj.getVar("move").set_vector(2,0);
}
sq_setCurrentAxisPos(parentObj, 2, vz);//设置当前z坐标
break;
}
break;
}
if(useTime >= valuetime){
local sizeRate = sq_GetIntData(sqrChr, 59, 12);
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 59, 29, 7, 1.0) + 100;
createFireExplosion_nanjixie(sqrChr,parentObj,sizeRate,totalDamage, 0, false);
if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){
local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
dieHardAppendage.getVar().setBool(0,true);
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
}
sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 0, true, 30, 0, 1);
parentObj.setValid(false);
}
}
function onEnd_appendage_kak_mechadrop1(appendage)
{
if (!appendage) return;
local parentObj = appendage.getParent();
if(!parentObj) return;
parentObj.sendDestroyPacket(true);
}
function onStart_appendage_kak_mechadrop1(appendage)
{
if (!appendage) return;
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
parentObj.getVar().setBool(0,true);
parentObj.getVar().setBool(10,true);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function onSourceKeyFrameFlag_appendage_kak_mechadrop2(appendage,flagIndex)
{
if(!appendage) return;
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
if(!parentObj){
appendage.setValid(false);
return true;
}
switch(flagIndex){
case 1:
if(parentObj.getVar().getBool(1) == true){
sqrChr.sq_SendSetMpPacket(sqrChr.getMp() + sqrChr.getMpMax() * 8 / 100, true, parentObj);
}
else{
local sizeRate = sq_GetIntData(sqrChr, 59, 12);
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 59, 29, 7, 1.0) + 100;
createFireExplosion_nanjixie(sqrChr, parentObj, sizeRate, totalDamage, 0, false);
sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 0, true, 30, 0, 1);
}
if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){
local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
dieHardAppendage.getVar().setBool(0,true);
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
}
parentObj.setValid(false);
break;
case 11:
local moveX = sqrChr.getVar("robotsexplosion").get_vector(0);
local moveY = sqrChr.getVar("robotsexplosion").get_vector(1);
sq_setCurrentAxisPos(parentObj, 0, moveX);
sq_setCurrentAxisPos(parentObj, 1, moveY);
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 5);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
break;
case 12:
if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){
local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
dieHardAppendage.getVar().setBool(0,true);
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
}
sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 1, true, 30, 0, 1);
parentObj.setValid(false);
break;
}
return true;
}
function proc_appendage_kak_mechadrop2(appendage)
{
if (!appendage) return;
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
if(!parentObj){
appendage.setValid(false);
return;
}
if(!sqrChr || sqrChr.getState() == STATE_DIE)
{
appendage.setValid(false);
return;
}
if(!sq_IsMyControlObject(sqrChr)) return;
local valuetime = 10000;
local useTime = appendage.getTimer().Get();
if(parentObj.getZPos() >= 300 && parentObj.getVar().getBool(10) == true){
parentObj.getVar("move").clear_vector();
parentObj.getVar("move").push_vector(parentObj.getXPos());
parentObj.getVar("move").push_vector(parentObj.getZPos());
parentObj.getVar("move").push_vector(200);
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 3);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
}
switch(parentObj.getState()){
case STATE_STAND:
if(sqrChr.getVar("holdandgo").getBool(0)){
CNSquirrelAppendage.sq_AppendAppendage(parentObj, sqrChr, SKILL_GUNNER_HOLDANDGO, false, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut", true);
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 1);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
return;
}
if(useTime > 1000){
local targetObj = sq_FindTarget(parentObj, -100, 900, 900, 900);
if(targetObj){
local distanceX = sq_Abs(targetObj.getXPos() - parentObj.getXPos());
local distanceY = sq_Abs(targetObj.getYPos() - parentObj.getYPos());
local distanceZ = sq_Abs(targetObj.getZPos() - parentObj.getZPos());
if(distanceX <= 20 && distanceY <= 15 && distanceZ <= 50){
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
}
}
}
break;
case STATE_ATTACK:
local attackIndex = parentObj.getAttackIndex();
switch(attackIndex){
case 0:
break;
case 1:
if(sqrChr.getVar("holdandgo").getBool(0) == false){
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
parentObj.sendStateOnlyPacket(STATE_STAND);
return;
}
break;
case 3:
local pAni = parentObj.getCurrentAnimation();//得到ani
local currentT = sq_GetCurrentTime(pAni);//当前时间
local fireT = pAni.getDelaySum(0, 5);//总时间
local srcX = parentObj.getVar("move").get_vector(0);//初始x坐标
local srcZ = parentObj.getVar("move").get_vector(1);//初始z坐标
local MoveX = parentObj.getVar("move").get_vector(2);//移动多少x距离
local vx = sq_GetUniformVelocity(0, MoveX, currentT, fireT);
local vz = sq_GetUniformVelocity(srcZ, 0, currentT, fireT);
local dstX = sq_GetDistancePos(srcX, parentObj.getDirection(), vx);//根据方向运算当前数值
if(parentObj.isMovablePos(dstX, parentObj.getYPos())) sq_setCurrentAxisPos(parentObj, 0, dstX);//设置当前x坐标
else{
parentObj.getVar("move").set_vector(0,parentObj.getXPos());
parentObj.getVar("move").set_vector(2,0);
}
sq_setCurrentAxisPos(parentObj, 2, vz);//设置当前z坐标
break;
}
break;
}
if(useTime >= valuetime){
local sizeRate = sq_GetIntData(sqrChr, 59, 12);
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 59, 29, 7, 1.0) + 100;
createFireExplosion_nanjixie(sqrChr,parentObj,sizeRate,totalDamage, 0, false);
if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){
local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
dieHardAppendage.getVar().setBool(0,true);
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
}
sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 0, true, 30, 0, 1);
parentObj.setValid(false);
}
}
function onEnd_appendage_kak_mechadrop2(appendage)
{
if (!appendage) return;
local parentObj = appendage.getParent();
if(!parentObj) return;
parentObj.sendDestroyPacket(true);
}
function onStart_appendage_kak_mechadrop2(appendage)
{
if (!appendage) return;
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
parentObj.getVar().setBool(0,true);
parentObj.getVar().setBool(10,true);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function onSourceKeyFrameFlag_appendage_kak_mechadrop3(appendage,flagIndex)
{
if(!appendage) return;
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
if(!parentObj){
appendage.setValid(false);
return true;
}
switch(flagIndex){
case 1:
local sizeRate = sq_GetIntData(sqrChr, 59, 12);
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 59, 29, 7, 1.0) + 100;
createFireExplosion_nanjixie(sqrChr, parentObj, sizeRate, totalDamage, 0, false);
if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){
local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
dieHardAppendage.getVar().setBool(0,true);
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
}
sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 0, true, 30, 0, 1);
parentObj.setValid(false);
break;
case 11:
local moveX = sqrChr.getVar("robotsexplosion").get_vector(0);
local moveY = sqrChr.getVar("robotsexplosion").get_vector(1);
sq_setCurrentAxisPos(parentObj, 0, moveX);
sq_setCurrentAxisPos(parentObj, 1, moveY);
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 5);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
break;
case 12:
if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){
local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
dieHardAppendage.getVar().setBool(0,true);
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
}
sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 1, true, 30, 0, 1);
parentObj.setValid(false);
break;
}
return true;
}
function proc_appendage_kak_mechadrop3(appendage)
{
if (!appendage) return;
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
if(!parentObj){
appendage.setValid(false);
return;
}
if(!sqrChr || sqrChr.getState() == STATE_DIE)
{
appendage.setValid(false);
return;
}
if(!sq_IsMyControlObject(sqrChr)) return;
local valuetime = 10000;
local useTime = appendage.getTimer().Get();
if(parentObj.getZPos() >= 300 && parentObj.getVar().getBool(10) == true){
parentObj.getVar("move").clear_vector();
parentObj.getVar("move").push_vector(parentObj.getXPos());
parentObj.getVar("move").push_vector(parentObj.getZPos());
parentObj.getVar("move").push_vector(200);
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 3);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
}
switch(parentObj.getState()){
case STATE_STAND:
if(sqrChr.getVar("holdandgo").getBool(0)){
CNSquirrelAppendage.sq_AppendAppendage(parentObj, sqrChr, SKILL_GUNNER_HOLDANDGO, false, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut", true);
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 1);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
return;
}
if(useTime > 1000){
local targetObj = sq_FindTarget(parentObj, -100, 900, 900, 900);
if(targetObj){
local distanceX = sq_Abs(targetObj.getXPos() - parentObj.getXPos());
local distanceY = sq_Abs(targetObj.getYPos() - parentObj.getYPos());
local distanceZ = sq_Abs(targetObj.getZPos() - parentObj.getZPos());
if(distanceX <= 20 && distanceY <= 15 && distanceZ <= 50){
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
}
}
}
break;
case STATE_ATTACK:
local attackIndex = parentObj.getAttackIndex();
switch(attackIndex){
case 0:
break;
case 1:
if(sqrChr.getVar("holdandgo").getBool(0) == false){
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
parentObj.sendStateOnlyPacket(STATE_STAND);
return;
}
break;
case 3:
local pAni = parentObj.getCurrentAnimation();//得到ani
local currentT = sq_GetCurrentTime(pAni);//当前时间
local fireT = pAni.getDelaySum(0, 5);//总时间
local srcX = parentObj.getVar("move").get_vector(0);//初始x坐标
local srcZ = parentObj.getVar("move").get_vector(1);//初始z坐标
local MoveX = parentObj.getVar("move").get_vector(2);//移动多少x距离
local vx = sq_GetUniformVelocity(0, MoveX, currentT, fireT);
local vz = sq_GetUniformVelocity(srcZ, 0, currentT, fireT);
local dstX = sq_GetDistancePos(srcX, parentObj.getDirection(), vx);//根据方向运算当前数值
if(parentObj.isMovablePos(dstX, parentObj.getYPos())) sq_setCurrentAxisPos(parentObj, 0, dstX);//设置当前x坐标
else{
parentObj.getVar("move").set_vector(0,parentObj.getXPos());
parentObj.getVar("move").set_vector(2,0);
}
sq_setCurrentAxisPos(parentObj, 2, vz);//设置当前z坐标
break;
}
break;
}
if(useTime >= valuetime){
local sizeRate = sq_GetIntData(sqrChr, 59, 12);
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 59, 29, 7, 1.0) + 100;
createFireExplosion_nanjixie(sqrChr,parentObj,sizeRate,totalDamage, 0, false);
if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){
local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
dieHardAppendage.getVar().setBool(0,true);
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
}
sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 0, true, 30, 0, 1);
parentObj.setValid(false);
}
}
function onEnd_appendage_kak_mechadrop3(appendage)
{
if (!appendage) return;
local parentObj = appendage.getParent();
if(!parentObj) return;
parentObj.sendDestroyPacket(true);
}
function onStart_appendage_kak_mechadrop3(appendage)
{
if (!appendage) return;
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
parentObj.getVar().setBool(0,true);
parentObj.getVar().setBool(10,true);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function onSourceKeyFrameFlag_appendage_kak_mechadrop4(appendage,flagIndex)
{
if(!appendage) return;
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
if(!parentObj){
appendage.setValid(false);
return true;
}
switch(flagIndex){
case 1:
local sizeRate = sq_GetIntData(sqrChr, 59, 12);
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 59, 29, 9, 1.0) + 100;
createFireExplosion_nanjixie(sqrChr, parentObj, sizeRate, totalDamage, 0, false);
if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){
local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
dieHardAppendage.getVar().setBool(0,true);
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
}
sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 0, true, 30, 0, 1);
parentObj.setValid(false);
break;
case 11:
local moveX = sqrChr.getVar("robotsexplosion").get_vector(0);
local moveY = sqrChr.getVar("robotsexplosion").get_vector(1);
sq_setCurrentAxisPos(parentObj, 0, moveX);
sq_setCurrentAxisPos(parentObj, 1, moveY);
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 5);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
break;
case 12:
if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){
local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
dieHardAppendage.getVar().setBool(0,true);
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
}
sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 1, true, 30, 0, 1);
parentObj.setValid(false);
break;
}
return true;
}
function proc_appendage_kak_mechadrop4(appendage)
{
if (!appendage) return;
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
if(!parentObj){
appendage.setValid(false);
return;
}
if(!sqrChr || sqrChr.getState() == STATE_DIE)
{
appendage.setValid(false);
return;
}
if(!sq_IsMyControlObject(sqrChr)) return;
local valuetime = 10000;
local useTime = appendage.getTimer().Get();
if(parentObj.getZPos() >= 300 && parentObj.getVar().getBool(10) == true){
parentObj.getVar("move").clear_vector();
parentObj.getVar("move").push_vector(parentObj.getXPos());
parentObj.getVar("move").push_vector(parentObj.getZPos());
parentObj.getVar("move").push_vector(200);
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 3);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
}
switch(parentObj.getState()){
case STATE_STAND:
if(sqrChr.getVar("holdandgo").getBool(0)){
CNSquirrelAppendage.sq_AppendAppendage(parentObj, sqrChr, SKILL_GUNNER_HOLDANDGO, false, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut", true);
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 1);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
return;
}
if(useTime > 1000){
local targetObj = sq_FindTarget(parentObj, -100, 900, 900, 900);
if(targetObj){
local distanceX = sq_Abs(targetObj.getXPos() - parentObj.getXPos());
local distanceY = sq_Abs(targetObj.getYPos() - parentObj.getYPos());
local distanceZ = sq_Abs(targetObj.getZPos() - parentObj.getZPos());
if(distanceX <= 20 && distanceY <= 15 && distanceZ <= 50){
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
sq_AddSetStatePacketActiveObject(parentObj, 8, pIntVec, STATE_PRIORITY_USER);
}
}
}
break;
case STATE_ATTACK:
local attackIndex = parentObj.getAttackIndex();
switch(attackIndex){
case 0:
break;
case 1:
if(sqrChr.getVar("holdandgo").getBool(0) == false){
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
parentObj.sendStateOnlyPacket(STATE_STAND);
return;
}
break;
case 3:
local pAni = parentObj.getCurrentAnimation();//得到ani
local currentT = sq_GetCurrentTime(pAni);//当前时间
local fireT = pAni.getDelaySum(0, 5);//总时间
local srcX = parentObj.getVar("move").get_vector(0);//初始x坐标
local srcZ = parentObj.getVar("move").get_vector(1);//初始z坐标
local MoveX = parentObj.getVar("move").get_vector(2);//移动多少x距离
local vx = sq_GetUniformVelocity(0, MoveX, currentT, fireT);
local vz = sq_GetUniformVelocity(srcZ, 0, currentT, fireT);
local dstX = sq_GetDistancePos(srcX, parentObj.getDirection(), vx);//根据方向运算当前数值
if(parentObj.isMovablePos(dstX, parentObj.getYPos())) sq_setCurrentAxisPos(parentObj, 0, dstX);//设置当前x坐标
else{
parentObj.getVar("move").set_vector(0,parentObj.getXPos());
parentObj.getVar("move").set_vector(2,0);
}
sq_setCurrentAxisPos(parentObj, 2, vz);//设置当前z坐标
break;
}
break;
}
if(useTime >= valuetime){
local sizeRate = sq_GetIntData(sqrChr, 59, 12);
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, 59, 29, 7, 1.0) + 100;
createFireExplosion_nanjixie(sqrChr,parentObj,sizeRate,totalDamage, 0, false);
if(CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){
local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
dieHardAppendage.getVar().setBool(0,true);
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
}
sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", parentObj, 0, 1, 0, true, 30, 0, 1);
parentObj.setValid(false);
}
}
function onEnd_appendage_kak_mechadrop4(appendage)
{
if (!appendage) return;
local parentObj = appendage.getParent();
if(!parentObj) return;
parentObj.sendDestroyPacket(true);
}
function onStart_appendage_kak_mechadrop4(appendage)
{
if (!appendage) return;
local parentObj = sq_GetCNRDObjectToActiveObject(appendage.getParent());
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
parentObj.getVar().setBool(0,true);
parentObj.getVar().setBool(10,true);
}
function onStart_appendage_holdandgotorb_kk(appendage)
{
if (!appendage) return;
local parentObj = appendage.getParent();
sq_SetCustomDamageType(parentObj, true, 2);
}
function onEnd_appendage_holdandgotorb_kk(appendage)
{
if (!appendage) return;
local parentObj = appendage.getParent();
sq_SetCustomDamageType(parentObj, true, 0);
// local pooledObj = sq_AddDrawOnlyAniFromParent(parentObj,"character/gunner/effect/animation/holdandgo/hold_go_play_normal.ani", 0, 0, 0);
// sq_SetCurrentDirection(pooledObj, ENUM_DIRECTION_RIGHT);
}
function drawAppend_appendage_holdandgotorb_kk(appendage, isOver, x, y, isFlip)
{
if (!appendage){
return;
}
local parentObj = appendage.getParent();
if (!parentObj){
appendage.setValid(false);
return;
}
local var = appendage.getVar();
local Ani = var.GetAnimationMap("exclamation", "character/gunner/effect/animation/holdandgo/hold_go_pause_normal.ani");
// if(Ani && isOver){
// sq_AnimationProc(Ani);
// sq_drawCurrentFrame(Ani, x, y, isFlip);
// }
}
//机械助手
function Gunner_HS1_BYKK(obj)
{
local chr = sq_getMyCharacter();
if (sq_GetSkillLevel(obj, SKILL_GUNNER_HS1) > 0 && isSameObject(obj,chr)){
if(obj.getVar("hs1_obj").get_obj_vector_size() < 2 && obj.getState() != STATE_DIE){
if(sq_GetSkillLevel(obj, SKILL_GUNNER_SOPHIA) > 0){
sq_BinaryStartWrite();
sq_BinaryWriteDword(3);//type
sq_BinaryWriteDword(1);//substate
sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_HS1, 0, 60, -5, 90, obj.getDirection());
sq_BinaryStartWrite();
sq_BinaryWriteDword(4);//type
sq_BinaryWriteDword(1);//substate
sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_HS1, 0, -60, 5, 90, obj.getDirection());
}
else{
sq_BinaryStartWrite();
sq_BinaryWriteDword(1);//type
sq_BinaryWriteDword(1);//substate
sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_HS1, 0, 60, -5, 90, obj.getDirection());
sq_BinaryStartWrite();
sq_BinaryWriteDword(2);//type
sq_BinaryWriteDword(1);//substate
sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_HS1, 0, -60, 5, 90, obj.getDirection());
}
}
if(obj.getVar("FGTObj").get_obj_vector_size() < 1 && obj.getState() != STATE_DIE && obj.getVar("fgt").getBool(0) == false && sq_GetSkillLevel(obj,68) > 0){
obj.getVar("fgt").setBool(0,true);
sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_PASSIVEOBJECT3, 0, 0, 0, 0, obj.getDirection());
}
else if(obj.getVar("FGTObj").get_obj_vector_size() > 0){
if(obj.getVar("FGTObj").get_obj_vector(0).getState() == STATE_DIE) obj.getVar("fgt").setBool(0,false);
}
return;
}
}
//设置技能效果
function changeskilleffect_bykk(obj, skillIndex, reciveData)
{
local subtype = reciveData.readDword();
switch(subtype){
case 1:
local id = reciveData.readDword();
local monster_obj = sq_GetCNRDObjectToActiveObject(sq_GetObject(obj, reciveData.readDword(), reciveData.readDword()));
local chr = sq_getMyCharacter();
if(!isSameObject(obj,chr)){
//print("no same object");
// sq_SendCreatePassiveObjectPacket(chr, 30555, 0, 0, 0, 50, chr.getDirection());
monster_obj.setMapFollowParent(chr);
monster_obj.setMapFollowType(1);
}
else{
//print("same object");
monster_obj.setMapFollowParent(obj);
monster_obj.setMapFollowType(1);
}
//printp("id="+id.tostring()+"\n");
switch(id){
case 77620://77620
setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_rx78.nut", "RX78Obj", 27);
break;
case 77621://77620
setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_ez8.nut", "EZ8Obj", 28);
break;
case 77622:
setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_exs.nut", "EXSObj", 29);
break;
case 77623:
setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_tempester.nut", "TEMPObj", 63);
break;
case 77624:
setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_sparrowboom.nut", "SPAObj", 83);
break;
case 77625:
setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_ateam.nut", "AteamD1Obj", SKILL_GUNNER_ATEAM);
break;
case 77626:
setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_ateam.nut", "AteamG1Obj", SKILL_GUNNER_ATEAM);
break;
case 77627:
setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_ateam.nut", "AteamH1Obj", SKILL_GUNNER_ATEAM);
break;
case 77628:
setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_ateam.nut", "AteamS1Obj", SKILL_GUNNER_ATEAM);
break;
case 77629:
setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_ateam.nut", "AteamT1Obj", SKILL_GUNNER_ATEAM);
break;
case 77630:
setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_rx60.nut", "RX60Obj", SKILL_GUNNER_ROBOTRX60);
break;
case 77631:
setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_mechadrop1.nut", "MCDrop1Obj", 59);
break;
case 77632:
setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_mechadrop2.nut", "MCDrop1Obj", 59);
break;
case 77633:
setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_mechadrop3.nut", "MCDrop1Obj", 59);
break;
case 77634:
setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_mechadrop4.nut", "MCDrop2Obj", 59);
break;
case 77635:
setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_ez8ex.nut", "EZ8exObj", 105);
break;
case 60002://77620
case 60003://77620
case 60061://77620
setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, "character/gunner/madeby_kak_mechanic/ap/ap_kk_oldrobot.nut", "OldRobotObj", 27);
break;
case 60019:
local monsternum = obj.getVar("FGTObj").get_obj_vector_size();
if(monsternum > 0){
obj.getVar("FGTObj").push_obj_vector(monster_obj);
}
else{
obj.getVar("FGTObj").clear_obj_vector();
obj.getVar("FGTObj").push_obj_vector(monster_obj);
}
break;
}
break;
}
}
function setMonsterAppendage_Nanjixie_byKK(obj, monster_obj, appendagepath, monstername, skill_index)
{
if(!obj) return;
if(!monster_obj) return;
if(appendagepath == null || monstername == null || skill_index == null) return;
appendagepath = appendagepath.tostring();
monstername = monstername.tostring();
local monster_obj = sq_GetCNRDObjectToActiveObject(monster_obj);
if(!CNSquirrelAppendage.sq_IsAppendAppendage(monster_obj, appendagepath)){
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(monster_obj, monster_obj, skill_index, false, appendagepath, true);
AddAppendage.getVar("sqrChr").clear_obj_vector();
AddAppendage.getVar("sqrChr").push_obj_vector(obj);
setMonsterInfo_Nanjixie_byKK(obj, monster_obj, skill_index, AddAppendage);
local monsternum = obj.getVar(monstername).get_obj_vector_size();
if(monsternum > 0){
obj.getVar(monstername).push_obj_vector(monster_obj);
}
else{
obj.getVar(monstername).clear_obj_vector();
obj.getVar(monstername).push_obj_vector(monster_obj);
}
}
}
//设置怪物信息
function setMonsterInfo_Nanjixie_byKK(obj, monster_obj, skill_index, appendage)
{
if(!obj) return;
local monster_id = monster_obj.getCollisionObjectIndex();
print(monster_obj.getHpMax())
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj);
if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, "character/gunner/madeby_kak_mechanic/ap2/ap_robotics.nut")){
local skillLevel = sqrChr.sq_GetSkillLevel(46);
local value1 = sq_GetLevelData(sqrChr, 46, 4, skillLevel);
local movespeed = sq_GetLevelData(sqrChr, 46, 4, skillLevel);
if(skill_index == 63) movespeed = movespeed / 4;
local hpmax = sq_GetLevelData(sqrChr, 46, 1, skillLevel);
local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_MOVE_SPEED, true, (movespeed * 0.03).tofloat(), 0);
local ap2 = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_HP_MAX, true, (hpmax).tofloat(), 0);
if(ap) ap.sq_Append(monster_obj, monster_obj);
if(ap2) ap2.sq_Append(monster_obj, monster_obj);
// print(monster_obj.getHpMax())
}
switch(monster_id){
case 77622:
local skill_level = sq_GetSkillLevel(obj, skill_index);
local resttime = obj.sq_GetIntData(skill_index, 2);
local time = resttime + 1000;
appendage.getVar("skill").clear_timer_vector();
appendage.getVar("skill").push_timer_vector();
local t_01 = appendage.getVar("skill").get_timer_vector(0);
t_01.setParameter(time, -1);
t_01.resetInstant(0);
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
sq_AddSetStatePacketActiveObject(monster_obj, 8, pIntVec, STATE_PRIORITY_USER);
break;
case 77623:
//local skill_level = sq_GetSkillLevel(obj, skill_index);
local coolt_01 = 1000;//obj.sq_GetIntData(skill_index, 5).tofloat() / 100 * 1000;
local coolt_02 = obj.sq_GetIntData(skill_index, 5).tofloat() / 100 * 2500;
appendage.getVar("skill_1").clear_timer_vector();
appendage.getVar("skill_1").push_timer_vector();
local t_01 = appendage.getVar("skill_1").get_timer_vector(0);
t_01.setParameter(coolt_01.tointeger(), -1);
t_01.resetInstant(0);
appendage.getVar("skill_2").clear_timer_vector();
appendage.getVar("skill_2").push_timer_vector();
local t_02 = appendage.getVar("skill_2").get_timer_vector(0);
t_02.setParameter(coolt_02.tointeger(), -1);
t_02.resetInstant(0);
local skill_level = sq_GetSkillLevel(obj, skill_index);
local valuetime = obj.sq_GetLevelData(skill_index, 5, skill_level);
local hitnumber1 = sq_GetIntData(obj,skill_index,1);
local hittime1 = sq_GetIntData(obj,skill_index,0);
local hitnumber2 = sq_GetIntData(obj,skill_index,3);
local hittime2 = sq_GetIntData(obj,skill_index,2);
local totalDamage = sq_GetBonusRateWithPassive(obj, skill_index, skill_index, 1, 1.0) + 100;
local totalDamage2 = sq_GetBonusRateWithPassive(obj, skill_index, skill_index, 2, 1.0) + 100;
local coolt_02 = sq_GetIntData(obj,skill_index, 5).tofloat() / 100.0 * 2500;
local sizeRate = sq_GetIntData(obj,skill_index,6);
local totalDamage3 = sq_GetBonusRateWithPassive(obj, skill_index, skill_index, 4, 1.0) + 100;
appendage.getVar("custom").clear_vector();
appendage.getVar("custom").push_vector(valuetime);
appendage.getVar("custom").push_vector(hitnumber1);
appendage.getVar("custom").push_vector(hittime1);
appendage.getVar("custom").push_vector(hitnumber2);
appendage.getVar("custom").push_vector(hittime2);
appendage.getVar("custom").push_vector(totalDamage);
appendage.getVar("custom").push_vector(totalDamage2);
appendage.getVar("custom").push_vector(coolt_02.tointeger());
appendage.getVar("custom").push_vector(sizeRate);
appendage.getVar("custom").push_vector(totalDamage3);
break;
case 77635:
local skill_level = sq_GetSkillLevel(obj, 105);
local valuetime = obj.sq_GetLevelData(105, 2, skill_level);
//printp("valuetimetest= "+valuetime.tostring()+"\n");
monster_obj.getVar().clear_vector();
monster_obj.getVar().push_vector(valuetime);
break;
}
}
//人物复活
function reset_mechanic_bykk(obj)
{
obj.getVar("fgt").setBool(0,false);
}
//机械助手发送状态
function sendSkillPacket_hs1(obj,skillIndex)
{
if(!sq_IsMyControlObject(obj)) return;
local hs1_obj01 = sq_GetCNRDObjectToCollisionObject(obj.getVar("hs1_obj").get_obj_vector(0));
local hs1_obj02 = sq_GetCNRDObjectToCollisionObject(obj.getVar("hs1_obj").get_obj_vector(1));
if(sq_GetSkillLevel(obj, SKILL_GUNNER_SOPHIA) > 0){
if(hs1_obj01 && hs1_obj01.getState() < 27){
hs1_obj01.getVar("skillIndex").setInt(10, skillIndex);
hs1_obj01.addSetStatePacket(27, null, STATE_PRIORITY_AUTO, false, "");
obj.getVar("hs1").setBool(0,true);
}
else if(hs1_obj02 && hs1_obj02.getState() < 27){
hs1_obj02.getVar("skillIndex").setInt(10, skillIndex);
hs1_obj02.addSetStatePacket(27, null, STATE_PRIORITY_AUTO, false, "");
obj.getVar("hs1").setBool(1,true);
}
else if(hs1_obj01 && hs1_obj01.getState() == 27 && obj.getVar("hs1").getBool(0) == true && skillIndex != SKILL_GUNNER_VIRTUALRUSH){
hs1_obj01.getVar("skillIndex").setInt(10, skillIndex);
hs1_obj01.addSetStatePacket(27, null, STATE_PRIORITY_AUTO, false, "");
obj.getVar("hs1").setBool(0,false);
}
else if(hs1_obj02 && hs1_obj02.getState() == 27 && obj.getVar("hs1").getBool(1) == true && skillIndex != SKILL_GUNNER_VIRTUALRUSH){
hs1_obj02.getVar("skillIndex").setInt(10, skillIndex);
hs1_obj02.addSetStatePacket(27, null, STATE_PRIORITY_AUTO, false, "");
obj.getVar("hs1").setBool(1,false);
}
else{
obj.sq_PlaySound("GN_SOPHIA_COOLTIME");
return false;
}
}
else{
if(hs1_obj01 && hs1_obj01.getState() < 26){
hs1_obj01.getVar("skillIndex").setInt(10, skillIndex);
hs1_obj01.addSetStatePacket(26, null, STATE_PRIORITY_AUTO, false, "");
obj.getVar("hs1").setBool(0, true);
}
else if(hs1_obj02 && hs1_obj02.getState() < 26){
hs1_obj02.getVar("skillIndex").setInt(10, skillIndex);
hs1_obj02.addSetStatePacket(26, null, STATE_PRIORITY_AUTO, false, "");
obj.getVar("hs1").setBool(1, true);
}
else if(hs1_obj01 && hs1_obj01.getState() == 26 && obj.getVar("hs1").getBool(0) == true){
hs1_obj01.getVar("skillIndex").setInt(10, skillIndex);
hs1_obj01.addSetStatePacket(26, null, STATE_PRIORITY_AUTO, false, "");
obj.getVar("hs1").setBool(0, false);
}
else if(hs1_obj02 && hs1_obj02.getState() == 26 && obj.getVar("hs1").getBool(1) == true){
hs1_obj02.getVar("skillIndex").setInt(10, skillIndex);
hs1_obj02.addSetStatePacket(26, null, STATE_PRIORITY_AUTO, false, "");
obj.getVar("hs1").setBool(1, false);
}
else{
return false;
}
}
if(skillIndex != SKILL_GUNNER_VIRTUALRUSH){
if(obj.getState() == 14){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(14, STATE_PRIORITY_IGNORE_FORCE, true);
}
else if(obj.getState() == 0){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
}
//机器人发送状态
function sendrobotstate_byKK(obj,type)
{
switch(type){
case 1://直接引爆
local robot = ["RX78Obj","EZ8Obj","AteamD1Obj","AteamG1Obj","AteamH1Obj","AteamS1Obj","AteamT1Obj","RX60Obj","MCDrop1Obj","MCDrop2Obj","EZ8exObj"];
local skillIndex = [27,28,SKILL_GUNNER_ATEAM,SKILL_GUNNER_ATEAM,SKILL_GUNNER_ATEAM,SKILL_GUNNER_ATEAM,SKILL_GUNNER_ATEAM,SKILL_GUNNER_ROBOTRX60,59,59,105];
local bonusrateIndex = [1,1,4,5,6,2,3,1,7,9,1];
local robotobj = ["SPARROWOBJ"];
local attackstate = [24];
for(local i = 0; i < robot.len(); i++){
local size = obj.getVar(robot[i]).get_obj_vector_size();
for(local ui = 0; ui < size; ui++){
local robot_obj = sq_GetCNRDObjectToActiveObject(obj.getVar(robot[i]).get_obj_vector(ui));
if(robot_obj){
local sizeRate = 100;
//获取爆炸大小
switch(i){
case 0:
sizeRate = sq_GetIntData(obj, 27, 1);
break;
case 1:
sizeRate = obj.sq_GetLevelData(28, 3, sq_GetSkillLevel(obj, 28));
break;
case 2:
case 3:
case 4:
case 5:
case 6:
sizeRate = sq_GetIntData(obj, SKILL_GUNNER_ATEAM, 4 + i) * 2;
break;
case 7:
sizeRate = sq_GetIntData(obj, SKILL_GUNNER_ROBOTRX60, 2);
break;
case 8:
case 9:
sizeRate = sq_GetIntData(obj, 59, 12);
break;
case 10:
sizeRate = obj.sq_GetLevelData(105, 3, sq_GetSkillLevel(obj, 105));
break;
}
local totalDamage = sq_GetBonusRateWithPassive(obj, skillIndex[i], 29, bonusrateIndex[i], 1.0) + 100;
if(skillIndex[i] == 59 && sq_GetLevelData(obj, 59, 15, sq_GetSkillLevel(obj, 59)) > 0){
totalDamage = sq_GetBonusRateWithPassive(obj, 27, -1, 1, 1.0) + 100;
print("KT-totaldamage = "+totalDamage);
}
//printp("totalDamage="+totalDamage.tostring()+"\n");
createFireExplosion_nanjixie(obj,robot_obj,sizeRate,totalDamage, 20, true);
if(CNSquirrelAppendage.sq_IsAppendAppendage(robot_obj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut")){
local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(robot_obj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
dieHardAppendage.getVar().setBool(0,true);
CNSquirrelAppendage.sq_RemoveAppendage(robot_obj, "character/gunner/madeby_kak_mechanic/ap2/ap_holdandgotorb.nut");
}
switch(i){
case 0:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/rx78_boom.ptl", robot_obj, 0, 1, 0, true, 30, 0, 1);
break;
case 1:
sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/ez8_boom.ptl", robot_obj, 0, 1, 0, true, 30, 0, 1);
break;
case 10:
sq_CreateParticle("monster/character/gunner/robot_by_kk/particle/ez8_boom.ptl", robot_obj, 0, 1, 0, true, 30, 0, 2);
local number = obj.sq_GetLevelData(105, 6, sq_GetSkillLevel(obj, 105));
local level = obj.sq_GetLevelData(105, 0, sq_GetSkillLevel(obj, 105));
local destX_01 = robot_obj.getXPos() - obj.getXPos();
local destY_01 = robot_obj.getYPos() - obj.getYPos();
if(obj.getDirection() == ENUM_DIRECTION_LEFT) destX_01 = obj.getXPos() - robot_obj.getXPos();
for(local i = 0; i < number; i++){
summonmonster_mechanic(obj,destX_01+sq_getRandom(-10,10),destY_01+sq_getRandom(-10,10),0,0,77620,20000,level,0);
}
break;
}
robot_obj.setValid(false);
}
}
}
for(local oi = 0; oi < robotobj.len(); oi++){
local size = obj.getVar(robotobj[oi]).get_obj_vector_size();
for(local yi = 0; yi < size; yi++){
local robot_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar(robotobj[oi]).get_obj_vector(yi));
if(robot_obj) robot_obj.addSetStatePacket(attackstate[oi], null, STATE_PRIORITY_AUTO, false, "");
}
}
break;
case 2://指定引爆
local robot = ["RX78Obj","EZ8Obj","AteamD1Obj","AteamG1Obj","AteamH1Obj","AteamS1Obj","AteamT1Obj","RX60Obj","MCDrop1Obj","MCDrop2Obj","EZ8exObj"];
local attackIndex = [4,3,4,4,4,4,4,4,4,4,3];
local robotobj = ["SPARROWOBJ"];
local attackstate = [22];
for(local i = 0; i < robot.len(); i++){
local size = obj.getVar(robot[i]).get_obj_vector_size();
for(local ui = 0; ui < size; ui++){
local robot_obj = sq_GetCNRDObjectToActiveObject(obj.getVar(robot[i]).get_obj_vector(ui));
if(robot_obj){
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, attackIndex[i]);
sq_AddSetStatePacketActiveObject(robot_obj, 8, pIntVec, STATE_PRIORITY_USER);
}
}
}
for(local oi = 0; oi < robotobj.len(); oi++){
local size = obj.getVar(robotobj[oi]).get_obj_vector_size();
for(local yi = 0; yi < size; yi++){
local robot_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar(robotobj[oi]).get_obj_vector(yi));
if(robot_obj) robot_obj.addSetStatePacket(attackstate[oi], null, STATE_PRIORITY_AUTO, false, "");
}
}
local skill = sq_GetSkill(obj, 63);
if(!skill.isSealFunction()){
local size = obj.getVar("TEMPObj").get_obj_vector_size();
local moveX = obj.getVar("robotsexplosion").get_vector(0);
local moveY = obj.getVar("robotsexplosion").get_vector(1);
for(local i = 0; i < size; i++){
local activeObj = sq_GetCNRDObjectToActiveObject(obj.getVar("TEMPObj").get_obj_vector(0));
if(activeObj){
activeObj.getVar("move").clear_vector();
activeObj.getVar("move").push_vector(moveX);
activeObj.getVar("move").push_vector(moveY);
activeObj.getVar("move").setBool(0,true);
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 3);
sq_AddSetStatePacketActiveObject(activeObj, 8, pIntVec, STATE_PRIORITY_USER);
}
}
}
local skill2 = sq_GetSkill(obj, 29);
if(!skill2.isSealFunction()){
local size2 = obj.getVar("ExsS_OBJ").get_obj_vector_size();
for(local ui = 0; ui < size2; ui++){
local activeObj = sq_GetCNRDObjectToCollisionObject(obj.getVar("ExsS_OBJ").get_obj_vector(ui));
if(activeObj) activeObj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, "");
}
}
break;
case 3://全息机械助手直接引爆
local effect_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar("VIRTUALRUSH_SUB1").get_obj_vector(0));
effect_obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
local size = obj.getVar("VIRTUALRUSH_SUB2").get_obj_vector_size();
for(local i = 0; i < size; i++){
local effect2_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar("VIRTUALRUSH_SUB2").get_obj_vector(i));
effect2_obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
}
break;
case 4://全息机械助手指定引爆
local aimPosX = obj.getVar("virtualrush").get_vector(0);
local aimPosY = obj.getVar("virtualrush").get_vector(1);
local effect_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar("VIRTUALRUSH_SUB1").get_obj_vector(0));
sq_setCurrentAxisPos(effect_obj, 0, aimPosX);
sq_setCurrentAxisPos(effect_obj, 1, aimPosY);
effect_obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
local size = obj.getVar("VIRTUALRUSH_SUB2").get_obj_vector_size();
for(local i = 0; i < size; i++){
local effect2_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar("VIRTUALRUSH_SUB2").get_obj_vector(i));
effect2_obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");
}
break;
case 5://全息机械助手指定引爆
local aimPosX = obj.getVar("robotsexplosion").get_vector(0);
local aimPosY = obj.getVar("robotsexplosion").get_vector(1);
obj.getVar("virtualrush").clear_vector();
obj.getVar("virtualrush").push_vector(aimPosX);
obj.getVar("virtualrush").push_vector(aimPosY);
local effect_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar("VIRTUALRUSH_SUB1").get_obj_vector(0));
sq_setCurrentAxisPos(effect_obj, 0, aimPosX);
sq_setCurrentAxisPos(effect_obj, 1, aimPosY);
effect_obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
local size = obj.getVar("VIRTUALRUSH_SUB2").get_obj_vector_size();
for(local i = 0; i < size; i++){
local effect2_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar("VIRTUALRUSH_SUB2").get_obj_vector(i));
effect2_obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");
}
break;
}
}
//融合爆炸为单HIT
function createPointFireExplosion_byKK(obj,type)
{
if(!sq_IsMyControlObject(obj)) return;
switch(type){
case 1:
local aimPosX = obj.getVar("robotsexplosion").get_vector(0);
local aimPosY = obj.getVar("robotsexplosion").get_vector(1);
if(aimPosX > 0){
local robotsexplosion_level = sq_GetSkillLevel(obj, 93);
local bonusrate = obj.sq_GetLevelData(93, 1, robotsexplosion_level).tofloat() / 100;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/gunner//madeby_kak_mechanic/ap2/ap_robotics.nut")){
local skillLevel = obj.sq_GetSkillLevel(46);
local value1 = sq_GetLevelData(obj, 46, 5, skillLevel);
bonusrate = bonusrate + value1.tofloat() / 1000;
}
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/gunner/madeby_kak_mechanic/ap2/ap_lastfightingspirit.nut")){
local skillLevel = obj.sq_GetSkillLevel(68);
local value1 = sq_GetLevelData(obj, 68, 6, skillLevel);
bonusrate = bonusrate + value1.tofloat() / 1000;
}
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/gunner/madeby_kak_mechanic/ap2/ap_arkreactor.nut")){
local skillLevel = obj.sq_GetSkillLevel(127);
local value1 = sq_GetLevelData(obj, 127, 0, skillLevel);
bonusrate = bonusrate + value1.tofloat() / 1000;
}
//printp("bonusrate = "+bonusrate.tostring()+"\n");
local sizeRate = 100;
local size_all = 0;
local totalDamage_all = 0;
local number = 0;
local robot = ["RX78Obj","EZ8Obj","SPARROWOBJ","AteamD1Obj","AteamG1Obj","AteamH1Obj","AteamS1Obj","AteamT1Obj","RX60Obj","MCDrop1Obj","MCDrop2Obj","EZ8exObj"];
local skillIndex = [27,28,83,SKILL_GUNNER_ATEAM,SKILL_GUNNER_ATEAM,SKILL_GUNNER_ATEAM,SKILL_GUNNER_ATEAM,SKILL_GUNNER_ATEAM,SKILL_GUNNER_ROBOTRX60,59,59,105];
local damageIndex = [1,1,4,4,5,6,2,3,1,7,9,1];
for(local i = 0; i < robot.len(); i++){
local size = obj.getVar(robot[i]).get_obj_vector_size();
local totaldamage = sq_GetBonusRateWithPassive(obj, skillIndex[i], -1, damageIndex[i], bonusrate) + 100;
if(skillIndex[i] == 59 && sq_GetLevelData(obj, 59, 15, sq_GetSkillLevel(obj, 59)) > 0){
totaldamage = sq_GetBonusRateWithPassive(obj, 27, -1, 1, bonusrate) + 100;
// print("KT-totaldamage = "+totaldamage);
}
local sizeRate2 = 0;
switch (i) {
case 0: sizeRate2 = sq_GetIntData(obj, skillIndex[i], 1); break;
case 1: sizeRate2 = sq_GetLevelData(obj, skillIndex[i], 3, sq_GetSkillLevel(obj, skillIndex[i])); break;
case 2: sizeRate2 = sq_GetIntData(obj, skillIndex[i], 7); break;
case 3: sizeRate2 = sq_GetIntData(obj, skillIndex[i], 6); break;
case 4: sizeRate2 = sq_GetIntData(obj, skillIndex[i], 7); break;
case 5: sizeRate2 = sq_GetIntData(obj, skillIndex[i], 8); break;
case 6: sizeRate2 = sq_GetIntData(obj, skillIndex[i], 9); break;
case 7: sizeRate2 = sq_GetIntData(obj, skillIndex[i], 10); break;
case 8: sizeRate2 = sq_GetIntData(obj, skillIndex[i], 2); break;
case 9: sizeRate2 = sq_GetIntData(obj, skillIndex[i], 14); break;
case 10: sizeRate2 = sq_GetIntData(obj, skillIndex[i], 14); break;
case 11: sizeRate2 = sq_GetLevelData(obj, skillIndex[i], 3, sq_GetSkillLevel(obj, skillIndex[i])); break;
}
// print(sizeRate2 + " && " + sizeRate);
if(size > 0 && sizeRate2 > sizeRate) sizeRate = sizeRate2;
size_all = size + size_all;
totalDamage_all = size * totaldamage + totalDamage_all;
number = number + size;
}
local activeObj = sq_GetCNRDObjectToActiveObject(obj.getVar("TEMPObj").get_obj_vector(0));
local skill = sq_GetSkill(obj, 63);
if(activeObj && !skill.isSealFunction()){
local totalDamage = sq_GetBonusRateWithPassive(obj, 63, 29, 4, 1.0) + 100;
totalDamage_all = totalDamage_all + totalDamage;
number = number + 1;
}
local skill = sq_GetSkill(obj, 29);
if(!skill.isSealFunction()){
local size2 = obj.getVar("ExsS_OBJ").get_obj_vector_size();
local totalDamage = sq_GetBonusRateWithPassive(obj, 29, 29, 2, 1.0) + 100;
totalDamage_all = totalDamage_all + totalDamage * size2;
number = number + size2;
//printp("size2="+size2.tostring()+"totalDamage_all="+totalDamage_all.tostring()+"\n");
}
if(totalDamage_all > 0){
if(size_all > 10) sizeRate = sizeRate + 50 + (size_all - 10)* 1;
else sizeRate = sizeRate + size_all * 5;
// print(sizeRate);
// print("totalDamage_all="+totalDamage_all.tostring()+"\n");
sq_BinaryStartWrite();
sq_BinaryWriteDword(200);//skillIndex
sq_BinaryWriteDword(2);//subtype
sq_BinaryWriteDword(sizeRate);
sq_BinaryWriteDword(totalDamage_all);
sq_SendCreatePassiveObjectPacketPos(obj, NUM_BYKK_PASSIVEOBJECT , 0, aimPosX, aimPosY + 1, 30);
// if(number > 0){
// for(local i = 0; i < number - 1; i++){
// sq_BinaryStartWrite();
// sq_BinaryWriteDword(201);//skillIndex
// sq_BinaryWriteDword(1);//subtype
// sq_BinaryWriteDword(sizeRate);
// sq_BinaryWriteDword(0);
// sq_SendCreatePassiveObjectPacketPos(obj, NUM_BYKK_PASSIVEOBJECT , 0, aimPosX, aimPosY + 1, 30);
// }
// }
}
}
break;
case 2:
case 3:
local aimPosX = obj.getVar("virtualrush").get_vector(0);
local aimPosY = obj.getVar("virtualrush").get_vector(1);
if(type == 3){
aimPosX = obj.getVar("robotsexplosion").get_vector(0);
aimPosY = obj.getVar("robotsexplosion").get_vector(1);
}
if(aimPosX > 0){
local sizeRate = 100, sizeRate2 = 0;
local totalDamage_all = 0;
local number = 0;
local size = obj.getVar("VIRTUALRUSH_SUB2").get_obj_vector_size();
for(local i = 0; i < size; i++){
local effect_obj = sq_GetCNRDObjectToCollisionObject(obj.getVar("VIRTUALRUSH_SUB2").get_obj_vector(i));
local skillIndex_sub1 = effect_obj.getVar("skillIndex_sub1").get_vector(0);
local skillIndex_sub2 = effect_obj.getVar("skillIndex_sub2").get_vector(0);
local totalDamage = 0;
local robotsexplosion_level = sq_GetSkillLevel(obj, 93);
local bonusrate = obj.sq_GetLevelData(93, 1, robotsexplosion_level).tofloat() / 100;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/gunner/madeby_kak_mechanic/ap2/ap_robotics.nut")){
local skillLevel = obj.sq_GetSkillLevel(46);
local value1 = sq_GetLevelData(obj, 46, 5, skillLevel);
bonusrate = bonusrate * (1000 + value1).tofloat() / 1000;
}
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/gunner/madeby_kak_mechanic/ap2/ap_lastfightingspirit.nut")){
local skillLevel = obj.sq_GetSkillLevel(68);
local value1 = sq_GetLevelData(obj, 68, 6, skillLevel);
bonusrate = bonusrate * (1000 + value1).tofloat() / 1000;
}
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/gunner/madeby_kak_mechanic/ap2/ap_arkreactor.nut")){
local skillLevel = obj.sq_GetSkillLevel(127);
local value1 = sq_GetLevelData(obj, 127, 0, skillLevel);
bonusrate = bonusrate * (1000 + value1).tofloat() / 1000;
}
if(sq_GetSkillLevel(obj, SKILL_GUNNER_SOPHIA) > 0){
bonusRate = bonusRate * (1000 + sq_GetLevelData(obj,SKILL_GUNNER_SOPHIA, 0, sq_GetSkillLevel(obj, SKILL_GUNNER_SOPHIA))) / 1000;
}
switch(skillIndex_sub1){
case SKILL_GUNNER_ATEAM:
switch(skillIndex_sub2){
case 1:
totalDamage = sq_GetBonusRateWithPassive(obj, skillIndex_sub1, 29, 4, bonusrate) + 100;
sizeRate2 = sq_GetIntData(obj, skillIndex_sub1, 6);
break;
case 2:
totalDamage = sq_GetBonusRateWithPassive(obj, skillIndex_sub1, 29, 5, bonusrate) + 100;
sizeRate2 = sq_GetIntData(obj, skillIndex_sub1, 7);
break;
case 3:
totalDamage = sq_GetBonusRateWithPassive(obj, skillIndex_sub1, 29, 6, bonusrate) + 100;
sizeRate2 = sq_GetIntData(obj, skillIndex_sub1, 8);
break;
case 4:
totalDamage = sq_GetBonusRateWithPassive(obj, skillIndex_sub1, 29, 3, bonusrate) + 100;
sizeRate2 = sq_GetIntData(obj, skillIndex_sub1, 9);
break;
case 5:
totalDamage = sq_GetBonusRateWithPassive(obj, skillIndex_sub1, 29, 2, bonusrate) + 100;
sizeRate2 = sq_GetIntData(obj, skillIndex_sub1, 10);
break;
}
break;
case SKILL_GUNNER_ROBOTRX60:
totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_GUNNER_ROBOTRX60, 29, 1, bonusrate) + 100;
sizeRate2 = sq_GetIntData(obj, SKILL_GUNNER_ROBOTRX60, 2);
break;
case 27:
totalDamage = sq_GetBonusRateWithPassive(obj, 27, 29, 1, bonusrate) + 100;
sizeRate2 = sq_GetIntData(obj, 27, 1);
break;
case 28:
totalDamage = sq_GetBonusRateWithPassive(obj, 28, 29, 1, bonusrate) + 100;
sizeRate2 = sq_GetLevelData(obj, 28, 3, sq_GetSkillLevel(obj, 28));
break;
case 59:
switch(skillIndex_sub2){
case 1:
case 2:
totalDamage = sq_GetBonusRateWithPassive(obj, 59, 29, 7, bonusrate) + 100;
if(sq_GetLevelData(obj, 59, 15, sq_GetSkillLevel(obj, 59)) > 0){
totaldamage = sq_GetBonusRateWithPassive(obj, 27, -1, 1, bonusrate) + 100;
print("KT-totaldamage = "+totaldamage);
}
break;
case 3:
totalDamage = sq_GetBonusRateWithPassive(obj, 59, 29, 9, bonusrate) + 100;
if(sq_GetLevelData(obj, 59, 15, sq_GetSkillLevel(obj, 59)) > 0){
totaldamage = sq_GetBonusRateWithPassive(obj, 27, -1, 1, bonusrate) + 100;
print("KT-totaldamage = "+totaldamage);
}
break;
}
sizeRate2 = sq_GetIntData(obj, 59, 14);
break;
case 83:
totalDamage = sq_GetBonusRateWithPassive(obj, 83, 29, 4, bonusrate) + 100;
sizeRate2 = sq_GetIntData(obj, 83, 7);
break;
case 105:
totalDamage = sq_GetBonusRateWithPassive(obj, 105, 29, 1, bonusrate) + 100;
sizeRate2 = sq_GetLevelData(obj, 105, 3, sq_GetSkillLevel(obj, 105));
break;
}
// print(sizeRate2 + " && " + sizeRate);
if(sizeRate2 > sizeRate) sizeRate = sizeRate2;
totalDamage_all = totalDamage_all + totalDamage;
number = number + 1;
}
if(size > 10) sizeRate = sizeRate + 50 + (size - 10)* 1;
else sizeRate = sizeRate + size * 5;
if(totalDamage_all > 0){
sq_BinaryStartWrite();
sq_BinaryWriteDword(200);//skillIndex
sq_BinaryWriteDword(2);//subtype
sq_BinaryWriteDword(sizeRate);
sq_BinaryWriteDword(totalDamage_all);
sq_SendCreatePassiveObjectPacketPos(obj, NUM_BYKK_PASSIVEOBJECT , 0, aimPosX, aimPosY + 1, 30);
// if(number > 0){
// for(local i = 0; i < number - 1; i++){
// sq_BinaryStartWrite();
// sq_BinaryWriteDword(201);//skillIndex
// sq_BinaryWriteDword(1);//subtype
// sq_BinaryWriteDword(sizeRate);
// sq_BinaryWriteDword(0);
// sq_SendCreatePassiveObjectPacketPos(obj, NUM_BYKK_PASSIVEOBJECT , 0, aimPosX, aimPosY + 1, 30);
// }
// }
}
}
break;
}
}
//生成爆炸OBJ
function createFireExplosion_nanjixie(obj,passiveobject,sizeRate,totalDamage,zpos,isTrue)
{
obj = sq_GetCNRDObjectToSQRCharacter(obj)
local bonusrate = 1.0;// + obj.getVar("mechanics_bonusRate").get_vector(0).tofloat() / 1000.0;
// print("createFireExplosion_nanjixie: bonusrate = "+bonusrate);
if(isTrue == true){
local robotsexplosion_level = sq_GetSkillLevel(obj, 93);
local bonus = obj.sq_GetLevelData(93, 1, robotsexplosion_level).tofloat() / 100;
bonusrate = bonusrate * bonus;
}
// print("createFireExplosion_nanjixie: bonusrate2 = "+bonusrate);
//printp("totalDamage="+totalDamage.tostring()+"\n");
totalDamage = (totalDamage.tofloat() * bonusrate).tointeger();
//printp("bonusrate="+bonusrate.tostring()+"totalDamage="+totalDamage.tostring()+"\n");
sq_BinaryStartWrite();
sq_BinaryWriteDword(200);//skillIndex
sq_BinaryWriteDword(1);//subtype
sq_BinaryWriteDword(sizeRate);
sq_BinaryWriteDword(totalDamage);
// printp("sizeRate="+sizeRate.tostring()+" ,totalDamage="+totalDamage.tostring()+"\n");
local destX_01 = 0;
local destY_01 = 0;
if(passiveobject.getDirection() == ENUM_DIRECTION_RIGHT)
{
destX_01 = passiveobject.getXPos() - obj.getXPos();
destY_01 = passiveobject.getYPos() - obj.getYPos();
}
else if(passiveobject.getDirection() == ENUM_DIRECTION_LEFT)
{
destX_01 = obj.getXPos() - passiveobject.getXPos();
destY_01 = passiveobject.getYPos() - obj.getYPos();
}
sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_PASSIVEOBJECT , 0, destX_01, destY_01, zpos - obj.getZPos(), passiveobject.getDirection());
}
//生成技能OBJ
function createSkillPassiveObj_nanjixie(obj,passiveobject,skillIndex,subtype,totalDamage,etc_num1,etc_num2,x,y,z)
{
obj = sq_GetCNRDObjectToSQRCharacter(obj);
local bonusrate = 1.0;//obj.getVar("mechanics_bonusRate").get_vector(0).tofloat() / 1000.0;
// if(bonusrate <= 1) bonusrate = 1.0;
// print("bonusrate2 = "+bonusrate+" ,,totalDamage = "+totalDamage);
// print("createSkillPassiveObj_nanjixie: bonusrate = "+bonusrate);
totalDamage = (totalDamage.tofloat() * bonusrate).tointeger();
sq_BinaryStartWrite();
sq_BinaryWriteDword(skillIndex);//skillIndex
sq_BinaryWriteDword(subtype);//subtype
sq_BinaryWriteDword(totalDamage);
if(etc_num1 > 0) sq_BinaryWriteDword(etc_num1);
if(etc_num2 > 0) sq_BinaryWriteDword(etc_num2);
local destX_01 = 0;
local destY_01 = 0;
if(!isSameObject(obj,passiveobject)){
if(passiveobject.getDirection() == ENUM_DIRECTION_RIGHT){
destX_01 = passiveobject.getXPos() - obj.getXPos();
destY_01 = passiveobject.getYPos() - obj.getYPos();
}
else if(passiveobject.getDirection() == ENUM_DIRECTION_LEFT){
destX_01 = obj.getXPos() - passiveobject.getXPos();
destY_01 = passiveobject.getYPos() - obj.getYPos();
}
}
if(skillIndex == 63) z = z + 150;
sq_SendCreatePassiveObjectPacket(obj, NUM_BYKK_PASSIVEOBJECT , 0, destX_01 + x, destY_01 + y, z - obj.getZPos(), passiveobject.getDirection());
}
function summonmonster_mechanic(obj,x,y,z,substate,monsterId,summontime,level,team)
{
if(obj.getVar("Summonnum").size_vector() == 0)
{
obj.getVar("Summonnum").clear_vector();
obj.getVar("Summonnum").push_vector(0);
}
sq_BinaryStartWrite();
sq_BinaryWriteByte(substate);
sq_BinaryWriteDword(monsterId);
sq_BinaryWriteWord(team);
sq_BinaryWriteWord(level);
sq_BinaryWriteWord(obj.getVar("Summonnum").get_vector(0));
sq_BinaryWriteDword(0);
sq_BinaryWriteDword(summontime);
sq_BinaryWriteWord(1);
sq_BinaryWriteWord(1);
sq_BinaryWriteWord(1);
sq_SendCreatePassiveObjectPacket(obj, 48024, 0, x, y, z, obj.getDirection());
obj.getVar("Summonnum").set_vector(0,obj.getVar("Summonnum").get_vector(0) + 1);
}
function mechanic_kkmade(obj)
{
local bonusRate = 1000;
if(sq_GetSkillLevel(obj, SKILL_GUNNER_ARKREACTOR) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj,SKILL_GUNNER_ARKREACTOR, 0, sq_GetSkillLevel(obj, SKILL_GUNNER_ARKREACTOR))) / 1000;
print("bonusRate1 = "+bonusRate);
if(sq_GetSkillLevel(obj, SKILL_GUNNER_LASTFIGHTINGSPIRIT) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj,SKILL_GUNNER_LASTFIGHTINGSPIRIT, 6, sq_GetSkillLevel(obj, SKILL_GUNNER_LASTFIGHTINGSPIRIT))) / 1000;
print("bonusRate2 = "+bonusRate);
if(sq_GetSkillLevel(obj, SKILL_GUNNER_SOPHIA) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj,SKILL_GUNNER_SOPHIA, 0, sq_GetSkillLevel(obj, SKILL_GUNNER_SOPHIA))) / 1000;
print("bonusRate3 = "+bonusRate);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/gunner/madeby_kak_mechanic/ap2/ap_robotics.nut")) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_GUNNER_ROBOTICS, 5, sq_GetSkillLevel(obj, SKILL_GUNNER_ROBOTICS))) / 1000;
print("bonusRate4 = "+bonusRate);
obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger());
// obj.getVar("mechanics_bonusRate").clear_vector();
// obj.getVar("mechanics_bonusRate").push_vector(bonusRate);
// print("bonusRate = "+bonusRate);
}
function startSkillCoolTime_gunner_bykk(obj, skillIndex, skillLevel, currentCoolTime)
{
switch(skillIndex){
case SKILL_GUNNER_G1:
case SKILL_GUNNER_G2:
case SKILL_GUNNER_G3:
local newCoolTime = sq_GetIntData(obj, SKILL_GUNNER_G1, 3);
return newCoolTime;
break;
}
if (isAtSOWalkerOnBody(obj)){
switch (skillIndex){
case SKILL_AIMSHOOT:
case SKILL_BURSTBOMB:
case SKILL_NEODYMIUMFUSEE:
case SKILL_TRIPLEGUNSHOT:
case SKILL_MCPICE:
case SKILL_DIRECTFEEDBACK:
local reduceCoolTime = obj.sq_GetIntData(SKILL_AT_SOWALKER, 46);
reduceCoolTime = currentCoolTime * (reduceCoolTime.tofloat() / 100.0);
newCoolTime = currentCoolTime - reduceCoolTime;
break;
}
}
return currentCoolTime;
}
function createOnlyDrawObject_mechanic_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer)
{
local ani = sq_CreateAnimation("",aniPath);//创建ani
local pooledObj = sq_CreatePooledObject(ani,isTrue);//创建绘画对象 参数2应该是ani结束时true 就销毁反之false不销毁
sq_SetCurrentDirection(pooledObj, direction);//设置方向
pooledObj.setCurrentPos(x,y,z);//设置pos
pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer);//设置图层
sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false);//增加对象
return pooledObj;
}
function setCustomData_po_hs1_bykk(obj, receiveData)
{
if(!obj) return;
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter());
local hs1_number = sqrChr.getVar("hs1_obj").get_obj_vector_size();
if(hs1_number > 0) sqrChr.getVar("hs1_obj").push_obj_vector(obj);
else{
sqrChr.getVar("hs1_obj").clear_obj_vector();
sqrChr.getVar("hs1_obj").push_obj_vector(obj);
}
print("test");
obj.setMapFollowParent(sqrChr);
obj.setMapFollowType(1);
local type = receiveData.readDword();
local substate = receiveData.readDword();
obj.getVar("type").setInt(0, type);
obj.getVar("substate").setInt(0, substate);
switch(type){
case 3:
case 4:
if(sq_getRandom(0,100) > 50) obj.sq_PlaySound("GN_SOPHIA_ENTER_01");
else obj.sq_PlaySound("GN_SOPHIA_ENTER_02");
case 1:
case 2:
obj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, "");
break;
}
}
function setState_po_hs1_bykk(obj, state, datas)
{
if(!obj) return;
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter());
local type = obj.getVar("type").getInt(0);
local substate = obj.getVar("substate").getInt(0);
obj.getVar("state").setInt(0,state);//把state存入数组
local aniPath = "passiveobject/mechanic_bykk/animation/hs1/";
local aniSet = ["hs-1_body02_1.ani","hs-1_body02_2.ani","hs-1_body02_3.ani","hs-1_body02_4.ani","hs-1_body02_5.ani","hs-1_body02_6.ani","hs-1_body02_7.ani"];
if(type > 2){
aniPath = "passiveobject/mechanic_bykk/animation/hs1/lv95passive/";
aniSet = ["hs-1_3rd_01_stand_body.ani","hs-1_3rd_02_sad_body.ani","hs-1_3rd_04_happy_body.ani","hs-1_3rd_06_message_body.ani","hs-1_3rd_07_voice_body.ani","hs-1_3rd_08_hologram_body.ani","hs-1_3rd_03_twinkle_body.ani","hs-1_3rd_05_danger_body.ani"];
}
local ani = sq_CreateAnimation("", aniPath + aniSet[state - 20]);
obj.setCurrentAnimation(ani);
local setState = 26;
if(type > 2) setState = 27;
if(state < setState){
if(!obj.isExistTimeEvent(10)) obj.setTimeEvent(10, 15, -1, true);
}
else{
obj.removeAllTimeEvent();
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_GetDistancePos(sq_GetXPos(sqrChr), sqrChr.getDirection(), 80));
obj.getVar("move").setInt(14, sq_GetYPos(sqrChr));
local moveZ = sq_GetZPos(sqrChr) + 170;
local skillIndex = obj.getVar("skillIndex").getInt(10)
if(skillIndex == 63) moveZ = moveZ + 170;
else if(skillIndex == SKILL_GUNNER_ATEAM) moveZ = moveZ + 195;
else if(skillIndex == SKILL_GUNNER_VIRTUALRUSH) moveZ = moveZ + 105;
obj.getVar("move").setInt(15, moveZ);
obj.setTimeEvent(20, 5, 30, true);
}
}
function onEndCurrentAni_po_hs1_bykk(obj)
{
if(!obj) return;
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter());
local type = obj.getVar("type").getInt(0);
local substate = obj.getVar("substate").getInt(0);
local state = obj.getVar("state").getInt(0);
switch(type){
case 1:
case 2:
local emo_num = sq_getRandom(20,25).tointeger();
obj.addSetStatePacket(emo_num, null, STATE_PRIORITY_AUTO, false, "");
break;
case 3:
case 4:
local emo_num = sq_getRandom(20,26).tointeger();
obj.addSetStatePacket(emo_num, null, STATE_PRIORITY_AUTO, false, "");
break;
}
}
function onAttack_po_hs1_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj) return;
}
function procAppend_po_hs1_bykk(obj)
{
if(!obj) return;
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter());
if(!sqrChr || sqrChr.getState() == STATE_DIE){
if(type == 4) obj.sq_PlaySound("GN_SOPHIA_DIE");
sq_SendDestroyPacketPassiveObject(obj);
}
local chr = sq_GetMyMasterCharacter();
if(!isSameObject(sqrChr, chr)){
sq_SendDestroyPacketPassiveObject(obj);
}
}
function onKeyFrameFlag_po_hs1_bykk(obj, flagIndex)
{
if(!obj) return;
}
function onTimeEvent_po_hs1_bykk(obj, timeEventIndex, timeEventCount)
{
if(!obj) return;
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter());
local type = obj.getVar("type").getInt(0);
local substate = obj.getVar("substate").getInt(0);
local soundEffect = ["HS_1_01","HS_1_02","HS_1_03","HS_1_04","HS_1_CAST"];
switch(timeEventIndex){
case 1:
local skillIndex = obj.getVar("skillIndex").getInt(10);
obj.getVar("skillIndex").setInt(10, 0);
local pooledObj01,pooledObj02,pooledObj03,pooledObj04,pooledObj05,pooledObj06;
local destX_01 = 0;
local destY_01 = obj.getYPos() - sqrChr.getYPos();
if(sqrChr.getDirection() == ENUM_DIRECTION_RIGHT) destX_01 = obj.getXPos() - sqrChr.getXPos();
else if(sqrChr.getDirection() == ENUM_DIRECTION_LEFT) destX_01 = sqrChr.getXPos() - obj.getXPos();
local skill_level = sq_GetSkillLevel(sqrChr, skillIndex);
local level = sqrChr.sq_GetLevelData(skillIndex, 0, skill_level);
switch(skillIndex){
case 63:
pooledObj01 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/hs1/callrobot_01.ani", 0, -1, 150 - obj.getZPos());
break;
case SKILL_GUNNER_ATEAM:
pooledObj01 = pooledObj01 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/hs1/a-team/callrobot_01.ani", 0, -1, 0 - obj.getZPos());
break;
case SKILL_GUNNER_VIRTUALRUSH:
obj.sq_PlaySound("GN_SOPHIA_VIRTUALRUSH");
createSkillPassiveObj_nanjixie(sqrChr,obj,SKILL_GUNNER_VIRTUALRUSH,1,0,0,0,0,-1,0);
break;
default:
pooledObj01 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/hs1/callrobot_01.ani", 0, -1, -20 - obj.getZPos());
break;
}
switch(skillIndex){
case 27:
local skill_level = sq_GetSkillLevel(sqrChr, 42);
if(skill_level > 0){
pooledObj02 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/hs1/rx78_02.ani", 0, -10, 0 - obj.getZPos());
pooledObj03 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/hs1/rx78_02.ani", 0, 20, 0 - obj.getZPos());
}
else pooledObj02 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/hs1/rx78_02.ani", 0, -1, 0 - obj.getZPos());
local skill_level02 = sq_GetSkillLevel(sqrChr, 42);
if(skill_level02 > 0){
summonmonster_mechanic(sqrChr,destX_01, destY_01 - 10, 0, 0, 77620, 600000, level, 0);//60002
summonmonster_mechanic(sqrChr,destX_01, destY_01 + 20, 0, 0, 77620, 600000, level, 0);
}
else summonmonster_mechanic(sqrChr,destX_01,destY_01,0,0,77620,600000,level,0);
sqrChr.sq_PlaySound("GN_LADNRUNNER");
break;
case 28:
pooledObj02 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/hs1/rx78_02.ani", 0, -1, 0 - obj.getZPos());
summonmonster_mechanic(sqrChr,destX_01,destY_01,0,0,77621,60000,level,0);//60003
if(sq_GetLevelData(sqrChr, 28, 6, skill_level) > 0) summonmonster_mechanic(sqrChr,destX_01 + 5,destY_01 - 5,0,0,77621,60000,level,0);
sqrChr.sq_PlaySound("R_GN_COUNTDOWN");
break;
case 29:
pooledObj02 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/hs1/exs_05.ani", 0, -1, 0 - obj.getZPos());
local bonusrate = sq_GetBonusRateWithPassive(sqrChr, 29, 29, 1, 1.0) + 100;
local lifetime = sqrChr.sq_GetLevelData(29, 3, skill_level);
local resttime = sqrChr.sq_GetIntData(skillIndex, 2);
local bullet_number = sqrChr.sq_GetIntData(skillIndex, 1);
sq_BinaryStartWrite();
sq_BinaryWriteDword(29);//skillIndex
sq_BinaryWriteDword(3);//subtype
sq_BinaryWriteDword(bonusrate);
sq_BinaryWriteDword(lifetime);
sq_BinaryWriteDword(resttime);
sq_BinaryWriteDword(bullet_number);
sq_SendCreatePassiveObjectPacket(sqrChr, NUM_BYKK_PASSIVEOBJECT , 0, destX_01, destY_01, 0, obj.getDirection());
sqrChr.sq_PlaySound("GN_VIPER");
break;
case 63:
pooledObj02 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/hs1/tempester_02.ani", 0, -1, 150 - obj.getZPos());
local number = sqrChr.sq_GetLevelData(skillIndex, 6, skill_level);
local time = sqrChr.sq_GetLevelData(skillIndex, 5, skill_level);
for(local i = 0; i < number; i++){
summonmonster_mechanic(sqrChr,destX_01,destY_01,150,0,77623,time,level,0);//GN_TRMPESTER 60018
}
sqrChr.sq_PlaySound("GN_TRMPESTER");
break;
case 83:
pooledObj02 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/hs1/sparrowfactory_02.ani", 0, -1, 0 - obj.getZPos());
sq_BinaryStartWrite();
sq_BinaryWriteDword(83);
sq_BinaryWriteDword(1);
sq_SendCreatePassiveObjectPacket(sqrChr, NUM_BYKK_PASSIVEOBJECT , 0, destX_01, destY_01 - 1, 0, sqrChr.getDirection());
sqrChr.sq_PlaySound("GN_SPARROW_FACTORY");
break;
case 105:
pooledObj02 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/hs1/ez8ex_01.ani", 0, -1, 0 - obj.getZPos());
summonmonster_mechanic(sqrChr,destX_01,destY_01,0,0,77635,20000,level,0);
sqrChr.sq_PlaySound("R_GN_COUNTDOWN");
break;
case 106:
pooledObj02 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/hs1/exs_05.ani", 0, -1, 0 - obj.getZPos());
local bonusrate = sq_GetBonusRateWithPassive(sqrChr, skillIndex, 29, 1, 1.0) + 100;
local bonusrate2 = sq_GetBonusRateWithPassive(sqrChr, skillIndex, 29, 4, 1.0) + 100;
local lifetime = sqrChr.sq_GetLevelData(skillIndex, 3, skill_level);
local resttime = sqrChr.sq_GetIntData(skillIndex, 2);
local bullet_number = sqrChr.sq_GetIntData(skillIndex, 1);
sq_BinaryStartWrite();
sq_BinaryWriteDword(29);//skillIndex
sq_BinaryWriteDword(5);//subtype
sq_BinaryWriteDword(bonusrate);
sq_BinaryWriteDword(lifetime);
sq_BinaryWriteDword(resttime);
sq_BinaryWriteDword(bullet_number);
sq_BinaryWriteDword(bonusrate2);
if(sq_GetLevelData(sqrChr, skillIndex, 6, skill_level) > 0){
sq_SendCreatePassiveObjectPacket(sqrChr, NUM_BYKK_PASSIVEOBJECT , 0, destX_01+sq_getRandom(-10, 10), destY_01-10, 0, obj.getDirection());
sq_SendCreatePassiveObjectPacket(sqrChr, NUM_BYKK_PASSIVEOBJECT , 0, destX_01, destY_01+10, 0, obj.getDirection());
print("te11111st")
}
else sq_SendCreatePassiveObjectPacket(sqrChr, NUM_BYKK_PASSIVEOBJECT , 0, destX_01, destY_01, 0, obj.getDirection());
sqrChr.sq_PlaySound("GN_VIPER");
break;
case SKILL_GUNNER_ROBOTRX60:
pooledObj02 = sq_AddDrawOnlyAniFromParent(obj,"passiveobject/mechanic_bykk/animation/hs1/rx-60_02.ani", 0, -1, 0 - obj.getZPos());
summonmonster_mechanic(sqrChr,destX_01,destY_01,0,0,77630,600000,level,0);
break;
case SKILL_GUNNER_ATEAM:
pooledObj02 = sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/virtualrush/teleport/teleportd1end_00.ani", 0, -25, 0 - obj.getZPos());
pooledObj03 = sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/virtualrush/teleport/teleportg1end_00.ani", 0, 25, 0 - obj.getZPos());
pooledObj04 = sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/virtualrush/teleport/teleporth1end_00.ani", 60, -1, 0 - obj.getZPos());
pooledObj05 = sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/virtualrush/teleport/teleports1end_00.ani", -50, -50, 0 - obj.getZPos());
pooledObj06 = sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/virtualrush/teleport/teleportt1end_00.ani", -50, 50, 0 - obj.getZPos());
summonmonster_mechanic(sqrChr,destX_01, destY_01 - 25, 0, 0, 77625, 600000, level, 0);
summonmonster_mechanic(sqrChr,destX_01, destY_01 + 25, 0, 0, 77626, 600000, level, 0);
summonmonster_mechanic(sqrChr,destX_01 + 60, destY_01, 0, 0, 77627, 600000, level, 0);
summonmonster_mechanic(sqrChr,destX_01 - 50, destY_01 - 50, 0, 0, 77628, 600000, level, 0);
summonmonster_mechanic(sqrChr,destX_01 - 50, destY_01 + 50, 0, 0, 77629, 600000, level, 0);
break;
}
if(skillIndex != SKILL_GUNNER_VIRTUALRUSH) obj.sq_PlaySound(soundEffect[sq_getRandom(0,4).tointeger()]);
local pooledObjSum = [pooledObj01,pooledObj02,pooledObj03,pooledObj04,pooledObj05,pooledObj06];
for(local i = 0; i < pooledObjSum.len(); i++){
if(pooledObjSum[i] && pooledObjSum[i].isObjectType(OBJECTTYPE_DRAWONLY)){
local pAni = pooledObjSum[i].getCurrentAnimation();
pAni.setSpeedRate(200.0);
print("test");
}
}
if(skillIndex != SKILL_GUNNER_VIRTUALRUSH) obj.setTimeEvent(12,300,1,false);
else obj.setTimeEvent(12,11600,1,false);
break;
case 3:
local anipath = ["character/gunner/effect/animation/virtualrush/hologramloopfront_00.ani","character/gunner/effect/animation/virtualrush/hologramloopbottom_00.ani","character/gunner/effect/animation/virtualrush/hologramloopback_00.ani"];
for(local i = 0; i < 3; i++){
local pooledObj = CreateAni_HS1_bykk(obj, anipath[i], ENUM_DRAWLAYER_NORMAL, obj.getXPos(), obj.getYPos() - 1, 0, true);
obj.getVar("Face").push_obj_vector(pooledObj);
}
break;
case 10://判斷距離
local base_X = 55,base_Y = -10;
if(type == 2 || type == 4){base_X = -55,base_Y = 10;}
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) - base_Y);
local disZ = sq_Abs(sq_GetZPos(obj) - sq_GetZPos(sqrChr) - 90);
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) + base_Y) 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) - 90 > 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(10);
obj.setTimeEvent(11,300,-1,false);
}
break;
case 11://移動
local base_X = 55,base_Y = -10;
if(type == 2 || type == 4){base_X = -55,base_Y = 10;}
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) - base_Y);
local disZ = sq_Abs(sq_GetZPos(obj) - sq_GetZPos(sqrChr) - 30);
if(disX > 10 || disY > 10 || disZ > 5){
obj.stopTimeEvent(11);
obj.setTimeEvent(10,15,-1,false);
}
break;
case 12:
if(type > 2) obj.addSetStatePacket(sq_getRandom(20,26), null, STATE_PRIORITY_AUTO, false, "");
obj.setTimeEvent(10,15,-1,false);
break;
case 20:
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.setTimeEvent(1,1000,1,true);
break;
}
}
function RemoveAllAni_HS1_bykk(obj,Var)
{
if(!Var){
Var = "aniobj";
}
local sq_var = obj.getVar(Var);
local size = sq_var.get_obj_vector_size();
for(local i = 0; i < size; i++){
local pObj = sq_var.get_obj_vector(i);
if(pObj) pObj.setValid(false);
}
obj.getVar(Var).clear_obj_vector();
}
function CreateAni_HS1_bykk(obj,AniRoute,DrawLayer,XPos,YPos,ZPos,IsMove)
{
local anipath = sq_CreateAnimation("", AniRoute);
local pooledobj = sq_CreatePooledObject(anipath, true);
pooledobj = sq_SetEnumDrawLayer(pooledobj, DrawLayer);
sq_SetCurrentDirection(pooledobj, obj.getDirection());
pooledobj.setCurrentPos(XPos, YPos, ZPos);
if(IsMove){
sq_moveWithParent(obj, pooledobj);
}
sq_AddObject(obj, pooledobj, OBJECTTYPE_DRAWONLY, false);
return pooledobj;
}