Rindro-Sqr/user/114.66.51.249/4_fighter_3.c

1191 lines
47 KiB
C

///普通攻击
function onAfterSetState_Fighter_Attack(obj, state, datas, isResetTimer)
{
if(!obj) return;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return;
local attackIndex = obj.getAttackIndex();
switch(attackIndex){
case 0:
//obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/poisonsnake/attack01_b_boom02_normal_02.ani"), 0, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/3_streetfighter_bykk/poisonsnake/attack01_b_boom02_normal_02.ani", 0, 0, 0);
break;
case 1:
// obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/poisonsnake/attack02_b_boom02_normal_02.ani"), 0, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/3_streetfighter_bykk/poisonsnake/attack02_b_boom02_normal_02.ani", 0, 0, 0);
break;
case 2:
// obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/poisonsnake/attack03_b_boom02_normal_02.ani"), 0, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/3_streetfighter_bykk/poisonsnake/attack03_b_boom02_normal_02.ani", 0, 0, 0);
break;
case 3:
// obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/poisonsnake/attack04_b_boom02_normal_02.ani"), 0, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/3_streetfighter_bykk/poisonsnake/attack04_b_boom02_normal_02.ani", 0, 0, 0);
break;
case 4:
// local currentAni = obj.getCurrentAnimation();
// print("delaySum = "+currentAni.getDelaySum(0, 3));
// print("delaySum2 = "+currentAni.getDelaySum(false));
// obj.setTimeEvent(1, currentAni.getDelaySum(0, 3) / 22, 22, true);
obj.getVar("fwAttackSet").setInt(0, sq_GetXPos(obj));
obj.getVar("fwAttackBool").setBool(0, false);
obj.getVar("fwAttackBool").setBool(1, false);
// obj.setTimeEvent(2, currentAni.getDelaySum(false) / 55, 55, true);
break;
}
}
function onProcCon_Fighter_Attack(obj)
{
if(!obj) return;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return;
if(obj.getVar("fwAttackBool").getBool(1) == false){
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("fwAttackBool").setBool(0, 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){
obj.getVar("fwAttackBool").setBool(0, true);
obj.getVar("fwAttackBool").setBool(1, true);
}
}
local attackIndex = obj.getAttackIndex();
switch(attackIndex){
case 4:
local currentAni = obj.getCurrentAnimation();
local frameIndex = sq_GetCurrentFrameIndex(obj);
local stateTime = obj.sq_GetStateTimer();
if(obj.getVar("fwAttackBool").getBool(0)) return;
if(obj.getVar("fwAttackBool").getBool(0) == false && frameIndex <= 7){
local fullTime = currentAni.getDelaySum(0, 7);
local offset = 120;
if(obj.getVar("fwAttackBool").getBool(1)) offset = 180;
local v = sq_GetUniformVelocity(0, 120, stateTime, fullTime);
local dstX = sq_GetDistancePos(obj.getVar("fwAttackSet").getInt(0), sq_GetDirection(obj), v);
if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);
else obj.getVar("fwAttackBool").setBool(0, true);
}
break;
}
}
function onProc_Fighter_Attack(obj)
{
if(!obj) return;
local growType = sq_getGrowType(obj);
switch(growType){
case 3:
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return;
local attackIndex = obj.getAttackIndex();
switch(attackIndex){
case 4:
local currentAni = obj.getCurrentAnimation();
local frameIndex = sq_GetCurrentFrameIndex(obj);
local jumpTime = currentAni.getDelaySum(0, 3);
local stateTime = obj.sq_GetStateTimer();
if(frameIndex <= 3){
local v = sq_GetAccel(0, 60, stateTime, jumpTime, true);
sq_setCurrentAxisPos(obj, 2, v);
}
else{
local jumpTime = currentAni.getDelaySum(4, 6);
local stateTime = obj.sq_GetStateTimer();
local v = sq_GetAccel(60, 0, stateTime - jumpTime, jumpTime, false);
sq_setCurrentAxisPos(obj, 2, v);
}
break;
}
break;
}
}
function onTimeEvent_Fighter_Attack(obj, timeEventIndex, timeEventCount)
{
if(!obj) return true;
}
function onKeyFrameFlag_Fighter_Attack(obj, flagIndex)
{
if(!obj) return false;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return false;
switch(flagIndex){
case 1:
local attackIndex = obj.getAttackIndex();
if(attackIndex == 4) sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/3_streetfighter_bykk/poisonsnake/attack05_b_boom03_normal_01.ani", 0, 0, 0);
break;
}
return true;
}
function onAttack_Fighter_Attack(obj, damager, boundingBox, isStuck)
{
if(!obj || isStuck) return;
if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ENCHANTPOISON)) return;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)){
if(damager.getVar("SFPoison").get_obj_vector_size() > 0){
local poisonObj = damager.getVar("SFPoison").get_obj_vector(0);
if(poisonObj){
local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj);
local skillLevel = sq_GetSkillLevel(obj, SKILL_FWBYKK_ENCHANTPOISON);
local damage = sq_GetLevelData(obj, SKILL_FWBYKK_ENCHANTPOISON, 9, skillLevel);
print("damageAddSet = "+damage);
local baseDamage = colObj.getVar("damage").getInt(0);
colObj.getVar("damage").setInt(0, baseDamage + damage);
}
}
return;
}
if(damager.getVar("SFPoison").get_obj_vector_size() > 0){
local poisonObj = damager.getVar("SFPoison").get_obj_vector(0);
if(poisonObj){
local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj);
local attackIndex = obj.getAttackIndex();
local bonusRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100;
local damage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONSNAKE, -1, 17 + attackIndex, bonusRate.tofloat() / 1000.0) + 100;
print("damageAddSet = "+damage);
local baseDamage = colObj.getVar("damage").getInt(0);
colObj.getVar("damage").setInt(0, baseDamage + damage);
}
}
}
function getAttackCancelStartFrameSize_Fighter(obj)
{
local maxAttackNumber = obj.sq_GetAttackCancelStartFrameSize();
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF))
maxAttackNumber = 4;
return maxAttackNumber;
}
function getAttackCancelStartFrame_Fighter(obj, index)
{
if(!obj) return null;
local frm = 0;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)){
switch(index){
case 0:frm = 3; break;
case 1:frm = 3; break;
case 2:frm = 3; break;
case 3:frm = 3; break;
}
}
else frm = obj.sq_GetAttackCancelStartFrame(index);
return frm;
}
function getAttackAni_Fighter(obj, index)
{
if(!obj) return null;
local animation = obj.sq_GetAttackAni(index);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF))
animation = obj.sq_GetCustomAni(ANI_FWBYKK_POISONSNAKEATTACK01_BODY + index);
return animation;
}
function getDefaultAttackInfo_Fighter(obj, index)
{
if(!obj) return null;
// print("index = "+index);
local attackInfo = obj.sq_GetDefaultAttackInfo(index);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)){
attackInfo = sq_GetCustomAttackInfo(obj, ATK_FWBYKK_POISONSNAKECOMBO1 + index);
local bonusRate = 1.0;// + sq_GetLevelData(obj, 174, 0, sq_GetSkillLevel(obj, 174)).tofloat() / 1000.0;
sq_SetCurrentAttackBonusRate(attackInfo, obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONSNAKE, -1, 3 + index, bonusRate));
}
return attackInfo;
}
///前冲攻击
function onAfterSetState_Fighter_DashAttack(obj, state, datas, isResetTimer)
{
if(!obj) return;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return;
obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/poisonsnake/dashbody_effect.ani"), 0, 0);//effect/animation/3_streetfighter_bykk/poisonsnake/dash_body_effect.ani
obj.getVar("fwDashAttackSet").setInt(0, sq_GetXPos(obj));
obj.getVar("fwDashAttackBool").setBool(0, false);
}
function onProcCon_Fighter_DashAttack(obj)
{
if(!obj) return;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return;
if(obj.getVar("fwDashAttackBool").getBool(1) == false){
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("fwDashAttackBool").setBool(0, true);
}
}
else return;
local currentAni = obj.getCurrentAnimation();
local frameIndex = sq_GetCurrentFrameIndex(obj);
local stateTime = obj.sq_GetStateTimer();
if(obj.getVar("fwDashAttackBool").getBool(0) == false){
local fullTime = currentAni.getDelaySum(0, 3);
local v = sq_GetUniformVelocity(0, 125, stateTime, fullTime);
local dstX = sq_GetDistancePos(obj.getVar("fwDashAttackSet").getInt(0), sq_GetDirection(obj), v);
if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);
else obj.getVar("fwDashAttackBool").setBool(0, true);
}
}
function onAttack_Fighter_DashAttack(obj, damager, boundingBox, isStuck)
{
if(!obj || isStuck) return;
if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ENCHANTPOISON)) return;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return;
if(damager.getVar("SFPoison").get_obj_vector_size() > 0){
local poisonObj = damager.getVar("SFPoison").get_obj_vector(0);
if(poisonObj){
local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj);
local attackIndex = obj.getAttackIndex();
local bonusRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100;
local damage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONSNAKE, -1, 22, bonusRate.tofloat() / 1000.0) + 100;
print("damageAddSet = "+damage);
local baseDamage = colObj.getVar("damage").getInt(0);
colObj.getVar("damage").setInt(0, baseDamage + damage);
}
}
}
function getDashAttackAni_Fighter(obj)
{
if(!obj) return null;
local animation = obj.sq_GetDashAttackAni();
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF))
animation = sq_GetCustomAni(obj, ANI_FWBYKK_POISONSNAKEDASH_BODY);
return animation;
}
function getDashAttackInfo_Fighter(obj)
{
if(!obj) return null;
local attackInfo = obj.sq_GetDashAttackInfo();
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)){
attackInfo = sq_GetCustomAttackInfo(obj, ATK_FWBYKK_POISONSNAKEDASHATTACK);
local bonusRate = 1.0;// + sq_GetLevelData(obj, 174, 1, sq_GetSkillLevel(obj, 174)).tofloat() / 1000.0;
// print("bonus : "+obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONSNAKE, -1, 8, bonusRate));
sq_SetCurrentAttackBonusRate(attackInfo, obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONSNAKE, -1, 8, bonusRate));
}
return attackInfo;
}
//跳跃攻击
function onAfterSetState_Fighter_JumpAttack(obj, state, datas, isResetTimer)
{
if(!obj) return;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return;
obj.sq_AddStateLayerAnimation(10003,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/poisonsnake/jump_a_glow_red.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(10002,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/poisonsnake/jump_a_attack_dodge.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/3_streetfighter_bykk/poisonsnake/jump_a_attack_normal.ani"), 0, 0);
}
function onKeyFrameFlag_Fighter_JumpAttack(obj, flagIndex)
{
if(!obj) return false;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return false;
switch(flagIndex){
case 1:
sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/3_streetfighter_bykk/poisonsnake/jump_b_boom01_normal_01.ani", 0, 0, 0);
break;
}
return true;
}
function onAttack_Fighter_JumpAttack(obj, damager, boundingBox, isStuck)
{
if(!obj || isStuck) return;
if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_ENCHANTPOISON)) return;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)) return;
if(damager.getVar("SFPoison").get_obj_vector_size() > 0){
local poisonObj = damager.getVar("SFPoison").get_obj_vector(0);
if(poisonObj){
local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj);
local attackIndex = obj.getAttackIndex();
local bonusRate = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_ENCHANTPOISON, -1, 10, 1.0) + 100;
local damage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONSNAKE, -1, 23, bonusRate.tofloat() / 1000.0) + 100;
print("damageAddSet = "+damage);
local baseDamage = colObj.getVar("damage").getInt(0);
colObj.getVar("damage").setInt(0, baseDamage + damage);
}
}
}
function getJumpAttackAni_Fighter(obj)
{
if(!obj) return null;
local animation = obj.sq_GetJumpAttackAni();
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF))
animation = sq_GetCustomAni(obj, ANI_FWBYKK_POISONSNAKEJUMP_BODY);
return animation;
}
function getJumpAttackInfo_Fighter(obj)
{
if(!obj) return null;
local attackInfo = obj.sq_GetJumpAttackInfo();
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_POISONSNAKE_BUFF)){
attackInfo = sq_GetCustomAttackInfo(obj, CUSTOM_ATTACK_FIGHTER_POISONSNAKEJUMPATTACK);
local bonusRate = 1.0;// + sq_GetLevelData(obj, 174, 2, sq_GetSkillLevel(obj, 174)).tofloat() / 1000.0;
sq_SetCurrentAttackBonusRate(attackInfo, obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONSNAKE, -1, 9, bonusRate));
}
return attackInfo;
}
///////////////////////////////////////////////////////////////////////////女散打
//雷霆之舞
function checkExecutableSkill_LightningShift(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_LIGHTNINGSHIFT);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_LIGHTNINGSHIFT, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_LightningShift(obj)
{
if (!obj) return false;
return true;
}
function onSetState_LightningShift(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
print("subState = "+subState);
obj.sq_StopMove();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(ANI_FWBYKK_LIGHTNINGSHIFTATTACK01_BODY);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.75, 0.75);
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(0, 0);
local speedRate = delaySum * 100 / 49;
obj.getVar("LightningShiftSet").setInt(6, speedRate);
obj.getVar("LightningShiftTar").clear_obj_vector();
obj.getVar("LightningShiftTar_Boss").clear_obj_vector();
obj.getVar("LightningShiftTar_Named").clear_obj_vector();
obj.getVar("LightningShiftTar_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_GetYPos(obj) - sq_GetYPos(targetObj)) <= 300){
local activeObj = sq_GetCNRDObjectToActiveObject(targetObj);
if(sq_IsBoss(activeObj)) obj.getVar("LightningShiftTar_Boss").push_obj_vector(activeObj);
else if(sq_IsNamed(activeObj)) obj.getVar("LightningShiftTar_Named").push_obj_vector(activeObj);
else obj.getVar("LightningShiftTar_Normal").push_obj_vector(activeObj);
}
}
local bossNum = obj.getVar("LightningShiftTar_Boss").get_obj_vector_size();
local namedNum = obj.getVar("LightningShiftTar_Named").get_obj_vector_size();
local normalNum = obj.getVar("LightningShiftTar_Normal").get_obj_vector_size();
if(bossNum> 0){
for(local i = 0; i < bossNum; i++){
local targetObj = obj.getVar("LightningShiftTar_Boss").get_obj_vector(i);
if(targetObj){
obj.getVar("LightningShiftTar").push_obj_vector(targetObj);
}
}
}
if(namedNum> 0){
for(local i = 0; i < namedNum; i++){
local targetObj = obj.getVar("LightningShiftTar_Named").get_obj_vector(i);
if(targetObj){
obj.getVar("LightningShiftTar").push_obj_vector(targetObj);
}
}
}
if(normalNum> 0){
for(local i = 0; i < normalNum; i++){
local targetObj = obj.getVar("LightningShiftTar_Normal").get_obj_vector(i);
if(targetObj){
obj.getVar("LightningShiftTar").push_obj_vector(targetObj);
}
}
}
local targetNum = obj.getVar("LightningShiftTar").get_obj_vector_size();
if(targetNum > 0){
local randomNum = 0;
if(targetNum > 1) randomNum = sq_getRandom(0, targetNum);
obj.getVar("LightningShiftSet").setInt(0, randomNum);
obj.getVar("LightningShiftSet").setInt(1, sq_GetXPos(obj));
obj.getVar("LightningShiftSet").setInt(2, sq_GetYPos(obj));
obj.getVar("LightningShiftSet").setInt(3, sq_GetZPos(obj));
local timeEventMax = (3000 / speedRate).tointeger();
obj.getVar("LightningShiftSet").setInt(4, timeEventMax);
obj.setTimeEvent(1, 2, timeEventMax, true);
}
//sq_SetMyShake(obj, 10, 120);
break;
case 1:
obj.sq_SetCurrentAnimation(ANI_FWBYKK_LIGHTNINGSHIFTATTACK02_BODY);
break;
case 2:
obj.sq_SetCurrentAnimation(ANI_FWBYKK_LIGHTNINGSHIFTATTACK03_BODY);
break;
case 3:
obj.sq_SetCurrentAnimation(ANI_FWBYKK_LIGHTNINGSHIFTATTACK04_BODY);
obj.getVar("LightningShiftSet").setInt(1, sq_GetXPos(obj));
obj.setTimeEvent(2, 5, 28, true);
break;
case 4:
obj.sq_SetCurrentAnimation(ANI_FWBYKK_LIGHTNINGSHIFTATTACK05_BODY);
obj.getVar("LightningShiftSet").setInt(1, sq_GetXPos(obj));
obj.setTimeEvent(2, 5, 28, true);
break;
case 5:
obj.sq_SetCurrentAnimation(ANI_FWBYKK_LIGHTNINGSHIFTATTACK06_BODY);
break;
case 6:
obj.sq_SetCurrentAnimation(ANI_FWBYKK_LIGHTNINGSHIFTATTACK07_BODY);
break;
case 7:
obj.sq_SetCurrentAnimation(ANI_FWBYKK_LIGHTNINGSHIFTATTACK08_BODY);
// obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/skl95_bykk/lightningshift/lightningshiftattack08effect_00.ani"), 0, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/2_striker_bykk/lightningshift/lightningshiftattack08effect_00.ani", 0, 1, 0);
break;
}
obj.getVar("LightningShiftBool").setBool(subState, true);
if(subState <= 6){
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LIGHTNINGSHIFT, -1, 0, 1.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_LIGHTNINGSHIFT01 + subState));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/2_striker_bykk/lightningshift/lightningshiftdasheffect01_00.ani", 0, 1, 0);
}
else {
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LIGHTNINGSHIFT, -1, 7, 1.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_LIGHTNINGSHIFTFINISH));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
}
if(subState == 4 || subState == 5){// || subState == 6
local targetNum = obj.getVar("LightningShiftTar").get_obj_vector_size();
if(targetNum > 0){
local randomNum = 0;
if(targetNum > 1) randomNum = sq_getRandom(0, targetNum);
if(subState == 6) randomNum = 0;
if(randomNum != 0 && randomNum == obj.getVar("LightningShiftSet").getInt(0))
obj.getVar("LightningShiftSet").setInt(0, randomNum);
obj.getVar("LightningShiftSet").setInt(1, sq_GetXPos(obj));
obj.getVar("LightningShiftSet").setInt(2, sq_GetYPos(obj));
obj.getVar("LightningShiftSet").setInt(3, sq_GetZPos(obj));
local timeEventMax = [14,14,14,14,15,20,20];
obj.getVar("LightningShiftSet").setInt(4, timeEventMax[subState]);
local delaySum = [140,140,140,140,150,100,200];
local delay = delaySum[subState] * obj.getVar("LightningShiftSet").getInt(6) / 100;
obj.setTimeEvent(1, delay.tointeger() / timeEventMax[subState], timeEventMax[subState], true);
local targetObj = obj.getVar("LightningShiftTar").get_obj_vector(randomNum);
local x1 = sq_GetXPos(obj), x2 = sq_GetXPos(targetObj), direction = sq_GetDirection(obj);
if((x1 > x2 && direction == ENUM_DIRECTION_RIGHT) || (x1 < x2 && direction == ENUM_DIRECTION_LEFT)) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(direction));
}
else{
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);
}
}
// local currentAni = obj.getCurrentAnimation();
//currentAni.setSpeedRate(50.0);//速度率
if(subState > 0){
if(subState < 7) obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.75, 0.75);
else obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.5, 1.5);
}
}
function onEndCurrentAni_LightningShift(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(obj.getVar("LightningShiftTar").get_obj_vector_size() < 1){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
return;
}
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
if(subState == 1 || subState == 3 || subState == 5){
sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj)));
}
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(STATE_BYKK_LIGHTNINGSHIFT, STATE_PRIORITY_AUTO, true);
break;
case 7:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_LightningShift(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){
if(sq_GetZPos(obj) > 0){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(sq_GetZPos(obj));
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true);
}
else{
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
}
}
break;
}
}
function onKeyFrameFlag_LightningShift(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 102:
local direction = sq_GetDirection(obj);
if(direction == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, 100.0);
else sq_SetVelocity(obj, 0, -100.0);
break;
case 103:
// if(subState == 2){
// }
break;
case 101:
// case 103:
// case 104:
// case 105:
// case 106:
local targetNum = obj.getVar("LightningShiftTar").get_obj_vector_size();
if(targetNum > 0){
local randomNum = 0;
if(targetNum > 1) randomNum = sq_getRandom(0, targetNum);
if(flagIndex == 106) randomNum = 0;
obj.getVar("LightningShiftSet").setInt(0, randomNum);
obj.getVar("LightningShiftSet").setInt(1, sq_GetXPos(obj));
obj.getVar("LightningShiftSet").setInt(2, sq_GetYPos(obj));
obj.getVar("LightningShiftSet").setInt(3, sq_GetZPos(obj));
local timeEventMax = [14,20,14,14,15,20,20];
obj.getVar("LightningShiftSet").setInt(4, timeEventMax[flagIndex - 101]);
local delaySum = [140,100,140,140,150,100,200];
local delay = delaySum[flagIndex - 101] * obj.getVar("LightningShiftSet").getInt(6) / 100;
obj.setTimeEvent(1, delay.tointeger() / timeEventMax[flagIndex - 101], timeEventMax[flagIndex - 101], true);
local targetObj = obj.getVar("LightningShiftTar").get_obj_vector(randomNum);
local x1 = sq_GetXPos(obj), x2 = sq_GetXPos(targetObj), direction = sq_GetDirection(obj);
if((x1 > x2 && direction == ENUM_DIRECTION_RIGHT) || (x1 < x2 && direction == ENUM_DIRECTION_LEFT)) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(direction));
}
else{
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
}
break;
case 201:
sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/2_striker_bykk/lightningshift/lightningshiftattack06smoke_00.ani", 0, 1, 0);
break;
}
return true;
}
function onTimeEvent_LightningShift(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 1:
local readjustPos01 = 0, readjustPos02 = 0, offsetX = 0;
if(obj.getSkillSubState() == 4 || obj.getSkillSubState() == 5) readjustPos01 = 50;
else if(obj.getSkillSubState() == 0) offsetX = -60;
else if(obj.getSkillSubState() == 6) readjustPos02 = 50;
local tarNum = obj.getVar("LightningShiftSet").getInt(0);
local timeEventMax = obj.getVar("LightningShiftSet").getInt(4);
local targetObj = obj.getVar("LightningShiftTar").get_obj_vector(tarNum);
if(targetObj){// && targetObj.getState() != STATE_DIE
local direction = sq_GetDirection(obj);
local vx = sq_GetUniformVelocity(obj.getVar("LightningShiftSet").getInt(1), sq_GetDistancePos(sq_GetXPos(targetObj), direction, 30 + offsetX), timeEventCount, timeEventMax);
local vy = sq_GetUniformVelocity(obj.getVar("LightningShiftSet").getInt(2), sq_GetYPos(targetObj), timeEventCount, timeEventMax);
local vz = sq_GetUniformVelocity(obj.getVar("LightningShiftSet").getInt(3) + readjustPos02, sq_GetZPos(targetObj) + readjustPos01, timeEventCount, timeEventMax);
sq_setCurrentAxisPos(obj, 0, vx);
sq_setCurrentAxisPos(obj, 1, vy);
sq_setCurrentAxisPos(obj, 2, vz);
}
break;
case 2:
local v = sq_GetUniformVelocity(0, 100, timeEventCount, 28);
local dstX = sq_GetDistancePos(obj.getVar("LightningShiftSet").getInt(1), sq_GetDirection(obj), v);
sq_setCurrentAxisPos(obj, 0, dstX);
break;
}
}
function onEndState_LightningShift(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_BYKK_LIGHTNINGSHIFT) sq_SimpleMoveToNearMovablePos(obj,200);
}
function onAttack_LightningShift(obj, damager, boundingBox, isStuck)
{
if(isStuck) return;
if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return;
local subState = obj.getSkillSubState();
if(obj.getVar("LightningShiftBool").getBool(subState)){
obj.getVar("LightningShiftBool").setBool(subState, false);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LIGHTNINGSHIFT, -1, 8, 1.0), subtype = 1;
if(subState == 7){totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LIGHTNINGSHIFT, -1, 15, 1.0);subtype = 2;}
// sq_BinaryStartWrite();
// sq_BinaryWriteDword(subState);
// sq_BinaryWriteDword(totalDamage);
// sq_SendCreatePassiveObjectPacket(obj, passiveObjNum, 0, 0, 0, sq_GetCenterZPos(boundingBox), sq_GetDirection(obj));
createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,0,sq_GetCenterZPos(boundingBox),sq_GetDirection(obj),2,SKILL_BYKK_LIGHTNINGSHIFT,subtype,subState,totalDamage,0,0,0,0,0,0);
sq_AddDrawOnlyAniFromParent(damager, "character/fighter/effect/animation/2_striker_bykk/lightningshift/lightningshifthiteffect01_00.ani", 0, 1, sq_GetCenterZPos(boundingBox));
}
}
///////////////////////////////////////////////////////////////////////////女气功
//天雷分身步
function checkExecutableSkill_SkyThunderStep(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SKYTHUNDERSTEP);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_SKYTHUNDERSTEP, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_SkyThunderStep(obj)
{
if (!obj) return false;
return true;
}
function onSetState_SkyThunderStep(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
print("subState = "+subState);
obj.sq_StopMove();
obj.sq_ZStop();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(ANI_FWBYKK_SKYTHUNDERSTEP_START_BODY);
// obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_nenmaster_bykk/skythunderstep/start/skythunderstep_start_ki_fx01.ani"), 0, 0);
break;
case 1:
obj.sq_SetCurrentAnimation(ANI_FWBYKK_SKYTHUNDERSTEP_START_RUSH_BODY);
obj.getVar("skyThunderStepMove").setInt(0, sq_GetXPos(obj));
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SKYTHUNDERSTEP, -1, 0, 1.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_SKYTHUNDERSTEPDASH));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
obj.getVar("skyThunderStepBool").setBool(0, true);
obj.sq_PlaySound("R_FT_SKY_THUNDER_STEP_01");
obj.sq_PlaySound("SKY_THUNDER_STEP_1CAST");
break;
case 2:
obj.sq_SetCurrentAnimation(ANI_FWBYKK_SKYTHUNDERSTEP_LOOP_BODY_MAIN);
sq_flashScreen(obj,50,1200,0,76, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SKYTHUNDERSTEP, -1, 1, 1.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_SKYTHUNDERSTEPSWEEP));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(false);
obj.setTimeEvent(1, delay / 10, 9, false);
sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/1_nenmaster_bykk/skythunderstep/loop/skythunderstep_loop5_front_fx02.ani", 0, -1, 0);
break;
case 3:
obj.sq_SetCurrentAnimation(ANI_FWBYKK_SKYTHUNDERSTEP_LOOP_BODY_AFTERIMAGE);
break;
case 4:
obj.sq_SetCurrentAnimation(ANI_FWBYKK_SKYTHUNDERSTEP_ATTRACTION_ENERGY_BODY_MAIN);
sq_SetMyShake(obj, 5, 300);
//`createBallEffect` 0 -1 0
//`createBallBackEffect` 0 -1 0
sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/1_nenmaster_bykk/skythunderstep/loopeffect/skythunderstep_loop_5_back_fx02.ani", 0, -1, 0);
break;
case 5:
obj.sq_SetCurrentAnimation(ANI_FWBYKK_SKYTHUNDERSTEP_END_FT_BODY_END);
// sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/1_nenmaster_bykk/skythunderstep/end/skythunderstep_end_body_shadow_normal.ani", 0, -1, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/1_nenmaster_bykk/skythunderstep/end/skythunderstep_ft_shadow_end_01.ani", 0, -1, -sq_GetZPos(obj));
break;
}
}
function onEndCurrentAni_SkyThunderStep(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
case 3:
case 4:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(STATE_BYKK_SKYTHUNDERSTEP, STATE_PRIORITY_AUTO, true);
break;
case 5:
sq_setCurrentAxisPos(obj, 2, 0);
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_IntVectPush(4);
obj.sq_AddSetStatePacket(STATE_BYKK_SKYTHUNDERSTEP, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProc_SkyThunderStep(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
local currentAni = obj.getCurrentAnimation();
local fireT = currentAni.getDelaySum(0, 3);
local stateTime = obj.sq_GetStateTimer();
local v = sq_GetAccel(0, 250, stateTime, fireT, false);
local dstX = sq_GetDistancePos(obj.getVar("skyThunderStepMove").getInt(0), sq_GetDirection(obj), v);
sq_setCurrentAxisPos(obj, 0, dstX);
if(stateTime >= fireT && obj.getVar("skyThunderStepBool").getBool(0)){
obj.getVar("skyThunderStepBool").setBool(0, false);
sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/1_nenmaster_bykk/skythunderstep/start/skythunderstep_start_windblow.ani", 0, 0, 50);
}
break;
case 4:
local currentAni = obj.getCurrentAnimation();
local fireT = currentAni.getDelaySum(0, 1);
local stateTime = obj.sq_GetStateTimer();
local vz = sq_GetAccel(0, 220, stateTime, fireT, true);
sq_setCurrentAxisPos(obj, 2, vz);
break;
case 5:
local frameIndex = sq_GetCurrentFrameIndex(obj);
if(frameIndex < 8) break;
local currentAni = obj.getCurrentAnimation();
local fireT = currentAni.getDelaySum(0, 10);
local stateTime = obj.sq_GetStateTimer();
if(frameIndex > 10){
fireT = currentAni.getDelaySum(0, 12);
local vz = sq_GetAccel(30, 0, stateTime, fireT, false);
sq_setCurrentAxisPos(obj, 2, vz);
}
else{
local vz = sq_GetAccel(220, 30, stateTime, fireT, false);
sq_setCurrentAxisPos(obj, 2, vz);
}
break;
}
}
function onKeyFrameFlag_SkyThunderStep(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 101:
//`createStartEffect` 0 0 0
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_nenmaster_bykk/skythunderstep/start/skythunderstep_start_ki_fx01.ani"), 0, 0);
break;
case 102: sq_flashScreen(obj,80,2000,0,76, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break;
case 200:
//`dashToExplosion` 0 0 0
break;
case 201:
sq_flashScreen(obj,0,10,0,127, sq_RGB(255,255,255), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 20, 10);
//`createWindEffect` 0 0 50
break;
case 303:
sq_SetMyShake(obj, 10, 100);
//`loop1 sub Effect` 0 -1 0
sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/1_nenmaster_bykk/skythunderstep/loop/skythunderstep_loop1_shadow_fx01.ani", 0, -1, 0);
obj.sq_PlaySound("SKY_THUNDER_STEP_2PUNCHING");
break;
case 306:
//`create sweep Illusion Object` 0 0 0
break;
case 310: sq_SetMyShake(obj, 10, 100); break;
case 312:
//`loop2 sub Effect` 0 -1 0
sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/1_nenmaster_bykk/skythunderstep/loop/skythunderstep_loop2_shadow_fx07.ani", 0, -1, 0);
obj.sq_PlaySound("SKY_THUNDER_STEP_2PUNCHING");
break;
case 314: sq_SetMyShake(obj, 10, 100); break;
case 320:
//`loop3 sub Effect` 0 -1 0
sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/1_nenmaster_bykk/skythunderstep/loop/skythunderstep_loop3_shadow_fx13.ani", 0, -1, 0);
obj.sq_PlaySound("SKY_THUNDER_STEP_2PUNCHING");
break;
case 325: sq_SetMyShake(obj, 10, 100); break;
case 326:
//`loop4 sub Effect` 0 -1 0
sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/1_nenmaster_bykk/skythunderstep/loop/skythunderstep_loop4_shadow_fx07.ani", 0, -1, 0);
obj.sq_PlaySound("SKY_THUNDER_STEP_2PUNCHING");
break;
case 502:
//`Sphere Effect` 0 -1 60
sq_AddDrawOnlyAniFromParent(obj, "character/fighter/effect/animation/1_nenmaster_bykk/skythunderstep/loop/skythunderstep_attraction_energy.ani", 0, -1, 60);
break;
case 504:
sq_flashScreen(obj,300,700,0,178, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
break;
case 509:
//`stop sound`
break;
case 608:
//`createExplosion` 0 0 0
break;
case 610:
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SKYTHUNDERSTEP, -1, 2, 1.0);
createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,1,0,sq_GetDirection(obj),1,SKILL_BYKK_SKYTHUNDERSTEP,1,totalDamage,0,0,0,0,0,0,0);
sq_flashScreen(obj,50,250,50,204, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 20, 500);
break;
}
return true;
}
function onTimeEvent_SkyThunderStep(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 1: obj.resetHitObjectList(); break;
case 2:
sq_setCurrentAxisPos(obj, 2, 0);
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onEndState_SkyThunderStep(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_BYKK_SKYTHUNDERSTEP) sq_SimpleMoveToNearMovablePos(obj,200);
}
function onAttack_SkyThunderStep(obj, damager, boundingBox, isStuck)
{
if(isStuck) return;
if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return;
}
///////////////////////////////////////////////////////////////////////////女柔道
//送葬舞步
function checkExecutableSkill_ShiningWingsFlap(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SHININGWINGSFLAP);
if (isUse){
obj.sq_IntVectClear();
if(obj.getState() == 6) obj.sq_IntVectPush(10);
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_SHININGWINGSFLAP, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_ShiningWingsFlap(obj)
{
if (!obj) return false;
return true;
}
function onSetState_ShiningWingsFlap(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
print("subState = "+subState);
obj.sq_StopMove();
obj.sq_ZStop();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(ANI_FWBYKK_SHININGWINGSFLAPTRY);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_SHININGWINGSFLAPTRY));
obj.getVar("shiningWingsFlapTarget").clear_obj_vector();
obj.getVar("shiningWingsFlapTargetFixture").clear_obj_vector();
obj.sq_PlaySound("FT_BACK");
obj.sq_PlaySound("FT_HOLD");
break;
case 10:
obj.sq_SetCurrentAnimation(ANI_FWBYKK_SHININGWINGSFLAPTRYAIR);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_FWBYKK_SHININGWINGSFLAPTRY));
obj.getVar("shiningWingsFlapTarget").clear_obj_vector();
obj.getVar("shiningWingsFlapTargetFixture").clear_obj_vector();
local speed = 1000.0;
if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed);
else sq_SetVelocity(obj, 0, -speed);
sq_SetZVelocity(obj,-300,-800);
break;
case 1://抓轰炮
obj.sq_SetCurrentAnimation(ANI_FWBYKK_SHININGWINGSFLAPATTACKSTART04_BODY);
break;
case 2://普攻形态
obj.sq_SetCurrentAnimation(ANI_FWBYKK_SHININGWINGSFLAPATTACKSTART01_BODY);
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(0, 2);
local size = obj.getVar("shiningWingsFlapTarget").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("shiningWingsFlapTarget").get_obj_vector(i);
if(targetObj){
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/fighter/4_grappler_bykk/ap_shiningwingsflap_hold.nut");
sq_MoveToAppendageForce(targetObj, obj, obj, -45, 0, 30, delay, true, addAppendage);
}
}
}
obj.setTimeEvent(1, delay, 1, false);
break;
case 11://空中形态
obj.sq_SetCurrentAnimation(ANI_FWBYKK_SHININGWINGSFLAPATTACKSTART03_BODY);
break;
case 12://空中形态
obj.sq_SetCurrentAnimation(ANI_FWBYKK_SHININGWINGSFLAPATTACKSTART03END_BODY);
break;
}
}
function onEndCurrentAni_ShiningWingsFlap(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(obj.getVar("shiningWingsFlapTargetFixture").get_obj_vector_size() > 0){
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_SHININGWINGSFLAP, STATE_PRIORITY_AUTO, true);
break;
}
if(obj.getVar("shiningWingsFlapTarget").get_obj_vector_size() > 0){
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(STATE_BYKK_SHININGWINGSFLAP, STATE_PRIORITY_AUTO, true);
break;
}
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
case 10:
if(obj.getVar("shiningWingsFlapTargetFixture").get_obj_vector_size() > 0 || obj.getVar("shiningWingsFlapTarget").get_obj_vector_size() > 0){
obj.sq_IntVectClear();
obj.sq_IntVectPush(11);
obj.sq_AddSetStatePacket(STATE_BYKK_SHININGWINGSFLAP, STATE_PRIORITY_AUTO, true);
break;
}
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 1:
case 2:
case 11:
case 12:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
// case 11:
// obj.sq_IntVectClear();
// obj.sq_IntVectPush(subState + 1);
// obj.sq_AddSetStatePacket(STATE_BYKK_SHININGWINGSFLAP, STATE_PRIORITY_AUTO, true);
// break;
}
}
function onProc_ShiningWingsFlap(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 10:
if(sq_GetZPos(obj) <= 5){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
}
break;
}
}
function onProcCon_ShiningWingsFlap(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 2:
if(obj.getVar("shiningWingsFlapBool").getBool(0) == false){
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){
obj.getVar("shiningWingsFlapBool").setBool(0, true);
}
}
break;
}
}
function onKeyFrameFlag_ShiningWingsFlap(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 104://普通
sq_AddDrawOnlyAniFromParent(obj, "passiveobject/1_fighter_bykk/4_grappler_bykk/animation/shiningwingsflap/shiningwingsflapattackeffect03a_07.ani", -89, 1, 0);
sq_AddDrawOnlyAniFromParent(obj, "passiveobject/1_fighter_bykk/4_grappler_bykk/animation/shiningwingsflap/shiningwingsflapattackeffect03b_02.ani", -89, -2, 0);
sq_flashScreen(obj,10,100,40,76,sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHININGWINGSFLAP, -1, 0, 1.0);
createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,-89,0,2,sq_GetDirection(obj),4,SKILL_BYKK_SHININGWINGSFLAP,10,totalDamage,0,0,0,0,0,0,0);
break;
case 105:
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHININGWINGSFLAP, -1, 1, 1.0);
local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHININGWINGSFLAP, -1, 2, 1.0);
local sub2 = 0;
if(obj.getVar("shiningWingsFlapBool").getBool(0)){
obj.getVar("shiningWingsFlapBool").setBool(0, false);
sub2 = 1;
}
createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,-125,1,0,sq_GetDirection(obj),4,SKILL_BYKK_SHININGWINGSFLAP,2,totalDamage,totalDamage2,1,sub2,0,0,0,0);
break;
case 110: sq_SetMyShake(obj, 3, 60); break;
case 201://空中
break;
case 204:
sq_setCurrentAxisPos(obj, 2, 0);
sq_AddDrawOnlyAniFromParent(obj, "passiveobject/1_fighter_bykk/4_grappler_bykk/animation/shiningwingsflap/shiningwingsflapattackeffect03a_07.ani", 25, 1, 0);
sq_AddDrawOnlyAniFromParent(obj, "passiveobject/1_fighter_bykk/4_grappler_bykk/animation/shiningwingsflap/shiningwingsflapattackeffect03b_02.ani", 25, -2, 0);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHININGWINGSFLAP, -1, 3, 1.0);
createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,25,0,2,sq_GetDirection(obj),4,SKILL_BYKK_SHININGWINGSFLAP,10,totalDamage,0,0,0,0,0,0,0);
break;
case 213:
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHININGWINGSFLAP, -1, 4, 1.0);
local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHININGWINGSFLAP, -1, 5, 1.0);
createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,25,1,0,sq_GetDirection(obj),4,SKILL_BYKK_SHININGWINGSFLAP,2,totalDamage,totalDamage2,0,0,0,0,0,0);
break;
case 219:
break;
case 302://抓轰炮
break;
case 305:
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHININGWINGSFLAP, -1, 3, 1.0);
createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,0,1,0,sq_GetDirection(obj),4,SKILL_BYKK_SHININGWINGSFLAP,1,totalDamage,0,0,0,0,0,0,0);
break;
case 309:
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHININGWINGSFLAP, -1, 4, 1.0);
local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHININGWINGSFLAP, -1, 5, 1.0);
createSkillPassive_Fighter_bykk(obj,obj,PASSIVEOBJNUM_FWBYKK,125,1,0,sq_GetDirection(obj),4,SKILL_BYKK_SHININGWINGSFLAP,2,totalDamage,totalDamage2,0,0,0,0,0,0);
break;
}
return true;
}
function onTimeEvent_ShiningWingsFlap(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 1:
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(2, 3);
local size = obj.getVar("shiningWingsFlapTarget").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("shiningWingsFlapTarget").get_obj_vector(i);
if(targetObj){
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/fighter/4_grappler_bykk/ap_shiningwingsflap_hold.nut");
sq_MoveToAppendageForce(targetObj, obj, obj, -89, 0, 0, delay, true, addAppendage);
}
}
}
break;
}
}
function onEndState_ShiningWingsFlap(obj, new_state)
{
if(!obj) return;
local subState = obj.getSkillSubState();
if(subState == 2 || subState == 0) return;
if(new_state != STATE_BYKK_SKYTHUNDERSTEP){
local size = obj.getVar("shiningWingsFlapTargetFixture").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("shiningWingsFlapTargetFixture").get_obj_vector(i);
if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/fighter/4_grappler_bykk/ap_shiningwingsflap_hold.nut");
}
}
size = obj.getVar("shiningWingsFlapTarget").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("shiningWingsFlapTarget").get_obj_vector(i);
if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/fighter/4_grappler_bykk/ap_shiningwingsflap_hold.nut");
}
}
}
}
function onAttack_ShiningWingsFlap(obj, damager, boundingBox, isStuck)
{
if(isStuck) return;
if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 10:
if(sq_IsFixture(damager)) obj.getVar("shiningWingsFlapTargetFixture").push_obj_vector(damager);
else if(sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager)){
obj.getVar("shiningWingsFlapTarget").push_obj_vector(damager);
}
local apdPath = "character/fighter/4_grappler_bykk/ap_shiningwingsflap_hold.nut";
if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, apdPath)){
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_IsFixture(damager) && subState == 0) sq_MoveToAppendageForce(damager, obj, obj, 80, 0, damager.getZPos(), 100, true, AddAppendage);
}
if(subState == 10){
obj.sq_IntVectClear();
obj.sq_IntVectPush(11);
obj.sq_AddSetStatePacket(STATE_BYKK_SHININGWINGSFLAP, STATE_PRIORITY_AUTO, true);
}
break;
}
}