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

3059 lines
126 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

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

//男机械
function 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;
}