3397 lines
126 KiB
C
3397 lines
126 KiB
C
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
function createOnlyDrawObject_ATGunner_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer)
|
|
{
|
|
local ani = sq_CreateAnimation("",aniPath);
|
|
local pooledObj = sq_CreatePooledObject(ani,isTrue);
|
|
sq_SetCurrentDirection(pooledObj, direction);
|
|
pooledObj.setCurrentPos(x,y,z);
|
|
pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer);
|
|
sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false);
|
|
return pooledObj;
|
|
}
|
|
|
|
function createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer,sizeRateX,sizeRateY)
|
|
{
|
|
local ani = sq_CreateAnimation("",aniPath);
|
|
local pooledObj = sq_CreatePooledObject(ani,isTrue);
|
|
sq_SetCurrentDirection(pooledObj, direction);
|
|
pooledObj.setCurrentPos(x,y,z);
|
|
local currentAni = pooledObj.getCurrentAnimation();
|
|
sizeRateX = sizeRateX.tofloat() / 100.0;
|
|
sizeRateY = sizeRateY.tofloat() / 100.0;
|
|
currentAni.setImageRateFromOriginal(sizeRateX, sizeRateY);
|
|
pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer);
|
|
sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false);
|
|
return pooledObj;
|
|
}
|
|
|
|
function createSkillPassive_ATGunner_bykk(obj,passiveObj,objnum,x,y,z,direction,job,skillIndex,subtype,pushv1,pushv2,pushv3,pushv4,pushv5,pushv6,pushv7,pushv8)
|
|
{
|
|
if(!obj || !passiveObj || obj.getState() == STATE_DIE) return;
|
|
local destX_01 = 0;
|
|
local destY_01 = 0;
|
|
if(!isSameObject(obj, passiveObj)){
|
|
destX_01 = passiveObj.getXPos() - obj.getXPos();
|
|
destY_01 = passiveObj.getYPos() - obj.getYPos();
|
|
if(direction == ENUM_DIRECTION_LEFT) destX_01 = obj.getXPos() - passiveObj.getXPos();
|
|
}
|
|
sq_BinaryStartWrite();
|
|
sq_BinaryWriteDword(job);
|
|
sq_BinaryWriteDword(skillIndex);
|
|
sq_BinaryWriteDword(subtype);
|
|
sq_BinaryWriteDword(pushv1);
|
|
sq_BinaryWriteDword(pushv2);
|
|
sq_BinaryWriteDword(pushv3);
|
|
sq_BinaryWriteDword(pushv4);
|
|
sq_BinaryWriteDword(pushv5);
|
|
sq_BinaryWriteDword(pushv6);
|
|
sq_BinaryWriteDword(pushv7);
|
|
sq_BinaryWriteDword(pushv8);
|
|
sq_SendCreatePassiveObjectPacket(obj, objnum, 0, destX_01 + x, destY_01 + y, z, direction);
|
|
}
|
|
|
|
function setHitonSubweapon_bykk(obj)
|
|
{
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("gunner/effect/animation/hitonsubweaponat.ani"), 0, 0);//4
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HITONSUBWEAPON, -1, 2, 1.0) + 100;
|
|
local hitDelayRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HITONSUBWEAPON, -1, 1, 1.0) + 100;
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 4));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
local rateDamager = sq_GetAttackInfoHitDelayRateDamager(attackInfo);
|
|
rateDamager = rateDamager * (100.0 + hitDelayRate.tofloat()) / 100.0;
|
|
// print("rateDamager = "+rateDamager);
|
|
sq_SetAttackInfoHitDelayRateDamager(attackInfo, rateDamager);
|
|
}
|
|
|
|
function ProcPassiveSkill_ATGunner_Blaster(obj, skill_index, skill_level)
|
|
{
|
|
switch(skill_index){
|
|
case SKILL_BYKK_SUBWEAPONMASTERY:
|
|
if(skill_level > 0){
|
|
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/atgunner/2_blaster_bykk/ap_subweaponmastery.nut", true);
|
|
}
|
|
break;
|
|
case SKILL_BYKK_APG_63:
|
|
if(skill_level > 0){
|
|
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/atgunner/2_blaster_bykk/ap_apg_63.nut", true);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onStart_appendage_at_subweaponmastery(appendage)
|
|
{
|
|
if(!appendage) return;
|
|
if(!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
|
local weaponType = obj.getWeaponSubType();
|
|
if(weaponType == -1) return;
|
|
if(weaponType == 3){
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SUBWEAPONMASTERY);
|
|
local physicalEquAttack = sq_GetLevelData(obj, SKILL_BYKK_SUBWEAPONMASTERY, 2, skillLevel);
|
|
// print(magicalEquAttack);
|
|
local change_appendage = appendage.sq_getChangeStatus("subweaponmastery");
|
|
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("subweaponmastery",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (physicalEquAttack * 0.1).tofloat());
|
|
}
|
|
}
|
|
//if(sq_GetCurrentModuleType() == 3){
|
|
// setSkillBonusRate_AtBlaster_bykk(obj);
|
|
//}
|
|
}
|
|
|
|
function onStart_appendage_at_apg_63(appendage)
|
|
{
|
|
if(!appendage) return;
|
|
if(!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_APG_63);
|
|
local physicalEquAttack = sq_GetLevelData(obj, SKILL_BYKK_APG_63, 1, skillLevel);
|
|
local criticaldRate = sq_GetLevelData(obj, SKILL_BYKK_APG_63, 0, skillLevel);
|
|
// print(magicalEquAttack);
|
|
local change_appendage = appendage.sq_getChangeStatus("apg_63");
|
|
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("apg_63",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (physicalEquAttack * 0.1).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, (criticaldRate * 0.1).tofloat());
|
|
}
|
|
}
|
|
|
|
function useSkill_before_ATGunner_Blaster(obj, skillIndex, consumeMp, consumeItem, oldSkillMpRate)
|
|
{
|
|
local bChangedMp = false;
|
|
// print("oldSkillMpRate = "+oldSkillMpRate);
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SUBWEAPONMASTERY);
|
|
// print("skillLevel = "+skillLevel);
|
|
if(skillLevel > 0 && obj.getWeaponSubType() == 3){
|
|
if(skillIndex != SKILL_BYKK_ANCIENTTRIGGER && skillIndex != SKILL_BYKK_OPERATIONRAZE){
|
|
local mpComsumeRate = sq_GetLevelData(obj, SKILL_BYKK_SUBWEAPONMASTERY, 0, skillLevel);
|
|
local newMpRate = (100.0 - mpComsumeRate.tofloat()) / 100.0;
|
|
// print("newMpRate = "+newMpRate);
|
|
obj.setSkillMpRate(skillIndex, newMpRate);
|
|
bChangedMp = true;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function startSkillCoolTime_atgunner_2blaster_bykk(obj, skillIndex, skillLevel, currentCoolTime)
|
|
{
|
|
print("currentCoolTime11 = "+currentCoolTime);
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SUBWEAPONMASTERY);
|
|
if(skillLevel > 0){
|
|
local coolTimeRate = sq_GetLevelData(obj, SKILL_BYKK_SUBWEAPONMASTERY, 4, skillLevel);
|
|
local newCoolTime = currentCoolTime * (100 - coolTimeRate) / 100;
|
|
print("test = "+newCoolTime);
|
|
return newCoolTime;
|
|
}
|
|
else return currentCoolTime;
|
|
}
|
|
|
|
function procSkill_ATGunner_2blaster_bykk(obj)
|
|
{
|
|
if(sq_GetIntData(obj, SKILL_BYKK_FLAMETHROWERBOOST, 5) > 0) obj.setSkillCommandEnable(SKILL_BYKK_FLAMETHROWER, false);
|
|
if(sq_GetIntData(obj, SKILL_BYKK_STINGEREX, 7) > 0){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_STINGEREX, false);
|
|
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/2_blaster_bykk/ap_stingerex.nut")){
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STINGEREX, -1, 0, 1.0);
|
|
local hitMax = sq_GetIntData(obj, SKILL_BYKK_STINGEREX, 4);
|
|
local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STINGEREX, -1, 10, 1.0) + 100;
|
|
local proc = sq_GetIntData(obj, SKILL_BYKK_STINGEREX, 7);
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/atgunner/2_blaster_bykk/ap_stingerex.nut", true);
|
|
AddAppendage.getVar("custom").setInt(0, proc);
|
|
AddAppendage.getVar("custom").setInt(1, totalDamage);
|
|
AddAppendage.getVar("custom").setInt(2, hitMax);
|
|
AddAppendage.getVar("custom").setInt(3, sizeRate);
|
|
}
|
|
}
|
|
else{
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/2_blaster_bykk/ap_stingerex.nut")) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/atgunner/2_blaster_bykk/ap_stingerex.nut");
|
|
}
|
|
local attackObj = obj.getVar("AncientTrigger_att").get_obj_vector(0);
|
|
if(attackObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(attackObj);
|
|
local state = colObj.getState();
|
|
switch(state){
|
|
case 0:
|
|
case 1:
|
|
case 3:
|
|
case 4:
|
|
case 6:
|
|
if(colObj.getVar().getBool(state) == false){
|
|
colObj.getVar().setBool(state, true);
|
|
local pAni = colObj.getCurrentAnimation();
|
|
if(pAni) pAni.setSpeedRate(200.0);
|
|
}
|
|
break;
|
|
case 2:
|
|
if(obj.getVar("AncientTrigger_bool").getBool(2) == false){
|
|
obj.getVar("AncientTrigger_bool").setBool(2, true);
|
|
local pAni = colObj.getCurrentAnimation();
|
|
if(pAni) pAni.setSpeedRate(200.0);
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,240,1,10,obj.getDirection(),2,SKILL_BYKK_ANCIENTTRIGGER,8,0,0,0,0,0,0,0,0);
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,240,1,10,obj.getDirection(),2,SKILL_BYKK_ANCIENTTRIGGER,9,0,0,0,0,0,0,0,0);
|
|
}
|
|
break;
|
|
case 5:
|
|
if(obj.getVar("AncientTrigger_bool").getBool(0) == false){
|
|
local pAni = colObj.getCurrentAnimation();
|
|
if(pAni) pAni.setSpeedRate(200.0);
|
|
sq_ClearAttackBox(pAni);
|
|
obj.getVar("AncientTrigger_bool").setBool(0, true);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANCIENTTRIGGER, -1, 6, 1.0) + 100;
|
|
local hitMax = sq_GetIntData(obj, SKILL_BYKK_ANCIENTTRIGGER, 1);
|
|
local lifeTime = sq_GetIntData(obj, SKILL_BYKK_ANCIENTTRIGGER, 0);
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,400,1,65,obj.getDirection(),2,SKILL_BYKK_ANCIENTTRIGGER,1,totalDamage,hitMax,lifeTime,0,0,0,0,0);
|
|
sq_flashScreen(obj,300,lifeTime - 300,100,150, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
}
|
|
break;
|
|
case 7:
|
|
if(obj.getVar("AncientTrigger_bool").getBool(1) == false){
|
|
obj.getVar("AncientTrigger_bool").setBool(1, true);
|
|
local pAni = colObj.getCurrentAnimation();
|
|
if(pAni) pAni.setSpeedRate(200.0);
|
|
local size = obj.getVar("AncientTrigger_obj").get_obj_vector_size();
|
|
if(size > 0){
|
|
for(local i = 0; i < size; i++){
|
|
local attackObj = obj.getVar("AncientTrigger_obj").get_obj_vector(i);
|
|
if(attackObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(attackObj);
|
|
colObj.setValid(false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT) > 0){
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_STINGER);
|
|
if(loadSlot){
|
|
local loadnumber = loadSlot.getRemainLoadNumber();
|
|
if(loadnumber > 0){
|
|
if(!loadSlot.isCooling() && loadnumber + 1 <= 3 + sq_GetIntData(obj, SKILL_BYKK_STINGER, 6)) loadSlot.increaseLoadCount(1);
|
|
local state = obj.getState();
|
|
if(state > 12 || state == 0){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_STINGER,true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_STINGER);
|
|
if(b_useskill != -1){
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/lancer/stingerfm92mk2lancer_00.ani", 0, -1, 85);
|
|
obj.sq_PlaySound("FG_LANCER");
|
|
obj.sq_PlaySound("STINGER_SHOT");
|
|
local createMax = sq_GetIntData(obj, SKILL_BYKK_STINGER, 4);
|
|
local bonusRate = 1.0;
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT) > 0) bonusRate = 0.6;
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STINGER, -1, 0, bonusRate) + 100;
|
|
local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STINGER, -1, 3, 1.0) + 100;
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,35,-1,130,obj.getDirection(),2,SKILL_BYKK_STINGER,4,totalDamage,sizeRate,createMax,0,0,0,0,0);
|
|
if(loadSlot.getEndCoolTime() != 6000 + sq_GetIntData(obj, SKILL_BYKK_STINGER, 10)){obj.sq_RemoveSkillLoad(SKILL_BYKK_STINGER); return;}
|
|
loadSlot.decreaseLoadCount(1);
|
|
loadSlot.setStartCool();
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
if(!loadSlot.isCooling()){
|
|
loadSlot.increaseLoadCount(1);
|
|
loadSlot.setStartCool();
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
local loadnumber = 3 + sq_GetIntData(obj, SKILL_BYKK_STINGER, 6);
|
|
local coolTime = 6000 + sq_GetIntData(obj, SKILL_BYKK_STINGER, 10);
|
|
print("coolTime = "+coolTime);
|
|
obj.sq_AddSkillLoad(SKILL_BYKK_STINGER, 184, loadnumber, coolTime);
|
|
}
|
|
}
|
|
else{
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_STINGER);
|
|
if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_STINGER);
|
|
}
|
|
|
|
local isLaserLoad = sq_GetIntData(obj, SKILL_BYKK_LASERRIFLE, 3);
|
|
if(isLaserLoad > 0){
|
|
local loadSlot2 = obj.sq_GetSkillLoad(SKILL_BYKK_LASERRIFLE);
|
|
if(loadSlot2){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_LASERRIFLE, false);
|
|
local loadnumber = loadSlot2.getRemainLoadNumber();
|
|
if(loadnumber > 0){
|
|
if(!loadSlot2.isCooling()){
|
|
local loadMax = sq_GetIntData(obj, SKILL_BYKK_LASERRIFLE, 3);
|
|
local addLoadNumber = loadMax - loadnumber;
|
|
loadSlot2.increaseLoadCount(addLoadNumber);
|
|
}
|
|
local state = obj.getState();
|
|
if(state > 12 || state == 0){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_LASERRIFLE,true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_LASERRIFLE);
|
|
if(b_useskill != -1){
|
|
obj.getVar("laserCharge_bool").setBool(0, false);
|
|
obj.getVar("laserCharge_bool").setBool(1, false);
|
|
obj.getVar("laserCharge_bool").setBool(2, false);
|
|
obj.getVar("laserCharge_custom").setInt(10, 0);
|
|
obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_LASERRIFLE);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_LASERRIFLE, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
loadSlot2.decreaseLoadCount(1);
|
|
loadSlot2.setStartCool();
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
if(!loadSlot2.isCooling()){
|
|
local loadMax = sq_GetIntData(obj, SKILL_BYKK_LASERRIFLE, 3);
|
|
loadSlot2.increaseLoadCount(loadMax);
|
|
loadSlot2.setStartCool();
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
local loadMax = sq_GetIntData(obj, SKILL_BYKK_LASERRIFLE, 3);
|
|
local coolTime = sq_GetIntData(obj, SKILL_BYKK_LASERRIFLE, 4);
|
|
print("laser cool time = " + coolTime);
|
|
obj.sq_AddSkillLoad(SKILL_BYKK_LASERRIFLE, 171, loadMax, coolTime);
|
|
}
|
|
}
|
|
else{
|
|
local loadSlot2 = obj.sq_GetSkillLoad(SKILL_BYKK_LASERRIFLE);
|
|
if(loadSlot2) obj.sq_RemoveSkillLoad(SKILL_BYKK_LASERRIFLE);
|
|
}
|
|
//FSC7
|
|
if(FSC7_STONE == 1 && sq_GetSkillLevel(obj, SKILL_BYKK_FSC_7) > 0){
|
|
local loadSlot3 = obj.sq_GetSkillLoad(SKILL_BYKK_FSC_7);
|
|
if(loadSlot3){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_FSC_7, false);
|
|
local loadnumber = loadSlot3.getRemainLoadNumber();
|
|
if(loadnumber > 0){
|
|
if(!loadSlot3.isCooling()){
|
|
local loadMax = 2;
|
|
if(loadnumber < 2){
|
|
loadSlot3.increaseLoadCount(1);
|
|
loadSlot3.setStartCool();
|
|
}
|
|
}
|
|
local state = obj.getState();
|
|
if(state == STATE_BYKK_FSC_7) return;
|
|
if(state > 12 || state == 0){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_FSC_7,true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_FSC_7);
|
|
if(b_useskill != -1){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(SKILL_BYKK_FSC_7, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
loadSlot3.decreaseLoadCount(1);
|
|
loadSlot3.setStartCool();
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
if(!loadSlot3.isCooling()){
|
|
loadSlot3.increaseLoadCount(1);
|
|
loadSlot3.setStartCool();
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
local loadMax = 2;
|
|
local coolTime = 15000;
|
|
print("fsc7 cool time = " + coolTime);
|
|
obj.sq_AddSkillLoad(SKILL_BYKK_FSC_7, 137, loadMax, coolTime);
|
|
}
|
|
}
|
|
else{
|
|
local loadSlot3 = obj.sq_GetSkillLoad(SKILL_BYKK_FSC_7);
|
|
if(loadSlot3) obj.sq_RemoveSkillLoad(SKILL_BYKK_FSC_7);
|
|
}
|
|
//FM31-125
|
|
if(FM31_STONE == 1 && sq_GetSkillLevel(obj, SKILL_BYKK_FM31) > 0){
|
|
local loadSlot4 = obj.sq_GetSkillLoad(SKILL_BYKK_FM31);
|
|
if(loadSlot4){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_FM31, false);
|
|
local loadnumber = loadSlot4.getRemainLoadNumber();
|
|
if(loadnumber > 0){
|
|
if(!loadSlot4.isCooling()){
|
|
local loadMax = 4;
|
|
if(loadnumber < 4){
|
|
loadSlot4.increaseLoadCount(1);
|
|
loadSlot4.setStartCool();
|
|
}
|
|
}
|
|
local state = obj.getState();
|
|
if(state == STATE_BYKK_FM31) return;
|
|
if(state > 12 || state == 0){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_FM31,true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_FM31);
|
|
if(b_useskill != -1){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_FM31, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
loadSlot4.decreaseLoadCount(1);
|
|
loadSlot4.setStartCool();
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
if(!loadSlot4.isCooling()){
|
|
loadSlot4.increaseLoadCount(1);
|
|
loadSlot4.setStartCool();
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
local loadMax = 4;
|
|
local coolTime = 2500;
|
|
print("FM31 cool time = " + coolTime);
|
|
obj.sq_AddSkillLoad(SKILL_BYKK_FM31, 137, loadMax, coolTime);
|
|
}
|
|
}
|
|
else{
|
|
local loadSlot4 = obj.sq_GetSkillLoad(SKILL_BYKK_FM31);
|
|
if(loadSlot4) obj.sq_RemoveSkillLoad(SKILL_BYKK_FM31);
|
|
}
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//M-3喷火器
|
|
function checkExecutableSkill_FlameThrower(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_FLAMETHROWER);
|
|
if (isUse){
|
|
obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_FLAMETHROWER);
|
|
local timer = obj.getVar("flamethrower").get_ct_vector(0);
|
|
if(!timer){
|
|
obj.getVar("flamethrower").clear_ct_vector();
|
|
obj.getVar("flamethrower").push_ct_vector();
|
|
timer = obj.getVar("flamethrower").get_ct_vector(0);
|
|
}
|
|
timer.Reset();
|
|
timer.Start(10000,0);
|
|
obj.sq_IntVectClear();
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT) > 0) obj.sq_IntVectPush(10);
|
|
else obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_FLAMETHROWER, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_FlameThrower(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_FlameThrower(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_SetCurrentAnimation(185);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/flamethrower/atfrontrapid1a.ani"), 0, 0);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_HITONSUBWEAPON) > 0) setHitonSubweapon_bykk(obj);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_SUBWEAPONMASTERY) > 0) obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.2, 1.2);
|
|
else obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
obj.sq_PlaySound("FG_FGUN");
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(186);
|
|
obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/flamethrower/atweapon_glow.ani"), 0, 0);
|
|
obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/flamethrower/atfrontrapid2a.ani"), 0, 0);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/flamethrower/body_glow_woman.ani"), 0, 0);
|
|
break;
|
|
case 10:
|
|
obj.sq_SetCurrentAnimation(149);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_SUBWEAPONMASTERY) > 0) obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.2, 1.2);
|
|
else obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
obj.sq_PlaySound("FG_FGUN");
|
|
break;
|
|
case 11:
|
|
obj.sq_SetCurrentAnimation(148);
|
|
obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atajreinforceparts/flamethrower/weapon_glow_3.ani"), -20, 15);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_PANDORA_01) > 0) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atpandora01/lv95pandora01_05.ani"), 50, 0);
|
|
break;
|
|
case 12:
|
|
obj.sq_SetCurrentAnimation(147);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_FlameThrower(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
case 10:
|
|
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLAMETHROWER, -1, 4, 1.0);
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_FLAMETHROWER);
|
|
local hitTime = sq_GetLevelData(obj, SKILL_BYKK_FLAMETHROWER, 2, skillLevel);
|
|
local hitDelayRate = sq_GetLevelData(obj, SKILL_BYKK_FLAMETHROWER, 3, skillLevel);
|
|
local moveRate = sq_GetLevelData(obj, SKILL_BYKK_FLAMETHROWER, 3, skillLevel);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_FLAMETHROWER, 3);
|
|
local sub = 0, speed = 150 / moveRate * 1000;
|
|
|
|
if(sq_GetIntData(obj, SKILL_BYKK_FLAMETHROWER, 4) > 0){
|
|
local timeMax = sq_GetLevelData(obj, SKILL_BYKK_FLAMETHROWER, 1, skillLevel);
|
|
local hitMax = timeMax / hitTime;
|
|
totalDamage = totalDamage * hitMax;
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,140,0,65,obj.getDirection(),2,SKILL_BYKK_FLAMETHROWER,2,totalDamage,sizeRate,0,0,0,0,0,0);
|
|
obj.setTimeEvent(2, 50, 1, false);
|
|
obj.sq_PlaySound("FG_FGUN");
|
|
return;
|
|
}
|
|
if(subState == 10){
|
|
sub = 1;
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_PANDORA_01) > 0) speed = speed / sq_GetIntData(obj, SKILL_BYKK_PANDORA_01, 0) * 100;
|
|
}
|
|
obj.setTimeEvent(1, speed, -1, false);
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,140,0,65,obj.getDirection(),2,SKILL_BYKK_FLAMETHROWER,1,totalDamage,hitTime,hitDelayRate,sub,sizeRate,0,0,0);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(subState + 1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_FLAMETHROWER, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_FLAMETHROWER, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 12:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_FlameThrower(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 1:
|
|
case 11:
|
|
local bDownKey = obj.isDownSkillLastKey();
|
|
if(!bDownKey){
|
|
if(subState >= 10){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(12);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_FLAMETHROWER, STATE_PRIORITY_AUTO, true);
|
|
return;
|
|
}
|
|
else{
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
return;
|
|
}
|
|
}
|
|
else{
|
|
local timer = obj.getVar("flamethrower").get_ct_vector(0);
|
|
if(timer){
|
|
local timeMax = sq_GetLevelData(obj, SKILL_BYKK_FLAMETHROWER, 1, sq_GetSkillLevel(obj, SKILL_BYKK_FLAMETHROWER));
|
|
local currentT = timer.Get();
|
|
if(currentT >= timeMax){
|
|
if(subState >= 10){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(12);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_FLAMETHROWER, STATE_PRIORITY_AUTO, true);
|
|
return;
|
|
}
|
|
else{
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_FlameThrower(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_FlameThrower(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 1:
|
|
local xpos = sq_GetXPos(obj), ypos = sq_GetYPos(obj), baseSpeed = 2;
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos,ypos - baseSpeed)) sq_setCurrentAxisPos(obj, 1, ypos - baseSpeed);
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos - baseSpeed,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - baseSpeed);
|
|
return;
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos + baseSpeed,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + baseSpeed);
|
|
return;
|
|
}
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos,ypos + baseSpeed)) sq_setCurrentAxisPos(obj, 1, ypos + baseSpeed);
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos - baseSpeed,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - baseSpeed);
|
|
return;
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos + baseSpeed,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + baseSpeed);
|
|
return;
|
|
}
|
|
}
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos - baseSpeed,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - baseSpeed);
|
|
return;
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos + baseSpeed,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + baseSpeed);
|
|
return;
|
|
}
|
|
break;
|
|
case 2:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_FlameThrower(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
if(new_state != STATE_BYKK_FLAMETHROWER){
|
|
local attackObj = obj.getVar("flamethrower_att").get_obj_vector(0);
|
|
if(attackObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(attackObj);
|
|
if(colObj.getState() != 22) colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//加农炮
|
|
function checkExecutableSkill_CannonBall(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CANNONBALL);
|
|
if (isUse){
|
|
obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_CANNONBALL);
|
|
obj.getVar("cannonball_bool").setBool(0, true);
|
|
obj.getVar("cannonball_bool").setBool(1, true);
|
|
obj.getVar("cannonball_eff").clear_obj_vector();
|
|
obj.sq_IntVectClear();
|
|
if( sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) obj.sq_IntVectPush(10);
|
|
else obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_CANNONBALL, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_CannonBall(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_CannonBall(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_SetCurrentAnimation(101);
|
|
// obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/cannonball/ball1.ani"), 185, -105);
|
|
// obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/cannonball/ball2.ani"), 185, -105);
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/cannonball/ball1.ani", 185, 0, 105);
|
|
local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/cannonball/ball2.ani", 185, 0, 105);
|
|
obj.getVar("cannonball_eff").push_obj_vector(pooledObj);
|
|
obj.getVar("cannonball_eff").push_obj_vector(pooledObj2);
|
|
break;
|
|
case 10:
|
|
obj.sq_SetCurrentAnimation(102);
|
|
// obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/cannonball/ball1.ani"), 170, -45);
|
|
// obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/cannonball/ball2.ani"), 170, -45);
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/cannonball/ball1.ani", 170, 0, 45);
|
|
local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/cannonball/ball2.ani", 170, 0, 45);
|
|
obj.getVar("cannonball_eff").push_obj_vector(pooledObj);
|
|
obj.getVar("cannonball_eff").push_obj_vector(pooledObj2);
|
|
break;
|
|
}
|
|
obj.sq_PlaySound("FG_CANNONBALL_GET");
|
|
obj.sq_PlaySound("CANNONBALL_READY");
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
}
|
|
|
|
function onEndCurrentAni_CannonBall(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
case 10:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_CannonBall(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
local stateTime = obj.sq_GetStateTimer();
|
|
if(stateTime >= sq_GetIntData(obj, SKILL_BYKK_CANNONBALL, 0)){
|
|
switch(subState){
|
|
case 0:
|
|
if(obj.getVar("cannonball_bool").getBool(0)){
|
|
obj.getVar("cannonball_bool").setBool(0, false);
|
|
// obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/cannonball/ball3.ani"), 185, -105);
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/cannonball/ball3.ani", 185, 0, 105);
|
|
obj.getVar("cannonball_eff").push_obj_vector(pooledObj);
|
|
}
|
|
break;
|
|
case 10:
|
|
if(obj.getVar("cannonball_bool").getBool(0)){
|
|
obj.getVar("cannonball_bool").setBool(0, false);
|
|
// obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/cannonball/ball3.ani"), 170, -45);
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/cannonball/ball3.ani", 170, 0, 45);
|
|
obj.getVar("cannonball_eff").push_obj_vector(pooledObj);
|
|
}
|
|
break;
|
|
}
|
|
if(obj.getVar("cannonball_bool").getBool(1)) obj.getVar("cannonball_bool").setBool(1, false);
|
|
}
|
|
local bDownKey = obj.isDownSkillLastKey();
|
|
if(!bDownKey || stateTime >= sq_GetIntData(obj, SKILL_BYKK_CANNONBALL, 1)){
|
|
local currentAni = obj.getCurrentAnimation();
|
|
if(sq_GetCurrentFrameIndex(obj) <= 9){
|
|
local size = obj.getVar("cannonball_eff").get_obj_vector_size();
|
|
for(local i = 0; i < size; i++){
|
|
local effect = obj.getVar("cannonball_eff").get_obj_vector(i);
|
|
if(effect) effect.setValid(false);
|
|
}
|
|
obj.sq_PlaySound("FG_CANNONBALL_FIRE");
|
|
currentAni.setCurrentFrameWithChildLayer(10);
|
|
}
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_CannonBall(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 1:
|
|
local size = obj.getVar("cannonball_eff").get_obj_vector_size();
|
|
if(size > 0){
|
|
for(local i = 0; i < size; i++){
|
|
local effect = obj.getVar("cannonball_eff").get_obj_vector(i);
|
|
if(effect) effect.setValid(false);
|
|
}
|
|
}
|
|
local subState = obj.getSkillSubState();
|
|
local sub = 0, xpos = 185, zpos = 105, sub2 = 0;
|
|
if(subState == 10) {sub = 1; xpos = 170; zpos = 45;}
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CANNONBALL, -1, 0, 1.0) + 100;
|
|
if(obj.getVar("cannonball_bool").getBool(1) == false){
|
|
sub2 = 1;
|
|
totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CANNONBALL, -1, 1, 1.0) + 100;
|
|
}
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,xpos,-1,zpos,obj.getDirection(),2,SKILL_BYKK_CANNONBALL,1,totalDamage,sub,sub2,0,0,0,0,0);
|
|
obj.sq_PlaySound("CANNONBALL_SHOT");
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_CannonBall(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
}
|
|
|
|
function onEndState_CannonBall(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
if(new_state != STATE_BYKK_CANNONBALL){
|
|
local size = obj.getVar("cannonball_eff").get_obj_vector_size();
|
|
if(size > 0){
|
|
for(local i = 0; i < size; i++){
|
|
local effect = obj.getVar("cannonball_eff").get_obj_vector(i);
|
|
if(effect) effect.setValid(false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//反坦克炮
|
|
function checkExecutableSkill_SteyrHeavyRifle(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_STEYRHEAVYRIFLE);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_STEYRHEAVYRIFLE, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_SteyrHeavyRifle(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_SteyrHeavyRifle(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_SetCurrentAnimation(191);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_PANDORA_01) > 0) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweaponalteration/steyrheavyrifle/90lvhcannon/atfrontonce1a.ani"), 0, 0);
|
|
else obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweaponalteration/steyrheavyrifle/atfrontonce1a.ani"), 0, 0);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_HITONSUBWEAPON) > 0) setHitonSubweapon_bykk(obj);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_SUBWEAPONMASTERY) > 0) obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.2, 1.2);
|
|
else obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(190);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_PANDORA_01) > 0) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweaponalteration/steyrheavyrifle/90lvhcannon/atfrontonce2a.ani"), 0, 0);
|
|
else obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweaponalteration/steyrheavyrifle/atfrontonce2a.ani"), 0, 0);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_PANDORA_01) > 0) obj.sq_PlaySound("R_FG_STEYR_PANDORA");
|
|
else obj.sq_PlaySound("FG_STEYR");
|
|
obj.sq_PlaySound("STEYR_SHOT");//STEYR_EXP
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STEYRHEAVYRIFLE, -1, 3, 1.0) + 100;
|
|
local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STEYRHEAVYRIFLE, -1, 4, 1.0) + 100;
|
|
local expCount = sq_GetIntData(obj, SKILL_BYKK_STEYRHEAVYRIFLE, 6);
|
|
local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STEYRHEAVYRIFLE, -1, 5, 1.0) + 100;
|
|
local sub = 0;
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_PANDORA_01) > 0) sub = 1;
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,100,0,65,obj.getDirection(),2,SKILL_BYKK_STEYRHEAVYRIFLE,1,totalDamage,totalDamage2,expCount,sizeRate,sub,0,0,0);
|
|
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT) < 1){
|
|
obj.setTimeEvent(3, 500, 1, true);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_SteyrHeavyRifle(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_STEYRHEAVYRIFLE, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
break;
|
|
case 1:
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT) < 1) break;
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_SteyrHeavyRifle(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_SteyrHeavyRifle(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_SteyrHeavyRifle(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 1:
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT) > 0){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
}
|
|
else{
|
|
obj.getVar("move").setInt(10, sq_GetXPos(obj));
|
|
obj.setTimeEvent(2, 20, 20, true);
|
|
}
|
|
break;
|
|
case 2:
|
|
local v = sq_GetAccel(0, -150, timeEventCount, 20, true);
|
|
local dstX = sq_GetDistancePos(obj.getVar("move").getInt(10), obj.getDirection(), v);
|
|
if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);
|
|
if(timeEventCount >= 20){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
}
|
|
break;
|
|
case 3:
|
|
local aniPath = "character/gunner/atanimation/2_blaster/solasystemshoot_dust_01.ani";
|
|
local aniPath2 = "character/gunner/atanimation/2_blaster/solasystemshoot_dust_02.ani";
|
|
createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath,true,obj.getDirection(),sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 50),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL,-100,100);
|
|
createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath2,true,obj.getDirection(),sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 50),sq_GetYPos(obj) + 1,0,ENUM_DRAWLAYER_NORMAL,-100,100);
|
|
local speed = 250.0;
|
|
if(obj.getDirection() == ENUM_DIRECTION_LEFT) sq_SetVelocity(obj, 0, speed);
|
|
else sq_SetVelocity(obj, 0, -speed);
|
|
obj.setTimeEvent(4, 200, 1, false);
|
|
break;
|
|
case 4:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_SteyrHeavyRifle(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
|
|
//激光炮
|
|
function checkExecutableSkill_LaserRifle(obj)
|
|
{
|
|
if (!obj) return false;
|
|
// return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_LASERRIFLE);
|
|
if (isUse){
|
|
obj.getVar("laserCharge_bool").setBool(0, false);
|
|
obj.getVar("laserCharge_bool").setBool(1, false);
|
|
obj.getVar("laserCharge_bool").setBool(2, false);
|
|
obj.getVar("laserCharge_custom").setInt(10, 0);
|
|
obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_LASERRIFLE);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_LASERRIFLE, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_LaserRifle(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_LaserRifle(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_SetCurrentAnimation(191);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/laserrifleeffect/atfrontrapid1a.ani"), 0, 0);
|
|
obj.sq_PlaySound("R_FG_LSHOT");
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_HITONSUBWEAPON) > 0) setHitonSubweapon_bykk(obj);
|
|
break;
|
|
case 1:
|
|
if(obj.getVar("laserCharge_bool").getBool(1)){
|
|
obj.sq_SetCurrentAnimation(186);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/laserrifleeffect/atfrontonce2a.ani"), 0, 0);
|
|
}
|
|
else{
|
|
obj.sq_SetCurrentAnimation(190);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/laserrifleeffect/atuprapid2b.ani"), 0, 0);
|
|
}
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT) < 1){
|
|
obj.setTimeEvent(3, 500, 1, true);
|
|
}
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
}
|
|
|
|
function onEndCurrentAni_LaserRifle(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.getVar("laserCharge_bool").setBool(2, true);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/laserrifleeffect/atcharge_part.ani"), 0, 0);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/laserrifleeffect/atchargingeffect.ani"), 0, 0);
|
|
|
|
if(sq_GetIntData(obj, SKILL_BYKK_LASERRIFLE, 7) > 0) obj.setTimeEvent(10, 2, -1, false);
|
|
break;
|
|
case 1:
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT) < 1) break;
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_LaserRifle(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
if(obj.getVar("laserCharge_bool").getBool(2)){
|
|
local bDownKey = obj.isDownSkillLastKey();
|
|
if(bDownKey){
|
|
if(obj.getVar("laserCharge_bool").getBool(0) == false){
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_LASERRIFLECHARGE);
|
|
if(skillLevel > 0){
|
|
local stateTime = obj.sq_GetStateTimer();
|
|
local maxTime = sq_GetLevelData(obj, SKILL_BYKK_LASERRIFLECHARGE, 0, skillLevel);
|
|
if(stateTime >= maxTime){
|
|
sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/2_blaster/subweapon/laserrifleeffect/laserriflefullcharge1.ani", 0, 0, -10);
|
|
sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/2_blaster/subweapon/laserrifleeffect/laserriflefullcharge2.ani", 0, 1, -9);
|
|
obj.getVar("laserCharge_bool").setBool(0, true);
|
|
obj.getVar("laserCharge_bool").setBool(1, true);
|
|
obj.sq_AddStateLayerAnimation(10010,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/laserrifleeffect/atchargefulleffect.ani"), 0, 0);
|
|
obj.sq_AddStateLayerAnimation(10011,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/laserrifleeffect/atfullcharge_change.ani"), 0, 0);
|
|
obj.setTimeEvent(1, 300, 1, false);
|
|
obj.sq_PlaySound("STEYR_HEAVY_RIFLE");
|
|
}
|
|
}
|
|
else obj.getVar("laserCharge_bool").setBool(0, true);
|
|
}
|
|
}
|
|
else{
|
|
obj.stopTimeEvent(10);
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_LASERRIFLECHARGE);
|
|
if(skillLevel > 0){
|
|
local maxTime = sq_GetLevelData(obj, SKILL_BYKK_LASERRIFLECHARGE, 0, skillLevel);
|
|
if(maxTime <= 50){
|
|
sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/2_blaster/subweapon/laserrifleeffect/laserriflefullcharge1.ani", 0, 0, -10);
|
|
sq_AddDrawOnlyAniFromParent(obj,"character/gunner/effect/animation/2_blaster/subweapon/laserrifleeffect/laserriflefullcharge2.ani", 0, 1, -9);
|
|
obj.getVar("laserCharge_bool").setBool(1, true);
|
|
obj.sq_AddStateLayerAnimation(10010,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/laserrifleeffect/atchargefulleffect.ani"), 0, 0);
|
|
obj.sq_AddStateLayerAnimation(10011,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/laserrifleeffect/atfullcharge_change.ani"), 0, 0);
|
|
}
|
|
}
|
|
obj.getVar("laserCharge_bool").setBool(2, false);
|
|
obj.setTimeEvent(2, 500, 1, false);
|
|
obj.sq_PlaySound("FG_LSHOT_SHOT");
|
|
obj.sq_PlaySound("LASER_HIT_02");
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LASERRIFLE, -1, 1, 1.0) + 100;
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_LASERRIFLE, 2);
|
|
local sub = 1;
|
|
if(obj.getVar("laserCharge_bool").getBool(1)){
|
|
totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_BYKK_LASERRIFLECHARGE, 1, sq_GetSkillLevel(obj, SKILL_BYKK_LASERRIFLECHARGE))) / 1000;
|
|
sizeRate = sizeRate * (1000 + sq_GetIntData(obj, SKILL_BYKK_LASERRIFLECHARGE, 0)) / 1000;
|
|
sub = 2;
|
|
}
|
|
obj.getVar("laserCharge_custom").setInt(10, sizeRate);
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,135,0,68,obj.getDirection(),2,SKILL_BYKK_LASERRIFLE,1,totalDamage,sizeRate,0,0,0,0,0,0);
|
|
|
|
switch(sub){
|
|
case 1:
|
|
local aniPath = "passiveobject/atgunner_bykk/2_blaster/animation/laserrifle/laserfire.ani";
|
|
local aniPath2 = "passiveobject/atgunner_bykk/2_blaster/animation/laserrifle/lasertile.ani";
|
|
local offsetX = 285;
|
|
local xPos = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), offsetX), yPos = sq_GetYPos(obj), zPos = 75;
|
|
createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath,true,obj.getDirection(),xPos,yPos,zPos,ENUM_DRAWLAYER_NORMAL,100,sizeRate);
|
|
createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath2,true,obj.getDirection(),xPos,yPos,zPos,ENUM_DRAWLAYER_NORMAL,600,sizeRate);
|
|
break;
|
|
case 2:
|
|
local aniPath = ["passiveobject/atgunner_bykk/2_blaster/animation/laserrifle/chargedlaserfire1.ani", "passiveobject/atgunner_bykk/2_blaster/animation/laserrifle/chargedlaserfire2.ani", "passiveobject/atgunner_bykk/2_blaster/animation/laserrifle/chargedlaserfire3.ani"];
|
|
local tiaozheng = 0;
|
|
local offsetX = 275;
|
|
local xPos = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), offsetX), yPos = sq_GetYPos(obj), zPos = 75;
|
|
for(local i = 0; i < aniPath.len(); i++){
|
|
createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath[i],true,obj.getDirection(),xPos,yPos,zPos,ENUM_DRAWLAYER_NORMAL,100,sizeRate);
|
|
}
|
|
offsetX = offsetX - 7;
|
|
xPos = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), offsetX);
|
|
local aniPath2 = ["passiveobject/atgunner_bykk/2_blaster/animation/laserrifle/chargedlasertile1.ani", "passiveobject/atgunner_bykk/2_blaster/animation/laserrifle/chargedlasertile2.ani", "passiveobject/atgunner_bykk/2_blaster/animation/laserrifle/chargedlasertile3.ani"];
|
|
for(local i = 0; i < aniPath.len(); i++){
|
|
createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath2[i],true,obj.getDirection(),xPos,yPos,zPos,ENUM_DRAWLAYER_NORMAL,600,sizeRate);
|
|
}
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT) > 0){
|
|
createOnlyDrawObjectEX_ATGunner_bykk(obj,"passiveobject/atgunner_bykk/2_blaster/animation/laserrifle/laserriflelightning.ani",true,obj.getDirection(),xPos,yPos,zPos,ENUM_DRAWLAYER_NORMAL,100,-sizeRate);
|
|
createOnlyDrawObjectEX_ATGunner_bykk(obj,"passiveobject/atgunner_bykk/2_blaster/animation/laserrifle/laserriflelightning.ani",true,obj.getDirection(),xPos,yPos + 1,zPos,ENUM_DRAWLAYER_NORMAL,300,sizeRate);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_LaserRifle(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_LaserRifle(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 1:
|
|
obj.sq_AddStateLayerAnimation(10012,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/laserrifleeffect/atfullcharge_charge.ani"), 0, 0);
|
|
break;
|
|
case 2:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_LASERRIFLE, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 3:
|
|
local aniPath = "character/gunner/atanimation/2_blaster/solasystemshoot_dust_01.ani";
|
|
local aniPath2 = "character/gunner/atanimation/2_blaster/solasystemshoot_dust_02.ani";
|
|
createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath,true,obj.getDirection(),sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 50),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL,-100,100);
|
|
createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath2,true,obj.getDirection(),sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 50),sq_GetYPos(obj) + 1,0,ENUM_DRAWLAYER_NORMAL,-100,100);
|
|
local speed = 250.0;
|
|
if(obj.getDirection() == ENUM_DIRECTION_LEFT) sq_SetVelocity(obj, 0, speed);
|
|
else sq_SetVelocity(obj, 0, -speed);
|
|
if(obj.getVar("laserCharge_bool").getBool(1)) obj.setTimeEvent(4, 300, 1, false);
|
|
else obj.setTimeEvent(4, 80, 1, false);
|
|
break;
|
|
case 4:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 10:
|
|
local xpos = sq_GetXPos(obj), ypos = sq_GetYPos(obj);
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos,ypos - 1)) sq_setCurrentAxisPos(obj, 1, ypos - 1);
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos - 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 1);
|
|
return;
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos + 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 1);
|
|
return;
|
|
}
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos,ypos + 1)) sq_setCurrentAxisPos(obj, 1, ypos + 1);
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos - 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 1);
|
|
return;
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos + 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 1);
|
|
return;
|
|
}
|
|
}
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos - 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 1);
|
|
return;
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos + 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 1);
|
|
return;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_LaserRifle(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onCreateObject_LaserRifle(obj, createObject)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
|
|
//聚焦喷火器
|
|
function checkExecutableSkill_FlameThrowerBoost(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_FLAMETHROWERBOOST);
|
|
if (isUse){
|
|
obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_FLAMETHROWERBOOST);
|
|
local timer = obj.getVar("flamethrowerboost").get_ct_vector(0);
|
|
if(!timer){
|
|
obj.getVar("flamethrowerboost").clear_ct_vector();
|
|
obj.getVar("flamethrowerboost").push_ct_vector();
|
|
timer = obj.getVar("flamethrowerboost").get_ct_vector(0);
|
|
}
|
|
timer.Reset();
|
|
timer.Start(10000,0);
|
|
obj.sq_IntVectClear();
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT) > 0) obj.sq_IntVectPush(10);
|
|
else obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_FLAMETHROWERBOOST, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_FlameThrowerBoost(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_FlameThrowerBoost(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_SetCurrentAnimation(185);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/flamethrowerboost/atfrontrapid1a.ani"), 0, 0);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_SUBWEAPONMASTERY) > 0) obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.2, 1.2);
|
|
else obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_HITONSUBWEAPON) > 0) setHitonSubweapon_bykk(obj);
|
|
obj.sq_PlaySound("FG_FIRE");
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(186);
|
|
obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/flamethrowerboost/atfrontrapid2a.ani"), 0, 0);
|
|
obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/flamethrowerboost/atweapon_glow.ani"), 0, 0);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/flamethrowerboost/body_glow_woman.ani"), 0, 0);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
break;
|
|
case 10:
|
|
obj.sq_SetCurrentAnimation(152);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_HITONSUBWEAPON) > 0) setHitonSubweapon_bykk(obj);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_SUBWEAPONMASTERY) > 0) obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.2, 1.2);
|
|
else obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
obj.sq_PlaySound("FG_FIRE");
|
|
break;
|
|
case 11:
|
|
obj.sq_SetCurrentAnimation(151);
|
|
obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atajreinforceparts/flamethrowerboost/atweapon_glow_3.ani"), 0, 0);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_PANDORA_01) > 0) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atpandora01/lv95pandora01_05.ani"), 50, 0);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
break;
|
|
case 12:
|
|
obj.sq_SetCurrentAnimation(150);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_FlameThrowerBoost(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
case 10:
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLAMETHROWERBOOST, -1, 4, 1.0) + 100;
|
|
print(totalDamage);
|
|
if(sq_GetIntData(obj, SKILL_BYKK_FLAMETHROWERBOOST, 5) > 0) totalDamage = totalDamage + obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLAMETHROWER, -1, 4, 1.0) + 100;
|
|
print(totalDamage);
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_FLAMETHROWERBOOST);
|
|
local hitTime = sq_GetLevelData(obj, SKILL_BYKK_FLAMETHROWERBOOST, 2, skillLevel);
|
|
local moveRate = sq_GetLevelData(obj, SKILL_BYKK_FLAMETHROWERBOOST, 3, skillLevel);
|
|
local sizeRate = sq_GetLevelData(obj, SKILL_BYKK_FLAMETHROWERBOOST, 5, skillLevel);
|
|
local sub = 0, speed = 150 / moveRate * 1000;
|
|
|
|
if(sq_GetIntData(obj, SKILL_BYKK_FLAMETHROWERBOOST, 4) > 0){
|
|
local timeMax = sq_GetLevelData(obj, SKILL_BYKK_FLAMETHROWERBOOST, 1, skillLevel);
|
|
local hitMax = timeMax / hitTime;
|
|
totalDamage = totalDamage * hitMax;
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,140,0,65,obj.getDirection(),2,SKILL_BYKK_FLAMETHROWERBOOST,2,totalDamage,sizeRate,0,0,0,0,0,0);
|
|
obj.setTimeEvent(2, 50, 1, false);
|
|
obj.sq_PlaySound("FG_FIRE");
|
|
return;
|
|
}
|
|
|
|
if(subState == 10){
|
|
sub = 1;
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_PANDORA_01) > 0) speed = speed / sq_GetIntData(obj, SKILL_BYKK_PANDORA_01, 0) * 100;
|
|
}
|
|
obj.setTimeEvent(1, speed, -1, false);
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,155,-1,65,obj.getDirection(),2,SKILL_BYKK_FLAMETHROWERBOOST,1,totalDamage,hitTime,sub,sizeRate,0,0,0,0);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(subState + 1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_FLAMETHROWERBOOST, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_FLAMETHROWERBOOST, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 12:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_FlameThrowerBoost(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 1:
|
|
case 11:
|
|
local bDownKey = obj.isDownSkillLastKey();
|
|
if(!bDownKey){
|
|
if(subState >= 10){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(12);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_FLAMETHROWERBOOST, STATE_PRIORITY_AUTO, true);
|
|
return;
|
|
}
|
|
else{
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
return;
|
|
}
|
|
}
|
|
else{
|
|
local timer = obj.getVar("flamethrowerboost").get_ct_vector(0);
|
|
if(timer){
|
|
local timeMax = sq_GetLevelData(obj, SKILL_BYKK_FLAMETHROWERBOOST, 1, sq_GetSkillLevel(obj, SKILL_BYKK_FLAMETHROWERBOOST));
|
|
local currentT = timer.Get();
|
|
if(currentT >= timeMax){
|
|
if(subState >= 10){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(12);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_FLAMETHROWERBOOST, STATE_PRIORITY_AUTO, true);
|
|
return;
|
|
}
|
|
else{
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_FlameThrowerBoost(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_FlameThrowerBoost(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 1:
|
|
local xpos = sq_GetXPos(obj), ypos = sq_GetYPos(obj), baseSpeed = 2;
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos,ypos - baseSpeed)) sq_setCurrentAxisPos(obj, 1, ypos - baseSpeed);
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos - baseSpeed,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - baseSpeed);
|
|
return;
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos + baseSpeed,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + baseSpeed);
|
|
return;
|
|
}
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos,ypos + baseSpeed)) sq_setCurrentAxisPos(obj, 1, ypos + baseSpeed);
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos - baseSpeed,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - baseSpeed);
|
|
return;
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos + baseSpeed,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + baseSpeed);
|
|
return;
|
|
}
|
|
}
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos - baseSpeed,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - baseSpeed);
|
|
return;
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos + baseSpeed,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + baseSpeed);
|
|
return;
|
|
}
|
|
break;
|
|
case 2:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_FlameThrowerBoost(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
if(new_state != STATE_BYKK_FLAMETHROWERBOOST){
|
|
local attackObj = obj.getVar("flamethrowerboost_att").get_obj_vector(0);
|
|
if(attackObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(attackObj);
|
|
if(colObj.getState() != 22) colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//潜能爆发
|
|
function checkExecutableSkill_SubWeaponStuckDown(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SUBWEAPONSTUCKDOWN);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_SUBWEAPONSTUCKDOWN, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_SubWeaponStuckDown(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_SubWeaponStuckDown(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
local Ani = obj.sq_GetThrowChargeAni(1);
|
|
obj.setCurrentAnimation(Ani);
|
|
obj.sq_PlaySound("FG_MVISION");
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SUBWEAPONSTUCKDOWN);
|
|
local castTime = sq_GetCastTime(obj, SKILL_BYKK_SUBWEAPONSTUCKDOWN, skillLevel);
|
|
local animation = sq_GetCurrentAnimation(obj);
|
|
local startTime = animation.getDelaySum(false);
|
|
local speedRate = startTime.tofloat() / castTime.tofloat();
|
|
sq_StartDrawCastGauge(obj, castTime, true);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate);
|
|
break;
|
|
case 1:
|
|
local Ani = obj.sq_GetThrowShootAni(1);
|
|
obj.setCurrentAnimation(Ani);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/2_blaster_bykk/ap_subweaponstuckdown.nut")) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/atgunner/2_blaster_bykk/ap_subweaponstuckdown.nut");
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/atgunner/2_blaster_bykk/ap_subweaponstuckdown.nut", true);
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SUBWEAPONSTUCKDOWN);
|
|
local buffTime = sq_GetLevelData(obj, SKILL_BYKK_SUBWEAPONSTUCKDOWN, 0, skillLevel);
|
|
local hitRate = sq_GetLevelData(obj, SKILL_BYKK_SUBWEAPONSTUCKDOWN, 1, skillLevel);
|
|
if(buffTime != 0) AddAppendage.sq_SetValidTime(Time);
|
|
AddAppendage.setBuffIconImage(36);//sprite_common_commoneffect
|
|
AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_SUBWEAPONSTUCKDOWN, skillLevel);
|
|
CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true);
|
|
|
|
local change_appendage = AddAppendage.sq_getChangeStatus("at_subweaponstuckdown");
|
|
if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("at_subweaponstuckdown", obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK, false, (hitRate * -1).tofloat());
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_SubWeaponStuckDown(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_SUBWEAPONSTUCKDOWN, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_SubWeaponStuckDown(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_SubWeaponStuckDown(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_SubWeaponStuckDown(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
}
|
|
|
|
function onEndState_SubWeaponStuckDown(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
if(new_state != STATE_BYKK_SUBWEAPONSTUCKDOWN){
|
|
sq_EndDrawCastGauge(obj);
|
|
}
|
|
}
|
|
|
|
function onStartDungeon_Blaster_bykk(obj)
|
|
{
|
|
setSkillBonusRate_AtBlaster_bykk(obj);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_OVERHEAT) > 0){
|
|
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atgunner/2_blaster_bykk/ap_apg_63.nut");
|
|
if(addAppendage){
|
|
addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_OVERHEAT, sq_GetSkillLevel(obj, SKILL_BYKK_OVERHEAT));
|
|
CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true);
|
|
}
|
|
}
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_STINGER);
|
|
if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_STINGER);
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_FSC_7);
|
|
if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_FSC_7);
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_FM31);
|
|
if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_FM31);
|
|
obj.getVar("isReset").setInt(0, 1);
|
|
}
|
|
|
|
function reset_atBlaster_bykk(obj)
|
|
{
|
|
if(obj.getVar("isReset").getInt(0) == 1) return;
|
|
setSkillBonusRate_AtBlaster_bykk(obj);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_OVERHEAT) > 0){
|
|
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atgunner/2_blaster_bykk/ap_apg_63.nut");
|
|
if(addAppendage){
|
|
addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_OVERHEAT, sq_GetSkillLevel(obj, SKILL_BYKK_OVERHEAT));
|
|
CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true);
|
|
}
|
|
}
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_STINGER);
|
|
if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_STINGER);
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_FSC_7);
|
|
if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_FSC_7);
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_FM31);
|
|
if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_FM31);
|
|
}
|
|
|
|
function onStart_appendage_at_subweaponstuckdown(appendage)
|
|
{
|
|
if(!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj || parentObj.getState() == STATE_DIE) return;
|
|
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
|
setSkillBonusRate_AtBlaster_bykk(obj);
|
|
}
|
|
|
|
function onEnd_appendage_at_subweaponstuckdown(appendage)
|
|
{
|
|
if(!appendage) return;
|
|
// local parentObj = appendage.getParent();
|
|
// if(!parentObj || parentObj.getState() == STATE_DIE) return;
|
|
// local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
|
// setSkillBonusRate_AtBlaster_bykk(obj);
|
|
}
|
|
|
|
function setSkillBonusRate_AtBlaster_bykk(obj)
|
|
{
|
|
local bonusRate = 1000;
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/2_blaster_bykk/ap_subweaponstuckdown.nut")) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_SUBWEAPONSTUCKDOWN, 2, sq_GetSkillLevel(obj, SKILL_BYKK_SUBWEAPONSTUCKDOWN))) / 1000;
|
|
print("bonusRate1 = "+bonusRate);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_ALPHASUPPORT, 5, sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT))) / 1000;
|
|
print("bonusRate2 = "+bonusRate);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_OVERHEAT) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_OVERHEAT, 2, sq_GetSkillLevel(obj, SKILL_BYKK_OVERHEAT)) * 10) / 1000;
|
|
print("bonusRate3 = "+bonusRate);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_PANDORA_01) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_PANDORA_01, 0, sq_GetSkillLevel(obj, SKILL_BYKK_PANDORA_01))) / 1000;
|
|
print("bonusRate4 = "+bonusRate);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_SUBWEAPONMASTERY) > 0 && obj.getWeaponSubType() == 3) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_SUBWEAPONMASTERY, 3, sq_GetSkillLevel(obj, SKILL_BYKK_SUBWEAPONMASTERY))) / 1000;
|
|
print("bonusRate5 = "+bonusRate);
|
|
obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger());
|
|
//sq_SetSkillAttackBonus(obj, bonusRate);
|
|
}
|
|
|
|
//FM-31榴弹发射器
|
|
FM31_STONE <- 0
|
|
|
|
function checkExecutableSkill_FM31(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_FM31);
|
|
if (isUse){
|
|
obj.startSkillCoolTime(SKILL_BYKK_FM31, sq_GetSkillLevel(obj, SKILL_BYKK_FM31), -1);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_FM31, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_FM31(obj)
|
|
{
|
|
if (!obj) return false;
|
|
if(FM31_STONE == 1) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_FM31(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_SetCurrentAnimation(185);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/fm31/atfrontrapid1a.ani"), 0, 0);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_SUBWEAPONMASTERY) > 0) obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.2, 1.2);
|
|
else obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 3400 / currentAni.getDelaySum(0, 0);
|
|
currentAni.setSpeedRate(speedRate.tofloat() * 1.5);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_HITONSUBWEAPON) > 0) setHitonSubweapon_bykk(obj);
|
|
obj.sq_PlaySound("FG_SSHOT");
|
|
obj.sq_PlaySound("FM31_READY");
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(186);
|
|
obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/fm31/atfrontrapid2a.ani"), 0, 0);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.5, 1.5);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_FM31(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_FM31, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_FM31);
|
|
local createMax = sq_GetLevelData(obj, SKILL_BYKK_FM31, 0, skillLevel);
|
|
if(FM31_STONE == 1) createMax = 1;
|
|
obj.getVar("FM31").setInt(10, createMax);
|
|
local delay = sq_GetIntData(obj, SKILL_BYKK_FM31, 2) / 3;
|
|
if(FM31_STONE == 1) delay = 175;
|
|
obj.setTimeEvent(1, delay, createMax, true);
|
|
if(FM31_STONE == 1) break;
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT) < 1){
|
|
if(obj.getDirection() == ENUM_DIRECTION_LEFT) sq_SetVelocity(obj, 0, 120.0);
|
|
else sq_SetVelocity(obj, 0, -120.0);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_FM31(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_FM31(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_FM31(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 1:
|
|
obj.sq_PlaySound("FM31_SHOT");
|
|
local bonusRate = 1.0;
|
|
if(FM31_STONE == 1) bonusRate = 1.27;
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FM31, -1, 1, bonusRate);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_FM31, 0);
|
|
if(FM31_STONE == 1) sizeRate = sizeRate * 120 / 100;
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,125,-1,65,obj.getDirection(),2,SKILL_BYKK_FM31,1,totalDamage,sizeRate,0,0,0,0,0,0);
|
|
if(timeEventCount >= obj.getVar("FM31").getInt(10)){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_FM31(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
|
|
//FM-92 mk2榴弹
|
|
function checkExecutableSkill_Stinger(obj)
|
|
{
|
|
if (!obj) return false;
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT) > 0){
|
|
if(obj.getState() == STATE_STAND){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
}
|
|
else if(obj.getState() == STATE_DASH){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_DASH, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
}
|
|
return false;
|
|
}
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_STINGER);
|
|
if (isUse){
|
|
obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_STINGER);
|
|
obj.getVar("stinger_att").clear_obj_vector();
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_STINGER, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Stinger(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Stinger(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_SetCurrentAnimation(183);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/stinger/atuponce1a.ani"), 0, 0);
|
|
obj.sq_PlaySound("FG_LANCER");
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_HITONSUBWEAPON) > 0) setHitonSubweapon_bykk(obj);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_SUBWEAPONMASTERY) > 0) obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.2, 1.2);
|
|
else obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(184);
|
|
obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/stinger/atuponce2a.ani"), 0, 0);
|
|
obj.sq_PlaySound("STINGER_SHOT");
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/subweapon/stinger/shoot1.ani", 0, 0, 0);
|
|
obj.setTimeEvent(1, 50, 1, false);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_Stinger(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_STINGER, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Stinger(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 1:
|
|
local minTime = sq_GetIntData(obj, SKILL_BYKK_STINGER, 2);
|
|
local stateTime = obj.sq_GetStateTimer();
|
|
local bDownKey = obj.isDownSkillLastKey();
|
|
if(bDownKey){
|
|
if(stateTime > minTime){
|
|
local attackObj = obj.getVar("stinger_att").get_obj_vector(0);
|
|
if(attackObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(attackObj);
|
|
if(!colObj.isExistTimeEvent(1) && colObj.getState() == 20){
|
|
local maxTime = colObj.getVar("custom").getInt(13);
|
|
local minTime = colObj.getVar("custom").getInt(14);
|
|
colObj.setTimeEvent(1, maxTime - minTime, 1, false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
local attackObj = obj.getVar("stinger_att").get_obj_vector(0);
|
|
if(attackObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(attackObj);
|
|
if(colObj.getState() != 21) colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT) > 0){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Stinger(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Stinger(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 1:
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/subweapon/stinger/shoot2dodge.ani", 0, 0, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/subweapon/stinger/shoot2normal.ani", 0, 0, 0);
|
|
|
|
local createMax = sq_GetIntData(obj, SKILL_BYKK_STINGER, 4);
|
|
local bonusRate = 1.0;
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_ALPHASUPPORT) > 0) bonusRate = 0.6;
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STINGER, -1, 0, bonusRate) + 100;
|
|
local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STINGER, -1, 3, 1.0) + 100;
|
|
local minTime = sq_GetIntData(obj, SKILL_BYKK_STINGER, 2);
|
|
local maxTime = sq_GetIntData(obj, SKILL_BYKK_STINGER, 3);
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,95,-1,135,obj.getDirection(),2,SKILL_BYKK_STINGER,1,totalDamage,sizeRate,createMax,maxTime,minTime,0,0,0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Stinger(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
|
|
//量子爆弹
|
|
function checkExecutableSkill_UraniumBomb(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_URANIUMBOMB);
|
|
if (isUse){
|
|
local subState = 0;
|
|
if(sq_GetIntData(obj, SKILL_BYKK_URANIUMBOMB, 3) > 0 || false) subState = 10;//护石
|
|
else obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_URANIUMBOMB);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(subState);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_URANIUMBOMB, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_UraniumBomb(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_UraniumBomb(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_SetCurrentAnimation(193);
|
|
obj.sq_PlaySound("R_FG_BIGBOMB");
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(194);
|
|
obj.sq_RemoveAimPointMark();
|
|
obj.removeAllTimeEvent();
|
|
break;
|
|
case 10:
|
|
obj.sq_SetCurrentAnimation(193);
|
|
obj.sq_PlaySound("R_FG_BIGBOMB");
|
|
break;
|
|
case 11:
|
|
obj.sq_SetCurrentAnimation(194);
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,-100,0,0,obj.getDirection(),2,SKILL_BYKK_URANIUMBOMB,3,0,0,0,0,0,0,0,0);
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
}
|
|
|
|
function onEndCurrentAni_UraniumBomb(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
local posX = obj.getXPos();
|
|
local posY = obj.getYPos();
|
|
|
|
local offsetX = 130;
|
|
offsetX = obj.sq_GetDistancePos(posX, obj.sq_GetDirection(), offsetX);
|
|
|
|
local vX = 800;
|
|
local vY = 300;
|
|
|
|
obj.sq_AddAimPointMark(offsetX, posY, vX, vY);
|
|
obj.setTimeEvent(1, 1500, 1, false);
|
|
break;
|
|
case 1:
|
|
case 11:
|
|
if(subState == 1 && sq_GetIntData(obj, SKILL_BYKK_URANIUMBOMB, 7) > 0){
|
|
if(sq_getRandom(1, 100) <= 70){
|
|
obj.setTimeEvent(2, 300, 1, false);
|
|
break;
|
|
}
|
|
}
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 10:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(11);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_URANIUMBOMB, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_UraniumBomb(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
local bDownKey = obj.isDownSkillLastKey();
|
|
switch(subState){
|
|
case 0:
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local delaySum = currentAni.getDelaySum(false);
|
|
if(!bDownKey && obj.sq_GetStateTimer() >= delaySum + 100){
|
|
local aimPosX = obj.sq_GetAimPosX(obj.getXPos(), obj.getYPos(), false);
|
|
local aimPosY = obj.sq_GetAimPosY(obj.getXPos(), obj.getYPos(), false);
|
|
obj.getVar("UraniumBombSave").setInt(0, aimPosX);
|
|
obj.getVar("UraniumBombSave").setInt(1, aimPosY);
|
|
local offsetX = -350;
|
|
if(obj.getDirection() == ENUM_DIRECTION_LEFT) offsetX = 350;
|
|
local aniPath = "passiveobject/actionobject/monster/cartelcommand/animation/gunneraimpointmark2.ani";
|
|
createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,obj.getDirection(),aimPosX,aimPosY,0,ENUM_DRAWLAYER_BOTTOM);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_URANIUMBOMB, -1, 7, 1.0) + 100;
|
|
local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_URANIUMBOMB, -1, 8, 1.0) + 100;
|
|
local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_URANIUMBOMB, -1, 5, 0.5) + 100;
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_URANIUMBOMB);
|
|
local prob = sq_GetLevelData(obj, SKILL_BYKK_URANIUMBOMB, 1, skillLevel);
|
|
local time = sq_GetLevelData(obj, SKILL_BYKK_URANIUMBOMB, 3, skillLevel);
|
|
local damage = sq_GetLevelData(obj, SKILL_BYKK_URANIUMBOMB, 4, skillLevel);
|
|
local level = sq_GetSkillLevel(obj, 174) + 10;
|
|
sq_BinaryStartWrite();
|
|
sq_BinaryWriteDword(2);
|
|
sq_BinaryWriteDword(SKILL_BYKK_URANIUMBOMB);
|
|
sq_BinaryWriteDword(1);
|
|
sq_BinaryWriteDword(totalDamage);
|
|
sq_BinaryWriteDword(totalDamage2);
|
|
sq_BinaryWriteDword(sizeRate);
|
|
sq_BinaryWriteDword(prob);
|
|
sq_BinaryWriteDword(time);
|
|
sq_BinaryWriteDword(damage);
|
|
sq_BinaryWriteDword(level);
|
|
sq_SendCreatePassiveObjectPacketPos(obj, PASSIVEOBJ_BYKK_ATGUNNER, 0, aimPosX + offsetX, aimPosY, 500);
|
|
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_URANIUMBOMB, STATE_PRIORITY_AUTO, true);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_UraniumBomb(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_UraniumBomb(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 1:
|
|
local offsetX = -350;
|
|
if(obj.getDirection() == ENUM_DIRECTION_LEFT) offsetX = 350;
|
|
local aimPosX = obj.sq_GetAimPosX(obj.getXPos(), obj.getYPos(), false);
|
|
local aimPosY = obj.sq_GetAimPosY(obj.getXPos(), obj.getYPos(), false);
|
|
obj.getVar("UraniumBombSave").setInt(0, aimPosX);
|
|
obj.getVar("UraniumBombSave").setInt(1, aimPosY);
|
|
local aniPath = "passiveobject/actionobject/monster/cartelcommand/animation/gunneraimpointmark2.ani";
|
|
createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,obj.getDirection(),aimPosX,aimPosY,0,ENUM_DRAWLAYER_BOTTOM);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_URANIUMBOMB, -1, 7, 1.0) + 100;
|
|
local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_URANIUMBOMB, -1, 8, 1.0) + 100;
|
|
local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_URANIUMBOMB, -1, 5, 0.5) + 100;
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_URANIUMBOMB);
|
|
local prob = sq_GetLevelData(obj, SKILL_BYKK_URANIUMBOMB, 1, skillLevel);
|
|
local time = sq_GetLevelData(obj, SKILL_BYKK_URANIUMBOMB, 3, skillLevel);
|
|
local damage = sq_GetLevelData(obj, SKILL_BYKK_URANIUMBOMB, 4, skillLevel);
|
|
local level = sq_GetSkillLevel(obj, 174) + 10;
|
|
sq_BinaryStartWrite();
|
|
sq_BinaryWriteDword(2);
|
|
sq_BinaryWriteDword(SKILL_BYKK_URANIUMBOMB);
|
|
sq_BinaryWriteDword(1);
|
|
sq_BinaryWriteDword(totalDamage);
|
|
sq_BinaryWriteDword(totalDamage2);
|
|
sq_BinaryWriteDword(sizeRate);
|
|
sq_BinaryWriteDword(prob);
|
|
sq_BinaryWriteDword(time);
|
|
sq_BinaryWriteDword(damage);
|
|
sq_BinaryWriteDword(level);
|
|
sq_SendCreatePassiveObjectPacketPos(obj, PASSIVEOBJ_BYKK_ATGUNNER, 0, aimPosX + offsetX, aimPosY, 500);
|
|
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_URANIUMBOMB, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 2:
|
|
local offsetX = -350;
|
|
if(obj.getDirection() == ENUM_DIRECTION_LEFT) offsetX = 350;
|
|
local aimPosX = obj.getVar("UraniumBombSave").getInt(0);
|
|
local aimPosY = obj.getVar("UraniumBombSave").getInt(1);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_URANIUMBOMB, -1, 7, 1.0) + 100;
|
|
local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_URANIUMBOMB, -1, 8, 1.0) + 100;
|
|
local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_URANIUMBOMB, -1, 5, 0.5) + 100;
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_URANIUMBOMB);
|
|
local prob = sq_GetLevelData(obj, SKILL_BYKK_URANIUMBOMB, 1, skillLevel);
|
|
local time = sq_GetLevelData(obj, SKILL_BYKK_URANIUMBOMB, 3, skillLevel);
|
|
local damage = sq_GetLevelData(obj, SKILL_BYKK_URANIUMBOMB, 4, skillLevel);
|
|
local level = sq_GetSkillLevel(obj, 174) + 10;
|
|
sq_BinaryStartWrite();
|
|
sq_BinaryWriteDword(2);
|
|
sq_BinaryWriteDword(SKILL_BYKK_URANIUMBOMB);
|
|
sq_BinaryWriteDword(1);
|
|
sq_BinaryWriteDword(totalDamage);
|
|
sq_BinaryWriteDword(totalDamage2);
|
|
sq_BinaryWriteDword(sizeRate);
|
|
sq_BinaryWriteDword(prob);
|
|
sq_BinaryWriteDword(time);
|
|
sq_BinaryWriteDword(damage);
|
|
sq_BinaryWriteDword(level);
|
|
sq_SendCreatePassiveObjectPacketPos(obj, PASSIVEOBJ_BYKK_ATGUNNER, 0, aimPosX + offsetX, aimPosY, 500);
|
|
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_UraniumBomb(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
if(new_state != STATE_BYKK_URANIUMBOMB){
|
|
sq_EndDrawCastGauge(obj);
|
|
obj.sq_RemoveAimPointMark();
|
|
}
|
|
}
|
|
|
|
|
|
//X-2太阳神光炮
|
|
function checkExecutableSkill_Solarsystem(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SOLARSYSTEM);
|
|
if (isUse){
|
|
obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_SOLARSYSTEM);
|
|
obj.getVar("solarsystem_bool").setBool(0, false);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_SOLARSYSTEM, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Solarsystem(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Solarsystem(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_SetCurrentAnimation(180);
|
|
obj.sq_PlaySound("R_FG_SOLASYSTEM_CAST");
|
|
obj.sq_PlaySound("SOLASYSTEM_READY");
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_HITONSUBWEAPON) > 0) setHitonSubweapon_bykk(obj);
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(171);
|
|
break;
|
|
case 2:
|
|
obj.sq_SetCurrentAnimation(175);
|
|
obj.sq_PlaySound("SOLASYSTEM_SHOT");
|
|
sq_flashScreen(obj, 0, 400, 100, 204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
//[OFFSET]`shoot` 150 0 63
|
|
//[OFFSET]`recoil start` 0 0 0
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SOLARSYSTEM, -1, 1, 1.0);
|
|
local damage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SOLARSYSTEM, -1, 0, 1.0);
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,150,0,63,obj.getDirection(),2,SKILL_BYKK_SOLARSYSTEM,1,totalDamage,damage,0,0,0,0,0,0);
|
|
break;
|
|
case 3:
|
|
obj.sq_SetCurrentAnimation(172);
|
|
obj.sq_PlaySound("SOLASYSTEM_LSHOT_TRANS");
|
|
sq_SetMyShake(obj, 1, 80);
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
}
|
|
|
|
function onEndCurrentAni_Solarsystem(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
local sub = 1;
|
|
if(obj.getVar("solarsystem_bool").getBool(0)) sub = 3;
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(sub);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_SOLARSYSTEM, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 2:
|
|
case 3:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Solarsystem(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_SOLARSYSTEM) > 0 && !sq_GetSkill(obj, SKILL_BYKK_LASERRIFLE).isInCoolTime()){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_LASERRIFLE,true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_LASERRIFLE);
|
|
if(b_useskill != -1){
|
|
obj.startSkillCoolTime(SKILL_BYKK_LASERRIFLE, sq_GetSkillLevel(obj, SKILL_BYKK_LASERRIFLE), -1);
|
|
obj.getVar("solarsystem_bool").setBool(0, true);
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
case 1:
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_SOLARSYSTEM) > 0 && !sq_GetSkill(obj, SKILL_BYKK_LASERRIFLE).isInCoolTime()){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_LASERRIFLE,true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_LASERRIFLE);
|
|
if(b_useskill != -1){
|
|
obj.startSkillCoolTime(SKILL_BYKK_LASERRIFLE, sq_GetSkillLevel(obj, SKILL_BYKK_LASERRIFLE), -1);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(3);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_SOLARSYSTEM, STATE_PRIORITY_AUTO, true);
|
|
return;
|
|
}
|
|
}
|
|
local bDownKey = obj.isDownSkillLastKey();
|
|
if(!bDownKey){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(2);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_SOLARSYSTEM, STATE_PRIORITY_AUTO, true);
|
|
return;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Solarsystem(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 301:
|
|
obj.sq_PlaySound("R_FG_SOLASYSTEM_FIN");
|
|
sq_SetMyShake(obj, 3, 200);
|
|
break;
|
|
case 402:
|
|
obj.sq_PlaySound("R_FG_SOLASYSTEM_LSHOT");
|
|
break;
|
|
case 406:
|
|
obj.sq_PlaySound("SOLASYSTEM_LSHOT_BURST");
|
|
sq_flashScreen(obj, 0, 200, 200, 204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
sq_SetMyShake(obj, 6, 350);
|
|
//[OFFSET] `shoot` -20 0 -1
|
|
//[OFFSET] `recoil start` 0 0 0
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SOLARSYSTEM, -1, 1, 0.25);
|
|
local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SOLARSYSTEM, -1, 1, 1.0);
|
|
// local totalDamage2 = (obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LASERRIFLE, -1, 1, 0.2) + 100) * (100 + sq_GetLevelData(obj, SKILL_BYKK_LASERRIFLECHARGE, 1, sq_GetSkillLevel(obj, SKILL_BYKK_LASERRIFLECHARGE))) / 100;
|
|
print("totalDamage2 = "+totalDamage2);
|
|
local damage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SOLARSYSTEM, -1, 0, 1.0);
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,-20,0,-1,obj.getDirection(),2,SKILL_BYKK_SOLARSYSTEM,3,totalDamage,totalDamage2,damage,0,0,0,0,0);
|
|
break;
|
|
case 407:
|
|
obj.sq_PlaySound("R_FG_SOLASYSTEM_FIN");
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Solarsystem(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
}
|
|
|
|
function onEndState_Solarsystem(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
|
|
//远古粒子炮
|
|
function checkExecutableSkill_AncientTrigger(obj)
|
|
{
|
|
if (!obj) return false;
|
|
obj.getVar("AncientTrigger_bool").setBool(0, false);
|
|
obj.getVar("AncientTrigger_bool").setBool(1, false);
|
|
obj.getVar("AncientTrigger_bool").setBool(2, false);
|
|
obj.getVar("AncientTrigger_obj").clear_obj_vector();
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_ANCIENTTRIGGER) >= 9) sq_SendMessage(obj, 0, 1, 0);
|
|
}
|
|
|
|
function checkCommandEnable_AncientTrigger(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onAfterSetState_AncientTrigger(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local speedRate = sq_GetLevelData(obj, SKILL_BYKK_ANCIENTTRIGGER, 7, sq_GetSkillLevel(obj, SKILL_BYKK_ANCIENTTRIGGER)) + 100;
|
|
if(speedRate > 100){
|
|
local currentAni = obj.getCurrentAnimation();
|
|
currentAni.setSpeedRate(speedRate.tofloat());
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_AncientTrigger(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_AncientTrigger(obj)
|
|
{
|
|
if(!obj) return;
|
|
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
|
|
if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_IntVectPush(100);
|
|
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true);
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_AncientTrigger(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_AncientTrigger(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
}
|
|
|
|
function onEndState_AncientTrigger(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
if(new_state != 44) sq_SendMessage(obj, 0, 0, 0);
|
|
}
|
|
|
|
function onCreateObject_AncientTrigger(obj, createObject)
|
|
{
|
|
if(createObject.isObjectType(OBJECTTYPE_PASSIVE)){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(createObject);
|
|
local id = colObj.getCollisionObjectIndex();
|
|
// print(id);
|
|
if(id == 22270){
|
|
obj.getVar("AncientTrigger_att").clear_obj_vector();
|
|
obj.getVar("AncientTrigger_att").push_obj_vector(colObj);
|
|
}
|
|
// if(id == 22300){
|
|
// obj.getVar("AncientTrigger_att").clear_obj_vector();
|
|
// obj.getVar("AncientTrigger_att").push_obj_vector(colObj);
|
|
// }
|
|
}
|
|
}
|
|
|
|
|
|
//等离子发射器
|
|
function checkExecutableSkill_Plasmaboost(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PLASMABOOST);
|
|
if (isUse){
|
|
obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_PLASMABOOST);
|
|
obj.getVar("plasmaboost_att").clear_obj_vector();
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PLASMABOOST, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Plasmaboost(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Plasmaboost(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_SetCurrentAnimation(165);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_HITONSUBWEAPON) > 0) setHitonSubweapon_bykk(obj);
|
|
break;
|
|
case 1://LOOP
|
|
obj.sq_SetCurrentAnimation(164);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_PANDORA_01) > 0) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atpandora01/lv95pandora01_05.ani"), 50, 0);
|
|
break;
|
|
case 2://LOOP_TALISMAN
|
|
obj.sq_SetCurrentAnimation(162);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_PANDORA_01) > 0) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atpandora01/lv95pandora01_05.ani"), 50, 0);
|
|
obj.setTimeEvent(1, 500, 1, false);
|
|
break;
|
|
case 3:
|
|
obj.sq_SetCurrentAnimation(163);
|
|
local attackObj = obj.getVar("plasmaboost_att").get_obj_vector(0);
|
|
if(attackObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(attackObj);
|
|
colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
|
|
}
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
}
|
|
|
|
function onEndCurrentAni_Plasmaboost(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
local sub = 1;
|
|
if(sq_GetIntData(obj, SKILL_BYKK_PLASMABOOST, 2) > 0) sub = 2;//护石
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(sub);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PLASMABOOST, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 3:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Plasmaboost(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 1:
|
|
local bDownKey = obj.isDownSkillLastKey();
|
|
local stateTime = obj.sq_GetStateTimer();
|
|
local maxTime = sq_GetLevelData(obj, SKILL_BYKK_PLASMABOOST, 1, sq_GetSkillLevel(obj, SKILL_BYKK_PLASMABOOST));
|
|
if(!bDownKey || stateTime >= maxTime){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(3);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PLASMABOOST, STATE_PRIORITY_AUTO, true);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Plasmaboost(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 1:
|
|
obj.sq_PlaySound("FG_HIGH_SLIDING");
|
|
obj.sq_PlaySound("SUBWEAPON_DRAW");
|
|
obj.sq_PlaySound("PLASMA_SHOT");
|
|
break;
|
|
case 4:
|
|
//[OFFSET] `Create Plasma` 92 0 68
|
|
//[OFFSET] `create Dust` -100 0 0
|
|
//[OFFSET] `create Shoot Effect` 140 0 68
|
|
if(sq_GetIntData(obj, SKILL_BYKK_PLASMABOOST, 2) > 0) sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/plasmaboost/atgunner/plasmaboost_talisman/plasmabooster_talismansonicboom_force_att_circle_3.ani", 148, 0, 68);//护石
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/plasmaboost/atgunner/plasmaboost_talisman/plasmabooster_talismandust_01.ani", -100, 0, 0);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PLASMABOOST, -1, 0, 1.0) + 100;
|
|
local hitTime = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PLASMABOOST, -1, 2, 1.0) + 100;
|
|
local holdTime = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PLASMABOOST, -1, 4, 1.0) + 100;
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,92,0,68,obj.getDirection(),2,SKILL_BYKK_PLASMABOOST,1,totalDamage,hitTime,holdTime,0,0,0,0,0);
|
|
|
|
local moveRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PLASMABOOST, -1, 3, 1.0) + 100;
|
|
local speed = (8.0 / moveRate.tofloat() * 1000.0).tointeger();
|
|
obj.setTimeEvent(2, speed, -1, false);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Plasmaboost(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(3);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PLASMABOOST, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 2:
|
|
local xpos = sq_GetXPos(obj), ypos = sq_GetYPos(obj);
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos,ypos - 1)) sq_setCurrentAxisPos(obj, 1, ypos - 1);
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos - 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 1);
|
|
return;
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos + 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 1);
|
|
return;
|
|
}
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos,ypos + 1)) sq_setCurrentAxisPos(obj, 1, ypos + 1);
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos - 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 1);
|
|
return;
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos + 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 1);
|
|
return;
|
|
}
|
|
}
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos - 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 1);
|
|
return;
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos + 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 1);
|
|
return;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Plasmaboost(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
if(new_state != STATE_BYKK_PLASMABOOST){
|
|
local attackObj = obj.getVar("plasmaboost_att").get_obj_vector(0);
|
|
if(attackObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(attackObj);
|
|
if(colObj.getState() != 21) colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//FSC-7
|
|
FSC7_STONE <- 1
|
|
|
|
function checkExecutableSkill_Fsc_7(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_FSC_7);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_FSC_7, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Fsc_7(obj)
|
|
{
|
|
if (!obj) return false;
|
|
if(FSC7_STONE == 1) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Fsc_7(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_SetCurrentAnimation(153);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_HITONSUBWEAPON) > 0) setHitonSubweapon_bykk(obj);
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(154);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_HITONSUBWEAPON) > 0) setHitonSubweapon_bykk(obj);
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
}
|
|
|
|
function onEndCurrentAni_Fsc_7(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Fsc_7(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_Fsc_7(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 101:
|
|
obj.sq_PlaySound("FG_MROSE_02");
|
|
obj.sq_PlaySound("MSC_READY");
|
|
break;
|
|
case 108:
|
|
obj.sq_PlaySound("MSC_SHOT");
|
|
sq_SetMyShake(obj, 5, 150);
|
|
//[OFFSET] `Create Bullet` 139 0 84
|
|
local bonusRate = 1.0;
|
|
if(FSC7_STONE == 1) bonusRate = 0.64;
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FSC_7, -1, 0, bonusRate);
|
|
local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FSC_7, -1, 1, bonusRate);
|
|
local hitMax = sq_GetIntData(obj, SKILL_BYKK_FSC_7, 1);
|
|
local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FSC_7, -1, 2, 1.0) + 100;
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,139,0,84,obj.getDirection(),2,SKILL_BYKK_FSC_7,1,totalDamage,totalDamage2,hitMax,sizeRate,0,0,0,0);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Fsc_7(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
}
|
|
|
|
function onEndState_Fsc_7(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
|
|
//FM-92 mk2 SW榴弹
|
|
function checkExecutableSkill_StingerEx(obj)
|
|
{
|
|
if (!obj) return false;
|
|
if(sq_GetLevelData(obj, SKILL_BYKK_STINGEREX, 11, sq_GetSkillLevel(obj, SKILL_BYKK_STINGEREX)) < 1) return false;//护石
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_STINGEREX);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_STINGEREX, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_StingerEx(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_StingerEx(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_SetCurrentAnimation(181);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/stinger/atuponce1a.ani"), 0, 0);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_HITONSUBWEAPON) > 0) setHitonSubweapon_bykk(obj);
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(182);
|
|
obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/subweapon/stinger/atuponce2a.ani"), 0, 0);
|
|
obj.sq_PlaySound("STINGER_SHOT");
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/subweapon/stinger/shoot1.ani", 0, 0, 0);
|
|
obj.setTimeEvent(1, 50, 1, false);
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
}
|
|
|
|
function onEndCurrentAni_StingerEx(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_STINGEREX, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_StingerEx(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_StingerEx(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_StingerEx(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 1:
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/subweapon/stinger/shoot2dodge.ani", 0, 0, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/subweapon/stinger/shoot2normal.ani", 0, 0, 0);
|
|
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STINGEREX, -1, 0, 1.0);
|
|
local hitMax = sq_GetIntData(obj, SKILL_BYKK_STINGEREX, 4);
|
|
local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STINGEREX, -1, 10, 1.0) + 100;
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,95,-1,135,obj.getDirection(),2,SKILL_BYKK_STINGEREX,1,totalDamage,hitMax,sizeRate,0,0,0,0,0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_StingerEx(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
|
|
//PT-15原始型压缩炮
|
|
function checkExecutableSkill_Pt_15(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PT_15);
|
|
if (isUse){
|
|
obj.getVar("PT15_SUB").setInt(10, 1);
|
|
local sub = 0;
|
|
if(sq_GetIntData(obj, SKILL_BYKK_PT_15, 10) > 0) sub = 4; //护石
|
|
obj.getVar("PT15_BOOL").setBool(0, true);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(sub);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PT_15, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Pt_15(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Pt_15(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_SetCurrentAnimation(170);
|
|
break;
|
|
case 1://normalshot
|
|
obj.sq_SetCurrentAnimation(169);
|
|
break;
|
|
case 2://jumpshot
|
|
obj.sq_SetCurrentAnimation(168);
|
|
break;
|
|
case 3://backshot
|
|
obj.sq_SetCurrentAnimation(166);
|
|
break;
|
|
case 4://equip_body
|
|
obj.sq_SetCurrentAnimation(167);
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
}
|
|
|
|
function onEndCurrentAni_Pt_15(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
local sub = obj.getVar("PT15_SUB").getInt(10);
|
|
if(sub == 2){
|
|
obj.getVar("PT15_MOVE").setInt(10, sq_GetXPos(obj));
|
|
obj.setTimeEvent(1, 5, 40, true);
|
|
}
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(sub);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PT_15, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
case 3:
|
|
case 4:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 2:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Pt_15(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
if(sq_GetIntData(obj, SKILL_BYKK_PT_15, 10) > 0) break; //护石
|
|
if(obj.getVar("PT15_BOOL").getBool(0)){
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){
|
|
obj.getVar("PT15_BOOL").setBool(0, false);
|
|
obj.getVar("PT15_SUB").setInt(10, 2);
|
|
}
|
|
else if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT ||sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection()== ENUM_DIRECTION_LEFT)){
|
|
obj.getVar("PT15_BOOL").setBool(0, false);
|
|
obj.getVar("PT15_SUB").setInt(10, 3);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Pt_15(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 1000:
|
|
obj.sq_PlaySound("FG_PROTOTYPE");
|
|
obj.sq_PlaySound("PROTOTYPE_RELOAD");
|
|
break;
|
|
case 1114:
|
|
obj.sq_PlaySound("PROTOTYPE_AIR_02");
|
|
sq_flashScreen(obj,0,40,0,102, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
sq_SetMyShake(obj, 6, 240);
|
|
//[OFFSET] `NormalShotPowered` 135 1 90
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PT_15, -1, 3, 1.0) + 100;
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_PT_15, 8) + sq_GetIntData(obj, SKILL_BYKK_PT_15, 9);
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,135,1,90,obj.getDirection(),2,SKILL_BYKK_PT_15,1,totalDamage,sizeRate,0,0,0,0,0,0);
|
|
break;
|
|
case 1116:
|
|
//[OFFSET] `WindExp` 604 0 91
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PT_15, -1, 5, 1.0) + 100;
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_PT_15, 8) + sq_GetIntData(obj, SKILL_BYKK_PT_15, 9);
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,604,0,91,obj.getDirection(),2,SKILL_BYKK_PT_15,2,totalDamage,sizeRate,0,0,0,0,0,0);
|
|
break;
|
|
case 1205:
|
|
//[OFFSET] `JumpShot` 86 0 -3
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PT_15, -1, 5, 1.0) + 100;
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_PT_15, 9);
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,86,0,-3 - sq_GetZPos(obj),obj.getDirection(),2,SKILL_BYKK_PT_15,3,totalDamage,sizeRate,0,0,0,0,0,0);
|
|
break;
|
|
case 1307:
|
|
obj.sq_PlaySound("PROTOTYPE_AIR_01");
|
|
sq_SetMyShake(obj, 6, 240);
|
|
break;
|
|
case 1308:
|
|
//[OFFSET] `NormalShot` 56 0 91
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PT_15, -1, 1, 1.0) + 100;
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_PT_15, 9);
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,56,0,91,obj.getDirection(),2,SKILL_BYKK_PT_15,1,totalDamage,sizeRate,0,0,0,0,0,0);
|
|
break;
|
|
case 1310:
|
|
//[OFFSET] `BackShot` 78 0 80
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PT_15, -1, 1, 1.0) + 100;
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_PT_15, 8) + sq_GetIntData(obj, SKILL_BYKK_PT_15, 9);
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,-78,0,80,sq_GetOppositeDirection(obj.getDirection()),2,SKILL_BYKK_PT_15,1,totalDamage,sizeRate,0,0,0,0,0,0);
|
|
break;
|
|
case 1400:
|
|
obj.sq_PlaySound("FG_PROTOTYPE");
|
|
//[OFFSET] `CreateEquipedObject` 0 0 0
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PT_15, -1, 3, 1.0) + obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PT_15, -1, 5, 1.0);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_PT_15, 9);
|
|
print("sizeRate = "+sizeRate);
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),2,SKILL_BYKK_PT_15,4,totalDamage,sizeRate,0,0,0,0,0,0);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Pt_15(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 1:
|
|
local vx = sq_GetAccel(0, 100, timeEventCount, 40, true);
|
|
local vz = sq_GetAccel(0, 200, timeEventCount, 40, true);
|
|
local dstX = sq_GetDistancePos(obj.getVar("PT15_MOVE").getInt(10), obj.getDirection(), vx);
|
|
sq_setCurrentAxisPos(obj, 0, dstX);
|
|
sq_setCurrentAxisPos(obj, 2, vz);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Pt_15(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
|
|
//火力全开
|
|
function checkExecutableSkill_Operationraze(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_OPERATIONRAZE);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_OPERATIONRAZE, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Operationraze(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Operationraze(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_SetCurrentAnimation(155);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/atoperationraze/start/startbackoperation_02.ani", 0, 0, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/atoperationraze/start/startfront1_02.ani", 0, 0, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/atoperationraze/start/startfront2_01.ani", 0, 0, 0);
|
|
sq_CreateParticle("character/gunner/effect/particle/2_blaster/operationrazestart.ptl", obj, 0, 0, 0, true, 30, 0, 2);
|
|
local aniPath = "passiveobject/atgunner_bykk/2_blaster/animation/atoperationraze/startbottom_01.ani";
|
|
createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local delay = currentAni.getDelaySum(false);
|
|
obj.sq_SetXScrollStart(400, delay);
|
|
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(156);
|
|
break;
|
|
case 2:
|
|
obj.sq_SetCurrentAnimation(157);
|
|
break;
|
|
case 3:
|
|
obj.sq_SetCurrentAnimation(158);
|
|
obj.setTimeEvent(1, 1200, 1, false);
|
|
obj.setTimeEvent(2, 80, -1, false);
|
|
obj.setTimeEvent(3, 80, -1, false);
|
|
obj.setTimeEvent(4, 500, 2, true);
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
}
|
|
|
|
function onEndCurrentAni_Operationraze(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
case 1:
|
|
case 2:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(subState + 1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_OPERATIONRAZE, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Operationraze(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_Operationraze(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 1000:
|
|
obj.sq_PlaySound("FG_OPERATION_RAZE_01");
|
|
obj.sq_PlaySound("OPERATION_RAZE_CAST");
|
|
break;
|
|
case 1002: sq_SetMyShake(obj, 10, 500); break;
|
|
case 1://激光
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_OPERATIONRAZE, -1, 1, 1.0) + 100;
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),2,SKILL_BYKK_OPERATIONRAZE,1,totalDamage,0,0,0,0,0,0,0);
|
|
break;
|
|
case 2001://小激光
|
|
// sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/2_blaster/atoperationraze/operation/workoperationlightning_04.ani", 0, 0, 0);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_OPERATIONRAZE, -1, 1, 1.0) + 100;
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,obj.getDirection(),2,SKILL_BYKK_OPERATIONRAZE,2,totalDamage,0,0,0,0,0,0,0);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Operationraze(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 1:
|
|
sq_CreateParticle("character/gunner/effect/particle/2_blaster/operationrazedestroy.ptl", obj, 0, 0, 0, true, 30, 0, 2);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_OPERATIONRAZE, -1, 3, 1.0) + 100;
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,200,0,500,obj.getDirection(),2,SKILL_BYKK_OPERATIONRAZE,6,totalDamage,0,0,0,0,0,0,0);
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,450,0,500,obj.getDirection(),2,SKILL_BYKK_OPERATIONRAZE,6,totalDamage,0,0,0,0,0,0,0);
|
|
break;
|
|
case 2:
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_OPERATIONRAZE, -1, 2, 1.0) + 100;
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,88,0,35,obj.getDirection(),2,SKILL_BYKK_OPERATIONRAZE,3,totalDamage,0,0,0,0,0,0,0);
|
|
break;
|
|
case 3:
|
|
sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/2_blaster/animation/atoperationraze/bullet02.ani", 0, 0, -15);
|
|
sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/2_blaster/animation/atoperationraze/bullet02.ani", 0, 0, 5);
|
|
sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atgunner_bykk/2_blaster/animation/atoperationraze/bullet01.ani", 0, 0, 0);
|
|
break;
|
|
case 4:
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_OPERATIONRAZE, -1, 2, 1.0) + 100;
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,-40,0,90,obj.getDirection(),2,SKILL_BYKK_OPERATIONRAZE,4,totalDamage,0,0,0,0,0,0,0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Operationraze(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
if(new_state != STATE_BYKK_OPERATIONRAZE){
|
|
obj.sq_SetXScrollStop(0);
|
|
}
|
|
}
|
|
|
|
|
|
//UHT-03爆炎喷火器
|
|
function checkExecutableSkill_Phlegethon(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PHLEGETHON);
|
|
if (isUse){
|
|
obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_PHLEGETHON);
|
|
obj.getVar("phlegethon_att").clear_obj_vector();
|
|
obj.getVar("phlegethon_bool").setBool(0, true);
|
|
obj.getVar("phlegethon_sub").setInt(10, 0);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PHLEGETHON, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Phlegethon(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Phlegethon(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_SetCurrentAnimation(161);
|
|
obj.sq_PlaySound("R_FG_PHLEGETHON_01");
|
|
obj.sq_PlaySound("PHLEGETHON_CAST");
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(160);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_PANDORA_01) > 0) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atpandora01/lv95pandora01_05.ani"), 50, 0);
|
|
if(obj.isMyControlObject()) obj.sq_SetXScrollStart(250, 200);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PHLEGETHON, -1, 0, 1.0);
|
|
local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLAMETHROWER, -1, 4, 1.0) + 100;
|
|
local totalDamage3 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLAMETHROWERBOOST, -1, 4, 1.0) + 100;
|
|
local hitTime = sq_GetIntData(obj, SKILL_BYKK_PHLEGETHON, 1);
|
|
local sub = obj.getVar("phlegethon_sub").getInt(10);
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,1,0,obj.getDirection(),2,SKILL_BYKK_PHLEGETHON,1,totalDamage,totalDamage2,totalDamage3,hitTime,sub,0,0,0);
|
|
local lifeTime = sq_GetIntData(obj, SKILL_BYKK_PHLEGETHON, 0) + 1000;
|
|
obj.setTimeEvent(1, lifeTime, 1, false);
|
|
if(obj.getVar("phlegethon_bool").getBool(0) == false){
|
|
obj.sq_AddStateLayerAnimation(-10001,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atphlegethon/boostloopback_00.ani"), 0, 0);
|
|
obj.sq_AddStateLayerAnimation(-10000,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atphlegethon/phlegethonloopback_00.ani"), 0, 0);
|
|
obj.sq_PlaySound("R_FG_PHLEGETHON_02");
|
|
obj.sq_PlaySound("PHLEGETHON_FIRE_EX");
|
|
}
|
|
local moveRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PHLEGETHON, -1, 1, 1.0) + 100;
|
|
local speed = (8.0 / moveRate.tofloat() * 1000.0).tointeger();
|
|
obj.setTimeEvent(2, speed, -1, false);
|
|
break;
|
|
case 2:
|
|
obj.removeAllTimeEvent();
|
|
obj.sq_SetCurrentAnimation(159);
|
|
obj.sq_SetXScrollStop(200);
|
|
if(obj.getVar("phlegethon_bool").getBool(0) == false){
|
|
obj.sq_AddStateLayerAnimation(-10001,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atphlegethon/boostendback_00.ani"), 0, 0);
|
|
obj.sq_AddStateLayerAnimation(-10001,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atphlegethon/phlegethonendback_01.ani"), 0, 0);
|
|
obj.sq_PlaySound("PHLEGETHON_FIRE_EX_END");
|
|
}
|
|
else obj.sq_PlaySound("PHLEGETHON_FIRE_END");
|
|
//[OFFSET] `create bottom` 350 0 0
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,350,0,0,obj.getDirection(),2,SKILL_BYKK_PHLEGETHON,2,0,0,0,0,0,0,0,0);
|
|
local attackObj = obj.getVar("phlegethon_att").get_obj_vector(0);
|
|
if(attackObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(attackObj);
|
|
if(colObj.getState() != 22){
|
|
colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
}
|
|
|
|
function onEndCurrentAni_Phlegethon(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PHLEGETHON, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
break;
|
|
case 2:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Phlegethon(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
if(obj.getVar("phlegethon_bool").getBool(0)){
|
|
if(sq_GetIntData(obj, SKILL_BYKK_PHLEGETHON, 4) > 0){
|
|
obj.getVar("phlegethon_bool").setBool(0, false);
|
|
obj.getVar("phlegethon_sub").setInt(10, 3);
|
|
break;
|
|
}
|
|
local skill = sq_GetSkill(obj, SKILL_BYKK_FLAMETHROWER);
|
|
local skill2 = sq_GetSkill(obj, SKILL_BYKK_FLAMETHROWERBOOST);
|
|
if(skill && !skill.isInCoolTime()){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_FLAMETHROWER,true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_FLAMETHROWER);
|
|
if(b_useskill != -1){
|
|
obj.getVar("phlegethon_bool").setBool(0, false);
|
|
obj.startSkillCoolTime(SKILL_BYKK_FLAMETHROWER, sq_GetSkillLevel(obj, SKILL_BYKK_FLAMETHROWER), -1);
|
|
obj.getVar("phlegethon_sub").setInt(10, 1);
|
|
}
|
|
}
|
|
if(skill2 && !skill2.isInCoolTime()){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_FLAMETHROWERBOOST,true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_FLAMETHROWERBOOST);
|
|
if(b_useskill != -1){
|
|
obj.getVar("phlegethon_bool").setBool(0, false);
|
|
obj.startSkillCoolTime(SKILL_BYKK_FLAMETHROWERBOOST, sq_GetSkillLevel(obj, SKILL_BYKK_FLAMETHROWERBOOST), -1);
|
|
obj.getVar("phlegethon_sub").setInt(10, 2);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 1:
|
|
local bDownKey = obj.isDownSkillLastKey();
|
|
if(!bDownKey){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(2);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PHLEGETHON, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
}
|
|
// if(obj.getVar("phlegethon_bool").getBool(0)){
|
|
// local skill = sq_GetSkill(obj, SKILL_BYKK_FLAMETHROWER);
|
|
// if(skill && !skill.isInCoolTime()){
|
|
// obj.setSkillCommandEnable(SKILL_BYKK_FLAMETHROWER,true);
|
|
// local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_FLAMETHROWER);
|
|
// if(b_useskill != -1){
|
|
// obj.getVar("phlegethon_bool").setBool(0, false);
|
|
// obj.startSkillCoolTime(SKILL_BYKK_FLAMETHROWER, sq_GetSkillLevel(obj, SKILL_BYKK_FLAMETHROWER), -1);
|
|
// obj.sq_AddStateLayerAnimation(-10001,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atphlegethon/boostloopback_00.ani"), 0, 0);
|
|
// obj.sq_AddStateLayerAnimation(-10000,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atphlegethon/phlegethonloopback_00.ani"), 0, 0);
|
|
// obj.sq_PlaySound("R_FG_PHLEGETHON_02");
|
|
// obj.sq_PlaySound("PHLEGETHON_FIRE_EX");
|
|
// local attackObj = obj.getVar("phlegethon_att").get_obj_vector(0);
|
|
// if(attackObj){
|
|
// local colObj = sq_GetCNRDObjectToCollisionObject(attackObj);
|
|
// colObj.getVar("custom").setInt(13, 1);
|
|
// local state = colObj.getState();
|
|
// local totalDamage = colObj.getVar("custom").getInt(10) + colObj.getVar("custom").getInt(11);
|
|
// sq_SetCurrentAttackInfo(colObj, sq_GetCustomAttackInfo(colObj, 13));
|
|
// sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(colObj), totalDamage);
|
|
// colObj.addSetStatePacket(state, null, STATE_PRIORITY_AUTO, false, "");
|
|
// local hitTime = colObj.getVar("custom").getInt(14) / 5;
|
|
// colObj.stopTimeEvent(1);
|
|
// colObj.setTimeEvent(1, hitTime, -1 false);
|
|
// print("testt121");
|
|
// }
|
|
// }
|
|
// }
|
|
// skill = sq_GetSkill(obj, SKILL_BYKK_FLAMETHROWERBOOST);
|
|
// if(skill && !skill.isInCoolTime()){
|
|
// obj.setSkillCommandEnable(SKILL_BYKK_FLAMETHROWERBOOST,true);
|
|
// local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_FLAMETHROWERBOOST);
|
|
// if(b_useskill != -1){
|
|
// obj.getVar("phlegethon_bool").setBool(0, false);
|
|
// obj.startSkillCoolTime(SKILL_BYKK_FLAMETHROWERBOOST, sq_GetSkillLevel(obj, SKILL_BYKK_FLAMETHROWERBOOST), -1);
|
|
// obj.sq_AddStateLayerAnimation(-10001,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atphlegethon/boostloopback_00.ani"), 0, 0);
|
|
// obj.sq_AddStateLayerAnimation(-10000,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atphlegethon/phlegethonloopback_00.ani"), 0, 0);
|
|
// obj.sq_PlaySound("R_FG_PHLEGETHON_02");
|
|
// obj.sq_PlaySound("PHLEGETHON_FIRE_EX");
|
|
// local attackObj = obj.getVar("phlegethon_att").get_obj_vector(0);
|
|
// if(attackObj){
|
|
// local colObj = sq_GetCNRDObjectToCollisionObject(attackObj);
|
|
// colObj.getVar("custom").setInt(13, 2);
|
|
// local state = colObj.getState();
|
|
// local totalDamage = colObj.getVar("custom").getInt(10) + colObj.getVar("custom").getInt(12);
|
|
// sq_SetCurrentAttackInfo(colObj, sq_GetCustomAttackInfo(colObj, 13));
|
|
// sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(colObj), totalDamage);
|
|
// colObj.addSetStatePacket(state, null, STATE_PRIORITY_AUTO, false, "");
|
|
// local hitTime = colObj.getVar("custom").getInt(14) / 5;
|
|
// colObj.stopTimeEvent(1);
|
|
// colObj.setTimeEvent(1, hitTime, -1 false);
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Phlegethon(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
// case 200: sq_SetMyShake(obj, 1, 20);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Phlegethon(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(2);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PHLEGETHON, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 2:
|
|
local xpos = sq_GetXPos(obj), ypos = sq_GetYPos(obj);
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos,ypos - 1)) sq_setCurrentAxisPos(obj, 1, ypos - 1);
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos - 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 1);
|
|
return;
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos + 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 1);
|
|
return;
|
|
}
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos,ypos + 1)) sq_setCurrentAxisPos(obj, 1, ypos + 1);
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos - 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 1);
|
|
return;
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos + 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 1);
|
|
return;
|
|
}
|
|
}
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos - 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 1);
|
|
return;
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos + 1,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 1);
|
|
return;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Phlegethon(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
if(new_state != STATE_BYKK_PHLEGETHON){
|
|
local attackObj = obj.getVar("phlegethon_att").get_obj_vector(0);
|
|
if(attackObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(attackObj);
|
|
if(colObj.getState() != 22){
|
|
colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
|
|
}
|
|
}
|
|
obj.sq_SetXScrollStop(200);
|
|
}
|
|
}
|
|
|
|
function getScrollBasisPos_Phlegethon(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
if (obj.isMyControlObject() && subState == 1){
|
|
local destX = sq_GetDistancePos(obj.getXPos(), obj.getDirection(), 250);
|
|
obj.sq_SetCameraScrollPosition(destX, obj.getYPos(), 0);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
//X-1
|
|
function checkExecutableSkill_Extruder(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(71);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(71, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Extruder(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Extruder(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_SetCurrentAnimation(145);
|
|
obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atextruder/bodyready1.ani"), 0, 0);
|
|
obj.sq_AddStateLayerAnimation(10002,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atextruder/bodyready2.ani"), 0, 0);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_HITONSUBWEAPON) > 0) setHitonSubweapon_bykk(obj);
|
|
// obj.sq_AddStateLayerAnimation(10003,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atextruder/glowready.ani"), 0, 0);
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(146);
|
|
obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atextruder/bodyshoot1.ani"), 0, 0);
|
|
obj.sq_AddStateLayerAnimation(10002,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atextruder/bodyshoot2.ani"), 0, 0);
|
|
// obj.sq_AddStateLayerAnimation(10003,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atextruder/glowshoot1.ani"), 0, 0);
|
|
// obj.sq_AddStateLayerAnimation(10004,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atextruder/glowshoot2.ani"), 0, 0);
|
|
// obj.sq_AddStateLayerAnimation(10005,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atextruder/glowshoot3.ani"), 0, 0);
|
|
// obj.sq_AddStateLayerAnimation(10006,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atextruder/glowshoot4.ani"), 0, 0);
|
|
// obj.sq_AddStateLayerAnimation(10007,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atextruder/glowshoot5.ani"), 0, 0);
|
|
// obj.sq_AddStateLayerAnimation(10008,obj.sq_CreateCNRDAnimation("effect/animation/2_blaster/atextruder/glowshoot6.ani"), 0, 0);
|
|
local power = obj.sq_GetPowerWithPassive(71, -1, 1, -1, 1.0);
|
|
local sizeRate = sq_GetIntData(obj, 71, 9);
|
|
local range = sq_GetIntData(obj, 71, 10);
|
|
local subpower = sq_GetIntData(obj, 71, 11);
|
|
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,120,0,65,obj.getDirection(),2,71,1,power,sizeRate,range,subpower,0,0,0,0);
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
}
|
|
|
|
function onEndCurrentAni_Extruder(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(71, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Extruder(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_Extruder(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Extruder(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
}
|
|
|
|
function onEndState_Extruder(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|