805 lines
31 KiB
C
805 lines
31 KiB
C
|
|
|
|
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///////////////////////
|
|
|
|
|