///////////////////////////////////////////////////////////////////////////////////////////////////////// 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; }