no message

This commit is contained in:
2025-11-08 12:21:06 +08:00
parent e195b0f168
commit 204151d95c
82 changed files with 151530 additions and 12 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View 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///////////////////////

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View 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;
}
}

View 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