1191 lines
47 KiB
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;
|
|
}
|
|
}
|