Rindro-Sqr/user/114.66.45.221/6_mage_2.c

3355 lines
137 KiB
C
Raw Normal View History

2025-11-08 12:21:06 +08:00
function checkExecutableSkill_ChasersExplosion(obj)
{
if (!obj) return false;
local size = obj.getVar("kksChaser").get_obj_vector_size();
if(size < 1){
if (obj.isMessage()) sq_AddMessage(3573);
return false;
}
if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CHASERSEXPLOSION);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_CHASERSEXPLOSION, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_ChasersExplosion(obj)
{
if (!obj) return false;
return true;
}
function onSetState_ChasersExplosion(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
obj.sq_ZStop();
switch(subState){
case 0:
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){
obj.sq_SetCurrentAnimation(221);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.5, 1.5);
obj.sq_PlaySound("WZ_PRECENCIA_CHASERPRESS_1");
obj.sq_PlaySound("PRECENCIA_CHASERPRESS_1_CAST");
}
else{
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){
local Ani = getCurrentAnimation_precencia(obj, "ChasersExplosion", false, false);
obj.setCurrentAnimation(Ani);
}
else obj.sq_SetCurrentAnimation(8);
obj.sq_PlaySound("WZ_CHASERP_02");
}
local speed = 1.0;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) speed = 0.3 + speed;
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) speed = 0.5 + speed;
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed);
local size = obj.getVar("kksChaser").get_obj_vector_size();
obj.getVar("chasersexp").setInt(10, size);
local delaySum = 300;
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(0, 2);
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){
obj.setTimeEvent(0, delay / 10, 10, true);
obj.setTimeEvent(1, delay, 1, false);
}
else{
obj.setTimeEvent(10, delay, 1, false);
}
sq_SetFrameDelayTime(currentAni, 6, delaySum);
obj.getVar("ChasersExplosion_damage").setInt(10, 0);
break;
}
}
function onEndCurrentAni_ChasersExplosion(obj)
{
if(!obj) return;
if(sq_GetZPos(obj) > 0){
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(100);
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true);
}
else{
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
}
}
function onProcCon_ChasersExplosion(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
break;
}
}
function onKeyFrameFlag_ChasersExplosion(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 11:
obj.sq_PlaySound("R_WZ_PRECENCIA_CHASERPRESS_2");
obj.sq_PlaySound("PRECENCIA_CHASERPRESS_2_CHASER");
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CHASERSEXPLOSION, -1, 0, 1.0);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHASERSEXPLOSION);
local baseSRate = sq_GetIntData(obj, SKILL_BYKK_CHASERSEXPLOSION, 0);
print("baseSRate = "+baseSRate);
local addSRate = sq_GetIntData(obj, SKILL_BYKK_CHASERSEXPLOSION, 2) / 10;
// if(sq_GetSkillLevel(obj, SKILL_BYKK_POLEMASTERY) > 0 && obj.getWeaponSubType() == 1) baseSRate = baseSRate + sq_GetIntData(obj, SKILL_BYKK_POLEMASTERY, 2) / 10;
baseSRate = baseSRate + obj.getVar("chasersexp").getInt(10) * addSRate;
print("test1 = "+obj.getVar("chasersexp").getInt(10));
print("test2 = "+addSRate);
print("test3 = "+baseSRate);
// if(sq_GetSkillLevel(obj, SKILL_BYKK_POLEMASTERY) > 0 && obj.getWeaponSubType() == 1) baseSRate = baseSRate * (100 + sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 2)) / 100;
// totalDamage = totalDamage * obj.getVar("ChasersExplosion_damage").getInt(10) / 100;
print("totalDamage = "+totalDamage);
cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,1,0,obj.getDirection(),SKILL_BYKK_CHASERSEXPLOSION,2,totalDamage,baseSRate,1,0,0,0,0,0);
break;
case 12:
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHASERSEXPLOSION);
local baseSRate = sq_GetLevelData(obj, SKILL_BYKK_CHASERSEXPLOSION, 1, skillLevel);
local addSRate = sq_GetLevelData(obj, SKILL_BYKK_CHASERSEXPLOSION, 3, skillLevel) / 10;
// if(sq_GetSkillLevel(obj, SKILL_BYKK_POLEMASTERY) > 0 && obj.getWeaponSubType() == 1) baseSRate = baseSRate + sq_GetIntData(obj, SKILL_BYKK_POLEMASTERY, 2) / 10;
baseSRate = baseSRate + obj.getVar("chasersexp").getInt(10) * addSRate;
createOnlyDrawObjectEX_Battlemage_bykk(obj,"character/mage/effect/animation/battlemage_bykk/chasersexplosion/precencia/chaserexplosionbottom_09.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj)*0,ENUM_DRAWLAYER_BOTTOM,baseSRate,baseSRate);
createOnlyDrawObjectEX_Battlemage_bykk(obj,"character/mage/effect/animation/battlemage_bykk/chasersexplosion/precencia/chaserexplosionfront_07.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj) + 1,sq_GetZPos(obj)*0,ENUM_DRAWLAYER_NORMAL,baseSRate,baseSRate);
sq_SetMyShake(obj, 8, 160);
break;
case 13: obj.sq_PlaySound("PRECENCIA_CHASERPRESS_3_FINISH"); break;
}
return true;
}
function onTimeEvent_ChasersExplosion(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 0:
local vz = sq_GetUniformVelocity(0, 50, timeEventCount, 10);
sq_setCurrentAxisPos(obj, 2, vz);
break;
case 1:
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(3, 6);
local delay2 = currentAni.getDelaySum(3, 9);
cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,-70,0,50,obj.getDirection(),SKILL_BYKK_CHASERSEXPLOSION,1,delay,0,0,0,0,0,0,0);
obj.setTimeEvent(2, delay2, 1, false);
local baseX = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), -75);
local baseZ = 88;
local size = obj.getVar("kksChaser").get_obj_vector_size();
for(local i = 0; i < size; i++){
local chaserObj = obj.getVar("kksChaser").get_obj_vector(i);
if(chaserObj){
local colObj = sq_GetCNRDObjectToCollisionObject(chaserObj);
if(colObj.getState() > 22) colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
colObj.removeAllTimeEvent();
local angle = 360 / size * i;
local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 60.0).tointeger();
local z = (sq_Sin(sq_ToRadian(angle.tofloat())) * 60.0).tointeger();
colObj.getVar("moveSet").setInt(10, baseX + x);
colObj.getVar("moveSet").setInt(11, baseZ + z);
colObj.getVar("moveSet").setInt(12, baseX);
colObj.getVar("moveSet").setInt(13, baseZ);
colObj.getVar("moveSet").setInt(14, delay);
colObj.setTimeEvent(15, delay / 45, 15, true);
// local totalDamage = obj.getVar("ChasersExplosion_damage").getInt(10) + colObj.getVar("custom").getInt(10);
// obj.getVar("ChasersExplosion_damage").setInt(10, totalDamage);
// print(obj.getVar("ChasersExplosion_damage").getInt(10));
}
}
break;
case 2:
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CHASERSEXPLOSION, -1, 0, 1.0);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHASERSEXPLOSION);
local baseSRate = sq_GetIntData(obj, SKILL_BYKK_CHASERSEXPLOSION, 0);
print("baseSRate = "+baseSRate);
local addSRate = sq_GetIntData(obj, SKILL_BYKK_CHASERSEXPLOSION, 2) / 10;
// if(sq_GetSkillLevel(obj, SKILL_BYKK_POLEMASTERY) > 0 && obj.getWeaponSubType() == 1) baseSRate = baseSRate + sq_GetIntData(obj, SKILL_BYKK_POLEMASTERY, 2) / 10;
baseSRate = baseSRate + obj.getVar("chasersexp").getInt(10) * addSRate;
// if(sq_GetSkillLevel(obj, SKILL_BYKK_POLEMASTERY) > 0 && obj.getWeaponSubType() == 1) baseSRate = baseSRate * (100 + sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 2)) / 100;
// totalDamage = totalDamage * obj.getVar("ChasersExplosion_damage").getInt(10) / 100;
print("test1 = "+obj.getVar("chasersexp").getInt(10));
print("test2 = "+addSRate);
print("test3 = "+baseSRate);
print("totalDamage = "+totalDamage);
cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,75,1,0,obj.getDirection(),SKILL_BYKK_CHASERSEXPLOSION,2,totalDamage,baseSRate,0,0,0,0,0,0);
break;
case 10:
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(3, 6);
local baseX = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 5);
local baseZ = 240;
local size = obj.getVar("kksChaser").get_obj_vector_size();
for(local i = 0; i < size; i++){
local chaserObj = obj.getVar("kksChaser").get_obj_vector(i);
if(chaserObj){
local colObj = sq_GetCNRDObjectToCollisionObject(chaserObj);
if(colObj.getState() > 22) colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
colObj.removeAllTimeEvent();
local angle = 360 / size * i;
local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 80.0).tointeger();
local z = (sq_Sin(sq_ToRadian(angle.tofloat())) * 80.0).tointeger();
colObj.getVar("moveSet").setInt(10, baseX + x);
colObj.getVar("moveSet").setInt(11, baseZ + z);
colObj.getVar("moveSet").setInt(12, baseX);
colObj.getVar("moveSet").setInt(13, baseZ);
colObj.getVar("moveSet").setInt(14, delay);
colObj.setTimeEvent(15, delay / 45, 15, true);
// local totalDamage = obj.getVar("ChasersExplosion_damage").getInt(10) + colObj.getVar("custom").getInt(10);
// obj.getVar("ChasersExplosion_damage").setInt(10, totalDamage);
// print(obj.getVar("ChasersExplosion_damage").getInt(10));
}
}
break;
}
}
function onEndState_ChasersExplosion(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_BYKK_CHASERSEXPLOSION && new_state != STATE_DIE){
local createMax = sq_GetLevelData(obj, SKILL_BYKK_CHASERSEXPLOSION, 16, sq_GetSkillLevel(obj, SKILL_BYKK_CHASERSEXPLOSION));
for(local i = 0; i < createMax; i++){
createBattlemageChaser(obj);
}
}
}
function checkExecutableSkill_DoubleSwing(obj)
{
if (!obj) return false;
if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DOUBLESWING);
if (isUse){
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2);
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1);
else obj.getVar("skillSub").setInt(100, 0);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_BYKK_DOUBLESWING, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_DoubleSwing(obj)
{
if (!obj) return false;
return true;
}
function onSetState_DoubleSwing(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
if(obj.getVar("skillSub").getInt(100) == 1){
local Ani = getCurrentAnimation_precencia(obj, "Doubleswing1", false, false);
obj.setCurrentAnimation(Ani);
}
else if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_SetCurrentAnimation(226);
else obj.sq_SetCurrentAnimation(65);
break;
case 1:
if(obj.getVar("skillSub").getInt(100) == 1){
local Ani = getCurrentAnimation_precencia(obj, "Doubleswing2", false, false);
obj.setCurrentAnimation(Ani);
}
else if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_SetCurrentAnimation(227);
else obj.sq_SetCurrentAnimation(66);
break;
}
local speed = 1.0;
if(obj.getVar("skillSub").getInt(100) == 1) speed = 0.3 + speed;
else if(obj.getVar("skillSub").getInt(100) == 2) speed = 0.5 + speed;
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed);
local atkIndex = [35,36];
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_DOUBLESWING);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DOUBLESWING, -1, subState, 1.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex[subState]));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(attackInfo){
attackInfo.setAttackType(ATTACKTYPE_PHYSICAL);
sq_SetAddWeaponDamage(attackInfo, true);
}
}
function onEndCurrentAni_DoubleSwing(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(SKILL_BYKK_DOUBLESWING, STATE_PRIORITY_AUTO, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_DoubleSwing(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_DoubleSwing(obj, flagIndex)
{
if(!obj) return false;
if(flagIndex == 1){
sq_SetMyShake(obj, 5, 100);
switch(obj.getSkillSubState()){
case 0:
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/doubleswing/doubleswing1_02.ani", 0, 1, 0);
obj.sq_PlaySound("R_WZ_PRECENCIA_DOUBLESWING_1");
obj.sq_PlaySound("PRECENCIA_DOUBLESWING_1");
}
else obj.sq_PlaySound("WZ_DOUBLE_SWING_01");
break;
case 1:
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){
obj.sq_PlaySound("R_WZ_PRECENCIA_DOUBLESWING_2");
obj.sq_PlaySound("PRECENCIA_DOUBLESWING_2");
}
else obj.sq_PlaySound("R_WZ_DOUBLE_SWING_02");
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DOUBLESWING, -1, 2, 1.0) + 100;
local sizeRate = sq_GetLevelData(obj, SKILL_BYKK_DOUBLESWING, 3, sq_GetSkillLevel(obj, SKILL_BYKK_DOUBLESWING));
if(sq_GetSkillLevel(obj, SKILL_BYKK_SPEARMASTERY) > 0) sizeRate = sizeRate * (100 + sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 2)) / 100;
cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,150,0,0,obj.getDirection(),SKILL_BYKK_DOUBLESWING,1,totalDamage,sizeRate,0,0,0,0,0,0);
break;
}
}
return true;
}
function onTimeEvent_DoubleSwing(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_DoubleSwing(obj, new_state)
{
if(!obj) return;
}
function checkExecutableSkill_DragonSpear(obj)
{
if (!obj) return false;
if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DRAGONSPEAR);
if (isUse){
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2);
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1);
else obj.getVar("skillSub").setInt(100, 0);
obj.getVar("dragonspearTar").clear_obj_vector();
obj.getVar("dragonspearTar_fix").clear_obj_vector();
if(sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONDANCE) > 0 && !sq_GetSkill(obj, SKILL_BYKK_DRAGONDANCE).isSealFunction()){
obj.sq_IntVectClear();
if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_IntVectPush(12);
else{
if(DRAGONSPEAR_STONE > 0 || sq_GetLevelData(obj, SKILL_BYKK_DRAGONSPEAR, 15, sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONSPEAR)) > 0) obj.sq_IntVectPush(2);
else obj.sq_IntVectPush(1);
}
obj.sq_AddSetStatePacket(SKILL_BYKK_DRAGONSPEAR, STATE_PRIORITY_IGNORE_FORCE, true);
}
else{
obj.sq_IntVectClear();
if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_IntVectPush(10);
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_BYKK_DRAGONSPEAR, STATE_PRIORITY_IGNORE_FORCE, true);
}
return true;
}
return false;
}
function checkCommandEnable_DragonSpear(obj)
{
if (!obj) return false;
return true;
}
function onSetState_DragonSpear(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0://普通形態
if(obj.getVar("skillSub").getInt(100) == 1){
local Ani = getCurrentAnimation_precencia(obj, "DragonSpear", false, false);
obj.setCurrentAnimation(Ani);
}
else obj.sq_SetCurrentAnimation(17);
obj.sq_AddStateLayerAnimation(10002,obj.sq_CreateCNRDAnimation("effect/animation/avatar/dragonspear/spearattack1.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/avatar/dragonspear/spearattack2.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(10000,obj.sq_CreateCNRDAnimation("effect/animation/avatar/dragonspear/spearattack3.ani"), 0, 0);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 0, 1.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 15));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
case 1://煌龍亂舞普通形態
if(obj.getVar("skillSub").getInt(100) == 1){
local Ani = getCurrentAnimation_precencia(obj, "DragonSpearNew_Body", false, false);
obj.setCurrentAnimation(Ani);
}
else obj.sq_SetCurrentAnimation(99);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 7, 1.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 58));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
obj.getVar("DragonSpearBool").setBool(0, true);
break;
case 2://煌龍亂舞護石形態
if(obj.getVar("skillSub").getInt(100) == 1){
local Ani = getCurrentAnimation_precencia(obj, "DragonSpearNew_Body_Talisman", false, false);
obj.setCurrentAnimation(Ani);
}
else obj.sq_SetCurrentAnimation(284);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 7, 1.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 58));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
obj.getVar("DragonSpearBool").setBool(0, true);
break;
case 10://三覺形態準備
obj.sq_SetCurrentAnimation(234);
break;
case 11://三覺形態釋放
obj.sq_SetCurrentAnimation(233);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 0, 1.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 15));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
case 12://三覺形態煌龍亂舞開始
obj.sq_SetCurrentAnimation(232);
obj.getVar("DragonSpearBool").setBool(0, true);
break;
case 13://三覺形態煌龍亂舞過程
obj.sq_SetCurrentAnimation(231);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 7, 1.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 61));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
case 14://三覺形態煌龍亂舞過程(護石)
obj.sq_SetCurrentAnimation(230);
break;
case 15://三覺形態煌龍亂舞結束
obj.sq_SetCurrentAnimation(229);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 7, 1.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 60));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
}
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(attackInfo){
attackInfo.setAttackType(ATTACKTYPE_PHYSICAL);
sq_SetAddWeaponDamage(attackInfo, true);
}
local speedRate = 1.0 + sq_GetLevelData(obj, SKILL_BYKK_DRAGONSPEAR, 2, sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONSPEAR)).tofloat() / 100;
if(obj.getVar("skillSub").getInt(100) == 1) speedRate = 0.3 + speedRate;
else if(obj.getVar("skillSub").getInt(100) == 2) speedRate = 0.5 + speedRate;
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate);
if(subState == 0 || subState == 11 && sq_GetLevelData(obj, SKILL_BYKK_DRAGONSPEAR, 15, sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONSPEAR)) < 1){
local currentAni = obj.getCurrentAnimation();
obj.sq_SetXScrollStart(300, currentAni.getDelaySum(0, 6));
}
}
function onEndCurrentAni_DragonSpear(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
case 2:
case 11:
case 15:
obj.sq_SetXScrollStop(0);
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
if(subState == 0){
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/avatar/dragonspear/speardisappear1.ani", 0, 0, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/avatar/dragonspear/speardisappear2.ani", 0, 1, 0);
}
break;
case 10:
case 12:
case 14:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_BYKK_DRAGONSPEAR, STATE_PRIORITY_AUTO, true);
break;
case 13:
obj.sq_IntVectClear();
if(DRAGONSPEAR_STONE > 0 || sq_GetLevelData(obj, SKILL_BYKK_DRAGONSPEAR, 15, sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONSPEAR)) > 0) obj.sq_IntVectPush(subState + 1);
else obj.sq_IntVectPush(subState + 2);
obj.sq_AddSetStatePacket(SKILL_BYKK_DRAGONSPEAR, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_DragonSpear(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
case 2:
case 12:
case 13:
if(obj.getVar("DragonSpearBool").getBool(0)){
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT){
obj.getVar("DragonSpearBool").setBool(0, false);
}
}
break;
}
}
function onKeyFrameFlag_DragonSpear(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1000:
obj.sq_PlaySound("YELLOWD_CHARGE");
obj.sq_PlaySound("R_WZ_DRAGONDANCE");
break;
case 1001://生成龍刀
break;
case 1002://生成龍珠後攻擊
if(obj.getVar("dragonspearTar_fix").get_obj_vector_size() < 1 && obj.getVar("dragonspearTar").get_obj_vector_size() < 1 || sq_GetLevelData(obj, SKILL_BYKK_DRAGONSPEAR, 15, sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONSPEAR)) > 0){
obj.setTimeEvent(1, 300, 1, false);
break;
}
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 1, 1.0) + 100;
local sizeRate = (obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 3, 1.0) + 100) * 83 / 100;
local currentAni = obj.getCurrentAnimation();
local speedRate = 72000 / currentAni.getDelaySum(0, 0);
local createMax = sq_GetIntData(obj, SKILL_BYKK_DRAGONSPEAR, 0);
local baseAngle = sq_getRandom(0, 90);
for(local i = 0; i < createMax; i++){
local angle = 360 / createMax * i + baseAngle;
local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 90.0).tointeger();
local z = (sq_Sin(sq_ToRadian(angle.tofloat())) * 90.0).tointeger();
cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,300+x,0,50+z,obj.getDirection(),SKILL_BYKK_DRAGONSPEAR,2,totalDamage,sizeRate,i,50,speedRate,0,0,0);
}
local delay = (2300 + createMax * 200) / speedRate * 100;
obj.setTimeEvent(0, delay, 1, false);
break;
case 2001:
case 3001:
obj.sq_PlaySound("YELLOWD_CHARGE");
obj.sq_PlaySound("R_WZ_DRAGONDANCE");
break;
case 2002:
case 3002:
obj.sq_PlaySound("DRAGONDANCE_STAB");
sq_flashScreen(obj, 0, 30, 30, 7, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 4, 80);
break;
case 2003:
case 2007:
case 3003:
case 3008:
obj.sq_PlaySound("DRAGONDANCE_SWISH");
sq_flashScreen(obj, 0, 30, 30, 7, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 4, 100);
obj.resetHitObjectList();
if(obj.getVar("DragonSpearBool").getBool(0) == false) {sq_SetVelocity(obj, 0, 0.0);break;}
local speed = 300.0;
if(obj.getDirection() == ENUM_DIRECTION_LEFT) speed = -speed;
if(flagIndex == 2003 || flagIndex == 3003) sq_SetVelocity(obj, 0, speed);
else sq_SetVelocity(obj, 0, 0.0);
break;
case 2004:
case 2005:
case 3004:
obj.sq_PlaySound("DRAGONDANCE_SWISH");
sq_flashScreen(obj, 0, 30, 30, 7, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 4, 80);
obj.resetHitObjectList();
if(obj.getVar("DragonSpearBool").getBool(0) == false) {sq_SetVelocity(obj, 0, 0.0);break;}
local speed = 300.0;
if(obj.getDirection() == ENUM_DIRECTION_LEFT) speed = -speed;
if(flagIndex == 2004 || flagIndex == 3004) sq_SetVelocity(obj, 0, speed);
else sq_SetVelocity(obj, 0, 0.0);
break;
case 2006:
case 3006:
obj.resetHitObjectList();
if(obj.getVar("DragonSpearBool").getBool(0) == false) {sq_SetVelocity(obj, 0, 0.0);break;}
local speed = 300.0;
if(obj.getDirection() == ENUM_DIRECTION_LEFT) speed = -speed;
sq_SetVelocity(obj, 0, speed);
break;
case 2007:
case 3007:
obj.resetHitObjectList();
sq_SetVelocity(obj, 0, 0.0);
break;
case 2008:
case 3009:
if(obj.getVar("DragonSpearBool").getBool(0) == false) {sq_SetVelocity(obj, 0, 0.0);break;}
local speed = 300.0;
if(obj.getDirection() == ENUM_DIRECTION_LEFT) speed = -speed;
sq_SetVelocity(obj, 0, speed);
break;
case 2009:
case 3010:
obj.sq_PlaySound("DRAGONDANCE_FINISH");
sq_flashScreen(obj, 0, 80, 100, 51, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 15, 180);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 8, 1.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 59));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
case 2010:
case 3011:
sq_SetVelocity(obj, 0, 0.0);
break;
case 3012:
obj.sq_PlaySound("R_WZ_DRAGONDANCE_FIN");
obj.sq_PlaySound("DRAGONDANCE_FINISH");
obj.sq_PlaySound("BLAST_SWORD_EXP");
sq_flashScreen(obj, 10, 100, 10, 51, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 20, 120);
//`add finish exp` 149 1 -7
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 8, 1.0) + 100;
totalDamage = totalDamage * 18 / 100;
local sizeRate = 100;
cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,149,1,-7,obj.getDirection(),SKILL_BYKK_DRAGONSPEAR,1,totalDamage,sizeRate,0,0,0,0,0,0);
break;
case 1101:
obj.sq_PlaySound("YELLOWD_CHARGE");
obj.sq_PlaySound("R_WZ_PRECENCIA_DRAGONSPEAR_1");
break;
case 1102://生成龍珠後攻擊
if(obj.getVar("dragonspearTar_fix").get_obj_vector_size() < 1 && obj.getVar("dragonspearTar").get_obj_vector_size() < 1 || sq_GetLevelData(obj, SKILL_BYKK_DRAGONSPEAR, 15, sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONSPEAR)) > 0){
obj.setTimeEvent(1, 300, 1, false);
break;
}
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 1, 1.0) + 100;
local sizeRate = (obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 3, 1.0) + 100) * 83 / 100;
local currentAni = obj.getCurrentAnimation();
local speedRate = 5100 / currentAni.getDelaySum(0, 0);
local createMax = sq_GetIntData(obj, SKILL_BYKK_DRAGONSPEAR, 0);
local baseAngle = sq_getRandom(0, 90);
for(local i = 0; i < createMax; i++){
local angle = 360 / createMax * i + baseAngle;
local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 90.0).tointeger();
local z = (sq_Sin(sq_ToRadian(angle.tofloat())) * 90.0).tointeger();
cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,300+x,0,100+z,obj.getDirection(),SKILL_BYKK_DRAGONSPEAR,2,totalDamage,sizeRate,i,100,speedRate,0,0,0);
}
local delay = (2000 + createMax * 200) / speedRate * 100;
obj.setTimeEvent(0, delay, 1, false);
break;
case 1201: obj.sq_PlaySound("YELLOWD_CHARGE"); break;
case 1202: obj.sq_PlaySound("R_WZ_PRECENCIA_DRAGONDANCE_1"); break;
case 1301:
case 1303:
case 1305:
obj.sq_PlaySound("PRECENCIA_DRAGONDANCE_1");
sq_flashScreen(obj, 0, 30, 30, 20, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 3, 80);
if(flagIndex > 1301) obj.resetHitObjectList();
if(obj.getVar("DragonSpearBool").getBool(0) == false) {sq_SetVelocity(obj, 0, 0.0);break;}
local speed = 300.0;
if(obj.getDirection() == ENUM_DIRECTION_LEFT) speed = -speed;
sq_SetVelocity(obj, 0, speed);
break;
case 1302: sq_SetVelocity(obj, 0, 0.0); break;
case 1304:
case 1306:
case 1307:
if(flagIndex == 1306) obj.sq_PlaySound("PRECENCIA_DRAGONDANCE_2");
else if(flagIndex == 1307) obj.resetHitObjectList();
if(obj.getVar("DragonSpearBool").getBool(0) == false) {sq_SetVelocity(obj, 0, 0.0);break;}
local speed = 300.0;
if(obj.getDirection() == ENUM_DIRECTION_LEFT) speed = -speed;
sq_SetVelocity(obj, 0, speed);
break;
case 1308:
obj.sq_PlaySound("R_WZ_PRECENCIA_DRAGONDANCE_2");
obj.sq_PlaySound("PRECENCIA_DRAGONDANCE_3");
sq_flashScreen(obj, 0, 80, 200, 76, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 20, 150);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 8, 1.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 59));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
if(sq_GetLevelData(obj, SKILL_BYKK_DRAGONSPEAR, 15, sq_GetSkillLevel(obj, SKILL_BYKK_DRAGONSPEAR)) < 1) break;
totalDamage = totalDamage * 18 / 100;
local sizeRate = 130;
cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,220,0,-2,obj.getDirection(),SKILL_BYKK_DRAGONSPEAR,1,totalDamage,sizeRate,0,0,0,0,0,0);
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/dragondance_finish_25.ani", 0, 1, -1);
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/dragondance_finish_24.ani", 0, 1, -1);
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/dragondance_finish_00.ani", 0, 1, -1000);
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/dragondance_finish_01.ani", 0, 1, -1000);
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/dragondance_finish_05.ani", 0, 1, 0);
break;
case 1401:
obj.sq_PlaySound("PRECENCIA_DRAGONDANCE_1");
sq_flashScreen(obj, 0, 30, 30, 20, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 3, 80);
if(obj.getSkillSubState() == 14) obj.resetHitObjectList();
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/talisman/talisman_mid_14.ani", 0, -1, 0);
if(obj.getVar("DragonSpearBool").getBool(0) == false) {sq_SetVelocity(obj, 0, 0.0);break;}
local speed = 300.0;
if(obj.getDirection() == ENUM_DIRECTION_LEFT) speed = -speed;
sq_SetVelocity(obj, 0, speed);
break;
case 1402:
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/talisman/talisman_mid_13.ani", 0, -1, 0);
break;
case 1403:
obj.sq_PlaySound("PRECENCIA_DRAGONDANCE_1");
obj.resetHitObjectList();
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/talisman/talisman_mid_22.ani", 0, -1, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/talisman/talisman_mid_23.ani", 0, -1, 0);
sq_flashScreen(obj, 0, 30, 30, 20, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 3, 80);
if(obj.getVar("DragonSpearBool").getBool(0) == false) {sq_SetVelocity(obj, 0, 0.0);break;}
local speed = 300.0;
if(obj.getDirection() == ENUM_DIRECTION_LEFT) speed = -speed;
sq_SetVelocity(obj, 0, speed);
break;
case 1404:
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/talisman/talisman_mid_24.ani", 0, -1, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/talisman/talisman_mid_25.ani", 0, -1, 0);
break;
case 1405:
obj.resetHitObjectList();
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/talisman/talisman_mid_24.ani", 0, -1, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/talisman/talisman_mid_25.ani", 0, -1, 0);
if(obj.getVar("DragonSpearBool").getBool(0) == false) {sq_SetVelocity(obj, 0, 0.0);break;}
local speed = 300.0;
if(obj.getDirection() == ENUM_DIRECTION_LEFT) speed = -speed;
sq_SetVelocity(obj, 0, speed);
break;
case 4001:
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/dragonspear_06.ani", 0, 1, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/dragonspear/precencia/dragonspear_07.ani", 0, 1, 0);
break;
}
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(attackInfo){
attackInfo.setAttackType(ATTACKTYPE_PHYSICAL);
sq_SetAddWeaponDamage(attackInfo, true);
}
return true;
}
function onTimeEvent_DragonSpear(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 0:
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 4, 1.0) + 100;
local sizeRate = (obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DRAGONSPEAR, -1, 3, 1.0) + 100) * 83 / 100;
local zpos = 50;
if(obj.getSkillSubState() == 11) zpos = 100;
cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,300,0,zpos,obj.getDirection(),SKILL_BYKK_DRAGONSPEAR,3,totalDamage,sizeRate,0,0,0,0,0,0);
case 1:
if(obj.getSkillSubState() == 0){
obj.sq_SetXScrollStop(0);
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
}
else{
local currentAni = obj.getCurrentAnimation();
currentAni.setCurrentFrameWithChildLayer(15);
}
break;
}
}
function onEndState_DragonSpear(obj, new_state)
{
if(!obj) return;
if(new_state != SKILL_BYKK_DRAGONSPEAR){
local size = obj.getVar("dragonspearTar").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("dragonspearTar").get_obj_vector(i);
if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, DRAGONSPEAR_APDPATH);
}
}
}
}
function onAttack_DragonSpear(obj, damager, boundingBox, isStuck)
{
if(!obj) return;
if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return;
local frameIndex = sq_GetCurrentFrameIndex(obj);
if(frameIndex >= 10) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 11:
if(sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager) && !sq_IsFixture(damager)){
if(!obj.getVar("dragonspearTar").is_obj_vector(damager)) obj.getVar("dragonspearTar").push_obj_vector(damager);
local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, DRAGONSPEAR_APDPATH, true);
sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , addAppendage);
local zpos = 0;
if(subState == 11) zpos = 50;
local currentAni = obj.getCurrentAnimation();;
local delay = currentAni.getDelaySum(frameIndex, 10);
sq_MoveToAppendageForce(damager, obj, obj, 300, 0, zpos, delay / 2, true, addAppendage);
}
else if(sq_IsFixture(damager) || !sq_IsHoldable(obj,damager) || !sq_IsGrabable(obj,damager)){
if(!obj.getVar("dragonspearTar_fix").is_obj_vector(damager)) obj.getVar("dragonspearTar_fix").push_obj_vector(damager);
}
break;
}
}
function checkExecutableSkill_FusionChaser(obj)
{
if (!obj) return false;
local size = obj.getVar("kksChaser").get_obj_vector_size();
if(size < 2){
if (obj.isMessage()) sq_AddMessage(3573);
return false;
}
if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_FUSIONCHASER);
if (isUse){
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2);
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1);
else obj.getVar("skillSub").setInt(100, 0);
obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_FUSIONCHASER);
obj.getVar("fusionchaser").setBool(0, false);
obj.getVar("fusionchaser").setBool(10, false);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_BYKK_FUSIONCHASER, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_FusionChaser(obj)
{
if (!obj) return false;
return true;
}
function onSetState_FusionChaser(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
obj.getVar("fusioncs").setInt(10, 0);
if(obj.getVar("skillSub").getInt(100) == 2){
obj.sq_SetCurrentAnimation(235);
obj.sq_PlaySound("R_WZ_PRECENCIA_FUSIONCHASER_1");
obj.sq_PlaySound("PRECENCIA_FUSIONCHASER_CAST");
}
else{
if(obj.getVar("skillSub").getInt(100) == 1){
local Ani = getCurrentAnimation_precencia(obj, "Fusionchaser", false, false);
obj.setCurrentAnimation(Ani);
}
else obj.sq_SetCurrentAnimation(64);
obj.sq_PlaySound("WZ_FUSION");
}
break;
}
local sub = 2;
for(local i = 0; i < sub; i++){
local chaserObj = obj.getVar("kksChaser").get_obj_vector(i);
if(!chaserObj){
sub = sub + 1;
continue;
}
chaserObj.setValid(false);
}
local speed = 1.0;
if(obj.getVar("skillSub").getInt(100) == 1) speed = 0.3 + speed;
else if(obj.getVar("skillSub").getInt(100) == 2) speed = 0.5 + speed;
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed);
// local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_TIMERBOMB);
// local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_TIMERBOMB, -1, 0, 1.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 3));
// sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local currentAni = obj.getCurrentAnimation();
sq_SetFrameDelayTime(currentAni, 6, 100000);
}
function onEndCurrentAni_FusionChaser(obj)
{
if(!obj) return;
if(obj.getVar("fusioncs").getInt(10) == 0 && sq_GetLevelData(obj, SKILL_BYKK_FUSIONCHASER, 9, sq_GetSkillLevel(obj, SKILL_BYKK_FUSIONCHASER)) > 0){
local sub = 2,sizeRate = sq_GetIntData(obj, SKILL_BYKK_FUSIONCHASER, 4) / 2;
if(obj.getVar("skillSub").getInt(100) < 2){
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut")) sub = 4;
else sub = 3;
sizeRate = sizeRate * 2;
}
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FUSIONCHASER, -1, 0, 1.0) + 100;
sizeRate = sizeRate * (100 + sq_GetLevelData(obj, SKILL_BYKK_FUSIONCHASER, 8, sq_GetSkillLevel(obj, SKILL_BYKK_FUSIONCHASER))) / 100;
if(obj.getWeaponSubType() == 1 && sq_GetSkillLevel(obj, SKILL_BYKK_POLEMASTERY) > 0) sizeRate = sizeRate * (100 + sq_GetIntData(obj, SKILL_BYKK_POLEMASTERY, 1)) / 100;
cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,50,1,75,obj.getDirection(),SKILL_BYKK_FUSIONCHASER,sub,totalDamage,sizeRate,0,0,0,0,0,0);
}
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
}
function onProcCon_FusionChaser(obj)
{
if(!obj) return;
local frameIndex = sq_GetCurrentFrameIndex(obj);
if(frameIndex == 6){
if(obj.getVar("fusionchaser").getBool(0) == false){
obj.getVar("fusionchaser").setBool(0, true);
local sub = 0,xpos = -10, zpos = 120;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut")) sub = 1;
else if(obj.getVar("skillSub").getInt(100) == 2){
sub = 2; xpos = 0; zpos = 160;
}
cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,xpos,0,zpos,obj.getDirection(),SKILL_BYKK_FUSIONCHASER,1,sub,0,0,0,0,0,0,0);
}
local bDownKey = obj.isDownSkillLastKey();
if(!bDownKey){
local stateTime = obj.sq_GetStateTimer();
if(stateTime <= 500 || sq_GetLevelData(obj, SKILL_BYKK_FUSIONCHASER, 7, sq_GetSkillLevel(obj, SKILL_BYKK_FUSIONCHASER)) > 0) obj.getVar("fusionchaser").setBool(10, true);
local currentAni = obj.getCurrentAnimation();
currentAni.setCurrentFrameWithChildLayer(7);
if(obj.getVar("skillSub").getInt(100) == 2){
obj.sq_PlaySound("PRECENCIA_FUSIONCHASER_SHOT");
obj.sq_PlaySound("WZ_PRECENCIA_FUSIONCHASER_2");
}
}
else{
if(obj.getVar("skillSub").getInt(100) == 2){
local currentAni = obj.getCurrentAnimation();
currentAni.setCurrentFrameWithChildLayer(4);
}
}
}
}
function onKeyFrameFlag_FusionChaser(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1:
obj.getVar("fusionChaser_move").setInt(10, sq_GetXPos(obj));
local currentAni = obj.getCurrentAnimation();
local poleAniFrameNumber = sq_GetAniFrameNumber(currentAni, 0);
local delay = currentAni.getDelaySum(9, poleAniFrameNumber);
obj.setTimeEvent(0, delay / 30, 30, true);
local atkObj = obj.getVar("kksfsChaser").get_obj_vector(0);
if(atkObj){
local colObj = sq_GetCNRDObjectToCollisionObject(atkObj);
local zpos = 65;
if(obj.getVar("skillSub").getInt(100) == 2) zpos = 80;
sq_setCurrentAxisPos(colObj, 2, zpos);
colObj.setTimeEvent(0, delay / 30, 30, true);
}
break;
}
return true;
}
function onTimeEvent_FusionChaser(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 0:
local baseX = obj.getVar("fusionChaser_move").getInt(10);
local v = sq_GetUniformVelocity(0, 200, timeEventCount, 30);
local dstX = sq_GetDistancePos(baseX, obj.getDirection(), v);
if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);
break;
}
}
function onEndState_FusionChaser(obj, new_state)
{
if(!obj) return;
local size = obj.getVar("kksfsChaser").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local atkObj = obj.getVar("kksfsChaser").get_obj_vector(i);
if(atkObj){
local colObj = sq_GetCNRDObjectToCollisionObject(atkObj);
if(colObj.getState() == 20) colObj.setValid(false);
}
}
}
}
function onAttack_FusionChaser(obj, damager, boundingBox, isStuck)
{
if(!obj) return;
if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return;
obj.getVar("fusioncs").setInt(10, obj.getVar("fusioncs").getInt(10) + 1);
if(obj.getVar("fusionchaser").getBool(10)){
obj.getVar("fusionchaser").setBool(10, false);
local sub = 2,sizeRate = sq_GetIntData(obj, SKILL_BYKK_FUSIONCHASER, 4) / 2;
if(obj.getVar("skillSub").getInt(100) < 2){
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut")) sub = 4;
else sub = 3;
sizeRate = sizeRate * 2;
}
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FUSIONCHASER, -1, 0, 1.0) + 100;
if(sq_GetLevelData(obj, SKILL_BYKK_FUSIONCHASER, 10, sq_GetSkillLevel(obj, SKILL_BYKK_FUSIONCHASER)) > 0){
local sub = 2;
for(local i = 0; i < sub; i++){
local chaserObj = obj.getVar("kksChaser").get_obj_vector(i);
if(!chaserObj){
sub = sub + 1;
continue;
}
chaserObj.setValid(false);
}
totalDamage = totalDamage * 2;
}
sizeRate = sizeRate * (100 + sq_GetLevelData(obj, SKILL_BYKK_FUSIONCHASER, 8, sq_GetSkillLevel(obj, SKILL_BYKK_FUSIONCHASER))) / 100;
if(obj.getWeaponSubType() == 1 && sq_GetSkillLevel(obj, SKILL_BYKK_POLEMASTERY) > 0) sizeRate = sizeRate * (100 + sq_GetIntData(obj, SKILL_BYKK_POLEMASTERY, 1)) / 100;
cearteSkillPassive_Battlemage_bykk(obj,damager,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,1,sq_GetCenterZPos(boundingBox),obj.getDirection(),SKILL_BYKK_FUSIONCHASER,sub,totalDamage,sizeRate,0,0,0,0,0,0);
return;
}
local atkObj = obj.getVar("kksfsChaser").get_obj_vector(0);
if(atkObj){
local colObj = sq_GetCNRDObjectToCollisionObject(atkObj);
if(colObj.getState() == 20){
obj.getVar("kksfsChaser").remove_obj_vector(colObj);
colObj.removeAllTimeEvent();
colObj.getVar("tar").clear_obj_vector();
colObj.getVar("tar").push_obj_vector(damager);
sq_setCurrentAxisPos(colObj, 0, sq_GetXPos(damager));
sq_setCurrentAxisPos(colObj, 1, sq_GetYPos(damager) + 1);
sq_setCurrentAxisPos(colObj, 2, sq_GetCenterZPos(boundingBox));
sq_moveWithParent(damager, colObj);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FUSIONCHASER, -1, 4, 1.0) + 100;
if(sq_GetLevelData(obj, SKILL_BYKK_FUSIONCHASER, 10, sq_GetSkillLevel(obj, SKILL_BYKK_FUSIONCHASER)) > 0){
local sub = 2;
for(local i = 0; i < sub; i++){
local chaserObj = obj.getVar("kksChaser").get_obj_vector(i);
if(!chaserObj){
sub = sub + 1;
continue;
}
chaserObj.setValid(false);
}
totalDamage = totalDamage * 2;
}
local hitTime = sq_GetIntData(obj, SKILL_BYKK_FUSIONCHASER, 7);
local lifeTime = sq_GetIntData(obj, SKILL_BYKK_FUSIONCHASER, 8);
colObj.setTimeEvent(2, hitTime, -1, true);
colObj.setTimeEvent(3, lifeTime, 1, false);
sq_SetCurrentAttackInfo(colObj, sq_GetCustomAttackInfo(colObj, 24));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(colObj), totalDamage);
colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
}
}
}
function checkExecutableSkill_Goddnessofwar(obj)
{
if (!obj) return false;
if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_GODDNESSOFWAR);
if (isUse){
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2);
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1);
else obj.getVar("skillSub").setInt(100, 0);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_GODDNESSOFWAR, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Goddnessofwar(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Goddnessofwar(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
if(obj.getVar("skillSub").getInt(100) == 2){
obj.sq_SetCurrentAnimation(237);
obj.sq_PlaySound("R_WZ_PRECENCIA_GODDNESSOFWAR");
obj.sq_PlaySound("PRECENCIA_GODDNESSOFWAR");
}
else{
if(obj.getVar("skillSub").getInt(100) == 1){
local Ani = getCurrentAnimation_precencia(obj, "Goddnessofwar_Body", false, false);
obj.setCurrentAnimation(Ani);
}
else obj.sq_SetCurrentAnimation(273);
obj.sq_PlaySound("TEANA_CHANGE_CAST");
obj.sq_PlaySound("GODDESWAR");
obj.sq_PlaySound("R_WZ_GODDNESSOFWAR");
}
break;
case 3:
if(obj.getVar("skillSub").getInt(100) == 2){
obj.sq_SetCurrentAnimation(218);
obj.sq_PlaySound("R_WZ_PRECENCIA_CHASER_EVOLUTION");
}
else{
if(obj.getVar("skillSub").getInt(100) == 1){
local Ani = getCurrentAnimation_precencia(obj, "Wink1", false, false);
obj.setCurrentAnimation(Ani);
}
else{
local Ani = obj.sq_GetThrowChargeAni(3);
obj.setCurrentAnimation(Ani);
}
obj.sq_PlaySound("WZ_EVOLUTIONCHASER_START");
}
break;
case 4:
if(obj.getVar("skillSub").getInt(100) == 1){
local Ani = getCurrentAnimation_precencia(obj, "Wink2", false, false);
obj.setCurrentAnimation(Ani);
}
else{
local Ani = obj.sq_GetThrowShootAni(3);
obj.setCurrentAnimation(Ani);
}
obj.sq_PlaySound("WZ_EVOLUTIONCHASER_LAUNCH");
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut")){
CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut");
changeBattlemageChaser(obj, 0);
}
else{
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut") || CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) return;
local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_CHASEREVOLUTION, false, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut", true);
addAppendage.setEnableIsBuff(true);
addAppendage.setBuffIconImage(74);
addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_CHASEREVOLUTION, sq_GetSkillLevel(obj, SKILL_BYKK_CHASEREVOLUTION));
CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true);
changeBattlemageChaser(obj, 1);
}
break;
}
}
function onEndCurrentAni_Goddnessofwar(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
local apdPath = "character/mage/battlemage_bykk/ap/ap_goddnessofwar.nut";
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath);
local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_GODDNESSOFWAR, false, apdPath, true);
setDamageRate_BattleMage_bykk(obj);
local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_GODDNESSOFWAR);
local buffTime = sq_GetLevelData(obj, SKILL_BYKK_GODDNESSOFWAR, 0, skill_level);
if(buffTime > 0) addAppendage.sq_SetValidTime(buffTime);
addAppendage.setEnableIsBuff(true);
addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_GODDNESSOFWAR, skill_level);
CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true);
local rad = sq_GetLevelData(obj, 7, 1, sq_GetSkillLevel(obj, 7)) / 10;
obj.getVar("apGetSetbyKK").setInt(0, rad);
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
case 3:
if(obj.getVar("skillSub").getInt(100) == 2){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
}
else{
obj.sq_IntVectClear();
obj.sq_IntVectPush(4);
obj.sq_AddSetStatePacket(STATE_BYKK_GODDNESSOFWAR, STATE_PRIORITY_AUTO, true);
}
break;
case 4:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_Goddnessofwar(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_Goddnessofwar(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 101:
if(obj.getVar("skillSub").getInt(100) == 2){
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut")){
CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut");
changeBattlemageChaser(obj, 0);
}
else{
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut") || CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) return;
local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_CHASEREVOLUTION, false, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut", true);
addAppendage.setEnableIsBuff(true);
addAppendage.setBuffIconImage(74);
addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_CHASEREVOLUTION, sq_GetSkillLevel(obj, SKILL_BYKK_CHASEREVOLUTION));
CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true);
changeBattlemageChaser(obj, 1);
}
}
break;
}
return true;
}
function onTimeEvent_Goddnessofwar(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_Goddnessofwar(obj, new_state)
{
if(!obj) return;
}
function checkExecutableSkill_HandStrike(obj)
{
if (!obj) return false;
if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HANDSTRIKE);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_HANDSTRIKE, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_HandStrike(obj)
{
if (!obj) return false;
return true;
}
function onSetState_HandStrike(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2);
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1);
else obj.getVar("skillSub").setInt(100, 0);
obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_HANDSTRIKE);
obj.getVar("handstrike_move").setBool(100, false);
obj.getVar("handstrike_bool").setBool(0, true);
obj.getVar("handstrike_bool").setBool(1, true);
if(obj.getVar("skillSub").getInt(100) == 2){
obj.sq_SetCurrentAnimation(240);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.5, 1.5);
}
else{
if(obj.getVar("skillSub").getInt(100) == 1){
local Ani = getCurrentAnimation_precencia(obj, "Handstrike", false, false);
obj.setCurrentAnimation(Ani);
}
else obj.sq_SetCurrentAnimation(4);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_HANDSTRIKE);
local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_HANDSTRIKE, 1, skillLevel);
local change = sq_GetLevelData(obj, SKILL_BYKK_HANDSTRIKE, 10, skillLevel);
if(change > 0) totalDamage = (obj.sq_GetBonusRateWithPassive(174, -1, 0, 1.0) + 200) * change / 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 3));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local attackInfo = sq_GetCurrentAttackInfo(obj);
local bForce = sq_GetLevelData(obj, SKILL_BYKK_HANDSTRIKE, 2, skillLevel);
sq_SetCurrentAttacknBackForce(attackInfo, bForce);
sq_SetCurrentAttacknUpForce(attackInfo, 600);
attackInfo.setAttackType(ATTACKTYPE_PHYSICAL);
sq_SetAddWeaponDamage(attackInfo, true);
}
break;
case 1:
obj.sq_SetCurrentAnimation(239);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.5, 1.5);
break;
case 2:
obj.sq_SetCurrentAnimation(238);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_HANDSTRIKE);
local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_HANDSTRIKE, 1, skillLevel);
local change = sq_GetLevelData(obj, SKILL_BYKK_HANDSTRIKE, 10, skillLevel);
if(change > 0) totalDamage = (obj.sq_GetBonusRateWithPassive(174, -1, 0, 1.0) + 200) * change / 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 1));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local attackInfo = sq_GetCurrentAttackInfo(obj);
local bForce = sq_GetLevelData(obj, SKILL_BYKK_HANDSTRIKE, 2, skillLevel);
sq_SetCurrentAttacknBackForce(attackInfo, bForce);
sq_SetCurrentAttacknUpForce(attackInfo, 600);
attackInfo.setAttackType(ATTACKTYPE_PHYSICAL);
sq_SetAddWeaponDamage(attackInfo, true);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.5, 1.5);
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(false);
local stateTime = obj.sq_GetVectorData(datas, 1);
print("stateTime = "+stateTime);
local speedRate = stateTime.tofloat() * 1.5;
if(speedRate <= 1000) speedRate = 1000.0;
else if(speedRate >= 2000) speedRate = 2000.0;
speedRate = 410.0 / delay * speedRate;
print("speedRate = "+speedRate);
if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speedRate);
else sq_SetVelocity(obj, 0, -speedRate);
// obj.getVar("handstrike_move").setInt(10, sq_GetXPos(obj));
// obj.setTimeEvent(1, delay / 20, 20, true);
break;
}
}
function onEndCurrentAni_HandStrike(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(obj.getVar("skillSub").getInt(100) == 2){
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_HANDSTRIKE, STATE_PRIORITY_AUTO, true);
}
else{
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
}
break;
case 1:
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(STATE_BYKK_HANDSTRIKE, STATE_PRIORITY_AUTO, true);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_HandStrike(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(obj.getVar("skillSub").getInt(100) == 2) break;
local bDownKey = obj.isDownSkillLastKey();
local frameIndex = sq_GetCurrentFrameIndex(obj);
local stateTime = obj.sq_GetStateTimer();
if(!bDownKey && obj.getVar("handstrike_bool").getBool(1)){
obj.getVar("handstrike_bool").setBool(1, false);
obj.getVar("handstrike_move").setInt(10, sq_GetXPos(obj));
obj.getVar("handstrike_move").setInt(11, 200);
local currentAni = obj.getCurrentAnimation();
currentAni.setCurrentFrameWithChildLayer(9);
local delay = currentAni.getDelaySum(9, 13);
//obj.setTimeEvent(0, delay / 30, 20, true);
print("stateTime = "+stateTime);
local speedRate = stateTime.tofloat() * 1.5;
if(speedRate <= 1000) speedRate = 1000.0;
else if(speedRate >= 2000) speedRate = 2000.0;
speedRate = 410.0 / delay * speedRate;
print("speedRate = "+speedRate);
if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speedRate);
else sq_SetVelocity(obj, 0, -speedRate);
obj.sq_PlaySound("WZ_DASH_HIT");
return;
}
if(frameIndex == 7){
if(stateTime >= sq_GetIntData(obj, SKILL_BYKK_HANDSTRIKE, 2) && obj.getVar("handstrike_bool").getBool(0)){
obj.getVar("handstrike_bool").setBool(0, false);
obj.getVar("handstrike_move").setBool(100, true);
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/magicfullcharge31.ani", 0, 1, 50);
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/magicfullcharge32.ani", 0, 1, 50);
obj.sq_PlaySound("YELLOWD_CHARGE");
}
}
break;
case 1:
local bDownKey = obj.isDownSkillLastKey();
local stateTime = obj.sq_GetStateTimer();
//if(stateTime < 200) break;
if(!bDownKey){
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_IntVectPush(stateTime);
obj.sq_AddSetStatePacket(STATE_BYKK_HANDSTRIKE, STATE_PRIORITY_AUTO, true);
break;
}
else{
local fullchargeTime = sq_GetIntData(obj, SKILL_BYKK_HANDSTRIKE, 2);
if(sq_GetSkillLevel(obj, SKILL_BYKK_SPEARMASTERY) > 0 && obj.getWeaponSubType() == 0) fullchargeTime = fullchargeTime * (100 - sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 0)) / 100;
if(stateTime >= fullchargeTime && obj.getVar("handstrike_bool").getBool(0)){
obj.getVar("handstrike_bool").setBool(0, false);
obj.getVar("handstrike_move").setBool(100, true);
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/magicfullcharge31.ani", 0, 1, 75);
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/magicfullcharge32.ani", 0, 1, 75);
obj.sq_PlaySound("YELLOWD_CHARGE");
}
}
break;
}
}
function onKeyFrameFlag_HandStrike(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_HandStrike(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 0:
local baseX = obj.getVar("handstrike_move").getInt(10);
local moveX = obj.getVar("handstrike_move").getInt(11);
if(obj.getVar("handstrike_move").getBool(100)) moveX = moveX * 150 / 100;
if(obj.getVar("skillSub").getInt(100) == 2) moveX = moveX * 150 / 100;
local v = sq_GetUniformVelocity(0, moveX, timeEventCount, 20);
local dstX = sq_GetDistancePos(baseX, obj.getDirection(), v);
if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);
else{
obj.getVar("handstrike_move").setInt(10, sq_GetXPos(obj));
obj.getVar("handstrike_move").setInt(11, 0);
}
break;
case 1:
local baseX = obj.getVar("handstrike_move").getInt(10);
local moveX = obj.getVar("handstrike_move").getInt(11);
if(obj.getVar("handstrike_move").getBool(100)) moveX = moveX * 150 / 100;
local v = sq_GetUniformVelocity(0, moveX, timeEventCount, 20);
local dstX = sq_GetDistancePos(baseX, obj.getDirection(), v);
if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);
else{
obj.getVar("handstrike_move").setInt(10, sq_GetXPos(obj));
obj.getVar("handstrike_move").setInt(11, 0);
}
break;
}
}
function onEndState_HandStrike(obj, new_state)
{
if(!obj) return;
}
function onAttack_HandStrike(obj, damager, boundingBox, isStuck)
{
if(!obj) return;
if(obj.getVar("handstrike_move").getBool(100) == false) return;
if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return;
if(sq_getGrowType(obj) != 3) return;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HANDSTRIKE, -1, 6, 1.0);
local group = sq_GetGroup(damager);
local uniqueId = sq_GetUniqueId(damager);
cearteSkillPassive_Battlemage_bykk(obj,damager,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,0,sq_GetZPos(damager),damager.getDirection(),SKILL_BYKK_HANDSTRIKE,1,totalDamage,group,uniqueId,0,0,0,0,0);
local createMax = sq_GetIntData(obj, SKILL_BYKK_CHASER, 0);
if(obj.getVar("kksChaser").get_obj_vector_size() < createMax) createBattlemageChaser(obj);
}
function checkExecutableSkill_Layofprimitive(obj)
{
if (!obj) return false;
if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_LAYOFPRIMITIVE);
if (isUse){
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2);
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1);
else obj.getVar("skillSub").setInt(100, 0);
obj.sq_IntVectClear();
if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_IntVectPush(1);
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_BYKK_LAYOFPRIMITIVE, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Layofprimitive(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Layofprimitive(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0://start
obj.sq_SetCurrentAnimation(288);
// sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/layofprimitive/layofprimitive_start_front_03.ani", 0, 1, 0);
// sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/layofprimitive/layofprimitive_start_back_08.ani", 0, -1, 0);
obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/layofprimitive/layofprimitive_start_front_03.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/layofprimitive/layofprimitive_start_back_08.ani"), 0, 0);
obj.sq_PlaySound("PRECENCIA_CHANGE_SHORT");
break;
case 1://summon
obj.sq_SetCurrentAnimation(289);
sq_flashScreen(obj, 30, 1100, 180, 204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
obj.sq_PlaySound("PRECENCIA_LAYOFPRIMITIVE_1_CAST");
obj.sq_PlaySound("WZ_PRECENCIA_LAYOFPRIMITIVE_1_1");
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 63));
break;
case 2://loop
obj.sq_SetCurrentAnimation(287);
// sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/layofprimitive/layofprimitive_loop_rune_00.ani", 175, 1, 75);
obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/layofprimitive/layofprimitive_loop_rune_00.ani"), 175, -75);
obj.sq_PlaySound("PRECENCIA_LAYOFPRIMITIVE_2_SPEAR");
obj.sq_PlaySound("R_WZ_PRECENCIA_LAYOFPRIMITIVE_1_2");
obj.getVar("Layofprimitive_chaser").setInt(10, 0);
obj.getVar("Layofprimitive_chaser").setInt(11, 0);
local size = obj.getVar("kksChaser").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local chaserObj = obj.getVar("kksChaser").get_obj_vector(i);
if(!chaserObj) continue;
local colObj = sq_GetCNRDObjectToCollisionObject(chaserObj);
local totalDamage = colObj.getVar("custom").getInt(10);
obj.getVar("Layofprimitive_chaser").setInt(10, obj.getVar("Layofprimitive_chaser").getInt(10) + 1);
obj.getVar("Layofprimitive_chaser").setInt(11, obj.getVar("Layofprimitive_chaser").getInt(11) + totalDamage);
colObj.setValid(false);
}
}
break;
case 3://end
obj.sq_SetCurrentAnimation(286);
obj.sq_PlaySound("PRECENCIA_LAYOFPRIMITIVE_3_SHOT");
obj.sq_PlaySound("R_WZ_PRECENCIA_LAYOFPRIMITIVE_2_1");
// sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/layofprimitive/layofprimitive_end_rune_06.ani", 175, 1, 75);
obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/layofprimitive/layofprimitive_end_rune_06.ani"), 175, -75);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LAYOFPRIMITIVE, -1, 0, 1.0) + 100;
totalDamage = totalDamage + obj.getVar("Layofprimitive_chaser").getInt(11);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 65));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
case 4://dis
obj.sq_SetCurrentAnimation(285);
// sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/layofprimitive/layofprimitive_dissolution_front_03.ani", 0, 1, 0);
// sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/layofprimitive/layofprimitive_dissolution_back_08.ani", 0, -1, 0);
obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/layofprimitive/layofprimitive_dissolution_back_08.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/layofprimitive/layofprimitive_dissolution_front_03.ani"), 0, 0);
obj.sq_PlaySound("PRECENCIA_CHANGE_END");
break;
}
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(attackInfo){
attackInfo.setAttackType(ATTACKTYPE_PHYSICAL);
sq_SetAddWeaponDamage(attackInfo, true);
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local currentAni = obj.getCurrentAnimation();
local speedRate = 4000 / currentAni.getDelaySum(0, 0);
switch(subState){
case 1: speedRate = 2900 / currentAni.getDelaySum(0, 0); break;
case 2: speedRate = 5500 / currentAni.getDelaySum(0, 0); break;
case 3: speedRate = 6000 / currentAni.getDelaySum(0, 0); break;
case 4: speedRate = 4300 / currentAni.getDelaySum(0, 0); break;
}
print("speedRate = "+speedRate);
if(speedRate > 200){
currentAni.setSpeedRate(200.0);
}
if(subState == 2){
local currentAni = obj.getCurrentAnimation();
obj.sq_SetXScrollStart(300, currentAni.getDelaySum(false));
}
}
function onEndCurrentAni_Layofprimitive(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
case 2:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_BYKK_LAYOFPRIMITIVE, STATE_PRIORITY_AUTO, true);
break;
case 3:
if(obj.getVar("skillSub").getInt(100) != 2){
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_BYKK_LAYOFPRIMITIVE, STATE_PRIORITY_AUTO, true);
break;
}
case 4:
obj.sq_SetXScrollStop(0);
local chaserNum = obj.getVar("Layofprimitive_chaser").getInt(10);
if(chaserNum > 0){
for(local i = 0; i < chaserNum; i++){
createBattlemageChaser(obj);
}
}
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_Layofprimitive(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_Layofprimitive(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1001:
sq_flashScreen(obj, 50, 100, 100, 255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
break;
case 1002:
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/layofprimitive/layofprimitive_summon_attack_15.ani", 0, 1, 0);
break;
case 1003:
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/layofprimitive/layofprimitive_summon_attack_16.ani", 0, 1, 0);
break;
case 1004:
sq_SetMyShake(obj, 3, 100);
break;
case 1005:
sq_flashScreen(obj, 30, 60, 120, 204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_flashScreen(obj, 30, 90, 30, 127, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 30, 200);
break;
}
return true;
}
function onTimeEvent_Layofprimitive(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_Layofprimitive(obj, new_state)
{
if(!obj) return;
}
function checkExecutableSkill_PokeThrow(obj)
{
if (!obj) return false;
if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_POKETHROW);
if (isUse){
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2);
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1);
else obj.getVar("skillSub").setInt(100, 0);
obj.getVar("dirBool").setBool(0, false);
obj.getVar("pokethrowTar").clear_obj_vector();
obj.getVar("pokethrowTar_fix").clear_obj_vector();
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_POKETHROW, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_PokeThrow(obj)
{
if (!obj) return false;
return true;
}
function onSetState_PokeThrow(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
if(obj.getVar("skillSub").getInt(100) == 1){
local Ani = getCurrentAnimation_precencia(obj, "Pokethrowtry", false, false);
obj.setCurrentAnimation(Ani);
}
else if(obj.getVar("skillSub").getInt(100) == 2){
obj.sq_SetCurrentAnimation(246);
}
else{
obj.sq_SetCurrentAnimation(6);
}
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_POKETHROW);
local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_POKETHROW, 0, skillLevel);
local change = sq_GetLevelData(obj, SKILL_BYKK_POKETHROW, 5, skillLevel);
if(change > 0) totalDamage = (obj.sq_GetBonusRateWithPassive(174, -1, 0, 1.0) + 200) * change / 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 8));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(attackInfo){
attackInfo.setAttackType(ATTACKTYPE_PHYSICAL);
sq_SetAddWeaponDamage(attackInfo, true);
}
local speed = 2.0;
if(obj.getVar("skillSub").getInt(100) == 1) speed = 0.3 + speed;
else if(obj.getVar("skillSub").getInt(100) == 2) speed = 0.5 + speed;
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed);
break;
case 1:
if(obj.getVar("skillSub").getInt(100) == 1){
local Ani = getCurrentAnimation_precencia(obj, "Pokethrowsmash", false, false);
obj.setCurrentAnimation(Ani);
}
else if(obj.getVar("skillSub").getInt(100) == 2){
obj.sq_SetCurrentAnimation(245);
}
else{
obj.sq_SetCurrentAnimation(7);
}
if(obj.getVar("dirBool").getBool(0) == false) sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj)));
local speed = 2.0;
if(obj.getVar("skillSub").getInt(100) == 1) speed = 0.3 + speed;
else if(obj.getVar("skillSub").getInt(100) == 2) speed = 0.5 + speed;
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed);
local pAni = obj.getCurrentAnimation();
local delay = pAni.getDelaySum(false) / 3;
obj.setTimeEvent(0, delay, 1, false);
obj.setTimeEvent(1, delay * 2, 1, false);
local size = obj.getVar("pokethrowTar").get_obj_vector_size();
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("pokethrowTar").get_obj_vector(i);
if(targetObj){
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/mage/battlemage_bykk/ap/ap_pokethrow.nut");
if(!addAppendage) continue;
sq_MoveToAppendageForce(targetObj, obj, obj, 0, 0, 100, delay, true, addAppendage);
}
}
break;
case 2:
if(obj.getVar("skillSub").getInt(100) == 1){
local Ani = getCurrentAnimation_precencia(obj, "Pokethrowsmashfront", false, false);
obj.setCurrentAnimation(Ani);
}
else if(obj.getVar("skillSub").getInt(100) == 2){
obj.sq_SetCurrentAnimation(244);
}
else{
obj.sq_SetCurrentAnimation(272);
}
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_POKETHROW);
local speed = (1000 + sq_GetLevelData(obj, SKILL_BYKK_POKETHROW, 2, skillLevel)) / 1000.0;
if(obj.getVar("skillSub").getInt(100) == 1) speed = 0.3 + speed;
else if(obj.getVar("skillSub").getInt(100) == 2) speed = 0.5 + speed;
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed);
local pAni = obj.getCurrentAnimation();
local delay = pAni.getDelaySum(false) / 3 * 2;
obj.setTimeEvent(1, delay, 1, false);
break;
}
}
function onEndCurrentAni_PokeThrow(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(obj.getVar("pokethrowTar_fix").get_obj_vector_size() > 0){
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(STATE_BYKK_POKETHROW, STATE_PRIORITY_AUTO, true);
}
else if(obj.getVar("pokethrowTar").get_obj_vector_size() > 0){
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_POKETHROW, STATE_PRIORITY_AUTO, true);
}
else{
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
}
break;
case 1:
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_PokeThrow(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
if(subState == 0){
if(obj.getVar("dirBool").getBool(0) == false){
if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection()== ENUM_DIRECTION_LEFT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT)) obj.getVar("dirBool").setBool(0, true);
}
}
}
function onKeyFrameFlag_PokeThrow(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_PokeThrow(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 0:
local pAni = obj.getCurrentAnimation();
local delay = pAni.getDelaySum(false) / 3;
local size = obj.getVar("pokethrowTar").get_obj_vector_size();
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("pokethrowTar").get_obj_vector(i);
if(targetObj){
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/mage/battlemage_bykk/ap/ap_pokethrow.nut");
if(!addAppendage) continue;
sq_MoveToAppendageForce(targetObj, obj, obj, 125, 0, 0, delay, true, addAppendage);
}
}
break;
case 1:
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_POKETHROW);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_POKETHROW, -1, 1, 1.0) + 100;
local change = sq_GetLevelData(obj, SKILL_BYKK_POKETHROW, 5, skillLevel);
if(change > 0) totalDamage = (obj.sq_GetBonusRateWithPassive(174, -1, 0, 1.0) + 200) * change / 100;
local sizeRate = sq_GetLevelData(obj, SKILL_BYKK_POKETHROW, 3, skillLevel);
if(sq_GetSkillLevel(obj, SKILL_BYKK_SPEARMASTERY) > 0 && obj.getWeaponSubType() == 0) sizeRate = sizeRate + sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 1);
cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,125,0,0,obj.getDirection(),SKILL_BYKK_POKETHROW,1,totalDamage,sizeRate,0,0,0,0,0,0);
break;
case 2:
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_POKETHROW);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_POKETHROW, -1, 4, 1.0) + 100;
local change = sq_GetLevelData(obj, SKILL_BYKK_POKETHROW, 5, skillLevel);
if(change > 0) totalDamage = (obj.sq_GetBonusRateWithPassive(174, -1, 0, 1.0) + 200) * change / 100;
local sizeRate = sq_GetLevelData(obj, SKILL_BYKK_POKETHROW, 3, skillLevel);
if(sq_GetSkillLevel(obj, SKILL_BYKK_SPEARMASTERY) > 0 && obj.getWeaponSubType() == 0) sizeRate = sizeRate + sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 1);
cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,125,0,0,obj.getDirection(),SKILL_BYKK_POKETHROW,1,totalDamage,sizeRate,0,0,0,0,0,0);
break;
}
}
function onEndState_PokeThrow(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_BYKK_POKETHROW){
local size = obj.getVar("pokethrowTar").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("pokethrowTar").get_obj_vector(i);
if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/mage/battlemage_bykk/ap/ap_pokethrow.nut");
}
}
}
}
function onAttack_PokeThrow(obj, damager, boundingBox, isStuck)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
if(sq_IsHoldable(obj,damager) && !sq_IsFixture(damager) && sq_IsGrabable(obj,damager)){
if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/mage/battlemage_bykk/ap/ap_pokethrow.nut")){
if(!obj.getVar("pokethrowTar").is_obj_vector(damager)) obj.getVar("pokethrowTar").push_obj_vector(damager);
local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/mage/battlemage_bykk/ap/ap_pokethrow.nut", true);
sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, addAppendage);
}
}
else{
if(!obj.getVar("pokethrowTar_fix").is_obj_vector(damager)) obj.getVar("pokethrowTar_fix").push_obj_vector(damager);
}
if(sq_getGrowType(obj) != 3) break;
local createMax = sq_GetIntData(obj, SKILL_BYKK_CHASER, 0);
if(obj.getVar("kksChaser").get_obj_vector_size() < createMax) createBattlemageChaser(obj);
}
break;
}
}
function checkExecutableSkill_Precencia(obj)
{
if (!obj) return false;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut") || CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PRECENCIA);
if (isUse){
local subState = 0;
local skill = sq_GetSkill(obj, SKILL_BYKK_PRECENCIA);
if(!skill.isSealFunction()) subState = 2;
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState);
obj.sq_AddSetStatePacket(SKILL_BYKK_PRECENCIA, STATE_PRIORITY_IGNORE_FORCE, true);
obj.startSkillCoolTime(SKILL_BYKK_PRECENCIA, sq_GetSkillLevel(obj, SKILL_BYKK_PRECENCIA), -1);
return true;
}
return false;
}
function checkCommandEnable_Precencia(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Precencia(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0://二覺化身
obj.sq_SetCurrentAnimation(93);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut")){
CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut");
}
changeBattlemageChaser(obj, 2);
break;
case 2://三覺化身
obj.sq_SetCurrentAnimation(210);
obj.sq_PlaySound("PRECENCIA_CHANGE_SHORT");
obj.sq_PlaySound("R_WZ_PRECENCIA_CHANGE");
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut")){
CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaserevolution.nut");
}
changeBattlemageChaser(obj, 3);
obj.setObjectHeight(10);
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/avatar/precencia/realease/avatar_release_back_08.ani", 0, -1, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/avatar/precencia/realease/avatar_release_front_03.ani", 0, 1, 0);
break;
case 1://解除化身
local sub = obj.sq_GetVectorData(datas, 1);
switch(sub){
case 0://二覺
local Ani = getCurrentAnimation_precencia(obj, "avatarend_body", false, false);
obj.setCurrentAnimation(Ani);
sq_AddDrawOnlyAniFromParent(obj,"character/mage/effect/animation/avatar/avatarend_eff_00.ani", 0, 1, 0);
sq_flashScreen(obj,700,100,300,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){
CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut");
}
break;
case 1://三覺主動解除
obj.sq_SetCurrentAnimation(209);
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/avatar/precencia/realease/avatar_finish_return_back_08.ani", 0, 1, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/avatar/precencia/realease/avatar_finish_return_front_03.ani", 0, 1, 0);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){
CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut");
}
break;
}
changeBattlemageChaser(obj, 0);
break;
case 10:
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){
obj.sq_SetCurrentAnimation(206);
// for(local i = 0; i < 20000; i++){
// obj.stopSound(i);
// }
obj.sq_PlaySound("R_WZ_PRECENCIA_ATK_1");
}
else{
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){
local Ani = getCurrentAnimation_precencia(obj, "battlemageattack1", false, false);
obj.setCurrentAnimation(Ani);
}
else{
obj.sq_SetCurrentAnimation(9);
}
}
obj.getVar("attackBool").setBool(10, false);
obj.getVar("attackBool").setBool(12, false);
break;
case 11:
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){
obj.sq_SetCurrentAnimation(207);
obj.sq_PlaySound("R_WZ_PRECENCIA_ATK_2");
}
else{
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){
local Ani = getCurrentAnimation_precencia(obj, "battlemageattack2", false, false);
obj.setCurrentAnimation(Ani);
}
else{
obj.sq_SetCurrentAnimation(10);
}
obj.sq_PlaySound("R_WZ_ATK");
}
obj.getVar("attackBool").setBool(10, false);
obj.getVar("attackBool").setBool(13, false);
break;
case 12:
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){
obj.sq_SetCurrentAnimation(208);
obj.sq_PlaySound("R_WZ_PRECENCIA_ATK_3");
}
else{
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){
local Ani = getCurrentAnimation_precencia(obj, "battlemageattack3", false, false);
obj.setCurrentAnimation(Ani);
}
else{
obj.sq_SetCurrentAnimation(11);
}
obj.sq_PlaySound("R_WZ_ATK");
}
break;
case 20:
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){
obj.sq_SetCurrentAnimation(218);
}
else{
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){
local Ani = getCurrentAnimation_precencia(obj, "Buff", false, false);
obj.setCurrentAnimation(Ani);
}
else{
local Ani = obj.sq_GetThrowChargeAni(3);
obj.setCurrentAnimation(Ani);
}
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local currentAni = obj.getCurrentAnimation();
local castTime = currentAni.getDelaySum(false);
sq_StartDrawCastGauge(obj, castTime, true);
break;
case 21:
local Ani = obj.sq_GetThrowShootAni(3);
obj.setCurrentAnimation(Ani);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
break;
}
if(subState >= 10 && subState <= 12){
local speed = 1.3;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) speed = 2.5;
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed);
local atkIndex = [53,54,55];
local totalDamage = sq_GetLevelData(obj, 174, 0, sq_GetSkillLevel(obj, 174)) + 100;
if(sq_GetSkillLevel(obj, SKILL_BYKK_ENABLEFINISHATTACK) > 0) totalDamage = totalDamage * (1000 + sq_GetLevelData(obj, SKILL_BYKK_ENABLEFINISHATTACK, 2, sq_GetSkillLevel(obj, SKILL_BYKK_ENABLEFINISHATTACK))) / 1000;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex[subState - 10]));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(attackInfo){
attackInfo.setAttackType(ATTACKTYPE_PHYSICAL);
sq_SetAddWeaponDamage(attackInfo, true);
}
}
}
function onEndCurrentAni_Precencia(obj)
{
if(!obj) return;
//if(!obj.sq_IsMyControlObject()) return;
local substate = obj.getSkillSubState();
switch(substate){
case 0:
obj.sq_PlaySound("AVATAR_AURA_LOOP", 2333);
local apdPath = "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut";
local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_PRECENCIA, false, apdPath, true);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_PRECENCIA);
local buffTime = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 0, skillLevel);
addAppendage.sq_SetValidTime(buffTime);
addAppendage.setEnableIsBuff(true);
addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_PRECENCIA, skillLevel);
CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true);
local hpMax = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 1, skillLevel);
local allDefense = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 2, skillLevel);
local attackspeedRate = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 3, skillLevel);
local movespeedRate = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 4, skillLevel);
local allactTolerance = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 5, skillLevel);
local change_appendage = addAppendage.sq_getChangeStatus("precencia");
if(!change_appendage) change_appendage = addAppendage.sq_AddChangeStatus("precencia",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
if(change_appendage){
change_appendage.clearParameter();
change_appendage.addParameter(CHANGE_STATUS_TYPE_HP_MAX, false, (hpMax).tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, false, (allDefense).tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, false, (allDefense).tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackspeedRate).tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (movespeedRate).tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_ACTIVESTATUS_TOLERANCE_ALL, false, (allactTolerance).tofloat());
}
obj.sq_SetSuperArmorUntilTime(obj, buffTime);
if(sq_GetIntData(obj, SKILL_BYKK_PRECENCIA, 15) > 0) addAppendage.getVar("setFail").setBool(0, true);
local spectrumAppendage = addAppendage.sq_GetOcularSpectrum("ocularSpectrum");//得到殘影
if(!spectrumAppendage) spectrumAppendage = addAppendage.sq_AddOcularSpectrum("ocularSpectrum", obj, obj, 100);//設置殘影
sq_SetParameterOcularSpectrum(spectrumAppendage, 300, 75, true, sq_RGBA(255, 244, 77, 75), sq_RGBA(255, 244, 77, 0), 2, 2, 2);//設置效果
local goddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/mage/battlemage_bykk/ap/ap_goddnessofwar.nut");
if(goddAppendage) goddAppendage.getVar().setBool(100, true);
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
case 2:
obj.sq_PlaySound("AVATAR_AURA_LOOP", 2333);
local apdPath = "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut";
local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_PRECENCIA, false, apdPath, true);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_PRECENCIA);
local buffTime = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 0, skillLevel);
addAppendage.sq_SetValidTime(buffTime);
addAppendage.setEnableIsBuff(true);
addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_PRECENCIA, skillLevel);
CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true);
local hpMax = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 1, skillLevel);
local allDefense = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 2, skillLevel);
local attackspeedRate = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 3, skillLevel);
local movespeedRate = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 4, skillLevel);
local allactTolerance = sq_GetLevelData(obj, SKILL_BYKK_PRECENCIA, 5, skillLevel);
local change_appendage = addAppendage.sq_getChangeStatus("precencia");
if(!change_appendage) change_appendage = addAppendage.sq_AddChangeStatus("precencia",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
if(change_appendage){
change_appendage.clearParameter();
change_appendage.addParameter(CHANGE_STATUS_TYPE_HP_MAX, false, (hpMax).tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, false, (allDefense).tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, false, (allDefense).tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackspeedRate).tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (movespeedRate).tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_ACTIVESTATUS_TOLERANCE_ALL, false, (allactTolerance).tofloat());
}
obj.sq_SetSuperArmorUntilTime(obj, buffTime);
if(sq_GetIntData(obj, SKILL_BYKK_PRECENCIA, 15) > 0) addAppendage.getVar("setFail").setBool(0, true);
local spectrumAppendage = addAppendage.sq_GetOcularSpectrum("ocularSpectrum");//得到殘影
if(!spectrumAppendage) spectrumAppendage = addAppendage.sq_AddOcularSpectrum("ocularSpectrum", obj, obj, 100);//設置殘影
sq_SetParameterOcularSpectrum(spectrumAppendage, 300, 75, true, sq_RGBA(255, 244, 77, 75), sq_RGBA(255, 244, 77, 0), 2, 2, 2);//設置效果
local goddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/mage/battlemage_bykk/ap/ap_goddnessofwar.nut");
if(goddAppendage) goddAppendage.getVar().setBool(100, true);
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
case 1:
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){
CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut");
}
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){
CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut");
}
case 10:
case 11:
case 12:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
case 20:
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut") || CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){
local apdPath = "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut";
local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_PRECENCIA, false, apdPath, true);
local skillLevel = sq_GetSkillLevel(obj, 2);
local buffTime = sq_GetLevelData(obj, 2, 0, 2);
addAppendage.sq_SetValidTime(buffTime);
addAppendage.setEnableIsBuff(true);
addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), 2, skillLevel);
CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true);
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
else{
obj.sq_IntVectClear();
obj.sq_IntVectPush(21);
obj.sq_AddSetStatePacket(SKILL_BYKK_PRECENCIA, STATE_PRIORITY_USER, true);
}
break;
case 21:
local apdPath = "character/mage/elementalmaster_bykk/ap/ap_magicaltempoup.nut";
local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_PRECENCIA, false, apdPath, true);
local skillLevel = sq_GetSkillLevel(obj, 2);
local buffTime = sq_GetLevelData(obj, 2, 0, 2);
addAppendage.sq_SetValidTime(buffTime);
addAppendage.setEnableIsBuff(true);
addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), 2, skillLevel);
CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true);
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
}
}
function onProcCon_Precencia(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 10:
case 11:
if(obj.getVar("attackBool").getBool(subState) == false){
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.getVar("attackBool").setBool(subState, true);
}
if(obj.getVar("attackBool").getBool(subState)){
local pAni = obj.getCurrentAnimation();
local delaySum = pAni.getDelaySum(false);
local currentT = sq_GetCurrentTime(pAni);
if(currentT >= delaySum * 90 / 100){
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_BYKK_PRECENCIA, STATE_PRIORITY_USER, true);
}
}
case 12:
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);
break;
}
local speedRate = [0,300,30];
if((obj.getVar("attackBool").getBool(12) && subState >= 10) || (obj.getVar("attackBool").getBool(13) && subState >= 11)) 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);
}
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)) speedRate = [0, 500, 80];
if(obj.getDirection() == ENUM_DIRECTION_RIGHT && speedRate[subState - 10] > 0) sq_SetVelocity(obj, 0, speedRate[subState - 10].tofloat());
else if(obj.getDirection() == ENUM_DIRECTION_LEFT && speedRate[subState - 10] > 0) sq_SetVelocity(obj, 0, -speedRate[subState - 10].tofloat());
break;
}
}
function onKeyFrameFlag_Precencia(obj, flagIndex)
{
if(!obj) return false;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
sq_flashScreen(obj, 100, 0, 50, 178, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 5, 100);
break;
case 1:
switch(flagIndex){
case 111: obj.sq_PlaySound("PRCENCIA_AVATAR_CAST"); break;
case 201: obj.sq_PlaySound("AVATAR_FINISH_CAST"); break;
case 202: sq_flashScreen(obj, 0, 80, 80, 255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break;
case 203:
obj.sq_PlaySound("WZ_AVATAR_FINISH");
obj.sq_PlaySound("AVATAR_FINISH");
sq_flashScreen(obj, 80, 0, 166, 255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER);
sq_SetMyShake(obj, 5, 240);
break;
case 301: sq_flashScreen(obj, 0, 80, 80, 255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); obj.sq_PlaySound("AVATAR_FINISH_CAST"); break;
case 302: sq_flashScreen(obj, 60, 60, 420, 204, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER); sq_SetMyShake(obj, 8, 160); obj.sq_PlaySound("AVATAR_FINISH"); break;
case 303: obj.sq_PlaySound("AVATAR_FINISH"); break;
}
break;
case 2:
switch(flagIndex){
case 101: sq_flashScreen(obj, 150, 0, 0, 76, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break;
}
break;
case 10: obj.sq_PlaySound("R_PRECENCIA_WEAPONSWING"); break;
case 11: obj.sq_PlaySound("PRECENCIA_WEAPONSWING"); break;
case 12: obj.sq_PlaySound("PRECENCIA_WEAPONSWING"); break;
}
return true;//
}
function onTimeEvent_Precencia(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 0:
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/avatar/precencia/avatar_inishxx1_26.ani", 0, 1, 0);
break;
}
}
function onEndState_Precencia(obj, new_state)
{
if(!obj) return;
if(new_state != SKILL_BYKK_PRECENCIA){
sq_EndDrawCastGauge(obj);
}
}
function onAttack_Precencia(obj, damager, boundingBox, isStuck)
{
if(!obj) return;
if(isStuck) return;
if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return;
if(obj.getSkillSubState() != 12) return;
local createMax = sq_GetIntData(obj, SKILL_BYKK_CHASER, 0);
if(obj.getVar("kksChaser").get_obj_vector_size() < createMax) createBattlemageChaser(obj);
}
function checkExecutableSkill_Quasarexplosion(obj)
{
if (!obj) return false;
if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_QUASAREXPLOSION);
if (isUse){
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2);
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1);
else obj.getVar("skillSub").setInt(100, 0);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_BYKK_QUASAREXPLOSION, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Quasarexplosion(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Quasarexplosion(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
obj.sq_ZStop();
switch(subState){
case 0:
if(obj.getVar("skillSub").getInt(100) == 0){
obj.sq_SetCurrentAnimation(290);
obj.sq_PlaySound("WZ_QUASAR_EXPLOSION_READY");
}
else if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_SetCurrentAnimation(292);
else if(obj.getVar("skillSub").getInt(100) == 1){
local Ani = getCurrentAnimation_precencia(obj, "QuasarExplosionPrecencia_Start_Normal", false, false);
obj.setCurrentAnimation(Ani);
}
obj.sq_PlaySound("PRECENCIA_QUASAR_1_CAST");
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
break;
case 1:
obj.sq_SetCurrentAnimation(294);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(0, 0);
local speedRate = 6000 / delay;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_QUASAREXPLOSION, -1, 0, 1.0) + 100;
if(obj.getWeaponSubType() == 1 && sq_GetSkillLevel(obj, SKILL_BYKK_POLEMASTERY) > 0) totalDamage = totalDamage * (1000 + sq_GetIntData(obj, SKILL_BYKK_POLEMASTERY, 4)) / 1000;
cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,0,0,obj.getDirection(),SKILL_BYKK_QUASAREXPLOSION,1,totalDamage,speedRate,0,0,0,0,0,0);
obj.sq_PlaySound("WZ_PRECENCIA_QUASAR_1_01");
obj.setTimeEvent(0, 500 / speedRate, 1, false);
break;
case 2:
if(obj.getVar("skillSub").getInt(100) == 0){
obj.sq_SetCurrentAnimation(291);
}
else if(obj.getVar("skillSub").getInt(100) == 2){
obj.sq_SetCurrentAnimation(293);
}
else if(obj.getVar("skillSub").getInt(100) == 1){
local Ani = getCurrentAnimation_precencia(obj, "QuasarExplosionPrecencia_Normal_End", false, false);
obj.setCurrentAnimation(Ani);
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
if(obj.getVar("skillSub").getInt(100) < 2){
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(0, 0);
local speedRate = 6100 / delay;
local aniPath = ["character/mage/effect/animation/battlemage_bykk/quasarexplosion/precencia/quasarexplosion_normal_end_00.ani","character/mage/effect/animation/battlemage_bykk/quasarexplosion/precencia/quasarexplosion_normal_end_01.ani","character/mage/effect/animation/battlemage_bykk/quasarexplosion/precencia/quasarexplosion_normal_end_02.ani","character/mage/effect/animation/battlemage_bykk/quasarexplosion/precencia/quasarexplosion_normal_end_03.ani"];
for(local i = 0; i < aniPath.len(); i++){
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath[i], 0, 1, 0);
local pAni = pooledObj.getCurrentAnimation();
pAni.setSpeedRate(speedRate.tofloat());
}
}
break;
}
}
function onEndCurrentAni_Quasarexplosion(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_BYKK_QUASAREXPLOSION, STATE_PRIORITY_AUTO, true);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_Quasarexplosion(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_Quasarexplosion(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 101: sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/quasarexplosion/precencia/quasarexplosion_start_normal_02.ani", 0, 1, 0); break;
case 102: sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/quasarexplosion/precencia/quasarexplosion_start_normal_03.ani", 0, 1, 0); break;
}
return true;
}
function onTimeEvent_Quasarexplosion(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 0:
switch(obj.getVar("skillSub").getInt(100)){
case 0: obj.sq_PlaySound("WZ_QUASAR_EXPLOSION_FIN"); break;
case 2: obj.sq_PlaySound("WZ_PRECENCIA_QUASAR_2_01"); break;
}
break;
}
}
function onEndState_Quasarexplosion(obj, new_state)
{
if(!obj) return;
}
function checkExecutableSkill_RandomPierceStrike(obj)
{
if (!obj) return false;
if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_RANDOMPIERCESTRIKE);
if (isUse){
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2);
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1);
else obj.getVar("skillSub").setInt(100, 0);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_BYKK_RANDOMPIERCESTRIKE, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_RandomPierceStrike(obj)
{
if (!obj) return false;
return true;
}
function onSetState_RandomPierceStrike(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
if(obj.getVar("skillSub").getInt(100) == 2){
obj.sq_SetCurrentAnimation(249);
}
else{
if(obj.getVar("skillSub").getInt(100) == 1){
local Ani = getCurrentAnimation_precencia(obj, "RandomPierceStrikeTry", false, false);
obj.setCurrentAnimation(Ani);
}
else{
obj.sq_SetCurrentAnimation(12);
}
obj.sq_PlaySound("WZ_THUNDER_01", 2333);
}
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKE);
local hitMax = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKE, 6, skillLevel);
obj.getVar("rdps").setInt(10, hitMax);
obj.getVar("rdps").setInt(11, 0);
local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKE, 0, skillLevel);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 12));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
case 1:
if(obj.getVar("skillSub").getInt(100) == 2){
obj.sq_SetCurrentAnimation(248);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKE);
local hitTime = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKE, 9, skillLevel);
obj.setTimeEvent(0, hitTime, -1, false);
}
else{
if(obj.getVar("skillSub").getInt(100) == 1){
local Ani = getCurrentAnimation_precencia(obj, "RandomPierceStrikeLoop", false, false);
obj.setCurrentAnimation(Ani);
}
else{
obj.sq_SetCurrentAnimation(13);
}
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/randompiercestrike/hit.ani"), 200, -40);
}
break;
case 2:
obj.removeAllTimeEvent();
if(obj.getVar("skillSub").getInt(100) == 2){
obj.sq_SetCurrentAnimation(247);
obj.sq_PlaySound("PRECENCIA_PIERCESTRIKE_2_FINISH");
obj.sq_PlaySound("R_WZ_PRECENCIA_PIERCESTRIKE_2");
}
else{
if(obj.getVar("skillSub").getInt(100) == 1){
local Ani = getCurrentAnimation_precencia(obj, "RandomPierceStrikeFinish", false, false);
obj.setCurrentAnimation(Ani);
}
else{
obj.sq_SetCurrentAnimation(14);
}
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/randompiercestrike/swing.ani"), 0, 0);
obj.stopSound(2333);
obj.sq_PlaySound("WZ_THUNDER_02");
obj.setTimeEvent(1, 100, 1, false);
}
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKE);
local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKE, 2, skillLevel);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 13));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
}
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(attackInfo){
attackInfo.setAttackType(ATTACKTYPE_PHYSICAL);
sq_SetAddWeaponDamage(attackInfo, true);
}
local speed = 1.35;
if(obj.getVar("skillSub").getInt(100) == 1) speed = 0.3 + speed;
else if(obj.getVar("skillSub").getInt(100) == 2) speed = 0.5 + speed;
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed);
}
function onEndCurrentAni_RandomPierceStrike(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(SKILL_BYKK_RANDOMPIERCESTRIKE, STATE_PRIORITY_AUTO, true);
break;
case 1:
obj.resetHitObjectList();
obj.sq_IntVectClear();
if(obj.getVar("rdps").getInt(11) >= obj.getVar("rdps").getInt(10) - 1 || sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKE, 11, sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKE)) > 0) obj.sq_IntVectPush(2);
else{
obj.sq_IntVectPush(1);
obj.getVar("rdps").setInt(11, obj.getVar("rdps").getInt(11) + 1);
}
obj.sq_AddSetStatePacket(SKILL_BYKK_RANDOMPIERCESTRIKE, STATE_PRIORITY_AUTO, true);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_RandomPierceStrike(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
// sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true);
// sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
if(sq_IsKeyDown(OPTION_HOTKEY_SKILL, ENUM_SUBKEY_TYPE_ALL)){
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(SKILL_BYKK_RANDOMPIERCESTRIKE, STATE_PRIORITY_AUTO, true);
}
if(sq_IsKeyDown(OPTION_HOTKEY_JUMP, ENUM_SUBKEY_TYPE_ALL)){
obj.stopSound(2333);
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
}
break;
}
}
function onKeyFrameFlag_RandomPierceStrike(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1001:
sq_SetMyShake(obj, 8, 80);
break;
}
return true;
}
function onTimeEvent_RandomPierceStrike(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 0:
if(timeEventCount >= obj.getVar("rdps").getInt(10) - 1){
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(SKILL_BYKK_RANDOMPIERCESTRIKE, STATE_PRIORITY_AUTO, true);
}
else obj.resetHitObjectList();
break;
case 1:
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/randompiercestrike/dust.ani", 0, 0, 0);
break;
}
}
function onEndState_RandomPierceStrike(obj, new_state)
{
if(!obj) return;
}
function checkExecutableSkill_RandomPierceStrikeEx(obj)
{
if (!obj) return false;
if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_RANDOMPIERCESTRIKEEX);
if (isUse){
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2);
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1);
else obj.getVar("skillSub").setInt(100, 0);
if(RANDOMPIERCESTRIKEEX_STONE > 0 || sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 8, sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX)) > 0) obj.getVar("RandomPierceStrikeEx_tar").clear_obj_vector();
obj.sq_IntVectClear();
if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_IntVectPush(10);
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMPIERCESTRIKEEX, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_RandomPierceStrikeEx(obj)
{
if (!obj) return false;
return true;
}
function onSetState_RandomPierceStrikeEx(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
if(obj.getVar("skillSub").getInt(100) == 1){
local Ani = getCurrentAnimation_precencia(obj, "RandomPierceStrikeTry", false, false);
obj.setCurrentAnimation(Ani);
}
else obj.sq_SetCurrentAnimation(12);
obj.sq_PlaySound("WZ_THUNDER_01", 2333);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX);
local hitMax = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 7, skillLevel);
obj.getVar("rdpsex").setInt(10, hitMax);
obj.getVar("rdpsex").setInt(11, 0);
local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 3, skillLevel);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 29));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
case 1:
if(obj.getVar("skillSub").getInt(100) == 1){
local Ani = getCurrentAnimation_precencia(obj, "RandomPierceStrikeLoopEx", false, false);
obj.setCurrentAnimation(Ani);
}
else obj.sq_SetCurrentAnimation(56);
obj.setTimeEvent(2, 100, -1, false);
break;
case 2:
if(obj.isExistTimeEvent(2)) obj.stopTimeEvent(2);
if(obj.getVar("skillSub").getInt(100) == 1){
local Ani = getCurrentAnimation_precencia(obj, "RandomPierceStrikeChargeEx", false, false);
obj.setCurrentAnimation(Ani);
}
else obj.sq_SetCurrentAnimation(57);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/charge_dodge.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/charge_light_dodge.ani"), 0, 0);
break;
case 3:
if(obj.isExistTimeEvent(2)) obj.stopTimeEvent(2);
if(obj.getVar("skillSub").getInt(100) == 1){
local Ani = getCurrentAnimation_precencia(obj, "RandomPierceStrikeFinishEx", false, false);
obj.setCurrentAnimation(Ani);
}
else obj.sq_SetCurrentAnimation(58);
obj.removeAllTimeEvent();
obj.stopSound(2333);
obj.sq_PlaySound("WZ_THUNDER_02");
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX);
local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 5, skillLevel);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 30));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/bluelight_dodge1.ani"), 180, -40);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/bluelight_dodge2.ani"), 180, -40);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/end_dodge.ani"), 180, -40);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/glow_dodge.ani"), 180, -40);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/redlight_dodge.ani"), 180, -40);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/shadow_dodge.ani"), 180, -40);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/shadow_normal.ani"), 180, -40);
break;
case 10:
obj.sq_SetCurrentAnimation(251);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX);
local hitMax = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 7, skillLevel);
obj.getVar("rdpsex").setInt(10, hitMax);
obj.getVar("rdpsex").setInt(11, 0);
local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 3, skillLevel);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 29));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local hitTime = sq_GetIntData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 8);
obj.setTimeEvent(1, hitTime, -1, false);
break;
case 11:
obj.sq_SetCurrentAnimation(252);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/precencia/sinrairenloop_10.ani"), 0, 0);
break;
case 12:
obj.sq_SetCurrentAnimation(253);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/precencia/sinrairenloop_10.ani"), 0, 0);
break;
case 13:
obj.sq_SetCurrentAnimation(254);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/randompiercestrikeex/precencia/sinrairenloop_10.ani"), 0, 0);
break;
case 14:
obj.removeAllTimeEvent();
obj.sq_SetCurrentAnimation(250);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX);
local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 5, skillLevel);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 30));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
}
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(attackInfo){
attackInfo.setAttackType(ATTACKTYPE_PHYSICAL);
sq_SetAddWeaponDamage(attackInfo, true);
}
local speed = 1.35;
if(obj.getVar("skillSub").getInt(100) == 1) speed = 0.3 + speed;
else if(obj.getVar("skillSub").getInt(100) == 2) speed = 0.5 + speed;
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed);
if(subState == 1){
local currentAni = obj.getCurrentAnimation();
obj.setTimeEvent(1, currentAni.getDelaySum(false), -1, false);
local speedRate = 4000.0 / currentAni.getDelaySum(0, 0);
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/randompiercestrikeex/pierce_dodge.ani", 200, 1, 40);
local pAni = pooledObj.getCurrentAnimation();
pAni.setSpeedRate(speedRate);
}
}
function onEndCurrentAni_RandomPierceStrikeEx(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMPIERCESTRIKEEX, STATE_PRIORITY_AUTO, true);
break;
case 1:
obj.resetHitObjectList();
obj.sq_IntVectClear();
if(obj.getVar("rdpsex").getInt(11) >= obj.getVar("rdpsex").getInt(10) - 1 || sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 14, sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX)) > 0) obj.sq_IntVectPush(2);
else{
obj.sq_IntVectPush(1);
obj.getVar("rdpsex").setInt(11, obj.getVar("rdpsex").getInt(11) + 1);
}
obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMPIERCESTRIKEEX, STATE_PRIORITY_AUTO, true);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_IntVectPush(3);
obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMPIERCESTRIKEEX, STATE_PRIORITY_AUTO, true);
break;
case 3:
case 14:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
case 10:
obj.sq_IntVectClear();
obj.sq_IntVectPush(11);
obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMPIERCESTRIKEEX, STATE_PRIORITY_AUTO, true);
break;
case 11:
case 12:
case 13:
local pushstate = subState + 1;
if(subState == 13) pushstate = 11;
obj.sq_IntVectClear();
obj.sq_IntVectPush(pushstate);
obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMPIERCESTRIKEEX, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_RandomPierceStrikeEx(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
case 10:
case 11:
case 12:
case 13:
if(sq_IsKeyDown(OPTION_HOTKEY_SKILL, ENUM_SUBKEY_TYPE_ALL)){
obj.sq_IntVectClear();
if(subState < 10) obj.sq_IntVectPush(2);
else obj.sq_IntVectPush(14);
obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMPIERCESTRIKEEX, STATE_PRIORITY_AUTO, true);
}
if(sq_IsKeyDown(OPTION_HOTKEY_JUMP, ENUM_SUBKEY_TYPE_ALL)){
obj.stopSound(2333);
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
}
break;
}
}
function onKeyFrameFlag_RandomPierceStrikeEx(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1001:
print("test");
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/randompiercestrikeex/precencia/randompiercestrikeex_finish_02.ani", 0, 1, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/randompiercestrikeex/precencia/randompiercestrikeex_finish_01.ani", 0, 1, 0);
sq_SetMyShake(obj, 20, 150);
break;
case 1002:
obj.sq_PlaySound("R_WZ_PRECENCIA_PIERCESTRIKE_EX_2");
obj.sq_PlaySound("PRECENCIA_PIERCESTRIKE_EX_2_FINISH");
break;
}
return true;
}
function onTimeEvent_RandomPierceStrikeEx(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 0:
if(timeEventCount >= obj.getVar("rdpsex").getInt(10) - 1){
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMPIERCESTRIKEEX, STATE_PRIORITY_AUTO, true);
}
else obj.resetHitObjectList();
break;
case 1:
if(timeEventCount >= obj.getVar("rdpsex").getInt(10) - 1){
obj.sq_IntVectClear();
obj.sq_IntVectPush(14);
obj.sq_AddSetStatePacket(STATE_BYKK_RANDOMPIERCESTRIKEEX, STATE_PRIORITY_AUTO, true);
}
else obj.resetHitObjectList();
break;
case 2: obj.sq_PlaySound("R_P_THUNDER_ATK"); break;
}
}
function onEndState_RandomPierceStrikeEx(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_BYKK_RANDOMPIERCESTRIKEEX){
local size = obj.getVar("RandomPierceStrikeEx_tar").get_obj_vector_size();
if(size > 0){
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX);
local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 5, skillLevel) * 19 / 100;
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("RandomPierceStrikeEx_tar").get_obj_vector(i);
if(targetObj){
local group = sq_GetGroup(targetObj);
local uniqueId = sq_GetUniqueId(targetObj);
cearteSkillPassive_Battlemage_bykk(obj,targetObj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,0,0,obj.getDirection(),SKILL_BYKK_RANDOMPIERCESTRIKEEX,1,totalDamage,group,uniqueId,0,0,0,0,0);
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/mage/battlemage_bykk/ap/ap_randompiercestrikeex.nut");
addAppendage.sq_SetValidTime(1000);
}
}
}
}
}
function onAttack_RandomPierceStrikeEx(obj, damager, boundingBox, isStuck)
{
if(!obj) return;
if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return;
if(RANDOMPIERCESTRIKEEX_STONE < 1 && sq_GetLevelData(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX, 8, sq_GetSkillLevel(obj, SKILL_BYKK_RANDOMPIERCESTRIKEEX)) < 1) return;
if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/mage/battlemage_bykk/ap/ap_randompiercestrikeex.nut")) return;
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/mage/battlemage_bykk/ap/ap_randompiercestrikeex.nut", true);
sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage);
if(!obj.getVar("RandomPierceStrikeEx_tar").is_obj_vector(damager)) obj.getVar("RandomPierceStrikeEx_tar").push_obj_vector(damager);
}
function checkExecutableSkill_Returntobm(obj)
{
if (!obj) return false;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")){
CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut");
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_BYKK_PRECENCIA, STATE_PRIORITY_USER, true);
}
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")){
CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut");
// obj.sq_SendCreatePassiveObjectPacket(1008605, 0, 0, 1, 200);
obj.setObjectHeight(-1);
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(SKILL_BYKK_PRECENCIA, STATE_PRIORITY_USER, true);
}
return true;
}
function checkCommandEnable_Returntobm(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Returntobm(obj, state, datas, isResetTimer)
{
if(!obj) return;
}
function onEndCurrentAni_Returntobm(obj)
{
if(!obj) return;
}
function onProcCon_Returntobm(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_Returntobm(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_Returntobm(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_Returntobm(obj, new_state)
{
if(!obj) return;
}
function checkExecutableSkill_StrengthHandStrike(obj)
{
if (!obj) return false;
if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_STRENGTHHANDSTRIKE);
if (isUse){
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealon.nut")) obj.getVar("skillSub").setInt(100, 2);
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_precencia_sealoff.nut")) obj.getVar("skillSub").setInt(100, 1);
else obj.getVar("skillSub").setInt(100, 0);
obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_STRENGTHHANDSTRIKE);
obj.getVar("shsBool").setBool(0, true);
if(STRENGTHHANDSTRIKE_STONE > 0 || sq_GetLevelData(obj, SKILL_BYKK_STRENGTHHANDSTRIKE, 12, sq_GetSkillLevel(obj, SKILL_BYKK_STRENGTHHANDSTRIKE)) > 0){
obj.sq_IntVectClear();
obj.sq_IntVectPush(21);
obj.sq_AddSetStatePacket(SKILL_BYKK_STRENGTHHANDSTRIKE, STATE_PRIORITY_IGNORE_FORCE, true);
}
else{
obj.sq_IntVectClear();
if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_IntVectPush(10);
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_BYKK_STRENGTHHANDSTRIKE, STATE_PRIORITY_IGNORE_FORCE, true);
}
return true;
}
return false;
}
function checkCommandEnable_StrengthHandStrike(obj)
{
if (!obj) return false;
return true;
}
function onSetState_StrengthHandStrike(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
if(obj.getVar("skillSub").getInt(100) == 1){
local Ani = getCurrentAnimation_precencia(obj, "StrengthHandStrike", false, false);
obj.setCurrentAnimation(Ani);
}
else obj.sq_SetCurrentAnimation(15);
obj.sq_PlaySound("WZ_RAIDP_01", 2332);
obj.sq_PlaySound("RAIDP_CHARGE_LOOP", 2333);
cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,1,0,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,1,0,0,0,0,0,0,0,0);
cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,-1,0,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,2,0,0,0,0,0,0,0,0);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STRENGTHHANDSTRIKE, -1, 1, 1.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 14));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(attackInfo){
attackInfo.setAttackType(ATTACKTYPE_PHYSICAL);
sq_SetAddWeaponDamage(attackInfo, true);
}
break;
case 1:
if(obj.getVar("skillSub").getInt(100) == 1){
local Ani = getCurrentAnimation_precencia(obj, "StrengthHandStrikeReturn", false, false);
obj.setCurrentAnimation(Ani);
}
else obj.sq_SetCurrentAnimation(16);
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(false);
obj.setTimeEvent(2, delay / 21, 6, true);
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/strengthhandstrike/end_body_fade.ani", 0, 0, 0);
break;
case 10:
obj.sq_SetCurrentAnimation(261);
cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,1,0,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,11,0,0,0,0,0,0,0,0);
cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,-1,0,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,12,0,0,0,0,0,0,0,0);
obj.sq_PlaySound("R_WZ_PRECENCIA_STRENGTHHANDSTRIKE_1", 2332);
obj.sq_PlaySound("RAIDP_CHARGE_LOOP", 2333);
break;
case 11:
obj.sq_SetCurrentAnimation(258);
break;
case 12:
obj.sq_SetCurrentAnimation(259);
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(false);
obj.setTimeEvent(2, delay / 21, 6, true);
break;
case 21:
if(obj.getVar("skillSub").getInt(100) == 2){
obj.sq_SetCurrentAnimation(262);
obj.sq_PlaySound("R_WZ_PRECENCIA_STRENGTHHANDSTRIKE_1", 2332);
obj.sq_PlaySound("RAIDP_CHARGE_LOOP", 2333);
}
else{
if(obj.getVar("skillSub").getInt(100) == 1){
local Ani = getCurrentAnimation_precencia(obj, "StrengthHandStrikeShootCharge", false, false);
obj.setCurrentAnimation(Ani);
}
else obj.sq_SetCurrentAnimation(277);
obj.sq_PlaySound("WZ_RAIDP_01", 2332);
obj.sq_PlaySound("RAIDP_CHARGE_LOOP", 2333);
cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,1,0,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,1,0,0,0,0,0,0,0,0);
cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,-1,0,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,2,0,0,0,0,0,0,0,0);
}
break;
case 22:
if(obj.getVar("skillSub").getInt(100) == 2){
obj.sq_SetCurrentAnimation(260);
obj.stopSound(2332);
obj.stopSound(2333);
obj.sq_PlaySound("WZ_PRECENCIA_STRENGTHHANDSTRIKE_2");
}
else{
if(obj.getVar("skillSub").getInt(100) == 1){
local Ani = getCurrentAnimation_precencia(obj, "StrengthHandStrikeShoot", false, false);
obj.setCurrentAnimation(Ani);
}
else obj.sq_SetCurrentAnimation(276);
obj.stopSound(2332);
obj.stopSound(2333);
obj.sq_PlaySound("WZ_RAIDP_02");
local size = obj.getVar("kksshs").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local shsObj = obj.getVar("kksshs").get_obj_vector(i);
if(shsObj){
local colObj = sq_GetCNRDObjectToCollisionObject(shsObj);
colObj.setValid(false);
}
}
}
}
break;
}
if(subState < 10){
local speedRate = 1.0;
if(obj.getVar("skillSub").getInt(100) == 1) speedRate = 1.3;
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate);
}
}
function onEndCurrentAni_StrengthHandStrike(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 10:
case 11:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_BYKK_STRENGTHHANDSTRIKE, STATE_PRIORITY_AUTO, true);
break;
case 1:
case 12:
case 22:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_StrengthHandStrike(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 10:
case 21:
local bDownKey = obj.isDownSkillLastKey();
if(!bDownKey){
if(subState == 0 || subState == 10){
local frameIndex = sq_GetCurrentFrameIndex(obj);
if((frameIndex == 7 && subState == 0) || (frameIndex == 2 && subState == 10)){
local currentAni = obj.getCurrentAnimation();
local setFrame = 8;
if(subState == 10) setFrame = 3;
currentAni.setCurrentFrameWithChildLayer(setFrame);
local size = obj.getVar("kksshs").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local shsObj = obj.getVar("kksshs").get_obj_vector(i);
if(shsObj){
local colObj = sq_GetCNRDObjectToCollisionObject(shsObj);
colObj.setValid(false);
}
}
}
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(setFrame, setFrame);
obj.getVar("shs_move").setInt(10, sq_GetXPos(obj));
obj.getVar("shs_move").setInt(11, 400);
obj.setTimeEvent(0, delay, 1, false);
obj.stopSound(2332);
obj.stopSound(2333);
if(subState == 0){
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/strengthhandstrike/attack_short.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/strengthhandstrike/attack_long.ani"), 0, 0);
obj.sq_PlaySound("WZ_RAIDP_02");
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/strengthhandstrike/start_body_fade.ani", 0, 0, 0);
local attackInfo = sq_GetCurrentAttackInfo(obj);
local upForce = sq_GetLevelData(obj, SKILL_BYKK_STRENGTHHANDSTRIKE, 2, sq_GetSkillLevel(obj, SKILL_BYKK_STRENGTHHANDSTRIKE));
if(obj.getVar("shsBool").getBool(0)) upForce = sq_GetLevelData(obj, SKILL_BYKK_UPPERSWING, 3, sq_GetSkillLevel(obj, SKILL_BYKK_STRENGTHHANDSTRIKE));
sq_SetCurrentAttacknUpForce(attackInfo, upForce);
}
else{
obj.sq_PlaySound("WZ_PRECENCIA_STRENGTHHANDSTRIKE_2");
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STRENGTHHANDSTRIKE, -1, 1, 1.0) + 100;
local upForce = sq_GetLevelData(obj, SKILL_BYKK_STRENGTHHANDSTRIKE, 2, sq_GetSkillLevel(obj, SKILL_BYKK_STRENGTHHANDSTRIKE));
if(obj.getVar("shsBool").getBool(0)) upForce = sq_GetLevelData(obj, SKILL_BYKK_UPPERSWING, 3, sq_GetSkillLevel(obj, SKILL_BYKK_STRENGTHHANDSTRIKE));
cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,170,1,120,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,20,totalDamage,upForce,0,0,0,0,0,0);
}
}
}
else{
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_BYKK_STRENGTHHANDSTRIKE, STATE_PRIORITY_AUTO, true);
}
}
else{
local stateTime = obj.sq_GetStateTimer();
local fullchargeTime = sq_GetIntData(obj, SKILL_BYKK_STRENGTHHANDSTRIKE, 2);
if(sq_GetSkillLevel(obj, SKILL_BYKK_SPEARMASTERY) > 0 && obj.getWeaponSubType() == 0) fullchargeTime = fullchargeTime * ( 100 - sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 4)) / 100;
if(stateTime >= fullchargeTime && obj.getVar("shsBool").getBool(0)){
obj.getVar("shsBool").setBool(0, false);
obj.sq_PlaySound("RAIDP_FULL");
cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,1,0,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,3,0,0,0,0,0,0,0,0);
cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,-1,0,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,4,0,0,0,0,0,0,0,0);
obj.sq_SetSuperArmor(POD_VAR_SUPERARMOR);
}
}
break;
}
}
function onKeyFrameFlag_StrengthHandStrike(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1001:
sq_SetShake(obj, 10, 150);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STRENGTHHANDSTRIKE, -1, 1, 1.0) + 100;
cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,56,0,63,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,21,totalDamage,100,0,0,0,0,0,0);
break;
case 2001:
sq_SetShake(obj, 10, 150);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_STRENGTHHANDSTRIKE, -1, 1, 1.0) + 100;
cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,170,1,120,obj.getDirection(),SKILL_BYKK_STRENGTHHANDSTRIKE,21,totalDamage,150,0,0,0,0,0,0);
break;
}
return true;
}
function onTimeEvent_StrengthHandStrike(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 0:
local currentAni = obj.getCurrentAnimation();
local poleAniFrameNumber = sq_GetAniFrameNumber(currentAni, 0);
local startFrame = 9;
if(obj.getSkillSubState() == 10) startFrame = 4;
local delay = currentAni.getDelaySum(startFrame, poleAniFrameNumber);
obj.setTimeEvent(1, delay / 50, 30, true);
break;
case 1:
local v = sq_GetUniformVelocity(0, 400, timeEventCount, 30);
local dstX = sq_GetDistancePos(obj.getVar("shs_move").getInt(10), obj.getDirection(), v);
sq_setCurrentAxisPos(obj, 0, dstX);
// obj.sq_SetXScrollStop(0);
if(timeEventCount >= 30){
obj.getVar("shs_move").setInt(12, sq_GetXPos(obj));
obj.sq_PlaySound("RAIDP_ATK");
if(obj.getSkillSubState() == 0) sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/strengthhandstrike/damage.ani", 50, 0, 10);
}
break;
case 2:
local v = sq_GetUniformVelocity(obj.getVar("shs_move").getInt(12), obj.getVar("shs_move").getInt(10), timeEventCount, 5);
sq_setCurrentAxisPos(obj, 0, v);
// obj.sq_SetXScrollStop(0);
break;
}
}
function onEndState_StrengthHandStrike(obj, new_state)
{
if(!obj) return;
if(new_state != SKILL_BYKK_STRENGTHHANDSTRIKE){
local size = obj.getVar("kksshs").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local shsObj = obj.getVar("kksshs").get_obj_vector(i);
if(shsObj){
local colObj = sq_GetCNRDObjectToCollisionObject(shsObj);
colObj.setValid(false);
}
}
}
obj.stopSound(2332);
obj.stopSound(2333);
obj.sq_RemoveSuperArmor(POD_VAR_SUPERARMOR);
}
}
function onAttack_StrengthHandStrike(obj, damager, boundingBox, isStuck)
{
if(!obj) return;
if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return;
sq_SetMyShake(obj, 12, 80);
}