Rindro-Sqr/user/114.66.51.249/25_priest_2.c

3698 lines
145 KiB
C

function onKeyFrameFlag_po_priest_bykk(obj, flagIndex)
{
if(!obj) return true;
local job = obj.getVar("job").getInt(0);
if(flagIndex == 1000 && job == 0){
local height = sq_GetZPos(obj);
print("height = "+height);
if(height > 5000){
switch(height){
case 6000://球手
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter());
local apdPath = "character/common/ap_equ.nut";
if(!CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, apdPath)){
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, sqrChr, -1, false, apdPath, true);
AddAppendage.sq_SetValidTime(60000);
AddAppendage.getVar("custom").setInt(17, 20);
AddAppendage.getVar("custom").setInt(18, 20);
AddAppendage.getVar("custom").setInt(19, 25);
AddAppendage.getVar("custom").setInt(9, 40);
AddAppendage.getVar("custom").setInt(10, 40);
AddAppendage.getVar("custom").setInt(11, 40);
AddAppendage.getVar("custom").setInt(12, 40);
}
sq_SendDestroyPacketPassiveObject(obj);
return true;
break;
case 6001:
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter());
local apdPath = "character/common/ap_youbishenshou.nut";
local objectManager = sqrChr.getObjectManager();//得到對象管理器
for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){
local object = objectManager.getCollisionObject(i);//得到控制類對象
if (object && object.getState() != STATE_DIE && object.isObjectType(OBJECTTYPE_CHARACTER) && !sqrChr.isEnemy(object)){
local chrObj = sq_GetCNRDObjectToSQRCharacter(object);
if(!CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, apdPath)){
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(chrObj, sqrChr, -1, false, apdPath, true);
AddAppendage.sq_SetValidTime(10000);
}
}
}
break;
}
}
}
local skillIndex = obj.getVar("skillIndex").getInt(0);
local subtype = obj.getVar("subtype").getInt(0);
local state = obj.getVar("state").getInt(0);
switch(job){
case 0:
break;
case 1:
switch(skillIndex){
case 1: sq_SendDestroyPacketPassiveObject(obj); break;
case SKILL_BYKK_ASTRAFE:
local totalDamage = obj.getVar("custom").getInt(0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 51));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
sq_SetAddWeaponDamage(sq_GetCurrentAttackInfo(obj), true);
break;
}
break;
case 2:
break;
case 3:
switch(skillIndex){
case SKILL_BYKK_ADVANCEDDRAGON:
local sub = obj.getVar("custom").getInt(0);
switch(sub){
case 1:
switch(flagIndex){
case 1:
//`create blue dragon` 201 0 0
local lifeTime = obj.getVar("custom").getInt(5);
local range = obj.getVar("custom").getInt(3);
local sizeRate = range.tofloat() / 310.0;
local offset = (201 * sizeRate).tointeger();
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643040,offset,0,0,sq_GetDirection(obj),5,1,lifeTime,0,0,0,0,0);
break;
case 2:
//`create white tiger` -206 0 0
local lifeTime = obj.getVar("custom").getInt(5);
local range = obj.getVar("custom").getInt(3);
local sizeRate = range.tofloat() / 310.0;
local offset = (-206 * sizeRate).tointeger();
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643040,offset,0,0,sq_GetDirection(obj),5,2,lifeTime,0,0,0,0,0);
break;
case 3:
//`create hyunmu` 0 60 0
local lifeTime = obj.getVar("custom").getInt(5);
local range = obj.getVar("custom").getInt(3);
local sizeRate = range.tofloat() / 310.0;
local offset = (60 * sizeRate).tointeger();
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643040,0,offset,0,sq_GetDirection(obj),5,3,lifeTime,0,0,0,0,0);
break;
case 4:
//`create phoenix` 0 -60 0
local lifeTime = obj.getVar("custom").getInt(5);
local range = obj.getVar("custom").getInt(3);
local sizeRate = range.tofloat() / 310.0;
local offset = (-60 * sizeRate).tointeger();
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643040,0,offset,0,sq_GetDirection(obj),5,4,lifeTime,0,0,0,0,0);
break;
}
break;
case 2:
switch(flagIndex){
case 1:
local speedRate = obj.getVar("custom").getInt(1);
local delay = 170000 / speedRate;
sq_SetMyShake(obj, 3, delay);
break;
case 2:
//`create physic flash` 8 0 8
local flashScreenObj = sq_flashScreen(obj,100,99999,30,178, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
obj.getVar("flashobj").clear_obj_vector();//清除
obj.getVar("flashobj").push_obj_vector(flashScreenObj);//加入
break;
case 3:
sq_flashScreen(obj,100,0,30,178, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
local speedRate = obj.getVar("custom").getInt(1);
local delay = 45000 / speedRate;
sq_SetMyShake(obj, 20, delay);
//`dragon shout sound` 4 0 -4
obj.sq_PlaySound("ADVANCED_DRAGON_START");
break;
case 4:
//`swing sound`
obj.sq_PlaySound("ADVANCED_DRAGON_SWISH");
break;
case 5:
sq_flashScreen(obj,100,100,30,178, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
local speedRate = obj.getVar("custom").getInt(1);
local delay = 50000 / speedRate;
sq_SetMyShake(obj, 20, delay);
//`create physic attack dust`
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/advanceddragon/advanceddragon_passion/ground_bottom_attack_end_crack_normal.ani", 0, 0, 0);
sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM);
break;
case 6:
//`destroy axe` -300 0 4
break;
case 7:
//`physic flash fade out`
local flashScreenObj = obj.getVar("flashobj").get_obj_vector(0);//得到
local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj);//转为闪屏类
if(pflashScreen) pflashScreen.fadeOut();//为真 销毁
break;
}
break;
}
break;
}
break;
case 4:
switch(skillIndex){
case SKILL_DireStream:
local Id = obj.getVar("avenger_ID").get_vector(0);
local pChrOBJ = obj.getTopCharacter();
pChrOBJ = sq_GetCNRDObjectToSQRCharacter(pChrOBJ);
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj);
local z = sq_GetZPos(obj);
local isMyControlObject = pChrOBJ.sq_IsMyControlObject();
if(Id == AVG_OBJ_Ear_Attack){
sq_BinaryStartWrite();
sq_BinaryWriteDword(AVG_OBJ_Ear_Explosion);
sq_SendCreatePassiveObjectPacketPos(obj, 24349, 0, x, y, z + 25);
}
else if(Id == AVG_OBJ_SpinCutter_Attack){
local skillLevel = pChrOBJ.sq_GetSkillLevel(SKILL_SPINCUTTER);
local BonusRate = pChrOBJ.sq_GetLevelData(SKILL_SPINCUTTER, 0, skillLevel);
local attackInfo = sq_GetCustomAttackInfo(obj, 3);
sq_SetCurrentAttackInfo(obj, attackInfo);
attackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(attackInfo, BonusRate);
obj.setTimeEvent(OBJ_SpinCutter_get_Attack,80,4,false);
}
else if(Id == AVG_OBJ_DireStream_Lase){
if(flagIndex == 10){
local Type = obj.getVar("DireStream_Lase").get_vector(0);
if(pChrOBJ.isMyControlObject()){
if(Type == 0)
{
//Common_Image_Als(obj,"passiveobject/4_priest_bykk/4avenger/animation/direstream/normal/direstream_passivefront.ani", 300, -1, 0, 0, 80, 1, 1.0);
sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/4avenger/animation/direstream/normal/direstream_passivefront.ani", 300, -1, 0);
}
else if(Type == 1)
{
//Common_Image_Als(obj,"passiveobject/4_priest_bykk/4avenger/animation/direstream/devilgauge/direstream2_passivefront.ani", 300, -1, 0, 0, 80, 1, 1.0)
sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/4avenger/animation/direstream/devilgauge/direstream2_passivefront.ani", 300, -1, 0);
}
//Common_Image_Als(obj,"passiveobject/4_priest_bykk/4avenger/animation/direstream/direstream_passiveback.ani", 450, -1, 0, 0, 80, 1, 1.0)
sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/4avenger/animation/direstream/direstream_passiveback.ani", 450, -1, 0);
}
}
if(flagIndex == 11){
sq_BinaryStartWrite();
sq_BinaryWriteDword(AVG_OBJ_DireStream_LaseEnd);
sq_SendCreatePassiveObjectPacketPos(obj, 24349, 0, x, y, z);
}
}
break;
case SKILL_PRIEST_RIGHTEOUSDEVILIZE:
switch(subtype){
case 1:
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(14, 21);
local hitMax = obj.getVar("custom").getInt(0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 50));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), obj.getVar("custom").getInt(4));
obj.setTimeEvent(1, delay / (hitMax + 1), hitMax, true);
break;
}
break;
}
break;
}
return true;
}
function onAttack_po_priest_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj) return;
local job = obj.getVar("job").getInt(0);
local skillIndex = obj.getVar("skillIndex").getInt(0);
local subtype = obj.getVar("subtype").getInt(0);
local state = obj.getVar("state").getInt(0);
switch(job){
case 0:
break;
case 1:
switch(skillIndex){
case 28:
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
if(obj.getVar("custom").getInt(7) > 0){
local prob = obj.getVar("custom").getInt(8);
if(sq_getRandom(1, 100) > 100 - prob){
local power = obj.getVar("custom").getInt(9);
createSkillPassive_Priest_bykk(obj,damager,PASSIVEOBJECT_PRIESTBYKK,0,0,0,sq_GetDirection(obj),1,23,1,power,0,0,0,0,0,0,0);
// print("power = "+power);
// sq_BinaryStartWrite();
// sq_BinaryWriteByte(power);
// sq_SendCreatePassiveObjectPacketPos(obj, 24012, 0, sq_GetXPos(damager), sq_GetYPos(damager), 0);
}
}
}
break;
}
break;
case 2:
break;
case 3:
switch(skillIndex){
case SKILL_BYKK_THUNDERBOLTTALISMAN:
switch(subtype){
case 1:
if(obj.getVar("custom").getInt(6) > 0) return;
local skillLevel = obj.getVar("custom").getInt(5);
local aniPath = ["passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalisman/thunderbolt1.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalisman/thunderbolt2.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thunderbolttalisman/thunderbolt3.ani"];
if(skillLevel > 0){
aniPath = ["passiveobject/4_priest_bykk/3exorcist_bykk/animation/chakraofgod/thunder/a_thunder_a.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/chakraofgod/thunder/b_thunder_b.ani", "passiveobject/4_priest_bykk/3exorcist_bykk/animation/chakraofgod/thunder/c_thunder_c.ani"];
}
sq_AddDrawOnlyAniFromParent(damager, aniPath[sq_getRandom(0, 2)], 0, 0, sq_GetObjectHeight(damager) / 2);
if(obj.getVar("bool").getBool(1)){
obj.getVar("bool").setBool(1, false);
sq_SetMyShake(obj, 3, 80);
}
break;
}
break;
case SKILL_BYKK_HYUNMOO:
if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return;
local sub = obj.getVar("custom").getInt(0);
local atkTarget = obj.getVar("atkTarget").get_obj_vector(0);
if(sub == 0 && obj.getVar("atkBool").getBool(0) && isSameObject(atkTarget, damager)){
sq_setCurrentAxisPos(obj, 0, sq_GetXPos(damager));
sq_setCurrentAxisPos(obj, 1, sq_GetYPos(damager) + 3);
local activeObj = sq_GetCNRDObjectToActiveObject(damager);
local apdPath = "character/priest/3exorcist_bykk/ap_hyunmoohold.nut";
if(!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, apdPath)){
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, apdPath, true);
sq_HoldAndDelayDie(activeObj, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage);
AddAppendage.getVar("custom").setInt(0, sq_GetXPos(activeObj));
AddAppendage.getVar("custom").setInt(1, sq_GetYPos(activeObj));
AddAppendage.getVar("custom").setInt(2, sq_GetZPos(activeObj));
local holdTime = obj.getVar("custom").getInt(2);
local changeRate = obj.getVar("custom").getInt(7);
if(sq_IsBoss(activeObj) || sq_IsNamed(activeObj) || sq_IsAiCharacter(activeObj) || sq_IsHellMonster(activeObj)){
holdTime = holdTime * changeRate / 100;
}
print("holdTime = "+holdTime);
AddAppendage.sq_SetValidTime(holdTime);
obj.addSetStatePacket(24, null, STATE_PRIORITY_AUTO, false, "");
obj.setTimeEvent(3, holdTime, 1, false);
obj.sq_PlaySound("HYUN_LOCK_LOOP", 2333);
}
obj.getVar("atkBool").setBool(0, false);
}
break;
case SKILL_BYKK_DESTROYSPIRITTALISMAN:
switch(subtype){
case 1:
if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return;
local activeObj = sq_GetCNRDObjectToActiveObject(damager);
if(activeObj.getVar("dsTalisman").getBool(0) == false){
activeObj.getVar("dsTalisman").setBool(0, true);
local group = sq_GetGroup(activeObj);
local uniqueId = sq_GetUniqueId(activeObj);
local totalDamage = obj.getVar("custom").getInt(1);
local lifeTime = obj.getVar("custom").getInt(2);
local hitTime = obj.getVar("custom").getInt(3);
local sizeRate = obj.getVar("custom").getInt(4);
local height = sq_GetObjectHeight(activeObj);
createSkillPassive_Priest_3exorcist_bykk(obj,activeObj,643014,0,1,height / 3,sq_GetDirection(obj),group,uniqueId,totalDamage,lifeTime,hitTime,sizeRate,0,0);
}
break;
}
break;
case SKILL_BYKK_GROUNDCRASH:
if(isStuck) return;
if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return;
if(sq_IsFixture(damager)) return;
if(obj.getVar("custom").getInt(0) > 0){
local apdPath = "character/priest/3exorcist_bykk/ap_groundcrash_suck.nut";
if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, apdPath)){
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true);
AddAppendage.sq_SetValidTime(300);
sq_MoveToAppendageForce(damager, obj, obj, 0, 0, damager.getZPos(), 200, true, AddAppendage);
}
}
break;
case SKILL_BYKK_THROWWEAPON:
if(isStuck) return;
if(obj.getVar().getBool(1) == false){
obj.getVar().setBool(1, true);
obj.stopTimeEvent(1);
obj.setTimeEvent(1, 300, 1, false);
}
sq_AddDrawOnlyAniFromParent(damager, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/throwweapon/hit.ani", 0, 0, sq_GetCenterZPos(boundingBox));
break;
case SKILL_BYKK_ATOMICSMASH:
sq_AddDrawOnlyAniFromParent(damager, "character/priest/effect/animation/3exorcist_bykk/atomicsmash/hit2final.ani", -150, 1, 50);
break;
case SKILL_BYKK_DANGEROUSSCALE:
local sub = obj.getVar("custom").getInt(0);
switch(sub){
case 1:
if(obj.getVar("custom").getInt(1) <= 0) break;
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
local aniPath = "appendage/ap_common_hold.nut";
if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, aniPath)){
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, aniPath, true);
sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 600, ENUM_DIRECTION_NEUTRAL , AddAppendage);
AddAppendage.sq_SetValidTime(2000);
local group = sq_GetGroup(damager);
local uniqueId = sq_GetUniqueId(damager);
createSkillPassive_Priest_3exorcist_bykk(obj,damager,643023,0,1,0,sq_GetDirection(obj),2,group,uniqueId,0,0,0,0,0);
}
}
break;
}
break;
case SKILL_BYKK_THEBEST7HIT:
switch(subtype){
case 1:
if(isStuck) return;
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
if(obj.getVar().getBool(0) == false){
obj.getVar().setBool(0, true);
sq_AddDrawOnlyAniFromParent(damager, "character/priest/effect/animation/3exorcist_bykk/thebest7hit/powerstrikeseven_crasha.ani", 0, 1, sq_GetCenterZPos(boundingBox));
sq_AddDrawOnlyAniFromParent(damager, "character/priest/effect/animation/3exorcist_bykk/thebest7hit/powerstrikeseven_crashb.ani", 0, 1, sq_GetCenterZPos(boundingBox));
}
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter());
if(sqrChr && sqrChr.getState() != STATE_DIE){
if(!sqrChr.getVar("Thebest7hitTar").is_obj_vector(damager)){
sqrChr.getVar("Thebest7hitTar").push_obj_vector(damager);
local apdPath = "character/priest/3exorcist_bykk/ap_thebest7hit_hold.nut";
if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, apdPath)){
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, sqrChr, -1, false, apdPath, true);
sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage);
}
}
}
}
break;
}
break;
case SKILL_BYKK_ADVANCEDDRAGON:
if(isStuck) return;
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
local sub = obj.getVar("custom").getInt(0);
switch(sub){
case 3:
local apdPath = "character/priest/3exorcist_bykk/ap_advanceddragon_hold.nut";
local lifeTime = obj.getVar("custom").getInt(2) + 200;
if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, apdPath)){
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true);
sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage);
AddAppendage.sq_SetValidTime(lifeTime);
}
break;
case 2:
sq_AddDrawOnlyAniFromParent(damager, "character/priest/effect/animation/3exorcist_bykk/advanceddragon_passion/hit/hit_hitdodge.ani", 0, 0, sq_GetCenterZPos(boundingBox));
break;
}
}
break;
}
break;
case 4:
break;
}
}
function procAppend_po_priest_bykk(obj)
{
if(!obj) return;
local job = obj.getVar("job").getInt(0);
local skillIndex = obj.getVar("skillIndex").getInt(0);
local subtype = obj.getVar("subtype").getInt(0);
local state = obj.getVar("state").getInt(0);
switch(job){
case 0:
break;
case 1:
break;
case 2:
break;
case 3:
switch(skillIndex){
case SKILL_BYKK_VERMILIONBIRDTALISMAN:
switch(subtype){
case 2:
local sub = obj.getVar("custom").getInt(0);
if(sub == 1 && state == 20){
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter());
if(sqrChr && sqrChr.getState() != STATE_DIE){
local direction = sq_GetDirection(sqrChr);
local offSetX = sq_GetDistancePos(sq_GetXPos(sqrChr), direction, -50);
local offSetY = sq_GetYPos(sqrChr);
sq_setCurrentAxisPos(obj, 0, offSetX);
sq_setCurrentAxisPos(obj, 1, offSetY);
sq_SetCurrentDirection(obj, direction);
}
else{
obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
return;
}
local time = sq_GetObjectTime(obj);
if(time >= 10000){
sqrChr.getVar("vermilionbirdtalismanBool").setBool(0, false);
obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
}
}
else if(sub == 2 && state == 20){
local time = sq_GetObjectTime(obj);
local lifeTime = obj.getVar("custom").getInt(2);
if(time >= lifeTime){
obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
}
}
break;
}
break;
case SKILL_BYKK_THUNDERBOLTTALISMAN:
switch(subtype){
case 1:
switch(state){
case 21:
if(obj.getVar("bool").getBool(0)) return;
// if(obj.getVar("custom").getInt(6) > 0) return;
local timer = obj.getVar().get_ct_vector(0);
if(timer){
local currentT = timer.Get();
if(currentT >= obj.getVar("custom").getInt(2)){
obj.getVar("bool").setBool(0, true);
print("time = "+obj.getVar("custom").getInt(2));
local size = obj.getVar("eff").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local pooledObj = obj.getVar("eff").get_obj_vector(i);
if(pooledObj) pooledObj.setValid(false);
}
}
obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
}
}
else{
obj.getVar("bool").setBool(0, true);
local size = obj.getVar("eff").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local pooledObj = obj.getVar("eff").get_obj_vector(i);
if(pooledObj) pooledObj.setValid(false);
}
}
obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
}
break;
}
break;
case 2:
break;
}
break;
case SKILL_BYKK_HYUNMOO:
local sub = obj.getVar("custom").getInt(0);
switch(sub){
case 0:
local time = sq_GetObjectTime(obj);
if(time >= obj.getVar("custom").getInt(3) && state == 21 && obj.getVar("disappear").getBool(0) == false){
obj.getVar("disappear").setBool(0, true);
obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
}
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter());
if((!sqrChr || sqrChr.getState() == STATE_DIE) && obj.getVar("disappear").getBool(0) == false){
obj.getVar("disappear").setBool(0, true);
obj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
}
break;
case 1:
local targetObj = obj.getVar("tar").get_obj_vector(0);
if(!targetObj || targetObj.getState() == 26){
sq_SendDestroyPacketPassiveObject(obj);
}
local offsetX = sq_GetDistancePos(sq_GetXPos(targetObj), sq_GetDirection(obj), 200);
sq_setCurrentAxisPos(obj, 0, offsetX);
sq_setCurrentAxisPos(obj, 1, sq_GetYPos(targetObj) + 125);
break;
}
break;
case SKILL_BYKK_SHIKIGAMI:
local sub = obj.getVar("custom").getInt(0);
switch(sub){
case 1:
local time = sq_GetObjectTime(obj);
if(time >= obj.getVar("custom").getInt(4) + 500 && obj.getVar().getBool(0) == false){
obj.getVar().setBool(0, true);
local totalDamage = obj.getVar("custom").getInt(2);
local sizeRate = obj.getVar("custom").getInt(6);
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643012,250,0,-sq_GetZPos(obj),sq_GetDirection(obj),3,totalDamage,sizeRate,0,0,0,0,0);
sq_SendDestroyPacketPassiveObject(obj);
}
break;
case 2:
local time = sq_GetObjectTime(obj);
if(time >= obj.getVar("custom").getInt(1) - 350){
if(obj.isExistTimeEvent(2)) obj.stopTimeEvent(2);
if(obj.isExistTimeEvent(3)) obj.stopTimeEvent(3);
}
if(time >= obj.getVar("custom").getInt(1)){
sq_SendDestroyPacketPassiveObject(obj);
}
break;
case 5:
local randomNum = obj.getVar("custom").getInt(1);
local randomNum2 = obj.getVar("custom").getInt(4);
local time = sq_GetObjectTime(obj);
if(time <= 300 + randomNum){
local vz = sq_GetUniformVelocity(obj.getVar("custom").getInt(3), obj.getVar("custom").getInt(3) - 150 + randomNum2 * 5, time, 300 + randomNum);
local angle = sq_GetUniformVelocity(-35 + randomNum2, 0, time, 300);
sq_setCurrentAxisPos(obj, 2, vz);
sq_SetCustomRotate(obj, sq_ToRadian(angle.tofloat()));
}
else{
local vz = sq_GetUniformVelocity(obj.getVar("custom").getInt(3) - 150 + randomNum2 * 5, obj.getVar("custom").getInt(3), time, 300 + randomNum + obj.getVar("custom").getInt(2));
local angle = sq_GetUniformVelocity(0, 35 + randomNum2, time, 300);
sq_setCurrentAxisPos(obj, 2, vz);
sq_SetCustomRotate(obj, sq_ToRadian(angle.tofloat()));
if(time >= obj.getVar("custom").getInt(2) + 300 && obj.getVar().getBool(0) == false){
obj.getVar().setBool(0, true);
local pooledObj;
if(randomNum > 50){
pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/birddisappearw.ani", 0, 0, 0);
sq_SetCustomRotate(pooledObj, sq_ToRadian(-20.0, 20.0));
}
else{
local angle = sq_ToRadian(-20.0, 20.0);
pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/birddisappearb1.ani", 0, 0, 0);
sq_SetCustomRotate(pooledObj, angle);
pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/shikigami/birddisappearb2.ani", 0, 1, 1);
sq_SetCustomRotate(pooledObj, angle);
}
sq_SendDestroyPacketPassiveObject(obj);
}
}
break;
}
break;
case SKILL_BYKK_DESTROYSPIRITTALISMAN:
switch(subtype){
case 1:
local sub = obj.getVar("custom").getInt(0);
switch(sub){
case 1:
local time = sq_GetObjectTime(obj);
if(time >= 1500 && obj.getVar().getBool(0) == false){
obj.getVar().setBool(0, true);
sq_SendDestroyPacketPassiveObject(obj);
}
break;
}
break;
case 2:
local targetObj = obj.getVar("tar").get_obj_vector(0);
local activeObj = sq_GetCNRDObjectToActiveObject(targetObj);
if(!activeObj || activeObj.getState() == STATE_DIE || activeObj.getHp() <= 0) sq_SendDestroyPacketPassiveObject(obj);
break;
}
break;
case SKILL_BYKK_THROWWEAPON:
local time = sq_GetObjectTime(obj);
if(time >= obj.getVar("custom").getInt(1) && obj.getVar().getBool(0) == false){
obj.getVar().setBool(0, true);
sq_SendDestroyPacketPassiveObject(obj);
local aniPath = "passiveobject/4_priest_bykk/3exorcist_bykk/animation/throwweapon/disappear.ani";
local direction = sq_GetDirection(obj), x = sq_GetXPos(obj), y = sq_GetYPos(obj), z = sq_GetZPos(obj);
local sizeRate = obj.getVar("custom").getInt(0);
createOnlyDrawObjectEX_Priest_bykk(obj,aniPath,true,direction,x,y,z,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate)
}
break;
case SKILL_BYKK_DANGEROUSSCALE:
if(obj.getVar("custom").getInt(0) == 1) return;
local state = obj.getVar("state").getInt(0);
switch(state){
case 21:
local targetObj = obj.getVar("tar").get_obj_vector(0);
local aniPath = "appendage/ap_common_hold.nut";
if(targetObj && !CNSquirrelAppendage.sq_IsAppendAppendage(targetObj, aniPath)){
obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
}
break;
}
break;
case SKILL_BYKK_PENTAGON:
switch(subtype){
case 1:
switch(state){
case 22:
local timer = obj.getVar().get_ct_vector(0);//得到
if(timer){
local currentT = timer.Get();//得到时间
if(currentT >= obj.getVar("custom").getInt(3) && obj.getVar().getBool(0) == false){
obj.getVar().setBool(0, true);
obj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");
}
}
}
break;
case 2:
local sub = obj.getVar("custom").getInt(0);
local sizeRate = obj.getVar("custom").getInt(1);
switch(sub){
case 2:
local time = sq_GetObjectTime(obj);
local sizeRate = sq_GetUniformVelocity(100, 50 * sizeRate / 100, time, 250);
local currentAni = obj.getCurrentAnimation();
sizeRate = sizeRate.tofloat() / 100.0;
currentAni.setImageRateFromOriginal(sizeRate, sizeRate);
currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
break;
}
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 7:
break;
case 8:
break;
case 9:
break;
}
break;
case SKILL_BYKK_FOURGODPOWER:
switch(subtype){
case 1:
break;
case 2:
switch(state){
case 21:
local timer = obj.getVar().get_ct_vector(0);//得到
if(timer){
local currentT = timer.Get();//得到时间
local isStrong = obj.getVar("custom").getInt(4);
local lifeTime = obj.getVar("custom").getInt(5);
if(isStrong > 0) lifeTime = lifeTime / 2;
if(currentT >= lifeTime && obj.getVar().getBool(0) == false){
obj.getVar().setBool(0, true);
obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
}
}
}
break;
case 3:
switch(state){
case 21:
local timer = obj.getVar().get_ct_vector(0);//得到
if(timer){
local currentT = timer.Get();//得到时间
local isStrong = obj.getVar("custom").getInt(4);
local lifeTime = obj.getVar("custom").getInt(5);
if(isStrong > 0) lifeTime = lifeTime / 2;
if(currentT >= lifeTime && obj.getVar().getBool(0) == false){
obj.getVar().setBool(0, true);
obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
}
}
}
break;
case 4:
break;
}
break;
case SKILL_BYKK_BLUEDRAGON:
local sub = obj.getVar("custom").getInt(0);
if(sub == 1){
switch(state){
default:
if(sq_GetZPos(obj) <= 0 && obj.getVar().getBool(0) == false){
obj.getVar().setBool(0, true);
obj.sq_RemoveMoveParticle();
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj.getTopCharacter());
local destX_01 = obj.getXPos() - sqrChr.getXPos();
local destY_01 = obj.getYPos() - sqrChr.getYPos();
if(sq_GetDirection(obj) == ENUM_DIRECTION_LEFT) destX_01 = sqrChr.getXPos() - obj.getXPos();
sq_BinaryStartWrite();
sq_BinaryWriteDword(100);
sq_BinaryWriteDword(30);
sq_BinaryWriteDword(30);
sq_BinaryWriteDword(30);
sq_BinaryWriteDword(30);
sq_BinaryWriteDword(30);
sq_SendCreatePassiveObjectPacket(sqrChr, 24030, 0, destX_01, destY_01, 0, sq_GetDirection(sqrChr));
local totalDamage = obj.getVar("custom").getInt(1);
local sizeRate = obj.getVar("custom").getInt(2);
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643039,0,0,0,sq_GetDirection(obj),2,totalDamage,sizeRate,0,0,0,0,0);
sq_SendDestroyPacketPassiveObject(obj);
}
else if(sq_GetZPos(obj) > 0 && sq_GetObjectTime(obj) >= 3000) sq_SendDestroyPacketPassiveObject(obj);
break;
}
}
break;
case SKILL_BYKK_ADVANCEDDRAGON:
local sub = obj.getVar("custom").getInt(0);
if(sub == 1){
local time = sq_GetObjectTime(obj);
local lifeTime = obj.getVar("custom").getInt(5);
local speedRate = obj.getVar("custom").getInt(6);
lifeTime = lifeTime + 200000 / speedRate;
if(time >= lifeTime && obj.getVar().getBool(0) == false){
obj.getVar().setBool(0, true);
local range = obj.getVar("custom").getInt(3);
local sizeRate = range.tofloat() / 310.0;
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/advanceddragon/advanceddragon_bright/endmagiccircle_1.ani", 0, 0, 0);
local pAni = pooledObj.getCurrentAnimation();
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
sq_SendDestroyPacketPassiveObject(obj);
}
}
else if(sub == 3){
switch(state){
case 21:
local timer = obj.getVar().get_ct_vector(0);
if(timer){
local currentT = timer.Get();
if(currentT >= obj.getVar("custom").getInt(2)){
obj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
}
}
break;
}
}
break;
}
break;
case 4:
switch(skillIndex){
case SKILL_DireStream:
local Id = obj.getVar("avenger_ID").get_vector(0);
local pChrOBJ = obj.getTopCharacter();
pChrOBJ = sq_GetCNRDObjectToSQRCharacter(pChrOBJ);
local state = pChrOBJ.getState();
if(Id == AVG_OBJ_SpinCutter_Attack){
local pAni = obj.getCurrentAnimation();
local frmIndex = sq_GetAnimationFrameIndex(pAni);
local t = obj.getVar("SpinCutter_Attack_HitTime").get_ct_vector(0);
if (!t){
obj.getVar("SpinCutter_Attack_HitTime").clear_ct_vector();
obj.getVar("SpinCutter_Attack_HitTime").push_ct_vector();
t = obj.getVar("SpinCutter_Attack_HitTime").get_ct_vector(0);
t.Reset();
t.Start(10000,0);
return true;
}
local currentT = t.Get();
local end_frmIndex = 7;
pAni.setSpeedRate(150.0);
if(frmIndex >= 0 && frmIndex <= end_frmIndex){
local Dis_xpos = obj.getVar("SpinCutter_Attack").get_vector(0);
local End_xpos = sq_GetDistancePos(Dis_xpos, obj.getDirection(), 350);
local xpos = sq_GetUniformVelocity(Dis_xpos, End_xpos, currentT, 300);
obj.setCurrentPos(xpos, obj.getYPos(), obj.getZPos());
obj.getVar("SpinCutter_Attack").set_vector(1,xpos);
}
if(frmIndex == end_frmIndex + 6){
obj.getVar("SpinCutter_Attack_HitTime").clear_ct_vector();
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 11);
pChrOBJ.addSetStatePacket(STATE_SPINCUTTER, pIntVec, STATE_PRIORITY_IGNORE_FORCE, false, "");
}
if(frmIndex >= end_frmIndex + 7){
local Dis_xpos = obj.getVar("SpinCutter_Attack").get_vector(1);
local End_xpos = sq_GetDistancePos(Dis_xpos, obj.getDirection(), -350);
local xpos = sq_GetUniformVelocity(Dis_xpos, End_xpos, currentT, 300);
obj.setCurrentPos(xpos, obj.getYPos(), obj.getZPos());
}
if(state != STATE_SPINCUTTER){
sq_SendDestroyPacketPassiveObject(obj);
}
}
break;
case SKILL_PRIEST_RIGHTEOUSDEVILIZE:
switch(subtype){
case 1:
local frameIndex = sq_GetCurrentFrameIndex(obj);
local time = sq_GetObjectTime(obj);
local currentAni = obj.getCurrentAnimation();
if(frameIndex < 21){
if(frameIndex > 13){
local fireT = currentAni.getDelaySum(14, 21);
local currentT = time - currentAni.getDelaySum(0, 13);
local vx = sq_GetUniformVelocity(obj.getVar("custom").getInt(3), obj.getVar("custom").getInt(2), currentT, fireT);
sq_setCurrentAxisPos(obj, 0, vx);
}
else{
local fireT = currentAni.getDelaySum(0, 13);
local vx = sq_GetUniformVelocity(0, obj.getVar("custom").getInt(1), time, fireT);
local dstX = sq_GetDistancePos(obj.getVar("custom").getInt(2), obj.getDirection(), vx);
sq_setCurrentAxisPos(obj, 0, dstX);
obj.getVar("custom").setInt(3, dstX);
}
}
break;
}
break;
}
break;
}
}
function findTheStrongestTarget(obj)
{
obj.getVar("Tar_boss").clear_obj_vector();
obj.getVar("Tar_named").clear_obj_vector();
obj.getVar("Tar_normal").clear_obj_vector();
obj.getVar("tar").clear_obj_vector();
local objectManager = obj.getObjectManager();//得到對象管理器
for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){
local object = objectManager.getCollisionObject(i);//得到控制類對象
if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object)){
local activeObj = sq_GetCNRDObjectToActiveObject(object);
if(sq_IsBoss(activeObj)){
obj.getVar("Tar_boss").push_obj_vector(activeObj);
continue;
}
else if(sq_IsNamed(activeObj)){
obj.getVar("Tar_named").push_obj_vector(activeObj);
continue;
}
else{
obj.getVar("Tar_normal").push_obj_vector(activeObj);
continue;
}
}
}
local bossSize = obj.getVar("Tar_boss").get_obj_vector_size();
local namedSize = obj.getVar("Tar_named").get_obj_vector_size();
local normalSize = obj.getVar("Tar_normal").get_obj_vector_size();
if(bossSize > 0){
for(local i = 0; i < bossSize; i++){
local targetObj = obj.getVar("Tar_boss").get_obj_vector(i);
if(targetObj) obj.getVar("tar").push_obj_vector(targetObj);
}
}
if(namedSize > 0){
for(local i = 0; i < namedSize; i++){
local targetObj = obj.getVar("Tar_named").get_obj_vector(i);
if(targetObj) obj.getVar("tar").push_obj_vector(targetObj);
}
}
if(normalSize > 0){
for(local i = 0; i < normalSize; i++){
local targetObj = obj.getVar("Tar_normal").get_obj_vector(i);
if(targetObj) obj.getVar("tar").push_obj_vector(targetObj);
}
}
}
//驱魔
function onAttack_Priest_3exorcist(obj, damager, bounding_box, is_stuck)
{
if(is_stuck) return;
if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return;
if(obj.getVar("vermilionbirdtalismanBool").getBool(0)){
obj.getVar("vermilionbirdtalismanBool").setBool(0, false);
local size = obj.getVar("VermilionbirdtalismanObj").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local aObj = obj.getVar("VermilionbirdtalismanObj").get_obj_vector(i);
if(aObj){
local colObj = sq_GetCNRDObjectToCollisionObject(aObj);
if(colObj.getState() != 21) colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
}
}
}
local activeObj = sq_GetCNRDObjectToActiveObject(damager);
local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD);
if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000;
print("bonusRate = "+ bonusRate);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_VERMILIONBIRDTALISMAN, -1, 2, bonusRate);
local lifeTime = sq_GetIntData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 3);
local hitTime = sq_GetIntData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 5);
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 2);
createSkillPassive_Priest_3exorcist_bykk(obj,activeObj,643005,0,0,50,sq_GetDirection(obj),2,totalDamage,lifeTime,hitTime,sizeRate,0,0,0);
}
}
function createOnlyDrawObject_Priest_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_Priest_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_Priest_3exorcist_bykk(obj,passiveObj,objnum,x,y,z,direction,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();
}
local skillIndex = 0;
local subtype = 0;
switch(objnum){
case 643001: skillIndex = SKILL_BYKK_CHAKRAOFGOD; subtype = 1; break;
case 643002: skillIndex = SKILL_BYKK_CHAKRAOFGOD; subtype = 2; break;
case 643003: skillIndex = SKILL_BYKK_ENTERINGNIRVANA; subtype = 1; break;
case 643004: skillIndex = SKILL_BYKK_VERMILIONBIRDTALISMAN; subtype = 1; break;
case 643005: skillIndex = SKILL_BYKK_VERMILIONBIRDTALISMAN; subtype = 2; break;
case 643006: skillIndex = SKILL_BYKK_VERMILIONBIRDTALISMAN; subtype = 3; break;
case 643007: skillIndex = SKILL_BYKK_BAEKHO; subtype = 1; break;
case 643008: skillIndex = SKILL_BYKK_BAEKHO; subtype = 2; break;
case 643009: skillIndex = SKILL_BYKK_THUNDERBOLTTALISMAN; subtype = 1; break;
case 643010: skillIndex = SKILL_BYKK_THUNDERBOLTTALISMAN; subtype = 2; break;
case 643011: skillIndex = SKILL_BYKK_HYUNMOO; subtype = 1; break;
case 643012: skillIndex = SKILL_BYKK_SHIKIGAMI; subtype = 1; break;
case 643013: skillIndex = SKILL_BYKK_DESTROYSPIRITTALISMAN; subtype = 1; break;
case 643014: skillIndex = SKILL_BYKK_DESTROYSPIRITTALISMAN; subtype = 2; break;
case 643015: skillIndex = SKILL_BYKK_DESTROYSPIRITTALISMAN; subtype = 3; break;
case 643016: skillIndex = SKILL_BYKK_ANTIAIRUPPER; subtype = 1; break;
case 643017: skillIndex = SKILL_BYKK_ANTIAIRUPPER; subtype = 2; break;
case 643018: skillIndex = SKILL_BYKK_GROUNDCRASH; subtype = 1; break;
case 643019: skillIndex = SKILL_BYKK_CUTTINGDARKNESS; subtype = 1; break;
case 643020: skillIndex = SKILL_BYKK_THROWWEAPON; subtype = 1; break;
case 643021: skillIndex = SKILL_BYKK_REPEATEDSMASH; subtype = 1; break;
case 643022: skillIndex = SKILL_BYKK_ATOMICSMASH; subtype = 1; break;
case 643023: skillIndex = SKILL_BYKK_DANGEROUSSCALE; subtype = 1; break;
case 643024: skillIndex = SKILL_BYKK_THEBEST7HIT; subtype = 1; break;
case 643025: skillIndex = SKILL_BYKK_THEBEST7HIT; subtype = 2; break;
case 643026: skillIndex = SKILL_BYKK_PENTAGON; subtype = 1; break;
case 643027: skillIndex = SKILL_BYKK_PENTAGON; subtype = 2; break;
case 643028: skillIndex = SKILL_BYKK_PENTAGON; subtype = 3; break;
case 643029: skillIndex = SKILL_BYKK_PENTAGON; subtype = 4; break;
case 643030: skillIndex = SKILL_BYKK_PENTAGON; subtype = 5; break;
case 643031: skillIndex = SKILL_BYKK_PENTAGON; subtype = 6; break;
case 643032: skillIndex = SKILL_BYKK_PENTAGON; subtype = 7; break;
case 643033: skillIndex = SKILL_BYKK_PENTAGON; subtype = 8; break;
case 643034: skillIndex = SKILL_BYKK_PENTAGON; subtype = 9; break;
case 643035: skillIndex = SKILL_BYKK_FOURGODPOWER; subtype = 1; break;
case 643036: skillIndex = SKILL_BYKK_FOURGODPOWER; subtype = 2; break;
case 643037: skillIndex = SKILL_BYKK_FOURGODPOWER; subtype = 3; break;
case 643038: skillIndex = SKILL_BYKK_FOURGODPOWER; subtype = 4; break;
case 643039: skillIndex = SKILL_BYKK_BLUEDRAGON; subtype = 1; break;
case 643040: skillIndex = SKILL_BYKK_ADVANCEDDRAGON; subtype = 1; break;
}
if(skillIndex == 0 && subtype == 0) return;
sq_BinaryStartWrite();
sq_BinaryWriteDword(3);
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, PASSIVEOBJECT_PRIESTBYKK, 0, destX_01 + x, destY_01 + y, z, direction);
}
function getAttackCancelStartFrameSize_Priest_3exorcist(obj)
{
return 2;
}
function getAttackCancelStartFrame_Priest_3exorcist(obj, Index)
{
if(Index == 0) return 7;
else if(Index == 1) return 6;
else if(Index == 2) return 6;
}
function onAttack_priest_attack_3exorcist(obj, damager, boundingBox, isStuck)
{
if(isStuck) return;
}
function onAfterSetState_priest_attack_3exorcist(obj, state, datas, isResetTimer)
{
if(!obj) return;
local attackIndex = obj.getAttackIndex();
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){
local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){
switch(attackIndex){
case 0:
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/exorcistattack1_attack.ani"), 0, 0);
break;
case 1:
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/exorcistattack2_attack2.ani"), 0, 0);
break;
case 2:
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/exorcistattack3_attack3.ani"), 0, 0);
break;
}
}
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){
switch(attackIndex){
case 0:
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/exorcistattack1_attack.ani"), 0, 0);
break;
case 1:
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/exorcistattack2_attack2.ani"), 0, 0);
break;
case 2:
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/exorcistattack3_attack3.ani"), 0, 0);
break;
}
}
}
}
function onKeyFrameFlag_priest_attack_3exorcist(obj, flagIndex)
{
if(!obj) return;
// print("flagIndex = "+flagIndex);
switch(flagIndex){
case 1000:
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){
// print("test2222");
local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
local bonusRate = sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 0, sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD));
bonusRate = bonusRate.tofloat() / 100.0;
local totalDamage = obj.sq_GetBonusRateWithPassive(174, -1, 0, bonusRate) + 100;
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON);
local sizeRate = sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 2, skillLevel);
if(skillLevel > 0) createSkillPassive_Priest_3exorcist_bykk(obj,obj,643017,150,0,0,sq_GetDirection(obj),totalDamage,sizeRate,0,0,0,0,0,0);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)) createSkillPassive_Priest_3exorcist_bykk(obj,obj,643001,125,0,30,sq_GetDirection(obj),totalDamage,1,0,0,0,0,0,0);
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643001,125,0,30,sq_GetDirection(obj),totalDamage,0,0,0,0,0,0,0);
if(sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT) > 0 && sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON) > 0){
setStageofhermitAppendage(obj);
}
}
}
break;
}
return true;
}
//脉轮 : 圣光
function checkExecutableSkill_Chakraofcalmness(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CHAKRAOFCALMNESS);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(SKILL_BYKK_CHAKRAOFCALMNESS);
obj.sq_AddSetStatePacket(STATE_BYKK_CHAKRAOFCALMNESS, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Chakraofcalmness(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Chakraofcalmness(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);
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(false);
local skillIndex = obj.sq_GetVectorData(datas, 1);
obj.getVar("mailunSet").setInt(0, skillIndex);
local skill_level = sq_GetSkillLevel(obj, skillIndex);
local castTime = sq_GetCastTime(obj, skillIndex, skill_level);
local timeRate = delaySum * 100 / castTime;
print("timeRate = "+timeRate);
obj.getVar("mailunSet").setInt(1, timeRate);
currentAni.setSpeedRate(timeRate.tofloat());
sq_StartDrawCastGauge(obj, castTime, true);//开始读条
switch(skillIndex){
case SKILL_BYKK_CHAKRAOFCALMNESS:
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofcalmness/90lvrosary/chakracasting_f.ani"), 0, 0);
else obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofcalmness/cast.ani"), 0, 0);
break;
case SKILL_BYKK_CHAKRAOFPASSION:
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofpassion/90lvrosary/chakracasting_f.ani"), 0, 0);
else obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofpassion/cast.ani"), 0, 0);
break;
}
break;
case 1:
sq_EndDrawCastGauge(obj);
local Ani = obj.sq_GetThrowShootAni(1);
obj.setCurrentAnimation(Ani);
local speed = 500 * obj.getVar("mailunSet").getInt(1) / 100;
obj.setTimeEvent(1, speed, 1, false);
local skillIndex = obj.getVar("mailunSet").getInt(0);
switch(skillIndex){
case SKILL_BYKK_CHAKRAOFCALMNESS:
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) <= 0) sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/start.ani", 0, 0, 0);
break;
case SKILL_BYKK_CHAKRAOFPASSION:
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) <= 0) sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/chakraofpassion/start.ani", 0, 0, 0);
break;
}
local skillLevel = sq_GetSkillLevel(obj, skillIndex);
local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath1);
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath2);
switch(skillIndex){
case SKILL_BYKK_CHAKRAOFCALMNESS:
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skillIndex, false, apdPath1, true);
local buffTime = sq_GetLevelData(obj, skillIndex, 0, skillLevel);
// local mgAttack = sq_GetLevelData(obj, skillIndex, 1, skillLevel);
local castTime = sq_GetLevelData(obj, skillIndex, 2, skillLevel);
if(buffTime > 0) AddAppendage.sq_SetValidTime(buffTime);
AddAppendage.setBuffIconImage(46);
AddAppendage.setEnableIsBuff(true);
AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), skillIndex, skillLevel);
CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true);
obj.getVar("element_kk").setInt(1, 100);
local change_appendage = AddAppendage.sq_getChangeStatus("chakraofcalmness");
if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("chakraofcalmness",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
if(change_appendage){
change_appendage.clearParameter();
// change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (mgAttack).tofloat() * 0.1);
change_appendage.addParameter(CHANGE_STATUS_TYPE_CAST_SPEED, false, (castTime).tofloat());
}
AddAppendage.sq_DeleteEffectFront();
AddAppendage.sq_DeleteEffectBack();
local chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD);
if(false){//chakraofgodLevel > 0
AddAppendage.sq_AddEffectBack("character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/90lvrosary/chakraofcalmnessroop_03.ani");
AddAppendage.sq_AddEffectBack("character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/90lvrosary/chakraofcalmnessroop_04.ani");
AddAppendage.sq_AddEffectFront("character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/90lvrosary/chakraofcalmnessroop_01.ani");
AddAppendage.sq_AddEffectFront("character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/90lvrosary/chakraofcalmnessroop_02.ani");
}
else{
AddAppendage.sq_AddEffectFront("character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/front-dodge.ani");
AddAppendage.sq_AddEffectFront("character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/front-glow.ani");
AddAppendage.sq_AddEffectFront("character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/front-normal.ani");
AddAppendage.sq_AddEffectBack("character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/back-dodge.ani");
AddAppendage.sq_AddEffectBack("character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/back-glow.ani");
AddAppendage.sq_AddEffectBack("character/priest/effect/animation/3exorcist_bykk/chakraofcalmness/back-normal.ani");
}
setSkillBonusRate_3Exorcist_bykk(obj);
obj.sq_PlaySound("PR_CHA_COLD");
break;
case SKILL_BYKK_CHAKRAOFPASSION:
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skillIndex, false, apdPath2, true);
local buffTime = sq_GetLevelData(obj, skillIndex, 0, skillLevel);
// local phAttack = sq_GetLevelData(obj, skillIndex, 1, skillLevel);
local stuckRate = sq_GetLevelData(obj, skillIndex, 2, skillLevel);
local hitReRate = sq_GetLevelData(obj, skillIndex, 3, skillLevel);
if(buffTime > 0) AddAppendage.sq_SetValidTime(buffTime);
AddAppendage.setBuffIconImage(47);
AddAppendage.setEnableIsBuff(true);
AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), skillIndex, skillLevel);
CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true);
obj.getVar("element_kk").setInt(0, 100);
local change_appendage = AddAppendage.sq_getChangeStatus("chakraofcalmness");
if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("chakraofcalmness",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
if(change_appendage){
change_appendage.clearParameter();
// change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (phAttack).tofloat() * 0.1);
change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK, false, (stuckRate).tofloat() * -0.1);
change_appendage.addParameter(CHANGE_STATUS_TYPE_RIGIDITY, false, (hitReRate).tofloat());
}
AddAppendage.sq_DeleteEffectFront();
AddAppendage.sq_DeleteEffectBack();
local chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD);
if(false){//chakraofgodLevel > 0
AddAppendage.sq_AddEffectBack("character/priest/effect/animation/3exorcist_bykk/chakraofpassion/90lvrosary/chakraofpassionroop_03.ani");
AddAppendage.sq_AddEffectBack("character/priest/effect/animation/3exorcist_bykk/chakraofpassion/90lvrosary/chakraofpassionroop_04.ani");
AddAppendage.sq_AddEffectFront("character/priest/effect/animation/3exorcist_bykk/chakraofpassion/90lvrosary/chakraofpassionroop_01.ani");
AddAppendage.sq_AddEffectFront("character/priest/effect/animation/3exorcist_bykk/chakraofpassion/90lvrosary/chakraofpassionroop_02.ani");
}
else{
AddAppendage.sq_AddEffectBack("character/priest/effect/animation/3exorcist_bykk/chakraofpassion/back-dodge.ani");
AddAppendage.sq_AddEffectBack("character/priest/effect/animation/3exorcist_bykk/chakraofpassion/back-glow.ani");
AddAppendage.sq_AddEffectBack("character/priest/effect/animation/3exorcist_bykk/chakraofpassion/back-normal.ani");
AddAppendage.sq_AddEffectFront("character/priest/effect/animation/3exorcist_bykk/chakraofpassion/front-dodge.ani");
AddAppendage.sq_AddEffectFront("character/priest/effect/animation/3exorcist_bykk/chakraofpassion/front-glow.ani");
AddAppendage.sq_AddEffectFront("character/priest/effect/animation/3exorcist_bykk/chakraofpassion/front-normal.ani");
}
setSkillBonusRate_3Exorcist_bykk(obj);
obj.sq_PlaySound("PR_CHA_HOT");
break;
}
break;
}
}
function onEndCurrentAni_Chakraofcalmness(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_CHAKRAOFCALMNESS, STATE_PRIORITY_AUTO, true);
break;
case 0:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onTimeEvent_Chakraofcalmness(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
if(timeEventIndex == 1){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
}
}
function onEndState_Chakraofcalmness(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_BYKK_CHAKRAOFCALMNESS){
sq_EndDrawCastGauge(obj);
}
}
function drawAppend_appendage_chakraofcalmness(appendage, isOver, x, y, isFlip)
{
if(!appendage) return;
local parentObj = appendage.getParent();
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
if (!obj || obj.getState() == STATE_DIE) {
appendage.setValid(false);
return;
}
}
function drawAppend_appendage_chakraofpassion(appendage, isOver, x, y, isFlip)
{
local parentObj = appendage.getParent();
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
if (!obj || obj.getState() == STATE_DIE) {
appendage.setValid(false);
return;
}
}
//脉轮 : 烈焰
function checkExecutableSkill_Chakraofpassion(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CHAKRAOFPASSION);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(SKILL_BYKK_CHAKRAOFPASSION);
obj.sq_AddSetStatePacket(STATE_BYKK_CHAKRAOFCALMNESS, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Chakraofpassion(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Chakraofpassion(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(0);
break;
}
}
function onEndCurrentAni_Chakraofpassion(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 checkExecutableSkill_Enteringnirvana(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_ENTERINGNIRVANA);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_ENTERINGNIRVANA, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Enteringnirvana(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Enteringnirvana(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);
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(false);
local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_ENTERINGNIRVANA);
local castTime = sq_GetCastTime(obj, SKILL_BYKK_ENTERINGNIRVANA, skill_level);
local timeRate = delaySum * 100 / castTime;
print("timeRate = "+timeRate);
currentAni.setSpeedRate(timeRate.tofloat());
sq_StartDrawCastGauge(obj, castTime, true);//开始读条
obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_ENTERINGNIRVANA);
break;
case 1:
sq_EndDrawCastGauge(obj);
local Ani = obj.sq_GetThrowShootAni(0);
obj.setCurrentAnimation(Ani);
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 speedRate = 8000 / currentAni.getDelaySum(0, 0);
obj.getVar("setEnteringnirvana").setInt(0, speedRate);
local delaySum = currentAni.getDelaySum(0, 2);
obj.setTimeEvent(1, delaySum, 1, false);
if(sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT) > 0 && CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut")){
setStageofhermitAppendage(obj);
}
obj.sq_PlaySound("BUDD_LIGHTBALL");
}
}
function onEndCurrentAni_Enteringnirvana(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_ENTERINGNIRVANA, STATE_PRIORITY_AUTO, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_Enteringnirvana(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_Enteringnirvana(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_Enteringnirvana(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 1:
local hitMax = sq_GetIntData(obj, SKILL_BYKK_ENTERINGNIRVANA, 3);
local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD);
if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ENTERINGNIRVANA, -1, 0, bonusRate);
local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ENTERINGNIRVANA, -1, 12, 1.0) + 100;
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_ENTERINGNIRVANA);
local prob = sq_GetLevelData(obj, SKILL_BYKK_ENTERINGNIRVANA, 1, skillLevel);
local time = sq_GetLevelData(obj, SKILL_BYKK_ENTERINGNIRVANA, 3, skillLevel);
local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_ENTERINGNIRVANA, 4, skillLevel);
local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_ENTERINGNIRVANA, 5, skillLevel);
local subtype = 0;
local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)) subtype = 1;
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)) subtype = 2;
local offSetX = 50;
if(obj.isDownSkillLastKey()){
local speedRate = obj.getVar("setEnteringnirvana").getInt(0);
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/enteringnirvana/talisman1.ani", 0, 1, 61);
local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/enteringnirvana/talisman2.ani", 0, 0, 60);
local pAni = pooledObj.getCurrentAnimation();
local pAni2 = pooledObj2.getCurrentAnimation();
pAni.setSpeedRate(speedRate.tofloat());
pAni2.setSpeedRate(speedRate.tofloat());
offSetX = 150;
}
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643003,offSetX,0,70,sq_GetDirection(obj),hitMax,totalDamage,sizeRate,prob,time,moveSpeed,attackSpeed,subtype);
break;
}
}
function onEndState_Enteringnirvana(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_BYKK_ENTERINGNIRVANA)
sq_EndDrawCastGauge(obj);
}
//朱雀符
function checkExecutableSkill_Vermilionbirdtalisman(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_VERMILIONBIRDTALISMAN);
if (isUse){
if(sq_GetSkillLevel(obj, SKILL_BYKK_GODOFEXORCISM) > 0 && CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/priest/3exorcist_bykk/ap_chakraofpassion.nut")){
obj.startSkillCoolTime(SKILL_BYKK_VERMILIONBIRDTALISMAN, sq_GetSkillLevel(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN), -1);
local size = obj.getVar("VermilionbirdtalismanObj").get_obj_vector_size();
if(size <= 0){
obj.getVar("VermilionbirdtalismanObj").clear_obj_vector();
obj.getVar("vermilionbirdtalismanBool").setBool(0, true);
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643005,-50,0,100,sq_GetDirection(obj),1,0,0,0,0,0,0,0);
}
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;
}
obj.startSkillCoolTime(SKILL_BYKK_VERMILIONBIRDTALISMAN, sq_GetSkillLevel(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN), -1);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_VERMILIONBIRDTALISMAN, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Vermilionbirdtalisman(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Vermilionbirdtalisman(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);
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(false);
local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN);
local castTime = sq_GetCastTime(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, skill_level);
local timeRate = delaySum * 100 / castTime;
currentAni.setSpeedRate(timeRate.tofloat());
sq_StartDrawCastGauge(obj, castTime, true);//开始读条
break;
case 1:
sq_EndDrawCastGauge(obj);
local Ani = obj.sq_GetThrowShootAni(2);
obj.setCurrentAnimation(Ani);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
break;
}
}
function onEndCurrentAni_Vermilionbirdtalisman(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_VERMILIONBIRDTALISMAN, STATE_PRIORITY_AUTO, true);
break;
case 1:
if(sq_GetSkillLevel(obj, SKILL_BYKK_GODOFEXORCISM) > 0 && CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut")){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
}
break;
}
}
function onProcCon_Vermilionbirdtalisman(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_Vermilionbirdtalisman(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1000:
local delay = sq_GetIntData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 3);
if(sq_GetSkillLevel(obj, SKILL_BYKK_GODOFEXORCISM) <= 0 || !CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut")){
obj.setTimeEvent(1, delay + 500, 1, false);
local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD);
if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000;
print("bonusRate = "+ bonusRate);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_VERMILIONBIRDTALISMAN, -1, 0, bonusRate);
local lifeTime = sq_GetIntData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 3);
local hitTime = sq_GetIntData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 4);
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 2);
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643004,50,0,90,sq_GetDirection(obj),totalDamage,lifeTime,hitTime,sizeRate,0,0,0,0);
}
else{
sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/godofexorcism/godofexorcism_vermilionbirdtalisman_spawn_magic_body.ani", -45, 0, 95);
local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD);
if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000;
print("bonusRate = "+ bonusRate);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_VERMILIONBIRDTALISMAN, -1, 1, bonusRate);
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 2);
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643006,50,0,90,sq_GetDirection(obj),totalDamage,sizeRate,0,0,0,0,0,0);
}
break;
}
return true;
}
function onTimeEvent_Vermilionbirdtalisman(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onEndState_Vermilionbirdtalisman(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_BYKK_VERMILIONBIRDTALISMAN)
sq_EndDrawCastGauge(obj);
}
//式神 : 白虎
function checkExecutableSkill_Baekho(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BAEKHO);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_BAEKHO, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Baekho(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Baekho(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);
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(false);
local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_BAEKHO);
local castTime = sq_GetCastTime(obj, SKILL_BYKK_BAEKHO, skill_level);
local timeRate = delaySum * 100 / castTime;
currentAni.setSpeedRate(timeRate.tofloat());
sq_StartDrawCastGauge(obj, castTime, true);//开始读条
break;
case 1:
sq_EndDrawCastGauge(obj);
local Ani = obj.sq_GetThrowShootAni(2);
obj.setCurrentAnimation(Ani);
obj.sq_PlaySound("R_PR_VO_BEAKHO");
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
if(sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT) > 0 && CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut")){
setStageofhermitAppendage(obj);
}
break;
}
}
function onEndCurrentAni_Baekho(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_BAEKHO, STATE_PRIORITY_AUTO, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_Baekho(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_Baekho(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1000:
local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD);
if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000;
print("bonusRate = "+ bonusRate);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BAEKHO, -1, 0, bonusRate);
local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BAEKHO, -1, 0, 4.4 * bonusRate);
local hitTime = sq_GetIntData(obj, SKILL_BYKK_BAEKHO, 0);
local hitMax = sq_GetIntData(obj, SKILL_BYKK_BAEKHO, 1);
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_BAEKHO, 2);
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){
hitTime = hitTime - sq_GetIntData(obj, SKILL_BYKK_CHAKRAOFGOD, 4);
sizeRate = sizeRate * (1000 + sq_GetIntData(obj, SKILL_BYKK_CHAKRAOFGOD, 5)) / 1000;
}
// print("hitTime = "+hitTime);
// print("hitMax = "+hitMax);
// print("sizeRate = "+sizeRate);
local apdSet = 0;
local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)) apdSet = 1;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)) apdSet = 2;
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643007,50,0,0,sq_GetDirection(obj),totalDamage,totalDamageExp,hitTime,hitMax,sizeRate,apdSet,0,0);
break;
}
return true;
}
function onTimeEvent_Baekho(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_Baekho(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_BYKK_BAEKHO)
sq_EndDrawCastGauge(obj);
}
//落雷符
function checkExecutableSkill_Thunderbolttalisman(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_THUNDERBOLTTALISMAN);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_THUNDERBOLTTALISMAN, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Thunderbolttalisman(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Thunderbolttalisman(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);
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(false);
local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_THUNDERBOLTTALISMAN);
local castTime = sq_GetCastTime(obj, SKILL_BYKK_THUNDERBOLTTALISMAN, skill_level);
local timeRate = delaySum * 100 / castTime;
currentAni.setSpeedRate(timeRate.tofloat());
sq_StartDrawCastGauge(obj, castTime, true);//开始读条
break;
case 1:
sq_EndDrawCastGauge(obj);
local Ani = obj.sq_GetThrowShootAni(2);
obj.setCurrentAnimation(Ani);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
if(sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT) > 0 && CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut")){
setStageofhermitAppendage(obj);
}
obj.sq_PlaySound("PR_LIGHT");
break;
}
}
function onEndCurrentAni_Thunderbolttalisman(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_THUNDERBOLTTALISMAN, STATE_PRIORITY_AUTO, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_Thunderbolttalisman(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_Thunderbolttalisman(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1000:
local hitTime = sq_GetIntData(obj, SKILL_BYKK_THUNDERBOLTTALISMAN, 2);
local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD);
if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000;
print("bonusRate = "+ bonusRate);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THUNDERBOLTTALISMAN, -1, 1, bonusRate);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_THUNDERBOLTTALISMAN);
local lifeTime = sq_GetLevelData(obj, SKILL_BYKK_THUNDERBOLTTALISMAN, 0, skillLevel);
local prob = sq_GetLevelData(obj, SKILL_BYKK_THUNDERBOLTTALISMAN, 0, skillLevel);
local time = sq_GetLevelData(obj, SKILL_BYKK_THUNDERBOLTTALISMAN, 0, skillLevel);
local level = sq_GetSkillLevel(obj, 174) + 10;
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_THUNDERBOLTTALISMAN, 1);
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0) sizeRate = sizeRate * (100 + sq_GetIntData(obj, SKILL_BYKK_CHAKRAOFGOD, 8)) / 100;
local isTalisman = 0;
if(sq_GetIntData(obj, SKILL_BYKK_THUNDERBOLTTALISMAN, 15) > 0) isTalisman = 1;
print("isTalisman = "+isTalisman);
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643009,50,0,0,sq_GetDirection(obj),hitTime,totalDamage,lifeTime,prob,time,level,sizeRate,isTalisman);
break;
}
return true;
}
function onTimeEvent_Thunderbolttalisman(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_Thunderbolttalisman(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_BYKK_THUNDERBOLTTALISMAN)
sq_EndDrawCastGauge(obj);
}
//式神 : 玄武
function checkExecutableSkill_Hyunmoo(obj)
{
if (!obj) return false;
local hyunmooObj = obj.getVar("hyunmooObj").get_obj_vector(0);
if (hyunmooObj){
local state = obj.getState();
if(state == 0 || state == 14){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true);
}
return false;
}
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HYUNMOO);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_HYUNMOO, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Hyunmoo(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Hyunmoo(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);
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(false);
local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_HYUNMOO);
local castTime = sq_GetCastTime(obj, SKILL_BYKK_HYUNMOO, skill_level);
local timeRate = delaySum * 100 / castTime;
currentAni.setSpeedRate(timeRate.tofloat());
sq_StartDrawCastGauge(obj, castTime, true);//开始读条
break;
case 1:
sq_EndDrawCastGauge(obj);
local Ani = obj.sq_GetThrowShootAni(1);
obj.setCurrentAnimation(Ani);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
obj.sq_PlaySound("PR_HYUNMU");
obj.getVar("hyunmooObj").clear_obj_vector();
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_HYUNMOO, 1);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_HYUNMOO);
local holdTime = sq_GetLevelData(obj, SKILL_BYKK_HYUNMOO, 1, skillLevel);
local lifeTime = sq_GetLevelData(obj, SKILL_BYKK_HYUNMOO, 0, skillLevel);
local mpRestore = sq_GetLevelData(obj, SKILL_BYKK_HYUNMOO, 3, skillLevel);
local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_HYUNMOO, 8, skillLevel);
local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_HYUNMOO, 9, skillLevel);
local changeRate = sq_GetIntData(obj, SKILL_BYKK_HYUNMOO, 6);
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643011,-50,0,0,sq_GetDirection(obj),0,sizeRate,holdTime,lifeTime,mpRestore,attackSpeed,moveSpeed,changeRate);
obj.endSkillCoolTime(SKILL_BYKK_HYUNMOO);
break;
}
}
function onEndCurrentAni_Hyunmoo(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_HYUNMOO, STATE_PRIORITY_AUTO, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onEndState_Hyunmoo(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_BYKK_HYUNMOO)
sq_EndDrawCastGauge(obj);
}
function proc_appendage_hyunmoobuff(appendage)
{
if(!appendage) return;
local parentObj = appendage.getParent();
if(!parentObj || parentObj.getState() == STATE_DIE){
appendage.setValid(false);
return;
}
local sourceObj = appendage.getSource();
local distance = appendage.getVar("custom").getInt(0);
local xPos = sq_GetXPos(sourceObj), yPos = sq_GetYPos(sourceObj);
if(sq_GetDistance(xPos, yPos, parentObj.getXPos(), parentObj.getYPos(), true) > distance / 2){
appendage.setValid(false);
return;
}
}
function proc_appendage_hyunmoohold(appendage)
{
if(!appendage) return;
local parentObj = appendage.getParent();
local activeObj = sq_GetCNRDObjectToActiveObject(parentObj);
if(!activeObj || activeObj.getState() == STATE_DIE || activeObj.getHp() <= 0){
appendage.setValid(false);
return;
}
sq_setCurrentAxisPos(activeObj, 0, appendage.getVar("custom").getInt(0));
sq_setCurrentAxisPos(activeObj, 1, appendage.getVar("custom").getInt(1));
sq_setCurrentAxisPos(activeObj, 2, appendage.getVar("custom").getInt(2));
local sourceObj = appendage.getSource();
local colObj = sq_GetCNRDObjectToCollisionObject(sourceObj);
if(colObj.getState() != 24 && colObj.getState() != 23){
appendage.setValid(false);
return;
}
}
function procSkill_Hyunmoo(obj)
{
local hyunmooObj = obj.getVar("hyunmooObj").get_obj_vector(0);
if(!sq_GetSkill(obj, SKILL_BYKK_HYUNMOO).isInCoolTime() && hyunmooObj){
obj.setSkillCommandEnable(SKILL_BYKK_HYUNMOO,true);
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_HYUNMOO);
if(b_useskill != -1){
obj.startSkillCoolTime(SKILL_BYKK_HYUNMOO, sq_GetSkillLevel(obj, SKILL_BYKK_HYUNMOO), -1);
local colObj = sq_GetCNRDObjectToCollisionObject(hyunmooObj);
if(colObj.getState() == 21 || colObj.getState() == 22){
local distance = sq_GetIntData(obj, SKILL_BYKK_HYUNMOO, 1);
local xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj);
obj.getVar("HyunmooTar_boss").clear_obj_vector();
obj.getVar("HyunmooTar_named").clear_obj_vector();
obj.getVar("HyunmooTar_normal").clear_obj_vector();
obj.getVar("HyunmooTar").clear_obj_vector();
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_GetDistance(xPos, yPos, object.getXPos(), object.getYPos(), true) <= distance / 2){
local activeObj = sq_GetCNRDObjectToActiveObject(object);
if(sq_IsBoss(activeObj)){
obj.getVar("HyunmooTar_boss").push_obj_vector(activeObj);
continue;
}
else if(sq_IsNamed(activeObj)){
obj.getVar("HyunmooTar_named").push_obj_vector(activeObj);
continue;
}
else{
obj.getVar("HyunmooTar_normal").push_obj_vector(activeObj);
continue;
}
}
}
local bossSize = obj.getVar("HyunmooTar_boss").get_obj_vector_size();
local namedSize = obj.getVar("HyunmooTar_named").get_obj_vector_size();
local normalSize = obj.getVar("HyunmooTar_normal").get_obj_vector_size();
if(bossSize > 0){
for(local i = 0; i < bossSize; i++){
local targetObj = obj.getVar("HyunmooTar_boss").get_obj_vector(i);
if(targetObj) obj.getVar("HyunmooTar").push_obj_vector(targetObj);
}
}
if(namedSize > 0){
for(local i = 0; i < namedSize; i++){
local targetObj = obj.getVar("HyunmooTar_named").get_obj_vector(i);
if(targetObj) obj.getVar("HyunmooTar").push_obj_vector(targetObj);
}
}
if(normalSize > 0){
for(local i = 0; i < normalSize; i++){
local targetObj = obj.getVar("HyunmooTar_normal").get_obj_vector(i);
if(targetObj) obj.getVar("HyunmooTar").push_obj_vector(targetObj);
}
}
if(obj.getVar("HyunmooTar").get_obj_vector_size() > 0){
local targetObj = obj.getVar("HyunmooTar").get_obj_vector(0);
colObj.getVar("atkTarget").clear_obj_vector();
colObj.getVar("atkTarget").push_obj_vector(targetObj);
colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");
}
}
else if(colObj.getState() == 24){
colObj.stopTimeEvent(3);
colObj.setTimeEvent(3, 1000, 1, true);
}
}
}
}
//式神·殇
function checkExecutableSkill_Shikigami(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SHIKIGAMI);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_SHIKIGAMI, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Shikigami(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Shikigami(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);
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(false);
local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_SHIKIGAMI);
local castTime = sq_GetCastTime(obj, SKILL_BYKK_SHIKIGAMI, skill_level) *0+100;
local timeRate = delaySum * 100 / castTime;
currentAni.setSpeedRate(timeRate.tofloat());
sq_StartDrawCastGauge(obj, castTime, true);//开始读条
break;
case 1:
sq_EndDrawCastGauge(obj);
local Ani = obj.sq_GetThrowShootAni(2);
obj.setCurrentAnimation(Ani);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD);
if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000;
print("bonusRate = "+ bonusRate);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHIKIGAMI, -1, 0, bonusRate);
local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHIKIGAMI, -1, 1, bonusRate);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SHIKIGAMI);
local hitTime = sq_GetIntData(obj, SKILL_BYKK_SHIKIGAMI, 2);
local lifeTime = sq_GetIntData(obj, SKILL_BYKK_SHIKIGAMI, 3);
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_SHIKIGAMI, 7);
local sizeRateExp = sq_GetIntData(obj, SKILL_BYKK_SHIKIGAMI, 6);
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643012,-75,-1,200,sq_GetDirection(obj),1,totalDamage,totalDamageExp,hitTime,lifeTime,sizeRate,sizeRateExp,0);
local apdPath = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)){
obj.setTimeEvent(1, 50, 1, false);
}
else{
obj.setTimeEvent(1, lifeTime + 800, 1, false);
obj.getVar("shikigamiBool").setBool(0, false);
obj.getVar("shikigamiObj").clear_obj_vector();
}
break;
}
}
function onEndCurrentAni_Shikigami(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_SHIKIGAMI, STATE_PRIORITY_AUTO, true);
break;
case 1:
// obj.sq_IntVectClear();
// obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_Shikigami(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
local apdPath = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) return;
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
if(sq_IsEnterCommand(obj, E_JUMP_COMMAND) && obj.getVar("shikigamiBool").getBool(0) == false){
obj.getVar("shikigamiBool").setBool(0, true);
obj.setTimeEvent(2, 50, 1, true);
}
break;
}
}
function onKeyFrameFlag_Shikigami(obj, flagIndex)
{
if(!obj) return false;
return true;
}
function onTimeEvent_Shikigami(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
case 2:
local size = obj.getVar("shikigamiObj").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local atkObj = obj.getVar("shikigamiObj").get_obj_vector(0);
if(atkObj){
local colObj = sq_GetCNRDObjectToCollisionObject(atkObj);
colObj.setTimeEvent(4, 1000, 1, true);
}
}
}
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onEndState_Shikigami(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_BYKK_SHIKIGAMI)
sq_EndDrawCastGauge(obj);
}
//灭魂符
function checkExecutableSkill_Destroyspirittalisman(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DESTROYSPIRITTALISMAN);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_DESTROYSPIRITTALISMAN, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Destroyspirittalisman(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Destroyspirittalisman(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(PRANI_BYKK_DESTROYSPIRITTALISMAN);
break;
}
}
function onEndCurrentAni_Destroyspirittalisman(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_Destroyspirittalisman(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_Destroyspirittalisman(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1:
local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD);
if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000;
print("bonusRate = "+ bonusRate);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DESTROYSPIRITTALISMAN, -1, 1, bonusRate);
local lifeTime = sq_GetIntData(obj, SKILL_BYKK_DESTROYSPIRITTALISMAN, 0);
local hitTime = sq_GetIntData(obj, SKILL_BYKK_DESTROYSPIRITTALISMAN, 23);
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_DESTROYSPIRITTALISMAN, 28);
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643013,50,0,90,sq_GetDirection(obj),0,totalDamage,lifeTime,hitTime,sizeRate,0,0,0);
break;
}
return true;
}
function onTimeEvent_Destroyspirittalisman(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
}
function onEndState_Destroyspirittalisman(obj, new_state)
{
if(!obj) return;
}
//空斩打
function checkExecutableSkill_Antiairupper(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_ANTIAIRUPPER);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_ANTIAIRUPPER, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Antiairupper(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Antiairupper(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(PRANI_BYKK_ANTIAIRUPPER);
obj.sq_PlaySound("PR_ANTIAIR");
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local bonusRate = 1.0;
local upForceSet = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ANTIAIRUPPER, -1, 1, 0.75) + 100;
local isCharge = 0;
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON) > 0) isCharge = 1;
if(isCharge > 0){
obj.getVar("isCharge").setBool(0, true);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON);
bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 5, skillLevel).tofloat() / 100.0;
upForceSet = upForceSet * (100 + sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 6, skillLevel)) / 100;
}
local totalDamage = obj.sq_GetBonusRateWithPassive(174, -1, 0, bonusRate) + 100;
obj.getVar("Charge").setInt(0, totalDamage);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 2));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
setChakraAttackInfo(obj);
local attackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttacknUpForce(attackInfo, upForceSet);
if(isCharge > 0){
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(0, 1);
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/chargeweapon.ani", -75, 1, 15);
local pAni = pooledObj.getCurrentAnimation();
local speedRate = pAni.getDelaySum(false) * 100 / delay;
pAni.setSpeedRate(speedRate.tofloat());
}
break;
}
}
function onEndCurrentAni_Antiairupper(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 onKeyFrameFlag_Antiairupper(obj, flagIndex)
{
if(!obj) return false;
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/antiairupper/front.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/antiairupper/back.ani"), 0, 0);
if(obj.getVar("isCharge").getBool(0)){
local totalDamage = obj.getVar("Charge").getInt(0);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON);
local sizeRate = sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 8, skillLevel);
local bonusRate = sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 7, skillLevel);
totalDamage = totalDamage * bonusRate / 100;
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643016,0,0,0,sq_GetDirection(obj),totalDamage,0,0,0,0,0,0,0);
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643017,-165,0,0,sq_GetDirection(obj),totalDamage,sizeRate,0,0,0,0,0,0);
}
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){
local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
local bonusRate = sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 0, sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD));
local totalDamage = obj.getVar("Charge").getInt(0) * bonusRate / 100;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/antiairupper_a.ani"), 0, 0);
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643001,-165,0,30,sq_GetDirection(obj),totalDamage,1,0,0,0,0,0,0);
}
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/antiairupper_a.ani"), 0, 0);
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643001,-165,0,30,sq_GetDirection(obj),totalDamage,0,0,0,0,0,0,0);
if(sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT) > 0 && sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON) > 0){
setStageofhermitAppendage(obj);
}
}
}
return true;
}
//疾风打
function checkExecutableSkill_Galesmash(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_GALESMASH);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_GALESMASH, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Galesmash(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Galesmash(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(PRANI_BYKK_GALESMASH1);
// obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local currentAni = obj.getCurrentAnimation();
local speedRate = 6000 / currentAni.getDelaySum(0, 0);
local speed = 10.0 * speedRate.tofloat();
if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed);
else sq_SetVelocity(obj, 0, -speed);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GALESMASH, -1, 0, 1.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_GALESMASH1));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
setChakraAttackInfo(obj);
break;
case 1:
obj.getVar("galeCancel").setBool(1, true);
obj.sq_SetCurrentAnimation(PRANI_BYKK_GALESMASH2);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GALESMASH, -1, 1, 1.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_GALESMASH2));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
setChakraAttackInfo(obj);
local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/galesmash_smashg.ani"), 0, 0);
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/galesmash_smashg.ani"), 0, 0);
obj.sq_PlaySound("PR_RWIND");
obj.sq_PlaySound("CROSS_SWING");
break;
}
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_GALESMASH);
local prob = sq_GetLevelData(obj, SKILL_BYKK_GALESMASH, 2, skillLevel);
local time = sq_GetLevelData(obj, SKILL_BYKK_GALESMASH, 4, skillLevel);
local level = sq_GetSkillLevel(obj, 174) + 20;
local attackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_STUN, prob, level, time);
}
function onEndCurrentAni_Galesmash(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_GALESMASH, STATE_PRIORITY_AUTO, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_Galesmash(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(sq_GetCurrentFrameIndex(obj) >= 2){
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_GALESMASH, STATE_PRIORITY_AUTO, true);
}
}
break;
}
}
function onKeyFrameFlag_Galesmash(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1:
obj.getVar("skillCancel").setBool(0, true);
break;
}
return true;
}
function onEndState_Galesmash(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_BYKK_GALESMASH){
obj.getVar("skillCancel").setBool(0, false);
obj.getVar("galeCancel").setBool(1, false);
}
}
function onAttack_Galesmash(obj, damager, boundingBox, isStuck)
{
if(!obj || isStuck) return;
if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0 && obj.getVar("galeCancel").getBool(1)){
obj.getVar("galeCancel").setBool(1, false);
local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
local bonusRate = sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 0, sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD));
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GALESMASH, -1, 1, 1.0) * bonusRate / 100;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){
createSkillPassive_Priest_3exorcist_bykk(obj,damager,643001,0,0,sq_GetCenterZPos(boundingBox),sq_GetDirection(obj),totalDamage,1,1,0,0,0,0,0);
print(1);
}
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){
createSkillPassive_Priest_3exorcist_bykk(obj,damager,643001,0,0,sq_GetCenterZPos(boundingBox),sq_GetDirection(obj),totalDamage,0,1,0,0,0,0,0);
print(2);
}
}
break;
}
}
//断空捶击
function checkExecutableSkill_Groundcrash(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_GROUNDCRASH);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_GROUNDCRASH, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Groundcrash(obj)
{
if (!obj) return false;
if(obj.getState() == STATE_BYKK_GALESMASH){
if(obj.getVar("skillCancel").getBool(0)) return true;
else return false;
}
return true;
}
function onSetState_Groundcrash(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(PRANI_BYKK_GROUNDCRASH);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local bonusRate = 1.0;
local chargeLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON);
if(chargeLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 17, chargeLevel).tofloat() / 100.0;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GROUNDCRASH, -1, 0, bonusRate);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_GROUNDCRASH1));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
setChakraAttackInfo(obj);
break;
case 1:
obj.sq_SetCurrentAnimation(PRANI_BYKK_GROUNDCRASHFINAL);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local bonusRate = 1.0;
local chargeLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON);
if(chargeLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 17, chargeLevel).tofloat() / 100.0;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GROUNDCRASH, -1, 1, bonusRate);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_GROUNDCRASH2));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
setChakraAttackInfo(obj);
break;
}
}
function onEndCurrentAni_Groundcrash(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_GROUNDCRASH, STATE_PRIORITY_AUTO, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onKeyFrameFlag_Groundcrash(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1:
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON) > 0){
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(6, 6);
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/chargeweapon.ani", -50, 0, 80);
local pAni = pooledObj.getCurrentAnimation();
local speedRate = pAni.getDelaySum(false) * 100 / delay;
pAni.setSpeedRate(speedRate.tofloat());
}
break;
case 2:
local bonusRate = 1.0;
local chargeLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON);
local sizeRate = 100;
local isSuck = 0;
if(chargeLevel > 0){
bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 17, chargeLevel).tofloat() / 100.0;
sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GROUNDCRASH, -1, 2, 1.0) + 100;
sizeRate = sizeRate * (100 + sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 18, sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON))) / 100;
}
print("bonusRate = "+bonusRate);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GROUNDCRASH, -1, 3, bonusRate);
print("totalDamage = "+totalDamage);
print("sizeRate = "+sizeRate);
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643018,155,0,0,sq_GetDirection(obj),totalDamage,sizeRate,isSuck,0,0,0,0,0);
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){
local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
local bonusRate = sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 0, sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD));
totalDamage = totalDamage * bonusRate / 100;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643001,155,0,30,sq_GetDirection(obj),totalDamage,1,0,0,0,0,0,0);
}
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643001,155,0,30,sq_GetDirection(obj),totalDamage,0,0,0,0,0,0,0);
isSuck = 1;
if(sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT) > 0 && sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON) > 0){
setStageofhermitAppendage(obj);
}
}
}
break;
}
return true;
}
//星落打
function checkExecutableSkill_Homerun(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HOMERUN);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_HOMERUN, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Homerun(obj)
{
if (!obj) return false;
if(obj.getState() == STATE_BYKK_GALESMASH){
if(obj.getVar("skillCancel").getBool(0)) return true;
else return false;
}
return true;
}
function onSetState_Homerun(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(PRANI_BYKK_HOMERUNGRAB);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/homerun/homerun_grab_eff01.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/homerun/homerun_grab_eff02.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/homerun/homerun_grab_eff03.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(4,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/homerun/homerun_grab_eff04.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(4,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/homerun/homerun_grab_floor_eff01.ani"), 0, 0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_HOMERUNGRAB));
obj.getVar("homerunAtk").setBool(0, true);
obj.getVar("homerunselect").setBool(0, true);
obj.getVar("homerunselect2").setInt(0, 0);
obj.getVar("homerunTar").clear_obj_vector();
obj.getVar("homerunObj").clear_obj_vector();
obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_HOMERUN);
break;
case 1:
obj.sq_SetCurrentAnimation(PRANI_BYKK_HOMERUNCHARGE);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local currentAni = obj.getCurrentAnimation();
local speedRate = 30000 / currentAni.getDelaySum(0, 0);
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/homerun/homerun_chargeholdtarget_upeff01.ani", 145, 1, 0);
local pAni = pooledObj.getCurrentAnimation();
pAni.setSpeedRate(speedRate.tofloat());
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/homerun/homerun_charge_front_dust.ani", 0, 1, 0);
local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/homerun/homerun_charge_back_dust02.ani", 0, -1, 0);
obj.getVar("homerunEff").clear_obj_vector();
obj.getVar("homerunEff").push_obj_vector(pooledObj);
obj.getVar("homerunEff").push_obj_vector(pooledObj2);
local range = sq_GetIntData(obj, SKILL_BYKK_HOMERUN, 3) / 2;
local appendage = sq_AttractToMe(obj, range, 145, 1000);
obj.getVar("homerun").setAppendage(0,appendage);
return;
break;
case 2:
local size = obj.getVar("homerunTar").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("homerunTar").get_obj_vector(i);
if(targetObj && targetObj.getState() != STATE_DIE) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/priest/3exorcist_bykk/ap_homerun_hold.nut");
}
}
local size = obj.getVar("homerunEff").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local pooledObj = obj.getVar("homerunEff").get_obj_vector(i);
if(pooledObj) pooledObj.setValid(false);
}
}
obj.sq_SetCurrentAnimation(PRANI_BYKK_HOMERUNSMASH);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMERUN, -1, 2, 1.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_HOMERUNSMASH));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
setChakraAttackInfo(obj);
local directionSelect = obj.sq_GetVectorData(datas, 1);
local isFullCharge = obj.sq_GetVectorData(datas, 2);
local attackInfo = sq_GetCurrentAttackInfo(obj);
switch(directionSelect){
case 0:
sq_SetCurrentAttacknBackForce(attackInfo, 100);
sq_SetCurrentAttacknUpForce(attackInfo, 100);
break;
case 1:
sq_SetCurrentAttacknBackForce(attackInfo, 500);
sq_SetCurrentAttacknUpForce(attackInfo, 300);
break;
case 2:
sq_SetCurrentAttacknBackForce(attackInfo, 500);
sq_SetCurrentAttacknUpForce(attackInfo, 500);
break;
}
if(isFullCharge > 0) sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/homerun/homerun_hit_fullcharge_eff01.ani", 0, 0, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/homerun/homerun_smasha_rockhit_back09.ani", 0, -1, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/homerun/homerun_smasha_rockhit_front09.ani", 0, 1, 0);
sq_flashScreen(obj,80,100,240,150, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 5, 120);
local appendage = obj.getVar("homerun").getAppendage(0);
if(appendage) appendage.setValid(false);
obj.getVar("homerunAtk").setBool(1, true);
break;
case 3:
obj.sq_SetCurrentAnimation(PRANI_BYKK_HOMERUN_SMASHA_BODY);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMERUN, -1, 2, 1.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_HOMERUNSMASH));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
setChakraAttackInfo(obj);
sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/homerun/homerun_smasha_rockhit_back09.ani", 0, -1, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/homerun/homerun_smasha_rockhit_front09.ani", 0, 1, 0);
sq_SetMyShake(obj, 5, 60);
break;
case 4:
local zPos = obj.sq_GetVectorData(datas, 1);
local stateTime = obj.sq_GetVectorData(datas, 2);
local isFullCharge = obj.sq_GetVectorData(datas, 3);
obj.getVar("homerunSet").setInt(0, zPos);
obj.getVar("homerunSet").setInt(1, stateTime);
obj.getVar("homerunSet").setInt(2, isFullCharge);
obj.sq_SetCurrentAnimation(PRANI_BYKK_HOMERUNCHARGEHOLDTARGET);
local currentAni = obj.getCurrentAnimation();
sq_SetFrameDelayTime(currentAni, 0, stateTime);
// if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){
// local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
// local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
// if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){
// obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/homerun_smashe.ani"), 0, 0);
// }
// else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){
// obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/homerun_smashe.ani"), 0, 0);
// }
// }
return;
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_Homerun(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(obj.getVar("homerunAtk").getBool(0) == false){
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_HOMERUN, STATE_PRIORITY_AUTO, true);
}
else {
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
}
break;
case 1:
obj.sq_IntVectClear();
obj.sq_IntVectPush(4);
obj.sq_AddSetStatePacket(STATE_BYKK_HOMERUN, STATE_PRIORITY_AUTO, true);
break;
case 2:
case 3:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
case 4:
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_IntVectPush(obj.getVar("homerunselect2").getInt(0));
obj.sq_IntVectPush(obj.getVar("homerunSet").getInt(2));
obj.sq_AddSetStatePacket(STATE_BYKK_HOMERUN, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProcCon_Homerun(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
local stateTime = obj.sq_GetStateTimer();
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(false);
local speedRate = 201800 / delaySum;
if(stateTime >= 30000 / speedRate){
local targetObj = obj.getVar("homerunTar").get_obj_vector(0);
local zPos = sq_GetZPos(targetObj);
if(!obj.isDownSkillLastKey()){
obj.sq_IntVectClear();
obj.sq_IntVectPush(4);
obj.sq_IntVectPush(zPos);
obj.sq_IntVectPush(stateTime);
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_HOMERUN, STATE_PRIORITY_AUTO, true);
}
if(stateTime >= delaySum / 2){
obj.sq_IntVectClear();
obj.sq_IntVectPush(4);
obj.sq_IntVectPush(zPos);
obj.sq_IntVectPush(stateTime);
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_HOMERUN, STATE_PRIORITY_AUTO, true);
}
}
case 4:
if(obj.getVar("homerunselect").getBool(0)){
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT){
obj.getVar("homerunselect").setBool(0, false);
obj.getVar("homerunselect2").setInt(0, 1);
}
else if( sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){
obj.getVar("homerunselect").setBool(0, false);
obj.getVar("homerunselect2").setInt(0, 2);
}
}
break;
}
}
function onProc_Homerun(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
local stateTime = obj.sq_GetStateTimer();
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(false);
local targetObj = obj.getVar("homerunTar").get_obj_vector(0);
local zPos = sq_GetAccel(obj.getVar("homerunSet").getInt(0), 400, stateTime, delaySum / 2, true);
sq_setCurrentAxisPos(targetObj, 2, zPos);
break;
case 4:
local stateTime = obj.sq_GetStateTimer();
local targetObj = obj.getVar("homerunTar").get_obj_vector(0);
local zPos = sq_GetAccel(obj.getVar("homerunSet").getInt(0), 0, stateTime, obj.getVar("homerunSet").getInt(1), false);
sq_setCurrentAxisPos(targetObj, 2, zPos);
break;
}
}
function onEndState_Homerun(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_BYKK_HOMERUN){
local size = obj.getVar("homerunTar").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("homerunTar").get_obj_vector(i);
if(targetObj && targetObj.getState() != STATE_DIE) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/priest/3exorcist_bykk/ap_homerun_hold.nut");
}
}
local size = obj.getVar("homerunEff").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local pooledObj = obj.getVar("homerunEff").get_obj_vector(i);
if(pooledObj) pooledObj.setValid(false);
}
}
local appendage = obj.getVar("homerun").getAppendage(0);
if(appendage) appendage.setValid(false);
}
}
function onAttack_Homerun(obj, damager, boundingBox, isStuck)
{
if(!obj || isStuck) return;
if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return;
if(obj.getVar("homerunAtk").getBool(0)){
obj.getVar("homerunAtk").setBool(0, false);
if(sq_IsFixture(damager)){
obj.sq_IntVectClear();
obj.sq_IntVectPush(3);
obj.sq_AddSetStatePacket(STATE_BYKK_HOMERUN, STATE_PRIORITY_AUTO, true);
}
else{
obj.getVar("homerunTar").push_obj_vector(damager);
local apdPath = "character/priest/3exorcist_bykk/ap_homerun_hold.nut";
if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, apdPath)){
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true);
sq_HoldAndDelayDie(damager, obj, true, true, false, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage);
local stateTime = obj.sq_GetStateTimer();
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(false);
local time = delaySum - stateTime;
if(time > 100) time = 100;
sq_MoveToAppendageForce(damager, obj, obj, 145, 0, 0, time, true, AddAppendage);
obj.getVar("homerunSet").setInt(0, sq_GetZPos(damager));
}
else{
obj.sq_IntVectClear();
obj.sq_IntVectPush(3);
obj.sq_AddSetStatePacket(STATE_BYKK_HOMERUN, STATE_PRIORITY_AUTO, true);
}
}
}
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) <= 0) return;
if(obj.getVar("homerunAtk").getBool(1)){
obj.getVar("homerunAtk").setBool(1, false);
local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
local bonusRate = sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 0, sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD));
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOMERUN, -1, 2, 1.0) * bonusRate / 100;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){
createSkillPassive_Priest_3exorcist_bykk(obj,damager,643001,0,0,sq_GetCenterZPos(boundingBox),sq_GetDirection(obj),totalDamage,1,1,0,0,0,0,0);
}
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){
createSkillPassive_Priest_3exorcist_bykk(obj,damager,643001,0,0,sq_GetCenterZPos(boundingBox),sq_GetDirection(obj),totalDamage,0,1,0,0,0,0,0);
}
}
}
//黑暗切割
function checkExecutableSkill_Cuttingdarkness(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CUTTINGDARKNESS);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_CUTTINGDARKNESS, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Cuttingdarkness(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Cuttingdarkness(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(PRANI_BYKK_CUTTINGDARKNESSCHARGE);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
break;
case 1:
obj.sq_SetCurrentAnimation(PRANI_BYKK_CUTTINGDARKNESSFULLSMASH);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD);
if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CUTTINGDARKNESS, -1, 1, bonusRate);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_CUTTINGDARKNESS));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
setChakraAttackInfo(obj);
obj.sq_PlaySound("PR_STAR_THROW");
break;
}
}
function onEndCurrentAni_Cuttingdarkness(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_CUTTINGDARKNESS, STATE_PRIORITY_AUTO, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onKeyFrameFlag_Cuttingdarkness(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1:
local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD);
if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000;
print("bonusRate = "+ bonusRate);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CUTTINGDARKNESS, -1, 2, bonusRate);
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_CUTTINGDARKNESS, 1);
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643019,175,0,60,sq_GetDirection(obj),totalDamage,sizeRate,0,0,0,0,0,0);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
return true;
}
//巨旋风
function checkExecutableSkill_Throwweapon(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_THROWWEAPON);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_THROWWEAPON, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Throwweapon(obj)
{
if (!obj) return false;
if(obj.getState() == STATE_BYKK_GALESMASH){
if(obj.getVar("skillCancel").getBool(0)) return true;
else return false;
}
return true;
}
function onSetState_Throwweapon(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(PRANI_BYKK_THROWWEAPONREADY);
break;
case 1:
obj.sq_SetCurrentAnimation(PRANI_BYKK_THROWWEAPONTHROW);
local chargeLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON);
local bonusRate = 1.0;
if(chargeLevel > 0){
bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 11, chargeLevel).tofloat() / 100.0;
}
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THROWWEAPON, -1, 0, bonusRate);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_THROWWEAPONSECOND));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
setChakraAttackInfo(obj);
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){
local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/throwweapon_chargethrowh2.ani"), 0, 0);
}
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/throwweapon_chargethrowh2.ani"), 0, 0);
}
}
obj.sq_PlaySound("PR_SPIN_FIN");
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_Throwweapon(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_THROWWEAPON, STATE_PRIORITY_AUTO, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onKeyFrameFlag_Throwweapon(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1:
local hitTime = sq_GetIntData(obj, SKILL_BYKK_THROWWEAPON, 2);
local lifeTime = sq_GetIntData(obj, SKILL_BYKK_THROWWEAPON, 1);
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_THROWWEAPON, 5);
local chargeLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON);
local bonusRate = 1.0;
if(chargeLevel > 0){
bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 12, chargeLevel).tofloat() / 100.0;
lifeTime = lifeTime + sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 14, chargeLevel);
sizeRate = sq_GetIntData(obj, SKILL_BYKK_THROWWEAPON, 6);
}
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THROWWEAPON, -1, 1, bonusRate);
local sub = 0;
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){
local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)) sub = 1;
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){
sub = 2;
if(sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT) > 0 && sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON) > 0){
setStageofhermitAppendage(obj);
}
}
}
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643020,75,0,60,sq_GetDirection(obj),totalDamage,lifeTime,hitTime,sizeRate,sub,0,0,0);
break;
}
return true;
}
//狂乱锤击
function checkExecutableSkill_Repeatedsmash(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_REPEATEDSMASH);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_REPEATEDSMASH, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Repeatedsmash(obj)
{
if (!obj) return false;
if(obj.getState() == STATE_BYKK_GALESMASH){
if(obj.getVar("skillCancel").getBool(0)) return true;
else return false;
}
return true;
}
function onSetState_Repeatedsmash(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(PRANI_BYKK_REPEATEDSMASHSTART);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/repeatedsmash/swingstart.ani"), 150, 0);
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){
local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/repeatedsmash_swingstart.ani"), 150, 0);
}
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/repeatedsmash_swingstart.ani"), 150, 0);
}
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_REPEATEDSMASH, -1, 0, 1.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_REPEATEDSMASH));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
setChakraAttackInfo(obj);
obj.getVar("repeatedsmashSet").setInt(0, 0);
obj.startRapidInput();
local currentAni = obj.getCurrentAnimation();
local speedRate = 7000 / currentAni.getDelaySum(0, 0);
local time = 15000 / speedRate;
obj.getVar("repeatedsmashSet").setInt(2, time);
obj.getVar("repeatedsmashSet").setInt(3, speedRate);
obj.setTimeEvent(1, time, 1, false);
sq_SetMyShake(obj, 2, 100);
obj.sq_PlaySound("PR_RATK");
break;
case 1:
if(obj.getVar("repeatedsmashSet").getInt(0) > 0){
obj.sq_SetCurrentAnimation(PRANI_BYKK_REPEATEDSMASHUPGRADE);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/repeatedsmash/crashrepeat1.ani"), 150, 0);
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/repeatedsmash/crashrepeat2.ani", 150, 0, 0);
sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM);
}
else obj.sq_SetCurrentAnimation(PRANI_BYKK_REPEATEDSMASH);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/repeatedsmash/swingrepeat.ani"), 150, 0);
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){
local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/repeatedsmash_swingrepeat.ani"), 150, 0);
}
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/repeatedsmash_swingrepeat.ani"), 150, 0);
}
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_REPEATEDSMASH, -1, 0, 1.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_REPEATEDSMASH));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
setChakraAttackInfo(obj);
sq_SetMyShake(obj, 2, 100);
obj.sq_PlaySound("PR_RATK");
break;
case 2:
obj.sq_SetCurrentAnimation(PRANI_BYKK_REPEATEDSMASHFINAL);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/repeatedsmash/swingfinal.ani"), 150, 0);
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){
local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/repeatedsmash_swingfinalc.ani"), 150, 0);
}
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/repeatedsmash_swingfinalc.ani"), 150, 0);
}
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local currentAni = obj.getCurrentAnimation();
local speedRate = 7000 / currentAni.getDelaySum(0, 0);
if(speedRate >= 130){
speedRate = 130;
currentAni.setSpeedRate(130.0);
}
obj.getVar("repeatedsmashSetSpeed").setInt(0, speedRate);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_REPEATEDSMASH, -1, 1, 1.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_REPEATEDSMASHFINAL));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
setChakraAttackInfo(obj);
obj.sq_PlaySound("PR_MUSSANG_FIN");
break;
}
}
function onEndCurrentAni_Repeatedsmash(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.getVar("repeatedsmashSet").setInt(1, 1);
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_REPEATEDSMASH, STATE_PRIORITY_AUTO, true);
break;
case 1:
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_REPEATEDSMASH);
local hitMax = sq_GetLevelData(obj, SKILL_BYKK_REPEATEDSMASH, 2, skillLevel);
if(obj.getVar("repeatedsmashSet").getInt(0) > 0) hitMax = sq_GetLevelData(obj, SKILL_BYKK_REPEATEDSMASH, 3, skillLevel);
obj.getVar("repeatedsmashSet").setInt(1, obj.getVar("repeatedsmashSet").getInt(1) + 1);
print("hitcount = "+obj.getVar("repeatedsmashSet").getInt(1));
print("hitMax = "+hitMax);
obj.sq_IntVectClear();
if(obj.getVar("repeatedsmashSet").getInt(1) >= hitMax) obj.sq_IntVectPush(2);
else obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_REPEATEDSMASH, STATE_PRIORITY_AUTO, true);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProc_Repeatedsmash(obj)
{
if(!obj) return;
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput();
}
function onProcCon_Repeatedsmash(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
if(subState == 1){
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(STATE_BYKK_REPEATEDSMASH, STATE_PRIORITY_AUTO, true);
}
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT) obj.setTimeEvent(2, 1000, 1, true);
}
}
function onKeyFrameFlag_Repeatedsmash(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 0:
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/repeatedsmash/charge.ani", -50, 1, 30);
local pAni = pooledObj.getCurrentAnimation();
local speedRate = obj.getVar("repeatedsmashSetSpeed").getInt(0);
pAni.setSpeedRate(speedRate.tofloat());
break;
case 1:
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_REPEATEDSMASH, -1, 5, 1.0);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_REPEATEDSMASH);
local prob = sq_GetLevelData(obj, SKILL_BYKK_REPEATEDSMASH, 6, skillLevel);
local level = sq_GetSkillLevel(obj, 174) + 20;
local time = sq_GetLevelData(obj, SKILL_BYKK_REPEATEDSMASH, 8, skillLevel);
local size = sq_GetLevelData(obj, SKILL_BYKK_REPEATEDSMASH, 4, skillLevel);
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_REPEATEDSMASH, 6);
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643021,150,0,0,sq_GetDirection(obj),totalDamage,prob,level,time,size,sizeRate,0,0);
break;
}
return true;
}
function onTimeEvent_Repeatedsmash(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 1:
local rapidInput = obj.getRapidInputFrequency();
if(rapidInput > 2){
if(obj.getVar("repeatedsmashSet").getInt(0) == 0) obj.getVar("repeatedsmashSet").setInt(0, 1);
local delay = obj.getVar("repeatedsmashSet").getInt(2);
local speedRate = obj.getVar("repeatedsmashSet").getInt(3);
obj.setTimeEvent(1, delay, 1, false);
local currentAni = obj.getCurrentAnimation();
currentAni.setSpeedRate(speedRate.tofloat() * 2.0);
}
else{
local delay = obj.getVar("repeatedsmashSet").getInt(2);
local speedRate = obj.getVar("repeatedsmashSet").getInt(3);
obj.setTimeEvent(1, delay, 1, false);
local currentAni = obj.getCurrentAnimation();
currentAni.setSpeedRate(speedRate.tofloat());
}
break;
case 2:
sq_SetCurrentDirection(obj, sq_GetOppositeDirection(sq_GetDirection(obj)));
break;
}
}
function onEndState_Repeatedsmash(obj, new_state)
{
if(!obj) return;
}
//疾空旋风破
function checkExecutableSkill_Giantswing(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_GIANTSWING);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_BYKK_GIANTSWING, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Giantswing(obj)
{
if (!obj) return false;
if(obj.getState() == STATE_BYKK_GALESMASH){
if(obj.getVar("skillCancel").getBool(0)) return true;
else return false;
}
return true;
}
function onSetState_Giantswing(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
print("subState = "+subState);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(PRANI_BYKK_GIANTSWINGREADY);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
obj.startRapidInput();
obj.sq_PlaySound("PR_SPIN");
obj.sq_PlaySound("WIND_SPIN");
break;
case 1:
obj.sq_SetCurrentAnimation(PRANI_BYKK_GIANTSWING);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/giantswing/weaponloop.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/giantswing/dustloop1.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/giantswing/dustloop2.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/giantswing/giantswing_talisman/sphereloop_01.ani"), 0, 0);
local appendage = sq_AttractToMe(obj, 250, 100, 1000);
obj.getVar("giantswingAp").setAppendage(0, appendage);
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){
local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/giantswing_weaponloopi.ani"), 0, 0);
}
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/giantswing_weaponloopi.ani"), 0, 0);
}
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local chargeLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON);
local currentAni = obj.getCurrentAnimation();
local speedRate = 9000 / currentAni.getDelaySum(0, 0);
if(speedRate >= 130) speedRate = 130;
print("speedRate = "+speedRate);
if(chargeLevel > 0){
speedRate = speedRate * (100 + sq_GetLevelData(obj, SKILL_BYKK_CHARGEWEAPON, 22, chargeLevel)) / 100;
}
local currentAni = obj.getCurrentAnimation();
currentAni.setSpeedRate(speedRate.tofloat());
local delay = currentAni.getDelaySum(false) / 2;
obj.getVar("giantswingSet").setInt(0, delay);
obj.getVar("giantswingSet").setInt(1, speedRate);
obj.getVar("giantswingSet").setInt(2, 0);
obj.getVar("giantswingSet").setInt(3, 0);
obj.setTimeEvent(1, delay, 1, false);
local time = (3000 / speedRate).tointeger();
if(time < 20) time = 30;
obj.setTimeEvent(3, time, -1, true);
break;
case 2:
obj.stopTimeEvent(2);
obj.stopTimeEvent(3);
obj.getVar("GiantswingAtk").setBool(1, true);
obj.sq_SetCurrentAnimation(PRANI_BYKK_GIANTSWINGFINAL);
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/giantswing/weaponfinal.ani"), 0, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/giantswing/finish.ani", 0, 0, 0);
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/giantswing/dustfinal1.ani", 0, -1, -1);
sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM);
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/giantswing/dustfinal2.ani", 0, -1, -1);
sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM);
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){
local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/giantswing_weaponfinali.ani"), 0, 0);
}
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/giantswing_weaponfinali.ani"), 0, 0);
}
}
local animation = obj.getCurrentAnimation();
sq_SetFrameDelayTime(animation, 6, 300);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GIANTSWING, -1, 1, 1.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_GIANTSWINGFINAL));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
setChakraAttackInfo(obj);
obj.sq_PlaySound("PR_SPIN_FIN");
local appendage = obj.getVar("giantswingAp").getAppendage(0);
if(appendage) appendage.setValid(false);
break;
}
}
function onEndCurrentAni_Giantswing(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GIANTSWING, -1, 0, 1.0);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_GIANTSWING));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
setChakraAttackInfo(obj);
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(STATE_BYKK_GIANTSWING, STATE_PRIORITY_AUTO, true);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
break;
}
}
function onProc_Giantswing(obj)
{
if(!obj) return;
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput();
}
function onProcCon_Giantswing(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
if(subState == 1){
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(STATE_BYKK_GIANTSWING, STATE_PRIORITY_AUTO, true);
}
}
}
function onKeyFrameFlag_Giantswing(obj, flagIndex)
{
if(!obj) return false;
switch(flagIndex){
case 1:
if(obj.isExistTimeEvent(2)) return;
if(obj.getVar("giantswingSet").getInt(3) == 0){
obj.getVar("giantswingSet").setInt(3, obj.getVar("giantswingSet").getInt(3) + 1);
break;
}
else obj.getVar("giantswingSet").setInt(3, obj.getVar("giantswingSet").getInt(3) + 1);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_GIANTSWING);
local hitMax = sq_GetLevelData(obj, SKILL_BYKK_GIANTSWING, 2, skillLevel);
if(obj.getVar("giantswingSet").getInt(2) > 0) hitMax = sq_GetLevelData(obj, SKILL_BYKK_GIANTSWING, 3, skillLevel);
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON) > 0) hitMax = hitMax + sq_GetIntData(obj, SKILL_BYKK_CHARGEWEAPON, 2);
if(obj.getVar("giantswingSet").getInt(3) + 1 >= hitMax){
obj.setTimeEvent(2, 100, 1, false);
}
else obj.resetHitObjectList();
break;
}
return true;
}
function onTimeEvent_Giantswing(obj, timeEventIndex, timeEventCount)
{
if(!obj) return false;
switch(timeEventIndex){
case 1:
local rapidInput = obj.getRapidInputFrequency();
if(rapidInput > 2){
if(obj.getVar("giantswingSet").getInt(2) == 0) obj.getVar("giantswingSet").setInt(2, 1);
local delay = obj.getVar("giantswingSet").getInt(0);
local speedRate = obj.getVar("giantswingSet").getInt(1);
obj.setTimeEvent(1, delay, 1, false);
local currentAni = obj.getCurrentAnimation();
currentAni.setSpeedRate(speedRate.tofloat() * 2.0);
}
else{
local delay = obj.getVar("giantswingSet").getInt(0);
local speedRate = obj.getVar("giantswingSet").getInt(1);
obj.setTimeEvent(1, delay, 1, false);
local currentAni = obj.getCurrentAnimation();
currentAni.setSpeedRate(speedRate.tofloat());
}
break;
case 2:
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(STATE_BYKK_GIANTSWING, STATE_PRIORITY_AUTO, true);
break;
case 3:
if(obj.isMyControlObject()){
local speedRate = obj.getVar("giantswingSet").getInt(1);
local xSpeed = 130 * speedRate / 100;
local ySpeed = speedRate * 80 / 100;
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)) xSpeed = xSpeed;
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)) xSpeed = -xSpeed;
else xSpeed = 0;
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) ySpeed = ySpeed;
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) ySpeed = -ySpeed;
else ySpeed = 0;
obj.sq_StartWrite();
obj.sq_WriteDword(xSpeed);
obj.sq_WriteDword(ySpeed);
sq_SendChangeSkillEffectPacket(obj, STATE_BYKK_GIANTSWING);
}
break;
}
}
function onChangeSkillEffect_Giantswing(obj, skillIndex, reciveData)
{
if(!obj) return;
local xSpeed = reciveData.readDword();
local ySpeed = reciveData.readDword();
sq_SetVelocity(obj, 0, xSpeed.tofloat());
sq_SetVelocity(obj, 1, ySpeed.tofloat());
}
function onEndState_Giantswing(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_BYKK_GIANTSWING){
local appendage = obj.getVar("giantswingAp").getAppendage(0);
if(appendage) appendage.setValid(false);
}
}
function onAttack_Giantswing(obj, damager, boundingBox, isStuck)
{
if(!obj || isStuck) return;
if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return;
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) <= 0) return;
if(obj.getVar("GiantswingAtk").getBool(1)){
obj.getVar("GiantswingAtk").setBool(1, false);
local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
local bonusRate = sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 0, sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD));
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GIANTSWING, -1, 1, 1.0) * bonusRate / 100;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){
createSkillPassive_Priest_3exorcist_bykk(obj,damager,643001,0,0,sq_GetCenterZPos(boundingBox),sq_GetDirection(obj),totalDamage,1,1,0,0,0,0,0);
}
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){
createSkillPassive_Priest_3exorcist_bykk(obj,damager,643001,0,0,sq_GetCenterZPos(boundingBox),sq_GetDirection(obj),totalDamage,0,1,0,0,0,0,0);
if(sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT) > 0 && sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON) > 0){
setStageofhermitAppendage(obj);
}
}
}
}