Rindro-Sqr/user/114.66.45.221/8_thief_6.c

940 lines
40 KiB
C

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