Rindro-Sqr/user/114.66.45.221/3_atswordman_1.c

2762 lines
109 KiB
C

//
function cearteSkillPassiveObj_AtSwordMan_bykk(obj,passiveObj,objnum,x,y,z,direction,job,skillIndex,subtype,pushv1,pushv2,pushv3,pushv4,pushv5,pushv6,pushv7,pushv8,bonusnum)
{
if(!obj || !passiveObj) return;
if(pushv1 == null) pushv1 = 0;
if(pushv2 == null) pushv2 = 0;
if(pushv3 == null) pushv3 = 0;
if(pushv4 == null) pushv4 = 0;
if(pushv5 == null) pushv5 = 0;
if(pushv6 == null) pushv6 = 0;
if(pushv7 == null) pushv7 = 0;
if(pushv8 == null) pushv8 = 0;
if(bonusnum > 0 && obj.isObjectType(OBJECTTYPE_CHARACTER)){
local bonusRate = 1.0;
if(job == 4){
if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS) > 0){
bonusRate = bonusRate + setpassiveObjbounsRate(obj, skillIndex, 1).tofloat() / 1000.0;
}
if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_INCARNATION) > 0){
bonusRate = bonusRate + setpassiveObjbounsRate(obj, skillIndex, 2).tofloat() / 1000.0;
}
}
else if(job == 2){
if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH) > 0 && skillIndex != SKILL_DEMONSLAYER_DARKSTRIKE && skillIndex != SKILL_DEMONSLAYER_WILDWHIP && skillIndex != SKILL_DEMONSLAYER_CLAWBLADE && skillIndex != SKILL_DEMONSLAYER_BLOODDANCE){
bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH, 9, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH)).tofloat() / 1000.0;
}
if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_QUEENOFMINE) > 0 && skillIndex != SKILL_DEMONSLAYER_CLAWBLADE){
bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_QUEENOFMINE, 0, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_QUEENOFMINE)).tofloat() / 1000.0;
}
}
switch (bonusnum) {
case 1: pushv1 = (pushv1.tofloat() * bonusRate).tointeger(); break;
case 2: pushv2 = (pushv2.tofloat() * bonusRate).tointeger(); break;
case 3: pushv3 = (pushv3.tofloat() * bonusRate).tointeger(); break;
case 4: pushv4 = (pushv4.tofloat() * bonusRate).tointeger(); break;
case 5: pushv5 = (pushv5.tofloat() * bonusRate).tointeger(); break;
case 6: pushv6 = (pushv6.tofloat() * bonusRate).tointeger(); break;
case 7: pushv7 = (pushv7.tofloat() * bonusRate).tointeger(); break;
case 8: pushv8 = (pushv8.tofloat() * bonusRate).tointeger(); break;
}
}
local destX_01 = 0;
local destY_01 = 0;
if(!isSameObject(obj, passiveObj)){
destX_01 = passiveObj.getXPos() - obj.getXPos();
destY_01 = passiveObj.getYPos() - obj.getYPos();
z = z - obj.getZPos();
if(direction == ENUM_DIRECTION_LEFT) destX_01 = obj.getXPos() - passiveObj.getXPos();
}
sq_BinaryStartWrite();
sq_BinaryWriteDword(job);
sq_BinaryWriteDword(skillIndex);
sq_BinaryWriteDword(subtype);
sq_BinaryWriteDword(pushv1);
sq_BinaryWriteDword(pushv2);
sq_BinaryWriteDword(pushv3);
sq_BinaryWriteDword(pushv4);
sq_BinaryWriteDword(pushv5);
sq_BinaryWriteDword(pushv6);
sq_BinaryWriteDword(pushv7);
sq_BinaryWriteDword(pushv8);
sq_SendCreatePassiveObjectPacket(obj, objnum, 0, destX_01 + x, destY_01 + y, z, direction);
}
function setpassiveObjbounsRate(obj, skillIndex, sub)
{
switch(sub){
case 1:
if(skillIndex == SKILL_DARKEMPLER_MADNESS) return 0;
else if(skillIndex == SKILL_DARKEMPLER_SHADOWHARVEST) return 0;
else if(skillIndex == SKILL_DARKEMPLER_BUCKSHOT) return 0;
else{
local bonusRate = sq_GetLevelData(obj, SKILL_DARKEMPLER_VESPERS, 4, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS));
return bonusRate;
}
break;
case 2:
if(skillIndex == SKILL_DARKEMPLER_SHADOWPUPPET) return 0;
else if(skillIndex == SKILL_DARKEMPLER_SHADOWHARVEST) return 0;
else{
local bonusRate = sq_GetLevelData(obj, SKILL_DARKEMPLER_INCARNATION, 0, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_INCARNATION));
return bonusRate;
}
break;
}
}
function createOnlyDrawObject_AtSwordMan_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer)
{
local ani = sq_CreateAnimation("",aniPath);
local pooledObj = sq_CreatePooledObject(ani,isTrue);
sq_SetCurrentDirection(pooledObj, direction);
pooledObj.setCurrentPos(x,y,z);
pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer);
sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false);
return pooledObj;
}
function createOnlyDrawObjectEX_AtSwordMan_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer,sizeRateX,sizeRateY)
{
local ani = sq_CreateAnimation("",aniPath);
local pooledObj = sq_CreatePooledObject(ani,isTrue);
sq_SetCurrentDirection(pooledObj, direction);
pooledObj.setCurrentPos(x,y,z);
local currentAni = pooledObj.getCurrentAnimation();
sizeRateX = sizeRateX.tofloat() / 100.0;
sizeRateY = sizeRateY.tofloat() / 100.0;
currentAni.setImageRateFromOriginal(sizeRateX, sizeRateY);
pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer);
sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false);
return pooledObj;
}
function isFrontObject(obj,object)
{
if((obj.getDirection() == ENUM_DIRECTION_RIGHT && sq_GetXPos(obj) > sq_GetXPos(object)) || (obj.getDirection() == ENUM_DIRECTION_LEFT && sq_GetXPos(obj) < sq_GetXPos(object))) return false;
return true;
}
function darkEmpler_Evolve(obj,increaseCount,decreaseCount)
{
local loadSlot = obj.sq_GetSkillLoad(SKILL_DARKEMPLER_EVOLVE);
if(!loadSlot) return;
if(increaseCount > 0){
local maxCount = obj.sq_GetLevelData(SKILL_DARKEMPLER_EVOLVE, 0, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_EVOLVE));
//if(maxCount >= 99) maxCount = 99;
local soulnum = loadSlot.getRemainLoadNumber();
if(soulnum >= maxCount) return;
if(maxCount - soulnum > increaseCount) loadSlot.increaseLoadCount(increaseCount);
else loadSlot.increaseLoadCount(maxCount - soulnum);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atevolve/absorb.ani", 0, -1, 0);
}
if(decreaseCount > 0){
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/4_darktempler/doomsday/ap_doomsdaybuff.nut")) return;
loadSlot.decreaseLoadCount(decreaseCount);
}
}
function getDamageRate_DarkTempler_bykk(obj)
{
local bonusRate = 1000;
if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_EVOLVE) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj,SKILL_DARKEMPLER_EVOLVE, 1, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_EVOLVE))) / 1000;
print("bonusRate1 = "+bonusRate);
if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_USIR) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj,SKILL_DARKEMPLER_USIR, 3, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_USIR))) / 1000;
print("bonusRate2 = "+bonusRate);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/4_darktempler/congest/ap_congest.nut")) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj,SKILL_DARKEMPLER_CONGEST, 0, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_CONGEST))) / 1000;
print("bonusRate3 = "+bonusRate);
obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger());
}
function getDamageRate_VagaBond_bykk(obj)
{
local bonusRate = 0;
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_THREEFLOWER) > 0) bonusRate += sq_GetLevelData(obj, SKILL_VAGABOND_THREEFLOWER, 0, sq_GetSkillLevel(obj, SKILL_VAGABOND_THREEFLOWER));
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_BUDCLIMB) > 0) bonusRate += sq_GetLevelData(obj, SKILL_VAGABOND_BUDCLIMB, 0, sq_GetSkillLevel(obj, SKILL_VAGABOND_BUDCLIMB));
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_ECSTASY) > 0) bonusRate += sq_GetLevelData(obj, SKILL_VAGABOND_ECSTASY, 6, sq_GetSkillLevel(obj, SKILL_VAGABOND_ECSTASY));
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_GODDESSOFSWORD) > 0) bonusRate += sq_GetLevelData(obj, SKILL_VAGABOND_GODDESSOFSWORD, 0, sq_GetSkillLevel(obj, SKILL_VAGABOND_GODDESSOFSWORD));
return bonusRate;
}
function setSkillDamageRate_VagaBond_bykk(obj)
{
local bonusRate = 1000;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/3_vagabond/fivecircle/ap_fivecircle.nut")) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_VAGABOND_FIVECIRCLE, 4, sq_GetSkillLevel(obj, SKILL_VAGABOND_FIVECIRCLE))) / 1000;
print("bonusRate1 = "+bonusRate);
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_THREEFLOWER) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_VAGABOND_THREEFLOWER, 0, sq_GetSkillLevel(obj, SKILL_VAGABOND_THREEFLOWER))) / 1000;
print("bonusRate2 = "+bonusRate);
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_BUDCLIMB) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_VAGABOND_BUDCLIMB, 0, sq_GetSkillLevel(obj, SKILL_VAGABOND_BUDCLIMB))) / 1000;
print("bonusRate3 = "+bonusRate);
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_ECSTASY) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_VAGABOND_ECSTASY, 6, sq_GetSkillLevel(obj, SKILL_VAGABOND_ECSTASY))) / 1000;
print("bonusRate4 = "+bonusRate);
if(sq_GetSkillLevel(obj, SKILL_VAGABOND_GODDESSOFSWORD) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_VAGABOND_GODDESSOFSWORD, 0, sq_GetSkillLevel(obj, SKILL_VAGABOND_GODDESSOFSWORD))) / 1000;
print("bonusRate5 = "+bonusRate);
obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger());
//sq_SetSkillAttackBonus(obj, bonusRate);
}
function getDamageRate_Demonslayer_bykk(obj)
{
local bonusRate = 1000;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/2_demonslayer/atfrenzy/ap_atfrenzy.nut")) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_DEMONSLAYER_ATFRENZY, 9, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_ATFRENZY))) / 1000;
print("bonusRate1 = "+bonusRate);
if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_CALLDAIMUS) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_DEMONSLAYER_CALLDAIMUS, 5, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_CALLDAIMUS))) / 1000;
print("bonusRate2 = "+bonusRate);
obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger());
}
function getDamageRate_Swordmaster_bykk(obj)
{
local bonusRate = 1000;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/bladesoul/ap_bladesoulbuff.nut")) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLADESOUL, 0, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADESOUL))) / 1000;
print("bonusRate1 = "+bonusRate);
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE, 0, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_ACCEDENCE))) / 1000;
print("bonusRate2 = "+bonusRate);
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SWORDMAGIC) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_SWORDMAGIC, 0, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SWORDMAGIC))) / 1000;
print("bonusRate3 = "+bonusRate);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/overdrive/ap_overdrive.nut")) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_OVERDRIVE, 1, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_OVERDRIVE))) / 1000;
print("bonusRate4 = "+bonusRate);
obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger());
//sq_SetSkillAttackBonus(obj, bonusRate);
//return bonusRate;
}
function procPassiveSkill_Darktempler_bykk(obj, skill_index, skill_level)
{
switch(skill_index){
case 65:
local apPath = "character/atswordman/4_darktempler/evolve/ap_evolve.nut";
if(skill_level > 0) local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, true);
break;
case 228:
local apPath = "character/atswordman/4_darktempler/incarnation/ap_incarnation.nut";
if(skill_level > 0) local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, true);
break;
case 77:
local apPath = "character/atswordman/4_darktempler/vespers/ap_vespers.nut";
if(skill_level > 0) local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, true);
break;
case 40:
local apPath = "character/atswordman/4_darktempler/loyalslave/ap_loyalslave.nut";
if(skill_level > 0) local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, true);
break;
}
}
function procPassiveSkill_Vagabond_bykk(obj, skill_index, skill_level)
{
switch(skill_index){
case SKILL_VAGABOND_THREEFLOWER:
local apPath = "character/atswordman/3_vagabond/threeflower/ap_threeflower.nut";
if(skill_level > 0) local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, true);
break;
case SKILL_VAGABOND_EQUIPLIGHTSWORD:
local apPath = "character/atswordman/3_vagabond/equiplightsword/ap_equiplightsword.nut";
if(skill_level > 0) local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, true);
break;
}
}
function procPassiveSkill_Swordmaster_bykk(obj, skill_index, skill_level)
{
switch(skill_index){
case SKILL_SWORDMASTER_BYKK_MAGICSWORDUP:
local apPath = "character/atswordman/1_swordmaster/magicswordup/ap_magicswordup.nut";
if(skill_level > 0) local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, true);
break;
case SKILL_SWORDMASTER_BYKK_INNERBLADE:
local apPath = "character/atswordman/1_swordmaster/ap_weaponmastery.nut";
if(skill_level > 0) local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, true);
break;
case SKILL_SWORDMASTER_BYKK_DRAWSWORD:
local apPath = "character/atswordman/1_swordmaster/drawsword/ap_drawsword.nut";
if(skill_level > 0) local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, true);
break;
case SKILL_SWORDMASTER_BYKK_BLADESOUL:
local apPath = "character/atswordman/1_swordmaster/bladesoul/ap_bladesoul.nut";
if(skill_level > 0) local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, true);
break;
}
}
function CreateAimPointMark(parentObj)
{
local job = sq_getJob(parentObj);
local ani = null;
if(job == ENUM_CHARACTERJOB_AT_MAGE){
ani = sq_CreateAnimation("", "Common/CommonEffect/Animation/atmage_cussor/AimPointMark.ani");
ani.setRGBA(0, 78, 255, 255);
}
else if(job == 10){
local CurSkill = AIMPOINT_ATSWORDMAN;
if(CurSkill == 69) ani = sq_CreateAnimation("", "passiveobject/atswordman_bykk/vagabond/animation/magiccircle.ani");
else if(CurSkill == 82) ani = sq_CreateAnimation("", "character/swordman/effect/animation/atjihad/jihad_targettingloop_a.ani");
}
return ani;
}
function CNAimPointMarkCustomAnimation(obj, parentObj)
{
if(!obj)
return false;
local job = sq_getJob(parentObj);
if(job == ENUM_CHARACTERJOB_AT_MAGE){
local ani1 = sq_CreateAnimation("", "Common/CommonEffect/Animation/atmage_cussor/AimPointMarkDisable.ani");
local ani2 = sq_CreateAnimation("", "Common/CommonEffect/Animation/atmage_cussor/AimPointMarkVanish.ani");
local ani3 = sq_CreateAnimation("", "Common/CommonEffect/Animation/atmage_cussor/AimPointMarkDisableVanish.ani");
local ani4 = sq_CreateAnimation("", "Common/CommonEffect/Animation/atmage_cussor/AimPointMarkEnable.ani");
if(ani1 && ani2 && ani3 && ani4){
ani1.setRGBA(0, 78, 255, 255);
ani2.setRGBA(0, 78, 255, 255);
ani3.setRGBA(0, 78, 255, 255);
ani4.setRGBA(0, 78, 255, 255);
obj.addCustomAnimation(ani1);
obj.addCustomAnimation(ani2);
obj.addCustomAnimation(ani3);
obj.addCustomAnimation(ani4);
return true;
}
}
else if(job == 10){
local CurSkill = AIMPOINT_ATSWORDMAN;
if(CurSkill == 69){
local ani1 = sq_CreateAnimation("", "passiveobject/atswordman_bykk/vagabond/animation/magiccircle.ani");
local ani2 = sq_CreateAnimation("", "passiveobject/atswordman_bykk/vagabond/animation/magiccircle.ani");
local ani3 = sq_CreateAnimation("", "passiveobject/atswordman_bykk/vagabond/animation/magiccircle.ani");
local ani4 = sq_CreateAnimation("", "passiveobject/atswordman_bykk/vagabond/animation/magiccircle.ani");
ani2.setLoop(false);
if(ani1 && ani2 && ani3 && ani4){
obj.addCustomAnimation(ani1);
obj.addCustomAnimation(ani2);
obj.addCustomAnimation(ani3);
obj.addCustomAnimation(ani4);
return true;
}
}
else if(CurSkill == 82){
local ani1 = sq_CreateAnimation("", "character/swordman/effect/animation/atjihad/jihad_targettingloop_a.ani");
local ani2 = sq_CreateAnimation("", "character/swordman/effect/animation/atjihad/jihad_targettingloop_a.ani");
local ani3 = sq_CreateAnimation("", "character/swordman/effect/animation/atjihad/jihad_targettingloop_a.ani");
local ani4 = sq_CreateAnimation("", "character/swordman/effect/animation/atjihad/jihad_targettingloop_a.ani");
if(ani1 && ani2 && ani3 && ani4){
obj.addCustomAnimation(ani1);
obj.addCustomAnimation(ani2);
obj.addCustomAnimation(ani3);
obj.addCustomAnimation(ani4);
return true;
}
}
}
return false;
}
function drawCustomSkillani_ATSwordman(obj)
{
if(!obj.getVar("MoonlightslashDraw").getBool(0))//???????關
return;
local Xpos = 0;
Skill_DrawAni(obj,"Moonlightslash","etc/ultimateskillani/atsword_swordempress2nd.ani",1.0,1.0,255,Xpos, 50,"MoonlightslashDraw");
return;
}
function Skill_DrawAni(obj,aniName,AniPath,Xrate,Yrate,alpaha,Xpos,Ypos,VarName)
{
local sq_var = obj.getVar();
local AniObj2 = sq_var.GetAnimationMap( aniName , AniPath );
if(obj.getDirection() == 1){
Xrate = -Xrate;
Xpos = Xpos + 800;
}
if(sq_IsEnd(AniObj2)){
if(obj.getVar(VarName).getBool(1)){
sq_Rewind(AniObj2);
obj.getVar(VarName).setBool(1,false);
}
else obj.getVar(VarName).setBool(0,false);
}
else{
sq_AnimationProc(AniObj2);
AniObj2.setImageRate(Xrate,Yrate);
AniObj2.setRGBA(255, 255, 255, alpaha);
sq_drawCurrentFrame(AniObj2, Xpos,Ypos, false);
obj.getVar(VarName).setBool(1,false);
}
}
function isMovablePos_CNAimPointMark(obj, parentObj, xPos, yPos)
{
if(!obj)
return true;
if(!parentObj)
return true;
local job = sq_getJob(parentObj);
if(job == ENUM_CHARACTERJOB_AT_MAGE) return sq_IsMovablePosCollisionObject(parentObj, xPos, yPos);
else if(job == 10) sq_IsMovablePosCollisionObject(parentObj, xPos, yPos);
return true;
}
function onSetState_AtSwordman_Basic5_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
if(subState == 40){//進圖獲取攻擊屬性用
obj.sq_SetCurrentAnimation(708);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0));
return;
}
local basicbonus = obj.sq_GetBonusRateWithPassive(174, -1, 0, 0.1) + 100;
obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj), obj.getState());
local aniIndex = subState;
local attackIndex = subState;
if(sq_getGrowType(obj) == 1 && sq_GetSkillLevel(obj, 3) > 0){
aniIndex = SWORDMASTER_ANIINDEX[subState];
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()) aniIndex = SWORDMASTER_MAGIC_ANIINDEX[subState];
attackIndex = SWORDMASTER_ATTACKINDEX[subState];
changeSwordEffect_bykk(obj, "InnerBladeAttack" + (subState + 1).tostring(), 108);
}
else if(sq_getGrowType(obj) == 2 && sq_GetSkillLevel(obj, 202) > 0){
local weaponType = getDualWeaponType(obj);
aniIndex = DUALWEAPON_ANIINDEX[weaponType * 3 + subState];
attackIndex = DUALWEAPON_ATTACKINDEX[weaponType * 3 + subState];
basicbonus = basicbonus * (100 + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 0, sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON))) / 100;
if(weaponType == 3) basicbonus = basicbonus + basicbonus * sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 8, sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON)) / 100;
}
else if(sq_getGrowType(obj) == 3 && sq_GetSkillLevel(obj, 148) > 0){
aniIndex = DEMONSLAYER_ANIINDEX[subState];
attackIndex = DEMONSLAYER_ATTACKINDEX[subState];
BodyCalldaimus(obj, DEMONSLAYER_ATTACKEFFECTINDEX[subState]);
}
else if(sq_getGrowType(obj) == 4 && sq_GetSkillLevel(obj, 62) > 0){
aniIndex = HIDDENBLADE_ANIINDEX[subState];
attackIndex = HIDDENBLADE_ATTACKINDEX[subState];
basicbonus = basicbonus * (100 + sq_GetLevelData(obj, SKILL_DARKEMPLER_HIDDENBLADE, 0, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_HIDDENBLADE))) / 100;
}
obj.sq_SetCurrentAnimation(aniIndex);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), basicbonus);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
if(sq_getGrowType(obj) == 1){
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")){
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut");
local element = addAppendage.getVar("elementIndex").getInt(10);
local elemantalInfo = [ENUM_ELEMENT_FIRE,ENUM_ELEMENT_WATER,ENUM_ELEMENT_DARK,ENUM_ELEMENT_LIGHT];
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(!attackInfo.isValidElement(elemantalInfo[element])) attackInfo.setElement(elemantalInfo[element]);
}
local effectObj = obj.getVar("elementalsword").get_obj_vector(0);
if(effectObj){
local colObj = sq_GetCNRDObjectToCollisionObject(effectObj);
local element = colObj.getVar("custom").getInt(10);
local elemantalInfo = [ENUM_ELEMENT_FIRE,ENUM_ELEMENT_WATER,ENUM_ELEMENT_DARK,ENUM_ELEMENT_LIGHT];
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(!attackInfo.isValidElement(elemantalInfo[element])) attackInfo.setElement(elemantalInfo[element]);
}
}
obj.getVar("attackBool").setBool(10, false);
switch(subState){
case 0:
obj.getVar("attackBool").setBool(12, false);
break;
case 1:
obj.getVar("attackBool").setBool(13, false);
break;
}
}
function onProcCon_AtSwordman_Basic5_bykk(obj)
{
if(!obj) return;
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL) && sq_IsKeyDown(OPTION_HOTKEY_JUMP, ENUM_SUBKEY_TYPE_ALL)){
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(200);
obj.sq_AddSetStatePacket(6, STATE_PRIORITY_IGNORE_FORCE, true);
}
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
case 2:
case 3:
case 4:
local speedRate = [0,0,0,300,20];
local growType = sq_getGrowType(obj);
switch(growType){
case 1: speedRate = [0,200,10,0,0]; break;
case 2: speedRate = [0,100,10,0,0]; break;
case 3: speedRate = [0,0,0,200,10]; break;
case 4: speedRate = [0,0,100,0,0]; break;
}
if((obj.getVar("attackBool").getBool(12) && subState >= 0) || (obj.getVar("attackBool").getBool(13) && subState >= 1)) break;
if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT)){
if(obj.getVar("attackBool").getBool(12) == false) obj.getVar("attackBool").setBool(12, true);
if(obj.getVar("attackBool").getBool(13) == false) obj.getVar("attackBool").setBool(13, true);
speedRate = [0,0,0];
}
else if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT)){
for(local i = 0; i < speedRate.len(); i++){
speedRate[i] = speedRate[i] * 150 / 100;
}
}
obj.sq_StartWrite();
obj.sq_WriteDword(obj.getDirection());
obj.sq_WriteDword(speedRate[subState]);
sq_SendChangeSkillEffectPacket(obj, 108);
break;
}
if(obj.getVar("attackBool").getBool(10)){
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(108, STATE_PRIORITY_IGNORE_FORCE, true);
print("test");
}
}
}
function onChangeSkillEffect_AtSwordman_Basic5(obj, skillIndex, reciveData)
{
if(!obj) return;
local direction = reciveData.readDword();
local speedRate = reciveData.readDword();
if(speedRate <= 0) return;
if(direction == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speedRate.tofloat());
else if(direction == ENUM_DIRECTION_LEFT) sq_SetVelocity(obj, 0, -speedRate.tofloat());
}
function onKeyFrameFlag_AtSwordman_Basic5(obj, flagIndex)
{
if(!obj) return false;
local substate = obj.getSkillSubState();
print("substate = "+substate);
print("flagIndex = "+flagIndex);
print("set = "+obj.getVar("attackBool").getBool(10));
local growType = sq_getGrowType(obj);
local stateMax = 4;
switch(growType){
case 1: stateMax = 2; break;
case 2: stateMax = 2; break;
case 3: stateMax = 4; break;
case 4: stateMax = 2; break;
}
if(flagIndex == 1000 && substate < stateMax){
print("test2");
obj.getVar("attackBool").setBool(10, true);
}
return true;
}
function onAttack_AtSwordman_Basic5_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj || isStuck) return false;
//local substate = obj.getSkillSubState();
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
isChangeSword_Attack(obj,damager,boundingBox);
}
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
isMagicSwordUp_Attack(obj,damager,boundingBox);
}
break;
case 2:
if(sq_GetSkillLevel(obj, 202) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
local weaponType = getDualWeaponType(obj);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON);
switch(weaponType){
case 0://光
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 13, skill_level), time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 14, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_LIGHTNING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger());
break;
case 1://鈍
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 2, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 3, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 1, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_STUN, prob.tofloat(), level.tointeger(), false, time.tointeger());
break;
case 2://太
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 5, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 6, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLEEDING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger());
break;
case 4://短
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 10, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 11, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 9, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_HOLD, prob.tofloat(), level.tointeger(), false, time.tointeger());
break;
}
}
break;
case 3:
Calldaimus_onAttack(obj, damager, boundingBox, isStuck);
break;
}
//MagicSword_BasiconAttack(obj, damager, boundingBox, isStuck);
}
function getDualWeaponType(obj)
{
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/3_vagabond/dualweapon/ap_dualweapon.nut");
if(addAppendage){
local weaponType = addAppendage.getVar().getInt(10);
return weaponType;
}
else return 0;
}
function procSkill_vagabond_bykk(obj)
{
if(!obj) return;
if(obj.getVar("rapid_step_enable").getBool(0) && !sq_GetSkill(obj, SKILL_VAGABOND_RAPIDSTEP).isInCoolTime()){
obj.setSkillCommandEnable(SKILL_VAGABOND_RAPIDSTEP, true);
if(obj.sq_IsEnterSkill(SKILL_VAGABOND_RAPIDSTEP) != -1){
obj.getVar("rapid_step_enable").setBool(0, false);
obj.getVar("EnableHermitTripleStep").setBool(0, false);
obj.startSkillCoolTime(SKILL_VAGABOND_RAPIDSTEP, sq_GetSkillLevel(obj, SKILL_VAGABOND_RAPIDSTEP), -1);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_RAPIDSTEP, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
if(obj.getVar("EnableHermitTripleStep").getBool(0) && !sq_GetSkill(obj, SKILL_VAGABOND_HERMITTRIPLESTEP).isInCoolTime()){
obj.setSkillCommandEnable(SKILL_VAGABOND_HERMITTRIPLESTEP, true);
if(obj.sq_IsEnterSkill(SKILL_VAGABOND_HERMITTRIPLESTEP) != -1){
obj.getVar("rapid_step_enable").setBool(0, false);
obj.getVar("EnableHermitTripleStep").setBool(0, false);
obj.startSkillCoolTime(SKILL_VAGABOND_HERMITTRIPLESTEP, sq_GetSkillLevel(obj, SKILL_VAGABOND_HERMITTRIPLESTEP), -1);
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_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_VAGABOND_HERMITTRIPLESTEP, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
}
function onAttack_ATSwordman(obj, damager, bounding_box, is_stuck)
{
if(!obj || is_stuck) return false;
//enableClearDeadEnemies(obj, damager);
if(sq_getGrowType(obj) == 3 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
darkStrike_Attack(obj, damager);
}
}
function onStartMap_Demonslayer_bykk(obj)
{
local size = obj.getVar("predatorgaloaObj").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local predatorgaloaObj = obj.getVar("predatorgaloaObj").get_obj_vector(i);
if(predatorgaloaObj && predatorgaloaObj.getState() != 25){
local colObj = sq_GetCNRDObjectToCollisionObject(predatorgaloaObj);
colObj.getVar().setBool(0, false);
colObj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, "");
}
}
}
}
function onStartMap_Swordmaster_bykk(obj)
{
return;
}
function onStartMap_DarkTempler_bykk(obj)
{
local apdPath = "character/atswordman/4_darktempler/shadowharvest/ap_shadowharvest.nut";
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath);
return;
}
function dungeonStart_ATSwordman_Swordmaster(obj)
{
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT) > 0){
local loadSlot = obj.sq_GetSkillLoad(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT);
if(!loadSlot) obj.sq_AddSkillLoad(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 101, 0, sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 9));
}
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0){
obj.getVar("isMagicSwordUp").clear_ct_vector();
obj.getVar("isMagicSwordUp").push_ct_vector();
local timer = obj.getVar("isMagicSwordUp").get_ct_vector(0);
timer.Reset();
timer.Start(10000,0);
}
obj.getVar("isReset").setInt(0, 1);
getDamageRate_Swordmaster_bykk(obj);
}
function reset_AtSwordman_bykk(obj)
{
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj,"character/atswordman/4_darktempler/shadowharvest/ap_shadowharvest.nut");
if(addAppendage) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/atswordman/4_darktempler/shadowharvest/ap_shadowharvest.nut");
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT) > 0){
local loadSlot = obj.sq_GetSkillLoad(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT);
if(!loadSlot) obj.sq_AddSkillLoad(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 101, 0, sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 9));
}
if(sq_getGrowType(obj) == 1 && obj.getVar("isReset").getInt(0) == 0) getDamageRate_Swordmaster_bykk(obj);
if(obj.getVar("isReset").getInt(0) == 0){
if(sq_getGrowType(obj) == 1) dungeonStart_ATSwordman_Swordmaster(obj);
else if(sq_getGrowType(obj) == 4) StartDungeon_AtSwordmanAddEvolve(obj)
else if(sq_getGrowType(obj) == 2){
StartDungeon_AtSwordmanDualweapon(obj);
DungeonStart_ATSwordman_Ecstasy(obj);
setSkillDamageRate_VagaBond_bykk(obj);
}
}
}
//通用
function checkExecutableSkill_Liftslash(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(86);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(86, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Liftslash(obj)
{
if (!obj) return false;
local state = obj.sq_GetState();
if (state == 0||state == 8||state == 14||state == 108) return true;
return true;
}
function onSetState_Liftslash(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
switch(subState){
case 0:
obj.sq_StopMove();
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){
obj.sq_SetCurrentAnimation(218);
changeSwordEffect_bykk(obj, "liftslash", 86);
}
else obj.sq_SetCurrentAnimation(6);
break;
case 3:
obj.sq_SetCurrentAnimation(392);
BodyCalldaimus(obj, "liftslash");
break;
default:
obj.sq_SetCurrentAnimation(6);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
obj.sq_SetCurrentAttackInfo(5);
local bonus = obj.sq_GetBonusRateWithPassive(86, -1, 0, 1.0);
obj.sq_SetCurrentAttackBonusRate(bonus);
sq_SetCurrentAttacknUpForce(sq_GetCurrentAttackInfo(obj),sq_GetLevelData(obj,86, 2, sq_GetSkillLevel(obj, 86)));
obj.sq_SetMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL);
obj.sq_SetStaticMoveInfo(0, 120, 120, false);
obj.sq_PlaySound("R_SW_LIFTSLASH");
break;
}
}
function onEndCurrentAni_Liftslash(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 onAttack_Liftslash(obj, damager, boundingBox, isStuck)
{
if(!obj) return false;
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
isChangeSword_Attack(obj,damager,boundingBox);
}
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
isMagicSwordUp_Attack(obj,damager,boundingBox);
}
break;
case 2:
if(sq_GetSkillLevel(obj, 202) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
local weaponType = getDualWeaponType(obj);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON);
switch(weaponType){
case 0://光
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 13, skill_level), time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 14, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_LIGHTNING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger());
break;
case 1://鈍
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 2, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 3, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 1, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_STUN, prob.tofloat(), level.tointeger(), false, time.tointeger());
break;
case 2://太
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 5, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 6, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLEEDING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger());
break;
case 4://短
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 10, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 11, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 9, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_HOLD, prob.tofloat(), level.tointeger(), false, time.tointeger());
break;
}
}
break;
case 3:
Calldaimus_onAttack(obj, damager, boundingBox, isStuck);
break;
}
}
function checkExecutableSkill_Darkslash(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(143);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(143, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Darkslash(obj)
{
if (!obj) return false;
local state = obj.sq_GetState();
if (state == 0 || state == 14 || state == 108) return true;
return true;
}
function onSetState_Darkslash(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
local growType = sq_getGrowType(obj);
switch(subState){
case 0:
switch(growType){
case 1:
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){
obj.sq_SetCurrentAnimation(209);
changeSwordEffect_bykk(obj, "darkslash1", 143);
}
else obj.sq_SetCurrentAnimation(7);
break;
case 3:
obj.sq_SetCurrentAnimation(383);
BodyCalldaimus(obj, "darkslash1");
break;
default:
obj.sq_SetCurrentAnimation(7);
break;
}
obj.sq_PlaySound("SW_DARKSLASH");
obj.sq_PlaySound("DARKSLASH_01");
break;
case 1:
switch(growType){
case 1:
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){
obj.sq_SetCurrentAnimation(210);
changeSwordEffect_bykk(obj, "darkslash2", 143);
}
else obj.sq_SetCurrentAnimation(8);
break;
case 3:
obj.sq_SetCurrentAnimation(384);
BodyCalldaimus(obj, "darkslash2");
break;
default:
obj.sq_SetCurrentAnimation(8);
break;
}
obj.sq_PlaySound("DARKSLASH_02");
obj.sq_PlaySound("DARKSLASH_02");
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
obj.sq_SetCurrentAttackInfo(6 + subState);
local bonus = obj.sq_GetBonusRateWithPassive(143, -1, 0, 1.0);
obj.sq_SetCurrentAttackBonusRate(bonus);
}
function onEndCurrentAni_Darkslash(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(143, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onAttack_Darkslash(obj, damager, boundingBox, isStuck)
{
if(!obj) return false;
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
isChangeSword_Attack(obj,damager,boundingBox);
}
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
isMagicSwordUp_Attack(obj,damager,boundingBox);
}
break;
case 2:
if(sq_GetSkillLevel(obj, 202) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
local weaponType = getDualWeaponType(obj);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON);
switch(weaponType){
case 0://光
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 13, skill_level), time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 14, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_LIGHTNING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger());
break;
case 1://鈍
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 2, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 3, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 1, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_STUN, prob.tofloat(), level.tointeger(), false, time.tointeger());
break;
case 2://太
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 5, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 6, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLEEDING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger());
break;
case 4://短
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 10, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 11, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 9, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_HOLD, prob.tofloat(), level.tointeger(), false, time.tointeger());
break;
}
}
break;
case 3:
Calldaimus_onAttack(obj, damager, boundingBox, isStuck);
break;
}
}
function checkExecutableSkill_Gorecross(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(94);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(94, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Gorecross(obj)
{
if (!obj) return false;
local state = obj.sq_GetState();
if (state == 0 || state == 14 || state == 108) return true;
return true;
}
function onSetState_Gorecross(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
print("subState = "+subState);
obj.setSkillSubState(subState);
obj.sq_StopMove();
local growType = sq_getGrowType(obj);
switch(subState){
case 0:
obj.getVar("Gorecross").setBool(0,false);
obj.sq_PlaySound("SW_1ATK_02");
obj.sq_PlaySound("TRIPLE_STEP_12");
switch(growType){
case 1:
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){
obj.sq_SetCurrentAnimation(214);
changeSwordEffect_bykk(obj, "gorecross", 94);
}
else obj.sq_SetCurrentAnimation(9);
break;
case 3:
obj.sq_SetCurrentAnimation(388);
BodyCalldaimus(obj, "gorecross");
break;
default:
obj.sq_SetCurrentAnimation(9);
break;
}
break;
case 1:
obj.sq_PlaySound("HALFMOON");
obj.sq_PlaySound("SW_DASHATK");
switch(growType){
case 1:
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){
obj.sq_SetCurrentAnimation(215);
changeSwordEffect_bykk(obj, "gorecross_finish", 94);
}
else obj.sq_SetCurrentAnimation(10);
break;
case 3:
obj.sq_SetCurrentAnimation(389);
BodyCalldaimus(obj, "gorecross_finish");
break;
default:
obj.sq_SetCurrentAnimation(10);
break;
}
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
obj.sq_SetCurrentAttackInfo(8 + subState);
local bonus = obj.sq_GetBonusRateWithPassive(94, -1, 0, 1.0);
if(subState == 1) bonus = obj.sq_GetBonusRateWithPassive(94, -1, 4, 1.0);
obj.sq_SetCurrentAttackBonusRate(bonus);
}
function onEndCurrentAni_Gorecross(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onProcCon_Gorecross(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(obj.getVar("Gorecross").getBool(0) == false){
obj.setSkillCommandEnable(94,true);
if(obj.sq_IsEnterSkill(94) != -1){
obj.getVar("Gorecross").setBool(0, true);
}
}
break;
}
}
function onKeyFrameFlag_Gorecross(obj, flagIndex)
{
if(!obj) return false;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
switch(flagIndex){
case 0:
local totalDamage = obj.sq_GetBonusRateWithPassive(94, -1, 2, 1.0);
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,75,0,55,obj.getDirection(),0,94,1,totalDamage,0,0,0,0,0,0,0,1);
break;
case 1:
if(obj.getVar("Gorecross").getBool(0)){
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(94, STATE_PRIORITY_IGNORE_FORCE, true);
}
break;
}
break;
case 1:
switch(flagIndex){
case 0:
local totalDamage = obj.sq_GetBonusRateWithPassive(94, -1, 6, 1.0);
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,75,0,55,obj.getDirection(),0,94,2,totalDamage,0,0,0,0,0,0,0,1);
break;
}
break;
}
return true;
}
function onAttack_Gorecross(obj, damager, boundingBox, isStuck)
{
if(!obj) return false;
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
isChangeSword_Attack(obj,damager,boundingBox);
}
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
isMagicSwordUp_Attack(obj,damager,boundingBox);
}
break;
case 2:
if(sq_GetSkillLevel(obj, 202) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
local weaponType = getDualWeaponType(obj);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON);
switch(weaponType){
case 0://光
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 13, skill_level), time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 14, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_LIGHTNING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger());
break;
case 1://鈍
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 2, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 3, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 1, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_STUN, prob.tofloat(), level.tointeger(), false, time.tointeger());
break;
case 2://太
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 5, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 6, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLEEDING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger());
break;
case 4://短
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 10, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 11, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 9, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_HOLD, prob.tofloat(), level.tointeger(), false, time.tointeger());
break;
}
}
break;
case 3:
Calldaimus_onAttack(obj, damager, boundingBox, isStuck);
break;
}
}
function checkExecutableSkill_Siryun(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(88);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(88, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Siryun(obj)
{
if (!obj) return false;
local state = obj.sq_GetState();
if (state == 0 || state == 14 || state == 108) return true;
return true;
}
function onSetState_Siryun(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
local growType = sq_getGrowType(obj);
switch(subState){
case 0:
obj.sq_PlaySound("SW_1ATK_02");
obj.sq_PlaySound("TRIPLE_STEP_12");
switch(growType){
case 1:
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){
obj.sq_SetCurrentAnimation(222);
changeSwordEffect_bykk(obj, "Siryun", 94);
}
else obj.sq_SetCurrentAnimation(11);
break;
case 3:
obj.sq_SetCurrentAnimation(396);
BodyCalldaimus(obj, "Siryun");
break;
default:
obj.sq_SetCurrentAnimation(11);
break;
}
break;
}
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_SIRYUN");
}
function onEndCurrentAni_Siryun(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 onKeyFrameFlag_Siryun(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1:
obj.sq_PlaySound("SIRYUN_01");
local totalDamage = obj.sq_GetBonusRateWithPassive(88, -1, 0, 1.0);
local hitMax = obj.sq_GetBonusRateWithPassive(88, -1, 2, 1.0) + 100;
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,120,0,75,obj.getDirection(),0,88,1,totalDamage,hitMax,0,0,0,0,0,0,1);
break;
case 2:
obj.sq_PlaySound("SIRYUN_02");
local totalDamage = obj.sq_GetBonusRateWithPassive(88, -1, 0, 1.0);
local hitMax = obj.sq_GetBonusRateWithPassive(88, -1, 2, 1.0) + 100;
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,125,0,35,obj.getDirection(),0,88,1,totalDamage,hitMax,0,0,0,0,0,0,1);
obj.getVar("EnableHermitTripleStep").setBool(0, true);
break;
}
return true;
}
function checkExecutableSkill_Mountaincrash(obj)
{
if (!obj) return false;
local state = obj.sq_GetState();
if(state == 6 || state == 147){
if(sq_GetZPos(obj) < sq_GetIntData(obj, 87, 2)) return false;
}
local isUse = obj.sq_IsUseSkill(87);
if (isUse){
obj.sq_IntVectClear();
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY) > 0) obj.sq_IntVectPush(2);
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(87, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Mountaincrash(obj)
{
if (!obj) return false;
local state = obj.sq_GetState();
if (state == 0 || state == 14 || state == 108){
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLUNTMASTERY) < 1) return false;
}
return true;
}
function onSetState_Mountaincrash(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
print("subState = "+subState);
obj.setSkillSubState(subState);
obj.sq_StopMove();
obj.sq_ZStop();
local growType = sq_getGrowType(obj);
switch(subState){
case 0:
switch(growType){
case 1:
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){
obj.sq_SetCurrentAnimation(221);
changeSwordEffect_bykk(obj, "mountaincrashhold", 94);
}
else obj.sq_SetCurrentAnimation(13);
break;
case 3:
obj.sq_SetCurrentAnimation(395);
BodyCalldaimus(obj, "mountaincrashhold");
break;
default:
obj.sq_SetCurrentAnimation(13);
break;
}
obj.getVar("MountaincrashSet").setInt(0, sq_GetZPos(obj));
break;
case 1:
switch(growType){
case 1:
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){
obj.sq_SetCurrentAnimation(219);
changeSwordEffect_bykk(obj, "mountaincrash", 94);
}
else obj.sq_SetCurrentAnimation(12);
break;
case 3:
obj.sq_SetCurrentAnimation(393);
BodyCalldaimus(obj, "mountaincrash");
break;
default:
obj.sq_SetCurrentAnimation(12);
break;
}
break;
case 2:
switch(growType){
case 1:
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){
obj.sq_SetCurrentAnimation(220);
changeSwordEffect_bykk(obj, "mountaincrashblunt", 94);
}
else obj.sq_SetCurrentAnimation(14);
break;
case 3:
obj.sq_SetCurrentAnimation(394);
BodyCalldaimus(obj, "mountaincrashblunt");
break;
default:
obj.sq_SetCurrentAnimation(14);
break;
}
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
if(subState < 1) return;
obj.sq_SetCurrentAttackInfo(11);
local bonus = obj.sq_GetBonusRateWithPassive(87, -1, 0, 1.0);
obj.sq_SetCurrentAttackBonusRate(bonus);
}
function onEndCurrentAni_Mountaincrash(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(87, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 1:
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onProc_Mountaincrash(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
local stateTime = obj.sq_GetStateTimer();
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(0, 1);
if(stateTime > delaySum){
if(sq_GetZPos(obj) > 0) sq_setCurrentAxisPos(obj, 2, 0);
return;
}
local vz = sq_GetUniformVelocity(obj.getVar("MountaincrashSet").getInt(0), 0, stateTime, delaySum);
sq_setCurrentAxisPos(obj, 2, vz);
break;
}
}
function onKeyFrameFlag_Mountaincrash(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1:
local totalDamage = obj.sq_GetBonusRateWithPassive(87, -1, 1, 1.0);
local sizeRate = obj.sq_GetBonusRateWithPassive(87, -1, 2, 1.0) + 100;
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,120,0,-sq_GetZPos(obj),obj.getDirection(),0,87,1,totalDamage,sizeRate,0,0,0,0,0,0,1);
break;
}
return true;
}
function onAttack_Mountaincrash(obj, damager, boundingBox, isStuck)
{
if(!obj) return false;
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
isChangeSword_Attack(obj,damager,boundingBox);
}
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
isMagicSwordUp_Attack(obj,damager,boundingBox);
}
break;
case 2:
if(sq_GetSkillLevel(obj, 202) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
local weaponType = getDualWeaponType(obj);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON);
switch(weaponType){
case 0://光
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 13, skill_level), time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 14, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_LIGHTNING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger());
break;
case 1://鈍
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 2, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 3, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 1, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_STUN, prob.tofloat(), level.tointeger(), false, time.tointeger());
break;
case 2://太
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 5, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 6, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLEEDING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger());
break;
case 4://短
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 10, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 11, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 9, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_HOLD, prob.tofloat(), level.tointeger(), false, time.tointeger());
break;
}
}
break;
case 3:
Calldaimus_onAttack(obj, damager, boundingBox, isStuck);
break;
}
}
function checkExecutableSkill_Snakeshadow(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(91);
if (isUse){
obj.sq_IntVectClear();
if(sq_getGrowType(obj) == 5) obj.sq_IntVectPush(2);
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(91, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Snakeshadow(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Snakeshadow(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
local growType = sq_getGrowType(obj);
switch(subState){
case 0:
switch(growType){
case 1:
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){
obj.sq_SetCurrentAnimation(224);
changeSwordEffect_bykk(obj, "SnakeShadow_Ready", 91);
}
else obj.sq_SetCurrentAnimation(20);
break;
case 3:
obj.sq_SetCurrentAnimation(398);
BodyCalldaimus(obj, "SnakeShadow_Ready");
break;
default:
obj.sq_SetCurrentAnimation(20);
break;
}
obj.getVar("SnakeshadowSet").setInt(0, 0);
break;
case 1:
local sub = obj.getVar("SnakeshadowSet").getInt(0);
switch(growType){
case 1:
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){
switch(sub){
case 0:
obj.sq_SetCurrentAnimation(225);
changeSwordEffect_bykk(obj, "SnakeShadow_Side_Body", 91);
break;
case 1:
obj.sq_SetCurrentAnimation(226);
changeSwordEffect_bykk(obj, "SnakeShadow_Up_Body", 91);
break;
case 2:
obj.sq_SetCurrentAnimation(223);
changeSwordEffect_bykk(obj, "SnakeShadow_Down_Body", 91);
break;
}
}
else{
switch(sub){
case 0: obj.sq_SetCurrentAnimation(18); break;
case 1: obj.sq_SetCurrentAnimation(17); break;
case 2: obj.sq_SetCurrentAnimation(19); break;
}
}
break;
case 3:
switch(sub){
case 0:
obj.sq_SetCurrentAnimation(399);
BodyCalldaimus(obj, "mountaincrash");
break;
case 1:
obj.sq_SetCurrentAnimation(400);
BodyCalldaimus(obj, "mountaincrash");
break;
case 2:
obj.sq_SetCurrentAnimation(397);
BodyCalldaimus(obj, "mountaincrash");
break;
}
break;
default:
switch(sub){
case 0: obj.sq_SetCurrentAnimation(18); break;
case 1: obj.sq_SetCurrentAnimation(17); break;
case 2: obj.sq_SetCurrentAnimation(19); break;
}
break;
}
local atkIndex = [13, 12, 14];
obj.sq_SetCurrentAttackInfo(atkIndex[sub]);
local bonus = obj.sq_GetBonusRateWithPassive(91, -1, 0, 1.0);
obj.sq_SetCurrentAttackBonusRate(bonus);
break;
case 2:
switch(growType){
case 1:
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){
obj.sq_SetCurrentAnimation(220);
changeSwordEffect_bykk(obj, "mountaincrashblunt", 94);
}
else obj.sq_SetCurrentAnimation(17);
break;
case 3:
obj.sq_SetCurrentAnimation(394);
BodyCalldaimus(obj, "mountaincrashblunt");
break;
default:
obj.sq_SetCurrentAnimation(17);
break;
}
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_Snakeshadow(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(91, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 1:
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onProcCon_Snakeshadow(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(obj.getVar("SnakeshadowSet").getInt(0) == 0){
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){
sq_BinaryStartWrite();
sq_BinaryWriteDword(2);
sq_SendChangeSkillEffectPacket(obj, 91);
}
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){
sq_BinaryStartWrite();
sq_BinaryWriteDword(1);
sq_SendChangeSkillEffectPacket(obj, 91);
}
}
break;
}
}
function onChangeSkillEffect_Snakeshadow(obj, skillIndex, reciveData)
{
if(!obj) return;
local sub = reciveData.readDword();
obj.getVar("SnakeshadowSet").setInt(0, sub);
}
function onAttack_Snakeshadow(obj, damager, boundingBox, isStuck)
{
if(!obj) return false;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
local sub = obj.getVar("SnakeshadowSet").getInt(0);
if(sub == 2){
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
local apdPath = "character/atswordman/snakeshadow/ap_snakeshadow.nut";
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true);
AddAppendage.sq_SetValidTime(500);
sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage);
sq_MoveToAppendageForce(damager, obj, obj, 120, 0, damager.getZPos(), 300, true, AddAppendage);
}
}
break;
}
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
isChangeSword_Attack(obj,damager,boundingBox);
}
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
isMagicSwordUp_Attack(obj,damager,boundingBox);
}
break;
case 2:
if(sq_GetSkillLevel(obj, 202) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
local weaponType = getDualWeaponType(obj);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON);
switch(weaponType){
case 0://光
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 13, skill_level), time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 14, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_LIGHTNING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger());
break;
case 1://鈍
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 2, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 3, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 1, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_STUN, prob.tofloat(), level.tointeger(), false, time.tointeger());
break;
case 2://太
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 5, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 6, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLEEDING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger());
break;
case 4://短
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 10, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 11, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 9, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_HOLD, prob.tofloat(), level.tointeger(), false, time.tointeger());
break;
}
}
break;
case 3:
Calldaimus_onAttack(obj, damager, boundingBox, isStuck);
break;
}
}
//索魂刺
function checkExecutableSkill_AtExecution(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(34);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(134, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_AtExecution(obj)
{
if (!obj) return false;
return true;
}
function onSetState_AtExecution(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
local growType = sq_getGrowType(obj);
switch(subState){
case 0:
switch(growType){
case 1:
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){
obj.sq_SetCurrentAnimation(213);
changeSwordEffect_bykk(obj, "Execution_body", 34);
}
else obj.sq_SetCurrentAnimation(23);
break;
case 3:
obj.sq_SetCurrentAnimation(387);
BodyCalldaimus(obj, "Execution_body");
break;
default:
obj.sq_SetCurrentAnimation(23);
break;
}
obj.getVar("SnakeshadowSet").setInt(0, 0);
break;
case 1:
switch(growType){
case 1:
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){
obj.sq_SetCurrentAnimation(212);
changeSwordEffect_bykk(obj, "ExecutionLoop_body", 34);
}
else obj.sq_SetCurrentAnimation(24);
break;
case 3:
obj.sq_SetCurrentAnimation(386);
BodyCalldaimus(obj, "ExecutionLoop_body");
break;
default:
obj.sq_SetCurrentAnimation(24);
break;
}
break;
case 2:
switch(growType){
case 1:
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){
obj.sq_SetCurrentAnimation(211);
changeSwordEffect_bykk(obj, "ExecutionAttack_body", 34);
}
else obj.sq_SetCurrentAnimation(25);
break;
case 3:
obj.sq_SetCurrentAnimation(385);
BodyCalldaimus(obj, "ExecutionAttack_body");
break;
default:
obj.sq_SetCurrentAnimation(25);
break;
}
obj.sq_SetCurrentAttackInfo(19);
local bonus = obj.sq_GetBonusRateWithPassive(34, -1, 0, 1.0);
obj.sq_SetCurrentAttackBonusRate(bonus);
local size = obj.getVar("executionTar").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("executionTar").get_obj_vector(i);
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/atswordman/execution/ap_execution.nut");
if(addAppendage){
addAppendage.sq_SetValidTime(1000);
}
}
}
local effObj = obj.getVar("executionObj").get_obj_vector(0);
if(effObj){
local colObj = sq_GetCNRDObjectToCollisionObject(effObj);
colObj.setTimeEvent(1, 1000, 1, true);
}
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_AtExecution(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(134, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onKeyFrameFlag_AtExecution(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 100:
obj.getVar("executionObj").clear_obj_vector();
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_SWORDMASTER,100,0,0,obj.getDirection(),0,34,1,0,0,0,0,0,0,0,0,1);
break;
}
return true;
}
function onEndState_AtExecution(obj, newState)
{
if(newState != 134){
local size = obj.getVar("executionTar").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("executionTar").get_obj_vector(i);
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/atswordman/execution/ap_execution.nut");
if(addAppendage){
CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/execution/ap_execution.nut");
}
}
}
local effObj = obj.getVar("executionObj").get_obj_vector(0);
if(effObj){
local colObj = sq_GetCNRDObjectToCollisionObject(effObj);
colObj.setTimeEvent(1, 1000, 1, true);
}
}
}
function onAttack_AtExecution(obj, damager, boundingBox, isStuck)
{
if(!obj) return false;
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
isChangeSword_Attack(obj,damager,boundingBox);
}
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
isMagicSwordUp_Attack(obj,damager,boundingBox);
}
break;
case 2:
if(sq_GetSkillLevel(obj, 202) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
local weaponType = getDualWeaponType(obj);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON);
switch(weaponType){
case 0://光
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 13, skill_level), time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 14, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_LIGHTNING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger());
break;
case 1://鈍
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 2, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 3, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 1, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_STUN, prob.tofloat(), level.tointeger(), false, time.tointeger());
break;
case 2://太
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 5, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 6, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLEEDING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger());
break;
case 4://短
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 10, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 11, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 9, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_HOLD, prob.tofloat(), level.tointeger(), false, time.tointeger());
break;
}
}
break;
case 3:
Calldaimus_onAttack(obj, damager, boundingBox, isStuck);
break;
}
}
function checkExecutableSkill_Chainslash(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(32);
if (isUse){
obj.getVar("chainslashBool").setBool(0, true);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(132, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Chainslash(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Chainslash(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
local set = [[31, 32],[207, 208],["chainslashtp01_body", "chainslashtp02_body"],[381, 382], ["chainslashtp01_body", "chainslashtp02_body"],[6500, 6000]];
local growType = sq_getGrowType(obj);
switch(subState){
case 0:
switch(growType){
case 1:
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut") && !skill.isSealFunction()){
obj.sq_SetCurrentAnimation(set[1][obj.getVar("ChainslashSet").getInt(3)]);
changeSwordEffect_bykk(obj, set[2][obj.getVar("ChainslashSet").getInt(3)], 91);
}
else obj.sq_SetCurrentAnimation(set[0][obj.getVar("ChainslashSet").getInt(3)]);
break;
case 3:
obj.sq_SetCurrentAnimation(set[3][obj.getVar("ChainslashSet").getInt(3)]);
BodyCalldaimus(obj, set[4][obj.getVar("ChainslashSet").getInt(3)]);
break;
default:
obj.sq_SetCurrentAnimation(set[0][obj.getVar("ChainslashSet").getInt(3)]);
break;
}
if(obj.getVar("chainslashBool").getBool(0)){
obj.getVar("chainslashBool").setBool(0, false);
local hitMax = obj.sq_GetBonusRateWithPassive(32, -1, 2, 1.0) + 100;
if(sq_GetSkillLevel(obj, 58) > 0) hitMax = hitMax + 2;
obj.getVar("ChainslashSet").setInt(0, hitMax);
obj.getVar("ChainslashSet").setInt(1, 1);
obj.getVar("ChainslashSet").setInt(2, 1);
}
break;
}
obj.getVar("chainslashBool").setBool(1, false);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
obj.sq_SetCurrentAttackInfo(20 + subState);
local bonus = obj.sq_GetBonusRateWithPassive(32, -1, 0, 1.0);
obj.sq_SetCurrentAttackBonusRate(bonus);
local currentAni = obj.getCurrentAnimation();
local speedRate = (set[5][obj.getVar("ChainslashSet").getInt(3)] / currentAni.getDelaySum(0, 0)).tofloat();
local speed = 4.0 * speedRate;
if(speedRate <= 150) speed = 6.0 * speedRate;
if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed);
else sq_SetVelocity(obj, 0, -speed);
if(obj.getVar("ChainslashSet").getInt(3) == 0) obj.getVar("ChainslashSet").setInt(3, 1);
else if(obj.getVar("ChainslashSet").getInt(3) == 1) obj.getVar("ChainslashSet").setInt(3, 0);
}
function onEndCurrentAni_Chainslash(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 onProcCon_Chainslash(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(obj.getVar("chainslashBool").getBool(1) == false){
local hitMax = obj.getVar("ChainslashSet").getInt(0);
local hitCount = obj.getVar("ChainslashSet").getInt(1);
if(hitCount + 1 <= hitMax){
obj.setSkillCommandEnable(32,true);
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
if(obj.sq_IsEnterSkill(32) != -1 || sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){
// print("hitCount = "+hitCount);
obj.getVar("chainslashBool").setBool(1, true);
}
}
}
else{
local frameIndex = sq_GetCurrentFrameIndex(obj);
if(frameIndex >= 3){
local hitCount = obj.getVar("ChainslashSet").getInt(1);
obj.getVar("ChainslashSet").setInt(1, hitCount + 1);
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj)));
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(132, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
break;
}
}
function onKeyFrameFlag_Chainslash(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 100:
// obj.getVar("chainslashBool").setBool(1, true);
break;
}
return true;
}
function onAttack_Chainslash(obj, damager, boundingBox, isStuck)
{
if(!obj) return false;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
local sub = obj.getVar("SnakeshadowSet").getInt(0);
if(sub == 2){
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
local apdPath = "character/atswordman/snakeshadow/ap_snakeshadow.nut";
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true);
AddAppendage.sq_SetValidTime(500);
sq_MoveToAppendageForce(damager, obj, obj, 120, 0, damager.getZPos(), 300, true, AddAppendage);
}
}
break;
}
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
isChangeSword_Attack(obj,damager,boundingBox);
}
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
isMagicSwordUp_Attack(obj,damager,boundingBox);
}
break;
case 2:
if(sq_GetSkillLevel(obj, 202) > 0 && damager.isObjectType(OBJECTTYPE_ACTIVE)){
local weaponType = getDualWeaponType(obj);
local skill_level = sq_GetSkillLevel(obj, SKILL_VAGABOND_DUALWEAPON);
switch(weaponType){
case 0://光
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 13, skill_level), time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 14, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_LIGHTNING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger());
break;
case 1://鈍
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 2, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 3, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 1, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_STUN, prob.tofloat(), level.tointeger(), false, time.tointeger());
break;
case 2://太
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 5, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 6, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_BLEEDING, prob.tofloat(), sq_GetSkillLevel(obj, 174).tointeger(), false, time.tointeger());
break;
case 4://短
local prob = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 10, skill_level) / 10, time = sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 11, skill_level), level = sq_GetSkillLevel(obj, 174) + sq_GetLevelData(obj, SKILL_VAGABOND_DUALWEAPON, 9, skill_level);
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_HOLD, prob.tofloat(), level.tointeger(), false, time.tointeger());
break;
}
}
break;
case 3:
Calldaimus_onAttack(obj, damager, boundingBox, isStuck);
break;
}
}
/*
function getCurrentModuleDamageRate_CreatorMage(obj)
{
local rate = 0.0;
if (obj.sq_GetSkillLevel(15) > 0){
rate = rate * (100 + sq_GetLevelData(obj, 15, 0, obj.sq_GetSkillLevel(15)) / 10) / 100;
}
if(sq_getGrowType(obj) == 4) rate += getDamageRate_DarkTempler_bykk(obj).tofloat();
else if(sq_getGrowType(obj) == 2) rate += getDamageRate_VagaBond_bykk(obj).tofloat();
else if(sq_getGrowType(obj) == 3) rate += getDamageRate_Demonslayer_bykk(obj).tofloat();
if (obj.sq_GetSkillLevel(169) > 0) rate = rate * (100.0 + sq_GetLevelData(obj, 169, 0, obj.sq_GetSkillLevel(169)).tofloat() / 10.0) / 100.0;
if (obj.sq_GetSkillLevel(169) > 0) rate = rate * (100.0 + sq_GetLevelData(obj, 169, 1, obj.sq_GetSkillLevel(169)).tofloat() / 10.0) / 100.0;
return rate / 1000.0 + 1.0;
}
*/
function onSetState_ATSwordmanThrow(obj, state, datas, isResetTimer)
{
if(!obj) return;
local skillIndex = obj.getThrowIndex()
local substate = obj.sq_GetVectorData(datas, 0)
obj.setSkillSubState(substate)
if(skillIndex == SKILL_SWORDMASTER_BYKK_CHANGESWORD){
switch(substate){
case 0:
obj.sq_SetCurrentAnimation(66);
break;
}
}
}
function onAfterSetState_ATSwordmanThrow_bykk(obj, state, datas, isResetTimer)
{
if(!obj.isMyControlObject()) return;
local skillIndex = obj.getThrowIndex();
if(skillIndex == SKILL_SWORDMASTER_BYKK_CHANGESWORD){
local throwState = obj.getThrowState();
switch(throwState){
case 0:
obj.setIsCustomSelectSkill(true);
break;
case 1:
local element = obj.getThrowElement();
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")){
obj.sq_IntVectClear();
obj.sq_IntVectPush(100);
obj.sq_IntVectPush(element);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_CHANGESWORD, STATE_PRIORITY_IGNORE_FORCE, true);
}
else{
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut");
local element2 = addAppendage.getVar("elementIndex").getInt(10);
if(element == element2){
obj.sq_IntVectClear();
obj.sq_IntVectPush(100);
obj.sq_IntVectPush(element);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_CHANGESWORD, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
if(obj.getWeaponSubType() == 0 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY) > 0){
obj.sq_IntVectClear();
obj.sq_IntVectPush(100);
obj.sq_IntVectPush(element + 100);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_CHANGESWORD, STATE_PRIORITY_IGNORE_FORCE, true);
}
else{
obj.sq_IntVectClear();
obj.sq_IntVectPush(100);
obj.sq_IntVectPush(element);
obj.sq_AddSetStatePacket(SKILL_SWORDMASTER_BYKK_CHANGESWORD, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
break;
}
}
}
function onEndState_ATSwordmanThrow(obj, newState)
{
if(newState == STATE_STAND){
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut"))
CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut");
local effectObj = obj.getVar("elementalsword").get_obj_vector(0);
if(effectObj){
local colObj = sq_GetCNRDObjectToCollisionObject(effectObj);
local element = colObj.getVar("custom").getInt(10);
switch(element){
case 0: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/fire/fireswordend_04.ani", 0, 0, 0); break;
case 1: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/ice/iceswordend_04.ani", 0, 0, 0); break;
case 2: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/dark/darkswordend_04.ani", 0, 0, 0); break;
case 3: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/light/lightswordend_04.ani", 0, 0, 0); break;
}
colObj.setValid(false);
}
}
}
function changeSwordEffect_bykk(obj, AniName, skillIndex)
{
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) return;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) return;
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut");
local element = addAppendage.getVar("elementIndex").getInt(10);
local elementArr = [
["_fire_x.ani","_fire_a.ani","_fire_b.ani"],
["_ice_x.ani","_ice_a.ani","_ice_b.ani"],
["_dark_b1.ani","_dark_a.ani","_dark_a2.ani","_dark_b.ani","_dark_b2.ani"],
["_light_x.ani","_light_a.ani","_light_b.ani"]
];
local aniPath = [];
for(local i = 0; i < elementArr[element].len(); ++i){
aniPath.push("effect/animation/atchangeswordweapon/" + AniName + elementArr[element][i]);
}
local drawLayer = 1;
if(skillIndex == 96) drawLayer = 1;
else if(skillIndex == 141) drawLayer = -1;
foreach(key,path in aniPath){
obj.sq_AddStateLayerAnimation(drawLayer,obj.sq_CreateCNRDAnimation(path), 0, 0);
}
}
function getStayAni_ATSwordman(obj)
{
if(!obj) return null;
local sq_var = obj.getVar();
local ani = obj.sq_GetStayAni();
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break;
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut");
local element = addAppendage.getVar("elementIndex").getInt(10);
switch(element){
case 0: ani = obj.sq_GetCustomAni(194); break;
case 1: ani = obj.sq_GetCustomAni(193); break;
case 2: ani = obj.sq_GetCustomAni(196); break;
case 3: ani = obj.sq_GetCustomAni(195); break;
}
break;
case 3:
if(sq_GetSkillLevel(obj, 148) > 0) ani = obj.sq_GetCustomAni(361);
break;
}
return ani;
}
function getRestAni_ATSwordman(obj)
{
if(!obj) return null;
local ani = obj.sq_GetRestAni();
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break;
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut");
local element = addAppendage.getVar("elementIndex").getInt(10);
switch(element){
case 0: ani = obj.sq_GetCustomAni(186); break;
case 1: ani = obj.sq_GetCustomAni(185); break;
case 2: ani = obj.sq_GetCustomAni(188); break;
case 3: ani = obj.sq_GetCustomAni(187); break;
}
break;
case 3:
if(sq_GetSkillLevel(obj, 148) > 0) ani = obj.sq_GetCustomAni(359);
break;
case 0:
if(sq_GetSkillLevel(obj, 127) > 0) ani = obj.sq_GetCustomAni(708);
break;
}
return ani;
}
function getMoveAni_ATSwordman(obj)
{
if(!obj) return null;
local sq_var = obj.getVar();
local ani = obj.sq_GetMoveAni();
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break;
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut");
local element = addAppendage.getVar("elementIndex").getInt(10);
switch(element){
case 0: ani = obj.sq_GetCustomAni(178); break;
case 1: ani = obj.sq_GetCustomAni(177); break;
case 2: ani = obj.sq_GetCustomAni(180); break;
case 3: ani = obj.sq_GetCustomAni(179); break;
}
break;
case 3:
if(sq_GetSkillLevel(obj, 148) > 0) ani = obj.sq_GetCustomAni(357);
break;
}
return ani;
}
function getSitAni_ATSwordman(obj)
{
if(!obj) return null;
local ani = obj.sq_GetSitAni();
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break;
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut");
local element = addAppendage.getVar("elementIndex").getInt(10);
switch(element){
case 0: ani = obj.sq_GetCustomAni(190); break;
case 1: ani = obj.sq_GetCustomAni(189); break;
case 2: ani = obj.sq_GetCustomAni(192); break;
case 3: ani = obj.sq_GetCustomAni(191); break;
}
break;
case 3:
if(sq_GetSkillLevel(obj, 148) > 0) ani = obj.sq_GetCustomAni(360);
break;
}
return ani;
}
function getDamageAni_ATSwordman(obj, index)
{
if(!obj) return null;
local ani = obj.sq_GetDamageAni(index);
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break;
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut");
local element = addAppendage.getVar("elementIndex").getInt(10);
switch(index){
case 0:
switch(element){
case 0: ani = obj.sq_GetCustomAni(145); break;
case 1: ani = obj.sq_GetCustomAni(146); break;
case 2: ani = obj.sq_GetCustomAni(148); break;
case 3: ani = obj.sq_GetCustomAni(147); break;
}
break;
case 1:
switch(element){
case 0: ani = obj.sq_GetCustomAni(149); break;
case 1: ani = obj.sq_GetCustomAni(150); break;
case 2: ani = obj.sq_GetCustomAni(152); break;
case 3: ani = obj.sq_GetCustomAni(151); break;
}
break;
}
break;
case 3:
if(sq_GetSkillLevel(obj, 148) > 0){
if(index == 0) ani = obj.sq_GetCustomAni(350);
else if(index == 1) ani = obj.sq_GetCustomAni(351);
}
break;
}
return ani;
}
function getDownAni_ATSwordman(obj)
{
if(!obj) return null;
local ani = obj.sq_GetDownAni();
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break;
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut");
local element = addAppendage.getVar("elementIndex").getInt(10);
switch(element){
case 0: ani = obj.sq_GetCustomAni(162); break;
case 1: ani = obj.sq_GetCustomAni(161); break;
case 2: ani = obj.sq_GetCustomAni(164); break;
case 3: ani = obj.sq_GetCustomAni(163); break;
}
break;
case 3:
if(sq_GetSkillLevel(obj, 148) > 0) ani = obj.sq_GetCustomAni(353);
break;
}
return ani;
}
function getOverturnAni_ATSwordman(obj)
{
if(!obj) return null;
local sq_var = obj.getVar();
local ani = obj.sq_GetOverturnAni();
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break;
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut");
local element = addAppendage.getVar("elementIndex").getInt(10);
switch(element){
case 0: ani = obj.sq_GetCustomAni(182); break;
case 1: ani = obj.sq_GetCustomAni(181); break;
case 2: ani = obj.sq_GetCustomAni(184); break;
case 3: ani = obj.sq_GetCustomAni(183); break;
}
break;
case 3:
if(sq_GetSkillLevel(obj, 148) > 0) ani = obj.sq_GetCustomAni(358);
break;
}
return ani;
}
function getJumpAni_ATSwordman(obj)
{
if(!obj) return null;
local sq_var = obj.getVar();
local ani = obj.sq_GetJumpAni();
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break;
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut");
local element = addAppendage.getVar("elementIndex").getInt(10);
switch(element){
case 0: ani = obj.sq_GetCustomAni(170); break;
case 1: ani = obj.sq_GetCustomAni(169); break;
case 2: ani = obj.sq_GetCustomAni(172); break;
case 3: ani = obj.sq_GetCustomAni(171); break;
}
break;
case 3:
if(sq_GetSkillLevel(obj, 148) > 0) ani = obj.sq_GetCustomAni(355);
break;
}
return ani;
}
function getJumpAttackAni_ATSwordman(obj)
{
if(!obj) return null;
local ani = obj.sq_GetJumpAttackAni();
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break;
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut");
local element = addAppendage.getVar("elementIndex").getInt(10);
switch(element){
case 0: ani = obj.sq_GetCustomAni(174); break;
case 1: ani = obj.sq_GetCustomAni(173); break;
case 2: ani = obj.sq_GetCustomAni(176); break;
case 3: ani = obj.sq_GetCustomAni(175); break;
}
break;
case 3:
if(sq_GetSkillLevel(obj, 148) > 0) ani = obj.sq_GetCustomAni(356);
break;
case 4:
if(sq_GetSkillLevel(obj, 62) > 0) ani = obj.sq_GetCustomAni(513);
break;
case 0:
if(sq_GetSkillLevel(obj, 127) > 0) ani = obj.sq_GetCustomAni(630);
break;
}
return ani;
}
function getDashAni_ATSwordman(obj)
{
if(!obj) return null;
local ani = obj.sq_GetDashAni();
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break;
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut");
local element = addAppendage.getVar("elementIndex").getInt(10);
switch(element){
case 0: ani = obj.sq_GetCustomAni(154); break;
case 1: ani = obj.sq_GetCustomAni(153); break;
case 2: ani = obj.sq_GetCustomAni(156); break;
case 3: ani = obj.sq_GetCustomAni(155); break;
}
break;
case 3:
if(sq_GetSkillLevel(obj, 148) > 0) ani = obj.sq_GetCustomAni(352);
break;
}
return ani;
}
function getGetItemAni_ATSwordman(obj)
{
if(!obj) return null;
local sq_var = obj.getVar();
local ani = obj.sq_GetGetItemAni();
local growType = sq_getGrowType(obj);
switch(growType){
case 1:
local skill = sq_GetSkill(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD);
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_CHANGESWORD) > 0 && skill.isSealFunction()) break;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) break;
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut");
local element = addAppendage.getVar("elementIndex").getInt(10);
switch(element){
case 0: ani = obj.sq_GetCustomAni(166); break;
case 1: ani = obj.sq_GetCustomAni(165); break;
case 2: ani = obj.sq_GetCustomAni(168); break;
case 3: ani = obj.sq_GetCustomAni(167); break;
}
break;
case 3:
if(sq_GetSkillLevel(obj, 148) > 0) ani = obj.sq_GetCustomAni(354);
break;
}
return ani;
}
function isChangeSword_Attack(obj,damager,bounding_box)
{
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) return;
local timer = obj.getVar("isChangeSword").get_ct_vector(0);
if(!timer){
obj.getVar("isChangeSword").clear_ct_vector();
obj.getVar("isChangeSword").push_ct_vector();
timer = obj.getVar("isChangeSword").get_ct_vector(0);
timer.Reset();
timer.Start(10000,0);
}
local currentT = timer.Get();
local coolTime = 300;
if(obj.getWeaponSubType() == 0 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY) > 0) coolTime = coolTime * (100 - sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY, 1, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY))) / 100;
if(currentT >= coolTime){
timer.Reset();//初始化
timer.Start(10000,0);//计时开始
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut");
local element = addAppendage.getVar("elementIndex").getInt(10);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_CHANGESWORD, -1, 2, 1.0);
switch(element){
case 1: totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_CHANGESWORD, -1, 2, 1.0); break;
case 2: totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_CHANGESWORD, -1, 9, 1.0); break;
case 3: totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_CHANGESWORD, -1, 6, 1.0); break;
}
if(obj.getWeaponSubType() == 1 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY) > 0)
totalDamage = totalDamage * (100 + sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY, 9, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY))) / 100;
else if(obj.getVar("elementalsword").get_obj_vector_size() > 0)
totalDamage = totalDamage * (100 + sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY, 0)) / 100;
local z = sq_GetCenterZPos(bounding_box);
if(element == 3) z = 0;
local group = sq_GetGroup(damager);
local uniqueId = sq_GetUniqueId(damager);
// if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/magicswordup/ap_magicswordup.nut")){
// if(obj.getWeaponSubType() == 0) cearteSkillPassiveObj_AtSwordMan_bykk(obj,damager,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,z,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_CHANGESWORD,1,totalDamage,element,group,uniqueId,0,0,0,0,1);
// }
// else
cearteSkillPassiveObj_AtSwordMan_bykk(obj,damager,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,z,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_CHANGESWORD,1,totalDamage,element,group,uniqueId,0,0,0,0,1);
local weaponType = obj.getWeaponSubType();//0短1太2钝3巨
switch(weaponType){
case 0:
if(sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY) < 0) break;
local effectObj = obj.getVar("elementalsword").get_obj_vector(0);
if(effectObj){
local colObj = sq_GetCNRDObjectToCollisionObject(effectObj);
local element = colObj.getVar("custom").getInt(10);
totalDamage = totalDamage * sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY, 0) / 100;
if(element == 3) z = 0;
else if(z == 0 && element != 3) z = sq_GetCenterZPos(bounding_box);
cearteSkillPassiveObj_AtSwordMan_bykk(obj,damager,PASSIVEOBJECT_BYKK_SWORDMASTER,0,0,z,obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_CHANGESWORD,1,totalDamage,element,group,uniqueId,0,0,0,0,1);
}
break;
case 1:
case 2:
case 3:
local effectObj = obj.getVar("elementalsword").get_obj_vector(0);
if(effectObj){
local colObj = sq_GetCNRDObjectToCollisionObject(effectObj);
local state = colObj.getState();
switch(state % 10){
case 0: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/fire/fireswordend_04.ani", 0, 0, 0); break;
case 1: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/ice/iceswordend_04.ani", 0, 0, 0); break;
case 2: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/dark/darkswordend_04.ani", 0, 0, 0); break;
case 3: sq_AddDrawOnlyAniFromParent(colObj, "passiveobject/atswordman_bykk/swordmaster/animation/atelementalsword/light/lightswordend_04.ani", 0, 0, 0); break;
}
colObj.setValid(false);
}
break;
}
}
}
function isMagicSwordUp_Attack(obj,damager,bounding_box)
{
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/magicswordup/ap_magicswordup.nut")) return;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")) return;
local timer = obj.getVar("isMagicSwordUp").get_ct_vector(0);
if(!timer){
obj.getVar("isMagicSwordUp").clear_ct_vector();
obj.getVar("isMagicSwordUp").push_ct_vector();
timer = obj.getVar("isMagicSwordUp").get_ct_vector(0);
timer.Reset();
timer.Start(10000,0);
}
local currentT = timer.Get();
local coolTime = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 4);
if(obj.getWeaponSubType() == 0 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY) > 0) coolTime = coolTime * (100 - sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY, 1, sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY))) / 100;
print("coolTime = "+coolTime);
if(currentT >= coolTime){
timer.Reset();//初始化
timer.Start(10000,0);//计时开始
local loadSlot = obj.sq_GetSkillLoad(SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT);
if(loadSlot && loadSlot.getRemainLoadNumber() < sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDSHOOT, 0)) loadSlot.increaseLoadCount(1);
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut");
local element = addAppendage.getVar("elementIndex").getInt(10);
local skill_level = sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 5, 1.0) + 100, level = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 2, skill_level), prob = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 7, skill_level), time = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 9, skill_level), damage = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 8, skill_level);
switch(element){
case 1://冰
totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 1, 1.0) + 100;
prob = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 4, skill_level);
time = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 3, skill_level);
break;
case 2://暗
totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 0, 1.0) + 100;
prob = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 13, skill_level);
time = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 11, skill_level);
break;
case 3: totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 10, 1.0) + 100; break;//光
}
if(obj.getWeaponSubType() == 0 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY) > 0) totalDamage = totalDamage * (1000 + sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY, 1)) / 1000;
local z = sq_GetCenterZPos(bounding_box);
local x = 0;
if(element == 1){x = 50;z = z - 30;}
cearteSkillPassiveObj_AtSwordMan_bykk(obj,damager,PASSIVEOBJECT_BYKK_SWORDMASTER,x,0,z + sq_getRandom(-10, 10),obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_MAGICSWORDUP,element,totalDamage,level,prob,time,damage,0,0,0,1);
if(obj.getWeaponSubType() == 0 && sq_GetSkillLevel(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY) > 0){
local effectObj = obj.getVar("elementalsword").get_obj_vector(0);
if(effectObj){
local colObj = sq_GetCNRDObjectToCollisionObject(effectObj);
local element = colObj.getVar("custom").getInt(10);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 5, 1.0) + 100, level = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 2, skill_level), prob = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 7, skill_level), time = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 9, skill_level), damage = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 8, skill_level);
switch(element){
case 1://冰
totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 1, 1.0) + 100;
prob = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 4, skill_level);
time = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 3, skill_level);
break;
case 2://暗
totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 0, 1.0) + 100;
prob = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 13, skill_level);
time = sq_GetLevelData(obj, SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, 11, skill_level);
break;
case 3: totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_SWORDMASTER_BYKK_MAGICSWORDUP, -1, 10, 1.0) + 100; break;//光
}
local x = 0;
totalDamage = totalDamage * sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_SHORTSWORDMASTERY, 0) / 100;
if(element == 1){x = 50;z = z - 30;}
cearteSkillPassiveObj_AtSwordMan_bykk(obj,damager,PASSIVEOBJECT_BYKK_SWORDMASTER,x,0,z + sq_getRandom(-10, 10),obj.getDirection(),1,SKILL_SWORDMASTER_BYKK_MAGICSWORDUP,element,totalDamage,level,prob,time,damage,0,0,0,1);
}
}
}
}
function setWeaponMaster_attackElement(obj)
{
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut")){
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/atswordman/1_swordmaster/changesword/ap_changesword.nut");
local element = addAppendage.getVar("elementIndex").getInt(10);
local elemantalInfo = [ENUM_ELEMENT_FIRE,ENUM_ELEMENT_WATER,ENUM_ELEMENT_DARK,ENUM_ELEMENT_LIGHT];
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(!attackInfo.isValidElement(elemantalInfo[element])) attackInfo.setElement(elemantalInfo[element]);
}
local effectObj = obj.getVar("elementalsword").get_obj_vector(0);
if(effectObj){
local colObj = sq_GetCNRDObjectToCollisionObject(effectObj);
local element = colObj.getVar("custom").getInt(10);
local elemantalInfo = [ENUM_ELEMENT_FIRE,ENUM_ELEMENT_WATER,ENUM_ELEMENT_DARK,ENUM_ELEMENT_LIGHT];
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(!attackInfo.isValidElement(elemantalInfo[element])) attackInfo.setElement(elemantalInfo[element]);
}
}
function startSkillCoolTime_SwordMaster_bykk(obj, skillIndex, skillLevel, currentCoolTime)
{
if(obj.getVar("Drawsword_cooltime").getBool(0)){
obj.getVar("Drawsword_cooltime").setBool(0, false);
local decreaseRate = sq_GetIntData(obj, SKILL_SWORDMASTER_BYKK_BLADEMASTERY, 1);
local coolTime = currentCoolTime * (100 - decreaseRate) / 100;
return coolTime;
}
}
function SetAddskillLevel_bykk(obj)
{
//
if(sq_GetSkillLevel(obj, 254) > 0){
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/gunner/latentability/ap_addskilllevel.nut")) CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/gunner/latentability/ap_addskilllevel.nut", true);
}
/**/
}
function resetDungeonStart_bykk(obj, moduleType, resetReason, isDeadTower, isResetSkillUserCount)
{
//
// if(sq_GetSkillLevel(obj, 254) > 0){
// if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/gunner/latentability/ap_addskilllevel.nut")) CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/gunner/latentability/ap_addskilllevel.nut", true);
// else{
// local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/gunner/latentability/ap_addskilllevel.nut");
// if(addAppendage) addAppendage.getVar("value").setInt(0, 0);
// }
// }
}
function proc_appendage_addskilllevelbykk(appendage)
{
if(!appendage) return;
local obj = appendage.getParent();
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj);
if(!sqrChr || sqrChr.getState() == STATE_DIE){
appendage.setValid(false);
return;
}
local t = appendage.getVar("time").get_timer_vector(0);
local currentT = appendage.getTimer().Get();
if(t && t.isOnEvent(currentT)){
local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_LATENTABILITY);
local value = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 50, skillLevel); //1-50級技能等級
local sqrJob = sq_getJob(sqrChr);
if(ADD_SKILLLEVEL.rawget(sqrJob) && value > 0){
// if(value != appendage.getVar("value").getInt(0)){
// appendage.getVar("value").setInt(0, value);
foreach(sklindex in ADD_SKILLLEVEL.rawget(sqrJob)){
addSkillLevelTime(sqrChr, sklindex, value, 3000);
}
return;
// }
}
}
}
function onStart_appendage_addskilllevelbykk(appendage)
{
if(!appendage) return;
appendage.getVar("time").clear_timer_vector();
appendage.getVar("time").push_timer_vector();
local t_01 = appendage.getVar("time").get_timer_vector(0);
t_01.setParameter(3000, -1);
t_01.resetInstant(0);
appendage.getVar("value").setInt(0, 0);
print("load");
}
function onEnd_appendage_addskilllevelbykk(appendage)
{
if(!appendage) return;
}