no message
This commit is contained in:
3396
user/116.205.165.25/1_atgunner_1.c
Normal file
3396
user/116.205.165.25/1_atgunner_1.c
Normal file
File diff suppressed because it is too large
Load Diff
2796
user/116.205.165.25/1_atgunner_2.c
Normal file
2796
user/116.205.165.25/1_atgunner_2.c
Normal file
File diff suppressed because it is too large
Load Diff
2971
user/116.205.165.25/1_atgunner_3.c
Normal file
2971
user/116.205.165.25/1_atgunner_3.c
Normal file
File diff suppressed because it is too large
Load Diff
3523
user/116.205.165.25/1_atgunner_4.c
Normal file
3523
user/116.205.165.25/1_atgunner_4.c
Normal file
File diff suppressed because it is too large
Load Diff
3756
user/116.205.165.25/1_atgunner_5.c
Normal file
3756
user/116.205.165.25/1_atgunner_5.c
Normal file
File diff suppressed because it is too large
Load Diff
1254
user/116.205.165.25/1_atgunner_6.c
Normal file
1254
user/116.205.165.25/1_atgunner_6.c
Normal file
File diff suppressed because it is too large
Load Diff
2946
user/116.205.165.25/25_priest_1.c
Normal file
2946
user/116.205.165.25/25_priest_1.c
Normal file
File diff suppressed because it is too large
Load Diff
3591
user/116.205.165.25/25_priest_2.c
Normal file
3591
user/116.205.165.25/25_priest_2.c
Normal file
File diff suppressed because it is too large
Load Diff
2078
user/116.205.165.25/25_priest_3.c
Normal file
2078
user/116.205.165.25/25_priest_3.c
Normal file
File diff suppressed because it is too large
Load Diff
3758
user/116.205.165.25/2_atpriest_1.c
Normal file
3758
user/116.205.165.25/2_atpriest_1.c
Normal file
File diff suppressed because it is too large
Load Diff
2636
user/116.205.165.25/2_atpriest_2.c
Normal file
2636
user/116.205.165.25/2_atpriest_2.c
Normal file
File diff suppressed because it is too large
Load Diff
3679
user/116.205.165.25/2_atpriest_3.c
Normal file
3679
user/116.205.165.25/2_atpriest_3.c
Normal file
File diff suppressed because it is too large
Load Diff
3511
user/116.205.165.25/2_atpriest_4.c
Normal file
3511
user/116.205.165.25/2_atpriest_4.c
Normal file
File diff suppressed because it is too large
Load Diff
2969
user/116.205.165.25/2_atpriest_5.c
Normal file
2969
user/116.205.165.25/2_atpriest_5.c
Normal file
File diff suppressed because it is too large
Load Diff
2264
user/116.205.165.25/2_atpriest_6.c
Normal file
2264
user/116.205.165.25/2_atpriest_6.c
Normal file
File diff suppressed because it is too large
Load Diff
2761
user/116.205.165.25/3_atswordman_1.c
Normal file
2761
user/116.205.165.25/3_atswordman_1.c
Normal file
File diff suppressed because it is too large
Load Diff
2513
user/116.205.165.25/3_atswordman_2.c
Normal file
2513
user/116.205.165.25/3_atswordman_2.c
Normal file
File diff suppressed because it is too large
Load Diff
2387
user/116.205.165.25/3_atswordman_3.c
Normal file
2387
user/116.205.165.25/3_atswordman_3.c
Normal file
File diff suppressed because it is too large
Load Diff
2419
user/116.205.165.25/3_atswordman_4.c
Normal file
2419
user/116.205.165.25/3_atswordman_4.c
Normal file
File diff suppressed because it is too large
Load Diff
3839
user/116.205.165.25/3_atswordman_5.c
Normal file
3839
user/116.205.165.25/3_atswordman_5.c
Normal file
File diff suppressed because it is too large
Load Diff
3324
user/116.205.165.25/3_atswordman_6.c
Normal file
3324
user/116.205.165.25/3_atswordman_6.c
Normal file
File diff suppressed because it is too large
Load Diff
3300
user/116.205.165.25/3_atswordman_7.c
Normal file
3300
user/116.205.165.25/3_atswordman_7.c
Normal file
File diff suppressed because it is too large
Load Diff
3622
user/116.205.165.25/3_atswordman_8.c
Normal file
3622
user/116.205.165.25/3_atswordman_8.c
Normal file
File diff suppressed because it is too large
Load Diff
3620
user/116.205.165.25/4_fighter_1.c
Normal file
3620
user/116.205.165.25/4_fighter_1.c
Normal file
File diff suppressed because it is too large
Load Diff
2980
user/116.205.165.25/4_fighter_2.c
Normal file
2980
user/116.205.165.25/4_fighter_2.c
Normal file
File diff suppressed because it is too large
Load Diff
1190
user/116.205.165.25/4_fighter_3.c
Normal file
1190
user/116.205.165.25/4_fighter_3.c
Normal file
File diff suppressed because it is too large
Load Diff
3058
user/116.205.165.25/5_gunner_1.c
Normal file
3058
user/116.205.165.25/5_gunner_1.c
Normal file
File diff suppressed because it is too large
Load Diff
3201
user/116.205.165.25/5_gunner_2.c
Normal file
3201
user/116.205.165.25/5_gunner_2.c
Normal file
File diff suppressed because it is too large
Load Diff
1970
user/116.205.165.25/5_gunner_3.c
Normal file
1970
user/116.205.165.25/5_gunner_3.c
Normal file
File diff suppressed because it is too large
Load Diff
3366
user/116.205.165.25/6_mage_1.c
Normal file
3366
user/116.205.165.25/6_mage_1.c
Normal file
File diff suppressed because it is too large
Load Diff
2862
user/116.205.165.25/6_mage_10.c
Normal file
2862
user/116.205.165.25/6_mage_10.c
Normal file
File diff suppressed because it is too large
Load Diff
1622
user/116.205.165.25/6_mage_11.c
Normal file
1622
user/116.205.165.25/6_mage_11.c
Normal file
File diff suppressed because it is too large
Load Diff
3301
user/116.205.165.25/6_mage_12.c
Normal file
3301
user/116.205.165.25/6_mage_12.c
Normal file
File diff suppressed because it is too large
Load Diff
2132
user/116.205.165.25/6_mage_13.c
Normal file
2132
user/116.205.165.25/6_mage_13.c
Normal file
File diff suppressed because it is too large
Load Diff
3354
user/116.205.165.25/6_mage_2.c
Normal file
3354
user/116.205.165.25/6_mage_2.c
Normal file
File diff suppressed because it is too large
Load Diff
804
user/116.205.165.25/6_mage_3.c
Normal file
804
user/116.205.165.25/6_mage_3.c
Normal file
@@ -0,0 +1,804 @@
|
||||
|
||||
|
||||
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///////////////////////
|
||||
|
||||
|
||||
3012
user/116.205.165.25/6_mage_4.c
Normal file
3012
user/116.205.165.25/6_mage_4.c
Normal file
File diff suppressed because it is too large
Load Diff
2677
user/116.205.165.25/6_mage_5.c
Normal file
2677
user/116.205.165.25/6_mage_5.c
Normal file
File diff suppressed because it is too large
Load Diff
3464
user/116.205.165.25/6_mage_6.c
Normal file
3464
user/116.205.165.25/6_mage_6.c
Normal file
File diff suppressed because it is too large
Load Diff
3579
user/116.205.165.25/6_mage_7.c
Normal file
3579
user/116.205.165.25/6_mage_7.c
Normal file
File diff suppressed because it is too large
Load Diff
3089
user/116.205.165.25/6_mage_8.c
Normal file
3089
user/116.205.165.25/6_mage_8.c
Normal file
File diff suppressed because it is too large
Load Diff
1881
user/116.205.165.25/6_mage_9.c
Normal file
1881
user/116.205.165.25/6_mage_9.c
Normal file
File diff suppressed because it is too large
Load Diff
2540
user/116.205.165.25/7_swordman_1.c
Normal file
2540
user/116.205.165.25/7_swordman_1.c
Normal file
File diff suppressed because it is too large
Load Diff
3521
user/116.205.165.25/7_swordman_2.c
Normal file
3521
user/116.205.165.25/7_swordman_2.c
Normal file
File diff suppressed because it is too large
Load Diff
1255
user/116.205.165.25/7_swordman_3.c
Normal file
1255
user/116.205.165.25/7_swordman_3.c
Normal file
File diff suppressed because it is too large
Load Diff
3677
user/116.205.165.25/8_thief_1.c
Normal file
3677
user/116.205.165.25/8_thief_1.c
Normal file
File diff suppressed because it is too large
Load Diff
2596
user/116.205.165.25/8_thief_2.c
Normal file
2596
user/116.205.165.25/8_thief_2.c
Normal file
File diff suppressed because it is too large
Load Diff
2563
user/116.205.165.25/8_thief_3.c
Normal file
2563
user/116.205.165.25/8_thief_3.c
Normal file
File diff suppressed because it is too large
Load Diff
3139
user/116.205.165.25/8_thief_4.c
Normal file
3139
user/116.205.165.25/8_thief_4.c
Normal file
File diff suppressed because it is too large
Load Diff
3467
user/116.205.165.25/8_thief_5.c
Normal file
3467
user/116.205.165.25/8_thief_5.c
Normal file
File diff suppressed because it is too large
Load Diff
939
user/116.205.165.25/8_thief_6.c
Normal file
939
user/116.205.165.25/8_thief_6.c
Normal file
@@ -0,0 +1,939 @@
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
function onStart_appendage_equipchakraweapon(appendage)
|
||||
{
|
||||
local parentObj = appendage.getParent();
|
||||
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
||||
local magicalEquAttack = 0, stunRate = 0, coolTime = 0, criticaldamageRate = 0, criticalRate = 0;
|
||||
local shurikenImproveLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_SHURIKENIMPROVE);
|
||||
local ninjutsuLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_NINJUTSU);
|
||||
local kurokagenojutsuLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_KUROKAGENOJUTSU);
|
||||
local fireMarkLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_FIREMARK);
|
||||
if(shurikenImproveLevel > 0 && obj.getWeaponSubType() == 5){
|
||||
magicalEquAttack = sq_GetLevelData(obj, SKILL_THBYKK_SHURIKENIMPROVE, 0, shurikenImproveLevel);
|
||||
stunRate = sq_GetLevelData(obj, SKILL_THBYKK_SHURIKENIMPROVE, 1, shurikenImproveLevel);
|
||||
}
|
||||
if(ninjutsuLevel > 0) coolTime = sq_GetLevelData(obj, SKILL_THBYKK_NINJUTSU, 6, ninjutsuLevel);
|
||||
if(kurokagenojutsuLevel > 0) criticaldamageRate = sq_GetLevelData(obj, SKILL_THBYKK_KUROKAGENOJUTSU, 39, kurokagenojutsuLevel);
|
||||
if(fireMarkLevel > 0) criticalRate = sq_GetLevelData(obj, SKILL_THBYKK_FIREMARK, 15, fireMarkLevel);
|
||||
// print("magicalEquAttack = "+magicalEquAttack);
|
||||
// print("stunRate = "+stunRate);
|
||||
// print("coolTime = "+coolTime);
|
||||
// print("criticaldamageRate = "+criticaldamageRate);
|
||||
// print("criticalRate = "+criticalRate);
|
||||
local change_appendage = appendage.sq_getChangeStatus("equipchakraweapon");
|
||||
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("equipchakraweapon",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
||||
if(change_appendage){
|
||||
change_appendage.clearParameter();
|
||||
if(magicalEquAttack > 0) change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (magicalEquAttack * 0.1).tofloat());
|
||||
if(stunRate > 0) change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK, false, (stunRate * -0.1).tofloat());
|
||||
if(coolTime > 0) change_appendage.addParameter(CHANGE_STATUS_TYPE_COOLTIME_DECLINE, true, (coolTime * -0.1).tofloat());
|
||||
if(criticaldamageRate > 0) change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_DAMAGE_RATE, false, (criticaldamageRate * 0.1 / 0.667).tofloat());
|
||||
if(criticalRate > 0) change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_HIT_RATE, false, (criticalRate * 0.1).tofloat());
|
||||
}
|
||||
}
|
||||
|
||||
function onAttackParent_appendage_equipchakraweapon(appendage, realAttacker, damager, boundingBox, isStuck)
|
||||
{
|
||||
if(!appendage) return;
|
||||
if(isStuck || !damager.isObjectType(OBJECTTYPE_ACTIVE)) return;
|
||||
// if(realAttacker.isObjectType(OBJECTTYPE_PASSIVE)){
|
||||
// local colObj = sq_GetCNRDObjectToCollisionObject(realAttacker);
|
||||
// if(colObj.getVar("skillIndex").getInt(0) == false) return;
|
||||
// }
|
||||
// local parentObj = appendage.getParent();
|
||||
// local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
||||
// local prob = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONMASTERY, -1, 6, 1.0) + 100;
|
||||
// if(sq_getRandom(1, 1000) < 1000 - prob) return;
|
||||
// if(damager.getVar("SFPoison").get_obj_vector_size() > 0){
|
||||
// local poisonObj = damager.getVar("SFPoison").get_obj_vector(0);
|
||||
// if(poisonObj){
|
||||
// local colObj = sq_GetCNRDObjectToCollisionObject(poisonObj);
|
||||
// local damage = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONMASTERY, -1, 4, 1.0) + 100;
|
||||
// local time = obj.sq_GetBonusRateWithPassive(SKILL_FWBYKK_POISONMASTERY, -1, 3, 1.0) + 100;
|
||||
// // print("damageAddSet = "+damage);
|
||||
// local baseDamage = colObj.getVar("damage").getInt(0);
|
||||
// colObj.getVar("damage").setInt(0, baseDamage + damage);
|
||||
// colObj.getVar("time").setInt(0, time);
|
||||
// colObj.getVar("custom").setInt(2, time / 500);
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
function ProcPassiveSkill_Kunoichi(obj, skill_index, skill_level)
|
||||
{
|
||||
if(!obj) return;
|
||||
switch(skill_index){
|
||||
case SKILL_THBYKK_EQUIPCHAKRAWEAPON:
|
||||
if(skill_level > 0){
|
||||
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, "character/thief/3_kunoichi_bykk/passiveskill/ap_equipchakraweapon.nut", true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function setState_Kunoichi(obj, state, datas, isResetTimer)
|
||||
{
|
||||
if(!obj) return;
|
||||
}
|
||||
|
||||
function setSwordKusanagiEffect(obj, pathName)
|
||||
{
|
||||
obj.sq_AddStateLayerAnimation(11001,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/swordofkusanagi/kusanagifrontweaponnormal/"+pathName+".ani"), 0, 0);
|
||||
obj.sq_AddStateLayerAnimation(11002,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/swordofkusanagi/kusanagifrontweapondodge/"+pathName+".ani"), 0, 0);
|
||||
obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/swordofkusanagi/kusanagibackweaponnormal/"+pathName+".ani"), 0, 0);
|
||||
obj.sq_AddStateLayerAnimation(-2,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/swordofkusanagi/kusanagibackweapondodge/"+pathName+".ani"), 0, 0);
|
||||
obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/swordofkusanagi/kusanagimufftop/"+pathName+".ani"), 0, 0);
|
||||
obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/3kunoichi_bykk/swordofkusanagi/kusanagimuffbot/"+pathName+".ani"), 0, 0);
|
||||
if(obj.getState() != 0){
|
||||
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, APDPATH_SWORDOFKUSANAGI_BUFF);
|
||||
addAppendage.sq_DeleteEffectFront();
|
||||
addAppendage.sq_DeleteEffectBack();
|
||||
}
|
||||
}
|
||||
|
||||
function resetDungeonStart_Kunoichi(obj, moduleType, resetReason, isDeadTower, isResetSkillUserCount)
|
||||
{
|
||||
if(!obj) return;
|
||||
}
|
||||
|
||||
function procSkill_Kunoichi(obj)
|
||||
{
|
||||
if(!obj) return;
|
||||
if(sq_GetSkillLevel(obj, SKILL_THBYKK_KURVEJADE) > 0){
|
||||
if(obj.getVar("kurvejadeBool").getBool(0) == false){
|
||||
if(obj.getVar("kurvejadeFireObj").get_obj_vector_size() < 1){
|
||||
obj.getVar("kurvejadeBool").setBool(0, true);
|
||||
createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 0, 70,sq_GetDirection(obj),3,SKILL_THBYKK_KURVEJADE,1,0,0,0,0,0,0,0,0);
|
||||
}
|
||||
}
|
||||
if(obj.getVar("kurvejadeBool").getBool(1) == false){
|
||||
if(obj.getVar("kurvejadeDarkObj").get_obj_vector_size() < 1){
|
||||
obj.getVar("kurvejadeBool").setBool(1, true);
|
||||
createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 0, 70,sq_GetDirection(obj),3,SKILL_THBYKK_KURVEJADE,2,0,0,0,0,0,0,0,0);
|
||||
}
|
||||
}
|
||||
if(obj.getVar("kurvejadeBool").getBool(2) == false){
|
||||
if(obj.getVar("kurvejadeLightObj").get_obj_vector_size() < 1){
|
||||
obj.getVar("kurvejadeBool").setBool(2, true);
|
||||
createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0, 0, 70,sq_GetDirection(obj),3,SKILL_THBYKK_KURVEJADE,3,0,0,0,0,0,0,0,0);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(sq_GetSkillLevel(obj, SKILL_THBYKK_FIREMARK) > 0){
|
||||
local skill = sq_GetSkill(obj, SKILL_THBYKK_FIREMARK);
|
||||
if(!skill.isSealFunction()){
|
||||
local timer = obj.getVar("fireMark").get_ct_vector(0);
|
||||
if(!timer){
|
||||
obj.getVar("fireMark").clear_ct_vector();
|
||||
obj.getVar("fireMark").push_ct_vector();
|
||||
timer = obj.getVar("fireMark").get_ct_vector(0);
|
||||
timer.Reset();
|
||||
timer.Start(10000,0);
|
||||
}
|
||||
local currentT = timer.Get();
|
||||
if(currentT > 1500){
|
||||
timer.Reset();
|
||||
timer.Start(10000,0);
|
||||
local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_FIREMARK);
|
||||
local rangeNear = sq_GetLevelData(obj, SKILL_THBYKK_FIREMARK, 7, skillLevel);
|
||||
local totalDamageNear = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FIREMARK, -1, 9, 1.0);
|
||||
local totalDamageExpNear = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FIREMARK, -1, 12, 1.0);
|
||||
local hitTimeNear = sq_GetLevelData(obj, SKILL_THBYKK_FIREMARK, 9, skillLevel);
|
||||
local lifeTimeNear = sq_GetLevelData(obj, SKILL_THBYKK_FIREMARK, 10, skillLevel);
|
||||
local rangeFar = sq_GetLevelData(obj, SKILL_THBYKK_FIREMARK, 0, skillLevel);
|
||||
local totalDamageFar = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FIREMARK, -1, 1, 1.0);
|
||||
local totalDamageExpFar = obj.sq_GetBonusRateWithPassive(SKILL_THBYKK_FIREMARK, -1, 5, 1.0);
|
||||
local hitTimeFar = sq_GetLevelData(obj, SKILL_THBYKK_FIREMARK, 2, skillLevel);
|
||||
local lifeTimeFar = sq_GetLevelData(obj, SKILL_THBYKK_FIREMARK, 3, skillLevel);
|
||||
sq_BinaryStartWrite();
|
||||
sq_BinaryWriteDword(3);
|
||||
sq_BinaryWriteDword(SKILL_THBYKK_FIREMARK);
|
||||
sq_BinaryWriteDword(1);
|
||||
sq_BinaryWriteDword(rangeNear);
|
||||
sq_BinaryWriteDword(totalDamageNear);
|
||||
sq_BinaryWriteDword(totalDamageExpNear);
|
||||
sq_BinaryWriteDword(hitTimeNear);
|
||||
sq_BinaryWriteDword(lifeTimeNear);
|
||||
sq_BinaryWriteDword(rangeFar);
|
||||
sq_BinaryWriteDword(totalDamageFar);
|
||||
sq_BinaryWriteDword(totalDamageExpFar);
|
||||
sq_BinaryWriteDword(hitTimeFar);
|
||||
sq_BinaryWriteDword(lifeTimeFar);
|
||||
sq_SendCreatePassiveObjectPacket(obj, PASSIVEOBJ_NUM_THIEF, 0, 0, 0, 0, sq_GetDirection(obj));
|
||||
}
|
||||
}
|
||||
}
|
||||
local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH);
|
||||
if(loadSlot){
|
||||
local loadNumber = loadSlot.getRemainLoadNumber();
|
||||
if(loadSlot.isCooling()){
|
||||
if(loadNumber > 0){
|
||||
if(obj.getVar("canSaveDeitiesreBirth").getBool(0) == false) obj.getVar("canSaveDeitiesreBirth").setBool(0, true);
|
||||
}
|
||||
else if(obj.getVar("canSaveDeitiesreBirth").getBool(0) == true) obj.getVar("canSaveDeitiesreBirth").setBool(0, false);
|
||||
}
|
||||
else{
|
||||
if(loadNumber < sq_GetIntData(obj, SKILL_THBYKK_DEITIESREBIRTH, 0)){
|
||||
//释放轮子
|
||||
local state = obj.getState();
|
||||
if(state == STATE_THBYKK_DEITIESREBIRTH) return;
|
||||
if(state == 1 || state == 2 || state == 3 || state == 4 || state == 5 || state == 9 || state == 6 || state == 7) obj.sq_RemoveSkillLoad(SKILL_THBYKK_DEITIESREBIRTH);
|
||||
else{
|
||||
obj.sq_IntVectClear();
|
||||
obj.sq_IntVectPush(1);
|
||||
obj.sq_AddSetStatePacket(STATE_THBYKK_DEITIESREBIRTH, STATE_PRIORITY_IGNORE_FORCE, true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else{
|
||||
obj.getVar("canSaveDeitiesreBirth").setBool(0, false);
|
||||
obj.sq_RemoveSkillLoad(SKILL_THBYKK_DEITIESREBIRTH);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(obj.getVar("SwordOfKusanagi").get_obj_vector_size() > 0 && obj.getVar("SwordOfKusanagiBool").getBool(0)){
|
||||
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
|
||||
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){
|
||||
obj.getVar("SwordOfKusanagiBool").setBool(0, false);
|
||||
obj.sq_IntVectClear();
|
||||
obj.sq_IntVectPush(1);
|
||||
obj.sq_AddSetStatePacket(STATE_THBYKK_SWORDOFKUSANAGI, STATE_PRIORITY_IGNORE_FORCE, true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if(obj.getVar("SwordOfKusanagiBool").getBool(1)){
|
||||
local state = obj.getState();
|
||||
if(state == 1 || state == 2 || state == 3 || state == 4 || state == 5 || state == 9 || state == 6 || state == 7){
|
||||
obj.setSkillCommandEnable(SKILL_THBYKK_SWORDOFKUSANAGI,false);
|
||||
return;
|
||||
}
|
||||
else{
|
||||
obj.setSkillCommandEnable(SKILL_THBYKK_SWORDOFKUSANAGI,true);
|
||||
if(obj.sq_IsEnterSkill(SKILL_THBYKK_SWORDOFKUSANAGI) != -1){
|
||||
obj.getVar("SwordOfKusanagiBool").setBool(1, false);
|
||||
obj.sq_IntVectClear();
|
||||
obj.sq_IntVectPush(2);
|
||||
obj.sq_AddSetStatePacket(STATE_THBYKK_SWORDOFKUSANAGI, STATE_PRIORITY_IGNORE_FORCE, true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function procAppend_Kunoichi(obj)
|
||||
{
|
||||
if(!obj) return;
|
||||
local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_LEAVETRACE);
|
||||
if(loadSlot){
|
||||
local loadNumber = loadSlot.getRemainLoadNumber();
|
||||
if(!loadSlot.isCooling()){
|
||||
local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_LEAVETRACE);
|
||||
local countMax = sq_GetLevelData(obj, SKILL_THBYKK_LEAVETRACE, 0, skillLevel);
|
||||
local mirrorofyataLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_MIRROROFYATA);
|
||||
if(mirrorofyataLevel > 0){
|
||||
countMax = countMax + sq_GetLevelData(obj, SKILL_THBYKK_MIRROROFYATA, 1, mirrorofyataLevel);
|
||||
}
|
||||
if(loadNumber < countMax){
|
||||
loadSlot.increaseLoadCount(1);
|
||||
loadSlot.setStartCool();
|
||||
}
|
||||
}
|
||||
if(loadNumber > 0){
|
||||
if(obj.getVar("createLeaveTraceObj").getBool(0)) return;
|
||||
local state = obj.getState();
|
||||
local subState = obj.getSkillSubState();
|
||||
switch(state){
|
||||
case STATE_THBYKK_AMATERAS:
|
||||
case STATE_THBYKK_BIGKUNAI:
|
||||
case STATE_THBYKK_DOOMFIELD:
|
||||
case STATE_THBYKK_FLAMEBALL:
|
||||
case STATE_THBYKK_FLAMEFLOWER:
|
||||
case STATE_THBYKK_FLAMETORNADO:
|
||||
case STATE_THBYKK_FUUMASHURIKEN:
|
||||
case STATE_THBYKK_GASOLINEFIRE:
|
||||
case STATE_THBYKK_ILUSIONSHURIKEN:
|
||||
case STATE_THBYKK_JADEKAMAITACHI:
|
||||
case STATE_THBYKK_SKYROADS:
|
||||
case STATE_THBYKK_YAMATAOROCHI:
|
||||
case STATE_THBYKK_NINJUTSU:
|
||||
if(state == STATE_THBYKK_BIGKUNAI && subState != 1) break;
|
||||
else if(state == STATE_THBYKK_FLAMEBALL && subState == 10) break;
|
||||
else if(state == STATE_THBYKK_FUUMASHURIKEN && subState == 10) break;
|
||||
else if(state == STATE_THBYKK_GASOLINEFIRE && subState == 1) break;
|
||||
else if(state == STATE_THBYKK_ILUSIONSHURIKEN && subState >= 10) break;
|
||||
else if(state == STATE_THBYKK_SKYROADS && subState > 0) break;
|
||||
local enableCancelSkillIndex = [SKILL_THBYKK_AMATERAS, SKILL_THBYKK_BIGKUNAI, SKILL_THBYKK_DOOMFIELD, SKILL_THBYKK_FLAMEBALL, SKILL_THBYKK_FLAMEFLOWER, SKILL_THBYKK_FLAMETORNADO, SKILL_THBYKK_FUUMASHURIKEN, SKILL_THBYKK_GASOLINEFIRE, SKILL_THBYKK_ILUSIONSHURIKEN, SKILL_THBYKK_JADEKAMAITACHI, SKILL_THBYKK_SKYROADS, SKILL_THBYKK_YAMATAOROCHI, 24];
|
||||
local enableCancelStateIndex = [STATE_THBYKK_AMATERAS, STATE_THBYKK_BIGKUNAI, STATE_THBYKK_DOOMFIELD, STATE_THBYKK_FLAMEBALL, STATE_THBYKK_FLAMEFLOWER, STATE_THBYKK_FLAMETORNADO, STATE_THBYKK_FUUMASHURIKEN, STATE_THBYKK_GASOLINEFIRE, STATE_THBYKK_ILUSIONSHURIKEN, STATE_THBYKK_JADEKAMAITACHI, STATE_THBYKK_SKYROADS, STATE_THBYKK_YAMATAOROCHI, 47];
|
||||
for(local i = 0; i < enableCancelSkillIndex.len(); i++){
|
||||
if(sq_GetSkill(obj, enableCancelSkillIndex[i]).isInCoolTime()) continue;
|
||||
if(state != enableCancelStateIndex[i]){
|
||||
obj.setSkillCommandEnable(enableCancelSkillIndex[i], true);
|
||||
if(obj.sq_IsEnterSkill(enableCancelSkillIndex[i]) != -1){
|
||||
obj.startSkillCoolTime(enableCancelSkillIndex[i], sq_GetSkillLevel(obj, enableCancelSkillIndex[i]), -1);
|
||||
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/6_thief_bykk/kunoichi_bykk/animation/kunoichitrace/leavetracesfire_04.ani", 0, 0, 0);
|
||||
local pAni = pooledObj.getCurrentAnimation();
|
||||
pAni.setSpeedRate(200.0);
|
||||
local loadSlot2 = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH);
|
||||
if(loadSlot2 && loadSlot2.getRemainLoadNumber() > 0){
|
||||
local countSkillSave = obj.getVar("DeitiesreBirthSkillSave").getInt(enableCancelStateIndex[i]);
|
||||
if(countSkillSave < 3){
|
||||
obj.getVar("DeitiesreBirthSkillSave").setInt(enableCancelStateIndex[i], countSkillSave + 1);
|
||||
loadSlot2.decreaseLoadCount(1);
|
||||
deitiesreBirthDamageSave(obj, enableCancelStateIndex[i]);
|
||||
}
|
||||
}
|
||||
if(state == STATE_THBYKK_NINJUTSU) obj.getVar("canbreak").setBool(0, true);
|
||||
obj.sq_IntVectClear();
|
||||
if(enableCancelSkillIndex[i] == 24){
|
||||
obj.sq_IntVectClear();
|
||||
obj.sq_AddSetStatePacket(47, STATE_PRIORITY_IGNORE_FORCE, true);
|
||||
obj.getVar("createLeaveTraceObj").setBool(0, true);
|
||||
loadSlot.decreaseLoadCount(1);
|
||||
if(!loadSlot.isCooling()) loadSlot.setStartCool();
|
||||
return;
|
||||
}
|
||||
if(sq_GetSkillLevel(obj, SKILL_THBYKK_NINJUTSU) > 0 && enableCancelSkillIndex[i] != SKILL_THBYKK_DOOMFIELD && enableCancelSkillIndex[i] != SKILL_THBYKK_JADEKAMAITACHI){
|
||||
obj.sq_IntVectClear();
|
||||
obj.sq_IntVectPush(0);
|
||||
obj.sq_IntVectPush(enableCancelSkillIndex[i]);
|
||||
obj.sq_IntVectPush(enableCancelStateIndex[i]);
|
||||
obj.sq_AddSetStatePacket(STATE_THBYKK_NINJUTSU, STATE_PRIORITY_IGNORE_FORCE, true);
|
||||
obj.getVar("createLeaveTraceObj").setBool(0, true);
|
||||
loadSlot.decreaseLoadCount(1);
|
||||
if(!loadSlot.isCooling()) loadSlot.setStartCool();
|
||||
return;
|
||||
}
|
||||
else obj.sq_IntVectPush(0);
|
||||
obj.sq_IntVectPush(0);
|
||||
obj.sq_AddSetStatePacket(enableCancelStateIndex[i], STATE_PRIORITY_IGNORE_FORCE, true);
|
||||
obj.getVar("createLeaveTraceObj").setBool(0, true);
|
||||
loadSlot.decreaseLoadCount(1);
|
||||
if(!loadSlot.isCooling()) loadSlot.setStartCool();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
// default:
|
||||
// local loadSlot2 = obj.sq_GetSkillLoad(SKILL_THBYKK_DEITIESREBIRTH);
|
||||
// if(loadSlot2 && loadSlot2.getRemainLoadNumber() > 0){
|
||||
// obj.getVar("canSaveDeitiesreBirth").setBool(0, true);
|
||||
// }
|
||||
// break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
if(sq_GetSkillLevel(obj, SKILL_THBYKK_LEAVETRACE) > 0){
|
||||
local skillLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_LEAVETRACE);
|
||||
local countMax = sq_GetLevelData(obj, SKILL_THBYKK_LEAVETRACE, 0, skillLevel);
|
||||
local coolTime = sq_GetLevelData(obj, SKILL_THBYKK_LEAVETRACE, 1, skillLevel);
|
||||
local mirrorofyataLevel = sq_GetSkillLevel(obj, SKILL_THBYKK_MIRROROFYATA);
|
||||
if(mirrorofyataLevel > 0){
|
||||
countMax = countMax + sq_GetLevelData(obj, SKILL_THBYKK_MIRROROFYATA, 1, mirrorofyataLevel);
|
||||
coolTime = coolTime * (100 - sq_GetLevelData(obj, SKILL_THBYKK_MIRROROFYATA, 0, mirrorofyataLevel)) / 100;
|
||||
}
|
||||
// print("countMax = "+countMax);
|
||||
// print("coolTime = "+coolTime);
|
||||
obj.sq_AddSkillLoad(SKILL_THBYKK_LEAVETRACE, 66, countMax, coolTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function onStartDungeon_Kunoichi(obj)
|
||||
{
|
||||
if(!obj) return;
|
||||
local loadSlot = obj.sq_GetSkillLoad(SKILL_THBYKK_LEAVETRACE);
|
||||
if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_THBYKK_LEAVETRACE);
|
||||
setSkillBonusRate_3Kunoichi_bykk(obj);
|
||||
}
|
||||
|
||||
function onStartMap_Kunoichi(obj)
|
||||
{
|
||||
if(!obj || obj.getState() == STATE_DIE) return;
|
||||
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_FLAMETORNADO_SUCK)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_FLAMETORNADO_SUCK);
|
||||
|
||||
if(sq_GetSkillLevel(obj, SKILL_THBYKK_MARKOFFLAME) > 0){
|
||||
local burnTime = sq_GetIntData(obj, SKILL_THBYKK_MARKOFFLAME, 0);
|
||||
local objectManager = obj.getObjectManager();//得到對象管理器
|
||||
for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){
|
||||
local object = objectManager.getCollisionObject(i);//得到控制類對象
|
||||
if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object)){
|
||||
local activeObj = sq_GetCNRDObjectToActiveObject(object);
|
||||
if(activeObj.getVar("markofFlameObj").get_obj_vector_size() < 1){
|
||||
local group = sq_GetGroup(activeObj);
|
||||
local uniqueId = sq_GetUniqueId(activeObj);
|
||||
createSkillPassive_Fighter_bykk(obj,activeObj,PASSIVEOBJNUM_FWBYKK,0,0,0,sq_GetDirection(obj),3,255,1,group,uniqueId,burnTime,0,0,0,0,0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function setSkillBonusRate_3Kunoichi_bykk(obj)
|
||||
{
|
||||
local bonusRate = 1000;
|
||||
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/thief/3_kunoichi_bykk/ap_firehide.nut")) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_THBYKK_FIREHIDE, 2, sq_GetSkillLevel(obj, SKILL_THBYKK_FIREHIDE))) / 1000;
|
||||
print("bonusRate0 = "+bonusRate);
|
||||
if(sq_GetSkillLevel(obj, SKILL_THBYKK_CHAKRATRINITY) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_THBYKK_CHAKRATRINITY, 0, sq_GetSkillLevel(obj, SKILL_THBYKK_CHAKRATRINITY))) / 1000;
|
||||
print("bonusRate1 = "+bonusRate);
|
||||
if(sq_GetSkillLevel(obj, SKILL_THBYKK_FIREMARK) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_THBYKK_FIREMARK, 14, sq_GetSkillLevel(obj, SKILL_THBYKK_FIREMARK))) / 1000;
|
||||
print("bonusRate2 = "+bonusRate);
|
||||
if(sq_GetSkillLevel(obj, SKILL_THBYKK_MARKOFFLAME) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_THBYKK_MARKOFFLAME, 0, sq_GetSkillLevel(obj, SKILL_THBYKK_MARKOFFLAME))) / 1000;
|
||||
print("bonusRate3 = "+bonusRate);
|
||||
if(sq_GetSkillLevel(obj, SKILL_THBYKK_MIRROROFYATA) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_THBYKK_MIRROROFYATA, 8, sq_GetSkillLevel(obj, SKILL_THBYKK_MIRROROFYATA))) / 1000;
|
||||
print("bonusRate4 = "+bonusRate);
|
||||
obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger());
|
||||
// bonusRate = bonusRate.tofloat() / 1000.0;
|
||||
//sq_SetSkillAttackBonus(obj, bonusRate);
|
||||
}
|
||||
|
||||
|
||||
function onEndCurrentAni_po_youbishenshou(obj)
|
||||
{
|
||||
if(!obj) return;
|
||||
sq_SendDestroyPacketPassiveObject(obj);
|
||||
}
|
||||
|
||||
|
||||
function onKeyFrameFlag_po_youbishenshou(obj, flagIndex)
|
||||
{
|
||||
if(!obj) return;
|
||||
print("zpos = "+sq_GetZPos(obj));
|
||||
local apdPath = "appendage/character/ap_common_buff.nut";
|
||||
switch(sq_GetZPos(obj)){
|
||||
case 1500:
|
||||
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter());
|
||||
if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(sqrChr, apdPath);
|
||||
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, apdPath, true);
|
||||
AddAppendage.sq_SetValidTime(10000);
|
||||
local change_appendage = AddAppendage.sq_getChangeStatus("youbishenshou");
|
||||
if(!change_appendage){
|
||||
change_appendage = AddAppendage.sq_AddChangeStatus("youbishenshou",sqrChr, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 100);
|
||||
}
|
||||
if(change_appendage){
|
||||
change_appendage.clearParameter();
|
||||
change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, 50.0);
|
||||
change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, 50.0);
|
||||
change_appendage.addParameter(CHANGE_STATUS_TYPE_CAST_SPEED , false, 50.0);
|
||||
}
|
||||
break;
|
||||
case 2000:
|
||||
local objectManager = obj.getObjectManager();//得到對象管理器
|
||||
for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++) {
|
||||
local object = objectManager.getCollisionObject(i);//得到控制類對象
|
||||
if (object && object.isObjectType(OBJECTTYPE_CHARACTER) && obj.isEnemy(object)) {
|
||||
local sqrChr = sq_GetCNRDObjectToSQRCharacter(object);
|
||||
if(sqrChr.getState() != STATE_DIE){
|
||||
if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(sqrChr, apdPath);
|
||||
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, apdPath, true);
|
||||
AddAppendage.sq_SetValidTime(10000);
|
||||
local change_appendage = AddAppendage.sq_getChangeStatus("youbishenshou");
|
||||
if(!change_appendage){
|
||||
change_appendage = AddAppendage.sq_AddChangeStatus("youbishenshou",sqrChr, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 100);
|
||||
}
|
||||
if(change_appendage){
|
||||
change_appendage.clearParameter();
|
||||
change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, 10.0); //物理暴擊率
|
||||
change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_HIT_RATE, false, 10.0); //魔法暴擊率
|
||||
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, 10.0); //物理攻擊力
|
||||
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, 10.0); //魔法攻擊力
|
||||
change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_PHYSICAL_GENUINE_ATTACK, true, 10.0); //獨立物理攻擊力
|
||||
change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_MAGICAL_GENUINE_ATTACK, true, 10.0); //獨立魔法攻擊力
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function proc_appendage_common_buff(appendage)
|
||||
{
|
||||
if(!appendage) return;
|
||||
}
|
||||
|
||||
|
||||
//幻灭瞬杀
|
||||
function checkExecutableSkill_VanishingIllusion(obj)
|
||||
{
|
||||
if (!obj) return false;
|
||||
local isUse = obj.sq_IsUseSkill(223);
|
||||
if (isUse){
|
||||
local state = obj.getState();
|
||||
obj.sq_IntVectClear();
|
||||
obj.sq_IntVectPush(0);
|
||||
if(state == 6 || state == 7) obj.sq_IntVectPush(1);
|
||||
else obj.sq_IntVectPush(0);
|
||||
obj.sq_AddSetStatePacket(223, STATE_PRIORITY_IGNORE_FORCE, true);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function checkCommandEnable_VanishingIllusion(obj)
|
||||
{
|
||||
if (!obj) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
function onSetState_VanishingIllusion(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:
|
||||
local isJump = obj.sq_GetVectorData(datas, 1);
|
||||
if(isJump > 0) obj.sq_SetCurrentAnimation(353);
|
||||
else obj.sq_SetCurrentAnimation(354);
|
||||
obj.getVar("VanishingIllusionBool").setBool(0, false);
|
||||
obj.getVar("VanishingIllusionSet").setInt(0, sq_GetXPos(obj));
|
||||
obj.getVar("VanishingIllusionSet").setInt(1, sq_GetYPos(obj));
|
||||
obj.getVar("VanishingIllusionSet").setInt(4, sq_GetZPos(obj));
|
||||
print("saveX = "+ obj.getVar("VanishingIllusionSet").getInt(0));
|
||||
print("saveY = "+ obj.getVar("VanishingIllusionSet").getInt(1));
|
||||
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(351);
|
||||
local currentAni = obj.getCurrentAnimation();
|
||||
local speedRate = 20000 / currentAni.getDelaySum(false);
|
||||
print("speedRate = "+speedRate);
|
||||
local speed = 30.0 * speedRate;
|
||||
if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed.tofloat());
|
||||
else sq_SetVelocity(obj, 0, -speed.tofloat());
|
||||
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/1_rogue_bykk/vanishingillusion/move/moveshine_00.ani", 0, 0, 60);
|
||||
local offsetZ = obj.getVar("VanishingIllusionSet").getInt(4);
|
||||
if(offsetZ > 0){
|
||||
sq_SetCustomRotate(pooledObj, sq_ToRadian(-10.0));
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
sq_setCurrentAxisPos(obj, 2, 0);
|
||||
obj.sq_SetCurrentAnimation(352);
|
||||
sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/1_rogue_bykk/vanishingillusion/moveend/moveend_back_00.ani", 0, 0, 0);
|
||||
sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/1_rogue_bykk/vanishingillusion/moveend/moveend_front_00.ani", 0, 1, 1);
|
||||
local totalDamage = obj.sq_GetBonusRateWithPassive(223, -1, 0, 1.0);
|
||||
local hitMax = sq_GetIntData(obj, 223, 6);
|
||||
local baseX = obj.getVar("VanishingIllusionSet").getInt(0);
|
||||
local offSetX = sq_GetXPos(obj);
|
||||
local rangeX = sq_Abs(baseX - offSetX), rangeY = 300;
|
||||
if(rangeX == 0) rangeX = 600;
|
||||
else if(rangeX > 600) rangeX = 1200;
|
||||
local objectManager = obj.getObjectManager();//得到對象管理器
|
||||
for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){
|
||||
local object = objectManager.getCollisionObject(i);//得到控制類對象
|
||||
if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj) && sq_GetZPos(object) <= 500){
|
||||
if(sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= rangeY){
|
||||
print("isFront = "+IsFrontOf(obj, object));
|
||||
print("rangeX = "+sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)));
|
||||
if(IsFrontOf(obj, object) == false && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) <= rangeX){
|
||||
local group = sq_GetGroup(object);
|
||||
local uniqueId = sq_GetUniqueId(object);
|
||||
//createSkillPassive_Theif_bykk(obj,object,646001,0,0,0,sq_GetDirection(obj),1,totalDamage,hitMax,group,uniqueId,0,0,0,0,0,0);
|
||||
|
||||
obj.sq_StartWrite();
|
||||
obj.sq_WriteDword(1000);
|
||||
obj.sq_WriteDword(1);
|
||||
obj.sq_WriteDword(1);
|
||||
obj.sq_WriteDword(totalDamage);
|
||||
obj.sq_WriteDword(hitMax);
|
||||
obj.sq_WriteDword(group);
|
||||
obj.sq_WriteDword(uniqueId);
|
||||
obj.sq_SendCreatePassiveObjectPacket(24343, 0, 0, 0, 0);
|
||||
local apdPath = "appendage/ap_common_hold.nut";
|
||||
if(!CNSquirrelAppendage.sq_IsAppendAppendage(object, apdPath)){
|
||||
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(object, obj, -1, false, apdPath, true);
|
||||
sq_HoldAndDelayDie(object, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage);
|
||||
AddAppendage.sq_SetValidTime(200 * hitMax);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
// sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj)));
|
||||
obj.sq_SetCurrentAnimation(350);
|
||||
local currentAni = obj.getCurrentAnimation();
|
||||
local speedRate = 20000 / currentAni.getDelaySum(false);
|
||||
obj.setTimeEvent(1, 1000 / speedRate, 20, true);
|
||||
obj.getVar("VanishingIllusionSet").setInt(2, sq_GetXPos(obj));
|
||||
obj.getVar("VanishingIllusionSet").setInt(3, sq_GetYPos(obj));
|
||||
break;
|
||||
case 4:
|
||||
obj.sq_SetCurrentAnimation(349);
|
||||
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
||||
local bonusRate = 1.0;
|
||||
local hitEndCount = obj.getVar("VanishingIllusionSet").getInt(5);
|
||||
bonusRate = sq_GetLevelData(obj, 9, 9 + hitEndCount, sq_GetSkillLevel(obj, 9)).tofloat() / 100.0;
|
||||
print("bonusRate = "+bonusRate);
|
||||
local totalDamage = obj.sq_GetBonusRateWithPassive(223, -1, 1, bonusRate);
|
||||
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 77));
|
||||
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function onEndCurrentAni_VanishingIllusion(obj)
|
||||
{
|
||||
if(!obj) return;
|
||||
local subState = obj.getSkillSubState();
|
||||
switch(subState){
|
||||
case 0:
|
||||
case 1:
|
||||
case 3:
|
||||
obj.sq_IntVectClear();
|
||||
obj.sq_IntVectPush(subState + 1);
|
||||
obj.sq_AddSetStatePacket(223, STATE_PRIORITY_AUTO, true);
|
||||
break;
|
||||
case 2:
|
||||
case 4:
|
||||
obj.sq_IntVectClear();
|
||||
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function onProcCon_VanishingIllusion(obj)
|
||||
{
|
||||
if(!obj) return;
|
||||
if(obj.getVar("VanishingIllusionBool").getBool(0)){
|
||||
if(obj.getVar("VanishingIllusionBool").getBool(1) == false){
|
||||
obj.setSkillCommandEnable(9, true);
|
||||
sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true);
|
||||
if(sq_IsEnterCommand(obj, E_SKILL_COMMAND)){
|
||||
obj.getVar("VanishingIllusionBool").setBool(1, true);
|
||||
obj.sq_StartWrite();
|
||||
obj.sq_WriteDword(1);
|
||||
sq_SendChangeSkillEffectPacket(obj, 223);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function onProc_VanishingIllusion(obj)
|
||||
{
|
||||
if(!obj) return;
|
||||
local subState = obj.getSkillSubState();
|
||||
switch(subState){
|
||||
case 1:
|
||||
local currentAni = obj.getCurrentAnimation();
|
||||
local delaySum = currentAni.getDelaySum(false);
|
||||
local stateTime = obj.sq_GetStateTimer();
|
||||
local vz = sq_GetUniformVelocity(obj.getVar("VanishingIllusionSet").getInt(4), 0, stateTime, delaySum / 2);
|
||||
sq_setCurrentAxisPos(obj, 2, vz);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function onChangeSkillEffect_VanishingIllusion(obj, skillIndex, reciveData)
|
||||
{
|
||||
if(!obj) return;
|
||||
local set = reciveData.readDword();
|
||||
if(set == 1){
|
||||
obj.getVar("VanishingIllusionBool").setBool(1, true);
|
||||
}
|
||||
}
|
||||
|
||||
function onKeyFrameFlag_VanishingIllusion(obj, flagIndex)
|
||||
{
|
||||
if(!obj) return false;
|
||||
switch(flagIndex){
|
||||
case 0: sq_flashScreen(obj,20,80,60,239, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break;
|
||||
case 1:
|
||||
obj.sq_PlaySound("VANISHING_ILLUSION_ADD");
|
||||
obj.sq_PlaySound("R_TF_HITEND");
|
||||
sq_SetMyShake(obj, 25, 200);
|
||||
break;
|
||||
case 2:
|
||||
//`smoke back` 81 0 8
|
||||
sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/1_rogue_bykk/vanishingillusion/hitend/hitend_back_00.ani", 81, 0, 8);
|
||||
break;
|
||||
case 3:
|
||||
//`smoke front` 101 0 10
|
||||
sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/1_rogue_bykk/vanishingillusion/hitend/hitend_front_00.ani", 81, 0, 8);
|
||||
break;
|
||||
case 4:
|
||||
//`hitend start effect` -39 0 37
|
||||
sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/1_rogue_bykk/vanishingillusion/hitendstart/hitendstart_front_00.ani", 0, 0, 0);
|
||||
break;
|
||||
case 5:
|
||||
obj.sq_PlaySound("VANISHING_ILLUSION_DASH");
|
||||
sq_flashScreen(obj,0,200,0,174, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
||||
sq_SetMyShake(obj, 1, 750);
|
||||
//`Enable To Input Hitend Skill`
|
||||
local hitEndCount = obj.getVar("hitEndCount").getInt(0);
|
||||
if(hitEndCount > 0){
|
||||
obj.getVar("VanishingIllusionSet").setInt(5, hitEndCount);
|
||||
obj.getVar("VanishingIllusionBool").setBool(0, true);
|
||||
obj.getVar("VanishingIllusionBool").setBool(1, false);
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
sq_flashScreen(obj,0,300,100,184, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
||||
break;
|
||||
case 7:
|
||||
//`Enable To Execute HitEndSkill`
|
||||
if(obj.getVar("VanishingIllusionBool").getBool(1)){
|
||||
obj.getVar("VanishingIllusionBool").setBool(1, false);
|
||||
hitEndCountDecrease(obj);
|
||||
obj.sq_IntVectClear();
|
||||
obj.sq_IntVectPush(3);
|
||||
obj.sq_AddSetStatePacket(223, STATE_PRIORITY_AUTO, true);
|
||||
}
|
||||
break;
|
||||
case 8:
|
||||
obj.sq_PlaySound("TF_ASSASSINATION_FIN_01");//R_TF_VANISHING_ILLUSION
|
||||
obj.sq_PlaySound("VANISHING_ILLUSION_CAST");
|
||||
break;
|
||||
case 9: sq_flashScreen(obj,60,300,0,174, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); break;
|
||||
case 10: sq_SetMyShake(obj, 25, 100); break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function onTimeEvent_VanishingIllusion(obj, timeEventIndex, timeEventCount)
|
||||
{
|
||||
if(!obj) return false;
|
||||
switch(timeEventIndex){
|
||||
case 1:
|
||||
local vx = sq_GetUniformVelocity(obj.getVar("VanishingIllusionSet").getInt(2), obj.getVar("VanishingIllusionSet").getInt(0), timeEventCount, 18);
|
||||
local vy = sq_GetUniformVelocity(obj.getVar("VanishingIllusionSet").getInt(3), obj.getVar("VanishingIllusionSet").getInt(1), timeEventCount, 18);
|
||||
sq_setCurrentAxisPos(obj, 0, vx);//设置当前x坐标
|
||||
sq_setCurrentAxisPos(obj, 1, vy);
|
||||
if(timeEventCount == 20){
|
||||
sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/1_rogue_bykk/vanishingillusion/hitend/hitendgroundsmoke_back_00.ani", 0, 0, 0);
|
||||
sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/1_rogue_bykk/vanishingillusion/hitend/hitendgroundsmoke_front_00.ani", 0, 1, 1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function onEndState_VanishingIllusion(obj, new_state)
|
||||
{
|
||||
if(!obj) return;
|
||||
if(new_state != 223){
|
||||
obj.getVar("VanishingIllusionBool").setBool(0, false);
|
||||
obj.getVar("VanishingIllusionBool").setBool(1, false);
|
||||
}
|
||||
}
|
||||
|
||||
function onAttack_VanishingIllusion(obj, damager, boundingBox, isStuck)
|
||||
{
|
||||
if(!obj || isStuck) return;
|
||||
if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return;
|
||||
sq_AddDrawOnlyAniFromParent(damager, "character/thief/effect/animation/1_rogue_bykk/vanishingillusion/hitend/hitendslash_00.ani", 0, 0, sq_GetHeightObject(damager) / 2);
|
||||
}
|
||||
|
||||
|
||||
function setCustomData_po_vanishingillusion(obj, receiveData)
|
||||
{
|
||||
if(!obj) return;
|
||||
local sub = receiveData.readDword();
|
||||
obj.getVar("custom").setInt(0, sub);
|
||||
switch(sub){
|
||||
case 1:
|
||||
local totalDamage = receiveData.readDword();
|
||||
local hitMax = receiveData.readDword();
|
||||
local group = receiveData.readDword();
|
||||
local uniqueId = receiveData.readDword();
|
||||
local targetObj = sq_GetObject(obj, group, uniqueId);
|
||||
if(targetObj && targetObj.getState() != STATE_DIE){
|
||||
obj.getVar("tar").clear_obj_vector();
|
||||
obj.getVar("tar").push_obj_vector(targetObj);
|
||||
obj.getVar("custom").setInt(4, hitMax);
|
||||
|
||||
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter());
|
||||
local aniNum = [355, 357, 360];
|
||||
local ani = sq_GetCustomAni(sqrChr, aniNum[sq_getRandom(0, 2)]);
|
||||
sq_Rewind(ani);
|
||||
obj.setCurrentAnimation(ani);
|
||||
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||||
local currentAni = obj.getCurrentAnimation();
|
||||
local delaySum = currentAni.getDelaySum(false);
|
||||
obj.setTimeEvent(2, delaySum / (hitMax + 1), hitMax, false);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function onEndCurrentAni_po_vanishingillusion(obj)
|
||||
{
|
||||
if(!obj) return;
|
||||
}
|
||||
|
||||
function onTimeEvent_po_vanishingillusion(obj, timeEventIndex, timeEventCount)
|
||||
{
|
||||
if(!obj) return;
|
||||
switch(timeEventIndex){
|
||||
case 2:
|
||||
local targetObj = obj.getVar("tar").get_obj_vector(0);
|
||||
if(targetObj && targetObj.getState() != STATE_DIE){
|
||||
sq_SendHitObjectPacketWithNoStuck(obj,targetObj,0,0,sq_GetHeightObject(targetObj) / 2);
|
||||
}
|
||||
local hitMax = obj.getVar("custom").getInt(4);
|
||||
if(timeEventCount >= hitMax) sq_SendDestroyPacketPassiveObject(obj);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function onProcCon_thief_chainsaw(obj)
|
||||
{
|
||||
if (!obj) return false;
|
||||
|
||||
local subState = obj.getVar("subState").get_vector(0);
|
||||
local hitEndCount = obj.getVar("hitEndCount").getInt(0);
|
||||
|
||||
if (subState == 28)
|
||||
{
|
||||
if (obj.isMyControlObject() && hitEndCount > 0)
|
||||
{
|
||||
sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true);
|
||||
|
||||
if (sq_IsEnterCommand(obj, E_SKILL_COMMAND) && obj.isMyControlObject())
|
||||
{
|
||||
obj.sq_IntVectClear();
|
||||
obj.sq_IntVectPush(0);
|
||||
obj.sq_AddSetStatePacket(STATE_CHAINSAWHITEND, STATE_PRIORITY_IGNORE_FORCE, true);
|
||||
obj.sq_PlaySound("R_TF_HITEND");
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(subState == 26){
|
||||
if(sq_GetSkillLevel(obj, 224) > 0){
|
||||
obj.sq_IntVectClear();
|
||||
obj.sq_IntVectPush(28);
|
||||
obj.sq_IntVectPush(0);
|
||||
obj.sq_IntVectPush(0);
|
||||
obj.sq_IntVectPush(0);
|
||||
obj.sq_IntVectPush(0);
|
||||
obj.sq_IntVectPush(0);
|
||||
obj.sq_IntVectPush(0);
|
||||
obj.sq_AddSetStatePacket(34, STATE_PRIORITY_IGNORE_FORCE, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function onAfterSetState_thief_chainsaw(obj, state, datas, isResetTimer)
|
||||
{
|
||||
if (!obj) return false;
|
||||
|
||||
local subState = obj.sq_GetVectorData(datas, 0);
|
||||
obj.getVar("subState").clear_vector();
|
||||
obj.getVar("subState").push_vector(subState);
|
||||
// dofile("Plugins/8_thief.c");
|
||||
if(sq_GetSkillLevel(obj, 224) > 0){
|
||||
switch(subState){
|
||||
case 28:
|
||||
local currentAni = obj.getCurrentAnimation();
|
||||
local speedRate = 8000 / currentAni.getDelaySum(0, 0);
|
||||
local totalDamage = obj.sq_GetBonusRateWithPassive(41, -1, 0, 1.0);
|
||||
local totalDamage2 = obj.sq_GetBonusRateWithPassive(41, -1, 2, 1.0);
|
||||
local skillLevel = sq_GetSkillLevel(obj, 41);
|
||||
local hitMax = sq_GetLevelData(obj, 41, 1, skillLevel);
|
||||
local hitMax2 = sq_GetLevelData(obj, 41, 3, skillLevel);
|
||||
//createSkillPassive_Theif_bykk(obj,obj,646002,0,0,0,sq_GetDirection(obj),1,totalDamage,hitMax,speedRate,0,0,0,0,0,0,0);
|
||||
//createSkillPassive_Theif_bykk(obj,obj,646002,0,0,0,sq_GetDirection(obj),2,totalDamage2,hitMax2,speedRate,0,0,0,0,0,0,0);
|
||||
print("test = "+ currentAni.getDelaySum(0, 0));
|
||||
print("speedRate = "+ speedRate);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function setCustomData_po_chainsawexblade_bykk(obj, receiveData)
|
||||
{
|
||||
if(!obj) return;
|
||||
local sub = receiveData.readDword();
|
||||
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter());
|
||||
sq_moveWithParent(sqrChr, obj);
|
||||
obj.getVar("custom").setInt(0, sub);
|
||||
switch(sub){
|
||||
case 1:
|
||||
local totalDamage = receiveData.readDword();
|
||||
local hitMax = receiveData.readDword();
|
||||
local speedRate = receiveData.readDword();
|
||||
local ani = sq_GetCustomAni(sqrChr, 116);
|
||||
sq_Rewind(ani);
|
||||
obj.setCurrentAnimation(ani);
|
||||
local currentAni = obj.getCurrentAnimation();
|
||||
currentAni.setRGBA(255, 255, 255, 156);
|
||||
currentAni.setSpeedRate(speedRate.tofloat());
|
||||
currentAni = obj.getCurrentAnimation();
|
||||
local delaySum = currentAni.getDelaySum(false);
|
||||
local delay = delaySum / (hitMax + 1);
|
||||
print("delay = "+delay+",,hitMax = "+hitMax);
|
||||
//createSkillPassive_Theif_bykk(sqrChr,sqrChr,646002,50,0,70,sq_GetDirection(obj),3,totalDamage,hitMax,delay,speedRate,0,0,0,0,0,0);
|
||||
break;
|
||||
case 2:
|
||||
local totalDamage = receiveData.readDword();
|
||||
local hitMax = receiveData.readDword();
|
||||
local speedRate = receiveData.readDword();
|
||||
local ani = sq_GetCustomAni(sqrChr, 117);
|
||||
sq_Rewind(ani);
|
||||
obj.setCurrentAnimation(ani);
|
||||
local currentAni = obj.getCurrentAnimation();
|
||||
currentAni.setRGBA(255, 255, 255, 156);
|
||||
currentAni.setSpeedRate(speedRate.tofloat());
|
||||
currentAni = obj.getCurrentAnimation();
|
||||
local delaySum = currentAni.getDelaySum(false);
|
||||
local delay = delaySum / (hitMax + 1);
|
||||
print("delay = "+delay+",,hitMax = "+hitMax);
|
||||
//createSkillPassive_Theif_bykk(sqrChr,sqrChr,646002,75,0,55,sq_GetDirection(obj),4,totalDamage,hitMax,delay,speedRate,0,0,0,0,0,0);
|
||||
break;
|
||||
case 3:
|
||||
local totalDamage = receiveData.readDword();
|
||||
local hitMax = receiveData.readDword();
|
||||
local delay = receiveData.readDword();
|
||||
local speedRate = receiveData.readDword();
|
||||
obj.getVar("custom").setInt(1, hitMax);
|
||||
local aniPath = "passiveobject/6_thief_bykk/rogue_bykk/animation/chainsawex/rollingweaponeffect0.ani";
|
||||
local ani = sq_CreateAnimation("", aniPath);
|
||||
obj.setCurrentAnimation(ani);
|
||||
// local currentAni = obj.getCurrentAnimation();
|
||||
// currentAni.setSpeedRate(speedRate.tofloat());
|
||||
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||||
obj.setTimeEvent(1, delay, -1, true);
|
||||
break;
|
||||
case 4:
|
||||
local totalDamage = receiveData.readDword();
|
||||
local hitMax = receiveData.readDword();
|
||||
local delay = receiveData.readDword();
|
||||
local speedRate = receiveData.readDword();
|
||||
obj.getVar("custom").setInt(1, hitMax);
|
||||
local aniPath = "passiveobject/6_thief_bykk/rogue_bykk/animation/chainsawex/rollingweaponeffect0.ani";
|
||||
local ani = sq_CreateAnimation("", aniPath);
|
||||
obj.setCurrentAnimation(ani);
|
||||
// local currentAni = obj.getCurrentAnimation();
|
||||
// currentAni.setSpeedRate(speedRate.tofloat());
|
||||
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
||||
obj.setTimeEvent(1, delay, -1, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function onEndCurrentAni_po_chainsawexblade_bykk(obj)
|
||||
{
|
||||
if(!obj) return;
|
||||
local sub = obj.getVar("custom").getInt(0);
|
||||
if(sub < 3) sq_SendDestroyPacketPassiveObject(obj);
|
||||
}
|
||||
|
||||
function onTimeEvent_po_chainsawexblade_bykk(obj, timeEventIndex, timeEventCount)
|
||||
{
|
||||
if(!obj) return;
|
||||
switch(timeEventIndex){
|
||||
case 1:
|
||||
print("reset"+timeEventCount);
|
||||
obj.resetHitObjectList();
|
||||
if(timeEventCount >= obj.getVar("custom").getInt(1)) sq_SendDestroyPacketPassiveObject(obj);
|
||||
break;
|
||||
}
|
||||
}
|
||||
51
user/116.205.165.25/config
Normal file
51
user/116.205.165.25/config
Normal file
@@ -0,0 +1,51 @@
|
||||
1_atgunner_1.c
|
||||
1_atgunner_2.c
|
||||
1_atgunner_3.c
|
||||
1_atgunner_4.c
|
||||
1_atgunner_5.c
|
||||
1_atgunner_6.c
|
||||
2_atpriest_1.c
|
||||
2_atpriest_2.c
|
||||
2_atpriest_3.c
|
||||
2_atpriest_4.c
|
||||
2_atpriest_5.c
|
||||
2_atpriest_6.c
|
||||
3_atswordman_1.c
|
||||
3_atswordman_2.c
|
||||
3_atswordman_3.c
|
||||
3_atswordman_4.c
|
||||
3_atswordman_5.c
|
||||
3_atswordman_6.c
|
||||
3_atswordman_7.c
|
||||
3_atswordman_8.c
|
||||
4_fighter_1.c
|
||||
4_fighter_2.c
|
||||
4_fighter_3.c
|
||||
5_gunner_1.c
|
||||
5_gunner_2.c
|
||||
5_gunner_3.c
|
||||
6_mage_1.c
|
||||
6_mage_10.c
|
||||
6_mage_11.c
|
||||
6_mage_12.c
|
||||
6_mage_13.c
|
||||
6_mage_2.c
|
||||
6_mage_3.c
|
||||
6_mage_4.c
|
||||
6_mage_5.c
|
||||
6_mage_6.c
|
||||
6_mage_7.c
|
||||
6_mage_8.c
|
||||
6_mage_9.c
|
||||
7_swordman_1.c
|
||||
7_swordman_2.c
|
||||
7_swordman_3.c
|
||||
8_thief_1.c
|
||||
8_thief_2.c
|
||||
8_thief_3.c
|
||||
8_thief_4.c
|
||||
8_thief_5.c
|
||||
8_thief_6.c
|
||||
25_priest_1.c
|
||||
25_priest_2.c
|
||||
25_priest_3.c
|
||||
0
user/43.249.195.64/a.nut
Normal file
0
user/43.249.195.64/a.nut
Normal file
1
user/43.249.195.64/config
Normal file
1
user/43.249.195.64/config
Normal file
@@ -0,0 +1 @@
|
||||
a.nut
|
||||
Reference in New Issue
Block a user