3522 lines
139 KiB
C
3522 lines
139 KiB
C
|
||
|
||
|
||
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);
|
||
}
|
||
}
|
||
|