Rindro-Sqr/user/114.66.45.221/1_atgunner_5.c

3757 lines
134 KiB
C

//多重爆头
function checkExecutableSkill_MultiHeadShot(obj)
{
if (!obj) return false;
if(obj.getWeaponSubType() == 3) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_MULTIHEADSHOT);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_MULTIHEADSHOT, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_MultiHeadShot(obj)
{
if (!obj) return false;
if(obj.getWeaponSubType() == 3) return false;
return true;
}
function onSetState_MultiHeadShot_bykk(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(ATANI_BYKK_MULTIHEADSHOTREADY);
obj.sq_PlaySound("FG_MULTIHEAD_READY");
obj.getVar("MultiHeadShotSet").setInt(0, 2);
obj.getVar("MultiHeadShotCount").setInt(0, 0);
break;
case 1: obj.sq_SetCurrentAnimation(ATANI_BYKK_MULTIHEADSHOTSHOOT1); break;//左
case 2: obj.sq_SetCurrentAnimation(ATANI_BYKK_MULTIHEADSHOTSHOOT2); break;//右
case 3: obj.sq_SetCurrentAnimation(ATANI_BYKK_MULTIHEADSHOTSHOOT3); break;//上
case 4: obj.sq_SetCurrentAnimation(ATANI_BYKK_MULTIHEADSHOTSHOOT4); break;//下
case 5: obj.sq_SetCurrentAnimation(ATANI_BYKK_MULTIHEADSHOTFINISH);obj.sq_PlaySound("FG_MULTIHEAD_FIN"); break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 2.0, 2.0);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_MULTIHEADSHOT, -1, 0, 1.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_MULTIHEADSHOTEXKICK));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local attackInfo = sq_GetCurrentAttackInfo(obj);
// local rateDamager = sq_GetAttackInfoHitDelayRateDamager(attackInfo);
local rateDamager = (obj.sq_GetBonusRateWithPassive(SKILL_BYKK_MULTIHEADSHOT, -1, 2, 1.0) + 100).tofloat() / 100.0;
sq_SetAttackInfoHitDelayRateDamager(attackInfo, rateDamager);
sq_SetCurrentAttacknUpForce(attackInfo, 10);
local aniPath = "character/gunner/effect/animation/multiheadshot/shoot.ani";
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_MULTIHEADSHOT, 1);
local direction = sq_GetDirection(obj), yPos = sq_GetYPos(obj);
switch(subState){
case 1:
local offsetX = sq_GetDistancePos(sq_GetXPos(obj), direction, -80);
local pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,direction,offsetX,yPos,90,ENUM_DRAWLAYER_NORMAL);
sq_SetCustomRotate(pooledObj, sq_ToRadian(180.0));
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,direction,1,SKILL_BYKK_MULTIHEADSHOT,1,subState,sizeRate,0,0,0,0,0,0);
break;//左
case 2:
local offsetX = sq_GetDistancePos(sq_GetXPos(obj), direction, 75);
local pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,direction,offsetX,yPos,100,ENUM_DRAWLAYER_NORMAL);
offsetX = sq_GetDistancePos(sq_GetXPos(obj), direction, 80);
pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,direction,offsetX,yPos,80,ENUM_DRAWLAYER_NORMAL);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,direction,1,SKILL_BYKK_MULTIHEADSHOT,1,subState,sizeRate,0,0,0,0,0,0);
break;//右
case 3:
local offsetX = sq_GetDistancePos(sq_GetXPos(obj), direction, -50);
local pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,direction,offsetX,yPos,125,ENUM_DRAWLAYER_NORMAL);
sq_SetCustomRotate(pooledObj, sq_ToRadian(155.0));
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,direction,1,SKILL_BYKK_MULTIHEADSHOT,1,subState,sizeRate,0,0,0,0,0,0);
break;//上
case 4:
local offsetX = sq_GetDistancePos(sq_GetXPos(obj), direction, 42);
local pooledObj = createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,direction,offsetX,yPos,48,ENUM_DRAWLAYER_NORMAL);
sq_SetCustomRotate(pooledObj, sq_ToRadian(-45.0));
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,direction,1,SKILL_BYKK_MULTIHEADSHOT,1,subState,sizeRate,0,0,0,0,0,0);
break;//下
}
}
function onEndCurrentAni_MultiHeadShot(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
local sub = obj.getVar("MultiHeadShotSet").getInt(0);
obj.sq_PlaySound("R_FG_MULTIHEAD");
obj.sq_IntVectClear();
obj.sq_IntVectPush(sub);
obj.sq_AddSetStatePacket(STATE_BYKK_MULTIHEADSHOT, STATE_PRIORITY_AUTO, true);
break;
case 1:
case 2:
case 3:
case 4:
obj.getVar("MultiHeadShotCount").setInt(0, obj.getVar("MultiHeadShotCount").getInt(0) + 1);
local sub = obj.getVar("MultiHeadShotSet").getInt(0);
local count = obj.getVar("MultiHeadShotCount").getInt(0);
local hitMax = sq_GetIntData(obj, SKILL_BYKK_MULTIHEADSHOT, 4);
obj.sq_IntVectClear();
if(count >= hitMax) obj.sq_IntVectPush(5);
else obj.sq_IntVectPush(sub);
obj.sq_AddSetStatePacket(STATE_BYKK_MULTIHEADSHOT, STATE_PRIORITY_AUTO, true);
break;
case 5:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_MultiHeadShot(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
case 2:
case 3:
case 4:
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
case 0:
local direction = sq_GetDirection(obj);
if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_LEFT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_RIGHT)){
obj.getVar("MultiHeadShotSet").setInt(0, 2);
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){
obj.getVar("MultiHeadShotSet").setInt(0, 3);
}
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){
obj.getVar("MultiHeadShotSet").setInt(0, 4);
}
}
else if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_LEFT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_RIGHT)){
obj.getVar("MultiHeadShotSet").setInt(0, 1);
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){
obj.getVar("MultiHeadShotSet").setInt(0, 3);
}
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){
obj.getVar("MultiHeadShotSet").setInt(0, 4);
}
}
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){
obj.getVar("MultiHeadShotSet").setInt(0, 3);
}
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){
obj.getVar("MultiHeadShotSet").setInt(0, 4);
}
break;
}
if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj);
}
function onKeyFrameFlag_MultiHeadShot(obj, flagIndex)
{
if(!obj) return false;
// print("flagIndex = "+flagIndex);
sq_SetMyShake(obj, 2, 120);
local attackInfo = sq_GetCurrentAttackInfo(obj);
local weaponSubType = obj.getWeaponSubType();
local loadSlot = obj.sq_GetSkillLoad(30);
if(loadSlot && loadSlot.getRemainLoadNumber() > 0){
loadSlot.decreaseLoadCount(1);
attackInfo.setElement(ENUM_ELEMENT_LIGHT);
local totalDamage = obj.sq_GetBonusRateWithPassive(30, -1, 1, 1.0) + 100;
obj.getVar("MultiHeadShot").setInt(0, totalDamage);
obj.sq_PlaySound("R_SILVER_SHOT");
}
else{
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_MULTIHEADSHOT, -1, 0, 1.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_MULTIHEADSHOTEXKICK));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
switch(weaponSubType){
case 0: obj.sq_PlaySound("G_WREVOLVERA"); break;//左轮
case 1: obj.sq_PlaySound("G_SMALLGUNA"); break;//自动
case 2: obj.sq_PlaySound("G_MUSKETA"); break;//步枪
case 3: obj.sq_PlaySound("G_HCANNONA"); break;//手炮
case 4: obj.sq_PlaySound("G_BOWGUNA"); break;//手弩
}
obj.getVar("MultiHeadShot").setInt(0, 0);
}
local range = sq_GetIntData(obj, SKILL_BYKK_MULTIHEADSHOT, 1) / 2;
local subState = obj.getSkillSubState();
local direction = sq_GetDirection(obj);
local minDegree = 0, maxDegree = 0;
switch(flagIndex){
case 102: minDegree = 135; maxDegree = -135; break;
case 202: minDegree = 45; maxDegree = -45; break;
case 302: minDegree = -45; maxDegree = -135; break;
case 402: minDegree = 45; maxDegree = 135; break;
}
local objectManager = obj.getObjectManager();
local objectNumber = objectManager.getCollisionObjectNumber();
for (local i = 0; i < objectNumber; i++){
local object = objectManager.getCollisionObject(i);
if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj)){
local activeObj = sq_GetCNRDObjectToActiveObject(object);
local disX = sq_GetXPos(activeObj) - sq_GetXPos(obj);
local disY = sq_GetYPos(activeObj) - sq_GetYPos(obj);
switch(subState){//1左2右3上4下
case 1:
if(((direction == ENUM_DIRECTION_RIGHT && disX < 0) || (direction == ENUM_DIRECTION_LEFT && disX > 0)) && sq_Abs(disX) <= range && sq_Abs(disY) <= range / 2 && sq_Abs(disY) <= sq_Abs(disX) / 2) sq_SendHitObjectPacket(obj,activeObj,0,0,sq_GetObjectHeight(activeObj) / 2);//print("disX = "+disX+",disY = "+disY+",test1");
break;
case 2:
if(((direction == ENUM_DIRECTION_RIGHT && disX > 0) || (direction == ENUM_DIRECTION_LEFT && disX < 0)) && sq_Abs(disX) <= range && sq_Abs(disY) <= range / 2 && sq_Abs(disY) <= sq_Abs(disX) / 2) sq_SendHitObjectPacket(obj,activeObj,0,0,sq_GetObjectHeight(activeObj) / 2);//print("disX = "+disX+",disY = "+disY+",test2");
break;
case 3:
if(disY < 0 && sq_Abs(disX) <= range && sq_Abs(disY) <= range / 2 && sq_Abs(disX) <= sq_Abs(disY) * 2) sq_SendHitObjectPacket(obj,activeObj,0,0,sq_GetObjectHeight(activeObj) / 2);//print("test3");
break;
case 4:
if(disY > 0 && sq_Abs(disX) <= range && sq_Abs(disY) <= range / 2 && sq_Abs(disX) <= sq_Abs(disY) * 2) sq_SendHitObjectPacket(obj,activeObj,0,0,sq_GetObjectHeight(activeObj) / 2);//print("test4");
break;
}
local isSilver = obj.getVar("MultiHeadShot").getInt(0);
if(isSilver > 0){
local group = sq_GetGroup(activeObj);
local uniqueId = sq_GetUniqueId(activeObj);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_HEADSHOT,3,isSilver,group,uniqueId,0,0,0,0,0);
}
}
}
return true;
}
function onTimeEvent_MultiHeadShot(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_MultiHeadShot(obj, new_state)
{
if(!obj) return;
}
function onAttack_MultiHeadShot(obj, damager, boundingBox, isStuck)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
case 2:
case 3:
case 4:
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
local aniPath = "character/gunner/effect/animation/headshotmonsterdown.ani";
createOnlyDrawObject_ATGunner_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(damager),sq_GetYPos(damager),sq_GetCenterZPos(boundingBox),ENUM_DRAWLAYER_NORMAL);
}
break;
}
}
//双鹰回旋
function checkExecutableSkill_DoubleGunhawk(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DOUBLEGUNHAWK);
if (isUse){
obj.getVar("DoubleGunhawk_Phase").setInt(0, 1);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_DOUBLEGUNHAWK, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_DoubleGunhawk(obj)
{
if (!obj) return false;
return true;
}
function onSetState_DoubleGunhawk(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.removeAllTimeEvent();
obj.sq_SetCurrentAnimation(ATANI_BYKK_DOUBLEGUNHAWKTHROW);
switch(obj.getVar("DoubleGunhawk_Phase").getInt(0)){
case 1: obj.sq_PlaySound("FG_DGUNHAWK_FIRST"); break;
case 2: obj.sq_PlaySound("FG_DGUNHAWK_SEC"); break;
case 3: obj.sq_PlaySound("FG_DGUNHAWK_THIRD"); break;
}
if(sq_GetSkillLevel(obj, SKILL_BYKK_SAWBLADE) > 0){
switch(obj.getVar("DoubleGunhawk_Phase").getInt(0)){
case 1:
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/gunhawk1.ani"), 0, 0);
break;
case 2:
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/gunhawk1.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/gunhawk2.ani"), 0, 0);
break;
case 3:
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/gunhawk1.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/gunhawk2.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/gunhawk3.ani"), 0, 0);
break;
}
}
sq_AddDrawOnlyAniFromParent(obj, "character/gunner/effect/animation/doublegunhawk/throw.ani", 0, 0, -35);
break;
case 1:
obj.sq_SetCurrentAnimation(ATANI_BYKK_DOUBLEGUNHAWKCATCH);
obj.getVar("DoubleGunhawk_Bool").setBool(0, true);
if(obj.isMyControlObject()) sq_flashScreen(obj,80,30,50,205, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER);
obj.setTimeEvent(1, 80, 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_DoubleGunhawk(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_DoubleGunhawk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
if(obj.getVar("DoubleGunhawk_Bool").getBool(0)){
if(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("DoubleGunhawk_Bool").setBool(0, false);
sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj)));
}
}
obj.setSkillCommandEnable(SKILL_BYKK_DOUBLEGUNHAWK, true);
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_DOUBLEGUNHAWK);
if(b_useskill != -1 || sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_DOUBLEGUNHAWK, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
break;
}
if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj);
}
function onKeyFrameFlag_DoubleGunhawk(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 101:
obj.sq_PlaySound("GUNHAWK_SHOT");
obj.sq_PlaySound("GUNHAWK_GUN");
local phase = obj.getVar("DoubleGunhawk_Phase").getInt(0);
local isSaw = 0;
if(sq_GetSkillLevel(obj, SKILL_BYKK_SAWBLADE) > 0){
isSaw = 1;
switch(phase){
case 1: obj.sq_PlaySound("CHAIN_POWDER_DGUNHAWK_01");obj.sq_PlaySound("GUNHAWK_12"); break;
case 2: obj.sq_PlaySound("CHAIN_POWDER_DGUNHAWK_02");obj.sq_PlaySound("GUNHAWK_12"); break;
case 3: obj.sq_PlaySound("CHAIN_POWDER_DGUNHAWK_03");obj.sq_PlaySound("GUNHAWK_3"); break;
}
}
local sub = 0;
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) sub = 1;
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) sub = 2;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DOUBLEGUNHAWK, -1, 0, 1.0) + 100;
if(phase == 1){totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DOUBLEGUNHAWK, -1, 1, 1.0) + 100;}
else if(phase == 2){totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DOUBLEGUNHAWK, -1, 2, 1.0) + 100;}
local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DOUBLEGUNHAWK, -1, 4, 1.0) + 100;
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,70,10,105,sq_GetDirection(obj),1,SKILL_BYKK_DOUBLEGUNHAWK,1,totalDamage,sizeRate,sub,isSaw,phase,0,0,0);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,70,-10,85,sq_GetDirection(obj),1,SKILL_BYKK_DOUBLEGUNHAWK,1,totalDamage,sizeRate,sub,isSaw,phase,1,0,0);
break;
}
return true;
}
function onTimeEvent_DoubleGunhawk(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 1:
obj.getVar("move").setInt(0, sq_GetXPos(obj));
obj.setTimeEvent(2, 10, 10, true);
sq_SetMyShake(obj, 10, 100);
break;
case 2:
local v = sq_GetAccel(0, 10, timeEventCount, 10, true);
local dstX = sq_GetDistancePos(obj.getVar("move").getInt(0), obj.getDirection(), -v);
sq_setCurrentAxisPos(obj, 0, dstX);
break;
}
}
function onEndState_DoubleGunhawk(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_BYKK_DOUBLEGUNHAWK){
sq_SimpleMoveToNearMovablePos(obj,200);
}
}
//血腥狂欢
function checkExecutableSkill_BloodyCarnival(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BLOODYCARNIVAL);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_BLOODYCARNIVAL, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_BloodyCarnival(obj)
{
if (!obj) return false;
return true;
}
function onSetState_BloodyCarnival(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(91);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishstart1.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishstart2.ani"), 0, 0);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLOODYCARNIVAL);
local minCount = sq_GetLevelData(obj, SKILL_BYKK_BLOODYCARNIVAL, 3, skillLevel);
local maxCount = sq_GetLevelData(obj, SKILL_BYKK_BLOODYCARNIVAL, 4, skillLevel);
local hitMax = sq_GetLevelData(obj, SKILL_BYKK_BLOODYCARNIVAL, 5, skillLevel);
obj.getVar("BloodyCarnival").setInt(0, minCount);
obj.getVar("BloodyCarnival").setInt(1, maxCount);
obj.getVar("BloodyCarnival").setInt(2, hitMax);
obj.getVar("BloodyCarnival").setInt(3, 0);
obj.getVar("BloodyCarnival").setInt(4, sq_GetXPos(obj));
obj.getVar("BloodyCarnival_Bool").setBool(0, true);
obj.getVar("BloodyCarnival_Bool").setBool(1, false);
if(sq_GetSkillLevel(obj, SKILL_BYKK_BLOODYCARNIVAL) >= 9) sq_SendMessage(obj, 0, 1, 0);
break;
case 1:
obj.sq_SetCurrentAnimation(92);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishrapid1.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishrapid2.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishrapid3.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(4,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishrapid4.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(5,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishrapid5.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(6,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishrapideffect1.ani"), 100, -150);
obj.sq_AddStateLayerAnimation(7,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishrapideffect2.ani"), 100, -150);
obj.sq_AddStateLayerAnimation(8,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishrapideffect3.ani"), 100, -150);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local bonusRate = 1.0;
if(sq_GetSkillLevel(obj, SKILL_BYKK_BLOODYCARNIVAL) >= 3) bonusRate = bonusRate + 0.1;
if(sq_GetSkillLevel(obj, SKILL_BYKK_BLOODYCARNIVAL) >= 9) bonusRate = bonusRate + 0.1;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLOODYCARNIVAL, -1, 0, bonusRate);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_TWINGUNBLADEFINISHRAPID));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(false);
obj.setTimeEvent(0, delay / (obj.getVar("BloodyCarnival").getInt(2) + 1), obj.getVar("BloodyCarnival").getInt(2), true);
sq_SetMyShake(obj, 1, delay);
break;
case 2:
obj.sq_SetCurrentAnimation(93);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishfinal1.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishfinal2.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishfinal3.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(4,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishfinal4.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(5,obj.sq_CreateCNRDAnimation("effect/animation/attwingunblade/finishfinal5.ani"), 0, 0);
local currentAni = obj.getCurrentAnimation();
sq_SetFrameDelayTime(currentAni, 6, 20);
sq_SetFrameDelayTime(currentAni, 7, 20);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
sq_flashScreen(obj,20,150,120,150, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
local bonusRate = 1.0;
if(sq_GetSkillLevel(obj, SKILL_BYKK_BLOODYCARNIVAL) >= 6) bonusRate = bonusRate + 0.1;
if(sq_GetSkillLevel(obj, SKILL_BYKK_BLOODYCARNIVAL) >= 9) bonusRate = bonusRate + 0.1;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLOODYCARNIVAL, -1, 1, 1.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_TWINGUNBLADEFINISHFINAL));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(0, 0);
obj.setTimeEvent(1, delay, 1, false);
obj.stopSound(2000);
obj.stopSound(2001);
obj.sq_PlaySound("FG_TWINGUN_SWORD_FIN");
break;
}
}
function onEndCurrentAni_BloodyCarnival(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_PlaySound("R_FG_TWINGUN_SWORD", 2000);
obj.sq_PlaySound("TWINGUN_SWORD", 2001);
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_BLOODYCARNIVAL, STATE_PRIORITY_AUTO, true);
break;
case 1:
if(obj.getRapidInputFrequency() > 0){
if(obj.getVar("BloodyCarnival").getInt(3) + 1 >= obj.getVar("BloodyCarnival").getInt(2)){
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(STATE_BYKK_BLOODYCARNIVAL, STATE_PRIORITY_AUTO, true);
break;
}
else{
obj.getVar("BloodyCarnival").setInt(3, obj.getVar("BloodyCarnival").getInt(3) + 1);
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_BLOODYCARNIVAL, STATE_PRIORITY_AUTO, true);
break;
}
}
else{
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(STATE_BYKK_BLOODYCARNIVAL, STATE_PRIORITY_AUTO, true);
break;
}
break;
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_BloodyCarnival(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
if(obj.getVar("BloodyCarnival_Bool").getBool(0)){
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT){
obj.getVar("BloodyCarnival_Bool").setBool(0, false);
obj.getVar("BloodyCarnival_Bool").setBool(1, true);
}
}
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput();
break;
}
if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj);
}
function onKeyFrameFlag_BloodyCarnival(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 301:
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(1, 2);
obj.getVar("BloodyCarnival").setInt(4, sq_GetXPos(obj));
obj.setTimeEvent(1, delay / 10, 10, true);
break;
}
return true;
}
function onTimeEvent_BloodyCarnival(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 0: obj.resetHitObjectList(); break;
case 1:
sq_SetMyShake(obj, 10, 300);
local aniPath = "character/gunner/effect/animation/attwingunblade/finishfinaleffect.ani";
local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj);
createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath,true,direction,xPos,yPos,75,ENUM_DRAWLAYER_COVER,130,130);
createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath,true,direction,xPos,yPos,75,ENUM_DRAWLAYER_COVER,-130,130);
createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath,true,direction,xPos,yPos,75,ENUM_DRAWLAYER_COVER,130,-130);
createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath,true,direction,xPos,yPos,75,ENUM_DRAWLAYER_COVER,-130,-130);
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(1, 3);
obj.setTimeEvent(2, delay / 10, 10, true);
break;
case 2:
local MoveX = 50;
if(obj.getVar("BloodyCarnival_Bool").getBool(1)) MoveX = 150;
local v = sq_GetAccel(0, MoveX, timeEventCount, 10, true);
local dstX = sq_GetDistancePos(obj.getVar("BloodyCarnival").getInt(4), obj.getDirection(), v);
if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);
break;
}
}
function onEndState_BloodyCarnival(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_BYKK_BLOODYCARNIVAL){
sq_SendMessage(obj, 0, 0, 0);
}
}
//鲜血劫击
function checkExecutableSkill_AirRaidEx(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_AIRRAIDEX);
if (isUse){
obj.sq_IntVectClear();
if(sq_GetIntData(obj, SKILL_BYKK_AIRRAIDEX, 6) > 0){
if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(11);
else obj.sq_IntVectPush(10);
}
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_AIRRAIDEX, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_AirRaidEx(obj)
{
if (!obj) return false;
return true;
}
function onSetState_AirRaidEx(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
obj.sq_ZStop();
switch(subState){
case 0: obj.sq_SetCurrentAnimation(ATANI_BYKK_BLOODYSPIKEUP); break;//225 100
case 1: obj.sq_SetCurrentAnimation(ATANI_BYKK_BLOODYSPIKEDOWN); break;
case 10: obj.sq_SetCurrentAnimation(ATANI_BYKK_BLOODYSPIKEBACKSTEP_TALISMAN);obj.sq_PlaySound("R_FG_SONIC_SPIKE"); break;
case 11: obj.sq_SetCurrentAnimation(ATANI_BYKK_BLOODYSPIKEDOWN_TALISMAN); break;
case 12: obj.sq_SetCurrentAnimation(ATANI_BYKK_BLOODYSPIKELANDING_TALISMAN); break;
}
local speed = 1.0;
if(subState >= 10) speed = 1.5;
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed);
switch(subState){
case 0:
obj.getVar("AirRaidEx_Bool").setBool(0, false);
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(false);
obj.getVar("airRaidEx_move").setInt(0, sq_GetXPos(obj));
obj.getVar("airRaidEx_move").setInt(1, sq_GetZPos(obj));
obj.setTimeEvent(1, delay / 50, 35, true);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AIRRAIDEX, -1, 2, 1.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_AIRRAIDEX));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
case 1:
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(0, 7);
obj.getVar("airRaidEx_move").setInt(1, sq_GetZPos(obj));
obj.setTimeEvent(2, delay / 50, 35, true);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AIRRAIDEX, -1, 12, 1.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_ATAIRRAID));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
case 10:
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(false);
obj.getVar("airRaidEx_move").setInt(0, sq_GetXPos(obj));
obj.getVar("airRaidEx_move").setInt(1, sq_GetZPos(obj));
obj.setTimeEvent(3, delay / 20, 20, true);
obj.sq_SetXScroll(0, delay, 0, 0);
break;
case 11:
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(false);
obj.getVar("airRaidEx_move").setInt(0, sq_GetXPos(obj));
obj.getVar("airRaidEx_move").setInt(1, sq_GetZPos(obj));
obj.setTimeEvent(4, delay / 35, 35, true);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AIRRAIDEX, -1, 2, 2.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_ATAIRRAID));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
}
}
function onEndCurrentAni_AirRaidEx(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(obj.getVar("AirRaidEx_Bool").getBool(0)){
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(STATE_BYKK_AIRRAIDEX, STATE_PRIORITY_AUTO, true);
break;
}
sq_SimpleMoveToNearMovablePos(obj, 225);
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(200);
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true);
break;
case 10:
case 11:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(STATE_BYKK_AIRRAIDEX, STATE_PRIORITY_AUTO, true);
break;
case 1:
case 12:
sq_SimpleMoveToNearMovablePos(obj, 225);
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_AirRaidEx(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(obj.getVar("AirRaidEx_Bool").getBool(0)) break;
obj.setSkillCommandEnable(SKILL_BYKK_AIRRAIDEX, true);
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_AIRRAIDEX);
if(b_useskill != -1 || sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){
obj.getVar("AirRaidEx_Bool").setBool(0, true);
}
break;
}
if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0 && sq_GetZPos(obj) <= 0) proc_atStylish_bykk(obj);
}
function onKeyFrameFlag_AirRaidEx(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_AirRaidEx(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 1:
local vx = sq_GetAccel(0, 225, timeEventCount, 35, true);
local vz = sq_GetAccel(0, 100, timeEventCount, 35, true);
local dstX = sq_GetDistancePos(obj.getVar("airRaidEx_move").getInt(0), obj.getDirection(), vx);
sq_setCurrentAxisPos(obj, 0, dstX);
sq_setCurrentAxisPos(obj, 2, obj.getVar("airRaidEx_move").getInt(1) + vz);
break;
case 2:
local vz = sq_GetAccel(obj.getVar("airRaidEx_move").getInt(1), 0, timeEventCount, 35, false);
sq_setCurrentAxisPos(obj, 2, vz);
break;
case 3:
local vx = sq_GetUniformVelocity(0, -75, timeEventCount, 15);
local vz = sq_GetUniformVelocity(0, 100, timeEventCount, 15);
local dstX = sq_GetDistancePos(obj.getVar("airRaidEx_move").getInt(0), obj.getDirection(), vx);
sq_setCurrentAxisPos(obj, 0, dstX);
sq_setCurrentAxisPos(obj, 2, obj.getVar("airRaidEx_move").getInt(1) + vz);
break;
case 4:
local vx = sq_GetUniformVelocity(0, 75 + 100, timeEventCount, 30);
local vz = sq_GetUniformVelocity(obj.getVar("airRaidEx_move").getInt(1), 0, timeEventCount, 30);
local dstX = sq_GetDistancePos(obj.getVar("airRaidEx_move").getInt(0), obj.getDirection(), vx);
sq_setCurrentAxisPos(obj, 0, dstX);
sq_setCurrentAxisPos(obj, 2, vz);
break;
}
}
function onEndState_AirRaidEx(obj, new_state)
{
if(!obj) return;
}
//压制射击
function checkExecutableSkill_SuppressingFire(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SUPPRESSINGFIRE);
if (isUse){
obj.getVar("SuppressingFireTar").clear_obj_vector();
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_SUPPRESSINGFIRE, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_SuppressingFire(obj)
{
if (!obj) return false;
return true;
}
function onSetState_SuppressingFire(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(ATANI_BYKK_ATSUPPRESSINGFIRE_START_BODY);obj.sq_PlaySound("R_FG_SPGUN"); break;
case 1: obj.sq_SetCurrentAnimation(ATANI_BYKK_ATSUPPRESSINGFIRE_LOOP_BODY); break;
case 2: obj.sq_SetCurrentAnimation(ATANI_BYKK_ATSUPPRESSINGFIRE_FINISH_BODY); break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
if(subState == 0){
local currentAni = obj.getCurrentAnimation();
local speedRate = 8000 / currentAni.getDelaySum(0, 0);
obj.getVar("SuppressingFireSet").setInt(0, speedRate);
}
else if(subState == 1){
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_SUPPRESSINGFIRE, 7);
local hitTime_min = sq_GetIntData(obj, SKILL_BYKK_SUPPRESSINGFIRE, 2) * 100 / obj.getVar("SuppressingFireSet").getInt(0);
local hitTime_max = sq_GetIntData(obj, SKILL_BYKK_SUPPRESSINGFIRE, 3) * 100 / obj.getVar("SuppressingFireSet").getInt(0);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SUPPRESSINGFIRE, -1, 0, 1.0) + 100;
local currentAni = obj.getCurrentAnimation();
local speedRate = 8000 / currentAni.getDelaySum(0, 0);
local istalisman = 0;
if(sq_GetIntData(obj, SKILL_BYKK_SUPPRESSINGFIRE, 14) > 0){
istalisman = 1;
local damage = totalDamage * 37 / 100;
local hitMax = 10;
sizeRate = sizeRate * 130 / 100;
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_SUPPRESSINGFIRE,3,totalDamage,sizeRate,hitTime_min,hitTime_max,speedRate,hitMax,0,0);
local appendage = sq_AttractToMe(obj, 250, 350 * speedRate / 100, 100);
obj.getVar("SuppressingFire").setAppendage(0,appendage);
}
print("totalDamage = "+totalDamage);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_SUPPRESSINGFIRE,1,totalDamage,sizeRate,hitTime_min,hitTime_max,speedRate,0,0,0);
}
else if(subState == 2){
local speedRate = obj.getVar("SuppressingFireSet").getInt(0);
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_SUPPRESSINGFIRE, 7);
local aniPath = ["character/gunner/effect/animation/1_ranger/atsuppressingfire/03_finish/front/suppressingfire_finish_front.ani", "character/gunner/effect/animation/1_ranger/atsuppressingfire/03_finish/back/suppressingfire_finish_back.ani", "character/gunner/effect/animation/1_ranger/atsuppressingfire/03_finish/dust/suppressingfire_finish_dust01.ani"];
local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj) + 1, zPos = -30;
if(sizeRate > 100) zPos = 100 - sizeRate * 120 / 100;
local pooledObj1 = createOnlyDrawObjectEX_ATGunner_bykk(obj,aniPath[0],true,direction,xPos,yPos,zPos,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate);
local pooledObj2 = createOnlyDrawObject_ATGunner_bykk(obj,aniPath[1],true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL);
local pooledObj3 = createOnlyDrawObject_ATGunner_bykk(obj,aniPath[2],true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL);
local pooledObj = [pooledObj1,pooledObj2,pooledObj3];
for(local i = 0; i < 3; i++){
local pAni = pooledObj[i].getCurrentAnimation();
pAni.setSpeedRate(speedRate.tofloat());
}
}
}
function onEndCurrentAni_SuppressingFire(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_SUPPRESSINGFIRE, STATE_PRIORITY_AUTO, true);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_SuppressingFire(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
local stateTime = obj.sq_GetStateTimer();
local lifeTime = sq_GetIntData(obj, SKILL_BYKK_SUPPRESSINGFIRE, 1) * 100 / obj.getVar("SuppressingFireSet").getInt(0);
if(stateTime >= lifeTime){
print("stateTime = "+stateTime+",,lifeTime = "+lifeTime);
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(STATE_BYKK_SUPPRESSINGFIRE, STATE_PRIORITY_AUTO, true);
}
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
obj.setSkillCommandEnable(SKILL_BYKK_SUPPRESSINGFIRE, true);
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_SUPPRESSINGFIRE);
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND) || b_useskill != -1) obj.addRapidInput();
break;
}
if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj);
}
function onKeyFrameFlag_SuppressingFire(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 101:
sq_SetMyShake(obj, 5, 200);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SUPPRESSINGFIRE, -1, 1, 1.0) + 100;
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_SUPPRESSINGFIRE, 7);
if(sq_GetIntData(obj, SKILL_BYKK_SUPPRESSINGFIRE, 14) > 0){
sizeRate = sizeRate * 130 / 100;
totalDamage = totalDamage * 130 / 100;
}
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_SUPPRESSINGFIRE,2,totalDamage,sizeRate,0,0,0,0,0,0);
}
return true;
}
function onTimeEvent_SuppressingFire(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_SuppressingFire(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_BYKK_SUPPRESSINGFIRE){
local appendage = obj.getVar("SuppressingFire").getAppendage(0);
if(appendage) appendage.setValid(false);
}
}
//死亡锁链
function checkExecutableSkill_KillPoint(obj)
{
if (!obj) return false;
if(obj.getVar("KillPoint_Bool").getBool(0)){
obj.getVar("KillPoint_Bool").setBool(0, false);
obj.sq_IntVectClear();
if(obj.getWeaponSubType() == 0) obj.sq_IntVectPush(2);
else obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_KILLPOINT, STATE_PRIORITY_IGNORE_FORCE, true);
return false;
}
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_KILLPOINT);
if (isUse){
obj.sq_IntVectClear();
if(sq_GetIntData(obj, SKILL_BYKK_KILLPOINT, 13) > 0) obj.sq_IntVectPush(10);
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_KILLPOINT, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_KillPoint(obj)
{
if (!obj) return false;
return true;
}
function onSetState_KillPoint(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(ATANI_BYKK_KILLPOINTREADY_BODY);
obj.getVar("KillPoint_Bool").setBool(0, false);
obj.sq_PlaySound("FG_KILL_POINT_01");
obj.sq_PlaySound("KILL_POINT_BLADE_THROW");
break;
case 1: obj.sq_SetCurrentAnimation(ATANI_BYKK_KILLPOINTFINISHE_BODY);obj.sq_PlaySound("FG_KILL_POINT_03"); break;
case 2: obj.sq_SetCurrentAnimation(ATANI_BYKK_KILLPOINTFINISHD_BODY);obj.sq_PlaySound("FG_KILL_POINT_03"); break;
case 10:
local weaponSubType = obj.getWeaponSubType();
if(weaponSubType == 0) obj.sq_SetCurrentAnimation(ATANI_BYKK_KILLPOINTTALISMANREADY_REVOLER_BODY);
else obj.sq_SetCurrentAnimation(ATANI_BYKK_KILLPOINTTALISMANREADY_NON_REVOLER_BODY);
break;
case 11: obj.sq_SetCurrentAnimation(ATANI_BYKK_KILLPOINTTALISMANFINISH_BODY); break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
if(subState == 0 || subState == 10){
obj.getVar("KillPointTar_boss").clear_obj_vector();
obj.getVar("KillPointTar_named").clear_obj_vector();
obj.getVar("KillPointTar_normal").clear_obj_vector();
obj.getVar("KillPointTar").clear_obj_vector();
obj.getVar("KillPointTar_Shoot").clear_obj_vector();
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_KILLPOINT, 14);
local rangeX = 400 * sizeRate / 100, rangeY = 150 * sizeRate / 100;
local objectManager = obj.getObjectManager();//得到對象管理器
for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){
local object = objectManager.getCollisionObject(i);//得到控制類對象
if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj) && IsFrontOf(obj,object) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) <= rangeX && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= rangeY){
local activeObj = sq_GetCNRDObjectToActiveObject(object);
if(sq_IsBoss(activeObj)){
obj.getVar("KillPointTar_boss").push_obj_vector(activeObj);
continue;
}
else if(sq_IsNamed(activeObj)){
obj.getVar("KillPointTar_named").push_obj_vector(activeObj);
continue;
}
else{
obj.getVar("KillPointTar_normal").push_obj_vector(activeObj);
continue;
}
}
}
local bossSize = obj.getVar("KillPointTar_boss").get_obj_vector_size();
local namedSize = obj.getVar("KillPointTar_named").get_obj_vector_size();
local normalSize = obj.getVar("KillPointTar_normal").get_obj_vector_size();
if(bossSize > 0){
for(local i = 0; i < bossSize; i++){
local targetObj = obj.getVar("KillPointTar_boss").get_obj_vector(i);
if(targetObj) obj.getVar("KillPointTar").push_obj_vector(targetObj);
}
}
if(namedSize > 0){
for(local i = 0; i < namedSize; i++){
local targetObj = obj.getVar("KillPointTar_named").get_obj_vector(i);
if(targetObj) obj.getVar("KillPointTar").push_obj_vector(targetObj);
}
}
if(normalSize > 0){
for(local i = 0; i < normalSize; i++){
local targetObj = obj.getVar("KillPointTar_normal").get_obj_vector(i);
if(targetObj) obj.getVar("KillPointTar").push_obj_vector(targetObj);
}
}
}
else{
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_KILLPOINT, -1, 7, 1.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_KILLPOINTFINISH));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
if(subState < 10) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_ranger/atkillpoint/finish/killpointfinishd_bullet_c.ani"), 0, 0);
else obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_ranger/atkillpoint/talisman/killpointtalismanfinish_bullet_c.ani"), 0, 0);
}
}
function onEndCurrentAni_KillPoint(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 10:
obj.sq_IntVectClear();
obj.sq_IntVectPush(11);
obj.sq_AddSetStatePacket(STATE_BYKK_KILLPOINT, STATE_PRIORITY_AUTO, true);
break;
case 0:
case 1:
case 2:
case 11:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_KillPoint(obj)
{
if(!obj) return;
if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj);
}
function onKeyFrameFlag_KillPoint(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 106:
case 1011:
//`throw chain` 49 0 83
local createMax = sq_GetIntData(obj, SKILL_BYKK_KILLPOINT, 1);
local holdTime = sq_GetIntData(obj, SKILL_BYKK_KILLPOINT, 2);
local direction = sq_GetDirection(obj);
local size = obj.getVar("KillPointTar").get_obj_vector_size();
if(size < createMax) createMax = size;
for(local i = 0; i < createMax; i++){
local targetObj = obj.getVar("KillPointTar").get_obj_vector(i);
if(targetObj && targetObj.getState() != STATE_DIE){
local activeObj = sq_GetCNRDObjectToActiveObject(targetObj);
obj.getVar("KillPointTar_Shoot").push_obj_vector(activeObj);
local group = sq_GetGroup(activeObj);
local uniqueId = sq_GetUniqueId(activeObj);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,49,0,83,direction,1,SKILL_BYKK_KILLPOINT,1,group,uniqueId,holdTime,0,0,0,0,0);
}
}
break;
case 205:
case 2000:
//`attack`
local createMax = sq_GetIntData(obj, SKILL_BYKK_KILLPOINT, 1);
local size = obj.getVar("KillPointTar").get_obj_vector_size();
if(size < createMax) createMax = size;
for(local i = 0; i < createMax; i++){
local targetObj = obj.getVar("KillPointTar").get_obj_vector(i);
if(targetObj && targetObj.getState() != STATE_DIE){
sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2);
sq_AddDrawOnlyAniFromParent(targetObj, "character/gunner/effect/animation/1_ranger/atkillpoint/hiteffect/hiteffect_1.ani", 0, 0, sq_GetObjectHeight(targetObj) / 2);
}
}
break;
case 224:
//`finish Last Attack`
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_KILLPOINT, -1, 8, 1.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_KILLPOINTFINISHLASTSHOT));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
//`release Finish hold`
local apdPath = "character/atgunner/1_ranger_bykk/ap_killpoint.nut";
local createMax = sq_GetIntData(obj, SKILL_BYKK_KILLPOINT, 1);
local size = obj.getVar("KillPointTar").get_obj_vector_size();
if(size < createMax) createMax = size;
for(local i = 0; i < createMax; i++){
local targetObj = obj.getVar("KillPointTar").get_obj_vector(i);
if(targetObj && targetObj.getState() != STATE_DIE){
sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2);
CNSquirrelAppendage.sq_RemoveAppendage(targetObj, apdPath);
}
}
break;
case 1000:
obj.sq_PlaySound("FG_KILL_POINT_02");
obj.sq_PlaySound("KILL_POINT_BULLET");
break;
case 1005:
obj.sq_PlaySound("FG_KILL_POINT_01");
obj.sq_PlaySound("KILL_POINT_BLADE_THROW");
break;
case 2021:
//`finish Last Attack`
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_KILLPOINT, -1, 8, 1.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_KILLPOINTFINISHLASTSHOT));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
//`release Finish hold`
local createMax = sq_GetIntData(obj, SKILL_BYKK_KILLPOINT, 1);
local size = obj.getVar("KillPointTar").get_obj_vector_size();
if(size < createMax) createMax = size;
for(local i = 0; i < createMax; i++){
local targetObj = obj.getVar("KillPointTar").get_obj_vector(i);
if(targetObj && targetObj.getState() != STATE_DIE){
sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2);
}
}
break;
}
return true;
}
function onTimeEvent_KillPoint(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_KillPoint(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_BYKK_KILLPOINT){
if(obj.getSkillSubState() >= 10) obj.getVar("KillPoint_Bool").setBool(0, false);
}
}
//锁链切割
function checkExecutableSkill_ChainDevider(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CHAINDEVIDER);
if (isUse){
obj.sq_IntVectClear();
if(sq_GetIntData(obj, SKILL_BYKK_CHAINDEVIDER, 3) > 0){
obj.getVar("ChainDeviderTar").clear_obj_vector();
obj.sq_IntVectPush(10);
}
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_CHAINDEVIDER, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_ChainDevider(obj)
{
if (!obj) return false;
return true;
}
function onSetState_ChainDevider(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
local attackIndex = 0;
switch(subState){
case 0: obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINDEVIDER01_BODY);attackIndex = ATATK_BYKK_CHAINDEVIDER1; break;
case 1: obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINDEVIDER02_BODY);attackIndex = ATATK_BYKK_CHAINDEVIDER2; break;
case 2: obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINDEVIDER03_BODY);attackIndex = ATATK_BYKK_CHAINDEVIDER3; break;
case 10: obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINDEVIDER01_BODY);attackIndex = ATATK_BYKK_CHAINDEVIDERTALISMAN1; break;
case 11: obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINDEVIDER02_BODY);attackIndex = ATATK_BYKK_CHAINDEVIDERTALISMAN2; break;
case 12: obj.sq_SetCurrentAnimation(ATANI_BYKK_CHAINDEVIDER03_BODY);attackIndex = ATATK_BYKK_CHAINDEVIDERTALISMAN3; break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local bonus = subState;
if(subState >= 10) bonus = subState - 10;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CHAINDEVIDER, -1, bonus, 1.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
}
function onEndCurrentAni_ChainDevider(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
case 10:
case 11:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(STATE_BYKK_CHAINDEVIDER, STATE_PRIORITY_AUTO, true);
break;
case 2:
case 12:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_ChainDevider(obj)
{
if(!obj) return;
if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj);
}
function onKeyFrameFlag_ChainDevider(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 101:
obj.sq_PlaySound("CHAINDEVIDER_03");
obj.sq_PlaySound("FG_TWINGUN_SWORD_03");
sq_flashScreen(obj,0,0,400,178, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 6, 100);
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(2, 8);
obj.setTimeEvent(1, delay / 10, 10, true);
break;
}
return true;
}
function onTimeEvent_ChainDevider(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 1:
local size = obj.getVar("ChainDeviderTar").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("ChainDeviderTar").get_obj_vector(i);
if(targetObj && targetObj.getState() != STATE_DIE){
local baseY = sq_GetYPos(obj), tarY = sq_GetYPos(targetObj);
if(baseY < tarY) sq_setCurrentAxisPos(targetObj, 1, tarY - sq_Abs(baseY - tarY) / 10 - 1);
else sq_setCurrentAxisPos(targetObj, 1, tarY + sq_Abs(baseY - tarY) / 10 + 1);
}
}
}
break;
}
}
function onEndState_ChainDevider(obj, new_state)
{
if(!obj) return;
}
function onAttack_ChainDevider(obj, damager, boundingBox, isStuck)
{
if(!obj) return;
local subState = obj.getSkillSubState();
if(subState >= 10){
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
if(!obj.getVar("ChainDeviderTar").is_obj_vector(damager)) obj.getVar("ChainDeviderTar").push_obj_vector(damager);
}
}
}
//血舞祭
function checkExecutableSkill_BloodnChain(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BLOODNCHAIN);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_BLOODNCHAIN, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_BloodnChain(obj)
{
if (!obj) return false;
return true;
}
function onSetState_BloodnChain(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(ATANI_BYKK_BLOODNCHAIN_BODY);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATATK_BYKK_BLOODNCHAINHOLDATTACK));
obj.getVar("BloodnChainTar").clear_obj_vector();
local currentAni = obj.getCurrentAnimation();
obj.sq_SetXScrollStart(400, currentAni.getDelaySum(0,5));
break;
}
}
function onEndCurrentAni_BloodnChain(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_BloodnChain(obj)
{
if(!obj) return;
if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj);
}
function onKeyFrameFlag_BloodnChain(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 103: sq_SetMyShake(obj, 2, 100); break;
case 105: sq_SetMyShake(obj, 7, 200); break;
case 114:
obj.sq_PlaySound("FG_BLOODCHAIN_02");
obj.sq_PlaySound("BLOODCHAIN_DASH_01");
break;
case 116:
sq_flashScreen(obj,50,100,150,178, sq_RGB(128,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 5, 300);
break;
case 118:
sq_SetMyShake(obj, 2, 100);
//`hold pos pass` 150 0 0
break;
case 119:
//`hold gather pos pass` 265 -20 0
local size = obj.getVar("BloodnChainTar").get_obj_vector_size();
if(size > 0){
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(19, 20);
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("BloodnChainTar").get_obj_vector(i);
if(targetObj && targetObj.getState() != STATE_DIE && !sq_IsFixture(targetObj)){
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/atgunner/1_ranger_bykk/ap_bloodnchain.nut");
if(addAppendage) sq_MoveToAppendageForce(targetObj, obj, obj, 265, -20, targetObj.getZPos(), delay, true, addAppendage);
}
}
}
break;
case 123: sq_SetMyShake(obj, 10, 200); break;
case 124:
//`hold pos pull` 355 -20 0
local size = obj.getVar("BloodnChainTar").get_obj_vector_size();
if(size > 0){
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(24, 24);
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("BloodnChainTar").get_obj_vector(i);
if(targetObj && targetObj.getState() != STATE_DIE && !sq_IsFixture(targetObj)){
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/atgunner/1_ranger_bykk/ap_bloodnchain.nut");
if(addAppendage) sq_MoveToAppendageForce(targetObj, obj, obj, 355, -20, targetObj.getZPos(), delay, true, addAppendage);
}
}
}
break;
case 126:
local size = obj.getVar("BloodnChainTar").get_obj_vector_size();
if(size > 0){
local direction = sq_GetDirection(obj);
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("BloodnChainTar").get_obj_vector(i);
if(targetObj && targetObj.getState() != STATE_DIE && sq_IsFixture(targetObj)){
sq_SetCurrentDirection(targetObj, direction);
}
}
}
break;
case 127:
sq_flashScreen(obj,50,100,50,178, sq_RGB(128,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 3, 150);
break;
case 130:
sq_SetMyShake(obj, 5, 50);
//`turn pos pull` 150 -10 0
local size = obj.getVar("BloodnChainTar").get_obj_vector_size();
if(size > 0){
local direction = sq_GetDirection(obj);
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(30, 31);
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("BloodnChainTar").get_obj_vector(i);
if(targetObj && targetObj.getState() != STATE_DIE && !sq_IsFixture(targetObj)){
sq_SetCurrentDirection(targetObj, sq_GetOppositeDirection(direction));
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/atgunner/1_ranger_bykk/ap_bloodnchain.nut");
if(addAppendage) sq_MoveToAppendageForce(targetObj, obj, obj, 150, -10, targetObj.getZPos(), delay, true, addAppendage);
}
}
}
break;
case 133: sq_flashScreen(obj,500,500,1000,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break;
case 136:
sq_flashScreen(obj,50,50,150,178, sq_RGB(128,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 20, 500);
obj.sq_SetXScrollStop(500);
//`finish` 106 0 91
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLOODNCHAIN, -1, 1, 1.0) + 100;
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,106,0,91,sq_GetDirection(obj),1,SKILL_BYKK_BLOODNCHAIN,1,totalDamage,0,0,0,0,0,0,0);
local size = obj.getVar("BloodnChainTar").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("BloodnChainTar").get_obj_vector(i);
if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atgunner/1_ranger_bykk/ap_bloodnchain.nut");
}
}
break;
}
return true;
}
function onTimeEvent_BloodnChain(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_BloodnChain(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_BYKK_BLOODNCHAIN){
local size = obj.getVar("BloodnChainTar").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("BloodnChainTar").get_obj_vector(i);
if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atgunner/1_ranger_bykk/ap_bloodnchain.nut");
}
}
obj.sq_SetXScrollStop(0);
}
}
function onAttack_BloodnChain(obj, damager, boundingBox, isStuck)
{
if(!obj) return;
local apdPath = "character/atgunner/1_ranger_bykk/ap_bloodnchain.nut";
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
if(!obj.getVar("BloodnChainTar").is_obj_vector(damager)){
obj.getVar("BloodnChainTar").push_obj_vector(damager);
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true);
sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage);
}
if(sq_GetCurrentFrameIndex(obj) >= 36) sq_AddDrawOnlyAniFromParent(damager, "character/gunner/effect/animation/1_ranger/atbloodnchain/hit/bloodfinishhitattach_1.ani", 0, 0, sq_GetCenterZPos(boundingBox));
else sq_AddDrawOnlyAniFromParent(damager, "character/gunner/effect/animation/1_ranger/atbloodnchain/hit/bloodhitattach_1.ani", 0, 0, sq_GetCenterZPos(boundingBox));
}
}
//毁灭风暴
function checkExecutableSkill_RuinationArea(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_RUINATIONAREA);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_RUINATIONAREA, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_RuinationArea(obj)
{
if (!obj) return false;
return true;
}
function onSetState_RuinationArea(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(ATANI_BYKK_RUINATIONAREAST2_BODY);obj.sq_PlaySound("RUINATION_AREA_GUNBLADE_02"); break;
case 1: obj.sq_SetCurrentAnimation(ATANI_BYKK_RUINATIONAREAST3_BODY);obj.sq_PlaySound("RUINATION_AREA_GUNBLADE_03"); break;
case 2: obj.sq_SetCurrentAnimation(ATANI_BYKK_RUINATIONAREAST1_BODY);obj.sq_PlaySound("RUINATION_AREA_GUNBLADE_01"); break;
case 3: obj.sq_SetCurrentAnimation(ATANI_BYKK_RUINATIONAREAST2_BODY);obj.sq_PlaySound("RUINATION_AREA_GUNBLADE_02"); break;
case 4: obj.sq_SetCurrentAnimation(ATANI_BYKK_RUINATIONAREAST3_BODY);obj.sq_PlaySound("RUINATION_AREA_GUNBLADE_03"); break;
case 5: obj.sq_SetCurrentAnimation(ATANI_BYKK_RUINATIONAREAST4_BODY); break;
}
local speed = 1.0;
if(obj.getRapidInputFrequency() > 0) speed = 1.2;
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed);
local currentAni = obj.getCurrentAnimation();
switch(subState){
case 0:
obj.sq_PlaySound("R_FG_RUINATION_AREA_01");
if(obj.isMyControlObject()) sq_flashScreen(obj,40,0,40,10, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 1, 100);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_RUINATIONAREA, -1, 0, 1.03) + 100;
local hitMax = sq_GetIntData(obj, SKILL_BYKK_RUINATIONAREA, 6);
local speedRate = 3400 / currentAni.getDelaySum(0, 0);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_RUINATIONAREA,1,totalDamage,hitMax,speedRate,0,0,0,0,0);
break;
case 1:
if(obj.isMyControlObject()) sq_flashScreen(obj,50,0,50,10, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 4, 100);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_RUINATIONAREA, -1, 0, 1.06) + 100;
local hitMax = sq_GetIntData(obj, SKILL_BYKK_RUINATIONAREA, 8);
local speedRate = 2700 / currentAni.getDelaySum(0, 0);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_RUINATIONAREA,2,totalDamage,hitMax,speedRate,0,0,0,0,0);
break;
case 2:
if(obj.isMyControlObject()) sq_flashScreen(obj,60,0,60,10, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 7, 100);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_RUINATIONAREA, -1, 0, 1.09) + 100;
local hitMax = sq_GetIntData(obj, SKILL_BYKK_RUINATIONAREA, 4);
local speedRate = 4000 / currentAni.getDelaySum(0, 0);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_RUINATIONAREA,3,totalDamage,hitMax,speedRate,0,0,0,0,0);
break;
case 3:
if(obj.isMyControlObject()) sq_flashScreen(obj,40,0,40,10, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 1, 100);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_RUINATIONAREA, -1, 0, 1.12) + 100;
local hitMax = sq_GetIntData(obj, SKILL_BYKK_RUINATIONAREA, 6);
local speedRate = 3400 / currentAni.getDelaySum(0, 0);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_RUINATIONAREA,4,totalDamage,hitMax,speedRate,0,0,0,0,0);
break;
case 4:
if(obj.isMyControlObject()) sq_flashScreen(obj,50,0,50,10, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 4, 100);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_RUINATIONAREA, -1, 0, 1.15) + 100;
local hitMax = sq_GetIntData(obj, SKILL_BYKK_RUINATIONAREA, 8);
local speedRate = 2700 / currentAni.getDelaySum(0, 0);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_RUINATIONAREA,5,totalDamage,hitMax,speedRate,0,0,0,0,0);
break;
case 5:
local speedRate = 5000 / currentAni.getDelaySum(0, 0);
local delay1 = 30000 / speedRate, delay2 = 50000 / speedRate, delay3 = 40000 / speedRate;
obj.sq_PlaySound("R_FG_RUINATION_AREA_02");
obj.sq_PlaySound("RUINATION_AREA_EXP");
sq_flashScreen(obj,0,delay1,delay2,255, sq_RGB(139,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 15, delay3);
local totalDamage_Exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_RUINATIONAREA, -1, 1, 1.0) + 100;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_RUINATIONAREA, -1, 2, 1.0) + 100;
local hitMax = sq_GetIntData(obj, SKILL_BYKK_RUINATIONAREA, 10);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_RUINATIONAREA,6,totalDamage_Exp,speedRate,0,0,0,0,0,0);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,0,0,0,sq_GetDirection(obj),1,SKILL_BYKK_RUINATIONAREA,7,totalDamage,hitMax,speedRate,0,0,0,0,0);
break;
}
}
function onEndCurrentAni_RuinationArea(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
case 2:
case 3:
case 4:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(STATE_BYKK_RUINATIONAREA, STATE_PRIORITY_AUTO, true);
break;
case 5:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_RuinationArea(obj)
{
if(!obj) return;
obj.setSkillCommandEnable(SKILL_BYKK_RUINATIONAREA,true);
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_RUINATIONAREA);
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
if(b_useskill != -1 || sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput();
if(sq_GetSkillLevel(obj, SKILL_BYKK_STYLISH) > 0) proc_atStylish_bykk(obj);
}
function onKeyFrameFlag_RuinationArea(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_RuinationArea(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_RuinationArea(obj, new_state)
{
if(!obj) return;
}
///////////////////////////////////////////////////////////////4spitfire
function isApplyConversionSkillPassiveObject_ATGunner(passiveObjectIndex)
{
if(passiveObjectIndex == 24396){
return true;
}
return false;
}
function proc_appendage_common_debuff(appendage)
{
if(!appendage) return;
}
function onStartDungeon_4SpitFire_bykk(obj)
{
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADENONE);
if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_GRENADENONE);
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADEWATER);
if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_GRENADEWATER);
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADELIGHT);
if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_GRENADELIGHT);
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR);
if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_NITROMOTOR);
for(local i = 0; i < 3; i++){
local timer = obj.getVar("grenade"+i.tostring()).get_ct_vector(0);
if(!timer){
obj.getVar("grenade"+i.tostring()).clear_ct_vector();
obj.getVar("grenade"+i.tostring()).push_ct_vector();
timer = obj.getVar("grenade"+i.tostring()).get_ct_vector(0);
timer.Reset();
timer.Start(10000,0);
}
}
if(sq_GetSkillLevel(obj, SKILL_BYKK_STRAYBULLETMASTERY) > 0){
if(sq_GetSkillLevel(obj, SKILL_BYKK_N_02X) > 0){
obj.getVar("grenadeExSet").setInt(SKILL_BYKK_GRENADENONE, 0);
obj.getVar("grenadeExSet").setInt(SKILL_BYKK_GRENADELIGHT, 0);
obj.getVar("grenadeExSet").setInt(SKILL_BYKK_GRENADEWATER, 0);
obj.getVar("grenadeUiBool").setBool(SKILL_BYKK_GRENADENONE, false);
obj.getVar("grenadeUiBool").setBool(SKILL_BYKK_GRENADELIGHT, false);
obj.getVar("grenadeUiBool").setBool(SKILL_BYKK_GRENADEWATER, false);
}
}
setSkillBonusRate_At4SpitFire_bykk(obj);
obj.sq_IntVectClear();
obj.sq_IntVectPush(100);
obj.sq_AddSetStatePacket(STATE_BYKK_GRENADENONE, STATE_PRIORITY_USER, true);
}
function reset_atSpitFire_bykk(obj)
{
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADENONE);
if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_GRENADENONE);
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADEWATER);
if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_GRENADEWATER);
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADELIGHT);
if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_GRENADELIGHT);
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR);
if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_NITROMOTOR);
for(local i = 0; i < 3; i++){
local timer = obj.getVar("grenade"+i.tostring()).get_ct_vector(0);
if(!timer){
obj.getVar("grenade"+i.tostring()).clear_ct_vector();
obj.getVar("grenade"+i.tostring()).push_ct_vector();
timer = obj.getVar("grenade"+i.tostring()).get_ct_vector(0);
timer.Reset();
timer.Start(10000,0);
}
else{
timer.Reset();
timer.Start(10000,0);
}
}
if(sq_GetSkillLevel(obj, SKILL_BYKK_STRAYBULLETMASTERY) > 0){
if(sq_GetSkillLevel(obj, SKILL_BYKK_N_02X) > 0){
obj.getVar("grenadeExSet").setInt(SKILL_BYKK_GRENADENONE, 0);
obj.getVar("grenadeExSet").setInt(SKILL_BYKK_GRENADELIGHT, 0);
obj.getVar("grenadeExSet").setInt(SKILL_BYKK_GRENADEWATER, 0);
obj.getVar("grenadeUiBool").setBool(SKILL_BYKK_GRENADENONE, false);
obj.getVar("grenadeUiBool").setBool(SKILL_BYKK_GRENADELIGHT, false);
obj.getVar("grenadeUiBool").setBool(SKILL_BYKK_GRENADEWATER, false);
}
}
setSkillBonusRate_At4SpitFire_bykk(obj);
}
function ProcPassiveSkill_ATGunner_SpitFire(obj, skill_index, skill_level)
{
switch(skill_index){
case SKILL_BYKK_NITROMOTOR:
if(skill_level > 0){
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_ATSPITFIRE_NITROMOTOR, true);
}
break;
}
}
function procSkill_ATGunner_4SpitFire_bykk(obj)//2 4
{
if(!obj) return;
if(!sq_IsMyControlObject(obj)) return;
local skillIndex = [SKILL_BYKK_GRENADENONE,SKILL_BYKK_GRENADEWATER,SKILL_BYKK_GRENADELIGHT];
local iconIndex = [0,2,4];
local coolTime = [1000, 2000, 1200];
local adjust = sq_GetIntData(obj, SKILL_BYKK_GRENADENONE, 16);
local airCoolTime = 500 * (100 - adjust) / 100;
for(local i = 0; i < 3; i++){
if(sq_GetSkillLevel(obj, skillIndex[i]) > 0){
local timer = obj.getVar("grenade"+(i).tostring()).get_ct_vector(0);
local currentT = timer.Get();
// if(i == 0) print("currentT = "+currentT);
local loadSlot = obj.sq_GetSkillLoad(skillIndex[i]);
if(loadSlot){
obj.setSkillCommandEnable(skillIndex[i], false);
local loadNumber = loadSlot.getRemainLoadNumber();
if(!loadSlot.isCooling()){
local loadMax = sq_GetIntData(obj, skillIndex[i], 0);
if(loadNumber < loadMax){
loadSlot.increaseLoadCount(1);
if(loadNumber + 1 != loadMax) loadSlot.setStartCool();
}
}
if(loadNumber > 0){
local sqrState = obj.getState();
if(sqrState == 0 || sqrState == 8 || sqrState == 14 || sqrState == 6 || sqrState == 7 || sqrState == STATE_BYKK_GRENADELIGHT || sqrState == STATE_BYKK_STANDBYREADY){
local loadSlotNit = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR);
if(loadSlotNit && loadSlotNit.getRemainLoadNumber() == 0) return;
if((sq_GetZPos(obj) < 1 && currentT >= 3000) || (sq_GetZPos(obj) > 0 && currentT >= airCoolTime)){
obj.setSkillCommandEnable(skillIndex[i],true);
local b_useskill = obj.sq_IsEnterSkill(skillIndex[i]);
if(b_useskill != -1){
obj.sq_IntVectClear();
if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(2);
else obj.sq_IntVectPush(0);
obj.sq_IntVectPush(skillIndex[i]);
obj.sq_AddSetStatePacket(STATE_BYKK_GRENADENONE, STATE_PRIORITY_IGNORE_FORCE, true);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){
if(loadNumber > 1) loadSlot.decreaseLoadCount(1);
if(loadNumber == 3) loadSlot.setStartCool();
}
else{
loadSlot.decreaseLoadCount(1);
if(loadNumber == 3) loadSlot.setStartCool();
timer.Reset();
timer.Start(10000,0);
}
}
}
}
}
}
else{
local loadMax = sq_GetIntData(obj, skillIndex[i], 0);
obj.sq_AddSkillLoad(skillIndex[i], iconIndex[i], loadMax, coolTime[i]);
//print("skillIndex = "+skillIndex[i]);
}
}
}
////////单兵推进器 icon = 80
if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR);
if(!loadSlot){
local loadMax = sq_GetIntData(obj, SKILL_BYKK_NITROMOTOR, 0);
if(sq_GetSkillLevel(obj, SKILL_BYKK_N_02X) > 0) loadMax = loadMax + 1;
obj.sq_AddSkillLoad(SKILL_BYKK_NITROMOTOR, 80, loadMax, 0);
}
}
local state = obj.getState();
local stateLst = [STATE_SIT, STATE_DAMAGE, STATE_DOWN, STATE_HOLD];//STATE_SIT_FOREVER
for(local i = 0; i < stateLst.len(); i++){
if(state == stateLst[i]){
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR);
if(loadSlot && loadSlot.getRemainLoadNumber() > 0){
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){
obj.sq_IntVectClear();
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
obj.sq_IntVectPush(1);
if(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) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj)));
}
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_GRENADELIGHT, STATE_PRIORITY_AUTO, true);
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")) loadSlot.decreaseLoadCount(1);
return;
}
}
}
}
}
function drawCustomUI_ATGunner_4SpitFire(obj)
{
if(!obj || sq_isPVPMode()) return;
if(!obj.sq_IsMyControlObject()) return;
if(obj.getVar("grenadeUiBool").getBool(SKILL_BYKK_GRENADENONE)){
local sq_var = obj.getVar();
local uiAni = sq_var.GetAnimationMap("grenadeNoneUi", "character/gunner/effect/animation/4_spitfire/atchelli/standbyreadyui_00.ani");
sq_AnimationProc(uiAni);
sq_drawCurrentFrame(uiAni, 78, 477, false);
}
if(obj.getVar("grenadeUiBool").getBool(SKILL_BYKK_GRENADELIGHT)){
local sq_var = obj.getVar();
local uiAni = sq_var.GetAnimationMap("grenadeLightUi", "character/gunner/effect/animation/4_spitfire/atchelli/standbyreadyui_00.ani");
sq_AnimationProc(uiAni);
local offsetX = 78;
if(sq_GetSkillLevel(obj, SKILL_BYKK_GRENADENONE) > 0) offsetX = 135;
sq_drawCurrentFrame(uiAni, offsetX, 477, false);
}
if(obj.getVar("grenadeUiBool").getBool(SKILL_BYKK_GRENADEWATER)){
local sq_var = obj.getVar();
local uiAni = sq_var.GetAnimationMap("grenadeWaterUi", "character/gunner/effect/animation/4_spitfire/atchelli/standbyreadyui_00.ani");
sq_AnimationProc(uiAni);
local offsetX = 78;
if(sq_GetSkillLevel(obj, SKILL_BYKK_GRENADENONE) > 0) offsetX = 135;
if(sq_GetSkillLevel(obj, SKILL_BYKK_GRENADELIGHT) > 0) offsetX = 194;
sq_drawCurrentFrame(uiAni, offsetX, 477, false);
}
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){
local sq_var = obj.getVar();
local uiAni = sq_var.GetAnimationMap("standbyreadyUi", "character/gunner/effect/animation/4_spitfire/atchelli/standbyreadyui_00.ani");
sq_AnimationProc(uiAni);
local offsetX = 78;
if(sq_GetSkillLevel(obj, SKILL_BYKK_GRENADENONE) > 0) offsetX = 135;
if(sq_GetSkillLevel(obj, SKILL_BYKK_GRENADELIGHT) > 0) offsetX = 194;
if(sq_GetSkillLevel(obj, SKILL_BYKK_GRENADEWATER) > 0) offsetX = 252;
sq_drawCurrentFrame(uiAni, offsetX, 477, false);
}
}
function determineNitromotor_bykk(obj, state)//判断单兵推进器滞空
{
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR);
if(loadSlot){
local loadNumber = loadSlot.getRemainLoadNumber();
if(loadNumber > 0){
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut") && ((state == SKILL_BYKK_GRENADENONE || state == SKILL_BYKK_GRENADELIGHT || state == SKILL_BYKK_GRENADEWATER) && sq_GetIntData(obj, SKILL_BYKK_GRENADENONE, 17) < 1)) loadSlot.decreaseLoadCount(1);
obj.getVar("determineNitromotor").setBool(0, true);
if(state == STATE_BYKK_OPENFIRE) return true;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")) {
obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("Effect/Animation/skl95_bykk/ATStandby-Ready/Standby-Ready_00.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("Effect/Animation/skl95_bykk/ATStandby-Ready/Standby-Ready_01.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(10002,obj.sq_CreateCNRDAnimation("Effect/Animation/skl95_bykk/ATStandby-Ready/Standby-Ready_02.ani"), 0, 0);
}
else obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atnitromotor/up_nitromotor_dodge1.ani"), 0, 0);
return true;
}
else return false;
}
else return false;
}
function nitroMotor_bykk(obj)
{
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR);
if(loadSlot){
local loadNumber = loadSlot.getRemainLoadNumber();
if(loadNumber > 0){
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){
obj.sq_IntVectClear();
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
obj.sq_IntVectPush(1);
if(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) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj)));
}
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_GRENADELIGHT, STATE_PRIORITY_AUTO, true);
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")) loadSlot.decreaseLoadCount(1);
return;
}
}
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")) return;
sq_SetKeyxEnable(obj, E_BUFF_COMMAND, true);
if(sq_IsEnterCommand(obj, E_BUFF_COMMAND)){
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(STATE_BYKK_GRENADELIGHT, STATE_PRIORITY_AUTO, true);
return;
}
}
}
//超负荷装填
function checkExecutableSkill_OverCharge(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_OVERCHARGE);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(SKILL_BYKK_OVERCHARGE);
obj.sq_IntVectPush(sq_GetCastTime(obj, SKILL_BYKK_OVERCHARGE, sq_GetSkillLevel(obj, SKILL_BYKK_OVERCHARGE)));
obj.sq_IntVectPush(500);
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(4);
obj.sq_IntVectPush(4);
obj.sq_IntVectPush(1000);
obj.sq_IntVectPush(1000);
obj.sq_IntVectPush(-1);
obj.sq_AddSetStatePacket(STATE_THROW, STATE_PRIORITY_USER, true);
return true;
}
return false;
}
function checkCommandEnable_OverCharge(obj)
{
if (!obj) return false;
return true;
}
function onSetState_OverCharge(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_GetThrowShootAni(1);
obj.setCurrentAnimation(Ani);
obj.sq_PlaySound("OVERCHARGE_READY");
obj.sq_PlaySound("FG_DB_REVOLVER_02");
local elementSelect = obj.sq_GetVectorData(datas, 1);//0fire 1water 2dark 3light
// print("elementSelect = "+elementSelect);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE);
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_ATSPITFIRE_OVERCHARGE, true);
AddAppendage.setBuffIconImage(116);
AddAppendage.getVar("element").setInt(0, elementSelect);
AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_OVERCHARGE, sq_GetSkillLevel(obj, SKILL_BYKK_OVERCHARGE));
CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true);
break;
}
}
function onEndCurrentAni_OverCharge(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_OverCharge(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_OverCharge(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_OverCharge(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_OverCharge(obj, new_state)
{
if(!obj) return;
}
function onProcCon_atgunner_throw(obj)
{
if(!obj) return;
local skillIndex = obj.getThrowIndex();
local substate = obj.getSkillSubState();
obj.setSkillSubState(substate)
if(skillIndex == SKILL_BYKK_OVERCHARGE){
switch(substate){
case 0:
sq_SetKeyxEnable(obj, E_BUFF_COMMAND, true);//设置其他按键
if(sq_IsEnterCommand(obj, E_BUFF_COMMAND)){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(4);
obj.sq_AddSetStatePacket(STATE_BYKK_OVERCHARGE, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
break;
}
}
}
function onAfterSetState_OverChargeThrow(obj, state, datas, isResetTimer)
{
if(!obj.isMyControlObject()) return;
local skillIndex = obj.getThrowIndex();
if(skillIndex == SKILL_BYKK_OVERCHARGE){
local throwState = obj.getThrowState();
switch(throwState){
case 0:
obj.setIsCustomSelectSkill(true);
break;
case 1:
local element = obj.getThrowElement();
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(element);
obj.sq_AddSetStatePacket(STATE_BYKK_OVERCHARGE, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
}
//特性弹
function checkExecutableSkill_BulletSpecific(obj)
{
if (!obj) return false;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BULLETSPECIFIC);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(SKILL_BYKK_BULLETSPECIFIC);
obj.sq_AddSetStatePacket(STATE_BYKK_BULLETPENETRATE, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_BulletSpecific(obj)
{
if (!obj) return false;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)) return false;
return true;
}
function onSetState_BulletSpecific(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(0);
break;
}
}
function onEndCurrentAni_BulletSpecific(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_BulletSpecific(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_BulletSpecific(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_BulletSpecific(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_BulletSpecific(obj, new_state)
{
if(!obj) return;
}
//爆裂弹
function checkExecutableSkill_BulletExplosive(obj)
{
if (!obj) return false;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BULLETEXPLOSIVE);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(SKILL_BYKK_BULLETEXPLOSIVE);
obj.sq_AddSetStatePacket(STATE_BYKK_BULLETPENETRATE, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_BulletExplosive(obj)
{
if (!obj) return false;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)) return false;
return true;
}
function onSetState_BulletExplosive(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(0);
break;
}
}
function onEndCurrentAni_BulletExplosive(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_BulletExplosive(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_BulletExplosive(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_BulletExplosive(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_BulletExplosive(obj, new_state)
{
if(!obj) return;
}
//贯穿弹
function checkExecutableSkill_BulletPenetrate(obj)
{
if (!obj) return false;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BULLETPENETRATE);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(SKILL_BYKK_BULLETPENETRATE);
obj.sq_AddSetStatePacket(STATE_BYKK_BULLETPENETRATE, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_BulletPenetrate(obj)
{
if (!obj) return false;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)) return false;
return true;
}
function onSetState_BulletPenetrate(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);
local skillIndex = obj.sq_GetVectorData(datas, 1);
obj.getVar("bulletSet").setInt(0, skillIndex);
local skill_level = sq_GetSkillLevel(obj, skillIndex);
local castTime = sq_GetCastTime(obj, skillIndex, skill_level);
sq_StartDrawCastGauge(obj, castTime, true);
local currentAni = obj.getCurrentAnimation();
if(castTime > 180) castTime = castTime - 180;
sq_SetFrameDelayTime(currentAni, 2, castTime);
break;
case 1:
local Ani = obj.sq_GetThrowShootAni(1);
obj.setCurrentAnimation(Ani);
local skillIndex = obj.sq_GetVectorData(datas, 1);
local apdPath = APDPATH_ATSPITFIRE_BULLETPENETRATE;
if(skillIndex == SKILL_BYKK_BULLETEXPLOSIVE) apdPath = APDPATH_ATSPITFIRE_BULLETEXPLOSIVE;
else if(skillIndex == SKILL_BYKK_BULLETSPECIFIC) apdPath = APDPATH_ATSPITFIRE_BULLETSPECIFIC;
local buffIcon = 118;
if(skillIndex == SKILL_BYKK_BULLETEXPLOSIVE) buffIcon = 119;
else if(skillIndex == SKILL_BYKK_BULLETSPECIFIC) buffIcon = 117;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath);
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true);
AddAppendage.setBuffIconImage(buffIcon);
AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), skillIndex, sq_GetSkillLevel(obj, skillIndex));
CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true);
switch(skillIndex){
case SKILL_BYKK_BULLETEXPLOSIVE:
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_BULLETPENETRATE)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_ATSPITFIRE_BULLETPENETRATE);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_BULLETSPECIFIC)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_ATSPITFIRE_BULLETSPECIFIC);
break;
case SKILL_BYKK_BULLETPENETRATE:
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_BULLETEXPLOSIVE)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_ATSPITFIRE_BULLETEXPLOSIVE);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_BULLETSPECIFIC)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_ATSPITFIRE_BULLETSPECIFIC);
break;
case SKILL_BYKK_BULLETSPECIFIC:
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_BULLETPENETRATE)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_ATSPITFIRE_BULLETPENETRATE);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_BULLETEXPLOSIVE)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_ATSPITFIRE_BULLETEXPLOSIVE);
break;
}
break;
}
}
function onEndCurrentAni_BulletPenetrate(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(obj.getVar("bulletSet").getInt(0));
obj.sq_AddSetStatePacket(STATE_BYKK_BULLETPENETRATE, STATE_PRIORITY_AUTO, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_BulletPenetrate(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_BulletPenetrate(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_BulletPenetrate(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_BulletPenetrate(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_BYKK_BULLETPENETRATE){
sq_EndDrawCastGauge(obj);
}
}
//交叉射击
function checkExecutableSkill_CrossShoot(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CROSSSHOOT);
if (isUse){
obj.sq_IntVectClear();
if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(1);
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_CROSSSHOOT, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_CrossShoot(obj)
{
if (!obj) return false;
local state = obj.getState();
if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){
if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR);
if(loadSlot){
local loadNumber = loadSlot.getRemainLoadNumber();
if(loadNumber > 0) return true;
else return false;
}
else return false;
}
else return false;
}
return true;
}
function onSetState_CrossShoot(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
obj.sq_ZStop();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(ATANI_BYKK_CROSSSHOOT);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/crossshoot/atbody.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/crossshoot/gun.ani"), 0, 25);
obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/crossshoot/gunbreak.ani"), 0, 25);
obj.sq_AddStateLayerAnimation(4,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/crossshoot/shoot.ani"), 0, 25);
break;
case 1:
obj.sq_SetCurrentAnimation(ATANI_BYKK_CROSSSHOOTAIR);
obj.sq_PlaySound("R_FG_CROSSM");
// obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/crossshoot/atbodyair.ani"), -50, -50);
obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/crossshoot/gunair.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/crossshoot/gunbreakair.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(4,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/crossshoot/shootair.ani"), 0, 0);
break;
}
}
function onEndCurrentAni_CrossShoot(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;
case 1:
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true);
return;
}
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(sq_GetZPos(obj));
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_CrossShoot(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_CrossShoot(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 0:
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CROSSSHOOT, -1, 0, 1.0);
local hitMax = sq_GetIntData(obj, SKILL_BYKK_CROSSSHOOT, 3);
local hitStunRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CROSSSHOOT, -1, 1, 1.0) + 100;
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_CROSSSHOOT, 5);
local elementSelect = 4;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)){
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE);
elementSelect = addAppendage.getVar("element").getInt(0);
}
local isAir = 0, offsetX = 55, offsetY = 0, offsetZ = 85;
if(obj.getSkillSubState() == 1){ isAir = 1; offsetX = 55; offsetY = 0; offsetZ = 45;}
else{
switch(elementSelect){
case 0: obj.sq_PlaySound("CROSS_SHOT_FIRE"); break;
case 1: obj.sq_PlaySound("CROSS_SHOT_ICE"); break;
case 2: obj.sq_PlaySound("CROSS_SHOT"); break;
case 3: obj.sq_PlaySound("CROSS_SHOT_LIGHT"); break;
case 4: obj.sq_PlaySound("CROSS_SHOT"); break;
}
}
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,offsetY,offsetZ,sq_GetDirection(obj),4,SKILL_BYKK_CROSSSHOOT,1,elementSelect,totalDamage,hitMax,hitStunRate,sizeRate,isAir,0,0);
local aniPath = ["character/gunner/effect/animation/4_spitfire/crossshootrenewal/floor_fire.ani","character/gunner/effect/animation/4_spitfire/crossshootrenewal/floor_ice.ani","character/gunner/effect/animation/4_spitfire/crossshootrenewal/floor_mu.ani","character/gunner/effect/animation/4_spitfire/crossshootrenewal/floor_light.ani","character/gunner/effect/animation/4_spitfire/crossshootrenewal/floor_mu.ani"];
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath[elementSelect], 0, 0, 0);
if(elementSelect == 2){
local pAni = pooledObj.getCurrentAnimation();
pAni.setRGBA(50, 50, 50, 155);
}
sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM);
break;
}
return true;
}
function onTimeEvent_CrossShoot(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_CrossShoot(obj, new_state)
{
if(!obj) return;
}
//聚合弹
function checkExecutableSkill_ChargeBuster(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CHARGEBUSTER);
if (isUse){
obj.sq_IntVectClear();
if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(10);
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_CHARGEBUSTER, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_ChargeBuster(obj)
{
if (!obj) return false;
local state = obj.getState();
if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){
if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR);
if(loadSlot){
local loadNumber = loadSlot.getRemainLoadNumber();
if(loadNumber > 0) return true;
else return false;
}
else return false;
}
else return false;
}
return true;
}
function onSetState_ChargeBuster(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
obj.sq_ZStop();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(ATANI_BYKK_CHARGEBUSTERCHARGE);
obj.getVar("ChargeBusterBool").setBool(0, true);
obj.getVar("ChargeBusterSet").setInt(0, 0);
obj.sq_AddStateLayerAnimation(-2,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/1_spin_back_dodge1.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/1_spin_back_dodge2.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/3_spin_front_dodge1.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/3_spin_front_dodge2.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/2_gg_body_dodge1.ani"), 0, 0);
break;
case 1:
local isDown = obj.getVar("ChargeBusterSet").getInt(0);
if(isDown > 0){
obj.sq_SetCurrentAnimation(ATANI_BYKK_CHARGEBUSTERSHOOTDOWN);
obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/2_gg_body_dodge2_down.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(4,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/4_charge_dodge_down.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(5,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/5_shot_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(6,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/6_shot_dodge_down.ani"), 0, 0);
}
else{
obj.sq_SetCurrentAnimation(ATANI_BYKK_CHARGEBUSTERSHOOT);
obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/2_gg_body_dodge2.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(4,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/4_charge_dodge.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(5,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/5_shot_normal_down.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(6,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/6_shot_dodge.ani"), 0, 0);
}
break;
case 10:
obj.sq_SetCurrentAnimation(ATANI_BYKK_CHARGEBUSTERSHOOTAIR);
obj.sq_AddStateLayerAnimation(5,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/5_shot_normal_air.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(6,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atchargebuster/6_shot_dodge_air.ani"), 0, 0);
break;
}
}
function onEndCurrentAni_ChargeBuster(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_CHARGEBUSTER, STATE_PRIORITY_AUTO, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
case 10:
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true);
return;
}
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(sq_GetZPos(obj));
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_ChargeBuster(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(obj.getVar("ChargeBusterBool").getBool(0)){
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){
obj.getVar("ChargeBusterBool").setBool(0, false);
obj.getVar("ChargeBusterSet").setInt(0, 1);
}
}
break;
}
}
function onKeyFrameFlag_ChargeBuster(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 0:
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CHARGEBUSTER, -1, 0, 1.0);
local elementSelect = 4;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)){
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE);
elementSelect = addAppendage.getVar("element").getInt(0);
}
local isAir = 0, offsetX = 105, offsetY = 0, offsetZ = 85, isDown = 0;
if(obj.getVar("ChargeBusterSet").getInt(0) > 0){
offsetX = 115; offsetY = 0; offsetZ = 55;isDown = 1;
}
if(obj.getSkillSubState() == 10){
isAir = 1; offsetX = 55; offsetY = 0; offsetZ = 35;
}
switch(elementSelect){
case 0: obj.sq_PlaySound("REVENGE_SHOT_FIRE_CHARGEBUSTER"); break;
case 1: obj.sq_PlaySound("REVENGE_SHOT_ICE_CHARGEBUSTER"); break;
case 2: obj.sq_PlaySound("REVENGE_SHOT_CHARGEBUSTER"); break;
case 3: obj.sq_PlaySound("REVENGE_SHOT_LIGHT_CHARGEBUSTER"); break;
case 4: obj.sq_PlaySound("REVENGE_SHOT_NONE_CHARGEBUSTER"); break;
}
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,offsetY,offsetZ,sq_GetDirection(obj),4,SKILL_BYKK_CHARGEBUSTER,1,elementSelect,totalDamage,isAir,isDown,0,0,0,0);
obj.sq_PlaySound("KILL_POINT_SHOOT_03");
break;
}
return true;
}
function onTimeEvent_ChargeBuster(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_ChargeBuster(obj, new_state)
{
if(!obj) return;
}
//凝固汽油弹
function checkExecutableSkill_NapalmBomb(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_NAPALMBOMB);
if (isUse){
obj.sq_IntVectClear();
if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(1);
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_NAPALMBOMB, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_NapalmBomb(obj)
{
if (!obj) return false;
local state = obj.getState();
if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){
if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR);
if(loadSlot){
local loadNumber = loadSlot.getRemainLoadNumber();
if(loadNumber > 0) return true;
else return false;
}
else return false;
}
else return false;
}
return true;
}
function onSetState_NapalmBomb(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
obj.sq_ZStop();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(ATANI_BYKK_CHARGEBUSTERSHOOTDOWN);
break;
case 1:
obj.sq_SetCurrentAnimation(ATANI_BYKK_NAPALMBOMBSHOOTAIR);
break;
}
}
function onEndCurrentAni_NapalmBomb(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;
case 1:
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true);
return;
}
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(sq_GetZPos(obj));
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_NapalmBomb(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_NapalmBomb(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 0:
obj.sq_PlaySound("FG_LIGHTSHOT");
local subState = obj.getSkillSubState();
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_NAPALMBOMB, -1, 0, 1.0);
local lifeTime = sq_GetIntData(obj, SKILL_BYKK_NAPALMBOMB, 1);
local hitTime = sq_GetIntData(obj, SKILL_BYKK_NAPALMBOMB, 0);
local totalDamageGround = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_NAPALMBOMB, -1, 1, 1.0);
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_NAPALMBOMB, 2);
if(sq_GetIntData(obj, SKILL_BYKK_NAPALMBOMB, 6) > 0){
totalDamage = totalDamage * 140 / 100;
sizeRate = sizeRate * 120 / 100;
lifeTime = 0;
}
local elementSelect = 4;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE)){
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, APDPATH_ATSPITFIRE_OVERCHARGE);
elementSelect = addAppendage.getVar("element").getInt(0);
}
local isAir = 0, offsetX = 105, offsetY = 0, offsetZ = 65, isDown = 0;
if(subState == 1){ isAir = 1; offsetX = 55; offsetY = 0; offsetZ = 35;}
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,offsetY,offsetZ,sq_GetDirection(obj),4,SKILL_BYKK_NAPALMBOMB,1,elementSelect,totalDamage,lifeTime,hitTime,totalDamageGround,sizeRate,0,0);
break;
}
return true;
}
function onTimeEvent_NapalmBomb(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_NapalmBomb(obj, new_state)
{
if(!obj) return;
}
//C4飞弹
function checkExecutableSkill_C4(obj)
{
if (!obj) return false;
local size = obj.getVar("C4AtkObj").get_obj_vector_size();
if(size > 0 && obj.getVar("C4Bool").getBool(0)){
obj.getVar("C4Bool").setBool(0, false);
for(local i = 0; i < size; i++){
local atkObj = obj.getVar("C4AtkObj").get_obj_vector(i);
local colObj = sq_GetCNRDObjectToCollisionObject(atkObj);
if(colObj.isExistTimeEvent(2)){
colObj.stopTimeEvent(2);
colObj.setTimeEvent(2, 100, 1, true);
}
}
return false;
}
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_C4);
if (isUse){
obj.sq_IntVectClear();
if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(1);
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_C4, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_C4(obj)
{
if (!obj) return false;
local state = obj.getState();
if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){
if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR);
if(loadSlot){
local loadNumber = loadSlot.getRemainLoadNumber();
if(loadNumber > 0) return true;
else return false;
}
else return false;
}
else return false;
}
return true;
}
function onSetState_C4(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
obj.sq_ZStop();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(ATANI_BYKK_C4REMOTEEXTHROW);
break;
case 1:
obj.sq_SetCurrentAnimation(ATANI_BYKK_C4REMOTEEX_AIR);
break;
}
}
function onEndCurrentAni_C4(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;
case 1:
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){
obj.sq_IntVectClear();
obj.sq_IntVectPush(3);
obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true);
return;
}
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(sq_GetZPos(obj));
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_C4(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_C4(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1:
local range = 600;
obj.getVar("C4AtkObj").clear_obj_vector();
obj.getVar("C4Tar").clear_obj_vector();
obj.getVar("C4Tar_Boss").clear_obj_vector();
obj.getVar("C4Tar_Named").clear_obj_vector();
obj.getVar("C4Tar_Normal").clear_obj_vector();
local objectManager = obj.getObjectManager();
local objectNumber = objectManager.getCollisionObjectNumber();
for(local i = 0; i < objectNumber; i++){
local targetObj = objectManager.getCollisionObject(i);
if(targetObj && targetObj.isObjectType(OBJECTTYPE_ACTIVE) && targetObj.isEnemy(obj) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(targetObj)) <= range && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(targetObj)) <= range && IsFrontOf(obj,targetObj)){
local activeObj = sq_GetCNRDObjectToActiveObject(targetObj);
if(sq_IsBoss(activeObj)) obj.getVar("C4Tar_Boss").push_obj_vector(activeObj);
else if(sq_IsNamed(activeObj)) obj.getVar("C4Tar_Named").push_obj_vector(activeObj);
else obj.getVar("C4Tar_Normal").push_obj_vector(activeObj);
}
}
local bossNum = obj.getVar("C4Tar_Boss").get_obj_vector_size();
local namedNum = obj.getVar("C4Tar_Named").get_obj_vector_size();
local normalNum = obj.getVar("C4Tar_Normal").get_obj_vector_size();
if(bossNum> 0){
for(local i = 0; i < bossNum; i++){
local targetObj = obj.getVar("C4Tar_Boss").get_obj_vector(i);
if(targetObj){
obj.getVar("C4Tar").push_obj_vector(targetObj);
}
}
}
if(namedNum> 0){
for(local i = 0; i < namedNum; i++){
local targetObj = obj.getVar("C4Tar_Named").get_obj_vector(i);
if(targetObj){
obj.getVar("C4Tar").push_obj_vector(targetObj);
}
}
}
if(normalNum> 0){
for(local i = 0; i < normalNum; i++){
local targetObj = obj.getVar("C4Tar_Normal").get_obj_vector(i);
if(targetObj){
obj.getVar("C4Tar").push_obj_vector(targetObj);
}
}
}
local targetNum = obj.getVar("C4Tar").get_obj_vector_size();
if(targetNum > 0){
obj.getVar("C4Bool").setBool(0, true);
local createMax = sq_GetIntData(obj, SKILL_BYKK_C4, 2);
if(targetNum < createMax) createMax = targetNum;
local offsetX = 65, offsetY = 0, offsetZ = 80, subState = obj.getSkillSubState();
if(subState == 1){offsetX = 30; offsetY = 0; offsetZ = 55;}
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_C4, -1, 3, 1.0);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_C4);
local speedRate = sq_GetLevelData(obj, SKILL_BYKK_C4, 2, skillLevel);
local lifeTime = sq_GetIntData(obj, SKILL_BYKK_C4, 1);
for(local i = 0; i < createMax; i++){
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,offsetY,offsetZ,sq_GetDirection(obj),4,SKILL_BYKK_C4,1,totalDamage,i,lifeTime,speedRate,subState,0,0,0);
}
}
break;
}
return true;
}
function onTimeEvent_C4(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_C4(obj, new_state)
{
if(!obj) return;
}
//G-14手雷
function checkExecutableSkill_GrenadeNone(obj)
{
if (!obj) return false;
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADENONE);
if(loadSlot) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_GRENADENONE);
if (isUse){
obj.sq_IntVectClear();
if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(2);
else obj.sq_IntVectPush(0);
obj.sq_IntVectPush(SKILL_BYKK_GRENADENONE);
obj.sq_AddSetStatePacket(STATE_BYKK_GRENADENONE, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_GrenadeNone(obj)
{
if (!obj) return false;
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADENONE);
if(loadSlot && loadSlot.getRemainLoadNumber() < 1) return false;
return true;
}
function onSetState_GrenadeNone(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
obj.sq_ZStop();
switch(subState){
case 0:
local Ani = obj.sq_GetThrowChargeAni(2);
obj.setCurrentAnimation(Ani);
local grenadeSkillIndex = obj.sq_GetVectorData(datas, 1);
obj.getVar("grenadeSkillIndex").setInt(0, grenadeSkillIndex);
obj.getVar("grenadeSet").setInt(0, 0);
obj.getVar("grenadeBool").setBool(0, true);
if(grenadeSkillIndex == SKILL_BYKK_LOCKONSUPPORT) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/lockonsupport/lockonsupport_atmomentarythrow1_lockon01.ani"), 0, 0);
break;
case 1:
local Ani = obj.sq_GetThrowShootAni(2);
obj.setCurrentAnimation(Ani);
if(obj.getVar("grenadeSkillIndex").getInt(0) == SKILL_BYKK_LOCKONSUPPORT) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/lockonsupport/lockonsupport_atmomentarythrow2_lockon01.ani"), 0, 0);
break;
case 2:
obj.sq_SetCurrentAnimation(ATANI_BYKK_GRENADEAIR);
local grenadeSkillIndex = obj.sq_GetVectorData(datas, 1);
determineNitromotor_bykk(obj, grenadeSkillIndex);
obj.getVar("grenadeSkillIndex").setInt(0, grenadeSkillIndex);
if(grenadeSkillIndex == SKILL_BYKK_LOCKONSUPPORT) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/lockonsupport/lockonsupport_atgrenadeair_lockon01.ani"), 0, 0);
break;
case 100:
local ani = obj.sq_GetStayAni();
obj.setCurrentAnimation(ani);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0));
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) obj.getVar("element_kk").setInt(0, 100);
else obj.getVar("element_kk").setInt(0, 0);
if(attackInfo.isValidElement(ENUM_ELEMENT_WATER)) obj.getVar("element_kk").setInt(1, 100);
else obj.getVar("element_kk").setInt(1, 0);
if(attackInfo.isValidElement(ENUM_ELEMENT_DARK)) obj.getVar("element_kk").setInt(2, 100);
else obj.getVar("element_kk").setInt(2, 0);
if(attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) obj.getVar("element_kk").setInt(3, 100);
else obj.getVar("element_kk").setInt(3, 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_GrenadeNone(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_GRENADENONE, STATE_PRIORITY_AUTO, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
case 2:
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){
obj.sq_IntVectClear();
obj.sq_IntVectPush(3);
obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true);
return;
}
local zpos = sq_GetZPos(obj) + 30;
// if(zpos > 200) zpos = 0;
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(zpos);
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_GrenadeNone(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
if(obj.getVar("grenadeBool").getBool(0) == false) break;
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){
obj.getVar("grenadeSet").setInt(0, 2);
obj.getVar("grenadeBool").setBool(0, false);
}
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){
obj.getVar("grenadeSet").setInt(0, 1);
obj.getVar("grenadeBool").setBool(0, false);
}
break;
}
}
function onKeyFrameFlag_GrenadeNone(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 0://35 0 75
case 1://35 0 65
local skillIndex = obj.getVar("grenadeSkillIndex").getInt(0);
print("skillIndex = "+skillIndex);
local bonusRate = 100;
if(sq_GetSkillLevel(obj, SKILL_BYKK_STRAYBULLETMASTERY) > 0){
bonusRate = bonusRate * (100 + sq_GetLevelData(obj, SKILL_BYKK_STRAYBULLETMASTERY, 0, sq_GetSkillLevel(obj, SKILL_BYKK_STRAYBULLETMASTERY))) / 100;
print("bonusRate22 = "+bonusRate);
}
local exLevel = sq_GetSkillLevel(obj, SKILL_BYKK_GRENADEEX);
if(exLevel > 0) bonusRate = bonusRate * (100 + 10*exLevel) / 100;
if(sq_GetSkillLevel(obj, SKILL_BYKK_N_02X) > 0) bonusRate = bonusRate * (100 + sq_GetIntData(obj, SKILL_BYKK_N_02X, 10) / 10) / 100;
print("bonusRate = "+bonusRate);
bonusRate = bonusRate.tofloat() / 100.0;
local totalDamage = obj.sq_GetBonusRateWithPassive(skillIndex, -1, 0, bonusRate);
print("totalDamageGrenade = "+totalDamage);
local sizeRate = obj.sq_GetBonusRateWithPassive(skillIndex, -1, 1, 1.0) + 100;
if(exLevel > 0) sizeRate = sizeRate * (100 + 5*exLevel) / 100;
print("sizeRate = "+sizeRate);
local prob = 0, time = 0, level = 0;
if(skillIndex == SKILL_BYKK_GRENADELIGHT){
prob = 100;
level = sq_GetSkillLevel(obj, 174) + 15;
time = sq_GetLevelData(obj, skillIndex, 4, sq_GetSkillLevel(obj, skillIndex));
}
else if(skillIndex == SKILL_BYKK_GRENADEWATER){
prob = sq_GetLevelData(obj, skillIndex, 2, sq_GetSkillLevel(obj, skillIndex)) / 10;
level = sq_GetSkillLevel(obj, 174) + 15;
time = sq_GetLevelData(obj, skillIndex, 4, sq_GetSkillLevel(obj, skillIndex));
}
local isEx = 0;
if(sq_GetSkillLevel(obj, SKILL_BYKK_N_02X) > 0 && sq_GetSkillLevel(obj, SKILL_BYKK_STRAYBULLETMASTERY) > 0){
local nowSaveNum = obj.getVar("grenadeExSet").getInt(skillIndex);
if(nowSaveNum < 2){
obj.getVar("grenadeExSet").setInt(skillIndex, nowSaveNum + 1);
if(nowSaveNum + 1 == 2) obj.getVar("grenadeUiBool").setBool(skillIndex, true);
}
else{
isEx = 1;
sizeRate = 300;
obj.getVar("grenadeExSet").setInt(skillIndex, 0);
obj.getVar("grenadeUiBool").setBool(skillIndex, false);
totalDamage = totalDamage * sq_GetIntData(obj, SKILL_BYKK_N_02X, 9) / 100;
}
}
local ptlSelect = obj.getVar("grenadeSet").getInt(0);
local offsetZ = 75;
if(flagIndex == 1){offsetZ = 65;ptlSelect = 3;}
if(skillIndex == SKILL_BYKK_LOCKONSUPPORT){
totalDamage = obj.sq_GetBonusRateWithPassive(skillIndex, -1, 0, 1.0);
local hitMax = sq_GetIntData(obj, skillIndex, 0);
local sizeRate = sq_GetIntData(obj, skillIndex, 1);
local prob = obj.sq_GetBonusRateWithPassive(skillIndex, -1, 1, 1.0) + 100;
local time = obj.sq_GetBonusRateWithPassive(skillIndex, -1, 3, 1.0) + 100;
if(ptlSelect == 1) ptlSelect = 0;
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,35,0,offsetZ,sq_GetDirection(obj),4,skillIndex,1,totalDamage,sizeRate,hitMax,ptlSelect,prob,time,0,0);
break;
}
else if(skillIndex == SKILL_BYKK_GRAVITYGRENADE){
totalDamage = obj.sq_GetBonusRateWithPassive(skillIndex, -1, 2, 1.0);
local totalDamageExp = obj.sq_GetBonusRateWithPassive(skillIndex, -1, 3, 1.0);
local lifeTime = obj.sq_GetBonusRateWithPassive(skillIndex, -1, 0, 1.0) + 100;
local hitTime = obj.sq_GetBonusRateWithPassive(skillIndex, -1, 1, 1.0) + 100;
local sizeRate = sq_GetIntData(obj, skillIndex, 1);
if(ptlSelect == 1) ptlSelect = 0;
//print("lifeTime = "+lifeTime);
//print("hitTime = "+hitTime);
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,35,0,offsetZ,sq_GetDirection(obj),4,skillIndex,1,totalDamage,totalDamageExp,lifeTime,hitTime,ptlSelect,sizeRate,0,0);
break;
}
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,35,0,offsetZ,sq_GetDirection(obj),4,skillIndex,1,totalDamage,sizeRate,isEx,ptlSelect,prob,time,level,0);
if(isEx > 0){
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){
switch(skillIndex){
case SKILL_BYKK_GRENADENONE: obj.sq_PlaySound("R_FG_SBR_FIRE"); break;
case SKILL_BYKK_GRENADELIGHT: obj.sq_PlaySound("R_FG_SBR_FLASH"); break;
case SKILL_BYKK_GRENADEWATER: obj.sq_PlaySound("R_FG_SBR_ICE"); break;
}
print("test");
}
}
else obj.sq_PlaySound("FG_GRENADE");
break;
}
return true;
}
function onTimeEvent_GrenadeNone(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 1:
if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0 && sq_GetSkillLevel(obj, 33) > 0){
sq_clearSkillData();
sq_setLevelData(obj, 33, 0, 999999, 0);
obj.sq_IntVectClear();
obj.sq_IntVectPush(33);
obj.sq_AddSetStatePacket(17, STATE_PRIORITY_USER, true);
}
else{
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
}
break;
}
}
function onEndState_GrenadeNone(obj, new_state)
{
if(!obj) return;
}
//M18阔剑地雷
function checkExecutableSkill_M18Claymore(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_M18CLAYMORE);
if (isUse){
obj.sq_IntVectClear();
if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(1);
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_M18CLAYMORE, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_M18Claymore(obj)
{
if (!obj) return false;
local state = obj.getState();
if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){
if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR);
if(loadSlot){
local loadNumber = loadSlot.getRemainLoadNumber();
if(loadNumber > 0) return true;
else return false;
}
else return false;
}
else return false;
}
return true;
}
function onSetState_M18Claymore(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
obj.sq_ZStop();
switch(subState){
case 0:
if(sq_GetSkillLevel(obj, SKILL_BYKK_N_02X) > 0){
obj.sq_SetCurrentAnimation(ATANI_BYKK_ATM18CLAYMORE_GROUND_NO2X_BODY);
obj.getVar("grenadeBool").setBool(0, false);
obj.getVar("grenadeSet").setInt(0, 0);
}
else obj.sq_SetCurrentAnimation(ATANI_BYKK_ATM18CLAYMORE_START_BODY);
break;
case 1:
if(sq_GetSkillLevel(obj, SKILL_BYKK_N_02X) > 0) obj.sq_SetCurrentAnimation(ATANI_BYKK_ATM18CLAYMORE_AIR_NO2X_BODY);
else obj.sq_SetCurrentAnimation(ATANI_BYKK_ATM18CLAYMORE_AIRSTART_BODY);
determineNitromotor_bykk(obj, 0);
break;
}
obj.getVar("M18ClayMoreObj").clear_obj_vector();
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_M18Claymore(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;
case 1:
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){
obj.sq_IntVectClear();
obj.sq_IntVectPush(3);
obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true);
return;
}
local zpos = sq_GetZPos(obj) + 30;
// if(zpos > 200) zpos = 0;
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(zpos);
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_M18Claymore(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(obj.getVar("grenadeBool").getBool(0) == false){
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){
obj.getVar("grenadeSet").setInt(0, 2);
obj.getVar("grenadeBool").setBool(0, true);
}
}
break;
}
}
function onKeyFrameFlag_M18Claymore(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 101:
case 201:
case 102:
case 202:
//print("flagIndex = "+flagIndex);
obj.sq_PlaySound("R_NEO_GRENADE_THROW");
obj.sq_PlaySound("NEO_M18_DROP");
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_M18CLAYMORE, -1, 0, 1.0);
local hitMax = sq_GetIntData(obj, SKILL_BYKK_M18CLAYMORE, 3);
local lifeTime = sq_GetIntData(obj, SKILL_BYKK_M18CLAYMORE, 7);
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_M18CLAYMORE, 15);
local prob = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_M18CLAYMORE, -1, 2, 1.0) + 100;
local time = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_M18CLAYMORE, -1, 3, 1.0) + 100;
local ptlSelect = obj.getVar("grenadeSet").getInt(0);
local offsetX = 50, offsetZ = 0, subtype = 1;
if(flagIndex == 201){offsetX = 35; offsetZ = 35;}
if(flagIndex > 200) {
switch(flagIndex){
case 201: offsetX = 35; offsetZ = 80; break;
case 202: offsetX = 35; offsetZ = 35; break;
}
subtype = 3;
}
createSkillPassive_ATGunner_bykk(obj,obj,PASSIVEOBJ_BYKK_ATGUNNER,offsetX,0,offsetZ,sq_GetDirection(obj),4,SKILL_BYKK_M18CLAYMORE,subtype,totalDamage,hitMax,lifeTime,sizeRate,prob,time,flagIndex,ptlSelect);
break;
}
return true;
}
function onTimeEvent_M18Claymore(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_M18Claymore(obj, new_state)
{
if(!obj) return;
}
//G-35L感电手雷
function checkExecutableSkill_GrenadeLight(obj)
{
if (!obj) return false;
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADELIGHT);
if(loadSlot) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CRUXOFSHAPIEL);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_CRUXOFSHAPIEL, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_GrenadeLight(obj)
{
if (!obj) return false;
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADELIGHT);
if(loadSlot && loadSlot.getRemainLoadNumber() < 1) return false;
return true;
}
function onSetState_GrenadeLight(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
obj.sq_ZStop();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(ATANI_BYKK_NITROMOTORJUMP);
obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atnitromotor/up_nitromotor_dodge1.ani"), 0, 0);
local zPos = sq_GetZPos(obj);
local speed = 300;
if(zPos > 100) speed = 200;
if(zPos > 120) speed = 130;
if(zPos > 160) speed = 80;
if(zPos > 220) speed = 30;
sq_SetZVelocity(obj,speed,0);
break;
case 1:
obj.sq_SetCurrentAnimation(ATANI_BYKK_NITROMOTORJUMP);
obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atnitromotor/side_nitromotor_dodge1.ani"), 0, 0);
local zPos = sq_GetZPos(obj);
local speed = 300;
if(zPos > 100) speed = 200;
if(zPos > 120) speed = 130;
if(zPos > 160) speed = 80;
if(zPos > 220) speed = 30;
sq_SetZVelocity(obj,speed,0);
local speed = 400.0;
if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed);
else sq_SetVelocity(obj, 0, -speed);
break;
case 2:
obj.sq_SetCurrentAnimation(ATANI_BYKK_NITROMOTORDOWN);
obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/4_spitfire/atnitromotor/down_nitromotor_dodge3.ani"), 0, 0);
sq_SetZVelocity(obj,-1500,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_GrenadeLight(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true);
return;
}
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(sq_GetZPos(obj));
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_GrenadeLight(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
if(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){
sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj)));
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atgunner/4_spitfire_bykk/ap_standbyready.nut")){
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_STANDBYREADY, STATE_PRIORITY_AUTO, true);
return;
}
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(sq_GetZPos(obj));
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true);
}
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT){
local speed = 600.0;
if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed);
else sq_SetVelocity(obj, 0, -speed);
}
else{
local speed = 400.0;
if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed);
else sq_SetVelocity(obj, 0, -speed);
}
case 0:
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_JUMP_ATTACK, STATE_PRIORITY_AUTO, true);
}
break;
case 2:
if(sq_GetZPos(obj) <= 0){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
}
break;
}
}
function onKeyFrameFlag_GrenadeLight(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_GrenadeLight(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_GrenadeLight(obj, new_state)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 2:
if(new_state == STATE_STAND){
if(sq_GetIntData(obj, SKILL_BYKK_GRENADENONE, 18) > 0){
if(new_state == STATE_STAND){
local skillIndex = [SKILL_BYKK_GRENADENONE,SKILL_BYKK_GRENADEWATER,SKILL_BYKK_GRENADELIGHT];
for(local i = 0; i < 3; i++){
if(sq_GetSkillLevel(obj, skillIndex[i]) > 0){
local loadSlot = obj.sq_GetSkillLoad(skillIndex[i]);
if(loadSlot){
local loadNumber = loadSlot.getRemainLoadNumber();
local loadMax = sq_GetIntData(obj, skillIndex[i], 0);
if(loadNumber < loadMax){
loadSlot.increaseLoadCount(loadMax - loadNumber);
// print("test"+i+" : "+loadSlot.getRemainLoadNumber());
}
}
}
}
}
}
}
break;
}
}
//G-18C冰冻手雷
function checkExecutableSkill_GrenadeWater(obj)
{
if (!obj) return false;
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADELIGHT);
if(loadSlot) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CRUXOFSHAPIEL);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_CRUXOFSHAPIEL, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_GrenadeWater(obj)
{
if (!obj) return false;
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_GRENADEWATER);
if(loadSlot && loadSlot.getRemainLoadNumber() < 1) return false;
return true;
}
function onSetState_GrenadeWater(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(0);
break;
}
}
function onEndCurrentAni_GrenadeWater(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_GrenadeWater(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_GrenadeWater(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_GrenadeWater(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_GrenadeWater(obj, new_state)
{
if(!obj) return;
}
//镭射狙击
function checkExecutableSkill_LockOnSupport(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_LOCKONSUPPORT);
if (isUse){
obj.sq_IntVectClear();
if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(2);
else obj.sq_IntVectPush(0);
obj.sq_IntVectPush(SKILL_BYKK_LOCKONSUPPORT);
obj.sq_AddSetStatePacket(STATE_BYKK_GRENADENONE, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_LockOnSupport(obj)
{
if (!obj) return false;
local state = obj.getState();
if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){
if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR);
if(loadSlot){
local loadNumber = loadSlot.getRemainLoadNumber();
if(loadNumber > 0) return true;
else return false;
}
else return false;
}
else return false;
}
return true;
}
function onSetState_LockOnSupport(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(0);
break;
}
}
function onEndCurrentAni_LockOnSupport(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_LockOnSupport(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_LockOnSupport(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_LockOnSupport(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_LockOnSupport(obj, new_state)
{
if(!obj) return;
}
//G-61重力手雷
function checkExecutableSkill_GravityGrenade(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_GRAVITYGRENADE);
if (isUse){
obj.sq_IntVectClear();
if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(2);
else obj.sq_IntVectPush(0);
obj.sq_IntVectPush(SKILL_BYKK_GRAVITYGRENADE);
obj.sq_AddSetStatePacket(STATE_BYKK_GRENADENONE, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_GravityGrenade(obj)
{
if (!obj) return false;
local state = obj.getState();
if(state == STATE_JUMP || state == STATE_JUMP_ATTACK || state == STATE_BYKK_GRENADELIGHT || state == STATE_BYKK_STANDBYREADY){
if(sq_GetSkillLevel(obj, SKILL_BYKK_NITROMOTOR) > 0){
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_NITROMOTOR);
if(loadSlot){
local loadNumber = loadSlot.getRemainLoadNumber();
if(loadNumber > 0) return true;
else return false;
}
else return false;
}
else return false;
}
return true;
}
function onSetState_GravityGrenade(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(0);
break;
}
}
function onEndCurrentAni_GravityGrenade(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_GravityGrenade(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_GravityGrenade(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_GravityGrenade(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_GravityGrenade(obj, new_state)
{
if(!obj) return;
}