3623 lines
136 KiB
C
3623 lines
136 KiB
C
|
|
|
||
|
|
|
||
|
|
function checkExecutableSkill_Cometblade_bykk(obj)
|
||
|
|
{
|
||
|
|
if (!obj) return 0;
|
||
|
|
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_COMETBLADE);
|
||
|
|
if (isUse){
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(0);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_COMETBLADE, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
return 1;
|
||
|
|
}
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onSetState_Cometblade_bykk(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(ANIMATION_VAGABOND_COMETBLADE03ATKB_BODY);
|
||
|
|
obj.getVar("cometblade_move").setInt(10, sq_GetXPos(obj));//baseX
|
||
|
|
obj.getVar("cometblade_move").setInt(11, sq_GetZPos(obj));//baseZ
|
||
|
|
obj.getVar("cometblade_move").setInt(12, 400);//moveX
|
||
|
|
obj.getVar("cometblade_move").setInt(13, 0);//moveZ
|
||
|
|
obj.getVar("cometblade").setBool(0, false);
|
||
|
|
obj.sq_PlaySound("COMET_BLADE_DASH");
|
||
|
|
|
||
|
|
|
||
|
|
local currentAni = obj.getCurrentAnimation();
|
||
|
|
sq_ClearAttackBox(currentAni);
|
||
|
|
local delay = currentAni.getDelaySum(0, 0);
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_COMETBLADE);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_COMETBLADE, 1, skill_level);
|
||
|
|
local sizeRate = 100;
|
||
|
|
local isStone = sq_GetIntData(obj, SKILL_VAGABOND_COMETBLADE, 9);
|
||
|
|
if((isStone > 0 && isStone != 50) || COMETBLADE_STONE > 0){
|
||
|
|
totalDamage = totalDamage * 2; sizeRate = 125;
|
||
|
|
if(sq_GetIntData(obj, SKILL_VAGABOND_COMETBLADE, 9) > 50) sizeRate = 188;
|
||
|
|
}
|
||
|
|
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, 0, obj.getDirection(), 3, SKILL_VAGABOND_COMETBLADE, 1, totalDamage, sizeRate, delay, 0, 0, 0, 0, 0, 1);
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COMETBLADE04ATKLIFT_BODY);
|
||
|
|
obj.sq_PlaySound("COMET_BLADE_SWISH");
|
||
|
|
obj.getVar("cometblade_move").setInt(10, sq_GetXPos(obj));//baseX
|
||
|
|
obj.getVar("cometblade_move").setInt(11, sq_GetZPos(obj));//baseZ
|
||
|
|
obj.getVar("cometblade_move").setInt(12, -150);//moveX
|
||
|
|
obj.getVar("cometblade_move").setInt(13, 250);//moveZ
|
||
|
|
obj.getVar("cometblade").setBool(1, false);
|
||
|
|
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_COMETBLADE);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_COMETBLADE, 2, skill_level);
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 167));
|
||
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COMETBLADE04ATKFIXSWORD_BODY);
|
||
|
|
obj.getVar("cometblade_move").setInt(10, sq_GetXPos(obj));//baseX
|
||
|
|
obj.getVar("cometblade_move").setInt(11, sq_GetZPos(obj));//baseZ
|
||
|
|
obj.getVar("cometblade_move").setInt(12, -50);//moveX
|
||
|
|
obj.getVar("cometblade_move").setInt(13, -180);//moveZ
|
||
|
|
obj.getVar("cometblade").setBool(2, false);
|
||
|
|
obj.sq_PlaySound("COMET_BLADE_INDENT");
|
||
|
|
|
||
|
|
obj.resetHitObjectList();
|
||
|
|
break;
|
||
|
|
case 3:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COMETBLADE04ATKREADYSMASH_BODY);
|
||
|
|
obj.getVar("cometblade_move").setInt(10, sq_GetXPos(obj));//baseX
|
||
|
|
obj.getVar("cometblade_move").setInt(11, sq_GetZPos(obj));//baseZ
|
||
|
|
obj.getVar("cometblade_move").setInt(12, -200);//moveX
|
||
|
|
obj.getVar("cometblade_move").setInt(13, 180);//moveZ
|
||
|
|
obj.sq_PlaySound("COMET_BLADE_FLY");
|
||
|
|
break;
|
||
|
|
case 4:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_COMETBLADE04ATKSMASH_BODY);
|
||
|
|
obj.getVar("cometblade_move").setInt(10, sq_GetXPos(obj));//baseX
|
||
|
|
obj.getVar("cometblade_move").setInt(11, sq_GetZPos(obj));//baseZ
|
||
|
|
obj.getVar("cometblade_move").setInt(12, 0);//moveX
|
||
|
|
obj.getVar("cometblade_move").setInt(13, -sq_GetZPos(obj));//moveZ
|
||
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atcometblade/liftattackeffect.ani", 2, 0, -1);
|
||
|
|
sq_moveWithParent(obj, pooledObj);
|
||
|
|
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_COMETBLADE);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_COMETBLADE, 3, skill_level);
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 168));
|
||
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEnterFrame_Cometblade_bykk(obj, frameIndex)
|
||
|
|
{
|
||
|
|
if(!obj || !obj.isMyControlObject()) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
if(frameIndex == 1){
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atcometblade/cutsmoke.ani", 0, 0, 0);
|
||
|
|
sq_flashScreen(obj, 50, 200, 400, 204, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
sq_SetMyShake(obj, 10, 200);
|
||
|
|
}
|
||
|
|
else if(frameIndex == 14 && obj.getVar("cometblade").getBool(0) == true){
|
||
|
|
if(sq_GetIntData(obj, SKILL_VAGABOND_COMETBLADE, 9) > 0 || COMETBLADE_STONE > 0) break;
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(1);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_COMETBLADE, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
}
|
||
|
|
if(frameIndex == 14 && (sq_GetIntData(obj, SKILL_VAGABOND_COMETBLADE, 9) > 0 || COMETBLADE_STONE > 0)){
|
||
|
|
local currentAni = obj.getCurrentAnimation();
|
||
|
|
currentAni.setSpeedRate(166.67);
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
if(frameIndex == 2){
|
||
|
|
sq_flashScreen(obj, 30, 150, 200, 154, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
sq_SetMyShake(obj, 10, 200);
|
||
|
|
local aniPath = "character/swordman/effect/animation/atcometblade/finishfloor_00.ani"
|
||
|
|
local aniPath2 = "character/swordman/effect/animation/atcometblade/finishfixsword.ani"
|
||
|
|
createOnlyDrawObject_AtSwordMan_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
createOnlyDrawObject_AtSwordMan_bykk(obj,aniPath2,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL);
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 4:
|
||
|
|
switch(frameIndex){
|
||
|
|
case 1:
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atcometblade/finishfixsword_eff2_a.ani", 188, 0, -sq_GetZPos(obj));
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
obj.sq_PlaySound("COMET_BLADE_FINISH");
|
||
|
|
sq_flashScreen(obj, 30, 150, 250, 205, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
sq_SetMyShake(obj, 20, 200);
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atcometblade/finishsmokesmash.ani", 188, 0, 0);
|
||
|
|
obj.getVar("rapid_step_enable").setBool(0, true);
|
||
|
|
obj.getVar("EnableHermitTripleStep").setBool(0, true);
|
||
|
|
break;
|
||
|
|
case 10:
|
||
|
|
// sq_CreateParticle("character/swordman/effect/particle/atcometbladefinishleaf.ptl", obj, 0, 5, 0, true, 10, 0, 3);
|
||
|
|
// sq_CreateParticle("character/swordman/effect/particle/atcometbladefinishmiddleleaf.ptl", obj, 0, 5, 0, true, 10, 0, 5);
|
||
|
|
// sq_CreateParticle("character/swordman/effect/particle/atcometbladefinishsmallleaf.ptl", obj, 0, 5, 0, true, 1, 0, 10);
|
||
|
|
//local sizeRate = sq_getRandom(15, 90), rotateSet = sq_getRandom(0, 360);
|
||
|
|
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, 0, obj.getDirection(), 3, SKILL_VAGABOND_COMETBLADE, 2, 1, 15, 90, 0, 360, 15, 2, 0, 0);
|
||
|
|
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, 0, obj.getDirection(), 3, SKILL_VAGABOND_COMETBLADE, 2, 2, 20, 50, 0, 360, 15, 3, 0, 0);
|
||
|
|
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, 0, obj.getDirection(), 3, SKILL_VAGABOND_COMETBLADE, 2, 3, 2, 20, 0, 360, 20, 3, 0, 0);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onChangeSkillEffect_Cometblade(obj, skillIndex, receiveData)
|
||
|
|
{
|
||
|
|
if(!obj || skillIndex != 220) return;
|
||
|
|
local type = receiveData.readDword();
|
||
|
|
if(type == 0)
|
||
|
|
obj.resetHitObjectList();
|
||
|
|
else if(type == 1)
|
||
|
|
{
|
||
|
|
local aptjarr = [
|
||
|
|
"character/swordman/effect/animation/atcometblade/finishfixsword.ani",
|
||
|
|
"character/swordman/effect/animation/atcometblade/finishfloor_00.ani"
|
||
|
|
];
|
||
|
|
foreach(path in aptjarr)
|
||
|
|
DarktemplerCreateAniPooledObj(obj, path, false, true, obj.getXPos(), obj.getYPos()-1, 0,1.0);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndCurrentAni_Cometblade_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
if(sq_GetIntData(obj, SKILL_VAGABOND_COMETBLADE, 9) > 0 || COMETBLADE_STONE > 0) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj)));
|
||
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
case 2:
|
||
|
|
if(obj.getVar("cometblade").getBool(subState) == true){
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(subState + 1);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_COMETBLADE, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(1);
|
||
|
|
obj.sq_IntVectPush(0);
|
||
|
|
obj.sq_IntVectPush(0);
|
||
|
|
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
case 3:
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(subState + 1);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_COMETBLADE, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
case 4:
|
||
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onAttack_Cometblade_bykk(obj, damager, boundingBox, isStuck)
|
||
|
|
{
|
||
|
|
if(!obj || isStuck) return;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndState_Cometblade_bykk(obj, newState)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
if(newState != SKILL_VAGABOND_COMETBLADE){
|
||
|
|
if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false);
|
||
|
|
if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onKeyFrameFlag_Cometblade_bykk(obj, flagIndex)
|
||
|
|
{
|
||
|
|
if (!obj) return;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onProcCon_Cometblade_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){//位移
|
||
|
|
case 0:
|
||
|
|
case 1:
|
||
|
|
case 2:
|
||
|
|
case 3:
|
||
|
|
case 4:
|
||
|
|
if(obj.getVar("cometblade").getBool(subState) == false && subState < 3){
|
||
|
|
obj.setSkillCommandEnable(SKILL_VAGABOND_COMETBLADE, true);
|
||
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_SKILL, ENUM_SUBKEY_TYPE_ALL) || obj.sq_IsEnterSkill(SKILL_VAGABOND_COMETBLADE) != -1){
|
||
|
|
obj.getVar("cometblade").setBool(subState, true);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
local pAni = obj.getCurrentAnimation();
|
||
|
|
local currentT = sq_GetCurrentTime(pAni);
|
||
|
|
local fireT = pAni.getDelaySum(false);
|
||
|
|
if(subState == 2 || subState == 4) fireT = pAni.getDelaySum(0, 1);
|
||
|
|
else if(subState == 3) fireT = pAni.getDelaySum(0, 3);
|
||
|
|
else if(subState == 0) fireT = pAni.getDelaySum(0, 7);
|
||
|
|
if(currentT > fireT){
|
||
|
|
if(subState == 4) sq_setCurrentAxisPos(obj, 2, 0);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
local srcX = obj.getVar("cometblade_move").getInt(10);
|
||
|
|
local srcZ = obj.getVar("cometblade_move").getInt(11);
|
||
|
|
local MoveX = obj.getVar("cometblade_move").getInt(12);
|
||
|
|
local MoveZ = obj.getVar("cometblade_move").getInt(13);
|
||
|
|
if(subState == 4) MoveZ = -srcZ;
|
||
|
|
local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT);
|
||
|
|
local vz = sq_GetUniformVelocity(0, MoveZ, currentT, fireT);
|
||
|
|
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);
|
||
|
|
if(obj.isMovablePos(dstX, sq_GetYPos(obj))){
|
||
|
|
sq_setCurrentAxisPos(obj, 0, dstX);
|
||
|
|
sq_setCurrentAxisPos(obj, 2, srcZ + vz);
|
||
|
|
}
|
||
|
|
else{
|
||
|
|
obj.getVar("cometblade_move").setInt(10, sq_GetXPos(obj));
|
||
|
|
obj.getVar("cometblade_move").setInt(12, 0);
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
break;
|
||
|
|
case 3:
|
||
|
|
break;
|
||
|
|
case 6:
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
|
|
||
|
|
function checkExecutableSkill_Dualweapon_bykk(obj)
|
||
|
|
{
|
||
|
|
if (!obj) return 0;
|
||
|
|
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_DUALWEAPON);
|
||
|
|
if (isUse){
|
||
|
|
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/3_vagabond/dualweapon/ap_dualweapon.nut");
|
||
|
|
if(addAppendage){
|
||
|
|
local weaponType = addAppendage.getVar().getInt(10);
|
||
|
|
if(weaponType == 4) addAppendage.getVar().setInt(10, 0);
|
||
|
|
else addAppendage.getVar().setInt(10, weaponType + 1);
|
||
|
|
switch(weaponType){
|
||
|
|
case 4: addAppendage.setBuffIconImage(63); break;//光
|
||
|
|
case 0: addAppendage.setBuffIconImage(62); break;//鈍
|
||
|
|
case 1: addAppendage.setBuffIconImage(60); break;//太
|
||
|
|
case 2: addAppendage.setBuffIconImage(61); break;//巨
|
||
|
|
case 3: addAppendage.setBuffIconImage(59); break;//短
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return 1;
|
||
|
|
}
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
function checkCommandEnable_Dualweapon_bykk(obj)
|
||
|
|
{
|
||
|
|
if (!obj) return 0;
|
||
|
|
return 1;
|
||
|
|
}
|
||
|
|
|
||
|
|
function AddAppend_Dualweapon(obj,index)
|
||
|
|
{
|
||
|
|
local appArr = [
|
||
|
|
"character/atswordman/2_vegabond/dualweapon/ap_dualweapon0.nut",
|
||
|
|
"character/atswordman/2_vegabond/dualweapon/ap_dualweapon1.nut",
|
||
|
|
"character/atswordman/2_vegabond/dualweapon/ap_dualweapon2.nut",
|
||
|
|
"character/atswordman/2_vegabond/dualweapon/ap_dualweapon3.nut",
|
||
|
|
"character/atswordman/2_vegabond/dualweapon/ap_dualweapon5.nut"
|
||
|
|
];
|
||
|
|
local apPath = appArr[index];
|
||
|
|
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, false);
|
||
|
|
if(appendage != null)
|
||
|
|
{
|
||
|
|
appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), 202, sq_GetSkillLevel(obj, 202));
|
||
|
|
CNSquirrelAppendage.sq_Append(appendage, obj, obj, true);
|
||
|
|
local incon = [59,60,62,61,63];
|
||
|
|
appendage.setBuffIconImage(incon[index]);
|
||
|
|
}
|
||
|
|
|
||
|
|
return index;
|
||
|
|
}
|
||
|
|
|
||
|
|
function checkAppend_Dualweapon(obj)
|
||
|
|
{
|
||
|
|
local index = 5;
|
||
|
|
local appArr = [
|
||
|
|
"character/atswordman/2_vegabond/dualweapon/ap_dualweapon0.nut",
|
||
|
|
"character/atswordman/2_vegabond/dualweapon/ap_dualweapon1.nut",
|
||
|
|
"character/atswordman/2_vegabond/dualweapon/ap_dualweapon2.nut",
|
||
|
|
"character/atswordman/2_vegabond/dualweapon/ap_dualweapon3.nut",
|
||
|
|
"character/atswordman/2_vegabond/dualweapon/ap_dualweapon5.nut"
|
||
|
|
];
|
||
|
|
|
||
|
|
foreach( key,path in appArr)
|
||
|
|
{
|
||
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, path))
|
||
|
|
return key;
|
||
|
|
}
|
||
|
|
|
||
|
|
return index;
|
||
|
|
}
|
||
|
|
|
||
|
|
function SetChrAniIndex_Dualweapon(obj,apdindex)
|
||
|
|
{
|
||
|
|
local index = 10;
|
||
|
|
local appArr = [526,520,517,523,514,0];
|
||
|
|
|
||
|
|
return appArr[apdindex];
|
||
|
|
}
|
||
|
|
|
||
|
|
function SetChrAtkIndex_Dualweapon(obj,apdindex)
|
||
|
|
{
|
||
|
|
local index = 10;
|
||
|
|
local appArr = [146,140,137,143,134,0];
|
||
|
|
|
||
|
|
return appArr[apdindex];
|
||
|
|
}
|
||
|
|
|
||
|
|
function Dualweapon_RemoveAppebd(obj)//???
|
||
|
|
{
|
||
|
|
local appArr = [
|
||
|
|
"character/atswordman/2_vegabond/dualweapon/ap_dualweapon0.nut",
|
||
|
|
"character/atswordman/2_vegabond/dualweapon/ap_dualweapon1.nut",
|
||
|
|
"character/atswordman/2_vegabond/dualweapon/ap_dualweapon2.nut",
|
||
|
|
"character/atswordman/2_vegabond/dualweapon/ap_dualweapon3.nut",
|
||
|
|
"character/atswordman/2_vegabond/dualweapon/ap_dualweapon5.nut"
|
||
|
|
];
|
||
|
|
|
||
|
|
foreach(path in appArr)
|
||
|
|
{
|
||
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, path))
|
||
|
|
CNSquirrelAppendage.sq_RemoveAppendage(obj, path);
|
||
|
|
}
|
||
|
|
obj.getVar("ChangeswordCurId").setInt(0, 0);
|
||
|
|
}
|
||
|
|
|
||
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
|
|
||
|
|
function checkExecutableSkill_Earthpressure_bykk(obj)
|
||
|
|
{
|
||
|
|
if (!obj) return 0;
|
||
|
|
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_EARTHPRESSURE);
|
||
|
|
if (isUse){
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(0);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_EARTHPRESSURE, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
return 1;
|
||
|
|
}
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onSetState_Earthpressure_bykk(obj, state, datas, isResetTimer)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
||
|
|
obj.setSkillSubState(subState);
|
||
|
|
obj.sq_StopMove();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_EARTHPRESSUREBODY);
|
||
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
|
|
obj.sq_PlaySound("EARTH_PRESSURE_UP");
|
||
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atearthpressure/earthpressureeffect_effect.ani", 0, 1, 0);
|
||
|
|
local currentAni = obj.getCurrentAnimation();
|
||
|
|
local delay = currentAni.getDelaySum(7,7);
|
||
|
|
local speedRate = 6000.0 / delay.tofloat();
|
||
|
|
local pAni = pooledObj.getCurrentAnimation();
|
||
|
|
pAni.setSpeedRate(speedRate);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndCurrentAni_Earthpressure_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onAttack_Earthpressure_bykk(obj, damager, boundingBox, isStuck)
|
||
|
|
{
|
||
|
|
if(!obj || isStuck) return;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEnterFrame_Earthpressure_bykk(obj, frameIndex)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
switch(frameIndex){
|
||
|
|
case 6:
|
||
|
|
sq_SetMyShake(obj, 2, 250);
|
||
|
|
sq_flashScreen(obj, 0, 100, 0, 102,sq_RGB(192, 192, 192), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
break;
|
||
|
|
case 7:
|
||
|
|
obj.sq_PlaySound("SW_EARTH_PRESSURE");
|
||
|
|
obj.sq_PlaySound("EARTH_PRESSURE_DOWN");
|
||
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_EARTHPRESSURE, SKILL_VAGABOND_EARTHPRESSURE, 0, 1.0) + 100;
|
||
|
|
local range = sq_GetIntData(obj, SKILL_VAGABOND_EARTHPRESSURE, 0);
|
||
|
|
local currentAni = obj.getCurrentAnimation();
|
||
|
|
local delay = currentAni.getDelaySum(7,7);
|
||
|
|
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, 0, obj.getDirection(), 3, SKILL_VAGABOND_EARTHPRESSURE, 1, totalDamage, range, delay, 0, 0, 0, 0, 0, 1);
|
||
|
|
obj.getVar("rapid_step_enable").setBool(0, true);
|
||
|
|
obj.getVar("EnableHermitTripleStep").setBool(0, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndState_Earthpressure_bykk(obj, newState)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
if(newState != SKILL_VAGABOND_EARTHPRESSURE){
|
||
|
|
if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false);
|
||
|
|
if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onKeyFrameFlag_Earthpressure_bykk(obj, flagIndex)
|
||
|
|
{
|
||
|
|
if (!obj) return;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onProcCon_Earthpressure_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
}
|
||
|
|
|
||
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
|
|
||
|
|
|
||
|
|
function checkExecutableSkill_Fatalflower_bykk(obj)
|
||
|
|
{
|
||
|
|
if (!obj) return 0;
|
||
|
|
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_FATALFLOWER);
|
||
|
|
if (isUse){
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(0);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_FATALFLOWER, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
return 1;
|
||
|
|
}
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onSetState_Fatalflower_bykk(obj, state, datas, isResetTimer)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
||
|
|
obj.setSkillSubState(subState);
|
||
|
|
obj.sq_StopMove();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FATALFLOWER_BODY);
|
||
|
|
obj.sq_SetXScrollStart(350, 200);
|
||
|
|
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FATALFLOWER);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FATALFLOWER, 0, skill_level);
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 172));
|
||
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndCurrentAni_Fatalflower_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
obj.sq_SetXScrollStop(100);
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onAttack_Fatalflower_bykk(obj, damager, boundingBox, isStuck)
|
||
|
|
{
|
||
|
|
if(!obj || isStuck) return;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEnterFrame_Fatalflower_bykk(obj, frameIndex)
|
||
|
|
{
|
||
|
|
if(!obj || !obj.isMyControlObject()) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
switch(frameIndex){
|
||
|
|
case 0:
|
||
|
|
obj.sq_PlaySound("R_SW_FATAL_FLOWER_01");
|
||
|
|
sq_flashScreen(obj, 500, 2500, 500, 200, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
break;
|
||
|
|
case 4:
|
||
|
|
obj.sq_PlaySound("FATAL_FLOWER_START");
|
||
|
|
sq_SetMyShake(obj, 3, 120);
|
||
|
|
//`CreateFlower` 0 0 0
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FATALFLOWER);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FATALFLOWER, 1, skill_level);
|
||
|
|
local totalDamage2 = sq_GetLevelData(obj, SKILL_VAGABOND_FATALFLOWER, 4, skill_level);
|
||
|
|
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_FATALFLOWER) >= 9) totalDamage2 = totalDamage2 * 110 / 100;
|
||
|
|
local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger();
|
||
|
|
local hitMax = sq_GetLevelData(obj, SKILL_VAGABOND_FATALFLOWER, 3, skill_level);
|
||
|
|
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_FATALFLOWER) >= 6) hitMax = hitMax + 3;
|
||
|
|
local currentAni = obj.getCurrentAnimation();
|
||
|
|
local delay = currentAni.getDelaySum(0, 0);
|
||
|
|
local speedRate = 5400.0 / delay.tofloat();
|
||
|
|
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, -1, 0, obj.getDirection(), 3, SKILL_VAGABOND_FATALFLOWER, 1, totalDamage, hitMax, damageRate, delay, 0, 0, 0, 0, 0);
|
||
|
|
local pooledObj_1 = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/vagabond/animation/atfatalflower/newhellfireb_front_00.ani", 0, 0, 0);
|
||
|
|
local pooledObj_2 = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/vagabond/animation/atfatalflower/newhellfirea_00.ani", 0, 0, 0);
|
||
|
|
local pAni_1 = pooledObj_1.getCurrentAnimation();
|
||
|
|
local pAni_2 = pooledObj_2.getCurrentAnimation();
|
||
|
|
pAni_1.setSpeedRate(speedRate);
|
||
|
|
pAni_2.setSpeedRate(speedRate);
|
||
|
|
break;
|
||
|
|
case 21:
|
||
|
|
sq_SetMyShake(obj, 5, 300);
|
||
|
|
break;
|
||
|
|
case 30:
|
||
|
|
obj.sq_SendCreatePassiveObjectPacket(776103, 0, 120, 1, 800);
|
||
|
|
break;
|
||
|
|
case 41:
|
||
|
|
obj.sq_SendCreatePassiveObjectPacket(776103, 0, 120, 1, 400);
|
||
|
|
break;
|
||
|
|
case 43:
|
||
|
|
sq_SetMyShake(obj, 4, 180);
|
||
|
|
break;
|
||
|
|
case 46:
|
||
|
|
obj.sq_PlaySound("SW_SNAKEDANCE_03");
|
||
|
|
sq_SetMyShake(obj, 5, 300);
|
||
|
|
break;
|
||
|
|
case 50:
|
||
|
|
//`EnableHermitTripleStep` 0 0 0
|
||
|
|
//`rapid step enable` 0 0 0
|
||
|
|
obj.getVar("rapid_step_enable").setBool(0, true);
|
||
|
|
obj.getVar("EnableHermitTripleStep").setBool(0, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndState_Fatalflower_bykk(obj, newState)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_FATALFLOWER) < 3) return;
|
||
|
|
local apPath = "character/atswordman/3_vagabond/fatalflower/ap_fatalflower.nut";
|
||
|
|
if(newState != SKILL_VAGABOND_FATALFLOWER){
|
||
|
|
obj.sq_SetXScrollStop(100);
|
||
|
|
local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, false);
|
||
|
|
if(addAppendage){
|
||
|
|
addAppendage.sq_SetValidTime(30000);
|
||
|
|
addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_VAGABOND_FATALFLOWER, sq_GetSkillLevel(obj, SKILL_VAGABOND_FATALFLOWER));
|
||
|
|
addAppendage.setEnableIsBuff(true);
|
||
|
|
CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true);
|
||
|
|
local CRITICAL_RATE = 15;
|
||
|
|
local change_appendage = addAppendage.sq_getChangeStatus("Fatalflower");
|
||
|
|
if(!change_appendage) change_appendage = addAppendage.sq_AddChangeStatus("Fatalflower", obj, obj, 0, 15, false, CRITICAL_RATE);
|
||
|
|
if(change_appendage){
|
||
|
|
change_appendage.clearParameter();
|
||
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, CRITICAL_RATE.tofloat());
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false);
|
||
|
|
if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onKeyFrameFlag_Fatalflower_bykk(obj, flagIndex)
|
||
|
|
{
|
||
|
|
if (!obj) return;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onProcCon_Fatalflower_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
}
|
||
|
|
|
||
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
function checkExecutableSkill_Fistofexplosion_bykk(obj)
|
||
|
|
{
|
||
|
|
if (!obj) return 0;
|
||
|
|
local isUse = obj.sq_IsUseSkill(219);
|
||
|
|
if (isUse){
|
||
|
|
if(sq_GetIntData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 9) > 0) obj.getVar("Fistofexplosion_Bool").setBool(0, true);
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(0);
|
||
|
|
//obj.sq_IsEnterSkillLastKeyUnits(219);//蓄力
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_FISTOFEXPLOSION, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
return 1;
|
||
|
|
}
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onSetState_Fistofexplosion_bykk(obj, state, datas, isResetTimer)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
||
|
|
obj.setSkillSubState(subState);
|
||
|
|
obj.sq_StopMove();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FISTOFEXPLOSION_CASTSTART_BODY);
|
||
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FISTOFEXPLOSION_CASTLOOP_BODY);
|
||
|
|
obj.sq_PlaySound("FIST_HELLFIRE_READY");
|
||
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
|
|
if(sq_GetIntData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 8) > 0 || FISTOFEXPLOSION_STONE > 0){
|
||
|
|
local speedRate = 100.0 * (1.0 / 0.6);
|
||
|
|
local currentAni = obj.getCurrentAnimation();
|
||
|
|
currentAni.setSpeedRate(speedRate);
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FISTOFEXPLOSION_SHOOT_BODY);
|
||
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndCurrentAni_Fistofexplosion_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
case 1:
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(subState + 1);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_FISTOFEXPLOSION, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
if(obj.getVar("Fistofexplosion_Bool").getBool(0)){
|
||
|
|
obj.getVar("Fistofexplosion_Bool").setBool(0, false);
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(2);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_FISTOFEXPLOSION, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onAttack_Fistofexplosion_bykk(obj, damager, boundingBox, isStuck)
|
||
|
|
{
|
||
|
|
if(!obj || isStuck) return;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEnterFrame_Fistofexplosion_bykk(obj, frameIndex)
|
||
|
|
{
|
||
|
|
if(!obj || !obj.isMyControlObject()) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 2:
|
||
|
|
switch(frameIndex){
|
||
|
|
case 1:
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndState_Fistofexplosion_bykk(obj, newState)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
if(newState != SKILL_VAGABOND_FISTOFEXPLOSION){
|
||
|
|
if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false);
|
||
|
|
if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onKeyFrameFlag_Fistofexplosion_bykk(obj, flagIndex)
|
||
|
|
{
|
||
|
|
if (!obj) return true;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
if(subState != 2) return true;
|
||
|
|
switch(flagIndex){
|
||
|
|
case 1111:
|
||
|
|
obj.sq_PlaySound("FIST_HELLFIRE_BURST");
|
||
|
|
obj.sq_PlaySound("SW_SNAKEDANCE_03");
|
||
|
|
sq_SetMyShake(obj, 7, 180);
|
||
|
|
sq_flashScreen(obj, 0, 0, 150, 153,sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FISTOFEXPLOSION);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 2, skill_level);
|
||
|
|
local totalDamage2 = sq_GetLevelData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 1, skill_level);
|
||
|
|
local hitMax = sq_GetLevelData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 0, skill_level);
|
||
|
|
local lifeTime = sq_GetIntData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 2);
|
||
|
|
local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 3);
|
||
|
|
local sub = 0;
|
||
|
|
if(sq_GetIntData(obj, SKILL_VAGABOND_FISTOFEXPLOSION, 8) > 0 || FISTOFEXPLOSION_STONE > 0){
|
||
|
|
sub = 1;
|
||
|
|
lifeTime = lifeTime + 1000;
|
||
|
|
sizeRate = (sizeRate.tofloat() * 1.25).tointeger();
|
||
|
|
hitMax = hitMax - 2;
|
||
|
|
totalDamage = (totalDamage.tofloat() * 1.27).tointeger();
|
||
|
|
totalDamage2 = totalDamage2 + 311;
|
||
|
|
}
|
||
|
|
local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger();
|
||
|
|
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 25, 0, 85, obj.getDirection(), 3, SKILL_VAGABOND_FISTOFEXPLOSION, 1, totalDamage, sizeRate, lifeTime, hitMax, damageRate, sub, 0, 0, 1);
|
||
|
|
break;
|
||
|
|
case 1112:
|
||
|
|
obj.getVar("rapid_step_enable").setBool(0, true);
|
||
|
|
obj.getVar("EnableHermitTripleStep").setBool(0, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onProcCon_Fistofexplosion_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
}
|
||
|
|
|
||
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
|
|
||
|
|
function checkExecutableSkill_Fivecircle_bykk(obj)
|
||
|
|
{
|
||
|
|
if (!obj) return 0;
|
||
|
|
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_FIVECIRCLE);
|
||
|
|
if (isUse){
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(0);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_FIVECIRCLE, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
return 1;
|
||
|
|
}
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onSetState_Fivecircle_bykk(obj, state, datas, isResetTimer)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
||
|
|
obj.setSkillSubState(subState);
|
||
|
|
obj.sq_StopMove();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FIVECIRCLE_START_BODY);
|
||
|
|
obj.sq_PlaySound("SW_FIVE_CIRCLE");
|
||
|
|
|
||
|
|
local castTime = sq_GetCastTime(obj, SKILL_VAGABOND_FIVECIRCLE, sq_GetSkillLevel(obj, SKILL_VAGABOND_FIVECIRCLE));
|
||
|
|
local animation = sq_GetCurrentAnimation(obj);
|
||
|
|
local castAniTime = sq_GetDelaySum(animation);
|
||
|
|
local speedRate = castAniTime.tofloat() / castTime.tofloat();
|
||
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate);
|
||
|
|
sq_StartDrawCastGauge(obj, castAniTime, true);
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FIVECIRCLE_END_BODY);
|
||
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndCurrentAni_Fivecircle_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(1);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_FIVECIRCLE, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
local apdPath = "character/atswordman/3_vagabond/fivecircle/ap_fivecircle.nut";
|
||
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath);
|
||
|
|
local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, false);
|
||
|
|
addAppendage.sq_AddEffectFront("character/swordman/effect/animation/atfivecircle/buffeffect/buff_front_1.ani");
|
||
|
|
addAppendage.sq_AddEffectBack("character/swordman/effect/animation/atfivecircle/buffeffect/buff_back_1.ani");
|
||
|
|
addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_VAGABOND_FIVECIRCLE, sq_GetSkillLevel(obj, SKILL_VAGABOND_FIVECIRCLE));
|
||
|
|
addAppendage.setEnableIsBuff(true);
|
||
|
|
CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true);
|
||
|
|
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FIVECIRCLE);
|
||
|
|
local speedRate = sq_GetLevelData(obj, SKILL_VAGABOND_FIVECIRCLE, 2, skill_level) * 5;
|
||
|
|
// local hitRate = sq_GetLevelData(obj, SKILL_VAGABOND_FIVECIRCLE, 4, skill_level) * 5;
|
||
|
|
local change_appendage = addAppendage.sq_getChangeStatus("fivecircle");
|
||
|
|
if(!change_appendage) change_appendage = addAppendage.sq_AddChangeStatus("fivecircle", obj, obj, 0, 15, false, 1000);
|
||
|
|
if(change_appendage){
|
||
|
|
change_appendage.clearParameter();
|
||
|
|
// change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_DAMAGE_RATE, false, (hitRate * 0.1 / 0.667).tofloat());
|
||
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (speedRate).tofloat());
|
||
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (speedRate).tofloat());
|
||
|
|
}
|
||
|
|
setSkillDamageRate_VagaBond_bykk(obj);
|
||
|
|
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEnterFrame_Fivecircle_bykk(obj, frameIndex)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
if(obj.getSkillSubState() == 0 && frameIndex == 3){
|
||
|
|
obj.sq_PlaySound("SW_FIVE_CIRCLE");
|
||
|
|
obj.sq_PlaySound("FIVE_CIRCLE_CAST");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndState_Fivecircle_bykk(obj, newState)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
if(newState != SKILL_VAGABOND_FIVECIRCLE) sq_EndDrawCastGauge(obj);
|
||
|
|
}
|
||
|
|
|
||
|
|
function onProcCon_Fivecircle_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
}
|
||
|
|
|
||
|
|
function CreateBuffCutin(obj,CutinPath)
|
||
|
|
{
|
||
|
|
local ani = sq_CreateAnimation("",CutinPath);
|
||
|
|
local pooledObj = sq_CreatePooledObject(ani,true);
|
||
|
|
local objectManager = obj.getObjectManager();
|
||
|
|
local xPos = obj.getXPos();
|
||
|
|
local yPos = objectManager.getFieldYPos(0, 0, 7);
|
||
|
|
pooledObj = sq_SetEnumDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
pooledObj.setCurrentPos(xPos +480,yPos ,0);
|
||
|
|
sq_AddObject(obj,pooledObj,2,false);
|
||
|
|
}
|
||
|
|
|
||
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
function checkExecutableSkill_Flowerbladedance_bykk(obj)
|
||
|
|
{
|
||
|
|
if (!obj) return 0;
|
||
|
|
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_FLOWERBLADEDANCE);
|
||
|
|
if (isUse){
|
||
|
|
obj.getVar("flowerbladedance_move").setInt(10, sq_GetXPos(obj));
|
||
|
|
obj.getVar("flowerbladedance_move").setInt(2, 150);
|
||
|
|
obj.getVar("flowerbladedance").setBool(0, false);
|
||
|
|
obj.getVar("flowerbladedance_jump").setBool(0, false);
|
||
|
|
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
if(obj.sq_GetState() == STATE_JUMP){
|
||
|
|
obj.sq_IntVectPush(4);
|
||
|
|
obj.getVar("flowerbladedance_move").setInt(2, 250);
|
||
|
|
obj.getVar("flowerbladedance_jump").setBool(0, true);
|
||
|
|
}
|
||
|
|
else obj.sq_IntVectPush(0);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_FLOWERBLADEDANCE, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
return 1;
|
||
|
|
}
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onSetState_Flowerbladedance_bykk(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(ANIMATION_VAGABOND_FLOWERBLADEDANCE_CAST_BODY);
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FLOWERBLADEDANCE_FIRST_BODY);
|
||
|
|
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FLOWERBLADEDANCE);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 0, skill_level);
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 175));
|
||
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FLOWERBLADEDANCE_SECOND_STARTJUMP_BODY);
|
||
|
|
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FLOWERBLADEDANCE);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 1, skill_level);
|
||
|
|
if(sq_GetIntData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 13) > 0 || FLOWERBLADEDANCE_STONE > 0){
|
||
|
|
totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 4, skill_level) * 133 / 100;
|
||
|
|
}
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 176));
|
||
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||
|
|
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/secondjump/delay_jump_b.ani", 0, 0, 0);
|
||
|
|
break;
|
||
|
|
case 3:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FLOWERBLADEDANCE_SECOND_BODY);
|
||
|
|
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FLOWERBLADEDANCE);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 4, skill_level);
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 176));
|
||
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||
|
|
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/secondjump/delay_jump_b.ani", 0, 0, 0);
|
||
|
|
break;
|
||
|
|
case 4:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FLOWERBLADEDANCE_THIRD_BODY);
|
||
|
|
obj.getVar("flowerbladedance_move").setInt(0, sq_GetXPos(obj));
|
||
|
|
obj.getVar("flowerbladedance_move").setInt(1, sq_GetZPos(obj));
|
||
|
|
local currentAni = obj.getCurrentAnimation();
|
||
|
|
local delaySum = currentAni.getDelaySum(0, 1);
|
||
|
|
obj.setTimeEvent(10, delaySum / 10, 10, true);
|
||
|
|
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FLOWERBLADEDANCE);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 2, skill_level);
|
||
|
|
if(obj.getVar("flowerbladedance_jump").getBool(0)) totalDamage = totalDamage + sq_GetLevelData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 4, skill_level);
|
||
|
|
if(sq_GetIntData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 13) > 0 || FLOWERBLADEDANCE_STONE > 0){
|
||
|
|
totalDamage = totalDamage * 133 / 100;
|
||
|
|
}
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 173));
|
||
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||
|
|
break;
|
||
|
|
case 5:
|
||
|
|
if(obj.getVar("flowerbladedance").getBool(0)) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FLOWERBLADEDANCE_SPIN_BODY);
|
||
|
|
else{
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_FLOWERBLADEDANCE_SPIN2_BODY);
|
||
|
|
}
|
||
|
|
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_FLOWERBLADEDANCE);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 3, skill_level);
|
||
|
|
if(obj.getVar("flowerbladedance_jump").getBool(0)) totalDamage = totalDamage * 2;
|
||
|
|
if(sq_GetIntData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 13) > 0 || FLOWERBLADEDANCE_STONE > 0){
|
||
|
|
totalDamage = totalDamage * 150 * 133 / 10000;
|
||
|
|
}
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 174));
|
||
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||
|
|
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/spin/downattack_dust03.ani", 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);
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndCurrentAni_Flowerbladedance_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
case 1:
|
||
|
|
case 2:
|
||
|
|
case 3:
|
||
|
|
case 4:
|
||
|
|
if(sq_GetIntData(obj, SKILL_VAGABOND_FLOWERBLADEDANCE, 13) > 0 || FLOWERBLADEDANCE_STONE > 0){
|
||
|
|
if(subState == 0){
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(2);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_FLOWERBLADEDANCE, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/first/delay_back_dust01.ani", 0, 0, 0);
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/first/delay_jump_a.ani", 100, 0, 100);
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/second/flowerbladedance_delay_second_linedodge.ani", 100, 0, 100);
|
||
|
|
sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 155));
|
||
|
|
sq_SimpleMoveToNearMovablePos(obj, 200);
|
||
|
|
sq_setCurrentAxisPos(obj, 2, 250);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
else if(subState == 2){
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(4);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_FLOWERBLADEDANCE, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(subState + 1);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_FLOWERBLADEDANCE, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/dasheffect_light.ani", 0, 0, 0);
|
||
|
|
sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 100));
|
||
|
|
sq_SimpleMoveToNearMovablePos(obj, 200);
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/first/delay_back_dust01.ani", 0, 0, 0);
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/first/delay_jump_a.ani", 100, 0, 100);
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/second/flowerbladedance_delay_second_linedodge.ani", 100, 0, 100);
|
||
|
|
sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 155));
|
||
|
|
sq_SimpleMoveToNearMovablePos(obj, 200);
|
||
|
|
sq_setCurrentAxisPos(obj, 2, 250);
|
||
|
|
break;
|
||
|
|
case 4:
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/dasheffectdown_jumpline.ani", 0, 0, 0);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 5:
|
||
|
|
// if(obj.getVar("flowerbladedance").getBool(0) == false) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj)));
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onTimeEvent_Flowerbladedance_bykk(obj, timeEventIndex, timeEventCount)
|
||
|
|
{
|
||
|
|
switch(timeEventIndex){
|
||
|
|
case 10:
|
||
|
|
local srcX = obj.getVar("flowerbladedance_move").getInt(0);
|
||
|
|
local srcZ = obj.getVar("flowerbladedance_move").getInt(1);
|
||
|
|
local moveX = obj.getVar("flowerbladedance_move").getInt(2);
|
||
|
|
local v = sq_GetUniformVelocity(0, moveX, timeEventCount, 10);
|
||
|
|
local vz = sq_GetUniformVelocity(srcZ, 0, timeEventCount, 10);
|
||
|
|
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);
|
||
|
|
sq_setCurrentAxisPos(obj, 2, vz);
|
||
|
|
if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);
|
||
|
|
else{
|
||
|
|
obj.getVar("flowerbladedance_move").setInt(0, sq_GetXPos(obj));
|
||
|
|
obj.getVar("flowerbladedance_move").setInt(2, 0);
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onAttack_Flowerbladedance_bykk(obj, damager, boundingBox, isStuck)
|
||
|
|
{
|
||
|
|
if(!obj || isStuck) return;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEnterFrame_Flowerbladedance_bykk(obj, frameIndex)
|
||
|
|
{
|
||
|
|
if(!obj || !obj.isMyControlObject()) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
switch(frameIndex){
|
||
|
|
case 0: obj.sq_PlaySound("SW_FLOWER_BLADE_DANCE_01"); break;
|
||
|
|
case 1:
|
||
|
|
sq_SetMyShake(obj, 1, 30);
|
||
|
|
sq_flashScreen(obj, 0, 50, 0, 89, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
switch(frameIndex){
|
||
|
|
case 0: sq_flashScreen(obj, 0, 20, 0, 127, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break;
|
||
|
|
case 1:
|
||
|
|
obj.sq_PlaySound("FLOWER_BLADE_DANCE_01");
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/first/flowerbladedance_delay_first002.ani", 0, 0, 0);
|
||
|
|
break;
|
||
|
|
case 3:
|
||
|
|
obj.resetHitObjectList();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
switch(frameIndex){
|
||
|
|
case 0:
|
||
|
|
obj.sq_PlaySound("SW_FLOWER_BLADE_DANCE_02");
|
||
|
|
obj.sq_PlaySound("FLOWER_BLADE_DANCE_JUMP");
|
||
|
|
sq_SetMyShake(obj, 1, 150);
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/secondjump/flowerbladedance_delay_second001.ani", 0, 0, 0);
|
||
|
|
break;
|
||
|
|
case 4:
|
||
|
|
obj.resetHitObjectList();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 3:
|
||
|
|
switch(frameIndex){
|
||
|
|
case 0:
|
||
|
|
sq_SetMyShake(obj, 1, 150);
|
||
|
|
sq_flashScreen(obj, 0, 20, 0, 127, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
obj.sq_PlaySound("SW_FLOWER_BLADE_DANCE_02");
|
||
|
|
obj.sq_PlaySound("FLOWER_BLADE_DANCE_JUMP");
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/second/flowerbladedance_delay_second001.ani", 0, 0, 0);
|
||
|
|
break;
|
||
|
|
case 3:
|
||
|
|
obj.resetHitObjectList();
|
||
|
|
obj.sq_PlaySound("FLOWER_BLADE_DANCE_02");
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 4:
|
||
|
|
switch(frameIndex){
|
||
|
|
case 0:
|
||
|
|
obj.sq_PlaySound("FLOWER_BLADE_DANCE_03");
|
||
|
|
obj.sq_PlaySound("SW_FLOWER_BLADE_DANCE_03");
|
||
|
|
sq_flashScreen(obj, 0, 20, 0, 127, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
sq_SetMyShake(obj, 3, 160);
|
||
|
|
break;
|
||
|
|
case 3:
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/third/downattack_dust02.ani", 0, 0, 0);
|
||
|
|
break;
|
||
|
|
case 5:
|
||
|
|
obj.resetHitObjectList();
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/third/flowerbladedance_delay_front_third004.ani", 0, 0, 0);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 5:
|
||
|
|
switch(frameIndex){
|
||
|
|
case 0: sq_flashScreen(obj, 10, 50, 100, 178, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break;
|
||
|
|
case 2:
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/dasheffect_light.ani", -500, 0, 70);
|
||
|
|
case 4:
|
||
|
|
sq_SetMyShake(obj, 5, 320);
|
||
|
|
//`finish spin` 7 0 -12
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atflowerbladedance/spin/flower_spin.ani", 7, 0, -12);
|
||
|
|
break;
|
||
|
|
case 6:
|
||
|
|
sq_SetMyShake(obj, 1, 50);
|
||
|
|
//`EnableHermitTripleStep` 0 0 0
|
||
|
|
//`rapid step enable` 0 0 0
|
||
|
|
obj.getVar("rapid_step_enable").setBool(0, true);
|
||
|
|
obj.getVar("EnableHermitTripleStep").setBool(0, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onChangeSkillEffect_Flowerbladedance_bykk(obj, skillIndex, receiveData)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndState_Flowerbladedance_bykk(obj, newState)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
if(newState != SKILL_VAGABOND_FLOWERBLADEDANCE){
|
||
|
|
if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false);
|
||
|
|
if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onKeyFrameFlag_Flowerbladedance_bykk(obj, flagIndex)
|
||
|
|
{
|
||
|
|
if (!obj) return;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onProcCon_Flowerbladedance_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
|
||
|
|
local curAni = sq_GetCurrentAnimation(obj);
|
||
|
|
local curframe = obj.sq_GetCurrentFrameIndex(curAni);
|
||
|
|
local ststeTime = obj.sq_GetStateTimer();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
case 1:
|
||
|
|
case 2:
|
||
|
|
case 3:
|
||
|
|
case 4:
|
||
|
|
if(obj.getVar("flowerbladedance").getBool(0) == 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("flowerbladedance").setBool(0, true);
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 5:
|
||
|
|
if(obj.getVar("flowerbladedance").getBool(0) == false){
|
||
|
|
local pAni = obj.getCurrentAnimation();
|
||
|
|
local currentT = sq_GetCurrentTime(pAni);
|
||
|
|
local fireT = pAni.getDelaySum(0, 7);
|
||
|
|
local srcX = obj.getVar("flowerbladedance_move").getInt(0);
|
||
|
|
local baseX = obj.getVar("flowerbladedance_move").getInt(10);
|
||
|
|
local v = sq_GetUniformVelocity(srcX, baseX, currentT, fireT);
|
||
|
|
sq_setCurrentAxisPos(obj, 0, v);
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
|
|
||
|
|
function checkExecutableSkill_Gonewiththepetal_bykk(obj)
|
||
|
|
{
|
||
|
|
if (!obj) return 0;
|
||
|
|
local isUseSkill = obj.sq_IsUseSkill(249);
|
||
|
|
if (isUseSkill){
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
if(obj.getState() == STATE_JUMP) obj.sq_IntVectPush(10);
|
||
|
|
else obj.sq_IntVectPush(0);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_GONEWITHTHEPETAL, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
return 1;
|
||
|
|
}
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onSetState_Gonewiththepetal_bykk(obj, state, datas, isResetTimer)
|
||
|
|
{
|
||
|
|
obj.sq_StopMove();
|
||
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
||
|
|
obj.setSkillSubState(subState);
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
case 10:
|
||
|
|
if(subState == 0){
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_GONEWITHTHEPETALREADY_BODY);
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atgonewiththepetal/ready_07.ani", 0, 1, 0);
|
||
|
|
}
|
||
|
|
else if(subState == 10){
|
||
|
|
obj.sq_ZStop();
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_GONEWITHTHEPETALJUMPREADY_BODY);
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atgonewiththepetal/jumpready_07.ani", 0, 1, 0);
|
||
|
|
}
|
||
|
|
obj.getVar("gone_target").clear_obj_vector();
|
||
|
|
obj.getVar("gone_target_boss").clear_obj_vector();
|
||
|
|
obj.getVar("gone_target_named").clear_obj_vector();
|
||
|
|
obj.getVar("gone_target_normal").clear_obj_vector();
|
||
|
|
local aniPath = "character/swordman/effect/animation/atgonewiththepetal/rangecheck_01.ani";
|
||
|
|
createOnlyDrawObject_AtSwordMan_bykk(obj, aniPath, true, obj.getDirection(), sq_GetXPos(obj), sq_GetYPos(obj), 0, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
local rangeX = sq_GetIntData(obj, SKILL_VAGABOND_GONEWITHTHEPETAL, 0);
|
||
|
|
local rangeY = sq_GetIntData(obj, SKILL_VAGABOND_GONEWITHTHEPETAL, 1);
|
||
|
|
local objectManager = obj.getObjectManager();//得到對象管理器
|
||
|
|
local objectNumber = objectManager.getCollisionObjectNumber();//總數
|
||
|
|
for (local i = 0; i < objectNumber; i++){
|
||
|
|
local object = objectManager.getCollisionObject(i);//得到控制類對象
|
||
|
|
if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && isFrontObject(obj,object) && obj.isEnemy(object)){
|
||
|
|
local activeObj = sq_GetCNRDObjectToActiveObject(object);
|
||
|
|
if(sq_Abs(sq_GetXPos(activeObj) - sq_GetXPos(obj)) <= rangeX && sq_Abs(sq_GetYPos(activeObj) - sq_GetYPos(obj)) <= rangeY){
|
||
|
|
if(sq_IsBoss(activeObj)) obj.getVar("gone_target_boss").push_obj_vector(activeObj);
|
||
|
|
else if(sq_IsNamed(activeObj)) obj.getVar("gone_target_named").push_obj_vector(activeObj);
|
||
|
|
else obj.getVar("gone_target_normal").push_obj_vector(activeObj);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if(obj.getVar("gone_target_boss").get_obj_vector_size() > 0) obj.getVar("gone_target").push_obj_vector(obj.getVar("gone_target_boss").get_obj_vector(0));
|
||
|
|
else if(obj.getVar("gone_target_named").get_obj_vector_size() > 0) obj.getVar("gone_target").push_obj_vector(obj.getVar("gone_target_named").get_obj_vector(0));
|
||
|
|
else if(obj.getVar("gone_target_normal").get_obj_vector_size() > 0) obj.getVar("gone_target").push_obj_vector(obj.getVar("gone_target_normal").get_obj_vector(0));
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
case 11:
|
||
|
|
if(subState == 1) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_GONEWITHTHEPETALATTACK_BODY);
|
||
|
|
else if(subState == 11) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_GONEWITHTHEPETALJUMPATTACK_BODY);
|
||
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_GONEWITHTHEPETAL, SKILL_VAGABOND_GONEWITHTHEPETAL, 0, 1.0);
|
||
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 175));
|
||
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atgonewiththepetal/attackb_02.ani", 150, 0, 0);
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atgonewiththepetal/attacka.ani", 150, 1, 0);
|
||
|
|
local aniPath = "character/swordman/effect/animation/atgonewiththepetal/attackc.ani";
|
||
|
|
createOnlyDrawObject_AtSwordMan_bykk(obj, aniPath, true, obj.getDirection(), sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 150), sq_GetYPos(obj), 0, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onTimeEvent_Gonewiththepetal_bykk(obj, timeEventIndex, timeEventCount)
|
||
|
|
{
|
||
|
|
switch(timeEventIndex){
|
||
|
|
case 1:
|
||
|
|
if(obj.getVar("gone_target").get_obj_vector_size() > 0){
|
||
|
|
local targetObj = obj.getVar("gone_target").get_obj_vector(0);
|
||
|
|
local moveX = sq_GetDistancePos(sq_GetXPos(targetObj), obj.getDirection(), -130);
|
||
|
|
sq_setCurrentAxisPos(obj, 0, moveX);
|
||
|
|
sq_setCurrentAxisPos(obj, 1, sq_GetYPos(targetObj));
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
if(subState == 10) sq_setCurrentAxisPos(obj, 2, 0);
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
if(subState == 0) obj.sq_IntVectPush(1);
|
||
|
|
else if(subState == 10) obj.sq_IntVectPush(11);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_GONEWITHTHEPETAL, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
}
|
||
|
|
else{
|
||
|
|
if(obj.getSkillSubState() == 10){
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(1);
|
||
|
|
obj.sq_IntVectPush(0);
|
||
|
|
obj.sq_IntVectPush(0);
|
||
|
|
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
}
|
||
|
|
else{
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onAttack_Gonewiththepetal_bykk(obj, damager, boundingBox, isStuck)
|
||
|
|
{
|
||
|
|
if (!obj || !damager) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 1:
|
||
|
|
case 11:
|
||
|
|
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
|
||
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_GONEWITHTHEPETAL, SKILL_VAGABOND_GONEWITHTHEPETAL, 1, 1.0) + 100;
|
||
|
|
local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_GONEWITHTHEPETAL, SKILL_VAGABOND_GONEWITHTHEPETAL, 2, 1.0) + 100;
|
||
|
|
local hitMax = sq_GetIntData(obj, SKILL_VAGABOND_GONEWITHTHEPETAL, 8);
|
||
|
|
if(sq_GetIntData(obj, SKILL_VAGABOND_GONEWITHTHEPETAL, 18) > 0) hitMax = 1;
|
||
|
|
local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger();
|
||
|
|
local group = sq_GetGroup(damager);
|
||
|
|
local uniqueId = sq_GetUniqueId(damager);
|
||
|
|
cearteSkillPassiveObj_AtSwordMan_bykk(obj, damager, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, sq_GetObjectHeight(damager) / 2 * 0, obj.getDirection(), 3,SKILL_VAGABOND_GONEWITHTHEPETAL, 1, totalDamage, hitMax, damageRate, group, uniqueId, 0, 0, 0, 1);
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEnterFrame_Gonewiththepetal_bykk(obj, frameIndex)
|
||
|
|
{
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
case 10:
|
||
|
|
switch(frameIndex){
|
||
|
|
case 0:
|
||
|
|
obj.sq_PlaySound("R_SW_GONE_WITH_THE_PETAL_01");
|
||
|
|
obj.sq_PlaySound("PLAY_MY_GLOBAL");
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
obj.sq_PlaySound("GONE_WITH_THE_PETAL_CAST");
|
||
|
|
obj.sq_PlaySound("PLAY_MY_GLOBAL");
|
||
|
|
case 3:
|
||
|
|
obj.setTimeEvent(1, 80, 1, false);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
case 11:
|
||
|
|
switch(frameIndex){
|
||
|
|
case 1:
|
||
|
|
obj.sq_PlaySound("GONE_WITH_THE_PETAL_ABSORB");
|
||
|
|
obj.sq_PlaySound("PLAY_MY_GLOBAL");
|
||
|
|
break;
|
||
|
|
case 3:
|
||
|
|
//`EnableHermitTripleStep` 0 0 0
|
||
|
|
//`rapid step enable` 0 0 0
|
||
|
|
obj.getVar("rapid_step_enable").setBool(0, true);
|
||
|
|
obj.getVar("EnableHermitTripleStep").setBool(0, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onKeyFrameFlag_Gonewiththepetal_bykk(obj, flagIndex)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onProcCon_Gonewiththepetal_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndCurrentAni_Gonewiththepetal_bykk(obj)
|
||
|
|
{
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
case 10:
|
||
|
|
//obj.setTimeEvent(1, 80, 1, true);
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
case 11:
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndState_Gonewiththepetal_bykk(obj, newState)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
if(newState != SKILL_VAGABOND_GONEWITHTHEPETAL){
|
||
|
|
sq_SimpleMoveToNearMovablePos(obj,200);
|
||
|
|
if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false);
|
||
|
|
if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
|
|
||
|
|
function checkExecutableSkill_Hermittriplestep_bykk(obj)
|
||
|
|
{
|
||
|
|
if (!obj) return 0;
|
||
|
|
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_HERMITTRIPLESTEP);
|
||
|
|
if (isUse){
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(0);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_HERMITTRIPLESTEP, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
return 1;
|
||
|
|
}
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onSetState_Hermittriplestep_bykk(obj, state, datas, isResetTimer)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
||
|
|
obj.setSkillSubState(subState);
|
||
|
|
obj.sq_StopMove();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
obj.getVar("hermittriplestep").setBool(0, false);
|
||
|
|
obj.getVar("hermittriplestep_move").setInt(10, sq_GetXPos(obj));
|
||
|
|
obj.getVar("hermittriplestep_move").setInt(11, sq_GetYPos(obj));
|
||
|
|
obj.getVar("hermittriplestep_tar").clear_obj_vector();
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_HERMITTRIPLESTEPCAST);
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/cast_dust.ani", 0, 0, 0);
|
||
|
|
// obj.setTimeEvent(1, 25, -1, false);
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_HERMITTRIPLESTEPATTACK1);
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 178));
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/attacka_front_leef03.ani", 0, 1, 0);
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/attacka_back_leef02.ani", 0, -1, 0);
|
||
|
|
local objectManager = obj.getObjectManager();
|
||
|
|
for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){
|
||
|
|
local object = objectManager.getCollisionObject(i);//得到控制類對象
|
||
|
|
if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && !object.isInDamagableState(obj)){
|
||
|
|
local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj);
|
||
|
|
local tarPosX = sq_GetXPos(object), tarPosY = sq_GetYPos(object);
|
||
|
|
if(direction == ENUM_DIRECTION_RIGHT){
|
||
|
|
if((tarPosX > xPos && tarPosX - xPos <= 640) || (tarPosX < xPos && xPos- tarPosX <= 260)){
|
||
|
|
if(sq_Abs(tarPosY - yPos) <= 100){
|
||
|
|
local activeObj = sq_GetCNRDObjectToActiveObject(object);
|
||
|
|
sq_SetCustomDamageType(activeObj, false, 0);
|
||
|
|
if(!obj.getVar("hermittriplestep_tar").is_obj_vector(activeObj)) obj.getVar("hermittriplestep_tar").push_obj_vector(activeObj);
|
||
|
|
local apdPath = "character/atswordman/3_vagabond/hermittriplestep/ap_hermittriplestep.nut";
|
||
|
|
if(!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, apdPath)){
|
||
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, apdPath, true);
|
||
|
|
sq_HoldAndDelayDie(activeObj, obj, true, true, true, 0, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else if(direction == ENUM_DIRECTION_LEFT){
|
||
|
|
if((tarPosX < xPos && xPos- tarPosX <= 640) || (tarPosX > xPos && tarPosX - xPos <= 260)){
|
||
|
|
if(sq_Abs(tarPosY - yPos) <= 100){
|
||
|
|
local activeObj = sq_GetCNRDObjectToActiveObject(object);
|
||
|
|
sq_SetCustomDamageType(activeObj, false, 0);
|
||
|
|
if(!obj.getVar("hermittriplestep_tar").is_obj_vector(activeObj)) obj.getVar("hermittriplestep_tar").push_obj_vector(activeObj);
|
||
|
|
local apdPath = "character/atswordman/3_vagabond/hermittriplestep/ap_hermittriplestep.nut";
|
||
|
|
if(!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, apdPath)){
|
||
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, apdPath, true);
|
||
|
|
sq_HoldAndDelayDie(activeObj, obj, true, true, true, 0, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_HERMITTRIPLESTEPATTACK2);
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 178));
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/attackb_front_leef03.ani", 0, 1, 0);
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/attackb_back_leef02.ani", 0, -1, 0);
|
||
|
|
break;
|
||
|
|
case 3:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_HERMITTRIPLESTEPATTACK3);
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 178));
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/attackc_front_leef01.ani", 0, 1, 0);
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/attackc_back_leef02.ani", 0, -1, 0);
|
||
|
|
break;
|
||
|
|
case 4:
|
||
|
|
obj.removeAllTimeEvent();
|
||
|
|
if(obj.getVar("hermittriplestep").getBool(0)) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_HERMITTRIPLESTEPLAST1FRONT);
|
||
|
|
else{
|
||
|
|
sq_setCurrentAxisPos(obj, 0, obj.getVar("hermittriplestep_move").getInt(10));
|
||
|
|
sq_setCurrentAxisPos(obj, 1, obj.getVar("hermittriplestep_move").getInt(11));
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_HERMITTRIPLESTEPLAST1);
|
||
|
|
}
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/lasta_leef.ani", 0, 0, 0);
|
||
|
|
break;
|
||
|
|
case 5:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_HERMITTRIPLESTEPLAST2);
|
||
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_HERMITTRIPLESTEP, SKILL_VAGABOND_HERMITTRIPLESTEP, 0, 1.0) + 100;
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 177));
|
||
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/athermittriplestep/lastb_effect02.ani", 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);
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndCurrentAni_Hermittriplestep_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
case 1:
|
||
|
|
case 2:
|
||
|
|
case 3:
|
||
|
|
case 4:
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(subState + 1);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_HERMITTRIPLESTEP, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(obj.getVar("hermittriplestep_move").getInt(10), obj.getDirection(), 200));
|
||
|
|
// sq_SimpleMoveToNearMovablePos(obj,300);
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(obj.getVar("hermittriplestep_move").getInt(10), obj.getDirection(), 380));
|
||
|
|
// sq_SimpleMoveToNearMovablePos(obj,400);
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(obj.getVar("hermittriplestep_move").getInt(10), obj.getDirection(), 590));
|
||
|
|
// sq_SimpleMoveToNearMovablePos(obj,600);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 5:
|
||
|
|
local size = obj.getVar("hermittriplestep_tar").get_obj_vector_size();
|
||
|
|
if(size > 0){
|
||
|
|
for(local i = 0; i < size; i++){
|
||
|
|
local targetObj = obj.getVar("hermittriplestep_tar").get_obj_vector(i);
|
||
|
|
if(targetObj){
|
||
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(targetObj);
|
||
|
|
CNSquirrelAppendage.sq_RemoveAppendage(colObj, "character/atswordman/3_vagabond/hermittriplestep/ap_hermittriplestep.nut");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEnterFrame_Hermittriplestep_bykk(obj, frameIndex)
|
||
|
|
{
|
||
|
|
if(!obj || !obj.isMyControlObject()) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
switch(frameIndex){
|
||
|
|
case 1:
|
||
|
|
obj.sq_PlaySound("R_SW_FLOWER_BLADE_SLASH_01");
|
||
|
|
obj.sq_PlaySound("FLOWER_BLADE_SLASH_CAST");
|
||
|
|
sq_flashScreen(obj, 60, 420, 0, 102, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
case 2:
|
||
|
|
switch(frameIndex){
|
||
|
|
case 1:
|
||
|
|
obj.sq_PlaySound("FLOWER_BLADE_SLASH_DASH");
|
||
|
|
sq_flashScreen(obj, 0, 120, 0, 102, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 3:
|
||
|
|
switch(frameIndex){
|
||
|
|
case 1:
|
||
|
|
sq_flashScreen(obj, 0, 120, 360, 102, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
obj.sq_PlaySound("FLOWER_BLADE_SLASH_DASH");
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 4:
|
||
|
|
if(obj.getVar("hermittriplestep").getBool(0) == false){
|
||
|
|
switch(frameIndex){
|
||
|
|
case 1:
|
||
|
|
obj.sq_PlaySound("FLOWER_BLADE_SLASH_RETURN");
|
||
|
|
break;
|
||
|
|
case 6:
|
||
|
|
sq_flashScreen(obj, 720, 120, 0, 255, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
break;
|
||
|
|
case 14:
|
||
|
|
obj.sq_PlaySound("R_SW_FLOWER_BLADE_SLASH_02");
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else{
|
||
|
|
switch(frameIndex){
|
||
|
|
case 1:
|
||
|
|
obj.sq_PlaySound("FLOWER_BLADE_SLASH_RETURN");
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
sq_flashScreen(obj, 720, 120, 0, 255, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
break;
|
||
|
|
case 9:
|
||
|
|
obj.sq_PlaySound("R_SW_FLOWER_BLADE_SLASH_02");
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 5:
|
||
|
|
switch(frameIndex){
|
||
|
|
case 1:
|
||
|
|
sq_flashScreen(obj, 0, 0, 600, 153, sq_RGB(255, 255, 255), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
obj.sq_PlaySound("FLOWER_BLADE_SLASH_SHEATHE");
|
||
|
|
sq_SetMyShake(obj, 6, 250);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onChangeSkillEffect_Hermittriplestep(obj, skillIndex, receiveData)
|
||
|
|
{
|
||
|
|
if(!obj || skillIndex != 225) return;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onTimeEvent_Hermittriplestep_bykk(obj, timeEventIndex, timeEventCount)
|
||
|
|
{
|
||
|
|
switch(timeEventIndex){
|
||
|
|
case 1:
|
||
|
|
local srcX = obj.getVar("hermittriplestep_move").getInt(10);
|
||
|
|
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), 20 * timeEventCount);//根據方嚮運算當前數值
|
||
|
|
if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);//設置當前x坐標
|
||
|
|
else obj.stopTimeEvent(1);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onAttack_Hermittriplestep_bykk(obj, damager, boundingBox, isStuck)
|
||
|
|
{
|
||
|
|
if(!obj || isStuck) return false;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 1:
|
||
|
|
case 2:
|
||
|
|
case 3:
|
||
|
|
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
|
||
|
|
if(!obj.getVar("hermittriplestep_tar").is_obj_vector(damager)) obj.getVar("hermittriplestep_tar").push_obj_vector(damager);
|
||
|
|
local apdPath = "character/atswordman/3_vagabond/hermittriplestep/ap_hermittriplestep.nut";
|
||
|
|
if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, apdPath)){
|
||
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true);
|
||
|
|
sq_HoldAndDelayDie(damager, obj, true, true, true, 0, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 5:
|
||
|
|
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
|
||
|
|
sq_AddDrawOnlyAniFromParent(damager, "character/swordman/effect/animation/athermittriplestep/hit_effect02.ani", 0, 0, sq_GetObjectHeight(damager) / 2);
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndState_Hermittriplestep_bykk(obj, newState)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
if(newState != SKILL_VAGABOND_HERMITTRIPLESTEP){
|
||
|
|
local size = obj.getVar("hermittriplestep_tar").get_obj_vector_size();
|
||
|
|
if(size > 0){
|
||
|
|
for(local i = 0; i < size; i++){
|
||
|
|
local targetObj = obj.getVar("hermittriplestep_tar").get_obj_vector(i);
|
||
|
|
if(targetObj){
|
||
|
|
local colObj = sq_GetCNRDObjectToActiveObject(targetObj);
|
||
|
|
CNSquirrelAppendage.sq_RemoveAppendage(colObj, "character/atswordman/3_vagabond/hermittriplestep/ap_hermittriplestep.nut");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
sq_SimpleMoveToNearMovablePos(obj,600);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onKeyFrameFlag_Hermittriplestep_bykk(obj, flagIndex)
|
||
|
|
{
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
if(subState == 5 && flagIndex == 0){
|
||
|
|
local size = obj.getVar("hermittriplestep_tar").get_obj_vector_size();
|
||
|
|
if(size > 0){
|
||
|
|
for(local i = 0; i < size; i++){
|
||
|
|
local targetObj = obj.getVar("hermittriplestep_tar").get_obj_vector(i);
|
||
|
|
if(targetObj){
|
||
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(targetObj);
|
||
|
|
sq_SendHitObjectPacketWithNoStuck(obj, colObj, 0, 0, sq_GetObjectHeight(colObj) / 2);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function HermittriplestepSearchTarget(obj)
|
||
|
|
{
|
||
|
|
if(IsInterval(obj, 5))
|
||
|
|
{
|
||
|
|
local objectManager = obj.getObjectManager();
|
||
|
|
for(local i=0; i<objectManager.getCollisionObjectNumber(); ++i)
|
||
|
|
{
|
||
|
|
local object = objectManager.getCollisionObject(i);
|
||
|
|
local dis = sq_GetDistanceObject(object, obj, false);
|
||
|
|
if(object && obj.isEnemy(object) && dis <= 130 && object.isObjectType(OBJECTTYPE_ACTIVE))
|
||
|
|
obj.getVar("Hermittriplestep").push_obj_vector(object);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function HermittriplestepSetPos(obj,curframe)
|
||
|
|
{
|
||
|
|
if(curframe > 0)
|
||
|
|
{
|
||
|
|
local direction = obj.sq_GetInputDirection(0);
|
||
|
|
|
||
|
|
if(obj.getDirection() == direction)
|
||
|
|
{
|
||
|
|
sq_BinaryStartWrite();
|
||
|
|
sq_BinaryWriteDword(1);
|
||
|
|
sq_SendChangeSkillEffectPacket(obj, 225);
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onProcCon_Hermittriplestep_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
|
||
|
|
local curAni = sq_GetCurrentAnimation(obj);
|
||
|
|
local curframe = obj.sq_GetCurrentFrameIndex(curAni);
|
||
|
|
local aniSumTime = sq_GetDelaySum(curAni);
|
||
|
|
local ststeTime = obj.sq_GetStateTimer();
|
||
|
|
|
||
|
|
switch(subState){
|
||
|
|
case 1:
|
||
|
|
case 2:
|
||
|
|
case 3:
|
||
|
|
if(obj.getVar("hermittriplestep").getBool(0) == 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("hermittriplestep").setBool(0, true);
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
|
|
||
|
|
|
||
|
|
function checkExecutableSkill_Inhalation_bykk(obj)
|
||
|
|
{
|
||
|
|
if (!obj) return 0;
|
||
|
|
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_INHALATION);
|
||
|
|
if (isUse){
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(0);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_INHALATION, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
return 1;
|
||
|
|
}
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onSetState_Inhalation_bykk(obj, state, datas, isResetTimer)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
||
|
|
obj.setSkillSubState(subState);
|
||
|
|
obj.sq_StopMove();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_INHALATIONCAST);
|
||
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
|
|
local range = sq_GetIntData(obj, SKILL_VAGABOND_INHALATION, 2);
|
||
|
|
obj.getVar("inhalation_target").clear_obj_vector();
|
||
|
|
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_VAGABOND,300,0,0,obj.getDirection(),3,SKILL_VAGABOND_INHALATION,1,range,0,0,0,0,0,0,0,0);
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_INHALATIONGRAB);
|
||
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
|
|
local baseX = sq_GetIntData(obj, SKILL_VAGABOND_INHALATION, 1);
|
||
|
|
local currentAni = obj.getCurrentAnimation();
|
||
|
|
local delaySum = currentAni.getDelaySum(false);
|
||
|
|
obj.setTimeEvent(1, delaySum, 1, false);
|
||
|
|
|
||
|
|
local size = obj.getVar("inhalation_target").get_obj_vector_size();
|
||
|
|
if(size > 0){
|
||
|
|
for(local i = 0; i < size; i++){
|
||
|
|
local targetObj = obj.getVar("inhalation_target").get_obj_vector(i);
|
||
|
|
if(targetObj){
|
||
|
|
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/atswordman/3_vagabond/inhalation/ap_inhalation.nut");
|
||
|
|
sq_MoveToAppendageForce(targetObj, obj, obj, baseX, 0, 0, delaySum, true, addAppendage);
|
||
|
|
createOnlyDrawObject_AtSwordMan_bykk(obj, "character/swordman/effect/animation/atinhalation/dust.ani", true, obj.getDirection(), sq_GetXPos(targetObj), sq_GetYPos(targetObj), 0, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_INHALATIONTHROW);
|
||
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_INHALATION);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_INHALATION, 0, skill_level);
|
||
|
|
local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_INHALATION, 6);
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 152));
|
||
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||
|
|
local size = obj.getVar("inhalation_target").get_obj_vector_size();
|
||
|
|
if(size > 0){
|
||
|
|
for(local i = 0; i < size; i++){
|
||
|
|
local targetObj = obj.getVar("inhalation_target").get_obj_vector(i);
|
||
|
|
if(targetObj){
|
||
|
|
sq_SendHitObjectPacket(obj, targetObj, 0, 0, 0);
|
||
|
|
cearteSkillPassiveObj_AtSwordMan_bykk(obj, targetObj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, 0, obj.getDirection(), 3, SKILL_VAGABOND_INHALATION, 2, totalDamage, sizeRate, 0, 0, 0, 0, 0, 0, 1);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndCurrentAni_Inhalation_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(1);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_INHALATION, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(2);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_INHALATION, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
local size = obj.getVar("inhalation_target").get_obj_vector_size();
|
||
|
|
if(size > 0){
|
||
|
|
for(local i = 0; i < size; i++){
|
||
|
|
local targetObj = obj.getVar("inhalation_target").get_obj_vector(i);
|
||
|
|
if(targetObj){
|
||
|
|
CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/3_vagabond/inhalation/ap_inhalation.nut");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onTimeEvent_Inhalation_bykk(obj, timeEventIndex, timeEventCount)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onAttack_Inhalation_bykk(obj, damager, boundingBox, isStuck)
|
||
|
|
{
|
||
|
|
if(!obj || isStuck) return;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEnterFrame_Inhalation_bykk(obj, frameIndex)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
if(subState == 2 && frameIndex == 1){
|
||
|
|
obj.getVar("rapid_step_enable").setBool(0, true);
|
||
|
|
obj.getVar("EnableHermitTripleStep").setBool(0, true);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndState_Inhalation_bykk(obj, newState)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
if(newState != SKILL_VAGABOND_INHALATION){
|
||
|
|
if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false);
|
||
|
|
if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false);
|
||
|
|
local size = obj.getVar("inhalation_target").get_obj_vector_size();
|
||
|
|
if(size > 0){
|
||
|
|
for(local i = 0; i < size; i++){
|
||
|
|
local targetObj = obj.getVar("inhalation_target").get_obj_vector(i);
|
||
|
|
if(targetObj){
|
||
|
|
CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/3_vagabond/inhalation/ap_inhalation.nut");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onKeyFrameFlag_Inhalation_bykk(obj, flagIndex)
|
||
|
|
{
|
||
|
|
if (!obj) return;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onProcCon_Inhalation_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
}
|
||
|
|
|
||
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
|
|
||
|
|
|
||
|
|
function checkExecutableSkill_Moonlightslash_bykk(obj)
|
||
|
|
{
|
||
|
|
if (!obj) return 0;
|
||
|
|
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_MOONLIGHTSLASH);
|
||
|
|
if (isUse){
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
// print("sub ="+sq_GetIntData(obj, SKILL_VAGABOND_MOONLIGHTSLASH, 12));
|
||
|
|
if(sq_GetIntData(obj, SKILL_VAGABOND_MOONLIGHTSLASH, 12) > 0) obj.sq_IntVectPush(6);
|
||
|
|
else obj.sq_IntVectPush(0);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_MOONLIGHTSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
return 1;
|
||
|
|
}
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onSetState_Moonlightslash_bykk(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(ANIMATION_VAGABOND_MOONLIGHTSLASH_READY);
|
||
|
|
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_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 0, 1.0);
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 179));
|
||
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||
|
|
|
||
|
|
local currentAni = obj.getCurrentAnimation();
|
||
|
|
local delay = currentAni.getDelaySum(false);
|
||
|
|
obj.setTimeEvent(3, delay, 1, false);
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_MOONLIGHTSLASH_CUT);
|
||
|
|
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_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 0, 1.0);
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 180));
|
||
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||
|
|
local currentAni = obj.getCurrentAnimation();
|
||
|
|
local delaySum = currentAni.getDelaySum(false);
|
||
|
|
obj.setTimeEvent(1, delaySum / 18, 17, false);
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_MOONLIGHTSLASH_DASH);
|
||
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
|
|
obj.getVar("moonlightslash_move").setInt(12, 355);
|
||
|
|
obj.getVar("moonlightslash_move").setInt(13, 0);
|
||
|
|
|
||
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 2, 1.0);
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 181));
|
||
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||
|
|
break;
|
||
|
|
case 3:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_MOONLIGHTSLASH_UPPER);
|
||
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
|
|
obj.getVar("moonlightslash_move").setInt(12, -400);
|
||
|
|
obj.getVar("moonlightslash_move").setInt(13, 230);
|
||
|
|
|
||
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 3, 1.0);
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 182));
|
||
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||
|
|
break;
|
||
|
|
case 4:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_MOONLIGHTSLASH_SLASH);
|
||
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
|
|
obj.getVar("moonlightslash_move").setInt(12, 45);
|
||
|
|
obj.getVar("moonlightslash_move").setInt(13, -sq_GetZPos(obj));
|
||
|
|
|
||
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 5, 1.0);
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 183));
|
||
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||
|
|
break;
|
||
|
|
case 5:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_MOONLIGHTSLASH_SLASH_UPPER);
|
||
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
|
|
obj.getVar("moonlightslash_move").setInt(12, -45);
|
||
|
|
obj.getVar("moonlightslash_move").setInt(13, 0);
|
||
|
|
|
||
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 6, 1.0);
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 184));
|
||
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||
|
|
break;
|
||
|
|
case 6:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_MOONLIGHTSLASH_FINISH);
|
||
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
|
|
obj.getVar("moonlightslash_move").setInt(12, 45);
|
||
|
|
obj.getVar("moonlightslash_move").setInt(13, 300);
|
||
|
|
break;
|
||
|
|
case 7:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_MOONLIGHTSLASH_FINISH_EXP);
|
||
|
|
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_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 7, 1.0);
|
||
|
|
if(sq_GetIntData(obj, SKILL_VAGABOND_MOONLIGHTSLASH, 12) > 0){
|
||
|
|
totalDamage = totalDamage + obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_MOONLIGHTSLASH, SKILL_VAGABOND_MOONLIGHTSLASH, 0, 23.0);
|
||
|
|
}
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 185));
|
||
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
obj.getVar("moonlightslash_move").setInt(10, sq_GetXPos(obj));
|
||
|
|
obj.getVar("moonlightslash_move").setInt(11, sq_GetZPos(obj));
|
||
|
|
}
|
||
|
|
|
||
|
|
function onTimeEvent_Moonlightslash_bykk(obj, timeEventIndex, timeEventCount)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
switch(timeEventIndex){
|
||
|
|
case 1: obj.resetHitObjectList(); break;
|
||
|
|
case 2:
|
||
|
|
local srcZ = obj.getVar("moonlightslash_move").getInt(11);
|
||
|
|
local vz = sq_GetUniformVelocity(srcZ, 0, timeEventCount, 10);
|
||
|
|
sq_setCurrentAxisPos(obj, 2, vz);
|
||
|
|
break;
|
||
|
|
case 3:
|
||
|
|
//if(sq_GetIntData(obj, SKILL_VAGABOND_MOONLIGHTSLASH, 12) < 1) sendAwakeCutinInfo(obj,37);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndCurrentAni_Moonlightslash_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
case 1:
|
||
|
|
case 2:
|
||
|
|
case 3:
|
||
|
|
case 4:
|
||
|
|
case 5:
|
||
|
|
case 6:
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(subState + 1);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_MOONLIGHTSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
case 7:
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onAttack_Moonlightslash_bykk(obj, damager, boundingBox, isStuck)
|
||
|
|
{
|
||
|
|
if(!obj || isStuck) return;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEnterFrame_Moonlightslash_bykk(obj, frameIndex)
|
||
|
|
{
|
||
|
|
if(!obj || !obj.isMyControlObject()) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
switch(frameIndex){
|
||
|
|
case 5:
|
||
|
|
obj.sq_PlaySound("MOON_LIGHT_SLASH_CAST");
|
||
|
|
obj.sq_PlaySound("SW_MOON_LIGHT_SLASH_01");
|
||
|
|
sq_flashScreen(obj, 100, 4600, 0, 204, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
sq_SetMyShake(obj, 5, 50);
|
||
|
|
break;
|
||
|
|
case 9: obj.sq_PlaySound("MOON_LIGHT_SLASH_STAB"); break;
|
||
|
|
case 10: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step01b_dust07.ani", 0, 0, 0); break;
|
||
|
|
case 11: sq_SetMyShake(obj, 4, 100); break;
|
||
|
|
case 12:
|
||
|
|
sq_flashScreen(obj, 0, 50, 0, 76, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
sq_SetMyShake(obj, 9, 200);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
switch(frameIndex){
|
||
|
|
case 0:
|
||
|
|
obj.sq_PlaySound("MOON_LIGHT_SLASH_HACK");
|
||
|
|
sq_flashScreen(obj, 0, 20, 0, 76, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
break;
|
||
|
|
case 3:
|
||
|
|
case 6:
|
||
|
|
case 9:
|
||
|
|
case 12:
|
||
|
|
case 15:
|
||
|
|
case 18:
|
||
|
|
sq_flashScreen(obj, 0, 20, 0, 76, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
break;
|
||
|
|
case 19: obj.sq_PlaySound("SW_MOON_LIGHT_SLASH_02"); break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
switch(frameIndex){
|
||
|
|
case 0:
|
||
|
|
obj.sq_PlaySound("MOON_LIGHT_SLASH_DASH");
|
||
|
|
sq_flashScreen(obj, 0, 100, 0, 76, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
sq_SetMyShake(obj, 5, 240);
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step03b_dust03.ani", 0, 0, 0);
|
||
|
|
break;
|
||
|
|
case 3: obj.sq_PlaySound("SW_MOON_LIGHT_SLASH_03"); break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 3:
|
||
|
|
switch(frameIndex){
|
||
|
|
case 0:
|
||
|
|
obj.sq_PlaySound("MOON_LIGHT_SLASH_JUMP");
|
||
|
|
sq_SetMyShake(obj, 3, 10);
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step04b_dust01.ani", 0, 0, 0);
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step04c_atk.ani", -220, 0, 70);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 4:
|
||
|
|
switch(frameIndex){
|
||
|
|
case 0:
|
||
|
|
sq_flashScreen(obj, 0, 40, 0, 102, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step06b_dust03.ani", 20, 0, -280);
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
obj.sq_PlaySound("SW_MOON_LIGHT_SLASH_05");
|
||
|
|
obj.sq_PlaySound("MOON_LIGHT_SLASH_BLADE");
|
||
|
|
sq_SetMyShake(obj, 7, 150);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 5:
|
||
|
|
switch(frameIndex){
|
||
|
|
case 0:
|
||
|
|
obj.sq_PlaySound("MOON_LIGHT_SLASH_UPPER");
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step07_spin.ani", 0, 0, 0);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 6:
|
||
|
|
switch(frameIndex){
|
||
|
|
case 0:
|
||
|
|
obj.sq_PlaySound("MOON_LIGHT_SLASH_RISE");
|
||
|
|
sq_flashScreen(obj, 0, 20, 0, 76, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step08c_beam.ani", 0, 0, 0);
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
obj.sq_PlaySound("R_SW_MOON_LIGHT_SLASH_06");
|
||
|
|
sq_flashScreen(obj, 0, 20, 0, 51, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
break;
|
||
|
|
case 3: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step08b_leaf00.ani", 0, -1, -200); break;
|
||
|
|
case 4: sq_flashScreen(obj, 0, 100, 0, 127, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break;
|
||
|
|
case 12:
|
||
|
|
obj.sq_PlaySound("MOON_LIGHT_SLASH_CHARGE");
|
||
|
|
local currentAni = obj.getCurrentAnimation();
|
||
|
|
local delaySum = currentAni.getDelaySum(12, 14);
|
||
|
|
obj.getVar("moonlightslash_move").setInt(11, sq_GetZPos(obj));
|
||
|
|
obj.setTimeEvent(2, delaySum / 10, 10, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 7:
|
||
|
|
switch(frameIndex){
|
||
|
|
case 0:
|
||
|
|
obj.sq_PlaySound("R_SW_MOON_LIGHT_SLASH_07");
|
||
|
|
obj.sq_PlaySound("MOON_LIGHT_SLASH_EXP");
|
||
|
|
sq_flashScreen(obj, 0, 60, 0, 127, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
sq_SetMyShake(obj, 10, 700);
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step09a_atkmain.ani", 0, 1, 0);
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
//`EnableHermitTripleStep` 0 0 0
|
||
|
|
//`rapid step enable` 0 0 0
|
||
|
|
obj.getVar("rapid_step_enable").setBool(0, true);
|
||
|
|
obj.getVar("EnableHermitTripleStep").setBool(0, true);
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atmakelotusslash/atmakelotusslash_step09b_leafa00.ani", 0, 2, 0);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndState_Moonlightslash_bykk(obj, newState)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
if(newState != SKILL_VAGABOND_MOONLIGHTSLASH){
|
||
|
|
if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false);
|
||
|
|
if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onProc_Moonlightslash_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onKeyFrameFlag_Moonlightslash_bykk(obj, flagIndex)
|
||
|
|
{
|
||
|
|
if (!obj) return;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onProcCon_Moonlightslash_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
if(subState == 0 || subState == 1 || subState == 7) return;
|
||
|
|
local pAni = obj.getCurrentAnimation();
|
||
|
|
local currentT = sq_GetCurrentTime(pAni);
|
||
|
|
local fireT = pAni.getDelaySum(0, 3);
|
||
|
|
switch(subState){
|
||
|
|
case 3: fireT = pAni.getDelaySum(false); break;
|
||
|
|
case 4: fireT = pAni.getDelaySum(0, 1); break;
|
||
|
|
case 5: fireT = pAni.getDelaySum(false); break;
|
||
|
|
case 6: fireT = pAni.getDelaySum(0, 2); break;
|
||
|
|
}
|
||
|
|
if(subState == 6 && currentT > fireT) return;
|
||
|
|
local srcX = obj.getVar("moonlightslash_move").getInt(10);
|
||
|
|
local srcZ = obj.getVar("moonlightslash_move").getInt(11);
|
||
|
|
local MoveX = obj.getVar("moonlightslash_move").getInt(12);
|
||
|
|
local MoveZ = obj.getVar("moonlightslash_move").getInt(13);
|
||
|
|
local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT);
|
||
|
|
local vz = sq_GetUniformVelocity(0, MoveZ, currentT, fireT);
|
||
|
|
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);
|
||
|
|
sq_setCurrentAxisPos(obj, 2, srcZ + vz);
|
||
|
|
if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);
|
||
|
|
else{
|
||
|
|
obj.getVar("moonlightslash_move").setInt(10, sq_GetXPos(obj));
|
||
|
|
obj.getVar("moonlightslash_move").setInt(12, 0);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
|
|
||
|
|
function checkExecutableSkill_Nearblow_bykk(obj)
|
||
|
|
{
|
||
|
|
if (!obj) return 0;
|
||
|
|
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_NEARBLOW);
|
||
|
|
if (isUse){
|
||
|
|
if(sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 10) > 0) obj.getVar("Nearblow_Bool").setBool(0, true);
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(0);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_NEARBLOW, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
return 1;
|
||
|
|
}
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onSetState_Nearblow_bykk(obj, state, datas, isResetTimer)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
||
|
|
obj.setSkillSubState(subState);
|
||
|
|
obj.sq_StopMove();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_NEARBLOWPIERCE);
|
||
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
|
|
|
||
|
|
obj.sq_PlaySound("SW_NEAR_BLOW");
|
||
|
|
obj.getVar("nearblow").setBool(0,false);
|
||
|
|
obj.getVar("nearblow_target").clear_obj_vector();
|
||
|
|
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_NEARBLOW);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_NEARBLOW, 0, skill_level);
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 158));
|
||
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_NEARBLOWPIERCEBACK);
|
||
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
if(!obj.isMovablePos(sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), -150), sq_GetYPos(obj))) obj.getVar("nearblow").setBool(0, true);
|
||
|
|
if(obj.getVar("nearblow").getBool(0)) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_NEARBLOWPIERCEFRONTSLASH);
|
||
|
|
else obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_NEARBLOWPIERCEBACKSLASH);
|
||
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
|
|
|
||
|
|
if(obj.getVar("nearblow").getBool(0) == false){
|
||
|
|
local currentAni = obj.getCurrentAnimation();
|
||
|
|
local delaySum = currentAni.getDelaySum(false);
|
||
|
|
local size = obj.getVar("nearblow_target").get_obj_vector_size();
|
||
|
|
if(size > 0){
|
||
|
|
for(local i = 0; i < size; i++){
|
||
|
|
local targetObj = obj.getVar("nearblow_target").get_obj_vector(i);
|
||
|
|
if(targetObj){
|
||
|
|
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/atswordman/3_vagabond/nearblow/ap_nearblow.nut");
|
||
|
|
sq_MoveToAppendageForce(targetObj, obj, obj, -150, 0, 0, delaySum, true, addAppendage);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_NEARBLOW);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_NEARBLOW, 1, skill_level);
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 158));
|
||
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndCurrentAni_Nearblow_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
if(sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 10) > 0){
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
if(obj.getVar("nearblow_target").get_obj_vector_size() < 1){
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(1);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_NEARBLOW, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(2);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_NEARBLOW, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
local size = obj.getVar("nearblow_target").get_obj_vector_size();
|
||
|
|
if(size > 0 && obj.getVar("nearblow").getBool(0) == false){
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_NEARBLOW);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_NEARBLOW, 2, skill_level);
|
||
|
|
local range = sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 0);
|
||
|
|
for(local i = 0; i < size; i++){
|
||
|
|
local targetObj = obj.getVar("nearblow_target").get_obj_vector(i);
|
||
|
|
if(targetObj){
|
||
|
|
CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/3_vagabond/nearblow/ap_nearblow.nut");
|
||
|
|
cearteSkillPassiveObj_AtSwordMan_bykk(obj,targetObj,PASSIVEOBJECT_BYKK_VAGABOND,0,0,0,obj.getDirection(),3,SKILL_VAGABOND_NEARBLOW,1,totalDamage,range,0,0,0,0,0,0,1);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if(obj.getVar("nearblow").getBool(0) == false) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj)));
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onTimeEvent_Nearblow_bykk(obj, timeEventIndex, timeEventCount)
|
||
|
|
{}
|
||
|
|
|
||
|
|
function onAttack_Nearblow_bykk(obj, damager, boundingBox, isStuck)
|
||
|
|
{
|
||
|
|
if(!obj || isStuck) return false;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
|
||
|
|
if(sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 10) > 0){
|
||
|
|
if(obj.getVar("Nearblow_Bool").getBool(0)){
|
||
|
|
obj.getVar("Nearblow_Bool").setBool(0, false);
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_NEARBLOW);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_NEARBLOW, 2, skill_level);
|
||
|
|
totalDamage = totalDamage * sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 11);
|
||
|
|
local range = sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 0);
|
||
|
|
cearteSkillPassiveObj_AtSwordMan_bykk(obj,damager,PASSIVEOBJECT_BYKK_VAGABOND,0,0,-85-sq_GetZPos(obj),obj.getDirection(),3,SKILL_VAGABOND_NEARBLOW,2,totalDamage,range,0,0,0,0,0,0,1);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else{
|
||
|
|
if(sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager) && !sq_IsFixture(damager)){
|
||
|
|
if(obj.getVar("Nearblow").getBool(0) == false) obj.getVar("Nearblow").setBool(0,true);
|
||
|
|
obj.getVar("nearblow_target").push_obj_vector(damager);
|
||
|
|
local path = "character/atswordman/3_vagabond/nearblow/ap_nearblow.nut";
|
||
|
|
local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, path, true);
|
||
|
|
if(addAppendage){
|
||
|
|
sq_HoldAndDelayDie(damager, obj, true, true, true, 0, 0, ENUM_DIRECTION_NEUTRAL, addAppendage);
|
||
|
|
sq_MoveToAppendageForce(damager, obj, damager, 0, 0, 20, 100, true, addAppendage);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else if(sq_IsFixture(damager)){
|
||
|
|
obj.getVar("nearblow").setBool(0, true);
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_NEARBLOW);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_NEARBLOW, 2, skill_level);
|
||
|
|
totalDamage = totalDamage * sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 11);
|
||
|
|
local range = sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 0);
|
||
|
|
cearteSkillPassiveObj_AtSwordMan_bykk(obj,damager,PASSIVEOBJECT_BYKK_VAGABOND,0,0,-85-sq_GetZPos(obj),obj.getDirection(),3,SKILL_VAGABOND_NEARBLOW,2,totalDamage,range,0,0,0,0,0,0,1);
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEnterFrame_Nearblow_bykk(obj, frameIndex)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
local size = obj.getVar("Nearblow").get_obj_vector_size();
|
||
|
|
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
if(frameIndex == 3) sq_SetMyShake(obj, 8, 40);
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
if(obj.getVar("nearblow").getBool(0)){
|
||
|
|
if(frameIndex == 5) sq_SetMyShake(obj, 10, 100);
|
||
|
|
else if(frameIndex == 6){
|
||
|
|
obj.getVar("rapid_step_enable").setBool(0, true);
|
||
|
|
obj.getVar("EnableHermitTripleStep").setBool(0, true);
|
||
|
|
}
|
||
|
|
else if(frameIndex == 9){
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_NEARBLOW);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_NEARBLOW, 2, skill_level);
|
||
|
|
local range = sq_GetIntData(obj, SKILL_VAGABOND_NEARBLOW, 0);
|
||
|
|
local size = obj.getVar("nearblow_target").get_obj_vector_size();
|
||
|
|
for(local i = 0; i < size; i++){
|
||
|
|
local targetObj = obj.getVar("nearblow_target").get_obj_vector(i);
|
||
|
|
if(targetObj){
|
||
|
|
CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/3_vagabond/nearblow/ap_nearblow.nut");
|
||
|
|
cearteSkillPassiveObj_AtSwordMan_bykk(obj,targetObj,PASSIVEOBJECT_BYKK_VAGABOND,0,0,0,obj.getDirection(),3,SKILL_VAGABOND_NEARBLOW,1,totalDamage,range,0,0,0,0,0,0,1);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else{
|
||
|
|
if(frameIndex == 2){
|
||
|
|
sq_SetMyShake(obj, 15, 100);
|
||
|
|
obj.getVar("rapid_step_enable").setBool(0, true);
|
||
|
|
obj.getVar("EnableHermitTripleStep").setBool(0, true);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndState_Nearblow_bykk(obj, newState)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
if(newState != SKILL_VAGABOND_NEARBLOW){
|
||
|
|
local size = obj.getVar("nearblow_target").get_obj_vector_size();
|
||
|
|
if(size > 0 && obj.getVar("nearblow").getBool(0) == false){
|
||
|
|
for(local i = 0; i < size; i++){
|
||
|
|
local targetObj = obj.getVar("nearblow_target").get_obj_vector(i);
|
||
|
|
if(targetObj){
|
||
|
|
CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/3_vagabond/nearblow/ap_nearblow.nut");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false);
|
||
|
|
if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onKeyFrameFlag_Nearblow_bykk(obj, flagIndex)
|
||
|
|
{
|
||
|
|
if (!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 2:
|
||
|
|
switch(flagIndex){
|
||
|
|
case 1:
|
||
|
|
if(obj.getVar("nearblow").getBool(0)){
|
||
|
|
local size = obj.getVar("nearblow_target").get_obj_vector_size();
|
||
|
|
if(size > 0){
|
||
|
|
for(local i = 0; i < size; i++){
|
||
|
|
local targetObj = obj.getVar("nearblow_target").get_obj_vector(i);
|
||
|
|
if(targetObj){
|
||
|
|
sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onProcCon_Nearblow_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
case 1:
|
||
|
|
if(obj.getVar("nearblow").getBool(0) == false){
|
||
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT) obj.getVar("nearblow").setBool(0, true);
|
||
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT) obj.getVar("nearblow").setBool(0, true);
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
|
|
||
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
function checkExecutableSkill_Overblowslash_bykk(obj)
|
||
|
|
{
|
||
|
|
if (!obj) return 0;
|
||
|
|
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_OVERBLOWSLASH);
|
||
|
|
if (isUse){
|
||
|
|
obj.sq_StopMove();
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
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) || sq_GetIntData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 5) > 0){
|
||
|
|
obj.getVar("overblowslash_move").setInt(10, sq_GetXPos(obj));
|
||
|
|
if(sq_GetIntData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 5) > 0) obj.getVar("overblowslash_move").setInt(11, sq_GetIntData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 2) / 2);
|
||
|
|
else obj.getVar("overblowslash_move").setInt(11, sq_GetIntData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 2));
|
||
|
|
obj.sq_IntVectPush(1);
|
||
|
|
}
|
||
|
|
else obj.sq_IntVectPush(0);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_OVERBLOWSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
return 1;
|
||
|
|
}
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onSetState_Overblowslash_bykk(obj, state, datas, isResetTimer)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
||
|
|
obj.setSkillSubState(subState);
|
||
|
|
obj.sq_StopMove();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_OVERBLOWSLASHREADY);
|
||
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
|
|
obj.sq_PlaySound("OVERBLOW_SLASH_DASH");
|
||
|
|
obj.sq_PlaySound("SW_OVERBLOW_SLASH");
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_OVERBLOWSLASHDASH);
|
||
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atoverblowslash/overblowslashdash_smoke.ani", 0, 0, 0);
|
||
|
|
obj.sq_PlaySound("OVERBLOW_SLASH_DASH");
|
||
|
|
obj.sq_PlaySound("SW_OVERBLOW_SLASH");
|
||
|
|
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_OVERBLOWSLASH);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 1, skill_level);
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 159));
|
||
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_OVERBLOWSLASHSTART_BODY);
|
||
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
|
|
obj.sq_PlaySound("OVERBLOW_SLASH_01");
|
||
|
|
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_OVERBLOWSLASH);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 1, skill_level);
|
||
|
|
local hitMax = sq_GetLevelData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 0, skill_level);
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 161));
|
||
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||
|
|
local currentAni = obj.getCurrentAnimation();
|
||
|
|
local delaySum = currentAni.getDelaySum(0,16);
|
||
|
|
obj.setTimeEvent(1, delaySum / (hitMax + 1), hitMax, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onTimeEvent_Overblowslash_bykk(obj, timeEventIndex, timeEventCount)
|
||
|
|
{
|
||
|
|
if(!obj) return false;
|
||
|
|
switch(timeEventIndex){
|
||
|
|
case 1: obj.resetHitObjectList(); break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndCurrentAni_Overblowslash_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
case 1:
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(2);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_OVERBLOWSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onAttack_Overblowslash_bykk(obj, damager, boundingBox, isStuck)
|
||
|
|
{
|
||
|
|
if(!obj || isStuck) return false;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEnterFrame_Overblowslash_bykk(obj, frameIndex)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 2:
|
||
|
|
if(frameIndex == 1){
|
||
|
|
|
||
|
|
}
|
||
|
|
else if(frameIndex == 22){
|
||
|
|
}
|
||
|
|
else if(frameIndex == 23){
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndState_Overblowslash_bykk(obj, newState)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
if(newState != SKILL_VAGABOND_OVERBLOWSLASH){
|
||
|
|
if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false);
|
||
|
|
if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false);
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
function onKeyFrameFlag_Overblowslash_bykk(obj, flagIndex)
|
||
|
|
{
|
||
|
|
if (!obj) return true;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
if(subState != 2) return true;
|
||
|
|
switch(flagIndex){
|
||
|
|
case 1111:
|
||
|
|
sq_SetMyShake(obj, 2, 650);
|
||
|
|
local currentAni = obj.getCurrentAnimation();
|
||
|
|
local delaySum = currentAni.getDelaySum(1,1);
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_OVERBLOWSLASH);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 4, skill_level);
|
||
|
|
local hitMax = sq_GetLevelData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 3, skill_level);
|
||
|
|
local totalDamage2 = sq_GetLevelData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 5, skill_level);
|
||
|
|
local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 4);
|
||
|
|
local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger();
|
||
|
|
if(sq_GetIntData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 9) > 0 || OVERBLOWSLASH_STONE > 0){
|
||
|
|
hitMax = (hitMax.tofloat() * (1 + 0.8 + 0.67)).tointeger();
|
||
|
|
sizeRate = (sizeRate.tofloat() * 1.25).tointeger();
|
||
|
|
totalDamage = (totalDamage.tofloat() * 1.07).tointeger();
|
||
|
|
}
|
||
|
|
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_VAGABOND,0,0,0,obj.getDirection(),3,SKILL_VAGABOND_OVERBLOWSLASH,1,totalDamage,hitMax,sizeRate,damageRate,delaySum,0,0,0,1);
|
||
|
|
break;
|
||
|
|
case 1112:
|
||
|
|
obj.resetHitObjectList();
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_OVERBLOWSLASH);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_OVERBLOWSLASH, 2, skill_level);
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 160));
|
||
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||
|
|
|
||
|
|
sq_SetMyShake(obj,9,300);
|
||
|
|
sq_flashScreen(obj, 200, 50, 0, 153,sq_RGB(255, 255, 255), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
break;
|
||
|
|
case 1113:
|
||
|
|
obj.getVar("rapid_step_enable").setBool(0, true);
|
||
|
|
obj.getVar("EnableHermitTripleStep").setBool(0, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onProcCon_Overblowslash_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 1:
|
||
|
|
local pAni = obj.getCurrentAnimation();
|
||
|
|
local currentT = sq_GetCurrentTime(pAni);
|
||
|
|
local fireT = pAni.getDelaySum(false);
|
||
|
|
local srcX = obj.getVar("overblowslash_move").getInt(10);
|
||
|
|
local MoveX = obj.getVar("overblowslash_move").getInt(11);
|
||
|
|
local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT);
|
||
|
|
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);
|
||
|
|
if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);
|
||
|
|
else{
|
||
|
|
obj.getVar("overblowslash_move").setInt(10, sq_GetXPos(obj));
|
||
|
|
obj.getVar("overblowslash_move").setInt(11, 0);
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
|
||
|
|
if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
|
|
||
|
|
function checkExecutableSkill_Rapidstep_bykk(obj)//一花渡江
|
||
|
|
{
|
||
|
|
if (!obj) return 0;
|
||
|
|
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_RAPIDSTEP);
|
||
|
|
if (isUse){
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(0);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_RAPIDSTEP, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
return 1;
|
||
|
|
}
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onSetState_Rapidstep_bykk(obj, state, datas, isResetTimer)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
||
|
|
obj.setSkillSubState(subState);
|
||
|
|
obj.sq_StopMove();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_RAPIDSTEP_BODY);
|
||
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
|
|
obj.sq_PlaySound("RAPID_STEP");
|
||
|
|
obj.sq_PlaySound("SW_GUARD");
|
||
|
|
|
||
|
|
local currentAni = obj.getCurrentAnimation();
|
||
|
|
local delaySum = currentAni.getDelaySum(false);
|
||
|
|
obj.setTimeEvent(1,delaySum / 10, 9, false);
|
||
|
|
|
||
|
|
local moveX = sq_GetIntData(obj, SKILL_VAGABOND_RAPIDSTEP, 0);
|
||
|
|
obj.getVar("rapidstep_move").clear_vector();
|
||
|
|
obj.getVar("rapidstep_move").push_vector(sq_GetXPos(obj));
|
||
|
|
obj.getVar("rapidstep_move").push_vector(sq_GetZPos(obj));
|
||
|
|
obj.getVar("rapidstep_move").push_vector(moveX);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onTimeEvent_Rapidstep_bykk(obj, timeEventIndex, timeEventCount)
|
||
|
|
{
|
||
|
|
switch(timeEventIndex){
|
||
|
|
case 1:
|
||
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_VAGABOND_RAPIDSTEP, SKILL_VAGABOND_RAPIDSTEP, 0, 1.0) + 100;
|
||
|
|
local balance = [100,210,140,230,120,195,110,120,100];
|
||
|
|
local offsetZ = [50,-40,80,-30,90,-20,70,30,0];
|
||
|
|
local sizeRate = sq_GetIntData(obj, SKILL_VAGABOND_RAPIDSTEP, 1) * balance[timeEventCount - 1] / 100;
|
||
|
|
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 0, 0, offsetZ[timeEventCount - 1] - sq_GetZPos(obj), obj.getDirection(), 3, SKILL_VAGABOND_RAPIDSTEP, 1, totalDamage, sizeRate, timeEventIndex, 0, 0, 0, 0, 0, 1);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndCurrentAni_Rapidstep_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEnterFrame_Rapidstep_bykk(obj, frameIndex)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
switch(frameIndex){
|
||
|
|
case 0:
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atrapidstep/enddust_00.ani", 0, 1, 0);
|
||
|
|
break;
|
||
|
|
case 6:
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atrapidstep/startdust_00.ani", 0, 1, 0);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndState_Rapidstep_bykk(obj, newState)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onProcCon_Rapidstep_bykk(obj)
|
||
|
|
{
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
local pAni = obj.getCurrentAnimation();
|
||
|
|
local currentT = sq_GetCurrentTime(pAni);
|
||
|
|
local fireT = pAni.getDelaySum(false);
|
||
|
|
local srcX = obj.getVar("rapidstep_move").get_vector(0);
|
||
|
|
local srcZ = obj.getVar("rapidstep_move").get_vector(1);
|
||
|
|
local MoveX = obj.getVar("rapidstep_move").get_vector(2);
|
||
|
|
local vx = sq_GetUniformVelocity(0, MoveX, currentT, fireT);
|
||
|
|
local vz = sq_GetAccel(srcZ, 30, currentT, fireT / 2, true);
|
||
|
|
if(currentT > fireT / 2) vz = sq_GetAccel(30, 0, currentT - fireT / 2, fireT / 2, false);
|
||
|
|
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), vx);
|
||
|
|
if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);
|
||
|
|
else{
|
||
|
|
obj.getVar("rapidstep_move").set_vector(0, sq_GetXPos(obj));
|
||
|
|
obj.getVar("rapidstep_move").set_vector(2, 0);
|
||
|
|
}
|
||
|
|
sq_setCurrentAxisPos(obj, 2, vz);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onKeyFrameFlag_Rapidstep_bykk(obj, flagIndex)
|
||
|
|
{
|
||
|
|
if (!obj) return;
|
||
|
|
switch(flagIndex){
|
||
|
|
case 0:
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
|
|
||
|
|
|
||
|
|
function checkExecutableSkill_Revolvingsword_bykk(obj)
|
||
|
|
{
|
||
|
|
if (!obj) return 0;
|
||
|
|
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_REVOLVINGSWORD);
|
||
|
|
if (isUse){
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(0);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_REVOLVINGSWORD, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
return 1;
|
||
|
|
}
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onSetState_Revolvingsword_bykk(obj, state, datas, isResetTimer)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
||
|
|
obj.setSkillSubState(subState);
|
||
|
|
obj.sq_StopMove();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_REVOLVINGSWORDREADY);
|
||
|
|
obj.sq_PlaySound("SW_REVOLVING_SWORD");
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_REVOLVINGSWORDSPIN);
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 0, skill_level);
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 150));
|
||
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||
|
|
local hitMax = sq_GetIntData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 0);
|
||
|
|
if(true) hitMax = hitMax + sq_GetIntData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 3);
|
||
|
|
obj.getVar("revolvingsword").setInt(10, hitMax);
|
||
|
|
obj.getVar("revolvingsword").setInt(11, 0);
|
||
|
|
local hitTime = sq_GetIntData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 1);
|
||
|
|
obj.setTimeEvent(1, hitTime, 1, true);
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
obj.removeAllTimeEvent();
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_REVOLVINGSWORDFINISH);
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 1, skill_level);
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 149));
|
||
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndCurrentAni_Revolvingsword_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(1);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_REVOLVINGSWORD, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onTimeEvent_Revolvingsword_bykk(obj, timeEventIndex, timeEventCount)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
switch(timeEventIndex){
|
||
|
|
case 0:
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
if(obj.getVar("revolvingsword").getInt(11) >= obj.getVar("revolvingsword").getInt(10)){
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(2);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_REVOLVINGSWORD, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
}
|
||
|
|
else{
|
||
|
|
local inputConut = obj.getRapidInputFrequency();
|
||
|
|
inputConut = inputConut.tointeger();
|
||
|
|
|
||
|
|
local inputMax = 2;
|
||
|
|
local gapByInputMin = sq_GetIntData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 1) / 16;
|
||
|
|
local gapByInputMax = sq_GetIntData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 1) / 8;
|
||
|
|
|
||
|
|
obj.getVar("revolvingsword").setInt(11, obj.getVar("revolvingsword").getInt(11) + 1);
|
||
|
|
|
||
|
|
if(inputConut >= inputMax){
|
||
|
|
obj.setTimeEvent(1, gapByInputMin, 1,false);
|
||
|
|
obj.resetHitObjectList();
|
||
|
|
local currentAni = obj.getCurrentAnimation();
|
||
|
|
currentAni.setSpeedRate(333.3);
|
||
|
|
}
|
||
|
|
else{
|
||
|
|
obj.setTimeEvent(1, gapByInputMax, 1,false);
|
||
|
|
obj.resetHitObjectList();
|
||
|
|
local currentAni = obj.getCurrentAnimation();
|
||
|
|
currentAni.setSpeedRate(100.0);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEnterFrame_Revolvingsword_bykk(obj, frameIndex)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
if(subState == 2 && frameIndex == 5){
|
||
|
|
obj.getVar("rapid_step_enable").setBool(0, true);
|
||
|
|
obj.getVar("EnableHermitTripleStep").setBool(0, true);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndState_Revolvingsword_bykk(obj, newState)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
if(newState != SKILL_VAGABOND_REVOLVINGSWORD){
|
||
|
|
if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false);
|
||
|
|
if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onKeyFrameFlag_Revolvingsword_bykk(obj, flagIndex)
|
||
|
|
{
|
||
|
|
if (!obj) return;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onProcCon_Revolvingsword_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 1:
|
||
|
|
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
|
||
|
|
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput();
|
||
|
|
|
||
|
|
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
|
||
|
|
if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(2);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_REVOLVINGSWORD, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
|
|
||
|
|
function checkExecutableSkill_Soarcut_bykk(obj)
|
||
|
|
{
|
||
|
|
if (!obj) return 0;
|
||
|
|
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_SOARCUT);
|
||
|
|
if (isUse){
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(0);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_SOARCUT, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
return 1;
|
||
|
|
}
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onSetState_Soarcut_bykk(obj, state, datas, isResetTimer)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
||
|
|
obj.setSkillSubState(subState);
|
||
|
|
obj.sq_StopMove();
|
||
|
|
obj.sq_ZStop();
|
||
|
|
local count = sq_GetIntData(obj,213, 5);
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
obj.getVar("soarcut_target").clear_obj_vector();
|
||
|
|
|
||
|
|
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUTEX) > 0) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTUPPERSLASH_MAGIC);
|
||
|
|
else obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTUPPERSLASH);
|
||
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcuta_leaf_00.ani", 0, 1, 0);
|
||
|
|
|
||
|
|
local offsetX = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 150);
|
||
|
|
if(obj.isMovablePos(offsetX, sq_GetYPos(obj))) obj.getVar("soarcut").setInt(10, 150);
|
||
|
|
else obj.getVar("soarcut").setInt(10, 0);
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUT);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_SOARCUT, 0, skill_level);
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 156));
|
||
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTJUMP);
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUTEX) > 0) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTAERIALSLASHEX);
|
||
|
|
else obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTAERIALSLASH);
|
||
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
|
|
|
||
|
|
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUTEX) > 0) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcutb_leaf_b.ani", 0, 1, 0);
|
||
|
|
else sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcutd_leaf_b.ani", 0, 1, 0);
|
||
|
|
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUT);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_SOARCUT, 1, skill_level);
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 154));
|
||
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||
|
|
break;
|
||
|
|
case 3:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTFALLINGEX);
|
||
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
|
|
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUT);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_SOARCUT, 2, skill_level);
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 154));
|
||
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||
|
|
local hitMax = sq_GetIntData(obj, SKILL_VAGABOND_SOARCUT, 5);
|
||
|
|
local currentAni = obj.getCurrentAnimation();
|
||
|
|
local speedRate = 6000 / currentAni.getDelaySum(0, 0);
|
||
|
|
currentAni.setSpeedRate(speedRate.tofloat() * 2.5);
|
||
|
|
local delaySum = currentAni.getDelaySum(false);
|
||
|
|
obj.setTimeEvent(0, delaySum / (hitMax + 1), hitMax, true);
|
||
|
|
|
||
|
|
local size = obj.getVar("soarcut_target").get_obj_vector_size();
|
||
|
|
if(size > 0){
|
||
|
|
for(local i = 0; i < size; i++){
|
||
|
|
local targetObj = obj.getVar("soarcut_target").get_obj_vector(i);
|
||
|
|
if(targetObj){
|
||
|
|
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/atswordman/3_vagabond/soarcut/ap_soarcut.nut");
|
||
|
|
sq_MoveToAppendageForce(targetObj, obj, targetObj, 0, 0, -sq_GetZPos(targetObj), delaySum, true, addAppendage);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 4:
|
||
|
|
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUTEX) > 0) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTFINISHEFFECTEX);
|
||
|
|
else obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_SOARCUTFINISHEFFECT);
|
||
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
|
|
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUT);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_SOARCUT, 3, skill_level);
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 155));
|
||
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndCurrentAni_Soarcut_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
if(obj.getVar("soarcut_target").get_obj_vector_size() < 1){
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
}
|
||
|
|
else{
|
||
|
|
obj.getVar("soarcut_move").setInt(10, sq_GetXPos(obj));
|
||
|
|
obj.getVar("soarcut_move").setInt(11, sq_GetZPos(obj));
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(1);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_SOARCUT, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
case 2:
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(subState + 1);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_SOARCUT, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
case 4:
|
||
|
|
local size = obj.getVar("soarcut_target").get_obj_vector_size();
|
||
|
|
if(size > 0){
|
||
|
|
for(local i = 0; i < size; i++){
|
||
|
|
local targetObj = obj.getVar("soarcut_target").get_obj_vector(i);
|
||
|
|
if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/3_vagabond/soarcut/ap_soarcut.nut");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onAttack_Soarcut_bykk(obj, damager, boundingBox, isStuck)
|
||
|
|
{
|
||
|
|
if(!obj || isStuck) return false;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
|
||
|
|
if(sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager) && !sq_IsFixture(damager)){
|
||
|
|
obj.getVar("soarcut_target").push_obj_vector(damager);
|
||
|
|
local path = "character/atswordman/3_vagabond/soarcut/ap_soarcut.nut";
|
||
|
|
local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, path, true);
|
||
|
|
sq_MoveToAppendageForce(damager, obj, obj, obj.getVar("soarcut").getInt(10), 0, 200, 160, true, addAppendage);
|
||
|
|
sq_HoldAndDelayDie(damager, obj, true, true, true, 0, 200, ENUM_DIRECTION_NEUTRAL , addAppendage);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 4:
|
||
|
|
if(damager.isObjectType(OBJECTTYPE_ACTIVE) && CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/atswordman/3_vagabond/soarcut/ap_soarcut.nut")){
|
||
|
|
CNSquirrelAppendage.sq_RemoveAppendage(damager, "character/atswordman/3_vagabond/soarcut/ap_soarcut.nut");
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
function onTimeEvent_Soarcut_bykk(obj, timeEventIndex, timeEventCount)
|
||
|
|
{
|
||
|
|
if (!obj) return false;
|
||
|
|
switch(timeEventIndex){
|
||
|
|
case 0:
|
||
|
|
obj.resetHitObjectList();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEnterFrame_Soarcut_bykk(obj, frameIndex)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 3:
|
||
|
|
switch(frameIndex){
|
||
|
|
case 0:
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcutd_leaf_b.ani", 0, 1, 0);
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcute_atkeff_00.ani", 0, 1, 0);
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcute_atkeff_04.ani", 0, 1, 0);
|
||
|
|
break;
|
||
|
|
case 4:
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcute_atkeff_00.ani", 0, 1, 0);
|
||
|
|
break;
|
||
|
|
case 6:
|
||
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atsoarcut/soarcute_atkeff_04.ani", 0, 1, 0);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 4:
|
||
|
|
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_SOARCUTEX) > 0){
|
||
|
|
if(frameIndex == 2){
|
||
|
|
obj.getVar("rapid_step_enable").setBool(0, true);
|
||
|
|
obj.getVar("EnableHermitTripleStep").setBool(0, true);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndState_Soarcut_bykk(obj, newState)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
if(newState != SKILL_VAGABOND_SOARCUT){
|
||
|
|
local size = obj.getVar("soarcut_target").get_obj_vector_size();
|
||
|
|
if(size > 0){
|
||
|
|
for(local i = 0; i < size; i++){
|
||
|
|
local targetObj = obj.getVar("soarcut_target").get_obj_vector(i);
|
||
|
|
if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/3_vagabond/soarcut/ap_soarcut.nut");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false);
|
||
|
|
if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onProcCon_Soarcut_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 1:
|
||
|
|
local ststeTime = obj.sq_GetStateTimer();
|
||
|
|
local currentAni = obj.getCurrentAnimation();
|
||
|
|
local delaySum = currentAni.getDelaySum(0,1);
|
||
|
|
if(ststeTime > delaySum) break;
|
||
|
|
local baseX = obj.getVar("soarcut_move").getInt(10);
|
||
|
|
local baseZ = obj.getVar("soarcut_move").getInt(11);
|
||
|
|
local vx = sq_GetUniformVelocity(0, obj.getVar("soarcut").getInt(10), ststeTime, delaySum);
|
||
|
|
local vz = sq_GetAccel(0, 200, ststeTime, delaySum, false);
|
||
|
|
sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(baseX, obj.getDirection(), vx));
|
||
|
|
sq_setCurrentAxisPos(obj, 2, vz);
|
||
|
|
break;
|
||
|
|
case 3:
|
||
|
|
local ststeTime = obj.sq_GetStateTimer();
|
||
|
|
local currentAni = obj.getCurrentAnimation();
|
||
|
|
local delaySum = currentAni.getDelaySum(false);
|
||
|
|
local vz = sq_GetAccel(200, 0, ststeTime, delaySum, false);
|
||
|
|
sq_setCurrentAxisPos(obj, 2, vz);
|
||
|
|
if(sq_GetZPos(obj) <= 0){
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(4);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_SOARCUT, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onKeyFrameFlag_Soarcut_bykk(obj, flagIndex)
|
||
|
|
{
|
||
|
|
if (!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 2:
|
||
|
|
switch(flagIndex){
|
||
|
|
case 1:
|
||
|
|
local size = obj.getVar("soarcut_target").get_obj_vector_size();
|
||
|
|
if(size > 0){
|
||
|
|
for(local i = 0; i < size; i++){
|
||
|
|
local targetObj = obj.getVar("soarcut_target").get_obj_vector(i);
|
||
|
|
if(targetObj) sq_SendHitObjectPacket(obj,targetObj,0,0,sq_GetObjectHeight(targetObj) / 2);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
|
|
||
|
|
|
||
|
|
function checkExecutableSkill_Threeside_bykk(obj)
|
||
|
|
{
|
||
|
|
if (!obj) return 0;
|
||
|
|
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_THREESIDE);
|
||
|
|
if (isUse){
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(0);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_THREESIDE, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
return 1;
|
||
|
|
}
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onSetState_Threeside_bykk(obj, state, datas, isResetTimer)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
||
|
|
obj.setSkillSubState(subState);
|
||
|
|
obj.sq_StopMove();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
obj.getVar("Threeside").setBool(0,false);
|
||
|
|
obj.sq_PlaySound("SW_THREE_SIDE");
|
||
|
|
|
||
|
|
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIPEX) > 0) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_THREESIDEEX);
|
||
|
|
else obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_THREESIDE);
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 3, skill_level);
|
||
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 151));
|
||
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIPEX) > 0) obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_AFTER_THREESIDEEX);
|
||
|
|
else obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_AFTER_THREESIDE);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndCurrentAni_Threeside_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
if(obj.getVar("Threeside").getBool(0)){
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(1);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_THREESIDE, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
}
|
||
|
|
else obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onAttack_Threeside_bykk(obj, damager, boundingBox, isStuck)
|
||
|
|
{
|
||
|
|
if(!obj || isStuck) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEnterFrame_Threeside_bykk(obj, frameIndex)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIPEX) < 1 && frameIndex == 6 && obj.getVar("Threeside").getBool(0)){
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(1);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_THREESIDE, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
}
|
||
|
|
switch(frameIndex){
|
||
|
|
case 3:
|
||
|
|
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIPEX) > 0) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atthreeside/threeside_ex_threeside_12.ani", 0, 3, 0);
|
||
|
|
break;
|
||
|
|
case 5:
|
||
|
|
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIPEX) > 0) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atthreeside/threeside_ex_threeside_11.ani", 0, 4, 0);
|
||
|
|
case 6:
|
||
|
|
obj.resetHitObjectList();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndState_Threeside_bykk(obj, newState)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onKeyFrameFlag_Threeside_bykk(obj, flagIndex)
|
||
|
|
{
|
||
|
|
if (!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 1:
|
||
|
|
if(flagIndex == 3){
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIP, 4, skill_level);
|
||
|
|
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_VAGABONDSWORDMANSHIPEX) > 0) cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_VAGABOND,0,0,0,obj.getDirection(),3,SKILL_VAGABOND_THREESIDE,2,totalDamage,0,0,0,0,0,0,0,1);
|
||
|
|
else cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_VAGABOND,0,0,0,obj.getDirection(),3,SKILL_VAGABOND_THREESIDE,1,totalDamage,0,0,0,0,0,0,0,1);
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onProcCon_Threeside_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
if(obj.getVar("Threeside").getBool(0) == false){
|
||
|
|
local curAni = sq_GetCurrentAnimation(obj);
|
||
|
|
local curframe = obj.sq_GetCurrentFrameIndex(curAni);
|
||
|
|
obj.setSkillCommandEnable(SKILL_VAGABOND_THREESIDE, true);
|
||
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_VAGABOND_THREESIDE);
|
||
|
|
if(b_useskill != -1 && curframe > 1) obj.getVar("Threeside").setBool(0,true);
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
function checkExecutableSkill_Zweivoltageex_bykk(obj)
|
||
|
|
{
|
||
|
|
if (!obj) return 0;
|
||
|
|
if(obj.getVar("zwei").get_obj_vector_size() > 0 && (sq_GetIntData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 5) > 0 || ZWEIVOLTAGE_STONE > 0)){
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(3);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_ZWEIVOLTAGEEX, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
local isUse = obj.sq_IsUseSkill(SKILL_VAGABOND_ZWEIVOLTAGEEX);
|
||
|
|
if (isUse){
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(0);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_ZWEIVOLTAGEEX, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
return 1;
|
||
|
|
}
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onSetState_Zweivoltageex_bykk(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(ANIMATION_VAGABOND_ZWEIVOLTAGEHORIZONSLASH);
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_ZWEIVOLTAGEVERTICALCAST);
|
||
|
|
local currentAni = sq_GetCurrentAnimation(obj);
|
||
|
|
local delaySum = currentAni.getDelaySum(0,0);
|
||
|
|
local size = obj.getVar("zwei_tar").get_obj_vector_size();
|
||
|
|
if(size > 0){
|
||
|
|
for(local i = 0; i < size; i++){
|
||
|
|
local targetObj = obj.getVar("zwei_tar").get_obj_vector(i);
|
||
|
|
if(targetObj){
|
||
|
|
local activeObj = sq_GetCNRDObjectToActiveObject(targetObj);
|
||
|
|
local masterAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, "character/atswordman/3_vagabond/zweivoltageex/ap_zweivoltageex.nut");
|
||
|
|
if(!sq_IsFixture(activeObj)) sq_MoveToAppendageForce(activeObj, obj, obj, 100, 0, 200, delaySum, true, masterAppendage);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_ZWEIVOLTAGEVERTICAL);
|
||
|
|
local currentAni = sq_GetCurrentAnimation(obj);
|
||
|
|
local delaySum = currentAni.getDelaySum(0,0);
|
||
|
|
local size = obj.getVar("zwei_tar").get_obj_vector_size();
|
||
|
|
if(size > 0){
|
||
|
|
for(local i = 0; i < size; i++){
|
||
|
|
local targetObj = obj.getVar("zwei_tar").get_obj_vector(i);
|
||
|
|
if(targetObj){
|
||
|
|
local activeObj = sq_GetCNRDObjectToActiveObject(targetObj);
|
||
|
|
local masterAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, "character/atswordman/3_vagabond/zweivoltageex/ap_zweivoltageex.nut");
|
||
|
|
if(!sq_IsFixture(activeObj)) sq_MoveToAppendageForce(activeObj, obj, activeObj, 0, 0, -sq_GetZPos(activeObj), delaySum, true, masterAppendage);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 3:
|
||
|
|
obj.sq_SetCurrentAnimation(ANIMATION_VAGABOND_ZWEIVOLTAGEEXPLOSION);
|
||
|
|
local attackObj = obj.getVar("zwei").get_obj_vector(0);
|
||
|
|
if(attackObj){
|
||
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(attackObj);
|
||
|
|
colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, 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_Zweivoltageex_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
case 1:
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_IntVectPush(subState + 1);
|
||
|
|
obj.sq_AddSetStatePacket(SKILL_VAGABOND_ZWEIVOLTAGEEX, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
case 3:
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEnterFrame_Zweivoltageex_bykk(obj, frameIndex)
|
||
|
|
{
|
||
|
|
if(!obj || !obj.isMyControlObject()) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
switch(subState){
|
||
|
|
case 0:
|
||
|
|
switch(frameIndex){
|
||
|
|
case 1: obj.sq_PlaySound("SW_CROSS_SWORD"); break;
|
||
|
|
case 3: obj.sq_PlaySound("CROSS_SWORD_READY"); break;
|
||
|
|
case 13:
|
||
|
|
obj.sq_PlaySound("CROSS_SWORD_01");
|
||
|
|
sq_SetMyShake(obj, 5, 50);
|
||
|
|
sq_flashScreen(obj, 50, 100, 50, 204, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
//`create zwei voltage horizon` 119 -1 62
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 0, skill_level);
|
||
|
|
local totalDamage2 = sq_GetLevelData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 2, skill_level);
|
||
|
|
local lifeTime = sq_GetIntData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 1);
|
||
|
|
local isStone = 0;
|
||
|
|
if(sq_GetIntData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 5) > 0 || ZWEIVOLTAGE_STONE > 0){
|
||
|
|
isStone = 1;
|
||
|
|
totalDamage = totalDamage * 2;
|
||
|
|
totalDamage2 = (totalDamage2.tofloat() * 1.88).tointeger();
|
||
|
|
lifeTime = lifeTime + 1500;
|
||
|
|
}
|
||
|
|
local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger();
|
||
|
|
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 119, -1, 62, obj.getDirection(), 3, SKILL_VAGABOND_ZWEIVOLTAGEEX, 2, totalDamage, lifeTime, damageRate, isStone, 0, 0, 0, 0, 1);
|
||
|
|
break;
|
||
|
|
case 25:
|
||
|
|
if(sq_GetIntData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 5) > 0 || ZWEIVOLTAGE_STONE > 0){
|
||
|
|
obj.sq_IntVectClear();
|
||
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
switch(frameIndex){
|
||
|
|
case 1: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atzweivoltage/zweivoltage_partb_eff_a.ani", 0, 1, 0); break;
|
||
|
|
case 3: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atzweivoltage/zweivoltage_partb_eff_b.ani", 0, 1, 0); break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
switch(frameIndex){
|
||
|
|
case 1:
|
||
|
|
obj.sq_PlaySound("CROSS_SWORD_02");
|
||
|
|
sq_SetMyShake(obj, 10, 100);
|
||
|
|
sq_flashScreen(obj, 50, 100, 50, 204, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
||
|
|
//`create zwei voltage vertical` 100 -1 69
|
||
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX);
|
||
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 0, skill_level);
|
||
|
|
local totalDamage2 = sq_GetLevelData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 2, skill_level);
|
||
|
|
local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger();
|
||
|
|
local lifeTime = sq_GetIntData(obj, SKILL_VAGABOND_ZWEIVOLTAGEEX, 1);
|
||
|
|
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_VAGABOND, 100, -1, 69, obj.getDirection(), 3, SKILL_VAGABOND_ZWEIVOLTAGEEX, 1, totalDamage, lifeTime, damageRate,0,0,0,0,0,1);
|
||
|
|
obj.getVar("rapid_step_enable").setBool(0, true);
|
||
|
|
obj.getVar("EnableHermitTripleStep").setBool(0, true);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onAttack_Zweivoltageex_bykk(obj, damager, boundingBox, isStuck)
|
||
|
|
{
|
||
|
|
if(!obj || isStuck) return;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onEndState_Zweivoltageex_bykk(obj, newState)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
if(newState != SKILL_VAGABOND_ZWEIVOLTAGEEX){
|
||
|
|
if(obj.getVar("rapid_step_enable").getBool(0)) obj.getVar("rapid_step_enable").setBool(0, false);
|
||
|
|
if(obj.getVar("EnableHermitTripleStep").getBool(0)) obj.getVar("EnableHermitTripleStep").setBool(0, false);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function onKeyFrameFlag_Zweivoltageex_bykk(obj, flagIndex)
|
||
|
|
{
|
||
|
|
if (!obj) return;
|
||
|
|
}
|
||
|
|
|
||
|
|
function onProcCon_Zweivoltageex_bykk(obj)
|
||
|
|
{
|
||
|
|
if(!obj) return;
|
||
|
|
local subState = obj.getSkillSubState();
|
||
|
|
local currentAni = sq_GetCurrentAnimation(obj);
|
||
|
|
local currentT = sq_GetCurrentTime(currentAni);
|
||
|
|
local delaySum = currentAni.getDelaySum(0,0);
|
||
|
|
switch(subState){
|
||
|
|
case 1:
|
||
|
|
local vz = sq_GetAccel(0, 200, currentT, delaySum, true);
|
||
|
|
sq_setCurrentAxisPos(obj, 2, vz);
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
local vz = sq_GetAccel(200, 0, currentT, delaySum, false);
|
||
|
|
if(currentT > delaySum) vz = 0;
|
||
|
|
sq_setCurrentAxisPos(obj, 2, vz);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|