2762 lines
109 KiB
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;
|
|
}
|
|
|