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

3678 lines
123 KiB
C

function onChangeSkillEffect_Thief_Necromancer(obj, skillIndex, reciveData)
{
if(!obj) return;
switch(skillIndex){
case SKILL_BYKK_SUMMONNICOLAS:
local subtype = reciveData.readDword();
switch(subtype){
case 1:
local id = reciveData.readDword();
local monster_obj = sq_GetCNRDObjectToActiveObject(sq_GetObject(obj, reciveData.readDword(), reciveData.readDword()));
switch(id){
case MONSTER_ID_NICOLAS:
setMonsterAppendage_Necromancer_byKK(obj, monster_obj, APDPATH_NICOLAS, "NicolasObj", SKILL_BYKK_SUMMONNICOLAS);
break;
case MONSTER_ID_ZOMBIE:
setMonsterAppendage_Necromancer_byKK(obj, monster_obj, APDPATH_ZOMBIE, "ZombieObj", SKILL_BYKK_NICOLASSUMMONZOMBIE);
break;
}
break;
}
break;
}
}
function setMonsterAppendage_Necromancer_byKK(obj, monster_obj, appendagepath, monstername, skill_index)
{
if(!obj) return;
if(!monster_obj) return;
if(appendagepath == null || monstername == null || skill_index == null) return;
appendagepath = appendagepath.tostring();
monstername = monstername.tostring();
local monster_obj = sq_GetCNRDObjectToActiveObject(monster_obj);
if(!CNSquirrelAppendage.sq_IsAppendAppendage(monster_obj, appendagepath)){
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(monster_obj, monster_obj, skill_index, false, appendagepath, true);
AddAppendage.getVar("sqrChr").clear_obj_vector();
AddAppendage.getVar("sqrChr").push_obj_vector(obj);
local monsternum = obj.getVar(monstername).get_obj_vector_size();
if(monsternum > 0){
obj.getVar(monstername).push_obj_vector(monster_obj);
}
else{
obj.getVar(monstername).clear_obj_vector();
obj.getVar(monstername).push_obj_vector(monster_obj);
}
setMonsterInfo_Thief_Necromancer(obj, monster_obj, skill_index, AddAppendage);
}
}
function setMonsterInfo_Thief_Necromancer(obj, monster_obj, skill_index, appendage)
{
if(!obj) return;
monster_obj.setMapFollowParent(obj);
monster_obj.setMapFollowType(1);
local monster_id = monster_obj.getCollisionObjectIndex();
switch(monster_id){
case MONSTER_ID_NICOLAS:
local coolt_01 = 1000, coolt_02 = 2000, coolt_03 = 3000, coolt_04 = 4000;
local coolTime = [coolt_01, coolt_02, coolt_03, coolt_04];
local skillIndex = ["skill_1", "skill_2", "skill_3", "skill_4"];
for(local i = 0; i < skillIndex.len(); i++){
appendage.getVar(skillIndex[i]).clear_timer_vector();
appendage.getVar(skillIndex[i]).push_timer_vector();
local t = appendage.getVar(skillIndex[i]).get_timer_vector(0);
t.setParameter(coolTime[i], -1);
t.resetInstant(0);
}
local sub = 0;
if(sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONNICOLASEX) > 0) sub = 10;
appendage.getVar("custom").setInt(0, sub);
monsterattack_Thief_Necromancer_ksk(monster_obj,0);
break;
case MONSTER_ID_ZOMBIE:
appendage.getVar("skill_1").clear_timer_vector();
appendage.getVar("skill_1").push_timer_vector();
local t = appendage.getVar("skill_1").get_timer_vector(0);
t.setParameter(1000, -1);
t.resetInstant(0);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_NICOLASSUMMONZOMBIE);
local hitMax = sq_GetLevelData(obj, SKILL_BYKK_NICOLASSUMMONZOMBIE, 4, skillLevel);
appendage.getVar("custom").setInt(1, hitMax);
appendage.getVar("custom").setInt(0, 0);
break;
}
}
function procAppend_Thief_Necromancer(obj)
{
local size = obj.getVar("NicolasObj").get_obj_vector_size();
if(size < 1){
obj.setSkillCommandEnable(SKILL_BYKK_NICOLASBEHAVIOR, false);
obj.setSkillCommandEnable(SKILL_BYKK_NICOLASBLACKARACHNIA, false);
obj.setSkillCommandEnable(SKILL_BYKK_NICOLASBLACKAREA, false);
obj.setSkillCommandEnable(SKILL_BYKK_NICOLASBLACKWAVE, false);
if(sq_GetSkillLevel(obj, SKILL_BYKK_KEYOFACERON) < 1) obj.setSkillCommandEnable(SKILL_BYKK_NICOLASSUMMONZOMBIE, false);
}
size = obj.getVar("ballacreObj").get_obj_vector_size();
if(size < 1){
obj.setSkillCommandEnable(SKILL_BYKK_BALLACREADVENT, false);
obj.setSkillCommandEnable(SKILL_BYKK_BALLACRESTRONGATTACK, false);
obj.setSkillCommandEnable(SKILL_BYKK_MADNESSBALLACRE, false);
obj.setSkillCommandEnable(SKILL_BYKK_GRABCOLLAR, false);
obj.setSkillCommandEnable(SKILL_BYKK_AMBITIONOFBALLACRE, false);
obj.setSkillCommandEnable(SKILL_BYKK_GUILLOTINE, false);
obj.setSkillCommandEnable(SKILL_BYKK_PHANTOMSTROM, false);
obj.setSkillCommandEnable(SKILL_BYKK_EXECUTIONERSLASH, false);
if(sq_GetSkillLevel(obj, SKILL_BYKK_KEYOFACERON) > 0) setBallacreSkillEffet_bykk(obj);
}
else{
obj.setSkillCommandEnable(SKILL_BYKK_APPORTBALLACRE, false);
}
}
function setCommandEnable_Thief_Necromancer(obj, skillIndex)
{
local currentMp = obj.getMp();
local skill = sq_GetSkill(obj, skillIndex);
local consumeMp = skill.getSpendMp(obj, -1);
if(!skill.isInCoolTime() && currentMp > consumeMp){
obj.setSkillCommandEnable(skillIndex, true);
return true;
}
}
function startSkillCoolTime_Thief_Necromancer_bykk(obj, skillIndex, skillLevel, currentCoolTime)
{
if(sq_GetSkillLevel(obj, SKILL_BYKK_WANDMASTERY) > 0){
local weaponType = obj.getWeaponSubType();
if(weaponType == 3){
if(skillIndex != SKILL_BYKK_PHANTOMSTROM && skillIndex != SKILL_BYKK_BALLACREADVENT){
local newSkillCoolTime = currentCoolTime * 90 / 100;
print("currentCoolTime : "+currentCoolTime);
print("newSkillCoolTime : "+newSkillCoolTime);
return newSkillCoolTime;
}
}
}
return currentCoolTime;
}
function ProcPassiveSkill_NecroMancer_bykk(obj, skill_index, skill_level)
{
switch(skill_index){
case SKILL_BYKK_FEAROFBALLACRE:
if(skill_level > 0){
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, APDPATH_FEAROFBALLACRE, true);
}
break;
case SKILL_BYKK_WANDMASTERY:
if(skill_level > 0){
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, APDPATH_WANDMASTERY, true);
}
break;
}
}
function onStart_appendage_fearofballacre_tochr(appendage)
{
if(!appendage) return;
appendage.getVar("coolTime").clear_timer_vector();
appendage.getVar("coolTime").push_timer_vector();
local t = appendage.getVar("coolTime").get_timer_vector(0);
t.setParameter(1000, -1);
t.resetInstant(0);
t.setEventOnStart(true);
local parentObj = appendage.getParent();
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_FEAROFBALLACRE);
local criticalRate = sq_GetLevelData(obj, SKILL_BYKK_FEAROFBALLACRE, 4, skillLevel);
local criticaldamageRate = sq_GetLevelData(obj, SKILL_BYKK_FEAROFBALLACRE, 5, skillLevel);
local lifeTime = sq_GetLevelData(obj, SKILL_BYKK_FEAROFBALLACRE, 3, skillLevel);
local range = sq_GetLevelData(obj, SKILL_BYKK_FEAROFBALLACRE, 6, skillLevel);
appendage.getVar("custom").setInt(0, lifeTime);
appendage.getVar("custom").setInt(1, range);
local change_appendage = appendage.sq_getChangeStatus("fearofballacre");
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("fearofballacre",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
if(change_appendage){
change_appendage.clearParameter();
change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, (criticalRate * 0.1).tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_HIT_RATE, false, (criticalRate * 0.1).tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_DAMAGE_RATE, false, (criticaldamageRate * 0.1 / 0.667).tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_DAMAGE_RATE, false, (criticaldamageRate * 0.1 / 0.667).tofloat());
}
}
function proc_appendage_fearofballacre_tochr(appendage)
{
if (!appendage) return;
local parentObj = appendage.getParent();
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
if(!parentObj || parentObj.getState() == STATE_DIE){
appendage.setValid(false);
return;
}
local t = appendage.getVar("coolTime").get_timer_vector(0);
local currentT = appendage.getTimer().Get();
if(t && t.isOnEvent(currentT)){
local lifeTime = appendage.getVar("custom").getInt(0);
local range = appendage.getVar("custom").getInt(1);
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) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) <= range && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= range / 2){
if(!CNSquirrelAppendage.sq_IsAppendAppendage(object, APDPATH_FEAROFBALLACRE_TOENEMY)){
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(object, obj, -1, false, APDPATH_FEAROFBALLACRE_TOENEMY, true);
AddAppendage.sq_SetValidTime(lifeTime);
}
}
}
}
}
function proc_appendage_fearofballacre_toenemy(appendage)
{
if (!appendage) return;
local parentObj = appendage.getParent();
if(!parentObj || parentObj.getState() == STATE_DIE){
appendage.setValid(false);
return;
}
}
function drawAppend_appendage_fearofballacre_toenemy(appendage, isOver, x, y, isFlip)
{
if(!appendage) return;
local parentObj = appendage.getParent();
if(!parentObj || parentObj.getState() == STATE_DIE) {
appendage.setValid(false);
return;
}
local var = appendage.getVar();
local Ani = var.GetAnimationMap("fearofballacre_debuff", "character/thief/effect/animation/2_necromancer_bykk/fearofballacre/debuff.ani");
sq_AnimationProc(Ani);
sq_drawCurrentFrame(Ani, x, y - sq_GetHeightObject(parentObj), isFlip);
}
function onStart_appendage_wandmastery(appendage)
{
if(!appendage) return;
local parentObj = appendage.getParent();
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
local weaponType = obj.getWeaponSubType();
if(weaponType == -1) return;
if(weaponType == 3){
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_WANDMASTERY);
local castSpeed = sq_GetLevelData(obj, SKILL_BYKK_WANDMASTERY, 0, skillLevel);
local change_appendage = appendage.sq_getChangeStatus("wandmastery");
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("wandmastery",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
if(change_appendage){
change_appendage.clearParameter();
change_appendage.addParameter(CHANGE_STATUS_TYPE_CAST_SPEED, false, (castSpeed).tofloat());
}
}
}
//暗魂波
function checkExecutableSkill_DarkSoul(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DARKSOUL);
if (isUse){
obj.getVar("DarkSoul_Bool").setBool(0, true);
obj.sq_IntVectClear();
if(obj.getVar("ballacreObj").get_obj_vector_size() > 0){
if(sq_GetSkillLevel(obj, SKILL_BYKK_KEYOFACERON) < 1){
obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_DARKSOUL);
obj.sq_IntVectPush(2);
}
else obj.sq_IntVectPush(1);
}
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_DARKSOUL, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_DarkSoul(obj)
{
if (!obj) return false;
return true;
}
function onSetState_DarkSoul(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(ANI_BYKK_DARKSOUL);
break;
case 1:
obj.sq_SetCurrentAnimation(ANI_BYKK_DARKSOULNONCHARGELAUNCH);
break;
case 2:
obj.sq_SetCurrentAnimation(ANI_BYKK_DARKSOULCHARGECAST);
break;
case 3:
obj.sq_SetCurrentAnimation(ANI_BYKK_DARKSOULCHARGELAUNCH);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_DarkSoul(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
case 3:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_DarkSoul(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 2:
local bDownKey = obj.isDownSkillLastKey();
if(bDownKey){
if(obj.getVar("DarkSoul_Bool").getBool(0)){
local stateTime = obj.sq_GetStateTimer();
if(stateTime >= sq_GetIntData(obj, SKILL_BYKK_DARKSOUL, 4)){
obj.getVar("DarkSoul_Bool").setBool(0, false);
}
}
}
else{
obj.sq_IntVectClear();
obj.sq_IntVectPush(3);
obj.sq_AddSetStatePacket(STATE_BYKK_DARKSOUL, STATE_PRIORITY_AUTO, true);
}
break;
}
}
function onKeyFrameFlag_DarkSoul(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 101:
local bonusRate = 0;
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_UNHOLYAURA);
if(skillLevel > 0) bonusRate = sq_GetLevelData(obj, SKILL_BYKK_UNHOLYAURA, 5, skillLevel).tofloat() / sq_GetLevelData(obj, SKILL_BYKK_UNHOLYAURA, 2, skillLevel).tofloat();
local totalDamage = 0;
local increaseRate = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_DARKSOUL, -1, 5, 1.0) + 100;
local hitMax = sq_GetIntData(obj, SKILL_BYKK_DARKSOUL, 1);
local hitTime = sq_GetIntData(obj, SKILL_BYKK_DARKSOUL, 0);
local offsetY = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_DARKSOUL, -1, 4, 1.0) + 100;
local subState = obj.getSkillSubState();
switch(subState){
case 3:
if(obj.getVar("DarkSoul_Bool").getBool(0) == false){
local totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_DARKSOUL, -1, 0, (1.0 + increaseRate.tofloat() / 100.0) * bonusRate) + 100;
local totalDamage_exp = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_DARKSOUL, -1, 3, (1.0 + increaseRate.tofloat() / 100.0) * bonusRate) + 100;
createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,60,0,68,obj.getDirection(),2,SKILL_BYKK_DARKSOUL,2,totalDamage,totalDamage_exp,hitMax,offsetY,hitTime,0,0,0);
break;
}
case 0:
local totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_DARKSOUL, -1, 0, bonusRate) + 100;
local totalDamage_exp = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_DARKSOUL, -1, 3, bonusRate) + 100;
createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,60,0,68,obj.getDirection(),2,SKILL_BYKK_DARKSOUL,1,totalDamage,totalDamage_exp,hitMax,offsetY,hitTime,0,0,0);
break;
case 1:
local totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_DARKSOUL, -1, 7, (1.0 + increaseRate.tofloat() / 100.0) * bonusRate) + 100;
local totalDamage_exp = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_DARKSOUL, -1, 3, (1.0 + increaseRate.tofloat() / 100.0) * bonusRate) + 100;
createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,60,0,68,obj.getDirection(),2,SKILL_BYKK_DARKSOUL,3,totalDamage,totalDamage_exp,hitMax,offsetY,hitTime,0,0,0);
break;
}
break;
}
return true;
}
function onTimeEvent_DarkSoul(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_DarkSoul(obj, new_state)
{
if(!obj) return;
}
//降临:尼古拉斯
function checkExecutableSkill_SummonNicolas(obj)
{
if (!obj) return false;
local number = obj.getVar("NicolasObj").get_obj_vector_size();
if(number > 0 && obj.getVar("summonnicolas_bool").getBool(0)){
obj.getVar("summonnicolas_bool").setBool(0, false);
for(local i = 0; i < number; i++){
local nicolasObj = obj.getVar("NicolasObj").get_obj_vector(i);
if(nicolasObj){
local activeObj = sq_GetCNRDObjectToActiveObject(nicolasObj);
sq_IntVectorClear(sq_GetGlobalIntVector());
sq_AddSetStatePacketActiveObject(activeObj,12,sq_GetGlobalIntVector(), STATE_PRIORITY_USER);
}
}
local state = obj.getState();
if(state == STATE_STAND || state == STATE_DASH){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true);
}
return true;
}
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SUMMONNICOLAS);
if (isUse){
obj.getVar("summonnicolas_bool").setBool(0, true);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_SUMMONNICOLAS, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_SummonNicolas(obj)
{
if (!obj) return false;
return true;
}
function onSetState_SummonNicolas(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(ANI_BYKK_SUMMONNICOLAS);
break;
}
}
function onEndCurrentAni_SummonNicolas(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_SummonNicolas(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_SummonNicolas(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1:
local level = sq_GetSkillLevel(obj, 174);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONNICOLAS);
local summonTime = sq_GetLevelData(obj, SKILL_BYKK_SUMMONNICOLAS, 10, skillLevel);
summonmonster_necromancer_bykk(obj,obj,50,0,0,0,MONSTER_ID_NICOLAS,summonTime,level,0);
print(120);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_NICOLAS_TOCHR)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_NICOLAS_TOCHR);
print(121);
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_NICOLAS_TOCHR, true);
print(122);
break;
}
return true;
}
function onTimeEvent_SummonNicolas(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_SummonNicolas(obj, new_state)
{
if(!obj) return;
}
function onSourceKeyFrameFlag_appendage_nicolas(appendage,flagIndex)
{
if(!appendage) return;
local parentObj = appendage.getParent();
if(!parentObj){
appendage.setValid(false);
return true;
}
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
if(!sqrChr) return true;
switch(flagIndex){
case 100:
local currentAni = parentObj.getCurrentAnimation();
local delay = currentAni.getDelaySum(0, 0);
local speedRate = 30000 / delay;
createSkillPassive_Theif_bykk(sqrChr,parentObj,PASSIVEOBJ_NUM_THIEF,0,0,0,parentObj.getDirection(),2,SKILL_BYKK_SUMMONNICOLAS,10,speedRate,0,0,0,0,0,0,0);
break;
case 102: //蜘蛛团
local bonusRate = 100;
if(appendage.getVar("custom").getInt(0) == 12 || appendage.getVar("custom").getInt(0) == 2) bonusRate = bonusRate + appendage.getVar("custom").getInt(1);
bonusRate = bonusRate.tofloat() / 100.0;
// print("bonusRate_blackspi = "+bonusRate);
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONNICOLAS, -1, 7, bonusRate) + 100;
local hitTime = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONNICOLAS, -1, 3, 1.0) + 100;
createSkillPassive_Theif_bykk(sqrChr,parentObj,PASSIVEOBJ_NUM_THIEF,5,0,50,parentObj.getDirection(),2,SKILL_BYKK_SUMMONNICOLAS,1,totalDamage,hitTime,0,0,0,0,0,0);
break;
case 201: //召唤僵尸
local level = sq_GetSkillLevel(sqrChr, 174);
local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_BYKK_NICOLASSUMMONZOMBIE);
local summonTime = sq_GetLevelData(sqrChr, SKILL_BYKK_NICOLASSUMMONZOMBIE, 9, skillLevel);
local summonMax = sq_GetLevelData(sqrChr, SKILL_BYKK_NICOLASSUMMONZOMBIE, 11, skillLevel);
createSkillPassive_Theif_bykk(sqrChr,parentObj,PASSIVEOBJ_NUM_THIEF,58,0,116,parentObj.getDirection(),2,SKILL_BYKK_NICOLASSUMMONZOMBIE,1,level,summonTime,summonMax,0,0,0,0,0);
break;
case 301: //吸魂暗劲波
if(sqrChr.isDownSkillLastKey()){
local offsetX = sq_GetDistancePos(sq_GetXPos(sqrChr), sqrChr.getDirection(), 100);
sq_setCurrentAxisPos(parentObj, 0, offsetX);
sq_setCurrentAxisPos(parentObj, 1, sq_GetYPos(sqrChr));
sq_SetCurrentDirection(parentObj, sq_GetDirection(sqrChr));
}
local currentAni = parentObj.getCurrentAnimation();
sq_SetFrameDelayTime(currentAni, 3, 200);
sqrChr.getVar("blackwave_tar").clear_obj_vector();
parentObj.getVar("blackwave_bool").setBool(0, true);
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_NICOLASBLACKWAVE, -1, 1, 1.0) + 100;
local hitTime = sq_GetIntData(sqrChr, SKILL_BYKK_NICOLASBLACKWAVE, 0);
createSkillPassive_Theif_bykk(sqrChr,parentObj,PASSIVEOBJ_NUM_THIEF,0,0,0,parentObj.getDirection(),2,SKILL_BYKK_NICOLASBLACKWAVE,1,totalDamage,hitTime,0,0,0,0,0,0);
break;
case 304: //吸魂暗劲波
local aniPath = "monster/character/thief/2_necromancer_bykk/nicolas/animation/effect/blackwave/bodysmokenormal.ani";
local pooledObj = createOnlyDrawObject_Theif_bykk(parentObj,aniPath,true,parentObj.getDirection(),sq_GetXPos(parentObj),sq_GetYPos(parentObj),sq_GetZPos(parentObj),ENUM_DRAWLAYER_NORMAL);
parentObj.getVar("effect").clear_obj_vector();
parentObj.getVar("effect").push_obj_vector(pooledObj);
local aniPath2 = "monster/character/thief/2_necromancer_bykk/nicolas/animation/effect/blackwave/linestartnormal.ani";
local angle = [135,110,60,45,0,-40,-80,-120,-150,-175];
local xPos = sq_GetDistancePos(sq_GetXPos(parentObj), parentObj.getDirection(), 10), yPos = sq_GetYPos(parentObj), zPos = sq_GetZPos(parentObj) + 100;
for(local i = 0; i < angle.len(); i++){
local pooledObj = createOnlyDrawObject_Theif_bykk(parentObj, aniPath2, true, parentObj.getDirection(), xPos, yPos - 1, zPos, ENUM_DRAWLAYER_NORMAL);
sq_SetCustomRotate(pooledObj, sq_ToRadian(angle[i].tofloat()));
}
break;
case 310: //吸魂暗劲波
local effect_obj = parentObj.getVar("effect").get_obj_vector(0);
if(effect_obj) effect_obj.setValid(false);
local aniPath = "monster/character/thief/2_necromancer_bykk/nicolas/animation/effect/blackwave/blastbeforebody.ani";
local aniPath2 = "monster/character/thief/2_necromancer_bykk/nicolas/animation/effect/blackwave/blastbeforeeffect.ani";
createOnlyDrawObject_Theif_bykk(parentObj,aniPath,true,parentObj.getDirection(),sq_GetXPos(parentObj),sq_GetYPos(parentObj),sq_GetZPos(parentObj),ENUM_DRAWLAYER_NORMAL);
createOnlyDrawObject_Theif_bykk(parentObj,aniPath2,true,parentObj.getDirection(),sq_GetXPos(parentObj),sq_GetYPos(parentObj) - 1,sq_GetZPos(parentObj) - 1,ENUM_DRAWLAYER_NORMAL);
break;
case 311: //吸魂暗劲波
local aniPath = "monster/character/thief/2_necromancer_bykk/nicolas/animation/effect/blackwave/blastbeforeeyedodge.ani";
createOnlyDrawObject_Theif_bykk(parentObj,aniPath,true,parentObj.getDirection(),sq_GetXPos(parentObj),sq_GetYPos(parentObj),sq_GetZPos(parentObj),ENUM_DRAWLAYER_NORMAL);
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_NICOLASBLACKWAVE, -1, 3, 1.0) + 100;
local sizeRate = sq_GetIntData(sqrChr, SKILL_BYKK_NICOLASBLACKWAVE, 4) / 10;
local size = sqrChr.getVar("blackwave_tar").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = sqrChr.getVar("blackwave_tar").get_obj_vector(i);
if(targetObj){
createSkillPassive_Theif_bykk(sqrChr,targetObj,PASSIVEOBJ_NUM_THIEF,0,0,sq_GetHeightObject(targetObj) / 2,parentObj.getDirection(),2,SKILL_BYKK_NICOLASSUMMONZOMBIE,3,totalDamage,sizeRate,0,0,0,0,0,0);
}
}
}
break;
case 322: //吸魂暗劲波
if(parentObj.getVar("blackwave_bool").getBool(0)){
parentObj.getVar("blackwave_bool").setBool(0, false);
local size = sqrChr.getVar("blackwave_tar").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = sqrChr.getVar("blackwave_tar").get_obj_vector(i);
if(targetObj){
CNSquirrelAppendage.sq_RemoveAppendage(targetObj, APDPATH_NICOLAS_BLACKWAVE);
}
}
}
}
break;
case 404: //艾克洛索
local targetObj = parentObj.getVar("targetObj").get_obj_vector(0);
if(targetObj){
local bonusRate = 100;
if(appendage.getVar("custom").getInt(0) == 12 || appendage.getVar("custom").getInt(0) == 2) bonusRate = bonusRate + appendage.getVar("custom").getInt(2);
bonusRate = bonusRate.tofloat() / 100.0;
// print("bonusRate_ara = "+bonusRate);
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONNICOLAS, -1, 8, bonusRate) + 100;
local totalDamage2 = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONNICOLAS, -1, 9, bonusRate) + 100;
createSkillPassive_Theif_bykk(sqrChr,targetObj,PASSIVEOBJ_NUM_THIEF,0,0,400,parentObj.getDirection(),2,SKILL_BYKK_SUMMONNICOLAS,2,totalDamage,totalDamage2,0,0,0,0,0,0);
sq_AddDrawOnlyAniFromParent(targetObj, "passiveobject/common/animation/magictargetwarningterrible.ani", 0, 0, -sq_GetZPos(targetObj));
}
break;
case 503: //暗影蛛丝阵
local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_BYKK_NICOLASBLACKAREA);
local lifeTime = sq_GetLevelData(sqrChr, SKILL_BYKK_NICOLASBLACKAREA, 4, skillLevel);
local totalDamage = sq_GetLevelData(sqrChr, SKILL_BYKK_NICOLASBLACKAREA, 5, skillLevel);
local darkTol = sq_GetLevelData(sqrChr, SKILL_BYKK_NICOLASBLACKAREA, 0, skillLevel);
local hitTime = sq_GetIntData(sqrChr, SKILL_BYKK_NICOLASBLACKAREA, 0);
local sizeRate = sq_GetLevelData(sqrChr, SKILL_BYKK_NICOLASBLACKAREA, 2, skillLevel) / 2;
local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_DARK, false, darkTol.tofloat() , 0);
if (ap){
ap.getAppendageInfo().setValidTime(lifeTime);
ap.sq_Append(parentObj, sqrChr);
}
local group = sq_GetGroup(parentObj);
local uniqueId = sq_GetUniqueId(parentObj);
createSkillPassive_Theif_bykk(sqrChr,parentObj,PASSIVEOBJ_NUM_THIEF,0,0,-sq_GetZPos(parentObj),parentObj.getDirection(),2,SKILL_BYKK_NICOLASBLACKAREA,1,totalDamage,lifeTime,hitTime,sizeRate,group,uniqueId,0,0);
break;
case 701: //tp黑蜘蛛
local bonusRate = 100;
if(appendage.getVar("custom").getInt(0) == 12 || appendage.getVar("custom").getInt(0) == 2) bonusRate = bonusRate + appendage.getVar("custom").getInt(1);
bonusRate = bonusRate.tofloat() / 100.0;
// print("bonusRate_blackspi_tp = "+bonusRate);
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONNICOLAS, -1, 11, bonusRate) + 100;
local hitTime = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONNICOLAS, -1, 3, 1.0) + 100;
createSkillPassive_Theif_bykk(sqrChr,parentObj,PASSIVEOBJ_NUM_THIEF,60,-1,10,parentObj.getDirection(),2,SKILL_BYKK_SUMMONNICOLAS,3,totalDamage,hitTime,0,0,0,0,0,0);
break;
case 802: //tp艾克尼亚的灵体
local targetObj = parentObj.getVar("targetObj").get_obj_vector(0);
if(targetObj){
local bonusRate = 100;
if(appendage.getVar("custom").getInt(0) == 12 || appendage.getVar("custom").getInt(0) == 2) bonusRate = bonusRate + appendage.getVar("custom").getInt(1);
bonusRate = bonusRate.tofloat() / 100.0;
// print("bonusRate_ara_tp = "+bonusRate);
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_SUMMONNICOLAS, -1, 14, bonusRate) + 100;
createSkillPassive_Theif_bykk(sqrChr,targetObj,PASSIVEOBJ_NUM_THIEF,0,0,-sq_GetZPos(targetObj),parentObj.getDirection(),2,SKILL_BYKK_SUMMONNICOLAS,5,totalDamage,0,0,0,0,0,0,0);
}
break;
case 901: //暗黑蛛丝引
if(sqrChr.isDownSkillLastKey()){
sq_AddDrawOnlyAniFromParent(parentObj, "monster/character/thief/2_necromancer_bykk/nicolas/animation/effect/blackarachnia/disappear_smokenormal.ani", 0, 0, 0);
}
break;
case 902: //暗黑蛛丝引
if(sqrChr.isDownSkillLastKey()){
local offsetX = sq_GetDistancePos(sq_GetXPos(sqrChr), sqrChr.getDirection(), 100);
sq_setCurrentAxisPos(parentObj, 0, offsetX);
sq_setCurrentAxisPos(parentObj, 1, sq_GetYPos(sqrChr));
sq_SetCurrentDirection(parentObj, sq_GetDirection(sqrChr));
sq_AddDrawOnlyAniFromParent(parentObj, "monster/character/thief/2_necromancer_bykk/nicolas/animation/effect/blackarachnia/disappear_smokenormal.ani", 0, 0, 0);
}
local aniPath = "monster/character/thief/2_necromancer_bykk/nicolas/animation/effect/blackarachnia/start_blackground.ani";
createOnlyDrawObject_Theif_bykk(parentObj,aniPath,true,parentObj.getDirection(),sq_GetXPos(parentObj),sq_GetYPos(parentObj),0,ENUM_DRAWLAYER_BOTTOM);
break;
case 903: //暗黑蛛丝引
sq_SetMyShake(parentObj, 10, 500);
monsterattack_Thief_Necromancer_ksk(parentObj,13);
break;
case 1004: //近身攻击
local currentAni = parentObj.getCurrentAnimation();
local delay = currentAni.getDelaySum(0, 0);
local speedRate = 6000 / delay;
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_NICOLASBEHAVIOR, -1, 11, 1.0) + 100;
createSkillPassive_Theif_bykk(sqrChr,parentObj,PASSIVEOBJ_NUM_THIEF,0,0,0,parentObj.getDirection(),2,SKILL_BYKK_SUMMONNICOLAS,6,speedRate,totalDamage,0,0,0,0,0,0);
case 1101: //吸魂暗劲波护石
case 1200:
if(sqrChr.isDownSkillLastKey()){
sq_AddDrawOnlyAniFromParent(parentObj, "monster/character/thief/2_necromancer_bykk/nicolas/animation/effect/blackarachnia/disappear_smokenormal.ani", 0, 0, 0);
}
break;
case 1201: //暗黑蛛丝引
if(sqrChr.isDownSkillLastKey()){
local offsetX = sq_GetDistancePos(sq_GetXPos(sqrChr), sqrChr.getDirection(), 50);
sq_setCurrentAxisPos(parentObj, 0, offsetX);
sq_setCurrentAxisPos(parentObj, 1, sq_GetYPos(sqrChr));
sq_SetCurrentDirection(parentObj, sq_GetDirection(sqrChr));
sq_AddDrawOnlyAniFromParent(parentObj, "monster/character/thief/2_necromancer_bykk/nicolas/animation/effect/blackarachnia/disappear_smokenormal.ani", 0, 0, 0);
}
break;
case 1203://`create Dead Nicolas sister` 142 0 0
local currentAni = parentObj.getCurrentAnimation();
local delay = currentAni.getDelaySum(3, 7);
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_NICOLASBLACKARACHNIA, -1, 0, 1.0) + 100;
local totalDamage2 = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_NICOLASBLACKARACHNIA, -1, 2, 5.0) + 100;
local holdTime = 3000 + delay;
local sizeRate = sq_GetIntData(sqrChr, SKILL_BYKK_NICOLASBLACKARACHNIA, 5);
local hitTime = sq_GetIntData(sqrChr, SKILL_BYKK_NICOLASBLACKARACHNIA, 4);
sqrChr.getVar("blacjarachnia_tar").clear_obj_vector();
createSkillPassive_Theif_bykk(sqrChr,parentObj,PASSIVEOBJ_NUM_THIEF,142,0,0,parentObj.getDirection(),2,SKILL_BYKK_NICOLASBLACKARACHNIA,4,totalDamage,sizeRate,totalDamage2,holdTime,hitTime,0,0,0);
print("test");
break;
case 1301:
sq_flashScreen(parentObj,200,200,240,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
local currentAni = parentObj.getCurrentAnimation();
local delay = currentAni.getDelaySum(6, 15);
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_NICOLASBLACKARACHNIA, -1, 0, 1.0) + 100;
local totalDamage2 = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_NICOLASBLACKARACHNIA, -1, 2, 1.0) + 100;
local holdTime = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_NICOLASBLACKARACHNIA, -1, 3, 1.0) + 100 + delay;
local sizeRate = sq_GetIntData(sqrChr, SKILL_BYKK_NICOLASBLACKARACHNIA, 5);
local hitTime = sq_GetIntData(sqrChr, SKILL_BYKK_NICOLASBLACKARACHNIA, 4);
sqrChr.getVar("blacjarachnia_tar").clear_obj_vector();
createSkillPassive_Theif_bykk(sqrChr,parentObj,PASSIVEOBJ_NUM_THIEF,0,0,0,parentObj.getDirection(),2,SKILL_BYKK_NICOLASBLACKARACHNIA,1,totalDamage,sizeRate,totalDamage2,holdTime,hitTime,0,0,0);
break;
case 1306:
local aniPath = "monster/character/thief/2_necromancer_bykk/nicolas/animation/effect/blackarachnia/attack_blackground.ani";
createOnlyDrawObject_Theif_bykk(parentObj,aniPath,true,parentObj.getDirection(),sq_GetXPos(parentObj),sq_GetYPos(parentObj),0,ENUM_DRAWLAYER_BOTTOM);
local size = sqrChr.getVar("blacjarachnia_tar").get_obj_vector_size();
local currentAni = parentObj.getCurrentAnimation();
local delay = currentAni.getDelaySum(6, 10);
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = sqrChr.getVar("blacjarachnia_tar").get_obj_vector(i);
if(targetObj){
local activeObj = sq_GetCNRDObjectToActiveObject(targetObj);
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, APDPATH_NICOLAS_BLACKWAVE);
if(addAppendage && !sq_IsFixture(activeObj)) sq_MoveToAppendageForce(targetObj, sqrChr, parentObj, 100, 0, targetObj.getZPos(), delay, true, addAppendage);
}
}
}
break;
case 1307:
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_NICOLASBLACKARACHNIA, -1, 1, 1.0) + 100;
local sizeRate = sq_GetIntData(sqrChr, SKILL_BYKK_NICOLASBLACKARACHNIA, 5);
createSkillPassive_Theif_bykk(sqrChr,parentObj,PASSIVEOBJ_NUM_THIEF,0,0,0,parentObj.getDirection(),2,SKILL_BYKK_NICOLASBLACKARACHNIA,2,totalDamage,sizeRate,0,0,0,0,0,0);
break;
}
return true;
}
function proc_appendage_nicolas_tochr(appendage)
{
if (!appendage) return;
local parentObj = appendage.getParent();
if(!parentObj || parentObj.getState() == STATE_DIE){
appendage.setValid(false);
return;
}
}
function proc_appendage_nicolas(appendage)
{
if (!appendage) return;
local parentObj = appendage.getParent();
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
if((!sqrChr || sqrChr.getState() == STATE_DIE) || (!parentObj || parentObj.getState() == STATE_DIE)){
appendage.setValid(false);
return;
}
local sub = appendage.getVar("custom").getInt(0);
if(sub == 3 || sub == 13) return;
if(!sq_IsMyControlObject(sqrChr)) return;
local t_01 = appendage.getVar("skill_1").get_timer_vector(0);
local t_02 = appendage.getVar("skill_2").get_timer_vector(0);
local t_03 = appendage.getVar("skill_3").get_timer_vector(0);
local t_04 = appendage.getVar("skill_4").get_timer_vector(0);
local currentT = appendage.getTimer().Get();
local state = parentObj.getState();
switch(state){
case STATE_STAND:
local timer = appendage.getVar("atktime").get_ct_vector(0);
local currentTT = timer.Get();
if(currentTT < ATK_TIME) return;
timer.Reset();
timer.Start(10000,0);
if(parentObj.getVar("blackwave_bool").getBool(0)){
parentObj.getVar("blackwave_bool").setBool(0, false);
local size = sqrChr.getVar("blackwave_tar").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = sqrChr.getVar("blackwave_tar").get_obj_vector(i);
if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, APDPATH_NICOLAS_BLACKWAVE);
}
}
}
local targetObj = sq_FindTarget( parentObj, 0, 1000, 800, 350);
if(targetObj){
parentObj.getVar("targetObj").clear_obj_vector();
parentObj.getVar("targetObj").push_obj_vector(targetObj);
local skillt, attackIndex, distanceX, distanceXmin, distanceY;
switch(sub){
case 1:
case 11:
skillt = [t_02,t_01,t_04];
attackIndex = [1,10,4];
if(sub == 11) attackIndex = [7,10,8];
distanceX = [160,160,500];
distanceXmin = [0,0,0];
distanceY = [16,38,200];
break;
case 0:
case 10:
case 2:
case 12:
skillt = [t_03,t_02];
attackIndex = [4,1];
if(sub == 10 || sub == 12) attackIndex = [8,7];
distanceX = [500,500];
distanceXmin = [0,0];
distanceY = [200,16];
break;
}
for(local i = 0;i < skillt.len(); i++){
if(skillt[i] && skillt[i].isOnEvent(currentT)){
if(sq_IsMyControlObject(parentObj)){
if(sq_Abs(targetObj.getXPos() - parentObj.getXPos()) <= distanceX[i] && sq_Abs(targetObj.getXPos() - parentObj.getXPos()) >= distanceXmin[i] && sq_Abs(targetObj.getYPos() - parentObj.getYPos()) <= distanceY[i]){
monsterattack_Thief_Necromancer_ksk(parentObj,attackIndex[i]);
return;
}
}
}
}
}
else{
targetObj = sq_FindTarget( parentObj, -1000, 1000, 800, 350);
if(targetObj){
sq_SetCurrentDirection(parentObj, sq_GetOppositeDirection(sq_GetDirection(parentObj)));
}
}
break;
case STATE_ATTACK:
local attackIndex = parentObj.getAttackIndex();
break;
}
}
function onStart_appendage_nicolas(appendage)
{
if (!appendage) return;
appendage.getVar("atktime").clear_ct_vector();
appendage.getVar("atktime").push_ct_vector();
local timer = appendage.getVar("atktime").get_ct_vector(0);
timer.Reset();
timer.Start(10000,0);
}
function onEnd_appendage_nicolas(appendage)
{
if (!appendage) return;
local parentObj = appendage.getParent();
if(!parentObj) return;
local activeObj = sq_GetCNRDObjectToActiveObject(parentObj);
sq_IntVectorClear(sq_GetGlobalIntVector());
sq_AddSetStatePacketActiveObject(activeObj, 12, sq_GetGlobalIntVector(), STATE_PRIORITY_USER);
}
//服从
function checkExecutableSkill_NicolasBehavior(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_NICOLASBEHAVIOR);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_NICOLASBEHAVIOR, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_NicolasBehavior(obj)
{
if (!obj) return false;
return true;
}
function onSetState_NicolasBehavior(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(ANI_BYKK_NICOLASBEHAVIOR_CASTING_BODY);
break;
case 1:
obj.sq_SetCurrentAnimation(ANI_BYKK_NICOLASBEHAVIOR_LOOP_BODY);
local sub = obj.getVar("NicolasBehavior_Sub").getInt(0);
local aniPath = ["character/thief/effect/animation/2_necromancer_bykk/nicolasbehavior/range.ani", "character/thief/effect/animation/2_necromancer_bykk/nicolasbehavior/melee.ani", "character/thief/effect/animation/2_necromancer_bykk/nicolasbehavior/guard.ani"];
obj.getVar("effect").clear_obj_vector();
switch(sub){
case 1://近战
case 11://近战
aniPath = ["character/thief/effect/animation/2_necromancer_bykk/nicolasbehavior/melee_sub.ani", "character/thief/effect/animation/2_necromancer_bykk/nicolasbehavior/range.ani", "character/thief/effect/animation/2_necromancer_bykk/nicolasbehavior/guard.ani"];
break;
case 2://远程
case 12://远程
aniPath = ["character/thief/effect/animation/2_necromancer_bykk/nicolasbehavior/melee.ani", "character/thief/effect/animation/2_necromancer_bykk/nicolasbehavior/range_sub.ani", "character/thief/effect/animation/2_necromancer_bykk/nicolasbehavior/guard.ani"];
break;
case 3://守护
case 13://守护
local aniPath = ["character/thief/effect/animation/2_necromancer_bykk/nicolasbehavior/melee.ani", "character/thief/effect/animation/2_necromancer_bykk/nicolasbehavior/range.ani", "character/thief/effect/animation/2_necromancer_bykk/nicolasbehavior/guard_sub.ani"];
break;
}
local offsetX = [-35, 35, 0], offsetZ = [130, 130, 165];
for(local i = 0; i < aniPath.len(); i++){
local pooledObj = createOnlyDrawObject_Theif_bykk(obj,aniPath[i],false,ENUM_DIRECTION_RIGHT,sq_GetDistancePos(sq_GetXPos(obj), ENUM_DIRECTION_RIGHT, offsetX[i]),sq_GetYPos(obj),sq_GetZPos(obj) + offsetZ[i],ENUM_DRAWLAYER_NORMAL);
obj.getVar("effect").push_obj_vector(pooledObj);
}
break;
case 2:
obj.sq_SetCurrentAnimation(ANI_BYKK_NICOLASBEHAVIOR_END_BODY);
obj.sq_PlaySound("TF_NICOLAS_OBEY");
local size = obj.getVar("effect").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local pooledObj = obj.getVar("effect").get_obj_vector(i);
if(pooledObj) pooledObj.setValid(false);
}
}
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, APDPATH_NICOLAS_TOCHR);
if(addAppendage){//92近战 93远程 94守护
local sub = obj.getVar("NicolasBehavior_Sub").getInt(0);
if(sub > 0){
if(sub > 10) addAppendage.setBuffIconImage(sub + 81);
else addAppendage.setBuffIconImage(sub + 91);
}
local nicolasObj = obj.getVar("NicolasObj").get_obj_vector(0);
if(nicolasObj){
local activeObj = sq_GetCNRDObjectToActiveObject(nicolasObj);
local addAppendage2 = CNSquirrelAppendage.sq_GetAppendage(activeObj, APDPATH_NICOLAS);
addAppendage2.getVar("custom").setInt(0, sub);
switch(sub){
case 1:
case 11:
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_NICOLASBEHAVIOR);
local phyDefense = sq_GetLevelData(obj, SKILL_BYKK_NICOLASBEHAVIOR, 4, skillLevel);
local mglDefense = sq_GetLevelData(obj, SKILL_BYKK_NICOLASBEHAVIOR, 5, skillLevel);
local change_appendage2 = addAppendage2.sq_getChangeStatus("nicolas");
if(!change_appendage2) change_appendage2 = addAppendage2.sq_AddChangeStatus("nicolas",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
if(change_appendage2){
change_appendage2.clearParameter();
change_appendage2.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, true, (phyDefense).tofloat());
change_appendage2.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, true, (mglDefense).tofloat());
}
local change_appendage = addAppendage.sq_getChangeStatus("nicolas_tochr");
if(change_appendage) change_appendage.clearParameter();
break;
case 2:
case 12:
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_NICOLASBEHAVIOR);
local spiBonusRate = sq_GetLevelData(obj, SKILL_BYKK_NICOLASBEHAVIOR, 6, skillLevel);
local araBonusRate = sq_GetLevelData(obj, SKILL_BYKK_NICOLASBEHAVIOR, 7, skillLevel);
addAppendage2.getVar("custom").setInt(1, spiBonusRate);
addAppendage2.getVar("custom").setInt(2, araBonusRate);
local change_appendage = addAppendage.sq_getChangeStatus("nicolas_tochr");
if(change_appendage) change_appendage.clearParameter();
break;
case 3:
case 13:
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_NICOLASBEHAVIOR);
local phyDefense = sq_GetLevelData(obj, SKILL_BYKK_NICOLASBEHAVIOR, 8, skillLevel);
local mglDefense = sq_GetLevelData(obj, SKILL_BYKK_NICOLASBEHAVIOR, 9, skillLevel);
local change_appendage = addAppendage.sq_getChangeStatus("nicolas_tochr");
if(!change_appendage) change_appendage = addAppendage.sq_AddChangeStatus("nicolas_tochr",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
if(change_appendage){
change_appendage.clearParameter();
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, false, (phyDefense).tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, false, (mglDefense).tofloat());
}
break;
}
}
}
break;
}
}
function onEndCurrentAni_NicolasBehavior(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_NICOLASBEHAVIOR, STATE_PRIORITY_AUTO, true);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_NicolasBehavior(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){//远程
if(sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONNICOLASEX) > 0) obj.getVar("NicolasBehavior_Sub").setInt(0, 12);
else obj.getVar("NicolasBehavior_Sub").setInt(0, 2);
local nicolasBehaviorObj = obj.getVar("NicolasBehavior_obj").get_obj_vector(0);
if(nicolasBehaviorObj) nicolasBehaviorObj.setValid(false);
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(STATE_BYKK_NICOLASBEHAVIOR, STATE_PRIORITY_IGNORE_FORCE, true);
}
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){//守护
if(sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONNICOLASEX) > 0) obj.getVar("NicolasBehavior_Sub").setInt(0, 13);
else obj.getVar("NicolasBehavior_Sub").setInt(0, 3);
sq_SendCreatePassiveObjectPacket(obj, 1008611, 0, 0, 0, 0, obj.getDirection());
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(STATE_BYKK_NICOLASBEHAVIOR, STATE_PRIORITY_IGNORE_FORCE, true);
}
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){//近战
if(sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONNICOLASEX) > 0) obj.getVar("NicolasBehavior_Sub").setInt(0, 11);
else obj.getVar("NicolasBehavior_Sub").setInt(0, 1);
local nicolasBehaviorObj = obj.getVar("NicolasBehavior_obj").get_obj_vector(0);
if(nicolasBehaviorObj) nicolasBehaviorObj.setValid(false);
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(STATE_BYKK_NICOLASBEHAVIOR, STATE_PRIORITY_IGNORE_FORCE, true);
}
local stateTime = obj.sq_GetStateTimer();
if(stateTime >= 2000){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
}
break;
}
}
function onKeyFrameFlag_NicolasBehavior(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_NicolasBehavior(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_NicolasBehavior(obj, new_state)
{
if(!obj) return;
if(new_state != SKILL_BYKK_NICOLASBEHAVIOR){
local size = obj.getVar("effect").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local pooledObj = obj.getVar("effect").get_obj_vector(i);
if(pooledObj) pooledObj.setValid(false);
}
}
}
}
function onCreateObject_NicolasBehavior(obj, createObject)
{
if(createObject.isObjectType(OBJECTTYPE_PASSIVE)){
local colObj = sq_GetCNRDObjectToCollisionObject(createObject);
local id = colObj.getCollisionObjectIndex();
if(id == 1008611){
sq_moveWithParent(obj, colObj);
obj.getVar("NicolasBehavior_obj").clear_obj_vector();
obj.getVar("NicolasBehavior_obj").push_obj_vector(colObj);
print("test");
}
}
}
//驱使僵尸
function checkExecutableSkill_NicolasSummonZombie(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_NICOLASSUMMONZOMBIE);
if (isUse){
if(sq_GetSkillLevel(obj, SKILL_BYKK_KEYOFACERON) > 0){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_NICOLASSUMMONZOMBIE, STATE_PRIORITY_IGNORE_FORCE, true);
}
else{
local size = obj.getVar("NicolasObj").get_obj_vector_size();
if(size > 0){
local nicolasObj = obj.getVar("NicolasObj").get_obj_vector(0);
if(nicolasObj){
local activeObj = sq_GetCNRDObjectToActiveObject(nicolasObj);
monsterattack_Thief_Necromancer_ksk(activeObj,2);
}
}
local state = obj.getState();
switch(state){
case STATE_STAND:
case STATE_DASH:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
return true;
}
return false;
}
function checkCommandEnable_NicolasSummonZombie(obj)
{
if (!obj) return false;
return true;
}
function onSetState_NicolasSummonZombie(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(ANI_BYKK_SUMMONZOMBIE_ACHERON);
break;
}
}
function onEndCurrentAni_NicolasSummonZombie(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_NicolasSummonZombie(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_NicolasSummonZombie(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1:
local level = sq_GetSkillLevel(obj, 174);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_NICOLASSUMMONZOMBIE);
local summonTime = sq_GetLevelData(obj, SKILL_BYKK_NICOLASSUMMONZOMBIE, 9, skillLevel);
local summonMax = sq_GetLevelData(obj, SKILL_BYKK_NICOLASSUMMONZOMBIE, 11, skillLevel);
for(local i = 0; i < summonMax; i++){
summonmonster_necromancer_bykk(obj,obj,150+sq_getRandom(-15,15),sq_getRandom(-15,15),0,0,MONSTER_ID_ZOMBIE,summonTime,level,0);
}
break;
}
return true;
}
function onTimeEvent_NicolasSummonZombie(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_NicolasSummonZombie(obj, new_state)
{
if(!obj) return;
}
function onSourceKeyFrameFlag_appendage_zombie(appendage,flagIndex)
{
if(!appendage) return;
local parentObj = appendage.getParent();
if(!parentObj){
appendage.setValid(false);
return true;
}
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
if(!sqrChr) return true;
switch(flagIndex){
case 101:
//撕咬
parentObj.getVar("tar").clear_obj_vector();
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_NICOLASSUMMONZOMBIE, -1, 2, 1.0) + 100;
if(appendage.getVar("custom").getInt(0) == appendage.getVar("custom").getInt(1) - 1) totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_NICOLASSUMMONZOMBIE, -1, 3, 1.0) + 100;
local skillLevel = sq_GetSkillLevel(sqrChr, SKILL_BYKK_NICOLASSUMMONZOMBIE);
local level = sq_GetLevelData(sqrChr, SKILL_BYKK_NICOLASSUMMONZOMBIE, 7, skillLevel);
local time = sq_GetLevelData(sqrChr, SKILL_BYKK_NICOLASSUMMONZOMBIE, 6, skillLevel);
local prob = sq_GetLevelData(sqrChr, SKILL_BYKK_NICOLASSUMMONZOMBIE, 5, skillLevel);
local group = sq_GetGroup(parentObj);
local uniqueId = sq_GetUniqueId(parentObj);
createSkillPassive_Theif_bykk(sqrChr,parentObj,PASSIVEOBJ_NUM_THIEF,0,0,0,parentObj.getDirection(),2,SKILL_BYKK_NICOLASSUMMONZOMBIE,2,totalDamage,level,time,prob,group,uniqueId,0,0);
break;
case 103:
if(parentObj.getVar("tar").get_obj_vector_size() > 0) monsterattack_Thief_Necromancer_ksk(parentObj, 1);
break;
case 202: monsterattack_Thief_Necromancer_ksk(parentObj, 2); break;
case 303:
if(appendage.getVar("custom").getInt(0) == appendage.getVar("custom").getInt(1) - 1){
//爆炸
local totalDamage = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_NICOLASSUMMONZOMBIE, -1, 12, 1.0) + 100;
local sizeRate = sq_GetBonusRateWithPassive(sqrChr, SKILL_BYKK_NICOLASSUMMONZOMBIE, -1, 14, 1.0) + 100;
createSkillPassive_Theif_bykk(sqrChr,parentObj,PASSIVEOBJ_NUM_THIEF,0,0,sq_GetHeightObject(parentObj) / 2,parentObj.getDirection(),2,SKILL_BYKK_NICOLASSUMMONZOMBIE,3,totalDamage,sizeRate,0,0,0,0,0,0);
parentObj.setValid(false);
}
else appendage.getVar("custom").setInt(0, appendage.getVar("custom").getInt(0) + 1);
local size = parentObj.getVar("tar").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = parentObj.getVar("tar").get_obj_vector(i);
if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, APDPATH_ZOMBIE_HOLD);
}
}
break;
}
return true;
}
function proc_appendage_zombie(appendage)
{
if (!appendage) return;
local parentObj = appendage.getParent();
local sqrChr = sq_GetCNRDObjectToSQRCharacter(appendage.getVar("sqrChr").get_obj_vector(0));
if((!sqrChr || sqrChr.getState() == STATE_DIE) || (!parentObj || parentObj.getState() == STATE_DIE)){
appendage.setValid(false);
return;
}
if(!sq_IsMyControlObject(sqrChr)) return;
local t_01 = appendage.getVar("skill_1").get_timer_vector(0);
local currentT = appendage.getTimer().Get();
local state = parentObj.getState();
switch(state){
case STATE_STAND:
local timer = appendage.getVar("atktime").get_ct_vector(0);
local currentTT = timer.Get();
if(currentTT < ATK_TIME) return;
timer.Reset();
timer.Start(10000,0);
local targetObj = sq_FindTarget( parentObj, 0, 1000, 800, 350);
if(targetObj){
parentObj.getVar("targetObj").clear_obj_vector();
parentObj.getVar("targetObj").push_obj_vector(targetObj);
if(t_01 && t_01.isOnEvent(currentT)){
if(sq_IsMyControlObject(parentObj)){
if(sq_Abs(targetObj.getXPos() - parentObj.getXPos()) <= 90 && sq_Abs(targetObj.getXPos() - parentObj.getXPos()) >= 0 && sq_Abs(targetObj.getYPos() - parentObj.getYPos()) <= 18){
monsterattack_Thief_Necromancer_ksk(parentObj, 0);
return;
}
}
}
}
else{
targetObj = sq_FindTarget( parentObj, -1000, 1000, 800, 350);
if(targetObj){
sq_SetCurrentDirection(parentObj, sq_GetOppositeDirection(sq_GetDirection(parentObj)));
}
}
break;
case STATE_ATTACK:
local attackIndex = parentObj.getAttackIndex();
break;
}
}
function onStart_appendage_zombie(appendage)
{
if (!appendage) return;
appendage.getVar("atktime").clear_ct_vector();
appendage.getVar("atktime").push_ct_vector();
local timer = appendage.getVar("atktime").get_ct_vector(0);
timer.Reset();
timer.Start(10000,0);
}
function onEnd_appendage_zombie(appendage)
{
if (!appendage) return;
local parentObj = appendage.getParent();
if(!parentObj) return;
local activeObj = sq_GetCNRDObjectToActiveObject(parentObj);
sq_IntVectorClear(sq_GetGlobalIntVector());
sq_AddSetStatePacketActiveObject(activeObj, 12, sq_GetGlobalIntVector(), STATE_PRIORITY_USER);
}
//暗影蛛丝阵
function checkExecutableSkill_NicolasBlackArea(obj)
{
if (!obj) return false;
local size = obj.getVar("NicolasObj").get_obj_vector_size();
if(size < 1) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_NICOLASBLACKAREA);
if (isUse){
obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_NICOLASBLACKAREA);
local nicolasObj = obj.getVar("NicolasObj").get_obj_vector(0);
if(nicolasObj){
local activeObj = sq_GetCNRDObjectToActiveObject(nicolasObj);
monsterattack_Thief_Necromancer_ksk(activeObj,5);
}
local state = obj.getState();
switch(state){
case STATE_STAND:
case STATE_DASH:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
return true;
}
return false;
}
function checkCommandEnable_NicolasBlackArea(obj)
{
if (!obj) return false;
return true;
}
function onSetState_NicolasBlackArea(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(109);
break;
case 1:
obj.sq_SetCurrentAnimation(110);
break;
}
}
function onEndCurrentAni_NicolasBlackArea(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_CROSSOFPUNISHMENT, STATE_PRIORITY_AUTO, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_NicolasBlackArea(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_NicolasBlackArea(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_NicolasBlackArea(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_NicolasBlackArea(obj, new_state)
{
if(!obj) return;
}
//死亡之爪
function checkExecutableSkill_DarkNail(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DARKNAIL);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_DARKNAIL, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_DarkNail(obj)
{
if (!obj) return false;
return true;
}
function onSetState_DarkNail(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(ANI_BYKK_DARKNAIL);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local currentAni = obj.getCurrentAnimation();
local totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_DARKNAIL, -1, 3, 1.0) + 100;
local sizeRate = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_DARKNAIL, -1, 2, 1.0) + 100;
local speedRate = 8000 / currentAni.getDelaySum(0, 0);
createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,obj.getDirection(),2,SKILL_BYKK_DARKNAIL,1,totalDamage,sizeRate,speedRate,0,0,0,0,0);
}
function onEndCurrentAni_DarkNail(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_DarkNail(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_DarkNail(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_DarkNail(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_DarkNail(obj, new_state)
{
if(!obj) return;
}
//暗黑仪式
function checkExecutableSkill_DarkRitual(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DARKRITUAL);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_DARKRITUAL, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_DarkRitual(obj)
{
if (!obj) return false;
return true;
}
function onSetState_DarkRitual(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(ANI_BYKK_DARKRITUAL);
local currentAni = obj.getCurrentAnimation();
sq_SetFrameDelayTime(currentAni, 0, 80);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_DarkRitual(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_DarkRitual(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_DarkRitual(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1:
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_DARKRITUAL)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_DARKRITUAL);
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_DARKRITUAL, true);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_DARKRITUAL);
local buffTime = sq_GetLevelData(obj, SKILL_BYKK_DARKRITUAL, 1, skillLevel);
if(buffTime > 0) AddAppendage.sq_SetValidTime(buffTime);
AddAppendage.setEnableIsBuff(true);
AddAppendage.setBuffIconImage(112);
AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_DARKRITUAL, skillLevel);
CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true);
setSkillBonusRate_NecroMancer_bykk(obj);
break;
}
return true;
}
function onTimeEvent_DarkRitual(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_DarkRitual(obj, new_state)
{
if(!obj) return;
}
function proc_appendage_darkritual_tochr(appendage)
{
if(!appendage) return;
local parentObj = appendage.getParent();
if(!parentObj || parentObj.getState() == STATE_DIE){
appendage.setValid(false);
return;
}
}
function onEnd_appendage_darkritual_tochr(appendage)
{
if(!appendage) return;
local parentObj = appendage.getParent();
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
if(obj && obj.getState() != STATE_DIE){
setSkillBonusRate_NecroMancer_bykk(obj);
}
}
function setSkillBonusRate_NecroMancer_bykk(obj)
{
local bonusRate = 1000;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_DARKRITUAL)) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_DARKRITUAL, 0, sq_GetSkillLevel(obj, SKILL_BYKK_DARKRITUAL))) / 1000;
print("bonusRate1 = "+bonusRate);
if(sq_GetSkillLevel(obj, SKILL_BYKK_GRIMGRIMOIRE) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_GRIMGRIMOIRE, 13, sq_GetSkillLevel(obj, SKILL_BYKK_GRIMGRIMOIRE))) / 1000;
print("bonusRate2 = "+bonusRate);
if(sq_GetSkillLevel(obj, SKILL_BYKK_KEYOFACERON) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_KEYOFACERON, 0, sq_GetSkillLevel(obj, SKILL_BYKK_KEYOFACERON))) / 1000;
print("bonusRate3 = "+bonusRate);
if(sq_GetSkillLevel(obj, SKILL_BYKK_RINGOFDARKNESS) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_RINGOFDARKNESS, 0, sq_GetSkillLevel(obj, SKILL_BYKK_RINGOFDARKNESS))) / 1000;
print("bonusRate4 = "+bonusRate);
if(sq_GetSkillLevel(obj, SKILL_BYKK_SACRIFICIALPACT) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_SACRIFICIALPACT, 1, sq_GetSkillLevel(obj, SKILL_BYKK_SACRIFICIALPACT))) / 1000;
print("bonusRate5 = "+bonusRate);
if(sq_GetSkillLevel(obj, SKILL_BYKK_UNHOLYAURA) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_UNHOLYAURA, 2, sq_GetSkillLevel(obj, SKILL_BYKK_UNHOLYAURA))) / 1000;
print("bonusRate6 = "+bonusRate);
obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger());
//sq_SetSkillAttackBonus(obj, bonusRate);
}
function onStartDungeon_NecroMancer_bykk(obj)
{
setSkillBonusRate_NecroMancer_bykk(obj);
}
//百鬼夜行
function checkExecutableSkill_DarkLure(obj)
{
if (!obj) return false;
local size = obj.getVar("darklure_obj").get_obj_vector_size();
if(size > 0 && sq_GetSkill(obj, SKILL_BYKK_DARKLURE).isInCoolTime()){
local attackObj = obj.getVar("darklure_obj").get_obj_vector(0);
if(attackObj){
local colObj = sq_GetCNRDObjectToCollisionObject(attackObj);
colObj.removeAllTimeEvent();
if(sq_GetZPos(colObj) > 0) colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
else colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
}
local state = obj.getState();
if(state == 0 || state == 14){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, false);
}
return true;
}
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DARKLURE);
if (isUse){
obj.getVar("darklure_obj").clear_obj_vector();
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_DARKLURE, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_DarkLure(obj)
{
if (!obj) return false;
return true;
}
function onSetState_DarkLure(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
local Ani = obj.sq_GetThrowChargeAni(0);
obj.setCurrentAnimation(Ani);
break;
case 1:
local Ani = obj.sq_GetThrowShootAni(0);
obj.setCurrentAnimation(Ani);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_DarkLure(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_DARKLURE, STATE_PRIORITY_AUTO, true);
break;
case 1:
local totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_DARKLURE, -1, 0, 1.0) + 100;
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_DARKLURE);
local lifeTime = sq_GetIntData(obj, SKILL_BYKK_DARKLURE, 0);
local hitTime = sq_GetIntData(obj, SKILL_BYKK_DARKLURE, 2);
local increaseRate = sq_GetLevelData(obj, SKILL_BYKK_DARKLURE, 2, skillLevel);
local increaseRate_cur = sq_GetLevelData(obj, SKILL_BYKK_DARKLURE, 3, skillLevel);
local sizeRate = sq_GetLevelData(obj, SKILL_BYKK_DARKLURE, 7, skillLevel);
local autoTime = sq_GetLevelData(obj, SKILL_BYKK_DARKLURE, 5, skillLevel) * 10;
createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,75,0,50,obj.getDirection(),2,SKILL_BYKK_DARKLURE,1,totalDamage,lifeTime,hitTime,increaseRate,increaseRate_cur,sizeRate,autoTime,0);
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_DarkLure(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_DarkLure(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_DarkLure(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_DarkLure(obj, new_state)
{
if(!obj) return;
}
//死灵之怨
function checkExecutableSkill_BlameOfDead(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BLAMEOFDEAD);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_BLAMEOFDEAD, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_BlameOfDead(obj)
{
if (!obj) return false;
return true;
}
function onSetState_BlameOfDead(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(ANI_BYKK_BLAMEOFDEAD);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_BlameOfDead(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_BlameOfDead(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_BlameOfDead(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1:
local totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_BLAMEOFDEAD, -1, 0, 1.0) + 100;
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLAMEOFDEAD);
local lifeTime = sq_GetLevelData(obj, SKILL_BYKK_BLAMEOFDEAD, 6, skillLevel);
local hitMax = sq_GetIntData(obj, SKILL_BYKK_BLAMEOFDEAD, 1);
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_BLAMEOFDEAD, 0) + 30;
createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,0,0,obj.getDirection(),2,SKILL_BYKK_BLAMEOFDEAD,1,totalDamage,lifeTime,hitMax,sizeRate,0,0,0,0);
break;
}
return true;
}
function onTimeEvent_BlameOfDead(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_BlameOfDead(obj, new_state)
{
if(!obj) return;
}
//降临:暴君巴拉克
function checkExecutableSkill_ApportBallacre(obj)
{
if (!obj) return false;
local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0);
if(ballacreObj){
local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj);
colObj.setTimeEvent(1, 1000, 1, true);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_BALLACRE_TOCHR)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_BALLACRE_TOCHR);
local state = obj.getState();
if(state == STATE_STAND || state == STATE_DASH){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true);
}
return false;
}
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_APPORTBALLACRE);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_APPORTBALLACRE, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_ApportBallacre(obj)
{
if (!obj) return false;
if(obj.getVar("ballacreObj").get_obj_vector_size() > 0) return false;
return true;
}
function onSetState_ApportBallacre(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(ANI_BYKK_BALLACRECAST);
break;
case 1: obj.sq_SetCurrentAnimation(ANI_BYKK_BALLACRE_PIERCE); break;
case 2: obj.sq_SetCurrentAnimation(ANI_BYKK_BALLACRE_SWINGRL); break;
case 3: obj.sq_SetCurrentAnimation(ANI_BYKK_BALLACRE_HAND_PIERCE); break;
case 4: obj.sq_SetCurrentAnimation(ANI_BYKK_BALLACRE_SWING_DOWN); break;
case 5: obj.sq_SetCurrentAnimation(ANI_BYKK_BALLACRE_DASH_UPPER); break;
}
if(subState > 0){
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(0, 0);
local speedRate = 100.0;
switch(subState){
case 1: speedRate = 10000.0 / delay.tofloat(); break;
case 2: speedRate = 12000.0 / delay.tofloat(); break;
case 3: speedRate = 10000.0 / delay.tofloat(); break;
case 4: speedRate = 20000.0 / delay.tofloat(); break;
case 5: speedRate = 20000.0 / delay.tofloat(); break;
}
local attackState = [22,23,24,25,27];
local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0);
if(ballacreObj){
local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj);
colObj.getVar("setSpeedRate").setFloat(0, speedRate);
colObj.addSetStatePacket(attackState[subState - 1], null, STATE_PRIORITY_IGNORE_FORCE, false, "");
}
}
}
function onEndCurrentAni_ApportBallacre(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProc_ApportBallacre(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 4:
local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0);
if(ballacreObj){
local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj);
if(colObj.getState() >= 26) break;
}
case 1:
case 2:
case 3:
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL) && sq_IsKeyDown(OPTION_HOTKEY_JUMP, ENUM_SUBKEY_TYPE_ALL)){
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(200);
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_IGNORE_FORCE, true);
}
local startFrame = [5, 5, 8, 5];
local frameIndex = sq_GetCurrentFrameIndex(obj);
if(frameIndex >= startFrame[subState - 1]){
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){
obj.sq_IntVectClear();
if(subState == 4) obj.sq_IntVectPush(1);
else obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(STATE_BYKK_APPORTBALLACRE, STATE_PRIORITY_AUTO, true);
}
}
break;
}
}
function onKeyFrameFlag_ApportBallacre(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 101:
setBallacreSkillEffet_bykk(obj);
break;
}
return true;
}
function onTimeEvent_ApportBallacre(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_ApportBallacre(obj, new_state)
{
if(!obj) return;
}
function setBallacreSkillEffet_bykk(obj)
{
local size = obj.getVar("ballacreObj").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local aObj = obj.getVar("ballacreObj").get_obj_vector(i);
if(aObj) aObj.setValid(false);
}
}
obj.getVar("ballacreObj").clear_obj_vector();
obj.sq_PlaySound("R_TF_APPORT_BALLACRE");
obj.sq_PlaySound("BAL_SUMMON");
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_APPORTBALLACRE);
local phyDefense = sq_GetLevelData(obj, SKILL_BYKK_APPORTBALLACRE, 3, skillLevel);
local mglDefense = sq_GetLevelData(obj, SKILL_BYKK_APPORTBALLACRE, 4, skillLevel);
local darkTol = sq_GetIntData(obj, SKILL_BYKK_APPORTBALLACRE, 2);
local lightTol = sq_GetIntData(obj, SKILL_BYKK_APPORTBALLACRE, 3);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_BALLACRE_TOCHR)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_BALLACRE_TOCHR);
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_BALLACRE_TOCHR, true);
AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_APPORTBALLACRE, skillLevel);
CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true);
local change_appendage = AddAppendage.sq_getChangeStatus("apportballacre");
if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("apportballacre", obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
if(change_appendage){
change_appendage.clearParameter();
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, true, (phyDefense * 0.1).tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE , true, (mglDefense * 0.1).tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_DARK, false, (darkTol).tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_LIGHT, false, (lightTol * -1).tofloat());
}
createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,-25,-1,0,obj.getDirection(),2,SKILL_BYKK_APPORTBALLACRE,1,0,0,0,0,0,0,0,0);
}
function getAttackAni_Thief_necromancer(obj, index)
{
local animation = obj.sq_GetAttackAni(index);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_BALLACRE_TOCHR)){
local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0);
if(ballacreObj){
local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj);
if(colObj.getState() >= 25) return animation;
}
switch(index){
case 0: animation = obj.sq_GetCustomAni(ANI_BYKK_BALLACRE_PIERCE); break;
case 1: animation = obj.sq_GetCustomAni(ANI_BYKK_BALLACRE_SWINGRL); break;
case 2: animation = obj.sq_GetCustomAni(ANI_BYKK_BALLACRE_HAND_PIERCE); break;
case 3: animation = obj.sq_GetCustomAni(ANI_BYKK_BALLACRE_SWING_DOWN); break;
}
}
return animation;
}
function getDashAttackAni_Thief_necromancer(obj)
{
local animation = obj.sq_GetDashAttackAni();
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_BALLACRE_TOCHR) && !sq_GetSkill(obj, SKILL_BYKK_GRABCOLLAR).isInCoolTime()){
animation = obj.sq_GetCustomAni(ANI_BYKK_BALLACRE_DASH_UPPER);
}
return animation;
}
function getJumpAttackAni_Thief_necromancer(obj)
{
local animation = obj.sq_GetJumpAttackAni();
return animation;
}
function getRestAni_Thief_necromancer(obj)
{
local animation = obj.sq_GetRestAni();
return animation;
}
function onSetState_attack_thief_necromancer(obj, state, datas, isResetTimer)
{
if(!obj) return;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_BALLACRE_TOCHR)){
obj.getVar("ballacre_move").setInt(0, sq_GetXPos(obj));
local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0);
if(ballacreObj){
local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj);
local state = colObj.getState();
if(state >= 26) return;
}
local attackIndex = obj.sq_GetVectorData(datas, 0);
obj.sq_IntVectClear();
switch(attackIndex){
case 0: obj.sq_IntVectPush(1); break;
case 1: obj.sq_IntVectPush(2); break;
case 2: obj.sq_IntVectPush(3); break;
case 3: obj.sq_IntVectPush(4); break;
}
obj.sq_AddSetStatePacket(STATE_BYKK_APPORTBALLACRE, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
function onAfterSetState_attack_thief_necromancer(obj, state, datas, isResetTimer)
{
if(!obj) return;
// if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_BALLACRE_TOCHR)){
// local attackIndex = obj.sq_GetVectorData(datas, 0);
// if(attackIndex == 0){
// obj.sq_IntVectClear();
// obj.sq_IntVectPush(1);
// obj.sq_AddSetStatePacket(STATE_BYKK_APPORTBALLACRE, STATE_PRIORITY_IGNORE_FORCE, true);
// }
// // if(attackIndex > 3){
// // obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
// // return;
// // }
// // obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.75, 0.75);
// // local currentAni = obj.getCurrentAnimation();
// // local delay = currentAni.getDelaySum(0, 0);
// // local speedRate = 100.0;
// // switch(attackIndex){
// // case 0: speedRate = 10000.0 / delay.tofloat(); break;
// // case 1: speedRate = 12000.0 / delay.tofloat(); break;
// // case 2: speedRate = 10000.0 / delay.tofloat(); break;
// // case 3: speedRate = 20000.0 / delay.tofloat(); break;
// // }
// // print("attackIndex = "+attackIndex+",speedRate = "+speedRate);
// // local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0);
// // obj.getVar("ballacre_move").setInt(0, sq_GetXPos(obj));
// // if(ballacreObj){
// // local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj);
// // if(colObj.getState() >= 25) return;
// // colObj.getVar("setSpeedRate").setFloat(0, speedRate);
// // switch(attackIndex){
// // case 0: colObj.addSetStatePacket(22, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); break;
// // case 1: colObj.addSetStatePacket(23, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); break;
// // case 2: colObj.addSetStatePacket(24, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); break;
// // case 3: colObj.addSetStatePacket(25, null, STATE_PRIORITY_IGNORE_FORCE, false, ""); break;
// // }
// // }
// }
}
function onKeyFrameFlag_attack_thief_necromancer(obj, flagIndex)
{}
function onProc_attack_thief_necromancer(obj)
{
if(!obj) return;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_BALLACRE_TOCHR)){
sq_setCurrentAxisPos(obj, 0, obj.getVar("ballacre_move").getInt(0));
}
}
function onSetState_dashattack_thief_necromancer(obj, state, datas, isResetTimer)
{
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_BALLACRE_TOCHR)){
if(!sq_GetSkill(obj, SKILL_BYKK_GRABCOLLAR).isInCoolTime()){
obj.startSkillCoolTime(SKILL_BYKK_GRABCOLLAR, sq_GetSkillLevel(obj, SKILL_BYKK_GRABCOLLAR), -1);
obj.sq_IntVectClear();
obj.sq_IntVectPush(5);
obj.sq_AddSetStatePacket(STATE_BYKK_APPORTBALLACRE, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
}
function onAfterSetState_dashattack_thief_necromancer(obj, state, datas, isResetTimer)
{
if(!obj) return;
// if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_BALLACRE_TOCHR)){
// obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.5, 0.5);
// local currentAni = obj.getCurrentAnimation();
// local delay = currentAni.getDelaySum(0, 0);
// local speedRate = 10000.0 / delay.tofloat();
// print("delay = "+currentAni.getDelaySum(false));
// obj.getVar("ballacre_speedRate").setFloat(4, speedRate);
// }
}
function onProcCon_dashattack_thief_necromancer(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_dashattack_thief_necromancer(obj, flagIndex)
{}
function onSetState_jumpattack_thief_necromancer(obj, state, datas, isResetTimer)
{
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_BALLACRE_TOCHR)){
local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0);
if(ballacreObj){
local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj);
if(colObj.getState() != 26) colObj.addSetStatePacket(26, null, STATE_PRIORITY_IGNORE_FORCE, false, "");
}
}
}
function onAfterSetState_jumpattack_thief_necromancer(obj, state, datas, isResetTimer)
{}
function onKeyFrameFlag_jumpattack_thief_necromancer(obj, flagIndex)
{}
//吸魂暗劲波
function checkExecutableSkill_NicolasBlackWave(obj)
{
if (!obj) return false;
local size = obj.getVar("NicolasObj").get_obj_vector_size();
if(size < 1) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_NICOLASBLACKWAVE);
if (isUse){
obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_NICOLASBLACKWAVE);
local nicolasObj = obj.getVar("NicolasObj").get_obj_vector(0);
if(nicolasObj){
local activeObj = sq_GetCNRDObjectToActiveObject(nicolasObj);
monsterattack_Thief_Necromancer_ksk(activeObj,3);
}
local state = obj.getState();
switch(state){
case STATE_STAND:
case STATE_DASH:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
return true;
}
return false;
}
function checkCommandEnable_NicolasBlackWave(obj)
{
if (!obj) return false;
return true;
}
function onSetState_NicolasBlackWave(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(109);
break;
case 1:
obj.sq_SetCurrentAnimation(110);
break;
}
}
function onEndCurrentAni_NicolasBlackWave(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_CROSSOFPUNISHMENT, STATE_PRIORITY_AUTO, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_NicolasBlackWave(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_NicolasBlackWave(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_NicolasBlackWave(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_NicolasBlackWave(obj, new_state)
{
if(!obj) return;
}
//巴拉克的野心
function checkExecutableSkill_AmbitionOfBallacre(obj)
{
if (!obj) return false;
local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0);
if(ballacreObj){
local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj);
if(colObj.getState() > 25){
local state = obj.getState();
if(state == STATE_STAND || state == STATE_DASH){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true);
return false;
}
}
}
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_AMBITIONOFBALLACRE);
if (isUse){
obj.getVar("ambitionObj").clear_obj_vector();
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_AMBITIONOFBALLACRE, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_AmbitionOfBallacre(obj)
{
if (!obj) return false;
return true;
}
function onSetState_AmbitionOfBallacre(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0: obj.sq_SetCurrentAnimation(ANI_BYKK_BALLACRE_HAND_APPEAR); break;
case 1: obj.sq_SetCurrentAnimation(ANI_BYKK_BALLACRE_HAND_GRAB); break;
case 2: obj.sq_SetCurrentAnimation(ANI_BYKK_BALLACRE_HAND_APPEAR); break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.75, 0.75);
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(0, 0);
local speedRate = 8000.0 / delay.tofloat();
switch(subState){
case 0:
local delayTime = currentAni.getDelaySum(0, 6) + sq_GetIntData(obj, SKILL_BYKK_AMBITIONOFBALLACRE, 1);
if(sq_GetSkillLevel(obj, SKILL_BYKK_SACRIFICIALPACT) > 0) delayTime = currentAni.getDelaySum(0, 6) + 200;
local delay = (delayTime.tofloat() / speedRate * 100.0).tointeger();
obj.setTimeEvent(1, delay, 1, false);
break;
case 1:
local ambitionObj = obj.getVar("ambitionObj").get_obj_vector(0);
if(ambitionObj){
local colObj = sq_GetCNRDObjectToCollisionObject(ambitionObj);
colObj.getVar("setSpeedRate").setFloat(0, speedRate);
colObj.addSetStatePacket(21, null, STATE_PRIORITY_IGNORE_FORCE, false, "");
}
break;
case 2:
local delay = (740.0 / speedRate * 100.0).tointeger();
obj.setTimeEvent(2, delay, 1, false);
break;
}
local attackState = [31, 32, 33];
local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0);
if(ballacreObj){
local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj);
colObj.getVar("setSpeedRate").setFloat(0, speedRate);
colObj.addSetStatePacket(attackState[subState], null, STATE_PRIORITY_IGNORE_FORCE, false, "");
}
}
function onEndCurrentAni_AmbitionOfBallacre(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_AMBITIONOFBALLACRE, STATE_PRIORITY_AUTO, true);
break;
case 1:
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_AmbitionOfBallacre(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(sq_GetCurrentFrameIndex(obj) == 7 && obj.isExistTimeEvent(1)){
obj.setSkillCommandEnable(SKILL_BYKK_AMBITIONOFBALLACRE, true);
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_AMBITIONOFBALLACRE);
if(b_useskill != -1){
obj.stopTimeEvent(1);
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_AMBITIONOFBALLACRE, STATE_PRIORITY_AUTO, true);
break;
}
}
break;
}
}
function onKeyFrameFlag_AmbitionOfBallacre(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_AmbitionOfBallacre(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 1:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_AMBITIONOFBALLACRE, STATE_PRIORITY_AUTO, true);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onEndState_AmbitionOfBallacre(obj, new_state)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
if(new_state != STATE_BYKK_AMBITIONOFBALLACRE){
local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0);
if(ballacreObj){
local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj);
colObj.addSetStatePacket(21, null, STATE_PRIORITY_IGNORE_FORCE, false, "");
}
}
break;
}
}
//暗击拳
function checkExecutableSkill_Grabcollar(obj)
{
if (!obj) return false;
// local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CROSSOFPUNISHMENT);
// if (isUse){
// obj.sq_IntVectClear();
// obj.sq_IntVectPush(0);
// obj.sq_AddSetStatePacket(STATE_BYKK_CROSSOFPUNISHMENT, STATE_PRIORITY_IGNORE_FORCE, true);
// return true;
// }
return false;
}
function checkCommandEnable_Grabcollar(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Grabcollar(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(109);
break;
case 1:
obj.sq_SetCurrentAnimation(110);
break;
}
}
function onEndCurrentAni_Grabcollar(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_CROSSOFPUNISHMENT, STATE_PRIORITY_AUTO, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_Grabcollar(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_Grabcollar(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_Grabcollar(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_Grabcollar(obj, new_state)
{
if(!obj) return;
}
//杀戮乱舞
function checkExecutableSkill_Madnessballacre(obj)
{
if (!obj) return false;
// local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CROSSOFPUNISHMENT);
// if (isUse){
// obj.sq_IntVectClear();
// obj.sq_IntVectPush(0);
// obj.sq_AddSetStatePacket(STATE_BYKK_CROSSOFPUNISHMENT, STATE_PRIORITY_IGNORE_FORCE, true);
// return true;
// }
return false;
}
function checkCommandEnable_Madnessballacre(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Madnessballacre(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(109);
break;
case 1:
obj.sq_SetCurrentAnimation(110);
break;
}
}
function onEndCurrentAni_Madnessballacre(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_CROSSOFPUNISHMENT, STATE_PRIORITY_AUTO, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_Madnessballacre(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_Madnessballacre(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_Madnessballacre(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_Madnessballacre(obj, new_state)
{
if(!obj) return;
}
//巴拉克强击
function checkExecutableSkill_Ballacrestrongattack(obj)
{
if (!obj) return false;
// local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CROSSOFPUNISHMENT);
// if (isUse){
// obj.sq_IntVectClear();
// obj.sq_IntVectPush(0);
// obj.sq_AddSetStatePacket(STATE_BYKK_CROSSOFPUNISHMENT, STATE_PRIORITY_IGNORE_FORCE, true);
// return true;
// }
return false;
}
function checkCommandEnable_Ballacrestrongattack(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Ballacrestrongattack(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(109);
break;
case 1:
obj.sq_SetCurrentAnimation(110);
break;
}
}
function onEndCurrentAni_Ballacrestrongattack(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_CROSSOFPUNISHMENT, STATE_PRIORITY_AUTO, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_Ballacrestrongattack(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_Ballacrestrongattack(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_Ballacrestrongattack(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_Ballacrestrongattack(obj, new_state)
{
if(!obj) return;
}
//降临:僵尸莱迪亚
function checkExecutableSkill_Livingdead(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_LIVINGDEAD);
if (isUse){
obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_LIVINGDEAD);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_LIVINGDEAD, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Livingdead(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Livingdead(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(ANI_BYKK_LIVINGDEAD);
break;
}
}
function onEndCurrentAni_Livingdead(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_Livingdead(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_Livingdead(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 0:
if(false){//CP武器效果
createLivingDeadExplosion(obj);
break;
}
local totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_LIVINGDEAD, -1, 0, 1.0) + 100;
local lifeTime = sq_GetIntData(obj, SKILL_BYKK_LIVINGDEAD, 2);
local hitTime = sq_GetIntData(obj, SKILL_BYKK_LIVINGDEAD, 0);
local sizeRate = 100;
local addSizeRate = sq_GetIntData(obj, SKILL_BYKK_LIVINGDEAD, 8);
local increaseRate = sq_GetIntData(obj, SKILL_BYKK_LIVINGDEAD, 13);
createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,50,0,0,obj.getDirection(),2,SKILL_BYKK_LIVINGDEAD,1,totalDamage,lifeTime,hitTime,sizeRate,increaseRate,addSizeRate,0,0);
break;
}
return true;
}
function onTimeEvent_Livingdead(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_Livingdead(obj, new_state)
{
if(!obj) return;
}
function createLivingDeadExplosion(obj)
{
local currentAni = obj.getCurrentAnimation();
local speedRate = 10200 / currentAni.getDelaySum(0, 0);
local bonusRate = (100 + sq_GetIntData(obj, SKILL_BYKK_LIVINGDEAD, 13)).tofloat() / 100.0;
local totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_LIVINGDEAD, -1, 0, bonusRate) + 100;
local lifeTime = sq_GetIntData(obj, SKILL_BYKK_LIVINGDEAD, 2);
local hitTime = sq_GetIntData(obj, SKILL_BYKK_LIVINGDEAD, 0);
local hitCount = lifeTime / hitTime;
totalDamage = totalDamage * hitCount * 45 / 100;
local sizeRate = 100 + sq_GetIntData(obj, SKILL_BYKK_LIVINGDEAD, 8);
createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,50,0,0,obj.getDirection(),2,SKILL_BYKK_LIVINGDEAD,3,totalDamage,sizeRate,speedRate,0,0,0,0,0);
}
//巴拉克的愤怒
function checkExecutableSkill_Guillotine(obj)
{
if (!obj) return false;
local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0);
if(ballacreObj){
local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj);
if(colObj.getState() > 25){
local state = obj.getState();
if(state == STATE_STAND || state == STATE_DASH){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true);
return false;
}
}
}
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_GUILLOTINE);
if (isUse){
obj.sq_IntVectClear();
if(false){
obj.sq_IntVectPush(2);
obj.sq_IntVectPush(1);
}
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_GUILLOTINE, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Guillotine(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Guillotine(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0: obj.sq_SetCurrentAnimation(ANI_BYKK_BALLACRE_GUILLOTINE_START); break;
case 1: obj.sq_SetCurrentAnimation(ANI_BYKK_BALLACRE_GUILLOTINE_CHARGE); break;
case 2: obj.sq_SetCurrentAnimation(ANI_BYKK_BALLACRE_GUILLOTINE_FINISH); break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.75, 0.75);
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(0, 0);
local speedRate = 8000.0 / delay.tofloat();
local attackState = [34, 35, 36];
local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0);
if(ballacreObj){
local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj);
colObj.getVar("setSpeedRate").setFloat(0, speedRate);
if(subState == 2 && obj.sq_GetVectorData(datas, 1) > 0) colObj.getVar("guillotine_bool").setBool(0, true);
else colObj.getVar("guillotine_bool").setBool(0, false);
colObj.addSetStatePacket(attackState[subState], null, STATE_PRIORITY_IGNORE_FORCE, false, "");
}
}
function onEndCurrentAni_Guillotine(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
obj.sq_IntVectClear();
if(subState == 0 && sq_GetSkillLevel(obj, SKILL_BYKK_SACRIFICIALPACT) > 0) obj.sq_IntVectPush(2);
else obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(STATE_BYKK_GUILLOTINE, STATE_PRIORITY_AUTO, true);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_Guillotine(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
obj.setSkillCommandEnable(SKILL_BYKK_GUILLOTINE,true);
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_GUILLOTINE);
if(b_useskill != -1){
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(STATE_BYKK_GUILLOTINE, STATE_PRIORITY_AUTO, true);
}
break;
}
}
function onKeyFrameFlag_Guillotine(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_Guillotine(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_Guillotine(obj, new_state)
{
if(!obj) return;
}
//千魂杀
function checkExecutableSkill_Phantomstrom(obj)
{
if (!obj) return false;
local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0);
if(ballacreObj){
local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj);
if(colObj.getState() > 25){
local state = obj.getState();
if(state == STATE_STAND || state == STATE_DASH){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true);
return false;
}
}
}
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PHANTOMSTROM);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_PHANTOMSTROM, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Phantomstrom(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Phantomstrom(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(ANI_BYKK_BALLACRE_PHANTOM_STROM);
obj.sq_PlaySound("R_TF_ADESPHANTOM_03_A");
obj.sq_PlaySound("BALAC_FANTOM");
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.75, 0.75);
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(0, 0);
local speedRate = 8000.0 / delay.tofloat();
local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0);
if(ballacreObj){
local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj);
colObj.getVar("setSpeedRate").setFloat(0, speedRate);
colObj.addSetStatePacket(37, null, STATE_PRIORITY_IGNORE_FORCE, false, "");
}
}
function onEndCurrentAni_Phantomstrom(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_PHANTOMSTROM);
if(skillLevel >= 6){
local addLevel = sq_GetLevelData(obj, SKILL_BYKK_PHANTOMSTROM, 4, skillLevel);
local addSkillLevelTime = sq_GetLevelData(obj, SKILL_BYKK_PHANTOMSTROM, 5, skillLevel);
if(sq_GetSkillLevel(obj, SKILL_BYKK_SUMMONNICOLAS) > 0) obj.addSkillLevelAppendage(SKILL_BYKK_SUMMONNICOLAS, addLevel, addSkillLevelTime);
}
if(skillLevel >= 9){
local addLevel = sq_GetLevelData(obj, SKILL_BYKK_PHANTOMSTROM, 6, skillLevel);
local addSkillLevelTime = sq_GetLevelData(obj, SKILL_BYKK_PHANTOMSTROM, 7, skillLevel);
if(sq_GetSkillLevel(obj, SKILL_BYKK_APPORTBALLACRE) > 0) obj.addSkillLevelAppendage(SKILL_BYKK_APPORTBALLACRE, addLevel, addSkillLevelTime);
}
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_Phantomstrom(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_Phantomstrom(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_Phantomstrom(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_Phantomstrom(obj, new_state)
{
if(!obj) return;
}
//死灵之缚
function checkExecutableSkill_BlameOfDeadEx(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BLAMEOFDEADEX);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_BLAMEOFDEADEX, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_BlameOfDeadEx(obj)
{
if (!obj) return false;
return true;
}
function onSetState_BlameOfDeadEx(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(ANI_BYKK_BLAMEOFDEADEX);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
break;
}
}
function onEndCurrentAni_BlameOfDeadEx(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_BlameOfDeadEx(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_BlameOfDeadEx(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1:
break;
case 2:
if(false){
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLAMEOFDEADEX);
local lifeTime = sq_GetLevelData(obj, SKILL_BYKK_BLAMEOFDEADEX, 5, skillLevel);
local hitTime = sq_GetLevelData(obj, SKILL_BYKK_BLAMEOFDEADEX, 4, skillLevel);
local hitMax = lifeTime / hitTime;
local totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_BLAMEOFDEADEX, -1, 0, 1.0) + 100;
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_BLAMEOFDEADEX, 1);
local skillLevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_GRIMGRIMOIRE);
if(skillLevel2 > 0) sizeRate = sizeRate * (100 + sq_GetLevelData(obj, SKILL_BYKK_GRIMGRIMOIRE, 11, skillLevel2)) / 100;
local multiHit = (totalDamage * hitMax) * 18 / 100;
local expHit = (totalDamage * hitMax) * 35 / 100;
createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,200,0,0,obj.getDirection(),2,SKILL_BYKK_BLAMEOFDEADEX,2,multiHit,expHit,hitTime,sizeRate,0,0,0,0);
}
else{
local totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_BLAMEOFDEADEX, -1, 0, 1.0) + 100;
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLAMEOFDEADEX);
local lifeTime = sq_GetLevelData(obj, SKILL_BYKK_BLAMEOFDEADEX, 5, skillLevel);
local hitTime = sq_GetLevelData(obj, SKILL_BYKK_BLAMEOFDEADEX, 4, skillLevel);
local prob = sq_GetLevelData(obj, SKILL_BYKK_BLAMEOFDEADEX, 1, skillLevel) / 10;
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_BLAMEOFDEADEX, 1);
local skillLevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_GRIMGRIMOIRE);
if(skillLevel2 > 0) sizeRate = sizeRate * (100 + sq_GetLevelData(obj, SKILL_BYKK_GRIMGRIMOIRE, 11, skillLevel2)) / 100;
createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,200,0,0,obj.getDirection(),2,SKILL_BYKK_BLAMEOFDEADEX,1,totalDamage,lifeTime,hitTime,prob,sizeRate,0,0,0);
}
break;
}
return true;
}
function onTimeEvent_BlameOfDeadEx(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_BlameOfDeadEx(obj, new_state)
{
if(!obj) return;
}
//怨噬之沼
function checkExecutableSkill_Hatefulghost(obj)
{
if (!obj) return false;
local attackObj = obj.getVar("hatefulGhostObj").get_obj_vector(0);
if(attackObj){
local colObj = sq_GetCNRDObjectToCollisionObject(attackObj);
if(!colObj.isExistTimeEvent(12)){
local state = obj.getState();
if(state == STATE_STAND || state == STATE_DASH){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true);
}
return false;
}
local objPhase = colObj.getVar("phaseSet").getInt(0);
switch(objPhase){
case 1:
obj.sq_IntVectClear();
obj.sq_IntVectPush(sq_getRandom(2,3));
obj.sq_AddSetStatePacket(STATE_BYKK_HATEFULGHOST, STATE_PRIORITY_IGNORE_FORCE, true);
return false;
break;
case 2:
obj.sq_IntVectClear();
obj.sq_IntVectPush(sq_getRandom(4,5));
obj.sq_AddSetStatePacket(STATE_BYKK_HATEFULGHOST, STATE_PRIORITY_IGNORE_FORCE, true);
return false;
break;
}
}
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HATEFULGHOST);
if (isUse){
obj.getVar("hatefulGhostObj").clear_obj_vector();
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_HATEFULGHOST, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Hatefulghost(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Hatefulghost(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(ANI_BYKK_HATEFULGHOSTSTAY);
break;
case 1:
obj.sq_SetCurrentAnimation(ANI_BYKK_HATEFULGHOSTATTACK1_BODY);
obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/2_necromancer_bykk/hatefulghost/character/hatefulghostattack1front_00.ani"), 0, 0);
break;
case 2:
obj.sq_SetCurrentAnimation(ANI_BYKK_HATEFULGHOSTATTACK2A_BODY);
obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/2_necromancer_bykk/hatefulghost/character/hatefulghostattack2afront_00.ani"), 0, 0);
break;
case 3:
obj.sq_SetCurrentAnimation(ANI_BYKK_HATEFULGHOSTATTACK2B_BODY);
obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/2_necromancer_bykk/hatefulghost/character/hatefulghostattack2afront_00.ani"), 0, 0);
break;
case 4:
obj.sq_SetCurrentAnimation(ANI_BYKK_HATEFULGHOSTATTACK3A_BODY);
obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/2_necromancer_bykk/hatefulghost/character/hatefulghostattack2bfront_00.ani"), 0, 0);
break;
case 5:
obj.sq_SetCurrentAnimation(ANI_BYKK_HATEFULGHOSTATTACK3B_BODY);
obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/2_necromancer_bykk/hatefulghost/character/hatefulghostattack3front_00.ani"), 0, 0);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_Hatefulghost(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(STATE_BYKK_HATEFULGHOST, STATE_PRIORITY_AUTO, true);
break;
case 1:
case 2:
case 3:
case 4:
case 5:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_Hatefulghost(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_Hatefulghost(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 105:
//[OFFSET] `create attack Front Effect` 0 0 0
//[OFFSET] `create attack Bottom Effect` 0 0 0
//[OFFSET] `create Hand Effect` 0 0 0
//[OFFSET] `create Hand bottom Effect` 2000 0 0
local totalDamage_1st = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_HATEFULGHOST, -1, 0, 1.0) + 100;
local totalDamage_2nd = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_HATEFULGHOST, -1, 1, 1.0) + 100;
local totalDamage_3th1 = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_HATEFULGHOST, -1, 2, 1.0) + 100;
local totalDamage_3th2 = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_HATEFULGHOST, -1, 3, 1.0) + 100;
local lifeTime = 20000;
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_HATEFULGHOST, 1);
createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,150,0,0,obj.getDirection(),2,SKILL_BYKK_HATEFULGHOST,1,totalDamage_1st,totalDamage_2nd,totalDamage_3th1,totalDamage_3th2,lifeTime,sizeRate,0,0);
break;
case 106: sq_SetMyShake(obj, 3, 300); break;
case 200:
//[OFFSET] `create attack Front Effect` 0 0 0
local attackObj = obj.getVar("hatefulGhostObj").get_obj_vector(0);
if(attackObj){
local colObj = sq_GetCNRDObjectToCollisionObject(attackObj);
colObj.getVar("setState").setInt(0, 24);
colObj.stopTimeEvent(12);
colObj.getVar("move").setInt(0, sq_GetXPos(colObj));
colObj.getVar("move").setInt(1, sq_GetYPos(colObj));
colObj.setTimeEvent(13, 1, 50, true);
}
break;
case 204: sq_SetMyShake(obj, 3, 300); break;
case 211:
//[OFFSET] `create attack Front Effect` 0 0 0
local attackObj = obj.getVar("hatefulGhostObj").get_obj_vector(0);
if(attackObj){
local colObj = sq_GetCNRDObjectToCollisionObject(attackObj);
colObj.getVar("setState").setInt(0, 25);
colObj.stopTimeEvent(12);
colObj.getVar("move").setInt(0, sq_GetXPos(colObj));
colObj.getVar("move").setInt(1, sq_GetYPos(colObj));
colObj.setTimeEvent(13, 1, 50, true);
}
break;
case 217: sq_SetMyShake(obj, 3, 300); break;
case 308:
case 313:
sq_SetMyShake(obj, 3, 300);
//[OFFSET] `create attack Front Effect` 0 0 0
local attackObj = obj.getVar("hatefulGhostObj").get_obj_vector(0);
if(attackObj){
local colObj = sq_GetCNRDObjectToCollisionObject(attackObj);
colObj.getVar("setState").setInt(0, 27);
colObj.stopTimeEvent(12);
colObj.getVar("move").setInt(0, sq_GetXPos(colObj));
colObj.getVar("move").setInt(1, sq_GetYPos(colObj));
colObj.setTimeEvent(13, 1, 50, true);
}
break;
}
return true;
}
function onTimeEvent_Hatefulghost(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_Hatefulghost(obj, new_state)
{
if(!obj) return;
}
//暗黑蛛丝引
function checkExecutableSkill_Nicolasblackarachnia(obj)
{
if (!obj) return false;
local size = obj.getVar("NicolasObj").get_obj_vector_size();
if(size < 1) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_NICOLASBLACKARACHNIA);
if (isUse){
obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_NICOLASBLACKARACHNIA);
local nicolasObj = obj.getVar("NicolasObj").get_obj_vector(0);
if(nicolasObj){
local activeObj = sq_GetCNRDObjectToActiveObject(nicolasObj);
local attackIndex = 9;
if(false) attackIndex = 12;
monsterattack_Thief_Necromancer_ksk(activeObj, attackIndex);
}
local state = obj.getState();
switch(state){
case STATE_STAND:
case STATE_DASH:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
return true;
}
}
function checkCommandEnable_Nicolasblackarachnia(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Nicolasblackarachnia(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(109);
break;
case 1:
obj.sq_SetCurrentAnimation(110);
break;
}
}
function onEndCurrentAni_Nicolasblackarachnia(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_CROSSOFPUNISHMENT, STATE_PRIORITY_AUTO, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_Nicolasblackarachnia(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_Nicolasblackarachnia(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_Nicolasblackarachnia(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_Nicolasblackarachnia(obj, new_state)
{
if(!obj) return;
}
//暴君极刑斩
function checkExecutableSkill_Executionerslash(obj)
{
if (!obj) return false;
local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0);
if(ballacreObj){
local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj);
if(colObj.getState() > 25){
local state = obj.getState();
if(state == STATE_STAND || state == STATE_DASH){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true);
return false;
}
}
}
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_EXECUTIONERSLASH);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_EXECUTIONERSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Executionerslash(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Executionerslash(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
local Ani = obj.sq_GetThrowChargeAni(1);
obj.setCurrentAnimation(Ani);
break;
case 1:
local Ani = obj.sq_GetThrowShootAni(1);
obj.setCurrentAnimation(Ani);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.75, 0.75);
if(subState == 0){
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(0, 0);
local speedRate = 8000.0 / delay.tofloat();
local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0);
if(ballacreObj){
local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj);
colObj.getVar("setSpeedRate").setFloat(0, speedRate);
if(false) colObj.getVar("isStone_executionerslash").setBool(0, true);
else colObj.getVar("isStone_executionerslash").setBool(0, true);
colObj.addSetStatePacket(38, null, STATE_PRIORITY_IGNORE_FORCE, false, "");
}
}
}
function onEndCurrentAni_Executionerslash(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_EXECUTIONERSLASH, STATE_PRIORITY_AUTO, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_Executionerslash(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_Executionerslash(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_Executionerslash(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_Executionerslash(obj, new_state)
{
if(!obj) return;
}
//亡者君临:巴拉克之戮
function checkExecutableSkill_Ballacreadvent(obj)
{
if (!obj) return false;
local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0);
if(ballacreObj){
local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj);
if(colObj.getState() > 25){
local state = obj.getState();
if(state == STATE_STAND || state == STATE_DASH){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true);
return false;
}
}
}
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BALLACREADVENT);
if (isUse){
obj.getVar("Ballacreadvent_Effect").clear_obj_vector();
obj.getVar("Ballacreadvent_Background").clear_obj_vector();
obj.getVar("Ballacreadvent_Attract").clear_obj_vector();
obj.getVar("Ballacreadvent_Tar").clear_obj_vector();
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_BALLACREADVENT, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Ballacreadvent(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Ballacreadvent(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
local Ani = obj.sq_GetThrowChargeAni(2);
obj.setCurrentAnimation(Ani);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/ballacreadvent/casting/casting01_set01d01.ani"), 0, 0);
break;
case 1:
local Ani = obj.sq_GetThrowShootAni(2);
obj.setCurrentAnimation(Ani);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/ballacreadvent/casting/casting01_set02d01.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/ballacreadvent/casting/casting01_set02n01.ani"), 0, 0);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 0.75, 0.75);
if(subState == 0){
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(0, 0);
local speedRate = 6000.0 / delay.tofloat();
local ballacreObj = obj.getVar("ballacreObj").get_obj_vector(0);
if(ballacreObj){
local colObj = sq_GetCNRDObjectToCollisionObject(ballacreObj);
colObj.getVar("setSpeedRate").setFloat(0, speedRate);
colObj.addSetStatePacket(39, null, STATE_PRIORITY_IGNORE_FORCE, false, "");
local totalDamage_start = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_BALLACREADVENT, -1, 0, 1.0) + 100;
local totalDamage_multihit = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_BALLACREADVENT, -1, 1, 1.0) + 100;
local totalDamage_finish = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_BALLACREADVENT, -1, 2, 1.0) + 100;
local hitMax = sq_GetIntData(obj, SKILL_BYKK_BALLACREADVENT, 18);
speedRate = (speedRate * 100.0).tointeger();
createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,0,-1,0,obj.getDirection(),2,SKILL_BYKK_BALLACREADVENT,1,totalDamage_start,totalDamage_multihit,totalDamage_finish,hitMax,speedRate,0,0,0);
}
}
else if(subState == 1){
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(0, 1);
obj.setTimeEvent(1, delay, 1, false);
local aniPath = "character/thief/effect/animation/ballacreadvent/casting/casting02_groundn.ani";
createOnlyDrawObject_Theif_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM);
}
}
function onEndCurrentAni_Ballacreadvent(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_BALLACREADVENT, STATE_PRIORITY_AUTO, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_Ballacreadvent(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_Ballacreadvent(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_Ballacreadvent(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 1:
sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/2_necromancer_bykk/ballacreadvent/casting/casting01_set03n01.ani", 0, 0, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/2_necromancer_bykk/ballacreadvent/casting/casting01_set03n02.ani", 0, 0, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/2_necromancer_bykk/ballacreadvent/casting/casting01_set03d01.ani", 0, 1, 1);
sq_AddDrawOnlyAniFromParent(obj, "character/thief/effect/animation/2_necromancer_bykk/ballacreadvent/casting/casting01_set03d02.ani", 0, 1, 1);
local aniPath = "character/thief/effect/animation/2_necromancer_bykk/ballacreadvent/casting/flooreffect_d01.ani";
local pooledObj = createOnlyDrawObject_Theif_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM);
obj.getVar("Ballacreadvent_Effect").push_obj_vector(pooledObj);
break;
}
}
function onEndState_Ballacreadvent(obj, new_state)
{
if(!obj) return;
}
//亡者之茧
function checkExecutableSkill_Coconofundead(obj)
{
if (!obj) return false;
local attackObj = obj.getVar("coconofundeadObj").get_obj_vector(0);
if(attackObj && attackObj.getState() != 25){
local colObj = sq_GetCNRDObjectToCollisionObject(attackObj);
colObj.addSetStatePacket(25, null, STATE_PRIORITY_AUTO, false, "");
local size = obj.getVar("coconofundeadObj_b").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local effect = obj.getVar("coconofundeadObj_b").get_obj_vector(i);
if(effect){
local colObj = sq_GetCNRDObjectToCollisionObject(effect);
colObj.setTimeEvent(1, 1000, 1, true);
}
}
}
return false;
}
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_COCONOFUNDEAD);
if (isUse){
obj.getVar("coconofundeadObj").clear_obj_vector();
obj.getVar("coconofundeadObj_b").clear_obj_vector();
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_COCONOFUNDEAD, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Coconofundead(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Coconofundead(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(ANI_BYKK_COCOONOFUNDEADSTART_BODY);
obj.sq_PlaySound("R_TF_COCOON_UNDEAD");
break;
}
}
function onEndCurrentAni_Coconofundead(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_Coconofundead(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_Coconofundead(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 107:
local aniPath = "character/thief/effect/animation/2_necromancer_bykk/cocoonofundead/cocoonofundeadstartbottom_00.ani";
createOnlyDrawObject_Theif_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM);
break;
case 108:
//[OFFSET] `start attraction` 170 0 0
local totalDamage = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_COCONOFUNDEAD, -1, 0, 1.0) + 100;
local totalDamage_exp = sq_GetBonusRateWithPassive(obj, SKILL_BYKK_COCONOFUNDEAD, -1, 1, 1.0) + 100;
local lifeTime = 4500;
createSkillPassive_Theif_bykk(obj,obj,PASSIVEOBJ_NUM_THIEF,170,0,0,obj.getDirection(),2,SKILL_BYKK_COCONOFUNDEAD,1,totalDamage,totalDamage_exp,lifeTime,0,0,0,0,0);
break;
case 112:
//[OFFSET] `create cocoon side object` 170 0 0
break;
case 116:
//[OFFSET] `create cocoon Monster` 170 0 0
break;
}
return true;
}
function onTimeEvent_Coconofundead(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_Coconofundead(obj, new_state)
{
if(!obj) return;
}
function summonmonster_necromancer_bykk(obj,monsterobj,x,y,z,substate,monsterId,summontime,level,team)
{
if(obj.getVar("Summonnum").size_vector() == 0){
obj.getVar("Summonnum").clear_vector();
obj.getVar("Summonnum").push_vector(0);
}
sq_BinaryStartWrite();
sq_BinaryWriteByte(substate);
sq_BinaryWriteDword(monsterId);
sq_BinaryWriteWord(team);
sq_BinaryWriteWord(level);
sq_BinaryWriteWord(obj.getVar("Summonnum").get_vector(0));
sq_BinaryWriteDword(0);
sq_BinaryWriteDword(summontime);
sq_BinaryWriteWord(1);
sq_BinaryWriteWord(1);
sq_BinaryWriteWord(1);
local destX_01 = 0;
local destY_01 = 0;
if(!isSameObject(obj, monsterobj)){
destX_01 = monsterobj.getXPos() - obj.getXPos();
destY_01 = monsterobj.getYPos() - obj.getYPos();
if(monsterobj.getDirection() == ENUM_DIRECTION_LEFT) destX_01 = obj.getXPos() - monsterobj.getXPos();
}
sq_SendCreatePassiveObjectPacket(obj, 48024, 0, destX_01 + x, destY_01 + y, z, monsterobj.getDirection());
obj.getVar("Summonnum").set_vector(0,obj.getVar("Summonnum").get_vector(0) + 1);
}
function monsterattack_Thief_Necromancer_ksk(monsterObj,attackIndex)
{
if(!monsterObj) return;
local activeObj = sq_GetCNRDObjectToCollisionObject(monsterObj);
sq_IntVectorClear(sq_GetGlobalIntVector());
sq_IntVectorPush(sq_GetGlobalIntVector(),attackIndex);
sq_AddSetStatePacketCollisionObject(activeObj, 8, sq_GetGlobalIntVector(), STATE_PRIORITY_USER, true);
}
function createOnlyDrawObject_Theif_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer)
{
local ani = sq_CreateAnimation("",aniPath);
local pooledObj = sq_CreatePooledObject(ani,isTrue);
sq_SetCurrentDirection(pooledObj, direction);
pooledObj.setCurrentPos(x,y,z);
pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer);
sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false);
return pooledObj;
}
function createOnlyDrawObjectEX_Theif_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer,sizeRateX,sizeRateY)
{
local ani = sq_CreateAnimation("",aniPath);
local pooledObj = sq_CreatePooledObject(ani,isTrue);
sq_SetCurrentDirection(pooledObj, direction);
pooledObj.setCurrentPos(x,y,z);
local currentAni = pooledObj.getCurrentAnimation();
sizeRateX = sizeRateX.tofloat() / 100.0;
sizeRateY = sizeRateY.tofloat() / 100.0;
currentAni.setImageRateFromOriginal(sizeRateX, sizeRateY);
pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer);
sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false);
return pooledObj;
}
function createSkillPassive_Theif_bykk(obj,passiveObj,objnum,x,y,z,direction,job,skillIndex,subtype,pushv1,pushv2,pushv3,pushv4,pushv5,pushv6,pushv7,pushv8)
{
if(!obj || !passiveObj || obj.getState() == STATE_DIE) return;
local destX_01 = 0;
local destY_01 = 0;
if(!isSameObject(obj, passiveObj)){
destX_01 = passiveObj.getXPos() - obj.getXPos();
destY_01 = passiveObj.getYPos() - obj.getYPos();
if(direction == ENUM_DIRECTION_LEFT) destX_01 = obj.getXPos() - passiveObj.getXPos();
}
sq_BinaryStartWrite();
sq_BinaryWriteDword(job);
sq_BinaryWriteDword(skillIndex);
sq_BinaryWriteDword(subtype);
sq_BinaryWriteDword(pushv1);
sq_BinaryWriteDword(pushv2);
sq_BinaryWriteDword(pushv3);
sq_BinaryWriteDword(pushv4);
sq_BinaryWriteDword(pushv5);
sq_BinaryWriteDword(pushv6);
sq_BinaryWriteDword(pushv7);
sq_BinaryWriteDword(pushv8);
sq_SendCreatePassiveObjectPacket(obj, objnum, 0, destX_01 + x, destY_01 + y, z, direction);
}