Rindro-Sqr/user/114.66.51.249/6_mage_3.c

805 lines
31 KiB
C
Raw Normal View History

2025-11-08 12:21:06 +08:00
function checkExecutableSkill_Swing(obj)
{
if (!obj) return false;
if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SWING);
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_SWING, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Swing(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Swing(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(sq_GetSkillLevel(obj, SKILL_BYKK_ARMONIA) > 0 && obj.getVar("kksChaser").get_obj_vector_size() > 0){//太古之力
if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_SetCurrentAnimation(264);
else if(obj.getVar("skillSub").getInt(100) == 0) obj.sq_SetCurrentAnimation(275);
else{
local Ani = getCurrentAnimation_precencia(obj, "SwingArmonia_Body", false, false);
obj.setCurrentAnimation(Ani);
}
if(obj.getVar("skillSub").getInt(100) < 2) obj.sq_PlaySound("WZ_SWING");
print(sq_GetLevelData(obj, SKILL_BYKK_SWING, 6, sq_GetSkillLevel(obj, SKILL_BYKK_SWING)));
print(sq_GetLevelData(obj, SKILL_BYKK_SWING, 5, sq_GetSkillLevel(obj, SKILL_BYKK_SWING)));
if(sq_GetLevelData(obj, SKILL_BYKK_SWING, 6, sq_GetSkillLevel(obj, SKILL_BYKK_SWING)) < 1){
local chaserObj = obj.getVar("kksChaser").get_obj_vector(0);
if(chaserObj) chaserObj.setValid(false);
}
}
else{//普通形態
if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_SetCurrentAnimation(265);
else if(obj.getVar("skillSub").getInt(100) == 0) obj.sq_SetCurrentAnimation(3);
else{
local Ani = getCurrentAnimation_precencia(obj, "Swing", false, false);
obj.setCurrentAnimation(Ani);
}
if(obj.getVar("skillSub").getInt(100) < 2) obj.sq_PlaySound("WZ_SWING");
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SWING);
local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_SWING, 0, skillLevel);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 2));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(attackInfo){
attackInfo.setAttackType(ATTACKTYPE_PHYSICAL);
sq_SetAddWeaponDamage(attackInfo, true);
}
if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/swing/precencia/swing_05.ani"), 0, 0);
else obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/battlemage_bykk/swing.ani"), -50, 0);
}
local speed = 1.0 + (sq_GetIntData(obj, SKILL_BYKK_SWING, 0).tofloat()) / 200.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;
}
}
function onEndCurrentAni_Swing(obj)
{
if(!obj) return;
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
}
function onProcCon_Swing(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_Swing(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1:
obj.sq_PlaySound("PRECENCIA_ARMONIA_1_CAST");
break;
case 2:
obj.sq_PlaySound("PRECENCIA_ARMONIA_2_SMASH");
break;
case 3:
local sub = 0;
if(obj.getVar("skillSub").getInt(100) == 2){
obj.sq_PlaySound("R_WZ_PRECENCIA_SMASH");
sq_SetMyShake(obj, 3, 80);
sub = 1;
}
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(5, 5);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SWING);
local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_SWING, 0, skillLevel);
local sizeRate = 100 + sq_GetLevelData(obj, SKILL_BYKK_SWING, 7, skillLevel);
if(sq_GetLevelData(obj, SKILL_BYKK_SWING, 5, sq_GetSkillLevel(obj, SKILL_BYKK_SWING)) > 0 && obj.getVar("kksChaser").get_obj_vector_size() > 0){
local chaserObj = obj.getVar("kksChaser").get_obj_vector(0);
if(chaserObj) chaserObj.setValid(false);
sizeRate = sizeRate + 150;
}
if(sq_GetSkillLevel(obj, SKILL_BYKK_SPEARMASTERY) > 0 && obj.getWeaponSubType() == 0) sizeRate = sizeRate + sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 3);
cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,1,0,obj.getDirection(),SKILL_BYKK_SWING,1,sub,totalDamage,delay,sizeRate,0,0,0,0);
break;
case 4://`CancelFrame` 17 0 121
break;
}
return true;
}
function onTimeEvent_Swing(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_Swing(obj, new_state)
{
if(!obj) return;
}
function checkExecutableSkill_SwingEx(obj)
{
if (!obj) return false;
if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SWINGEX);
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("CancelBool").setBool(0, false);
if(sq_GetLevelData(obj, SKILL_BYKK_SWING, 5, sq_GetSkillLevel(obj, SKILL_BYKK_SWING)) > 0 && sq_GetSkill(obj, SKILL_BYKK_SWING).isInCoolTime()) obj.endSkillCoolTime(SKILL_BYKK_SWING);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_SWINGEX, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_SwingEx(obj)
{
if (!obj) return false;
return true;
}
function onSetState_SwingEx(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(264);
}
else{
if(obj.getVar("skillSub").getInt(100) == 1){
local Ani = getCurrentAnimation_precencia(obj, "SwingEx", false, false);
obj.setCurrentAnimation(Ani);
}
else obj.sq_SetCurrentAnimation(63);
obj.sq_PlaySound("WZ_SWING");
}
break;
}
local speed = 1.0 + (sq_GetLevelData(obj, SKILL_BYKK_SWINGEX, 18, sq_GetSkillLevel(obj, SKILL_BYKK_SWINGEX)).tofloat()) / 200.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);
if(obj.getVar("skillSub").getInt(100) != 2){
local currentAni = obj.getCurrentAnimation();
obj.setTimeEvent(0, currentAni.getDelaySum(0, 3), 1, false);
}
}
function onEndCurrentAni_SwingEx(obj)
{
if(!obj) return;
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
}
function onProcCon_SwingEx(obj)
{
if(!obj) return;
if(obj.getVar("CancelBool").getBool(0)){
local skillIndex = [SKILL_BYKK_DOUBLESWING,SKILL_BYKK_SWING,SKILL_BYKK_RANDOMPIERCESTRIKE, SKILL_BYKK_RANDOMPIERCESTRIKEEX, SKILL_BYKK_CHASERSEXPLOSION,SKILL_BYKK_STRENGTHHANDSTRIKE,SKILL_BYKK_DRAGONSPEAR];
for(local i = 0; i < skillIndex.len(); i++){
if(sq_GetSkill(obj, skillIndex[i]).isInCoolTime()) continue;
obj.setSkillCommandEnable(skillIndex[i], true);
local b_useskill = obj.sq_IsEnterSkill(skillIndex[i]);
if(b_useskill != -1){
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);
switch(skillIndex[i]){
case SKILL_BYKK_DOUBLESWING:
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_BYKK_DOUBLESWING, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case SKILL_BYKK_SWING:
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_SWING, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case SKILL_BYKK_RANDOMPIERCESTRIKE:
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_BYKK_RANDOMPIERCESTRIKE, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case SKILL_BYKK_RANDOMPIERCESTRIKEEX:
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);
break;
case SKILL_BYKK_CHASERSEXPLOSION:
local size = obj.getVar("kksChaser").get_obj_vector_size();
if(size < 2){
if (obj.isMessage()) sq_AddMessage(3573);
continue;
}
else{
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_CHASERSEXPLOSION, STATE_PRIORITY_IGNORE_FORCE, true);
}
break;
case SKILL_BYKK_STRENGTHHANDSTRIKE:
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);
}
break;
case SKILL_BYKK_DRAGONSPEAR:
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);
}
break;
}
}
}
}
}
function onKeyFrameFlag_SwingEx(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1:
obj.sq_PlaySound("PRECENCIA_ARMONIA_1_CAST");
break;
case 2:
obj.sq_PlaySound("PRECENCIA_ARMONIA_2_SMASH");
break;
case 3:
obj.sq_PlaySound("R_WZ_PRECENCIA_SMASH");
// sq_flashScreen(obj,100,20,80,102, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
// sq_SetMyShake(obj, 5, 200);
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(0, 0);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SWINGEX);
local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_SWINGEX, 0, skillLevel);
local sizeRate = 100 + sq_GetLevelData(obj, SKILL_BYKK_SWINGEX, 5, skillLevel);
if(obj.getWeaponSubType() == 0 && sq_GetSkillLevel(obj, SKILL_BYKK_SPEARMASTERY) > 0) sizeRate = sizeRate + sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 3);
cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,1,0,obj.getDirection(),SKILL_BYKK_SWINGEX,1,totalDamage,delay,sizeRate,0,0,0,0,0);
local time = 200 * delay / 70;
obj.setTimeEvent(1, time, 1, false);
break;
case 4://`CancelFrame` 17 0 121
obj.getVar("CancelBool").setBool(0, true);
break;
}
return true;
}
function onTimeEvent_SwingEx(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 0:
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(0, 0);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SWINGEX);
local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_SWINGEX, 0, skillLevel);
local sizeRate = 120 + sq_GetLevelData(obj, SKILL_BYKK_SWINGEX, 5, skillLevel);
if(obj.getWeaponSubType() == 0 && sq_GetSkillLevel(obj, SKILL_BYKK_SPEARMASTERY) > 0) sizeRate = sizeRate * (100 + sq_GetIntData(obj, SKILL_BYKK_SPEARMASTERY, 3)) / 100;
cearteSkillPassive_Battlemage_bykk(obj,obj,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,1,0,obj.getDirection(),SKILL_BYKK_SWINGEX,2,delay,sizeRate,totalDamage,0,0,0,0,0);
local time = 300 * delay / 70;
obj.setTimeEvent(1, time, 1, false);
break;
case 1:
sq_SetShake(obj, 5, 200);
break;
}
}
function onEndState_SwingEx(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_BYKK_SWINGEX){
obj.getVar("CancelBool").setBool(0, false);
}
}
function checkExecutableSkill_Thrust(obj)
{
if (!obj) return false;
if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_THRUST);
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("CancelBool").setBool(0, false);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_THRUST, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Thrust(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Thrust(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, "Thrust", false, false);
obj.setCurrentAnimation(Ani);
obj.sq_PlaySound("WZ_LEAP");
}
else if(obj.getVar("skillSub").getInt(100) == 2){
obj.sq_SetCurrentAnimation(268);
}
else{
obj.sq_SetCurrentAnimation(1);
obj.sq_PlaySound("WZ_LEAP");
}
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_THRUST);
local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_THRUST, 0, skillLevel);
local change = sq_GetLevelData(obj, SKILL_BYKK_THRUST, 3, skillLevel);
if(change > 0) totalDamage = (obj.sq_GetBonusRateWithPassive(174, -1, 0, 1.0) + 200) * change / 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(attackInfo){
attackInfo.setAttackType(ATTACKTYPE_PHYSICAL);
sq_SetAddWeaponDamage(attackInfo, true);
}
local speed = (1000 + sq_GetLevelData(obj, SKILL_BYKK_THRUST, 1, 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();
if(obj.getVar("skillSub").getInt(100) == 2) obj.setTimeEvent(0, pAni.getDelaySum(0,3), 1, false);
else obj.setTimeEvent(1, 100, 1, true);
break;
}
}
function onEndCurrentAni_Thrust(obj)
{
if(!obj) return;
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
}
function onProcCon_Thrust(obj)
{
if(!obj) return;
if(obj.getVar("CancelBool").getBool(0)){
local skillIndex = [SKILL_BYKK_UPPERSWING, SKILL_BYKK_HANDSTRIKE, SKILL_BYKK_POKETHROW, SKILL_BYKK_DOUBLESWING,SKILL_BYKK_SWING,SKILL_BYKK_RANDOMPIERCESTRIKE, SKILL_BYKK_RANDOMPIERCESTRIKEEX,SKILL_BYKK_STRENGTHHANDSTRIKE,SKILL_BYKK_DRAGONSPEAR, SKILL_BYKK_AVATARDANCE];
for(local i = 0; i < skillIndex.len(); i++){
if(sq_GetSkill(obj, skillIndex[i]).isInCoolTime()) continue;
obj.setSkillCommandEnable(skillIndex[i], true);
local b_useskill = obj.sq_IsEnterSkill(skillIndex[i]);
if(b_useskill != -1){
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);
switch(skillIndex[i]){
case SKILL_BYKK_UPPERSWING:
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_UPPERSWING, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case SKILL_BYKK_HANDSTRIKE:
obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_HANDSTRIKE);
obj.getVar("handstrike_move").setBool(100, false);
obj.getVar("handstrike_bool").setBool(0, true);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_HANDSTRIKE, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case SKILL_BYKK_POKETHROW:
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);
break;
case SKILL_BYKK_DOUBLESWING:
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_BYKK_DOUBLESWING, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case SKILL_BYKK_SWING:
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_SWING, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case SKILL_BYKK_RANDOMPIERCESTRIKE:
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_BYKK_RANDOMPIERCESTRIKE, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case SKILL_BYKK_RANDOMPIERCESTRIKEEX:
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);
break;
case SKILL_BYKK_STRENGTHHANDSTRIKE:
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);
}
break;
case SKILL_BYKK_DRAGONSPEAR:
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);
}
break;
case SKILL_BYKK_AVATARDANCE:
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_BYKK_AVATARDANCE, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
}
}
}
function onKeyFrameFlag_Thrust(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_Thrust(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 0:
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/thrust/thrust_04.ani", 0, 1, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/battlemage_bykk/thrust/thrust_05.ani", 0, 1, 0);
break;
case 1:
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/thrustover.ani", 200, 1, 50);
sq_AddDrawOnlyAniFromParent(obj, "character/mage/effect/animation/thrustunder.ani", 200, 1, 50);
break;
}
}
function onEndState_Thrust(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_BYKK_THRUST){
obj.getVar("CancelBool").setBool(0, false);
}
}
function onAttack_Thrust(obj, damager, boundingBox, isStuck)
{
if(!obj) return;
if(sq_getGrowType(obj) != 3) return;
obj.getVar("CancelBool").setBool(0, true);
local createMax = sq_GetIntData(obj, SKILL_BYKK_CHASER, 0);
if(obj.getVar("kksChaser").get_obj_vector_size() < createMax) createBattlemageChaser(obj);
}
function checkExecutableSkill_TimerBomb(obj)
{
if (!obj) return false;
if(obj.getState() == SKILL_BYKK_PRECENCIA && obj.getSkillSubState() < 10) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_TIMERBOMB);
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_TIMERBOMB, STATE_PRIORITY_IGNORE_FORCE, true);
obj.startSkillCoolTime(SKILL_BYKK_TIMERBOMB, sq_GetSkillLevel(obj, SKILL_BYKK_TIMERBOMB), -1);
return true;
}
return false;
}
function checkCommandEnable_TimerBomb(obj)
{
if (!obj) return false;
return true;
}
function onSetState_TimerBomb(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, "Timerbomb", false, false);
obj.setCurrentAnimation(Ani);
}
else if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_SetCurrentAnimation(269);
else obj.sq_SetCurrentAnimation(67);
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 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, 37));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
local attackInfo = sq_GetCurrentAttackInfo(obj);
if(attackInfo){
attackInfo.setAttackType(ATTACKTYPE_PHYSICAL);
sq_SetAddWeaponDamage(attackInfo, true);
}
}
function onEndCurrentAni_TimerBomb(obj)
{
if(!obj) return;
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
}
function onProcCon_TimerBomb(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_TimerBomb(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_TimerBomb(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_TimerBomb(obj, new_state)
{
if(!obj) return;
}
function onAttack_TimerBomb(obj, damager, boundingBox, isStuck)
{
if(!obj) return;
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DOUBLESWING, -1, 3, 1.0) + 100;
local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DOUBLESWING, -1, 4, 1.0) + 100;
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_DOUBLESWING);
local lifeTime = sq_GetLevelData(obj, SKILL_BYKK_TIMERBOMB, 1, skillLevel);
local hitTime = sq_GetIntData(obj, SKILL_BYKK_TIMERBOMB, 0);
local group = sq_GetGroup(damager);
local uniqueId = sq_GetUniqueId(damager);
local sub = sq_GetLevelData(obj, SKILL_BYKK_TIMERBOMB, 5, skillLevel);
local sub2 = sq_GetLevelData(obj, SKILL_BYKK_TIMERBOMB, 6, skillLevel);
cearteSkillPassive_Battlemage_bykk(obj,damager,PASSIVEOBJECT_BYKK_BATTLEMAGE,0,1,sq_GetCenterZPos(boundingBox),obj.getDirection(),SKILL_BYKK_TIMERBOMB,1,totalDamage,totalDamage2,lifeTime,hitTime,group,uniqueId,sub,sub2);
}
}
function checkExecutableSkill_UpperSwing(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_UPPERSWING);
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_UPPERSWING, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_UpperSwing(obj)
{
if (!obj) return false;
return true;
}
function onSetState_UpperSwing(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, "upperswing", false, false);
obj.setCurrentAnimation(Ani);
obj.sq_PlaySound("WZ_HEAVEN_HIT");
}
else if(obj.getVar("skillSub").getInt(100) == 2) obj.sq_SetCurrentAnimation(271);
else{
obj.sq_SetCurrentAnimation(2);
obj.sq_PlaySound("WZ_HEAVEN_HIT");
}
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_UPPERSWING);
local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_UPPERSWING, 0, skillLevel);
local change = sq_GetLevelData(obj, SKILL_BYKK_UPPERSWING, 5, 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 upForce = sq_GetLevelData(obj, SKILL_BYKK_UPPERSWING, 2, skillLevel);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/mage/battlemage_bykk/ap/ap_chaser.nut")) upForce = (upForce * sq_GetLevelData(obj, SKILL_BYKK_CHASER, 17, sq_GetSkillLevel(obj, SKILL_BYKK_CHASER)) * 0.4 / 100).tointeger();
print("upForce = "+upForce);
sq_SetCurrentAttacknUpForce(attackInfo, upForce);
attackInfo.setAttackType(ATTACKTYPE_PHYSICAL);
sq_SetAddWeaponDamage(attackInfo, true);
local speed = (1000 + sq_GetLevelData(obj, SKILL_BYKK_UPPERSWING, 1, 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;
print(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 delaySum = pAni.getDelaySum(false);
obj.setTimeEvent(0, delaySum / 50, 50, true);
obj.getVar("upswing_move").setInt(0, 0);
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) obj.getVar("upswing_move").setInt(0, 1);
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) obj.getVar("upswing_move").setInt(0, 2);
obj.getVar("upswing_move").setInt(10, sq_GetXPos(obj));
obj.getVar("upswing_move").setInt(11, sq_GetYPos(obj));
obj.getVar("upswing_move").setInt(12, 200);
break;
}
}
function onEndCurrentAni_UpperSwing(obj)
{
if(!obj) return;
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
}
function onProcCon_UpperSwing(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_UpperSwing(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_UpperSwing(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 0:
local baseX = obj.getVar("upswing_move").getInt(10);
local baseY = obj.getVar("upswing_move").getInt(11);
local v = sq_GetUniformVelocity(0, obj.getVar("upswing_move").getInt(12), timeEventCount, 50);
local vy = 0;
if(obj.getVar("upswing_move").getInt(0) == 1) vy = sq_GetUniformVelocity(0, -30, timeEventCount, 25);
else if(obj.getVar("upswing_move").getInt(0) == 2) vy = sq_GetUniformVelocity(0, 30, timeEventCount, 25);
if(timeEventCount > 25){
if(obj.getVar("upswing_move").getInt(0) == 1) vy = sq_GetUniformVelocity(0, 40, timeEventCount - 25, 25);
else if(obj.getVar("upswing_move").getInt(0) == 2) vy = sq_GetUniformVelocity(0, -40, timeEventCount - 25, 25);
}
local dstX = sq_GetDistancePos(baseX, obj.getDirection(), v);
if(obj.isMovablePos(dstX, sq_GetYPos(obj))){
sq_setCurrentAxisPos(obj, 0, dstX);
sq_setCurrentAxisPos(obj, 1, baseY + vy);
}
else{
obj.getVar("upswing_move").setInt(12, v);
}
break;
}
}
function onEndState_UpperSwing(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_BYKK_UPPERSWING){
sq_SimpleMoveToNearMovablePos(obj, 1200);
}
}
function onAttack_UpperSwing(obj, damager, boundingBox, isStuck)
{
if(!obj) return;
if(isStuck) return;
if(sq_getGrowType(obj) != 3) return;
if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return;
local createMax = sq_GetIntData(obj, SKILL_BYKK_CHASER, 0);
if(obj.getVar("kksChaser").get_obj_vector_size() < createMax) createBattlemageChaser(obj);
}
/////////////////////////battlemage_end///////////////////////