3059 lines
126 KiB
C
3059 lines
126 KiB
C
|
|
|
|||
|
|
//男机械
|
|||
|
|
|
|||
|
|
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;
|
|||
|
|
}
|
|||
|
|
|