Rindro-Sqr/user/114.66.51.249/7_swordman_2.c

3522 lines
139 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

function procSkill_Swordman_ghostsword_bykk(obj)
{
local skill = sq_GetSkill(obj, 231);
local state = obj.getState();
if(!skill.isInCoolTime() && (state == 0 || state == 8 || state > 13) && state != 231){
obj.setSkillCommandEnable(231, true);
if(obj.sq_IsEnterSkill(231) != -1){
obj.startSkillCoolTime(231, sq_GetSkillLevel(obj, 231), -1);
obj.sq_IntVectClear();
switch(state){
case 0:
case 14:
obj.sq_IntVectPush(0);//共鸣系列
break;
case STATE_SPIRITMOVE:
obj.sq_IntVectPush(1);//剑术系列
break;
default:
obj.sq_IntVectPush(2);//幻鬼系列
break;
}
obj.sq_AddSetStatePacket(231, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
if(sq_GetSkillLevel(obj, 232) > 0){
local timer = obj.getVar("ReturnISCt").get_ct_vector(0);
if(!timer){
obj.getVar("ReturnISCt").clear_ct_vector();
obj.getVar("ReturnISCt").push_ct_vector();
timer = obj.getVar("ReturnISCt").get_ct_vector(0);
timer.Reset();//初始化
timer.Start(10000,0);//计时开始
obj.getVar("ReturnISBool").setBool(0, true);
}
local currentT = timer.Get();//得到时间
local coolTime = sq_GetIntData(obj, 232, 2);
if(currentT >= coolTime){
timer.Reset();//初始化
timer.Start(10000,0);//计时开始
obj.getVar("ReturnISBool").setBool(0, true);
}
local VSObject = getVSObject(obj);
if((state == 2 || state == 3 || state == 4) && VSObject && obj.getVar("ReturnISBool").getBool(0)){
obj.setSkillCommandEnable(231, true);
if(obj.sq_IsEnterSkill(231) != -1){
obj.getVar("ReturnISBool").setBool(0, false);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_RETURNSPIRITMOVE, STATE_PRIORITY_IGNORE_FORCE, true);
als_ani(obj, "character/swordman/effect/animation/returnspiritmove/returnspiritmovestart_00.ani", 0, 0, 0, 0, 100, 0, 1, 1.0);
als_ani(obj, "character/swordman/effect/animation/returnspiritmove/returnspiritmovestart_01.ani", 0, 0, 0, 0, 100, 0, 1, 1.0);
}
}
}
}
//空中
function onAfterSetState_SM_Jump(obj, state, datas, isResetTimer)
{
if(!obj) return;
if(sq_getGrowType(obj) != 1) return;
obj.getVar("jumpMessageSave").setInt(0, sq_GetVectorData(datas, 1));
if(sq_GetVectorData(datas, 1) == 1 && sq_GetVectorData(datas, 3) == 1){
obj.sq_IntVectClear();
obj.sq_IntVectPush(49);
obj.sq_AddSetStatePacket(7, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
function onProcCon_SM_Jump(obj)
{
if(!obj) return;
if(sq_getGrowType(obj) != 1) return;
if(obj.getWeaponSubType() == 2){
if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDTWO).isInCoolTime()){
// sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMIND, true);
local b_useskill = obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMIND);
if(b_useskill != -1){// || sq_IsEnterCommand(obj, E_ATTACK_COMMAND)
obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMINDTWO, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDTWO), -1);
obj.sq_IntVectClear();
obj.sq_IntVectPush(10);
obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTWO, STATE_PRIORITY_IGNORE_FORCE, true);
return;
}
}
}
else{
if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDONE).isInCoolTime()){
obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMIND, true);
local b_useskill = obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMIND);
if(b_useskill != -1){
obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMINDONE, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDONE), -1);
obj.sq_IntVectClear();
obj.sq_IntVectPush(10);
obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDONE, STATE_PRIORITY_IGNORE_FORCE, true);
return;
}
}
}
// if(obj.getVar("jumpMessageSave").getInt(0) != 1){
// obj.setSkillCommandEnable(169, true);
// if(obj.sq_IsEnterSkill(169) != -1){
// obj.sq_IntVectClear();
// obj.sq_IntVectPush(1);
// obj.sq_IntVectPush(1);
// obj.sq_IntVectPush(200);
// obj.sq_IntVectPush(1);
// obj.sq_AddSetStatePacket(6, STATE_PRIORITY_IGNORE_FORCE, true);
// return;
// }
// }
}
//空中攻击
function onAfterSetState_SM_JumpAttack(obj, state, datas, isResetTimer)
{
if(!obj) return;
if(sq_getGrowType(obj) != 1) return;
local atkInfo = obj.sq_GetVectorData(datas, 0);
obj.getVar("smjatkSet").setInt(0, atkInfo);
if(obj.getWeaponSubType() == 2 && sq_GetSkillLevel(obj, SKILL_SMBYKK_BLUNTMASTERY) >= 3){
sq_SetCurrentAttackInfo(obj, obj.sq_GetJumpAttackInfo());
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), sq_GetIntData(obj, SKILL_SMBYKK_BLUNTMASTERY, 13));
}
}
function onAttack_SM_JumpAttack(obj, damager, boundingBox, isStuck)
{
if(!obj) return;
if(isStuck) return;
if(sq_getGrowType(obj) != 1) return;
if(obj.getVar("smjatkSet").getInt(0) == 17) return;
if(obj.getWeaponSubType() != 2) return;
if(sq_GetSkillLevel(obj, SKILL_SMBYKK_BLUNTMASTERY) < 5) return;
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_BLUNTMASTERY, -1, 8, 1.0);
local sizeRate = 100 + 3 * sq_GetSkillLevel(obj, SKILL_SMBYKK_BLUNTMASTERY);
local upForceSet = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_BLUNTMASTERY, -1, 4, 1.0) + 100;
if(obj.getVar("smjatkSet").getInt(0) == 49){
totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_BLUNTMASTERY, -1, 3, 1.0);
upForceSet = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_BLUNTMASTERY, -1, 2, 1.0) + 100;
}
createSkillPassive_Swordman_bykk(obj,damager,PASSIVEOBJ_BYKK_SWORDMAN,0,0,-sq_GetZPos(obj),sq_GetDirection(obj),1,SKILL_SMBYKK_BLUNTMASTERY,1,totalDamage,sizeRate,upForceSet,0,0,0,0,0);
}
}
function onKeyFrameFlag_SM_JumpAttack(obj, flagIndex)
{
if(!obj) return false;
if(sq_getGrowType(obj) != 1) return false;
switch(flagIndex){
case 0:
local atkInfo = obj.getVar("smjatkSet").getInt(0);
if(atkInfo == 49){
if(sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFLIMIT) > 0){
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_STATEOFLIMIT, -1, 0, 1.0);
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,30,0,-20,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFLIMIT,3,totalDamage,0,0,0,0,0,0,0);
print("test");
}
}
break;
}
return true;
}
function onEndState_SM_JumpAttack(obj, new_state)
{
if(!obj) return;
if(new_state != 7){
obj.getVar("jumpAttackBool").setBool(0, false);
}
}
//银光落刃
function onAfterSetState_SM_Ashenfork(obj, state, datas, isResetTimer)
{
if(!obj) return;
if(sq_getGrowType(obj) != 1) return;
local weaponSubType = obj.getWeaponSubType();
local bonusRate = 1.0;
if(weaponSubType == 2) bonusRate = (100 - sq_GetIntData(obj, SKILL_SMBYKK_ASHENFORK, 7)).tofloat() / 100.0;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_ASHENFORK, -1, 0, bonusRate);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_ASHENFORK));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
}
function onCreateObject_SM_Ashenfork(obj, createObject)
{
if(!obj) return;
if(sq_getGrowType(obj) != 1) return;
if(createObject.isObjectType(OBJECTTYPE_PASSIVE)){
local colObj = sq_GetCNRDObjectToCollisionObject(createObject);
local passiveObjId = colObj.getCollisionObjectIndex();
// print("passiveObjId = "+passiveObjId);
if(passiveObjId == 20016){
colObj.setValid(false);
local weaponSubType = obj.getWeaponSubType();//0短1太2钝3巨5光
local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_ASHENFORK);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_ASHENFORK, -1, 1, 1.0);
local sizeRate = sq_GetLevelData(obj, SKILL_SMBYKK_ASHENFORK, 2, skillLevel);
if(weaponSubType == 3){
local totalDamageSub = totalDamage * sq_GetIntData(obj, SKILL_SMBYKK_ASHENFORK, 4) / 100;
local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_ASHENFORK, 5);
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_ASHENFORK,2,totalDamageSub,hitMax,sizeRate,0,0,0,0,0);
}
else if(weaponSubType == 2){
totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_ASHENFORK, -1, 3, 1.0);
sizeRate = sq_GetLevelData(obj, SKILL_SMBYKK_ASHENFORK, 4, skillLevel);
}
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_ASHENFORK,1,totalDamage,sizeRate,0,0,0,0,0,0);
}
}
}
//里·鬼剑术
function checkExecutableSkill_SMWeaponCombo(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_WEAPONCOMBO);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_SMBYKK_WEAPONCOMBO, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_SMWeaponCombo(obj)
{
if (!obj) return false;
return true;
}
function onSetState_SMWeaponCombo(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
obj.sq_ZStop();
//0短1太2钝3巨5光
local weaponSubType = obj.getWeaponSubType();
local aniSet = [[ANI_SMBYKK_WEAPONCOMBOSHORT1, ANI_SMBYKK_WEAPONCOMBOSHORT2, ANI_SMBYKK_WEAPONCOMBOSHORT3],
[ANI_SMBYKK_WEAPONCOMBOBLADE1, ANI_SMBYKK_WEAPONCOMBOBLADE2, ANI_SMBYKK_WEAPONCOMBOBLADE3, ANI_SMBYKK_WEAPONCOMBOBLADE4],
[ANI_SMBYKK_WEAPONCOMBOBLUNT1, ANI_SMBYKK_WEAPONCOMBOBLUNT2, ANI_SMBYKK_WEAPONCOMBOBLUNT3, ANI_SMBYKK_WEAPONCOMBOBLUNT4],
[ANI_SMBYKK_WEAPONCOMBOHEAVY1, ANI_SMBYKK_WEAPONCOMBOHEAVY2],
[],
[ANI_SMBYKK_WEAPONCOMBOLIGHT1, ANI_SMBYKK_WEAPONCOMBOLIGHT2, ANI_SMBYKK_WEAPONCOMBOLIGHT3]];
obj.sq_SetCurrentAnimation(aniSet[weaponSubType][subState]);
local speedRate = [0.9,1.3,1.1,0.75,1.0,1.2];
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate[weaponSubType], speedRate[weaponSubType]);
local atkSet = [[ATK_SMBYKK_WEAPONCOMBOSHORT1,ATK_SMBYKK_WEAPONCOMBOSHORT2,ATK_SMBYKK_WEAPONCOMBOSHORT3],
[ATK_SMBYKK_WEAPONCOMBOBLADE1,ATK_SMBYKK_WEAPONCOMBOBLADE2,ATK_SMBYKK_WEAPONCOMBOBLADE3,ATK_SMBYKK_WEAPONCOMBOBLADE4],
[ATK_SMBYKK_WEAPONCOMBOBLUNT1,ATK_SMBYKK_WEAPONCOMBOBLUNT2,ATK_SMBYKK_WEAPONCOMBOBLUNT3,ATK_SMBYKK_WEAPONCOMBOBLUNT4],
[ATK_SMBYKK_WEAPONCOMBOHEAVY1,ATK_SMBYKK_WEAPONCOMBOHEAVY2],
[],
[ATK_SMBYKK_WEAPONCOMBOLIGHT1,ATK_SMBYKK_WEAPONCOMBOLIGHT2,ATK_SMBYKK_WEAPONCOMBOLIGHT3]];
local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_WEAPONCOMBO, 0, sq_GetSkillLevel(obj, SKILL_SMBYKK_WEAPONCOMBO)).tofloat() / 100.0 + 1.0;
// print("bonusRate = "+bonusRate);
local totalDamage = obj.sq_GetBonusRateWithPassive(174, -1, 0, bonusRate) + 100;
if(obj.getVar("weaponcombo_bool").getBool(0)){
obj.getVar("weaponcombo_bool").setBool(0, false);
totalDamage = totalDamage * (100 + sq_GetIntData(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY, 6)) / 100;
}
// print("totalDamage = "+totalDamage);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkSet[weaponSubType][subState]));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage / 10);
obj.sq_PlaySound("R_SM_ATK");
local soundSet = ["R_MINERALSWDA","R_KATANAA","R_STICKA","R_SQUARESWDA","","R_BEAMSWDA"];
obj.sq_PlaySound(soundSet[weaponSubType]);
local soundSet2 = ["R_MINERALSWDC","R_KATANAC","R_STICKC","R_SQUARESWDC","","R_BEAMSWDC"];
obj.sq_PlaySound(soundSet2[weaponSubType]);
obj.startRapidInput();
switch(weaponSubType){
case 0:
local effectPath = ["effect/animation/1_swordman_bykk/weaponcombo/short_new_01.ani","effect/animation/1_swordman_bykk/weaponcombo/short_new_02.ani","effect/animation/1_swordman_bykk/weaponcombo/short_new_03.ani"];
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation(effectPath[subState]), 0, 0);
effectPath = ["effect/animation/1_swordman_bykk/shortswordmastery/shortweaponcombo1.ani","effect/animation/1_swordman_bykk/shortswordmastery/shortweaponcombo2.ani","effect/animation/1_swordman_bykk/shortswordmastery/shortweaponcombo3.ani"];
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation(effectPath[subState]), 0, 0);
if(sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY) > 0 && subState > 0){
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_SHORTSWORDMASTERY, -1, 17, 1.0);
local sizeRate = sq_GetIntData(obj, SKILL_SMBYKK_SHORTSWORDMASTERY, 13);
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_WEAPONCOMBO,1,totalDamage,sizeRate,subState,0,0,0,0,0);
}
break;
case 1:
local effectPath = [["character/swordman/effect/animation/weaponcombo/ura_katana_eff.ani"],
["character/swordman/effect/animation/weaponcombo/katana_new1_under_effect.ani","character/swordman/effect/animation/weaponcombo/katana_new1_upper_effect.ani"],
["character/swordman/effect/animation/weaponcombo/ura_katana_eff.ani"],
["character/swordman/effect/animation/weaponcombo/katana_new2_under_effect.ani","character/swordman/effect/animation/weaponcombo/katana_new2_upper_effect.ani"]];
local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj) + 1;
for(local i = 0; i < effectPath[subState].len(); i++){
local effectObj = createOnlyDrawObject_Swordman_bykk(obj,effectPath[subState][i],true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL);
sq_moveWithParent(obj, effectObj);
}
break;
case 2:
//
break;
case 3:
if(subState == 0 && sq_GetSkillLevel(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY) >= 3){//使用[里 · 鬼剑术]时, 第1次斩击会出现飓风 按住技能键可以蓄气进行第2次斩击
local totalDamage = totalDamage * 30 / 1000;
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,100,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_WEAPONCOMBO,2,totalDamage,0,0,0,0,0,0,0);
obj.sq_IsEnterSkillLastKeyUnits(SKILL_SMBYKK_WEAPONCOMBO);
local aniPath = "character/swordman/effect/animation/1_swordman_bykk/shortswordmastery/heavyweaponcombochargedodge.ani";
local pooledObj = createOnlyDrawObject_Swordman_bykk(obj,aniPath,true,sq_GetDirection(obj),sq_GetDistancePos(sq_GetXPos(obj), sq_GetDirection(obj), -70),sq_GetYPos(obj) + 1,60,ENUM_DRAWLAYER_NORMAL);
local speedRate = 142000 / sq_GetIntData(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY, 6);
local pAni = pooledObj.getCurrentAnimation();
pAni.setSpeedRate(speedRate.tofloat());
obj.getVar("weaponcombo_effect").clear_obj_vector();
obj.getVar("weaponcombo_effect").push_obj_vector(pooledObj);
return;
}
break;
case 5:
local effectPath = [["light1-1.ani","light1-2.ani","light1-3.ani","light1-4.ani","light1-5.ani","light1-6.ani"],
["light2-1.ani","light2-2.ani","light2-3.ani","light2-4.ani","light2-5.ani","light2-6.ani"],
["light3-1.ani","light3-2.ani","light3-3.ani","light3-4.ani","light3-5.ani","light3-6.ani"]];
for(local i = 0; i < 3; i++){
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/weaponcombo/" + effectPath[subState][i]), 0, 0);
}
break;
}
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){
obj.getVar("handlingsword_canShoot").setBool(0, true);
}
if(weaponSubType == 5 && sq_GetSkillLevel(obj, SKILL_SMBYKK_LIGHTSWORDMASTERY) >= 3){
local attackInfo = sq_GetCurrentAttackInfo(obj);
local proc = sq_GetIntData(obj, SKILL_SMBYKK_LIGHTSWORDMASTERY, 5);
local time = sq_GetIntData(obj, SKILL_SMBYKK_LIGHTSWORDMASTERY, 6);
local level = sq_GetSkillLevel(obj, 174) + 5;
sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_LIGHTNING, 1000, level, time);
}
if(subState == 0) return;
if(subState + 1 < aniSet[weaponSubType].len()) obj.sq_SetStaticMoveInfo(0, 0, 50, false, 100, true);
else obj.sq_SetStaticMoveInfo(0, 0, 200, false, 120, true);
obj.sq_SetMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL);
}
function onEndCurrentAni_SMWeaponCombo(obj)
{
if(!obj) return;
local weaponSubType = obj.getWeaponSubType();
if(weaponSubType == 3 && sq_GetSkillLevel(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY) >= 3){
local subState = obj.getSkillSubState();
if(subState == 0) return;
}
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
}
function onProcCon_SMWeaponCombo(obj)
{
if(!obj) return;
obj.setSkillCommandEnable(169, true);
if(obj.sq_IsEnterSkill(169) != -1){
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(200);
obj.sq_AddSetStatePacket(6, STATE_PRIORITY_AUTO, true);
return;
}
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(8, STATE_PRIORITY_AUTO, true);
return;
}
if(!sq_GetSkill(obj, SKILL_SMBYKK_HUNDREDSWORD).isInCoolTime()){
obj.setSkillCommandEnable(SKILL_SMBYKK_HUNDREDSWORD, true);
if(obj.sq_IsEnterSkill(SKILL_SMBYKK_HUNDREDSWORD) != -1){
obj.startSkillCoolTime(SKILL_SMBYKK_HUNDREDSWORD, sq_GetSkillLevel(obj, SKILL_SMBYKK_HUNDREDSWORD), -1);
obj.sq_IntVectClear();
if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) obj.sq_IntVectPush(1);
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(47, STATE_PRIORITY_AUTO, true);
return;
}
}
if(!sq_GetSkill(obj, 46).isInCoolTime()){
obj.setSkillCommandEnable(46, true);
if(obj.sq_IsEnterSkill(46) != -1){
obj.startSkillCoolTime(46, sq_GetSkillLevel(obj, 46), -1);
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_IntVectPush(46);
obj.sq_AddSetStatePacket(8, STATE_PRIORITY_AUTO, true);
return;
}
}
if(!sq_GetSkill(obj, 8).isInCoolTime() && obj.getVar("weaponcomboBool1").getBool(0) == false){
obj.setSkillCommandEnable(8, true);
if(obj.sq_IsEnterSkill(8) != -1){
obj.getVar("weaponcomboBool1").setBool(0, true);
// obj.startSkillCoolTime(8, sq_GetSkillLevel(obj, 8), -1);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) obj.sq_IntVectPush(1);
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(22, STATE_PRIORITY_AUTO, true);
return;
}
}
if(!sq_GetSkill(obj, 1).isInCoolTime()){
obj.setSkillCommandEnable(1, true);
if(obj.sq_IsEnterSkill(1) != -1){
obj.startSkillCoolTime(1, sq_GetSkillLevel(obj, 1), -1);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(19, STATE_PRIORITY_AUTO, true);
return;
}
}
if(!sq_GetSkill(obj, 5).isInCoolTime()){
obj.setSkillCommandEnable(5, true);
if(obj.sq_IsEnterSkill(5) != -1){
obj.startSkillCoolTime(5, sq_GetSkillLevel(obj, 5), -1);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(20, STATE_PRIORITY_AUTO, true);
return;
}
}
if(!sq_GetSkill(obj, 58).isInCoolTime()){
obj.setSkillCommandEnable(58, true);
if(obj.sq_IsEnterSkill(58) != -1){
obj.startSkillCoolTime(58, sq_GetSkillLevel(obj, 58), -1);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(32, STATE_PRIORITY_AUTO, true);
return;
}
}
local weaponSubType = obj.getWeaponSubType();
if(weaponSubType == 3) return;
obj.setSkillCommandEnable(SKILL_SMBYKK_WEAPONCOMBO, true);
local b_useskill = obj.sq_IsEnterSkill(SKILL_SMBYKK_WEAPONCOMBO);
if(b_useskill != -1) obj.addRapidInput();
local subState = obj.getSkillSubState();
local nowFrame = sq_GetCurrentFrameIndex(obj);
local startFrame = [[5,5,4],
[5,4,5,4],
[5,4,6,5],
[6,8],
[],
[4,4,5]];
if(obj.getRapidInputFrequency() > 1){
if(nowFrame < startFrame[weaponSubType][subState]) return;
if(subState + 1 < startFrame[weaponSubType].len()){
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(STATE_SMBYKK_WEAPONCOMBO, STATE_PRIORITY_AUTO, true);
return;
}
// else{
// obj.sq_IntVectClear();
// obj.sq_IntVectPush(0);
// obj.sq_AddSetStatePacket(STATE_SMBYKK_WEAPONCOMBO, STATE_PRIORITY_AUTO, true);
// }
}
}
function onProc_SMWeaponCombo(obj)
{
local weaponSubType = obj.getWeaponSubType();
if(weaponSubType == 3 && sq_GetSkillLevel(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY) >= 3){
local subState = obj.getSkillSubState();
if(subState == 0){
if(obj.isDownSkillLastKey()){
local stateTime = obj.sq_GetStateTimer();
if(stateTime >= sq_GetIntData(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY, 8) && obj.getVar("weaponcombo_bool").getBool(0) == false) obj.getVar("weaponcombo_bool").setBool(0, true);
}
else{
if(sq_GetCurrentFrameIndex(obj) < 6) return;
local pooledObj = obj.getVar("weaponcombo_effect").get_obj_vector(0);
if(pooledObj) pooledObj.setValid(false);
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_SMBYKK_WEAPONCOMBO, STATE_PRIORITY_AUTO, true);
return;
}
}
}
local subState = obj.getSkillSubState();
if(obj.getVar("weaponComboBool").getBool(subState) == false){
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("weaponComboBool").setBool(subState, true);
obj.sq_SetStaticMoveInfo(0, 50, 150, false, 100, true);
}
else 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("weaponComboBool").setBool(subState, true);
obj.sq_SetStaticMoveInfo(0, 0, 0, false, 100, true);
}
}
}
function onKeyFrameFlag_SMWeaponCombo(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 2404:
local aniPath = "character/swordman/effect/animation/1_swordman_bykk/weaponcombo/reslash_blunt03_dust01.ani";
sq_AddDrawOnlyAniFromParent(obj, aniPath, 0, -1, 0);
break;
case 100:
case 5103:
case 5203:
case 5303:
obj.resetHitObjectList();
break;
}
return true;
}
function onTimeEvent_SMWeaponCombo(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_SMWeaponCombo(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_SMBYKK_WEAPONCOMBO){
obj.getVar("weaponcombo_bool").setBool(0, false);
obj.getVar("weaponcomboBool1").setBool(0, false);
for(local i = 0; i < 4; i++){
obj.getVar("weaponComboBool").setBool(i, false);
}
}
}
function onAttack_SMWeaponCombo(obj, damager, boundingBox, isStuck)
{
if(!obj) return;
if(isStuck) return;
local weaponSubType = obj.getWeaponSubType();
local soundSet = ["R_MINERALSWDA_HIT","R_KATANAA_HIT","R_STICKA_HIT","R_SQUARESWDA_HIT","","R_BEAMSWDA_HIT"];
obj.sq_PlaySound(soundSet[weaponSubType]);
local soundSet2 = ["R_MINERALSWDC_HIT","R_KATANAC_HIT","R_STICKC_HIT","R_SQUARESWDC_HIT","","R_BEAMSWDC_HIT"];
obj.sq_PlaySound(soundSet2[weaponSubType]);
if(weaponSubType == 2 && sq_GetSkillLevel(obj, SKILL_SMBYKK_BLUNTMASTERY) >= 3){
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
local activeObj = sq_GetCNRDObjectToActiveObject(damager);
if(sq_IsValidActiveStatus(activeObj, ACTIVESTATUS_STUN)){
local totalDamage = sq_GetIntData(obj, SKILL_SMBYKK_BLUNTMASTERY, 7) - 100;
local group = sq_GetGroup(activeObj);
local uniqueId = sq_GetUniqueId(activeObj);
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_BLUNTMASTERY,2,totalDamage,group,uniqueId,0,0,0,0,0);
}
}
}
}
//破军斩龙击
function checkExecutableSkill_ChargeBurst(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_CHARGEBURST);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_SMBYKK_CHARGEBURST, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_ChargeBurst(obj)
{
if (!obj) return false;
return true;
}
function onSetState_ChargeBurst(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0: obj.sq_SetCurrentAnimation(ANI_SMBYKK_CHARGECRASHDASH); break;
case 1: obj.sq_SetCurrentAnimation(ANI_SMBYKK_CHARGECRASHEXSHOULDER); break;
case 2: obj.sq_SetCurrentAnimation(ANI_SMBYKK_CHARGECRASHEXPICK); break;
case 3: obj.sq_SetCurrentAnimation(ANI_SMBYKK_CHARGECRASHEXUPPER); break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
switch(subState){
case 0:
obj.getVar("ChargeBurstTar").clear_obj_vector();
obj.getVar("ChargeBurstSet").setInt(0, sq_GetXPos(obj));
local currentAni = obj.getCurrentAnimation();
obj.setTimeEvent(1, currentAni.getDelaySum(0, 3) / 10, 10, true);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/chargecrash/dash.ani"), 0, 0);
obj.sq_PlaySound("SM_CHARGE_CRASH");
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_CHARGEBURST, -1, 0, 1.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_CHARGECRASHEXSHOULDER));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){
obj.getVar("handlingsword_canShoot").setBool(0, true);
}
obj.getVar("blademastery_canExp").setBool(0, true);
break;
case 1:
local currentAni = obj.getCurrentAnimation();
local speedRate = 2500 / currentAni.getDelaySum(0, 0);
// print("speedRate = "+speedRate);
if(speedRate < 100) currentAni.setSpeedRate(100.0);
else if(speedRate > 130) currentAni.setSpeedRate(130.0);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/chargecrashex/shoulder.ani"), 0, -25);
break;
case 2:
obj.getVar("ChargeBurstSet").setInt(1, sq_GetXPos(obj));
local currentAni = obj.getCurrentAnimation();
local speedRate = 2000 / currentAni.getDelaySum(0, 0);
// print("speedRate = "+speedRate);
if(speedRate < 120) currentAni.setSpeedRate(120.0);
else if(speedRate > 130) currentAni.setSpeedRate(130.0);
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(false);
obj.setTimeEvent(2, delay / 15, 14, true);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/chargecrashex/pick.ani"), 0, -25);
obj.sq_PlaySound("SM_CHARGE_CRASH_UP");
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_CHARGEBURST, -1, 1, 1.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_CHARGECRASHEXPICK));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local size = obj.getVar("ChargeBurstTar").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("ChargeBurstTar").get_obj_vector(i);
if(!targetObj) continue;
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, APDPATH_SM_CHARGEBURST);
if(addAppendage){
sq_MoveToAppendageForce(targetObj, obj, obj, 250, 0, sq_GetZPos(targetObj), delay, true, addAppendage);
}
}
}
break;
case 3:
local currentAni = obj.getCurrentAnimation();
local speedRate = 13000 / currentAni.getDelaySum(0, 0);
print("speedRate = "+speedRate);
if(speedRate < 100) currentAni.setSpeedRate(100.0);
else if(speedRate > 130) currentAni.setSpeedRate(130.0);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_CHARGEBURST, -1, 2, 1.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_CHARGECRASHEXUPPER));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local upForceSet = sq_GetLevelData(obj, SKILL_SMBYKK_CHARGEBURST, 3, sq_GetSkillLevel(obj, SKILL_SMBYKK_CHARGEBURST)) * 13 / 10;
local attackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttacknUpForce(attackInfo, upForceSet);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/chargecrashex/upperdustfoward.ani", 0, -1, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/chargecrashex/upperdustback.ani", 0, -1, 0);
obj.sq_SetStaticMoveInfo(0, 75, 0, false, 100, true);
obj.sq_SetMoveDirection(sq_GetDirection(obj), ENUM_DIRECTION_NEUTRAL);
break;
}
}
function onEndCurrentAni_ChargeBurst(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
case 2:
if(subState >= 1) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj)));
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(STATE_SMBYKK_CHARGEBURST, STATE_PRIORITY_AUTO, true);
break;
case 3:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_ChargeBurst(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_ChargeBurst(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1:
local subState = obj.getSkillSubState();
switch(subState){
case 3:
local size = obj.getVar("ChargeBurstTar").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("ChargeBurstTar").get_obj_vector(i);
if(!targetObj) continue;
CNSquirrelAppendage.sq_RemoveAppendage(targetObj, APDPATH_SM_CHARGEBURST);
}
}
break;
}
break;
case 4:
if(obj.getSkillSubState() == 0){
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_SMBYKK_CHARGEBURST, STATE_PRIORITY_AUTO, true);
}
break;
}
return true;
}
function onTimeEvent_ChargeBurst(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 1:
local v = sq_GetUniformVelocity(0, 325, timeEventCount, 9);
local dstX = sq_GetDistancePos(obj.getVar("ChargeBurstSet").getInt(0), obj.getDirection(), v);
sq_setCurrentAxisPos(obj, 0, dstX);
break;
case 2:
local v = sq_GetUniformVelocity(obj.getVar("ChargeBurstSet").getInt(1), obj.getVar("ChargeBurstSet").getInt(0), timeEventCount, 10);
sq_setCurrentAxisPos(obj, 0, v);
break;
}
}
function onEndState_ChargeBurst(obj, new_state)
{
if(!obj) return;
}
//
function onAttack_ChargeBurst(obj, damager, boundingBox, isStuck)
{
if(!obj) return;
if(isStuck) return;
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
if(!obj.getVar("ChargeBurstTar").is_obj_vector(damager)){
obj.getVar("ChargeBurstTar").push_obj_vector(damager);
if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, APDPATH_SM_CHARGEBURST)){
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, APDPATH_SM_CHARGEBURST, true);
sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage);
}
}
}
}
//破军升龙击
function checkExecutableSkill_ChargeCrash(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_CHARGECRASH);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_SMBYKK_CHARGECRASH, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_ChargeCrash(obj)
{
if (!obj) return false;
return true;
}
function onSetState_ChargeCrash(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
obj.sq_ZStop();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(ANI_SMBYKK_CHARGECRASHDASH);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/chargecrash/dash.ani"), 0, 0);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_CHARGECRASH, -1, 0, 1.0);
local weaponSubType = obj.getWeaponSubType();
local hitMax = 1, dis = 190;
if(weaponSubType == 5){
totalDamage = totalDamage - sq_GetIntData(obj, SKILL_SMBYKK_CHARGECRASH, 15);
hitMax = sq_GetIntData(obj, SKILL_SMBYKK_CHARGECRASH, 13) + hitMax;
dis = 210;
}
else if(weaponSubType == 0 && sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY) >= 6){
local addRate = sq_GetLevelData(obj, SKILL_SMBYKK_SHORTSWORDMASTERY, 20, sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY));
totalDamage = totalDamage * (1000 + addRate) / 1000;
}
print("totalDamage = "+totalDamage);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_CHARGECRASHDASH));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(false);
obj.getVar("chargeCrash_move").setInt(0, sq_GetXPos(obj));
obj.getVar("chargeCrash_move").setInt(1, dis);
obj.setTimeEvent(1, delay / 35, 30, true);
if(hitMax > 1) obj.setTimeEvent(0, delay / hitMax, hitMax - 1, false);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/chargecrash/dustdash.ani", -10, 0, 0);
obj.sq_PlaySound("SM_CHARGE_CRASH");
obj.sq_PlaySound("CCRASH_MOVING");
break;
case 1:
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/chargecrash/dustdashlast.ani", 0, 0, 0);
obj.sq_SetCurrentAnimation(ANI_SMBYKK_CHARGECRASHUPPER);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/chargecrash/up-slash.ani"), 0, 0);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_CHARGECRASH, -1, 1, 1.0);
local weaponSubType = obj.getWeaponSubType();
if(weaponSubType == 0 && sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY) >= 6){
local addRate = sq_GetLevelData(obj, SKILL_SMBYKK_SHORTSWORDMASTERY, 20, sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY));
totalDamage = totalDamage * (1000 + addRate) / 1000;
}
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_CHARGECRASHUPPER));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
obj.getVar("chargeCrash_bool").setBool(0, false);
switch(weaponSubType){
case 1:
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(false);
obj.setTimeEvent(0, delay / 2, 1, false);
break;
case 2:
case 3:
if(sq_GetSkillLevel(obj, SKILL_SMBYKK_BLUNTMASTERY) >= 7 || sq_GetSkillLevel(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY) >= 7){
obj.getVar("chargeCrash_bool").setBool(0, true);
obj.sq_IsEnterSkillLastKeyUnits(SKILL_SMBYKK_CHARGECRASH);
obj.sq_PlaySound("CCRASH_GET", 3333);
}
break;
}
obj.sq_PlaySound("SM_CHARGE_CRASH_UP");
obj.sq_PlaySound("CCRASH_CRASH");
local passiveskill75Lv = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFLIMIT);
if(passiveskill75Lv > 0){
local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 13, passiveskill75Lv) + sq_GetIntData(obj, SKILL_SMBYKK_STATEOFLIMIT, 14);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_CHARGECRASH, -1, 1, bonusRate.tofloat() / 100.0);
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,50,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFLIMIT,1,totalDamage,0,0,0,0,0,0,0);
}
break;
case 2:
obj.sq_SetCurrentAnimation(ANI_SMBYKK_CHARGECRASHFINISH);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local weaponSubType = obj.getWeaponSubType();
local bonusRate = sq_GetIntData(obj, SKILL_SMBYKK_CHARGECRASH, 9);
if(weaponSubType == 2) bonusRate = sq_GetIntData(obj, SKILL_SMBYKK_CHARGECRASH, 7);
bonusRate = bonusRate.tofloat() / 100.0;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_CHARGECRASH, -1, 1, bonusRate);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_CHARGECRASHFINISH));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
obj.sq_PlaySound("SM_CHARGE_CRASH_DOWN");
local aniPath = "character/swordman/effect/animation/1_swordman_bykk/chargecrash/down-slash.ani";
sq_AddDrawOnlyAniFromParent(obj, aniPath, 125, -1, 0);
break;
}
}
function onEndCurrentAni_ChargeCrash(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_SMBYKK_CHARGECRASH, STATE_PRIORITY_AUTO, true);
break;
case 1:
if(obj.getVar("chargeCrash_bool").getBool(0)){
obj.getVar("chargeCrash_bool").setBool(1, true);
local aniPath = "character/swordman/effect/animation/1_swordman_bykk/chargecrash/charge.ani";
local pooledObj = createOnlyDrawObject_Swordman_bykk(obj,aniPath,true,sq_GetDirection(obj),sq_GetDistancePos(sq_GetXPos(obj), sq_GetDirection(obj), -10),sq_GetYPos(obj) + 1,165,ENUM_DRAWLAYER_NORMAL);
local speedRate = 72000 / sq_GetIntData(obj, SKILL_SMBYKK_CHARGECRASH, 3);
local pAni = pooledObj.getCurrentAnimation();
pAni.setSpeedRate(speedRate.tofloat());
obj.getVar("chargeCrash_effect").clear_obj_vector();
obj.getVar("chargeCrash_effect").push_obj_vector(pooledObj);
break;
}
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_ChargeCrash(obj)
{
if(!obj) return;
}
function onProc_ChargeCrash(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
if(obj.getVar("chargeCrash_bool").getBool(0) && sq_GetCurrentFrameIndex(obj) >= 4){
if(obj.isDownSkillLastKey()){
local stateTime = obj.sq_GetStateTimer();
local currentAni = obj.getCurrentAnimation();
if(stateTime >= currentAni.getDelaySum(false) + sq_GetIntData(obj, SKILL_SMBYKK_CHARGECRASH, 3)){
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(STATE_SMBYKK_CHARGECRASH, STATE_PRIORITY_AUTO, true);
return;
}
}
else{
obj.stopSound(3333);
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
}
}
break;
}
}
function onKeyFrameFlag_ChargeCrash(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 65534:
local weaponSubType = obj.getWeaponSubType();
if(weaponSubType == 2){
local bonusRate = sq_GetIntData(obj, SKILL_SMBYKK_CHARGECRASH, 10);
bonusRate = bonusRate.tofloat() / 100.0;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_CHARGECRASH, -1, 1, bonusRate);
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,125,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_CHARGECRASH,1,totalDamage,0,0,0,0,0,0,0);
}
break;
}
return true;
}
function onTimeEvent_ChargeCrash(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 0: obj.resetHitObjectList(); break;
case 1:
local v = sq_GetAccel(0, obj.getVar("chargeCrash_move").getInt(1), timeEventCount, 30, true);
local dstX = sq_GetDistancePos(obj.getVar("chargeCrash_move").getInt(0), obj.getDirection(), v);//根据方向运算当前数值
if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);//设置当前x坐标
else obj.stopTimeEvent(1);
break;
}
}
function onEndState_ChargeCrash(obj, new_state)
{
if(!obj) return;
}
//流心
function checkExecutableSkill_FlowMind(obj)
{
if (!obj) return false;
if(sq_GetSkill(obj, SKILL_SMBYKK_FLOWMIND).isInCoolTime()) return false;
local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_FLOWMIND);
if (isUse){
obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMIND, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMIND), -1);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMIND, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_FlowMind(obj)
{
if (!obj) return false;
return true;
}
function onSetState_FlowMind(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0: obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDSTAY); break;
}
}
function onEndCurrentAni_FlowMind(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
FLOWMINDPOWERUP_APDPATH <- "character/swordman/1weaponmaster_bykk/ap_flowmindpowerup.nut"
function onProc_FlowMind(obj)
{
if(!obj) return;
obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMIND, true);
local b_useskill = obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMIND);
if(b_useskill != -1){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
return;
}
if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDPOWERUP).isInCoolTime()){
sq_SetKeyxEnable(obj, E_BUFF_COMMAND, true);
if(sq_IsEnterCommand(obj, E_BUFF_COMMAND)){
local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP);
obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMINDPOWERUP, skillLevel, -1);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/flowmindpowerup/charge_dodge.ani"), 0, -50);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/flowmindpowerup/flash_dodge.ani"), 0, -50);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) CNSquirrelAppendage.sq_RemoveAppendage(obj, FLOWMINDPOWERUP_APDPATH);
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, FLOWMINDPOWERUP_APDPATH, true);
// local buffTime = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 1);
// if(buffTime > 0) AddAppendage.sq_SetValidTime(buffTime);
AddAppendage.setEnableIsBuff(true);
AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_SMBYKK_FLOWMINDPOWERUP, skillLevel);
CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true);
obj.sq_PlaySound("SM_GUE_CHARGE");
// obj.setTimeEvent(1, sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 0), 1, false);
return;
}
}
if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDTHREE).isInCoolTime()){
// sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true);
obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMINDTHREE, true);
if(obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMINDTHREE) != -1){//sq_IsEnterCommand(obj, E_SKILL_COMMAND) ||
obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMINDTHREE, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDTHREE), -1);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTHREE, STATE_PRIORITY_IGNORE_FORCE, true);
return;
}
}
if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDONE).isInCoolTime()){
// sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMINDONE, true);
if(obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMINDONE) != -1){//sq_IsEnterCommand(obj, E_ATTACK_COMMAND) ||
obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMINDONE, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDONE), -1);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDONE, STATE_PRIORITY_IGNORE_FORCE, true);
return;
}
}
if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDTWO).isInCoolTime()){
// sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMINDTWO, true);
if(obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMINDTWO) != -1){//sq_IsEnterCommand(obj, E_JUMP_COMMAND) ||
obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMINDTWO, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDTWO), -1);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTWO, STATE_PRIORITY_IGNORE_FORCE, true);
return;
}
}
if(!sq_GetSkill(obj, SKILL_SMBYKK_HUNDREDSWORD).isInCoolTime()){
obj.setSkillCommandEnable(SKILL_SMBYKK_HUNDREDSWORD, true);
if(obj.sq_IsEnterSkill(SKILL_SMBYKK_HUNDREDSWORD) != -1){
obj.startSkillCoolTime(SKILL_SMBYKK_HUNDREDSWORD, sq_GetSkillLevel(obj, SKILL_SMBYKK_HUNDREDSWORD), -1);
obj.sq_IntVectClear();
if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) obj.sq_IntVectPush(1);
else obj.sq_IntVectPush(0);
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(47, STATE_PRIORITY_IGNORE_FORCE, true);
return;
}
}
if(!sq_GetSkill(obj, SKILL_SMBYKK_METEORSWORD).isInCoolTime()){
obj.setSkillCommandEnable(SKILL_SMBYKK_METEORSWORD, true);
if(obj.sq_IsEnterSkill(SKILL_SMBYKK_METEORSWORD) != -1){
obj.startSkillCoolTime(SKILL_SMBYKK_METEORSWORD, sq_GetSkillLevel(obj, SKILL_SMBYKK_METEORSWORD), -1);
obj.sq_IntVectClear();
obj.sq_IntVectPush(10);
obj.sq_AddSetStatePacket(STATE_SMBYKK_METEORSWORD, STATE_PRIORITY_IGNORE_FORCE, true);
return;
}
}
}
function onKeyFrameFlag_FlowMind(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_FlowMind(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onEndState_FlowMind(obj, new_state)
{
if(!obj) return;
}
function proc_appendage_flowmindpowerup(appendage)
{
if(!appendage) return;
local parentObj = appendage.getParent();
if(!parentObj || parentObj.getState() == STATE_DIE){appendage.setValid(false); return;}
}
function onStart_appendage_flowmindpowerup(appendage)
{
if(!appendage) return;
local obj = sq_GetCNRDObjectToSQRCharacter(appendage.getParent());
local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP);
local value1 = sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 3, skillLevel);
local change_appendage = appendage.sq_getChangeStatus("flowmindpowerup");
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("flowmindpowerup",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value1);
if(change_appendage){
change_appendage.clearParameter();
change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, (value1.tofloat() * 0.1));
}
}
//流心:刺
function checkExecutableSkill_FlowMindOne(obj)
{
if (!obj) return false;
// if(sq_GetSkill(obj, SKILL_SMBYKK_FLOWMIND).isInCoolTime()) return false;
local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_FLOWMINDONE);
if (isUse){
obj.sq_IntVectClear();
if(sq_GetZPos(obj) <= 0) obj.sq_IntVectPush(0);
else obj.sq_IntVectPush(10);
obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDONE, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_FlowMindOne(obj)
{
if (!obj) return false;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH) || obj.getState() == STATE_SMBYKK_FLOWMIND) return true;
else return false;
}
function onSetState_FlowMindOne(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
obj.sq_ZStop();
switch(subState){
case 0: obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDONE); break;
case 1: obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDONEADD); break;
case 10: obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDONEJUMPATTACK); break;
}
local speed = 1.0;
if(subState == 10) speed = 1.1;
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed);
switch(subState){
case 0:
obj.getVar("flowmindone_bool").setBool(0, false);
obj.getVar("flowmindone_bool").setBool(1, false);
obj.sq_PlaySound("R_SM_FLOWMIND_ONE");
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/flowmindone/dash_dodge.ani"), 0, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/flowmindone/move_shadow_dodge1.ani", 0, -3, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/flowmindone/move_shadow_dodge2.ani", 0, -2, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/flowmindone/move_shadow_normal.ani", 0, -1, 0);
case 10:
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){
print("FlowMindOne");
obj.getVar("handlingsword_canShoot").setBool(0, true);
}
local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, 1.0 + flowmindExLv.tofloat() * 0.25);
local weaponSubType = obj.getWeaponSubType();
local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDONE, 2);
switch(weaponSubType){
case 1:
case 5:
hitMax = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDONE, 3) * 2;
totalDamage = totalDamage * sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDONE, 4) / 100;
break;
case 2:
totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDONE, 9, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDONE))) / 100;
break;
}
// print("hitMax = "+hitMax);
local currentAni = obj.getCurrentAnimation();
if(subState == 10){
local speedRate = 100.0 / currentAni.getDelaySum(0, 0).tofloat();
local speed = 500.0 * speedRate;
if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed);
else sq_SetVelocity(obj, 0, -speed);
sq_SetVelocity(obj, 2, -speed);
totalDamage = totalDamage * hitMax;
hitMax = 1;
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/flowmindone/fallstate_one_leap.ani", 0, 0, 0);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/flowmindone/fallstate_one_start.ani"), 0, 0);
}
else{
local delay = currentAni.getDelaySum(0, 2);
obj.setTimeEvent(2, delay, 1, false);
obj.sq_SetStaticMoveInfo(0, 120, 0, false, 100, true);
obj.sq_SetMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL);
}
// print("totalDamage1 = "+totalDamage);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 0, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000;
// print("totalDamage2 = "+totalDamage);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_FLOWMINDONE));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
obj.sq_PlaySound("R_SM_FLOWMIND_ONE");
obj.getVar("blademastery_canExp").setBool(0, true);
break;
case 1:
local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX);
local bonusRate = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDONE, 6);
bonusRate = (bonusRate.tofloat() / 100.0) * (100.0 + 25.0 * flowmindExLv) / 100.0;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, bonusRate);
local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDONE, 2);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_FLOWMINDONEADD));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage * hitMax);
break;
}
local passiveskill90Lv = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD);
if(passiveskill90Lv > 0){
local weaponSubType = obj.getWeaponSubType();
local currentAni = obj.getCurrentAnimation();
if(weaponSubType == 5 || weaponSubType == 1) return;
switch(subState){
case 0:
local speedRate = 8000 / currentAni.getDelaySum(0, 0);
local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 1, passiveskill90Lv);
switch(weaponSubType){
case 2: bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 7, passiveskill90Lv); break;
case 3: bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 9, passiveskill90Lv); break;
}
local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX);
if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, bonusRate / 100.0);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 0, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000;
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,1,totalDamage,weaponSubType,subState,speedRate,0,0,0,0);
break;
case 1:
local speedRate = 7000 / currentAni.getDelaySum(0, 0);
local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 1, passiveskill90Lv);
switch(weaponSubType){
case 3: bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 10, passiveskill90Lv); break;
}
local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX);
if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, bonusRate.tofloat() / 100.0);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 0, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000;
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,1,totalDamage,weaponSubType,subState,speedRate,0,0,0,0);
if(weaponSubType == 3){
bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 11, passiveskill90Lv);
totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, bonusRate.tofloat() / 100.0);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 0, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000;
local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 8);
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,75,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,4,totalDamage,weaponSubType,subState,speedRate,hitMax,0,0,0);
}
break;
case 10:
local speedRate = 10000 / currentAni.getDelaySum(0, 0);
switch(weaponSubType){
case 0:
local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 3, passiveskill90Lv);
local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX);
if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv);
local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 1);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, bonusRate.tofloat() / 100.0);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 0, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000;
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,sq_GetZPos(obj) / 3,0,-sq_GetZPos(obj) / 2,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,1,totalDamage,weaponSubType,subState,speedRate,hitMax,0,0,0);
break;
case 3:
local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 12, passiveskill90Lv);
local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX);
if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, bonusRate.tofloat() / 100.0);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 0, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000;
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,1,totalDamage,weaponSubType,subState,speedRate,0,0,0,0);
break;
}
break;
}
}
local passiveskill75Lv = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFLIMIT);
if(passiveskill75Lv > 0){
switch(subState){
case 0:
case 10:
local superArmorTime = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 12, passiveskill75Lv);
obj.sq_SetSuperArmorUntilTime(obj, superArmorTime);
break;
}
}
}
function onEndCurrentAni_FlowMindOne(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
local stateSet = obj.getVar("flowmindoneSet").getInt(0);
if(stateSet > 0){
obj.startSkillCoolTime(11, sq_GetSkillLevel(obj, 11), -1);
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(29, STATE_PRIORITY_AUTO, true);
return;
}
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProc_FlowMindOne(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(obj.getVar("flowmindone_bool").getBool(0)){
// sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true);
// sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
// if(sq_IsEnterCommand(obj, E_SKILL_COMMAND)) obj.getVar("flowmindone_bool").setBool(0, true);
// else if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.getVar("flowmindone_bool").setBool(1, true);
if(obj.getWeaponSubType() == 0 || obj.getWeaponSubType() == 3){
sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true);
if(sq_IsEnterCommand(obj, E_SKILL_COMMAND)){
obj.getVar("flowmindone_bool").setBool(0, false);
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDONE, STATE_PRIORITY_AUTO, true);
return;
}
}
else if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDTHREE).isInCoolTime()){
// sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true);
obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMINDTHREE, true);
local b_useskill = obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMINDTHREE);
if(b_useskill != -1){//sq_IsEnterCommand(obj, E_SKILL_COMMAND) ||
obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMINDTHREE, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDTHREE), -1);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTHREE, STATE_PRIORITY_IGNORE_FORCE, true);
return;
}
}
if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDTWO).isInCoolTime()){
//sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMINDTWO, true);
local b_useskill = obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMINDTWO);
if(b_useskill != -1){//sq_IsEnterCommand(obj, E_JUMP_COMMAND) ||
obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMINDTWO, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDTWO), -1);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTWO, STATE_PRIORITY_IGNORE_FORCE, true);
return;
}
}
if(sq_IsKeyDown(OPTION_HOTKEY_ATTACK, ENUM_SUBKEY_TYPE_ALL)) {
//obj.getVar("flowmindone_bool").setBool(0, false);
//obj.getVar("flowmindoneSet").setInt(0, 1);
obj.startSkillCoolTime(11, sq_GetSkillLevel(obj, 11), -1);
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(29, STATE_PRIORITY_IGNORE_FORCE, true);
return;
}
}
break;
case 1:
if(obj.getVar("flowmindone_bool").getBool(0)){
if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDTHREE).isInCoolTime()){
//sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true);
obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMINDTHREE, true);
local b_useskill = obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMINDTHREE);
if(b_useskill != -1){//sq_IsEnterCommand(obj, E_SKILL_COMMAND) ||
obj.getVar("flowmindone_bool").setBool(0, false);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTHREE, STATE_PRIORITY_IGNORE_FORCE, true);
return;
}
}
if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDTWO).isInCoolTime()){
//sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMINDTWO, true);
local b_useskill = obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMINDTWO);
if(b_useskill != -1){//sq_IsEnterCommand(obj, E_JUMP_COMMAND) ||
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTWO, STATE_PRIORITY_IGNORE_FORCE, true);
return;
}
}
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){
obj.startSkillCoolTime(11, sq_GetSkillLevel(obj, 11), -1);
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(29, STATE_PRIORITY_AUTO, true);
return;
}
}
break;
case 10:
if(sq_GetZPos(obj) <= 0){
obj.sq_StopMove();
obj.sq_ZStop();
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/flowmindone/fallstate_one_end.ani", 0, 0, 0);
if(sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD) > 0)
sq_AddDrawOnlyAniFromParent(obj, "passiveobject/0_swordman_bykk/1weaponmaster/animation/stateofinvisiblesword/flowmindone/flowmindlv95longswordonefallend_fxbodyl.ani", 0, 1, 0);
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
}
break;
}
if(subState < 10 && obj.getVar("flowmindone_bool").getBool(2) == 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("flowmindone_bool").setBool(2, true);
obj.sq_StopMove();
}
}
}
function onKeyFrameFlag_FlowMindOne(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1005:
obj.getVar("flowmindone_bool").setBool(0, true);
obj.getVar("flowmindoneSet").setInt(0, 0);
break;
case 2008:
obj.getVar("flowmindone_bool").setBool(0, true);
break;
}
return true;
}
function onTimeEvent_FlowMindOne(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 0: obj.resetHitObjectList(); break;
case 1:
local vx = sq_GetAccel(0, obj.getVar("flowmindone_move").getInt(1), timeEventCount, 10, false);
local vz = sq_GetAccel(obj.getVar("flowmindone_move").getInt(1), 0, timeEventCount, 10, false);
local dstX = sq_GetDistancePos(obj.getVar("flowmindone_move").getInt(0), obj.getDirection(), vx);
if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);
sq_setCurrentAxisPos(obj, 2, vz);
break;
case 2:
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(3, 7);
local weaponSubType = obj.getWeaponSubType();
local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDONE, 2);
switch(weaponSubType){
case 1:
case 5:
hitMax = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDONE, 3) * 2;
break;
}
obj.setTimeEvent(0, delay / hitMax, hitMax - 1, false);
break;
}
}
function onEndState_FlowMindOne(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_SMBYKK_FLOWMINDONE){
obj.getVar("flowmindone_bool").setBool(2, false);
}
}
function onAttack_FlowMindOne(obj, damager, boundingBox, isStuck)
{
if(isStuck) return;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH) && !sq_GetSkill(obj, SKILL_SMBYKK_FLOWMIND).isSealFunction() && damager.isObjectType(OBJECTTYPE_ACTIVE)){
local aniPath = "character/swordman/effect/animation/1_swordman_bykk/flowmindpowerup/flow_mind_power_up_hit_effect.ani";
local direction = sq_GetDirection(obj);
local xPos = sq_GetXPos(damager), yPos = sq_GetYPos(damager), zPos = sq_GetCenterZPos(boundingBox);
createOnlyDrawObject_Swordman_bykk(damager,aniPath,true,direction,xPos,yPos,zPos,ENUM_DRAWLAYER_NORMAL);
}
}
//流心:跃
function checkExecutableSkill_FlowMindTwo(obj)
{
if (!obj) return false;
// if(sq_GetSkill(obj, SKILL_SMBYKK_FLOWMIND).isInCoolTime()) return false;
local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_FLOWMINDTWO);
if (isUse){
obj.sq_IntVectClear();
if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(10);
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTWO, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_FlowMindTwo(obj)
{
if (!obj) return false;
if((CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH) && !sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDPOWERUP).isSealFunction()) || obj.getState() == STATE_SMBYKK_FLOWMIND) return true;
else return false;
}
function onSetState_FlowMindTwo(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0: obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDTWOJUMP); break;
case 1: obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDTWOLANDING); break;
case 2: obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDTWOSIT); break;
case 3:
if(obj.getWeaponSubType() <= 1) obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDTWOATTACK2);
else obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDTWOATTACK1);
break;
case 10: obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDTWOJUMPWAIT); break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
switch(subState){
case 0:
obj.sq_ZStop();
local currentAni = obj.getCurrentAnimation();
local speedRate = 100.0 / currentAni.getDelaySum(0, 0).tofloat();
// print("speedRate = "+speedRate);
if(speedRate < 1.0){
currentAni.setSpeedRate(100.0);
speedRate = 1.0;
}
else if(speedRate >= 1.3){
currentAni.setSpeedRate(130.0);
speedRate = 1.3;
}
obj.getVar("flowmindtwo_set").setFloat(0, speedRate);
local speed = 450 * speedRate;
if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed);
else sq_SetVelocity(obj, 0, -speed);
local delay = (10.0 / speedRate).tointeger();
obj.setTimeEvent(1, delay, 30, true);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){
print("FlowMindTwo");
obj.getVar("handlingsword_canShoot").setBool(0, true);
}
break;
case 1:
case 3:
if(subState == 3) print("test");
obj.sq_ZStop();
local currentAni = obj.getCurrentAnimation();
obj.getVar("flowmindTwo_Move").setInt(0, sq_GetZPos(obj));
local speedRate = obj.getVar("flowmindtwo_set").getFloat(0);
if(speedRate < 1.0){
currentAni.setSpeedRate(100.0);
speedRate = 1.0;
}
else if(speedRate >= 1.3){
currentAni.setSpeedRate(130.0);
speedRate = 1.3;
}
else currentAni.setSpeedRate(speedRate * 100.0);
// if(subState == 3) print(currentAni.getDelaySum(0, 0));
local speed = 450 * speedRate;
if(subState == 3) speed = 200 * speedRate;
if(obj.getVar("flowmindtwo_bool").getBool(3)) speed = speed * 1.5;
if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed);
else sq_SetVelocity(obj, 0, -speed);
local delay = (10.0 / speedRate).tointeger();
if(subState == 3){
delay = (16.0 / speedRate).tointeger();
if(obj.getWeaponSubType() <= 1) delay = (18.667 / speedRate).tointeger();
}
obj.setTimeEvent(2, delay, 30, true);
if(subState == 3){
local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDTWO, -1, 0, 1.0 + 0.25 * flowmindExLv);
if(obj.getWeaponSubType() <= 1){
totalDamage = totalDamage * sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDTWO, 9) / 100;
local currentAni = obj.getCurrentAnimation();
local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDTWO, 7);
obj.setTimeEvent(0, currentAni.getDelaySum(0, 2) / hitMax, hitMax - 1, false);
}
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 1, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000;
if(obj.getVar("flowmindtwo_bool").getBool(3)) totalDamage = totalDamage * (100 + sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDTWO, 14)) / 100;
local atkIndex = [ATK_SMBYKK_FLOWMINDTWOATTACK1,ATK_SMBYKK_FLOWMINDTWOATTACK1,ATK_SMBYKK_FLOWMINDTWOATTACK2,ATK_SMBYKK_FLOWMINDTWOATTACK3,0,ATK_SMBYKK_FLOWMINDTWOATTACK1];
local weaponSubType = obj.getWeaponSubType();
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex[weaponSubType]));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
obj.getVar("flowmindtwo_bool").setBool(4, true);
}
obj.sq_PlaySound("R_SM_FLOWMIND_TWO");
obj.getVar("blademastery_canExp").setBool(0, true);
break;
case 10:
obj.getVar("flowmindtwo_bool").setBool(3, true);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/flowmindtwo/fallstate_two_leap.ani", 0, 0, -25);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/flowmindtwo/fallstate_two_air.ani", 0, 1, 0);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){
print("FlowMindTwo");
obj.getVar("handlingsword_canShoot").setBool(0, true);
}
obj.sq_PlaySound("R_SM_FLOWMIND_TWO");
break;
}
local passiveskill90Lv = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD);
if(passiveskill90Lv > 0){
local weaponSubType = obj.getWeaponSubType();
switch(subState){
case 3:
local currentAni = obj.getCurrentAnimation();
local speedRate = 8000 / currentAni.getDelaySum(0, 0);
switch(weaponSubType){
case 0:
local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 4, passiveskill90Lv);
local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX);
if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, bonusRate.tofloat() / 100.0);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 1, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000;
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,1,1,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,2,totalDamage,weaponSubType,subState,speedRate,0,0,0,0);
break;
case 1:
local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 5, passiveskill90Lv);
local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX);
if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, bonusRate.tofloat() / 100.0);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 1, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000;
local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 3);
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,1,1,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,2,totalDamage,weaponSubType,subState,speedRate,hitMax,0,0,0);
break;
case 2:
local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 8, passiveskill90Lv);
local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX);
if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, bonusRate.tofloat() / 100.0);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 1, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000;
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,-sq_GetZPos(obj),sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,2,totalDamage,weaponSubType,subState,speedRate,0,0,0,0);
break;
case 5:
local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 14, passiveskill90Lv);
local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX);
if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDONE, -1, 0, bonusRate.tofloat() / 100.0);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 1, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000;
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,1,1,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,2,totalDamage,weaponSubType,subState,speedRate,0,0,0,0);
break;
}
break;
}
}
local passiveskill75Lv = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFLIMIT);
if(passiveskill75Lv > 0){
switch(subState){
case 0:
case 10:
local superArmorTime = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 12, passiveskill75Lv);
obj.sq_SetSuperArmorUntilTime(obj, superArmorTime);
break;
}
}
}
function onEndCurrentAni_FlowMindTwo(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
if(subState == 1) obj.getVar("flowmindtwo_bool").setBool(2, true);
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTWO, STATE_PRIORITY_AUTO, true);
break;
case 2:
if(obj.getVar("flowmindtwo_bool").getBool(5)){
obj.getVar("flowmindtwo_bool").setBool(5, false);
sq_setCurrentAxisPos(obj, 2, 0);
if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDONE).isInCoolTime()){
obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMINDONE, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDONE), -1);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDONE, STATE_PRIORITY_AUTO, true);
return;
}
}
if(obj.getVar("flowmindtwo_bool").getBool(2)){
// obj.endSkillCoolTime(SKILL_SMBYKK_FLOWMINDTWO);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMIND, STATE_PRIORITY_AUTO, true);
break;
}
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
case 3:
obj.getVar("flowmindtwo_bool").setBool(2, false);
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTWO, STATE_PRIORITY_AUTO, true);
break;
case 10:
obj.sq_IntVectClear();
obj.sq_IntVectPush(3);
obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTWO, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_FlowMindTwo(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMINDTWO, true);
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND) || sq_IsEnterCommand(obj, E_JUMP_COMMAND) || obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMINDTWO) != -1){
obj.removeAllTimeEvent();
obj.sq_IntVectClear();
obj.sq_IntVectPush(3);
obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTWO, STATE_PRIORITY_AUTO, true);
return;
}
break;
}
if(obj.getVar("flowmindtwo_bool").getBool(1)){
// if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDONE).isInCoolTime()){
// sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
// obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMINDONE, true);
// if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND) || obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMINDONE) != -1){
// obj.getVar("flowmindtwo_bool").setBool(5, true);
// }
// }
if(!sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDTHREE).isInCoolTime()){
// sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true);
obj.setSkillCommandEnable(SKILL_SMBYKK_FLOWMINDTHREE, true);
if(obj.sq_IsEnterSkill(SKILL_SMBYKK_FLOWMINDTHREE) != -1){//sq_IsEnterCommand(obj, E_SKILL_COMMAND) ||
obj.getVar("flowmindtwo_bool").setBool(1, false);
obj.startSkillCoolTime(SKILL_SMBYKK_FLOWMINDTHREE, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDTHREE), -1);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTHREE, STATE_PRIORITY_IGNORE_FORCE, true);
return;
}
}
}
}
function onProc_FlowMindTwo(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
case 3:
local speed = 90.0 * obj.getVar("flowmindtwo_set").getFloat(0);
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){
sq_SetVelocity(obj, 1, speed);
}
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){
sq_SetVelocity(obj, 1, -speed);
}
else sq_SetVelocity(obj, 1, 0.0);
break;
}
}
function onKeyFrameFlag_FlowMindTwo(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1002:
obj.getVar("flowmindtwo_bool").setBool(1, true);
break;
}
return true;
}
function onTimeEvent_FlowMindTwo(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 0: obj.resetHitObjectList(); break;
case 1:
local v = sq_GetAccel(0, 75, timeEventCount, 25, true);
sq_setCurrentAxisPos(obj, 2, v);
break;
case 2:
// print("frameIndex = "+sq_GetCurrentFrameIndex(obj));
local v = sq_GetAccel(obj.getVar("flowmindTwo_Move").getInt(0), 0, timeEventCount, 26, false);
sq_setCurrentAxisPos(obj, 2, v);
break;
}
}
function onEndState_FlowMindTwo(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_SMBYKK_FLOWMINDTWO){
obj.getVar("flowmindtwo_bool").setBool(3, false);
}
}
function onAttack_FlowMindTwo(obj, damager, boundingBox, isStuck)
{
if(isStuck) return;
if(obj.getWeaponSubType() == 2 && damager.isObjectType(OBJECTTYPE_ACTIVE) && obj.getVar("flowmindtwo_bool").getBool(4)){
obj.getVar("flowmindtwo_bool").setBool(4, false);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDTWO, -1, 3, 1.0);
local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDTWO, -1, 2, 1.0) + 100;
createSkillPassive_Swordman_bykk(obj,damager,PASSIVEOBJ_BYKK_SWORDMAN,0,0,-sq_GetZPos(obj),sq_GetDirection(obj),1,SKILL_SMBYKK_FLOWMINDTWO,1,totalDamage,sizeRate,0,0,0,0,0,0);
}
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH) && !sq_GetSkill(obj, SKILL_SMBYKK_FLOWMIND).isSealFunction() && damager.isObjectType(OBJECTTYPE_ACTIVE)){
local aniPath = "character/swordman/effect/animation/1_swordman_bykk/flowmindpowerup/flow_mind_power_up_hit_effect.ani";
local direction = sq_GetDirection(obj);
local xPos = sq_GetXPos(damager), yPos = sq_GetYPos(damager), zPos = sq_GetCenterZPos(boundingBox);
createOnlyDrawObject_Swordman_bykk(damager,aniPath,true,direction,xPos,yPos,zPos,ENUM_DRAWLAYER_NORMAL);
}
}
//流心:升
function checkExecutableSkill_FlowMindThree(obj)
{
if (!obj) return false;
// if(sq_GetSkill(obj, SKILL_SMBYKK_FLOWMIND).isInCoolTime()) return false;
local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_FLOWMINDTHREE);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTHREE, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_FlowMindThree(obj)
{
if (!obj) return false;
if((CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH) && !sq_GetSkill(obj, SKILL_SMBYKK_FLOWMINDPOWERUP).isSealFunction()) || obj.getState() == STATE_SMBYKK_FLOWMIND) return true;
else return false;
}
function onSetState_FlowMindThree(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0: obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDTHREEREADY); break;
case 1:
local weaponSubType = obj.getWeaponSubType();
local hitMax = 1, bonusRate = 1.0;
if(weaponSubType == 5){
hitMax = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDTHREE, 3); bonusRate = 0.8;
obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDTHREEATTACKLIGHTSWORD);
}
else if(weaponSubType == 1){
hitMax = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDTHREE, 3); bonusRate = 0.8;
obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDTHREEATTACKBLADE);
}
else obj.sq_SetCurrentAnimation(ANI_SMBYKK_FLOWMINDTHREEATTACK);
local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX);
bonusRate = bonusRate * (1.0 + 0.25 * flowmindExLv);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDTHREE, -1, 0, bonusRate);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 2, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000;
obj.getVar("flowmindThreeBonusRate").setInt(0, totalDamage);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_FLOWMINDTHREEATTACK));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
obj.getVar("blademastery_canExp").setBool(0, true);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
switch(subState){
case 0:
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){
print("FlowMindThree");
obj.getVar("handlingsword_canShoot").setBool(0, true);
}
break;
case 1:
obj.sq_SetStaticMoveInfo(0, 50, 150, false, 100, true);
obj.sq_SetMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL);//开始移动
local currentAni = obj.getCurrentAnimation();
local speedRate = 10000.0 / currentAni.getDelaySum(0, 0);
if(speedRate > 1.3) speedRate = 1.3;
if(obj.getWeaponSubType() == 3) speedRate = speedRate * 0.7;
sq_SetVelocity(obj, 2, 1000.0 * speedRate);
if(obj.getWeaponSubType() == 5 || obj.getWeaponSubType() == 1){
local upTime = (200.0 / speedRate).tointeger();
local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDTHREE, 3);
obj.setTimeEvent(0, upTime / hitMax, hitMax - 1, false);
}
obj.sq_PlaySound("R_SM_FLOWMIND_THREE");
break;
}
local passiveskill90Lv = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD);
if(passiveskill90Lv > 0){
local weaponSubType = obj.getWeaponSubType();
switch(subState){
case 1:
local currentAni = obj.getCurrentAnimation();
local speedRate = 1000000 / currentAni.getDelaySum(0, 0);
switch(weaponSubType){
case 1:
local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 6, passiveskill90Lv);
bonusRate = bonusRate.tofloat() * 0.8 / 100.0;
local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX);
if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDTHREE, -1, 0, bonusRate);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 2, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000;
local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 5);
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,3,totalDamage,weaponSubType,subState,speedRate,hitMax,0,0,0);
break;
case 3:
local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 13, passiveskill90Lv);
local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX);
if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDTHREE, -1, 0, bonusRate / 100.0);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 2, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000;
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,3,totalDamage,weaponSubType,subState,speedRate,0,0,0,0);
break;
case 5:
local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFINVISIBLESWORD, 15, passiveskill90Lv);
local flowmindExLv = sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDALLEX);
if(flowmindExLv > 0) bonusRate = bonusRate.tofloat() * (1.0 + 0.25 * flowmindExLv);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_FLOWMINDTHREE, -1, 0, bonusRate / 100.0);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH)) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_SMBYKK_FLOWMINDPOWERUP, 2, sq_GetSkillLevel(obj, SKILL_SMBYKK_FLOWMINDPOWERUP))) / 1000;
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFINVISIBLESWORD,3,totalDamage,weaponSubType,subState,speedRate,0,0,0,0);
break;
}
break;
}
}
local passiveskill75Lv = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFLIMIT);
if(passiveskill75Lv > 0){
switch(subState){
case 0:
local superArmorTime = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 12, passiveskill75Lv);
obj.sq_SetSuperArmorUntilTime(obj, superArmorTime);
break;
}
}
}
function onEndCurrentAni_FlowMindThree(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDTHREE, STATE_PRIORITY_AUTO, true);
break;
case 1:
if(obj.getVar("flowmindthree_bool").getBool(0)){
obj.getVar("flowmindthree_bool").setBool(0, false);
obj.sq_IntVectClear();
obj.sq_IntVectPush(10);
obj.sq_AddSetStatePacket(STATE_SMBYKK_FLOWMINDONE, 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;
}
}
function onProc_FlowMindThree(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
local height = 190;
if(obj.getWeaponSubType() == 3) height = 120;
else if(obj.getWeaponSubType() == 2) height = 150;
if((sq_GetZPos(obj) >= height || obj.sq_GetStateTimer() > 1000) && sq_GetCurrentFrameIndex(obj) == 0){
local currentAni = obj.getCurrentAnimation();
currentAni.setCurrentFrameWithChildLayer(1);
}
break;
}
}
function onKeyFrameFlag_FlowMindThree(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_FlowMindThree(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 0: obj.resetHitObjectList(); break;
}
}
function onEndState_FlowMindThree(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_SMBYKK_FLOWMINDTHREE){
obj.getVar("flowmindthree_bool").setBool(0, false);
}
}
function onAttack_FlowMindThree(obj, damager, boundingBox, isStuck)
{
if(isStuck) return;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, FLOWMINDPOWERUP_APDPATH) && !sq_GetSkill(obj, SKILL_SMBYKK_FLOWMIND).isSealFunction() && damager.isObjectType(OBJECTTYPE_ACTIVE)){
local aniPath = "character/swordman/effect/animation/1_swordman_bykk/flowmindpowerup/flow_mind_power_up_hit_effect.ani";
local direction = sq_GetDirection(obj);
local xPos = sq_GetXPos(damager), yPos = sq_GetYPos(damager), zPos = sq_GetCenterZPos(boundingBox);
createOnlyDrawObject_Swordman_bykk(damager,aniPath,true,direction,xPos,yPos,zPos,ENUM_DRAWLAYER_NORMAL);
}
local weaponSubType = obj.getWeaponSubType();
if(weaponSubType == 1 || weaponSubType == 5) return;
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
if(damager.getState() == STATE_DOWN){
local totalDamage = obj.getVar("flowmindThreeBonusRate").getInt(0) * sq_GetIntData(obj, SKILL_SMBYKK_FLOWMINDTHREE, 5) / 100;
local group = sq_GetGroup(damager);
local uniqueId = sq_GetUniqueId(damager);
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_FLOWMINDTHREE,1,totalDamage,group,uniqueId,0,0,0,0,0);
}
}
}
//流心:狂
function checkExecutableSkill_FlowMindPowerUp(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(0);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_FlowMindPowerUp(obj)
{
if (!obj) return false;
return true;
}
function onSetState_FlowMindPowerUp(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(120);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_FlowMindPowerUp(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_FlowMindPowerUp(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_FlowMindPowerUp(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_FlowMindPowerUp(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_FlowMindPowerUp(obj, new_state)
{
if(!obj) return;
}
//拔刀斩
function checkExecutableSkill_SMMomentarySlash(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_MOMENTARYSLASH);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_SMBYKK_MOMENTARYSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_SMMomentarySlash(obj)
{
if (!obj) return false;
return true;
}
function onSetState_SMMomentarySlash(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(ANI_SMBYKK_MOMENTARYSLASH_READY);
local currentAni = obj.getCurrentAnimation();
local weaponSubType = obj.getWeaponSubType();
local delay = 300;
switch(weaponSubType){
case 0: delay = 80; break;
case 1: delay = 120; break;
case 2: delay = 200; break;
case 5: delay = 80; break;
}
sq_SetFrameDelayTime(currentAni, 0, delay);
if(weaponSubType == 3 && sq_GetSkillLevel(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY) >= 3){
obj.sq_IsEnterSkillLastKeyUnits(SKILL_SMBYKK_MOMENTARYSLASH);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/momentaryslash/charge2.ani"), -30, 0);
}
break;
case 1:
// if(obj.getWeaponSubType() == 0) obj.sq_SetCurrentAnimation(ANI_SMBYKK_MOMENTARYSLASH_SLASH);
// else
obj.sq_SetCurrentAnimation(ANI_SMBYKK_MOMENTARYSLASH);
break;
case 2: obj.sq_SetCurrentAnimation(ANI_SMBYKK_MOMENTARYSLASH); break;
}
if(subState == 0) obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
else{
local speed = 1.0;
switch(obj.getWeaponSubType()){
case 1: speed = 1.1; break;
case 5: speed = 1.2; break;
}
if(subState == 2) speed = speed * 1.5;
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed);
}
local currentAni = obj.getCurrentAnimation();
sq_ClearAttackBox(currentAni);
switch(subState){
case 0:
local delay = currentAni.getDelaySum(0, 0);
obj.getVar("MomentarySlashSet").setInt(1, delay);
obj.sq_PlaySound("SM_BAL_READY");
obj.getVar("blademastery_canExp").setBool(0, true);
break;
case 1:
local weaponSubType = obj.getWeaponSubType();
local speedRate = 50000 / currentAni.getDelaySum(0, 0);
// if(weaponSubType == 0) speedRate = 2500 / currentAni.getDelaySum(0, 0);
print("speedRate = "+speedRate);
if(speedRate > 200){
currentAni.setSpeedRate(200.0);
speedRate = 200;
}
obj.getVar("MomentarySlashSet").setInt(0, speedRate);
obj.getVar("MomentarySlash_Bool").setBool(0, false);
if(weaponSubType == 1 || weaponSubType == 5){
obj.getVar("MomentarySlash_Bool").setBool(0, true);
}
case 2:
currentAni.setCurrentFrameWithChildLayer(1);
obj.sq_PlaySound("SM_BAL_SHOT");
local speedRate = obj.getVar("MomentarySlashSet").getInt(0).tofloat() * 2.5;
currentAni.setSpeedRate(speedRate);
break;
}
}
function onEndCurrentAni_SMMomentarySlash(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY) >= 3) break;
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_SMBYKK_MOMENTARYSLASH, STATE_PRIORITY_AUTO, true);
break;
case 1:
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_SMMomentarySlash(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(obj.getWeaponSubType() == 3 && sq_GetSkillLevel(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY) >= 3){
local maxTime = sq_GetIntData(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY, 8);
local stateTime = obj.sq_GetStateTimer();
if(obj.isDownSkillLastKey()){
if(stateTime >= maxTime){
obj.getVar("MomentarySlash_Bool").setBool(1, true);
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_SMBYKK_MOMENTARYSLASH, STATE_PRIORITY_AUTO, true);
return;
}
}
else{
if(stateTime >= obj.getVar("MomentarySlashSet").getInt(1)){
obj.getVar("MomentarySlash_Bool").setBool(1, false);
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_SMBYKK_MOMENTARYSLASH, STATE_PRIORITY_AUTO, true);
return;
}
}
}
break;
case 1:
if(sq_GetCurrentFrameIndex(obj) >= 5){
if(obj.getVar("MomentarySlash_Bool").getBool(0)){
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
obj.setSkillCommandEnable(SKILL_SMBYKK_MOMENTARYSLASH, true);
local b_useskill = obj.sq_IsEnterSkill(SKILL_SMBYKK_MOMENTARYSLASH);
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND) || b_useskill != -1){
obj.getVar("MomentarySlash_Bool").setBool(0, false);
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(STATE_SMBYKK_MOMENTARYSLASH, STATE_PRIORITY_AUTO, true);
return;
}
}
}
break;
}
}
function onKeyFrameFlag_SMMomentarySlash(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1002:
local sizeRate = sq_GetIntData(obj, SKILL_SMBYKK_MOMENTARYSLASH, 0);
local speedRate = obj.getVar("MomentarySlashSet").getInt(0);
local baseAniPath = "character/swordman/effect/animation/1_swordman_bykk/momentaryslash/";
local aniPath_back = ["momentaryslash_blue_ldodge_under.ani", "momentaryslash_none_ldodge_under.ani"];
local aniPath_front = ["momentaryslash_blue_ldodge_upper.ani", "momentaryslash_none_ldodge_upper.ani"];
local subState = obj.getSkillSubState();
local weaponSubType = obj.getWeaponSubType();
if(subState == 2){
if(weaponSubType == 1) {aniPath_back[0] = "momentaryslash_red_ldodge_under.ani"; aniPath_front[0] = "momentaryslash_red_ldodge_upper.ani";}
else if(weaponSubType == 5) {aniPath_back[0] = "momentaryslash_white_ldodge_under.ani"; aniPath_front[0] = "momentaryslash_white_ldodge_upper.ani";}
}
local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj);
for(local i = 0; i < aniPath_back.len(); i++){
local pooledObj = createOnlyDrawObjectEX_Swordman_bykk(obj,baseAniPath + aniPath_back[i],true,direction,xPos,yPos - 1,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate);
local pAni = pooledObj.getCurrentAnimation();
pAni.setSpeedRate(speedRate.tofloat());
}
for(local i = 0; i < aniPath_front.len(); i++){
local pooledObj = createOnlyDrawObjectEX_Swordman_bykk(obj,baseAniPath + aniPath_front[i],true,direction,xPos,yPos + 1,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate);
local pAni = pooledObj.getCurrentAnimation();
pAni.setSpeedRate(speedRate.tofloat());
}
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_MOMENTARYSLASH, -1, 0, 1.0);
local sub = 0;
if(subState == 2){
if(weaponSubType == 1) totalDamage = totalDamage * sq_GetIntData(obj, SKILL_SMBYKK_MOMENTARYSLASH, 1) / 100;
else if(weaponSubType == 5) totalDamage = totalDamage * sq_GetIntData(obj, SKILL_SMBYKK_MOMENTARYSLASH, 2) / 100;
sub = 1;
}
if(obj.getVar("MomentarySlash_Bool").getBool(1)) totalDamage = totalDamage * (100 * 0 + sq_GetIntData(obj, SKILL_SMBYKK_HEAVYSWORDMASTERY, 7)) / 100;
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_MOMENTARYSLASH,1,totalDamage,sizeRate,speedRate,weaponSubType,sub,0,0,0);
break;
case 65534:
if(obj.getWeaponSubType() != 0) break;
if(sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY) < 7) break;
local sizeRate = sq_GetIntData(obj, SKILL_SMBYKK_MOMENTARYSLASH, 0) * 120 / 100;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_MOMENTARYSLASH, -1, 0, sq_GetIntData(obj, SKILL_SMBYKK_MOMENTARYSLASH, 3).tofloat() / 100.0);
print("totalDamage = "+totalDamage);
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,60,sq_GetDirection(obj),1,SKILL_SMBYKK_MOMENTARYSLASH,2,totalDamage,sizeRate,0,0,0,0,0,0);
break;
}
return true;
}
function onTimeEvent_SMMomentarySlash(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_SMMomentarySlash(obj, new_state)
{
if(!obj) return;
}
//猛龙断空斩
function checkExecutableSkill_RapidMoveSlash(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_RAPIDMOVESLASH);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(STATE_SMBYKK_RAPIDMOVESLASH, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_RapidMoveSlash(obj)
{
if (!obj) return false;
return true;
}
function onSetState_RapidMoveSlash(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0: obj.sq_SetCurrentAnimation(ANI_SMBYKK_RAPIDMOVESLASHREADY1); break;
case 1: obj.sq_SetCurrentAnimation(ANI_SMBYKK_RAPIDMOVESLASHREADY2); break;
case 2: obj.sq_SetCurrentAnimation(ANI_SMBYKK_RAPIDMOVESLASHMOVE1); break;
case 3: obj.sq_SetCurrentAnimation(ANI_SMBYKK_RAPIDMOVESLASHMOVE2); break;
}
if(subState > 1) obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
if(obj.getWeaponSubType() == 5){
local subStateName = ["lightready1-","lightready2-","lightmove1-","lightmove2-"];
for(local i = 0; i < 6; i++){
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_swordman_bykk/" + subStateName[subState] + i.tostring() + ".ani"), 0, 0);
}
}
switch(subState){
case 0:
// obj.getVar("rapidMoveSlashSet").setInt(1, 0);
// if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){
// print("RapidMoveSlash");
// obj.getVar("handlingsword_canShoot").setBool(0, true);
// }
// local apdPath = "appendage/character/ap_common_suck.nut";
// local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true);
// local spectrumAppendage = addAppendage.sq_GetOcularSpectrum("ocularSpectrum");//得到殘影
// if(!spectrumAppendage) spectrumAppendage = addAppendage.sq_AddOcularSpectrum("ocularSpectrum", obj, obj, 100);//設置殘影
// sq_SetParameterOcularSpectrum(spectrumAppendage, 500, 30, true, sq_RGBA(255, 75, 255, 205), sq_RGBA(255, 75, 255, 0), 2, 2, 2);//設置效果
break;
case 1:
obj.getVar("rapidMoveSlashBool").setBool(2, false);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){
print("RapidMoveSlash");
obj.getVar("handlingsword_canShoot").setBool(0, true);
}
local currentAni = obj.getCurrentAnimation();
local speedRate = 8000 / currentAni.getDelaySum(0, 0);
speedRate = speedRate.tofloat() * 2.0;
currentAni.setSpeedRate(speedRate);
break;
case 2:
obj.getVar("rapidMoveSlashSet").setInt(1, 0);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){
print("RapidMoveSlash");
obj.getVar("handlingsword_canShoot").setBool(0, true);
}
local apdPath = "appendage/character/ap_common_suck.nut";
local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true);
local spectrumAppendage = addAppendage.sq_GetOcularSpectrum("ocularSpectrum");//得到殘影
if(!spectrumAppendage) spectrumAppendage = addAppendage.sq_AddOcularSpectrum("ocularSpectrum", obj, obj, 100);//設置殘影
sq_SetParameterOcularSpectrum(spectrumAppendage, 500, 30, true, sq_RGBA(255, 75, 255, 205), sq_RGBA(255, 75, 255, 0), 2, 2, 2);//設置效果
case 3:
local currentAni = obj.getCurrentAnimation();
local sizeRate = sq_GetIntData(obj, SKILL_SMBYKK_RAPIDMOVESLASH, 7);
local speedRate = 10000 / currentAni.getDelaySum(0, 0);
// print("speedRate = "+speedRate);
local newSpeedRate = speedRate;
if(speedRate < 100) newSpeedRate = 100;
else if(speedRate > 250) newSpeedRate = 250;
if(newSpeedRate != speedRate) currentAni.setSpeedRate(newSpeedRate.tofloat());
obj.getVar("rapidMoveSlashSet").setInt(0, newSpeedRate);
local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj);
local aniPath = [["character/swordman/effect/animation/1_swordman_bykk/rapidmoveslash/move_dragonheadb.ani",0,1,-75,125,110],["character/swordman/effect/animation/1_swordman_bykk/rapidmoveslash/move_dragonheadc.ani",0,1,0,100,100],["character/swordman/effect/animation/1_swordman_bykk/rapidmoveslash/rmatka_eff_10.ani",-150,1,0,100,100],["character/swordman/effect/animation/1_swordman_bykk/rapidmoveslash/dasha.ani",0,0,0,100,100],["character/swordman/effect/animation/1_swordman_bykk/rapidmoveslash/smoke_eff_00_new.ani",-175,1,-50,120, 120]];
for(local i = 0; i < aniPath.len(); i++){
if(i == 0 && subState == 3) aniPath[i][0] = "character/swordman/effect/animation/1_swordman_bykk/rapidmoveslash/move_dragonheada.ani";
local pooledObj = createOnlyDrawObjectEX_Swordman_bykk(obj,aniPath[i][0],true,direction,sq_GetDistancePos(xPos, direction, aniPath[i][1]),yPos + aniPath[i][2],aniPath[i][3],ENUM_DRAWLAYER_NORMAL,aniPath[i][4],aniPath[i][5]);
if(i < aniPath.len() - 1) sq_moveWithParent(obj, pooledObj);
local pAni = pooledObj.getCurrentAnimation();
pAni.setSpeedRate(newSpeedRate.tofloat());
}
local speed = 1560.0 * newSpeedRate / 100.0;
if(direction == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed);
else sq_SetVelocity(obj, 0, -speed);
sq_ClearAttackBox(currentAni);
local attackBoxSet = [-47,-23,-10,300,46,110];
if(sizeRate > 100){
sizeRate = sizeRate.tofloat() / 100.0;
for(local i = 0; i < attackBoxSet.len(); i++){
attackBoxSet[i] = (attackBoxSet[i] * sizeRate).tointeger();
}
}
sq_AddAttackBox(currentAni,attackBoxSet[0], attackBoxSet[1], attackBoxSet[2], attackBoxSet[3], attackBoxSet[4], attackBoxSet[5]);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_RAPIDMOVESLASH, -1, subState - 2, 1.0);
local weaponSubType = obj.getWeaponSubType();
if(weaponSubType == 0 && sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY) >= 9){
local addRate = sq_GetLevelData(obj, SKILL_SMBYKK_SHORTSWORDMASTERY, 22, sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY));
totalDamage = totalDamage * (1000 + addRate) / 1000;
}
if(subState == 2) sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_RAPIDMOVESLASH1));
else sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_RAPIDMOVESLASH2));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
if(subState == 2){
if(obj.getVar("rapidMoveSlashBool").getBool(1)) obj.sq_PlaySound("R_SM_MENGRYONG");
else obj.sq_PlaySound("SM_MENGRYONG_START");
}
else obj.sq_PlaySound("SM_MENGRYONG_FIN");
obj.sq_PlaySound("MENGRYOUNG_ATK");
obj.getVar("rapidMoveSlashBool").setBool(0, false);
obj.getVar("rapidMoveSlashBool").setBool(1, false);
obj.setTimeEvent(1, (30000 / newSpeedRate).tointeger(), -1, false);
local passiveskill75Lv = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFLIMIT);
if(passiveskill75Lv > 0){
local bonusRate = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 14, passiveskill75Lv) + sq_GetIntData(obj, SKILL_SMBYKK_STATEOFLIMIT, 17);
totalDamage = totalDamage * bonusRate / 100;
local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_STATEOFLIMIT, 19);
local sub = 0, sizeRate = 100;
if(sq_GetIntData(obj, SKILL_SMBYKK_RAPIDMOVESLASH, 6) > 0){sub = 1; sizeRate = 180; hitMax = hitMax + 6;}
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,1,1,sq_GetDirection(obj),1,SKILL_SMBYKK_STATEOFLIMIT,2,totalDamage,hitMax,sub,sizeRate,0,0,0,0);
}
if(weaponSubType == 5 && sq_GetSkillLevel(obj, SKILL_SMBYKK_LIGHTSWORDMASTERY) >= 9){
local attackInfo = sq_GetCurrentAttackInfo(obj);
local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_LIGHTSWORDMASTERY);
local time = sq_GetLevelData(obj, SKILL_SMBYKK_LIGHTSWORDMASTERY, 6, skillLevel);
local level = sq_GetSkillLevel(obj, 174) + 5;
sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_LIGHTNING, 1000, level, time);
}
break;
}
}
function onEndCurrentAni_RapidMoveSlash(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(STATE_SMBYKK_RAPIDMOVESLASH, STATE_PRIORITY_AUTO, true);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_SMBYKK_RAPIDMOVESLASH, STATE_PRIORITY_AUTO, true);
break;
case 1:
if(obj.getVar("rapidMoveSlashBool").getBool(1)){
obj.sq_IntVectClear();
if(obj.getVar("rapidMoveSlashSet").getInt(1) + 1 >= sq_GetIntData(obj, SKILL_SMBYKK_RAPIDMOVESLASH, 0)) obj.sq_IntVectPush(3);
else obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(STATE_SMBYKK_RAPIDMOVESLASH, STATE_PRIORITY_AUTO, true);
break;
}
case 3:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProc_RapidMoveSlash(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
if(obj.getVar("rapidMoveSlashBool").getBool(2) == false){
local direction = sq_GetDirection(obj);
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_RIGHT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && direction == ENUM_DIRECTION_LEFT){
obj.getVar("rapidMoveSlashBool").setBool(2, true);
sq_SetCurrentDirection(obj, sq_GetOppositeDirection(direction));
}
}
break;
case 2:
if(obj.getVar("rapidMoveSlashBool").getBool(1) == false){
obj.setSkillCommandEnable(SKILL_SMBYKK_RAPIDMOVESLASH, true);
if(obj.sq_IsEnterSkill(SKILL_SMBYKK_RAPIDMOVESLASH) != -1){
obj.getVar("rapidMoveSlashBool").setBool(1, true);
obj.getVar("rapidMoveSlashSet").setInt(1, obj.getVar("rapidMoveSlashSet").getInt(1) + 1);
}
}
case 3:
if(obj.getVar("rapidMoveSlashBool").getBool(0) == false){
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){
obj.getVar("rapidMoveSlashBool").setBool(0, true);
local speed = 200.0 * obj.getVar("rapidMoveSlashSet").getInt(0) / 100.0;
sq_SetVelocity(obj, 1, speed);
}
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){
obj.getVar("rapidMoveSlashBool").setBool(0, true);
local speed = 200.0 * obj.getVar("rapidMoveSlashSet").getInt(0) / 100.0;
sq_SetVelocity(obj, 1, -speed);
}
}
break;
}
}
function onKeyFrameFlag_RapidMoveSlash(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1: obj.resetHitObjectList(); break;
}
return true;
}
function onTimeEvent_RapidMoveSlash(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 1:
local aniPath = "character/swordman/effect/animation/1_swordman_bykk/rapidmoveslash/smoke_eff_01.ani";
local direction = sq_GetDirection(obj), xPos = sq_GetDistancePos(sq_GetXPos(obj), direction, -100), yPos = sq_GetYPos(obj);
createOnlyDrawObjectEX_Swordman_bykk(obj,aniPath,true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL,120,120);
break;
}
}
function onEndState_RapidMoveSlash(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_SMBYKK_RAPIDMOVESLASH){
if(!sq_GetSkill(obj, SKILL_SMBYKK_RAPIDMOVESLASH).isInCoolTime()) obj.startSkillCoolTime(SKILL_SMBYKK_RAPIDMOVESLASH, sq_GetSkillLevel(obj, SKILL_SMBYKK_RAPIDMOVESLASH), -1);
obj.getVar("rapidMoveSlashBool").setBool(0, false);
obj.getVar("rapidMoveSlashBool").setBool(1, false);
CNSquirrelAppendage.sq_RemoveAppendage(obj, "appendage/character/ap_common_suck.nut");
}
}
//幻影剑舞
function checkExecutableSkill_IllusionSlash(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_ILLUSIONSLASH);
if (isUse){
obj.getVar("IllusionSlashBool").setBool(0, true);
obj.getVar("IllusionSlashBool").setBool(1, true);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_SMBYKK_ILLUSIONSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_IllusionSlash(obj)
{
if (!obj) return false;
return true;
}
function onSetState_IllusionSlash(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0: obj.sq_SetCurrentAnimation(ANI_SMBYKK_ILLUSIONSLASH1); break;
case 1: obj.sq_SetCurrentAnimation(ANI_SMBYKK_ILLUSIONSLASH2); break;
case 2: obj.sq_SetCurrentAnimation(ANI_SMBYKK_ILLUSIONSLASH3); break;
case 3: obj.sq_SetCurrentAnimation(ANI_SMBYKK_ILLUSIONSLASH4); break;
case 4: obj.sq_SetCurrentAnimation(ANI_SMBYKK_ILLUSIONSLASHFINAL); break;
}
local weaponSubType = obj.getWeaponSubType();
local speed = 1.2;
switch(weaponSubType){
case 0: speed = 1.5;
case 1: speed = 1.65;
case 2: speed = 1.35;
case 5: speed = 1.65;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed);
switch(subState){
case 0:
if(obj.getVar("IllusionSlashBool").getBool(0)){
obj.getVar("IllusionSlashBool").setBool(0, false);
obj.getVar("IllusionSlash_WeaponSubType").setInt(0, weaponSubType);
obj.getVar("IllusionSlash_hitCount").setInt(0, 0);
obj.getVar("IllusionSlash_illCount").setInt(0, 0);
obj.sq_PlaySound("SM_HOANYOUNG_START");
obj.getVar("IllusionSlash_hitMaxSet").setInt(0, 1);
switch(weaponSubType){
case 1: if(sq_GetSkillLevel(obj, SKILL_SMBYKK_BLADEMASTERY) >= 7) obj.getVar("IllusionSlash_hitMaxSet").setInt(0, 25); break;
case 5: if(sq_GetSkillLevel(obj, SKILL_SMBYKK_LIGHTSWORDMASTERY) >= 7) obj.getVar("IllusionSlash_hitMaxSet").setInt(0, 27); break;
}
obj.startRapidInput();
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){
print("IllusionSlash");
obj.getVar("handlingsword_canShoot").setBool(0, true);
}
obj.getVar("blademastery_canExp").setBool(0, true);
}
case 1:
case 2:
case 3:
local currentAni = obj.getCurrentAnimation();
local speedRate = 10000 / currentAni.getDelaySum(0, 0);
obj.getVar("IllusionSlashSet").setInt(0, speedRate);
print("speedRate = "+speedRate);
obj.sq_PlaySound("R_SM_HOANYOUNG");
break;
case 4:
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/illusionslash/upper.ani", 0, 0, 0);
obj.sq_PlaySound("SM_HOANYOUNG_FIN");
break;
}
}
function onEndCurrentAni_IllusionSlash(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
case 2:
case 3:
// print(obj.getVar("IllusionSlash_hitCount").getInt(0));
// print(obj.getVar("IllusionSlash_hitMaxSet").getInt(0));
local speedRate = obj.getVar("IllusionSlashSet").getInt(0);
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,-1,0,sq_GetDirection(obj),1,SKILL_SMBYKK_ILLUSIONSLASH,0,subState,speedRate,0,0,0,0,0,0);
local weaponSubType = obj.getWeaponSubType();
if(weaponSubType != obj.getVar("IllusionSlash_WeaponSubType").getInt(0)){
obj.sq_IntVectClear();
obj.sq_IntVectPush(4);
obj.sq_AddSetStatePacket(STATE_SMBYKK_ILLUSIONSLASH, STATE_PRIORITY_AUTO, true);
return;
}
obj.sq_IntVectClear();
if(obj.getVar("IllusionSlash_hitCount").getInt(0) + 1 >= sq_GetIntData(obj, SKILL_SMBYKK_ILLUSIONSLASH, obj.getVar("IllusionSlash_hitMaxSet").getInt(0))) obj.sq_IntVectPush(4);
else{
obj.getVar("IllusionSlash_hitCount").setInt(0, obj.getVar("IllusionSlash_hitCount").getInt(0) + 1)
if(subState < 3) obj.sq_IntVectPush(subState + 1);
else obj.sq_IntVectPush(0);
}
obj.sq_AddSetStatePacket(STATE_SMBYKK_ILLUSIONSLASH, STATE_PRIORITY_AUTO, true);
break;
case 4:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_IllusionSlash(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
case 2:
case 3:
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput();
break;
}
}
function onKeyFrameFlag_IllusionSlash(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1000:
if(obj.getRapidInputFrequency() > 1){
local currentAni = obj.getCurrentAnimation();
local speed = obj.getVar("IllusionSlashSet").getInt(0).tofloat() * 2.0;
local weaponSubType = obj.getWeaponSubType();
if(weaponSubType == 1 || weaponSubType == 5) speed = speed * 1.2;
else if(weaponSubType == 0 && sq_GetSkillLevel(obj, SKILL_SMBYKK_SHORTSWORDMASTERY) > 0) speed = speed * 1.5;
currentAni.setSpeedRate(speed);
if(obj.getVar("IllusionSlashBool").getBool(1)){
obj.getVar("IllusionSlashBool").setBool(1, false);
obj.getVar("IllusionSlash_hitMaxSet").setInt(0, obj.getVar("IllusionSlash_hitMaxSet").getInt(0) + 1);
}
}
break;
case 1001:
case 1002:
case 1003:
case 1004:
local bonusRate = 1.0;
local weaponSubType = obj.getWeaponSubType();
if(weaponSubType == 1 || weaponSubType == 5) bonusRate = 0.75;
else if(weaponSubType == 0) bonusRate = 0.9;
else if(weaponSubType == 3) bonusRate = sq_GetIntData(obj, SKILL_SMBYKK_ILLUSIONSLASH, 33).tofloat() / 100.0;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_ILLUSIONSLASH, -1, 0, bonusRate);
local sizeRate = sq_GetIntData(obj, SKILL_SMBYKK_ILLUSIONSLASH, 30);
local weaponSubType = obj.getWeaponSubType();
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,1,1,sq_GetDirection(obj),1,SKILL_SMBYKK_ILLUSIONSLASH,1,totalDamage,sizeRate,flagIndex,weaponSubType,0,0,0,0);
local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFLIMIT);
if(skillLevel > 0 && flagIndex == 1001){
local illCount = obj.getVar("IllusionSlash_illCount").getInt(0);
obj.getVar("IllusionSlash_illCount").setInt(0, obj.getVar("IllusionSlash_illCount").getInt(0) + 1);
totalDamage = totalDamage * (sq_GetIntData(obj, SKILL_SMBYKK_STATEOFLIMIT, 20) + sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 15, skillLevel)) / 100;
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,-1,-1,sq_GetDirection(obj),1,SKILL_SMBYKK_ILLUSIONSLASH,10,totalDamage,sizeRate,illCount,weaponSubType,0,0,0,0);
}
obj.sq_PlaySound("HOANYOUNG_WAVE");
break;
case 32767:
local bounsSet = 1, bonusGet = obj.getVar("IllusionSlash_hitMaxSet").getInt(0), weaponSubType = obj.getWeaponSubType();
if(bonusGet != 1 && bonusGet != 25 && bonusGet != 27){
bounsSet = 2;
if(weaponSubType == 0) bounsSet = 13;
}
else if(weaponSubType == 2) bounsSet = 3;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_ILLUSIONSLASH, -1, bounsSet, 1.0);
local sizeRate = sq_GetIntData(obj, SKILL_SMBYKK_ILLUSIONSLASH, 30);
local speedRate = obj.getVar("IllusionSlashSet").getInt(0);
// print("totalDamage = "+totalDamage);
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,weaponSubType==2?125:75,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_ILLUSIONSLASH,2,totalDamage,sizeRate,weaponSubType,bonusGet,speedRate,0,0,0);
local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFLIMIT);
if(skillLevel > 0){
if(weaponSubType != 2)totalDamage = totalDamage * (sq_GetIntData(obj, SKILL_SMBYKK_STATEOFLIMIT, 21) + sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 16, skillLevel)) / 100;
else totalDamage = totalDamage * (sq_GetIntData(obj, SKILL_SMBYKK_STATEOFLIMIT, 31) + sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 38, skillLevel)) / 100;
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,-1,-1,sq_GetDirection(obj),1,SKILL_SMBYKK_ILLUSIONSLASH,20,totalDamage,sizeRate,weaponSubType,bonusGet,speedRate,0,0,0);
}
break;
case 65534:
if(obj.getWeaponSubType() == 2) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/illusionslash/smash.ani", 0, 0, 0);
break;
}
return true;
}
function onTimeEvent_IllusionSlash(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_IllusionSlash(obj, new_state)
{
if(!obj) return;
}
//极·鬼剑士(暴风式)准备阶段
function onAfterSetState_HundredSwordReady(obj, state, datas, isResetTimer)
{
if(!obj) return;
local currentAni = obj.getCurrentAnimation();
local speedRate = 8000 / currentAni.getDelaySum(0, 0);
obj.getVar("HundredSwordSet").setInt(0, speedRate);
obj.startRapidInput();
if(sq_GetSkillLevel(obj, SKILL_SMBYKK_HUNDREDSWORD) >= 3) sq_SendMessage(obj, 0, 1, 0);
local isHold = obj.sq_GetVectorData(datas, 1);
if(isHold > 0) obj.getVar("HundredSwordReady").setBool(0, true);
else obj.getVar("HundredSwordReady").setBool(0, false);
obj.getVar("HundredSwordSet").setInt(2, 0);
}
function onProc_HundredSwordReady(obj)
{
if(!obj) return;
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput();
// print(sq_GetCurrentFrameIndex(obj));
}
function onKeyFrameFlag_HundredSwordReady(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1001:
if(obj.getVar("HundredSwordReady").getBool(0)) break;
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(4, 14);
local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_HUNDREDSWORD);
local addDamageRate = sq_GetLevelData(obj, SKILL_SMBYKK_HUNDREDSWORD, 6, skillLevel);
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,150,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_HUNDREDSWORD,1,delay,addDamageRate,0,0,0,0,0,0);
break;
}
return true;
}
function onTimeEvent_HundredSwordReady(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_HundredSwordReady(obj, new_state)
{
if(!obj) return;
local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_HUNDREDSWORD);
if(skillLevel >= 6){
local criticalRate = sq_GetLevelData(obj, SKILL_SMBYKK_HUNDREDSWORD, 3, skillLevel);
local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, criticalRate.tofloat(), 0);
if (ap){
ap.getAppendageInfo().setValidTime(10000);
ap.sq_Append(obj, obj);
}
}
}
function proc_appendage_hundredsword_hold(appendage)
{
if(!appendage) return;
local sourceObj = appendage.getSource();
local state = sourceObj.getState();
if(!sourceObj || state == STATE_DIE){
appendage.setValid(false);
return;
}
local sqrChr = sq_GetCNRDObjectToSQRCharacter(sourceObj);
if(sqrChr.getVar("HundredSwordSet").getInt(2) == 1){
appendage.setValid(false);
return;
}
local useTime = appendage.getTimer().Get();
if(useTime >= 10000){
appendage.setValid(false);
return;
}
}
function getImmuneTypeDamageRate_appendage_hundredsword_hold(appendage, damageRate, attacker)
{
if(!appendage) return;
if(appendage.getVar().getBool(0)){
if(attacker.isObjectType(OBJECTTYPE_PASSIVE)){
local colObj = sq_GetCNRDObjectToCollisionObject(attacker);
local passiveIndex = colObj.getCollisionObjectIndex();
if(passiveIndex == 20051){
local newdamageRate = damageRate * (100 + appendage.getVar("custom").getInt(0)) / 100;
return newdamageRate;
}
else return damageRate;
}
else return damageRate;
}
else return damageRate;
}
//极·鬼剑士(暴风式)攻击阶段
function onAfterSetState_HundredSwordHit(obj, state, datas, isResetTimer)
{
if(!obj) return;
local currentAni = obj.getCurrentAnimation();
local speedRate = obj.getVar("HundredSwordSet").getInt(0);
if(obj.getRapidInputFrequency() > 2) speedRate = speedRate * 2;
local speedSet = sq_GetIntData(obj, SKILL_SMBYKK_HUNDREDSWORD, 12);
if(speedSet > 0) speedRate = speedRate / 2 * 3;
local hitCount = obj.getVar("HundredSwordSet").getInt(1);
speedRate = speedRate * (100 + 2 * hitCount) / 100;
obj.getVar("HundredSwordSet").setInt(1, obj.getVar("HundredSwordSet").getInt(1) + 1);
currentAni.setSpeedRate(speedRate.tofloat());
}
function onProc_HundredSwordHit(obj)
{
if(!obj) return;
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput();
}
//极·鬼剑士(暴风式)结束阶段
function onAfterSetState_HundredSwordEnd(obj, state, datas, isResetTimer)
{
if(!obj) return;
local currentAni = obj.getCurrentAnimation();
local speedRate = obj.getVar("HundredSwordSet").getInt(0);
currentAni.setSpeedRate(speedRate.tofloat());
local bonusRate = 1.0;
local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_HUNDREDSWORD);
if(skillLevel >= 9) bonusRate = 1.0 + sq_GetLevelData(obj, SKILL_SMBYKK_HUNDREDSWORD, 6, skillLevel).tofloat() / 100.0;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_HUNDREDSWORD, -1, 2, bonusRate);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_HUNDREDSWORDFINISH));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
}
function onProc_HundredSwordEnd(obj)
{
if(!obj) return;
}
function onEndState_HundredSwordEnd(obj, new_state)
{
if(!obj) return;
if(sq_GetSkillLevel(obj, SKILL_SMBYKK_HUNDREDSWORD) >= 3) sq_SendMessage(obj, 0, 0, 0);
obj.getVar("HundredSwordSet").setInt(1, 0);
obj.getVar("HundredSwordSet").setInt(2, 1);
}
function onAttack_PassiveObject_hundredsword_bykk(passiveobj, damager, bounding_box, is_stuck)
{
local id = passiveobj.getPassiveObjectIndex();
if(id == 20051){
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
local xPos = sq_GetXPos(passiveobj), yPos = sq_GetYPos(passiveobj);
local xTPos = sq_GetXPos(damager), yTPos = sq_GetYPos(damager);
local disX = sq_Abs(xTPos - xPos), disY = sq_Abs(yTPos - yPos);
if(disX > 5){
local moveX = disX / 10 + 1;
if(xPos > xTPos) sq_setCurrentAxisPos(damager, 0, xTPos + moveX);
else sq_setCurrentAxisPos(damager, 0, xTPos - moveX);
}
if(disY > 2){
local moveY = disY / 10 + 1;
if(yPos > yTPos) sq_setCurrentAxisPos(damager, 1, yTPos + moveY);
else sq_setCurrentAxisPos(damager, 1, yTPos - moveY);
}
}
}
}
//极·神剑术(流星落)
function checkExecutableSkill_MeteorSword(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_METEORSWORD);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_SMBYKK_METEORSWORD, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_MeteorSword(obj)
{
if (!obj) return false;
return true;
}
function onSetState_MeteorSword(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
obj.sq_ZStop();
switch(subState){
case 0: obj.sq_SetCurrentAnimation(ANI_SMBYKK_METEORSWORDSTART); break;
case 1: obj.sq_SetCurrentAnimation(ANI_SMBYKK_METEORSWORDUP); break;
case 2: obj.sq_SetCurrentAnimation(ANI_SMBYKK_METEORSWORDDROP); break;
case 3: obj.sq_SetCurrentAnimation(ANI_SMBYKK_METEORSWORDEXPLOSION); break;
case 10:
obj.sq_IsEnterSkillLastKeyUnits(SKILL_SMBYKK_METEORSWORD);
obj.sq_SetCurrentAnimation(ANI_SMBYKK_MOMENTARYSLASH_READY);
obj.sq_PlaySound("SM_GUE_SWORD", 3333);
obj.getVar("MeteorSwordCharge").setBool(0, false);
break;
case 11:
obj.sq_SetCurrentAnimation(ANI_SMBYKK_WEAPONCOMBOSHORT3);
obj.stopSound(3333);
obj.sq_PlaySound("SM_THRUST");
local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj);
createOnlyDrawObjectEX_Swordman_bykk(obj,"character/swordman/effect/animation/1_swordman_bykk/meteorsword/up_meteorsword_upeffect.ani",true,direction,sq_GetDistancePos(xPos,direction, 25),yPos,0,ENUM_DRAWLAYER_NORMAL,300,75);
createOnlyDrawObjectEX_Swordman_bykk(obj,"passiveobject/0_swordman_bykk/1weaponmaster/animation/meteorsword/up_meteorsword_shock1.ani",true,direction,xPos,yPos,0,ENUM_DRAWLAYER_BOTTOM,100,100);
sq_SetMyShake(obj, 5, 120);
local isTrue = 0;
if(obj.getVar("MeteorSwordCharge").getBool(0)) isTrue = 1;
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,200,0,-sq_GetZPos(obj),sq_GetDirection(obj),1,SKILL_SMBYKK_METEORSWORD,3,1,isTrue,0,0,0,0,0,0);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
switch(subState){
case 0:
//obj.sq_IsEnterSkillLastKeyUnits(SKILL_SMBYKK_METEORSWORD);
local currentAni = obj.getCurrentAnimation();
local speedRate = 17500 / currentAni.getDelaySum(false);
// if(speedRate > 160) speedRate = 160;
currentAni.setSpeedRate(speedRate.tofloat());
obj.getVar("blademastery_canExp").setBool(0, true);
break;
case 1:
// obj.setTimeEvent(1, 3000, 1, false);
local currentAni = obj.getCurrentAnimation();
obj.setTimeEvent(2, currentAni.getDelaySum(false) / 4, 3, true);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_METEORSWORD, -1, 0, 1.0);
local sizeRate = sq_GetIntData(obj, SKILL_SMBYKK_METEORSWORD, 4);
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,-sq_GetZPos(obj),sq_GetDirection(obj),1,SKILL_SMBYKK_METEORSWORD,2,totalDamage,sizeRate,0,0,0,0,0,0);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/meteorsword/up_meteorsword_start_dust.ani", 0, 1, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_swordman_bykk/meteorsword/up_meteorsword_upeffect.ani", 0, 0, 0);
sq_SetMyShake(obj, 8, 120);
sq_SendMessage(obj, 0, 1, 0);
break;
case 2:
sq_setCurrentAxisPos(obj, 0, obj.getVar("meteorSwordSet").getInt(1));
sq_setCurrentAxisPos(obj, 1, obj.getVar("meteorSwordSet").getInt(2));
local currentAni = obj.getCurrentAnimation();
obj.setTimeEvent(3, currentAni.getDelaySum(false) / 10, 8, true);
break;
case 3:
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_METEORSWORD, -1, 6, 1.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_METEORSWORDEXPLOSION));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local currentAni = obj.getCurrentAnimation();
local speedRate = 6000 / currentAni.getDelaySum(0, 0);
if(speedRate > 160){
currentAni.setSpeedRate(160.0);
}
else if(speedRate < 120){
currentAni.setSpeedRate(120.0);
}
sq_SetMyShake(obj, 15, 300);
sq_SendMessage(obj, 0, 0, 0);
break;
}
}
function onEndCurrentAni_MeteorSword(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_SMBYKK_METEORSWORD, STATE_PRIORITY_AUTO, true);
break;
case 1:
local offsetX = 150;
if(!obj.isMovablePos(sq_GetDistancePos(sq_GetXPos(obj), sq_GetDirection(obj), offsetX)), sq_GetYPos(obj)) offsetX = 0;
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,offsetX,0,-sq_GetZPos(obj),sq_GetDirection(obj),1,SKILL_SMBYKK_METEORSWORD,1,0,0,0,0,0,0,0,0);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(STATE_SMBYKK_METEORSWORD, STATE_PRIORITY_AUTO, true);
break;
case 3:
case 11:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_MeteorSword(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 10:
if(obj.isDownSkillLastKey()){
if(obj.sq_GetStateTimer() >= 1000){
obj.getVar("MeteorSwordCharge").setBool(0, true);
obj.sq_IntVectClear();
obj.sq_IntVectPush(11);
obj.sq_AddSetStatePacket(STATE_SMBYKK_METEORSWORD, STATE_PRIORITY_AUTO, true);
}
}
else{
obj.sq_IntVectClear();
obj.sq_IntVectPush(11);
obj.sq_AddSetStatePacket(STATE_SMBYKK_METEORSWORD, STATE_PRIORITY_AUTO, true);
}
break;
}
}
function onKeyFrameFlag_MeteorSword(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_MeteorSword(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 1:
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(STATE_SMBYKK_METEORSWORD, STATE_PRIORITY_AUTO, true);
break;
case 2:
local vz = sq_GetAccel(0, 500, timeEventCount, 3, true);
sq_setCurrentAxisPos(obj, 2, vz);
break;
case 3:
local vz = sq_GetAccel(500, 0, timeEventCount, 6, false);
sq_setCurrentAxisPos(obj, 2, vz);
if(timeEventCount >= 8){
obj.stopTimeEvent(3);
obj.sq_IntVectClear();
obj.sq_IntVectPush(3);
obj.sq_AddSetStatePacket(STATE_SMBYKK_METEORSWORD, STATE_PRIORITY_AUTO, true);
}
break;
}
}
function onEndState_MeteorSword(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_SMBYKK_METEORSWORD){
sq_SimpleMoveToNearMovablePos(obj,200);
}
}
function getScrollBasisPos_MeteorSword(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
if(subState != 1) return false;
if(obj.sq_GetStateTimer() <= 500) return false;
if(obj.isMyControlObject()){
local offsetX = obj.getVar("meteorSwordSet").getInt(1);
local offsetY = obj.getVar("meteorSwordSet").getInt(2);
if(offsetX == sq_GetXPos(obj)) return false;
obj.sq_SetCameraScrollPosition(offsetX, offsetY, 0);
return true;
}
return false;
}
//破空拔刀斩
function checkExecutableSkill_MomentarySlashEx(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_MOMENTARYSLASHEX);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_SMBYKK_MOMENTARYSLASHEX, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_MomentarySlashEx(obj)
{
if (!obj) return false;
return true;
}
function onSetState_MomentarySlashEx(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(ANI_SMBYKK_MOMENTARYSLASHEX_READY);
obj.sq_PlaySound("R_SM_MOMENTARY_SLASHEX_READY");
obj.getVar("blademastery_canExp").setBool(0, true);
obj.sq_IsEnterSkillLastKeyUnits(SKILL_SMBYKK_MOMENTARYSLASHEX);
break;
case 1:
obj.sq_SetCurrentAnimation(ANI_SMBYKK_MOMENTARYSLASHEX_SLASH);
local currentAni = obj.getCurrentAnimation();
sq_SetFrameDelayTime(currentAni, 9, 250);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_MomentarySlashEx(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
//obj.sq_IntVectClear();
//obj.sq_IntVectPush(1);
//obj.sq_AddSetStatePacket(STATE_SMBYKK_MOMENTARYSLASHEX, STATE_PRIORITY_AUTO, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_MomentarySlashEx(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(obj.isDownSkillLastKey()){
if(obj.sq_GetStateTimer() >= 1500){
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_SMBYKK_MOMENTARYSLASHEX, STATE_PRIORITY_AUTO, true);
}
}
else{
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_SMBYKK_MOMENTARYSLASHEX, STATE_PRIORITY_AUTO, true);
}
break;
}
if(obj.getVar("MomentarySlashExBool").getBool(0)){
obj.setSkillCommandEnable(SKILL_SMBYKK_MOMENTARYSLASH, true);
if(obj.sq_IsEnterSkill(SKILL_SMBYKK_MOMENTARYSLASH) != -1){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_SMBYKK_MOMENTARYSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
}
function onKeyFrameFlag_MomentarySlashEx(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1001:
obj.sq_PlaySound("R_DRAWING_SWORD");
obj.sq_PlaySound("R_SM_MOMENTARY_SLASHEX_SHOT");
break;
case 1004:
//`CreateWave` 0 0 0
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_MOMENTARYSLASHEX, -1, 1, 1.0);
local sizeRate = sq_GetIntData(obj, SKILL_SMBYKK_MOMENTARYSLASHEX, 2);
local skillLevel = sq_GetSkillLevel(obj, SKILL_SMBYKK_MOMENTARYSLASHEX);
local moveX = sq_GetLevelData(obj, SKILL_SMBYKK_MOMENTARYSLASHEX, 3, skillLevel);
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,60,sq_GetDirection(obj),1,SKILL_SMBYKK_MOMENTARYSLASHEX,1,totalDamage,sizeRate,moveX,0,0,0,0,0);
break;
case 1005:
//`EnableMometarySlash` 0 0 0
//`EndSlash` 0 0 0
// if(sq_GetIntData(obj, SKILL_SMBYKK_MOMENTARYSLASH, 0) > 3){
// obj.getVar("MomentarySlashExBool").setBool(0, true);
// obj.sq_IntVectClear();
// obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
// }
break;
}
return true;
}
function onTimeEvent_MomentarySlashEx(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_MomentarySlashEx(obj, new_state)
{
if(!obj) return;
}
//极·神剑术(破空斩)
function checkExecutableSkill_SwordOfMind(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_SMBYKK_SWORDOFMIND);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_SMBYKK_SWORDOFMIND, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_SwordOfMind(obj)
{
if (!obj) return false;
return true;
}
function onSetState_SwordOfMind(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
local weaponSubType = obj.getWeaponSubType();
if(weaponSubType == 0) obj.sq_SetCurrentAnimation(ANI_SMBYKK_SWORDOFMINDCHARGEATTRACT);
else obj.sq_SetCurrentAnimation(ANI_SMBYKK_SWORDOFMINDCHARGE);
obj.sq_IsEnterSkillLastKeyUnits(SKILL_SMBYKK_SWORDOFMIND);
obj.getVar("SwordOfMindObj").clear_obj_vector();
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_SWORDOFMIND,1,0,0,0,0,0,0,0,0);
local chargeTime = 200000;
if(weaponSubType == 3) chargeTime = sq_GetIntData(obj, SKILL_SMBYKK_SWORDOFMIND, 7);
createSkillPassive_Swordman_bykk(obj,obj,PASSIVEOBJ_BYKK_SWORDMAN,0,0,0,sq_GetDirection(obj),1,SKILL_SMBYKK_SWORDOFMIND,2,chargeTime,0,0,0,0,0,0,0);
if(weaponSubType == 0){
local appendage = sq_AttractToMe(obj, sq_GetIntData(obj, SKILL_SMBYKK_SWORDOFMIND, 11), 150, 200);
obj.getVar("SwordOfMind").setAppendage(0,appendage);
}
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_SM_HANDLINGSWORD_BUFF)){
obj.getVar("handlingsword_canShoot").setBool(0, true);
}
// obj.getVar("SwordOfMindCount").setInt(1, sq_GetIntData(obj, SKILL_SMBYKK_SWORDOFMIND, 1));
obj.getVar("blademastery_canExp").setBool(0, true);
break;
case 1:
obj.sq_SetCurrentAnimation(ANI_SMBYKK_SWORDOFMINDCHARGEATTACK);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATK_SMBYKK_SWORDOFMINDATTACK));
local size = obj.getVar("SwordOfMindObj").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local effectObj = obj.getVar("SwordOfMindObj").get_obj_vector(i);
if(effectObj) effectObj.setValid(false);
}
}
if(obj.getWeaponSubType() == 0){
local appendage = obj.getVar("SwordOfMind").getAppendage(0);
if(appendage) appendage.setValid(false);
}
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_SwordOfMind(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_SwordOfMind(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(!obj.isDownSkillLastKey()){
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_SMBYKK_SWORDOFMIND, STATE_PRIORITY_AUTO, true);
}
else{
local stateTime = obj.sq_GetStateTimer();
if(obj.getWeaponSubType() == 3 && stateTime >= sq_GetIntData(obj, SKILL_SMBYKK_SWORDOFMIND, 7)) obj.getVar("SwordOfMindCharge").setBool(0, true);
if(stateTime >= 3000){
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_SMBYKK_SWORDOFMIND, STATE_PRIORITY_AUTO, true);
}
}
break;
}
}
function onKeyFrameFlag_SwordOfMind(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_SwordOfMind(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_SwordOfMind(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_SMBYKK_SWORDOFMIND){
obj.getVar("SwordOfMindCharge").setBool(0, false);
obj.getVar("SwordOfMindCount").setInt(1, 0);
}
}
function onAttack_SwordOfMind(obj, damager, boundingBox, isStuck)
{
if(isStuck) return;
if(damager.isObjectType(OBJECTTYPE_ACTIVE) && damager.isInDamagableState(obj)){// && obj.getVar("SwordOfMindCount").getInt(1) > 0
// obj.getVar("SwordOfMindCount").setInt(1, obj.getVar("SwordOfMindCount").getInt(1) - 1);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_SWORDOFMIND, -1, 0, 1.0);
local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_SMBYKK_SWORDOFMIND, -1, 4, 1.0);
local hitMax = sq_GetIntData(obj, SKILL_SMBYKK_SWORDOFMIND, 0);
local weaponSubType = obj.getWeaponSubType();
if(obj.getVar("SwordOfMindCharge").getBool(0)) totalDamage = totalDamage * (100 + sq_GetIntData(obj, SKILL_SMBYKK_SWORDOFMIND, 14)) / 100;
local stateoflimitSet = 0;
local passiveskill75Lv = sq_GetSkillLevel(obj, SKILL_SMBYKK_STATEOFLIMIT);
if(passiveskill75Lv > 0){
stateoflimitSet = sq_GetLevelData(obj, SKILL_SMBYKK_STATEOFLIMIT, 17, passiveskill75Lv) + sq_GetIntData(obj, SKILL_SMBYKK_STATEOFLIMIT, 26);
}
local group = sq_GetGroup(damager);
local uniqueId = sq_GetUniqueId(damager);
createSkillPassive_Swordman_bykk(obj,damager,PASSIVEOBJ_BYKK_SWORDMAN,0,0,sq_GetZPos(damager) + sq_GetObjectHeight(damager) / 2,sq_GetDirection(obj),1,SKILL_SMBYKK_SWORDOFMIND,3,totalDamage,totalDamageExp,hitMax,weaponSubType,group,uniqueId,stateoflimitSet,0);
}
}