Rindro-Sqr/user/114.66.45.221/3_atswordman_5.c

3840 lines
140 KiB
C

//BlackMirror
function checkExecutableSkill_BlackMirror_bykk(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_BLACKMIRROR);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_BLACKMIRROR, STATE_PRIORITY_IGNORE_FORCE, true);
AIMPOINT_ATSWORDMAN = 69;
return 1;
}
return 0;
}
function onSetState_BlackMirror_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
switch(subState){
case 0:
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_BLACKMIRRORCAST);
obj.sq_PlaySound("SW_BLACK_MIRROR");
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local DelaySum = sq_GetDelaySum(obj.getCurrentAnimation());
sq_StartDrawCastGauge(obj, DelaySum, true);
local timeRate = 104000 / DelaySum;
local offsetX = 100;
offsetX = obj.sq_GetDistancePos(obj.getXPos(), obj.sq_GetDirection(), offsetX);
local vX = sq_GetIntData(obj, SKILL_DARKEMPLER_BLACKMIRROR, 2) * timeRate / 100;
local vY = sq_GetIntData(obj, SKILL_DARKEMPLER_BLACKMIRROR, 2) / 2 * timeRate / 100;
obj.sq_AddAimPointMark(offsetX, obj.getYPos(), vX, vY);
break;
}
}
function onEndCurrentAni_BlackMirror_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
local Xpos = obj.sq_GetAimPosX(obj.getXPos(), obj.getYPos(), false) - sq_GetXPos(obj);
local Ypos = obj.sq_GetAimPosY(obj.getXPos(), obj.getYPos(), false) - sq_GetYPos(obj);
local offsetX = obj.sq_GetAimPosX(obj.getXPos(), obj.getYPos(), false);
local offsetY = obj.sq_GetAimPosY(obj.getXPos(), obj.getYPos(), false);
obj.sq_RemoveAimPointMark();
local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_BLACKMIRROR);
local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_BLACKMIRROR, 0, skill_level);
local passive_hp = sq_GetLevelData(obj, SKILL_DARKEMPLER_BLACKMIRROR, 2, skill_level);
local totalDamage2 = sq_GetLevelData(obj, SKILL_DARKEMPLER_BLACKMIRROR, 3, skill_level);
local time = sq_GetLevelData(obj, SKILL_DARKEMPLER_BLACKMIRROR, 4, skill_level);
local count = sq_GetLevelData(obj, SKILL_DARKEMPLER_BLACKMIRROR, 5, skill_level);
local decreaseRate = sq_GetIntData(obj, SKILL_DARKEMPLER_BLACKMIRROR, 0);
local speedRate = sq_GetIntData(obj, SKILL_DARKEMPLER_BLACKMIRROR, 79);
local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger();
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,Xpos,Ypos,0,ENUM_DIRECTION_RIGHT,4,SKILL_DARKEMPLER_BLACKMIRROR,1,totalDamage,passive_hp,time,count,decreaseRate,speedRate,damageRate,0,1);
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onEnterFrame_BlackMirror_bykk(obj, frameIndex)
{
if(!obj) return;
}
function onEndState_BlackMirror_bykk(obj, newState)
{
if(!obj) return;
sq_EndDrawCastGauge(obj);
obj.sq_RemoveAimPointMark();
}
function onProc_BlackMirror_bykk(obj)
{
if(!obj) return;
}
function onProcCon_BlackMirror_bykk(obj)
{
if(!obj) return;
}
function getScrollBasisPos_BlackMirror_bykk(obj)
{
if (!obj) return false;
local subState = obj.getSkillSubState();
if (!obj.isMyControlObject()) return false;
local posX = obj.getXPos();
local posY = obj.getYPos();
obj.sq_SetCameraScrollPosition(posX, posY, 0);
return true;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//BuckShot
function checkExecutableSkill_BuckShot_bykk(obj)
{
if (!obj) return 0;
local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_BUCKSHOT);
local createMin = sq_GetLevelData(obj, SKILL_DARKEMPLER_BUCKSHOT, 0, skill_level);
local createMax = sq_GetLevelData(obj, SKILL_DARKEMPLER_BUCKSHOT, 1, skill_level);
local enemyMax = sq_GetIntData(obj, SKILL_DARKEMPLER_BUCKSHOT, 13);
local soulnum = sq_GetIntData(obj, SKILL_DARKEMPLER_BUCKSHOT, 3);
if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_BUCKSHOTEX) > 0) soulnum = soulnum - 1;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_BUCKSHOT, SKILL_DARKEMPLER_BUCKSHOT, 2, 1.0);
local loadSlot = obj.sq_GetSkillLoad(SKILL_DARKEMPLER_EVOLVE);
local slotCount = loadSlot.getRemainLoadNumber();
if(!loadSlot || slotCount < soulnum) return 0;
local range = sq_GetIntData(obj, SKILL_DARKEMPLER_BUCKSHOT, 1);
obj.getVar("targetBoss").clear_obj_vector();
obj.getVar("targetNamed").clear_obj_vector();
obj.getVar("targetNormal").clear_obj_vector();
local objectManager = obj.getObjectManager();
local objectNumber = objectManager.getCollisionObjectNumber();
for(local i = 0; i < objectNumber; i++){
local object = objectManager.getCollisionObject(i);
if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object)){
local activeObj = sq_GetCNRDObjectToActiveObject(object);
if(sq_Abs(sq_GetXPos(activeObj) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(activeObj) - sq_GetYPos(obj)) <= range / 2 && isFrontObject(obj,activeObj)){
if(sq_IsBoss(activeObj)) obj.getVar("targetBoss").push_obj_vector(activeObj);
else if(sq_IsNamed(activeObj)) obj.getVar("targetNamed").push_obj_vector(activeObj);
else obj.getVar("targetNormal").push_obj_vector(activeObj);
}
}
}
local boss_number = obj.getVar("targetBoss").get_obj_vector_size();
local named_number = obj.getVar("targetNamed").get_obj_vector_size();
local normal_number = obj.getVar("targetNormal").get_obj_vector_size();
local all_number = boss_number + named_number + normal_number;
if(all_number < 0) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_BUCKSHOT);
if (isUse){
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,-80,0,sq_GetZPos(obj)+60,obj.getDirection(),4,SKILL_DARKEMPLER_BUCKSHOT,3,totalDamage,obj.getDirection(),createMin,createMax,enemyMax,soulnum,0,0,0);
}
return 0;
}
function checkCommandEnable_BuckShot_bykk(obj)
{
if (!obj) return 0;
local loadSlot = obj.sq_GetSkillLoad(SKILL_DARKEMPLER_EVOLVE);
if(!loadSlot) return 0;
local count = loadSlot.getRemainLoadNumber();
local soulnum = sq_GetIntData(obj, SKILL_DARKEMPLER_BUCKSHOT, 3);
if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_BUCKSHOTEX) > 0) soulnum = soulnum - 1;
if(count < soulnum) return 0;
return 1;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//congest
function checkExecutableSkill_Congest_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_CONGEST);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(102, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function checkCommandEnable_Congest_bykk(obj)
{
if (!obj) return 0;
return 1;
}
function onSetState_Congest_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
switch(subState){
case 0:
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_CONGEST_ON_BODY);
obj.sq_PlaySound("SW_SHADOW_BINDING");
local castTime = sq_GetCastTime(obj, SKILL_DARKEMPLER_CONGEST, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_CONGEST));
sq_StartDrawCastGauge(obj, castTime, true);
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(false);
local speedRate = delaySum.tofloat() / castTime.tofloat() * 100.0;
currentAni.setSpeedRate(speedRate);
break;
}
}
function onEndCurrentAni_Congest_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
local apPath = "character/atswordman/4_darktempler/congest/ap_congest.nut";
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apPath, false);
appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_DARKEMPLER_CONGEST, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_CONGEST));
appendage.setEnableIsBuff(true);
CNSquirrelAppendage.sq_Append(appendage, obj, obj, true);
local bonusRate = sq_GetLevelData(obj,SKILL_DARKEMPLER_CONGEST, 0, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_CONGEST)) / 10;
obj.getVar("apGetSetbyKK").setInt(0, bonusRate);
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onEndState_Congest_bykk(obj, new_state)
{
if(new_state != 102){
sq_EndDrawCastGauge(obj);
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//DeadlyCape
function startSkillCoolTime_atSwordman_bykk(obj, skillIndex, skillLevel, currentCoolTime)
{
local state = obj.getState();
if(state == SKILL_DARKEMPLER_DEADLYCAPE && skillIndex == SKILL_DARKEMPLER_BUCKSHOT){
local newCoolTime = currentCoolTime * (100 - sq_GetLevelData(obj, SKILL_DARKEMPLER_DEADLYCAPE, 2, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_DEADLYCAPE))) / 100;
return newCoolTime;
}
return currentCoolTime;
}
function checkExecutableSkill_DeadlyCape_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_DEADLYCAPE);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DEADLYCAPE, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function checkCommandEnable_DeadlyCape_bykk(obj)
{
if (!obj) return 0;
return 1;
}
function onSetState_DeadlyCape_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
switch(subState){
case 0:
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEADLYCAPECAST);
obj.sq_PlaySound("SW_DEDLY_CAPE");
obj.sq_SetCurrentAttackInfo(125);
local bonus = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_DEADLYCAPE, SKILL_DARKEMPLER_DEADLYCAPE, 0, 1.0);
obj.sq_SetCurrentAttackBonusRate(bonus);
obj.getVar("deadlycape_target").clear_obj_vector();
local hitMax = sq_GetIntData(obj, SKILL_DARKEMPLER_DEADLYCAPE, 0) * 5;
if(sq_GetIntData(obj, SKILL_DARKEMPLER_DEADLYCAPE, 6) > 0) hitMax = hitMax - 9;//护石
obj.getVar("DeadlyCapeCount").clear_vector();
obj.getVar("DeadlyCapeCount").push_vector(0);
obj.getVar("DeadlyCapeCount").push_vector(hitMax);
obj.sq_SetXScrollStart(150, 100);
break;
case 1://多段1
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEADLYCAPECROSSATTACK1);
obj.resetHitObjectList();
obj.getVar("DeadlyCapeCount").set_vector(0,obj.getVar("DeadlyCapeCount").get_vector(0)+1);
break;
case 2:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEADLYCAPECROSSATTACK2);
obj.resetHitObjectList();
obj.getVar("DeadlyCapeCount").set_vector(0,obj.getVar("DeadlyCapeCount").get_vector(0)+1);
break;
case 3:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEADLYCAPECROSSATTACK3);
obj.resetHitObjectList();
obj.getVar("DeadlyCapeCount").set_vector(0,obj.getVar("DeadlyCapeCount").get_vector(0)+1);
break;
case 4:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEADLYCAPECROSSATTACK4);
obj.resetHitObjectList();
obj.getVar("DeadlyCapeCount").set_vector(0,obj.getVar("DeadlyCapeCount").get_vector(0)+1);
break;
case 5://多段5
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEADLYCAPECROSSATTACK5);
obj.resetHitObjectList();
obj.getVar("DeadlyCapeCount").set_vector(0,obj.getVar("DeadlyCapeCount").get_vector(0)+1);
break;
case 6:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEADLYCAPELASTCAST);
local effectObj = obj.getVar("deadlycape_effect").get_obj_vector(0);
if(effectObj){
local colObj = sq_GetCNRDObjectToCollisionObject(effectObj);
colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
}
break;
case 7:
if(obj.isMyControlObject()) sq_SetMyShake(obj,8,500);
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEADLYCAPELASTEXPLOSION);
break;
}
local speedRate = 1.0;
if(sq_GetIntData(obj, SKILL_DARKEMPLER_DEADLYCAPE, 6) > 0) speedRate = 1.2;
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate);
}
function onEndCurrentAni_DeadlyCape_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(obj.getVar("deadlycape_target").get_obj_vector_size() < 1){
local effectObj = obj.getVar("deadlycape_effect").get_obj_vector(0);
if(effectObj){
local colObj = sq_GetCNRDObjectToCollisionObject(effectObj);
colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");
}
obj.sq_SetXScrollStop(100);
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DEADLYCAPE, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 1:
case 2:
case 3:
case 4:
case 5:
if(obj.getVar("DeadlyCapeCount").get_vector(0) > obj.getVar("DeadlyCapeCount").get_vector(1)){
obj.sq_IntVectClear();
obj.sq_IntVectPush(6);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DEADLYCAPE, STATE_PRIORITY_IGNORE_FORCE, true);
return;
}
obj.sq_IntVectClear();
if(subState == 5) obj.sq_IntVectPush(1);
else obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DEADLYCAPE, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 6:
obj.sq_IntVectClear();
obj.sq_IntVectPush(7);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DEADLYCAPE, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 7:
obj.sq_SetXScrollStop(100);
local size = obj.getVar("deadlycape_target").get_obj_vector_size();
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("deadlycape_target").get_obj_vector(i);
if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/4_darktempler/deadlycape/ap_deadlycape.nut");
}
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onProcCon_DeadlyCape_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
case 2:
case 3:
case 4:
case 5:
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){
obj.sq_SetXScrollStop(100);
obj.sq_IntVectClear();
obj.sq_IntVectPush(6);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DEADLYCAPE, STATE_PRIORITY_IGNORE_FORCE, true);
}
break;
}
}
function onKeyFrameFlag_DeadlyCape_bykk(obj, flagIndex)
{
local subState = obj.getSkillSubState();
switch(flagIndex){
case 0:
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_DEADLYCAPE, SKILL_DARKEMPLER_DEADLYCAPE, 1, 1.0);
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,137,0,68,obj.getDirection(),4,SKILL_DARKEMPLER_DEADLYCAPE,2,totalDamage,0,0,0,0,0,0,0,1);
break;
case 1:
sq_SetMyShake(obj,3,50);
switch(subState){
case 1:
case 2:
case 3:
case 4:
case 5:
sq_AddDrawOnlyAniFromParent(obj,"character/swordman/effect/animation/atdeadlycape/att/loop/att"+subState+"_glow.ani",137,-1,68);
sq_AddDrawOnlyAniFromParent(obj,"character/swordman/effect/animation/atdeadlycape/att/loop/att_back_black1.ani",137,-1,68);
break;
}
break;
case 10:
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,137,0,68,obj.getDirection(),4,SKILL_DARKEMPLER_DEADLYCAPE,1,0,0,0,0,0,0,0,0,1);
break;
}
}
function onAttack_DeadlyCape_bykk(obj, damager, boundingBox, isStuck)
{
local subState = obj.getSkillSubState();
switch(subState){
case 0:
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
obj.getVar("deadlycape_target").push_obj_vector(damager);
if(!sq_IsFixture(damager)){// && sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager)
local apdPath = "character/atswordman/4_darktempler/deadlycape/ap_deadlycape.nut";
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true);
sq_HoldAndDelayDie(damager, obj, true, true, true, 0, 100, ENUM_DIRECTION_NEUTRAL, AddAppendage);
}
}
break;
}
}
function onEndState_DeadlyCape(obj, newState)
{
if(!obj) return;
if(newState != SKILL_DARKEMPLER_DEADLYCAPE){
obj.sq_SetXScrollStop(0);
local size = obj.getVar("deadlycape_target").get_obj_vector_size();
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("deadlycape_target").get_obj_vector(i);
if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/4_darktempler/deadlycape/ap_deadlycape.nut");
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Destroyer
function checkExecutableSkill_Destroyer_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_DESTROYER);
if(isUse){
obj.sq_IntVectClear();
if(obj.getState() == 6) obj.sq_IntVectPush(1);
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DESTROYER, STATE_PRIORITY_IGNORE_FORCE, true);
obj.getVar("DestroyerCount").setInt(10,0);
local countMax = sq_GetIntData(obj, SKILL_DARKEMPLER_DESTROYER, 1);
if(sq_GetIntData(obj, SKILL_DARKEMPLER_DESTROYER, 12) > 0 || DESTROYER_STONE > 0) countMax = countMax * 2;//护石
obj.getVar("DestroyerCount").setInt(11,countMax);
return 1;
}
return 0;
}
function checkCommandEnable_Destroyer_bykk(obj)
{
if (!obj) return 0;
return 1;
}
function onSetState_Destroyer_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
obj.sq_ZStop();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DESTROYERJUMP);
sq_GetCurrentAnimation(obj).setSpeedRate(300.0);
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DESTROYERSTART);
obj.setTimeEvent(1,60,-1,false);
break;
case 2:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DESTROYERLOOP);
break;
case 3:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DESTROYEREXRAYSTART_BODY);
break;
case 4:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DESTROYEREXRAYSTART_BODY);
break;
case 5:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DESTROYEREXRAYSTART_BODY);
break;
}
if(subState != 0){
local speedRate = 1.0;
if(sq_GetIntData(obj, SKILL_DARKEMPLER_DESTROYER, 12) > 0 || DESTROYER_STONE > 0) speedRate = 2.0;
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate);
}
else{
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(false);
obj.sq_SetXScrollStart(350, delaySum);
}
if(subState == 3){
local totalDamage = (obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_DESTROYER, -1, 1, 1.0).tofloat() * 2.25 + 759).tointeger();
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(0,0);
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,75,0,sq_GetZPos(obj) - 130,obj.getDirection(),4,SKILL_DARKEMPLER_DESTROYER,2,totalDamage,delay,0,0,0,0,0,0,1);
}
}
function onTimeEvent_Destroyer_bykk(obj, timeEventIndex, timeEventCount)
{
if(!obj) return;
switch(timeEventIndex){
case 1:
local sizeRate = sq_GetIntData(obj, SKILL_DARKEMPLER_DESTROYER, 2).tofloat() / 120.0;
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/atswordman_bykk/darktempler/animation/atdestroyer/boom/boom_00_07.ani",sq_getRandom(100,(600.0 * sizeRate).tointeger()),sq_getRandom(-50,20),-sq_GetZPos(obj));
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/atswordman_bykk/darktempler/animation/atdestroyer/boom/boom_00_07.ani",sq_getRandom(100,(600.0 * sizeRate).tointeger()),sq_getRandom(0,50),-sq_GetZPos(obj));
break;
}
}
function onProcCon_Destroyer_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(false);
local CelXpos = sq_GetAccel(obj.getZPos(), 200, obj.sq_GetStateTimer(), delaySum, false);
sq_setCurrentAxisPos(obj, 2, CelXpos);
break;
}
}
function onEndCurrentAni_Destroyer_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DESTROYER, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DESTROYER, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 3:
case 4:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DESTROYER, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 5:
obj.sq_SetXScrollStop(200);
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(6, STATE_PRIORITY_IGNORE_FORCE, true);
local increaseCount = sq_GetIntData(obj, SKILL_DARKEMPLER_DESTROYER, 36);
darkEmpler_Evolve(obj,increaseCount,0);
return;
}
}
function onKeyFrameFlag_Destroyer_bykk(obj, flagIndex)
{
if (!obj) return;
local count = obj.getVar("DestroyerCount").getInt(10);
if(count >= obj.getVar("DestroyerCount").getInt(11)){
obj.removeAllTimeEvent();
if(sq_GetIntData(obj, SKILL_DARKEMPLER_DESTROYER, 12) > 0 || DESTROYER_STONE > 0){
obj.sq_IntVectClear();
obj.sq_IntVectPush(3);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DESTROYER, STATE_PRIORITY_IGNORE_FORCE, true);
return;
}
obj.sq_SetXScrollStop(200);
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(6, STATE_PRIORITY_IGNORE_FORCE, true);
local increaseCount = sq_GetIntData(obj, SKILL_DARKEMPLER_DESTROYER, 36);
darkEmpler_Evolve(obj,increaseCount,0);
return;
}
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_DESTROYER, -1, 1, 1.0);
local sizeRate = sq_GetIntData(obj, SKILL_DARKEMPLER_DESTROYER, 2).tofloat() / 120.0;
switch(flagIndex){
case 0:
case 2:
case 4:
if(sq_GetIntData(obj, SKILL_DARKEMPLER_DESTROYER, 12) > 0 || DESTROYER_STONE > 0) totalDamage = totalDamage / 2;
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,-sq_GetZPos(obj),obj.getDirection(),4,SKILL_DARKEMPLER_DESTROYER,1,totalDamage,(sizeRate*100).tointeger(),0,0,0,0,0,0,1);
obj.getVar("DestroyerCount").setInt(10, count + 1);
break;
case 1:
case 3:
case 5:
if(sq_GetIntData(obj, SKILL_DARKEMPLER_DESTROYER, 12) > 0 || DESTROYER_STONE > 0){
totalDamage = totalDamage / 2;
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,-sq_GetZPos(obj),obj.getDirection(),4,SKILL_DARKEMPLER_DESTROYER,1,totalDamage,(sizeRate*100).tointeger(),0,0,0,0,0,0,1);
obj.getVar("DestroyerCount").setInt(10, count + 1);
}
break;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//DeusExray
function checkExecutableSkill_DeusExray_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_DEUSEXRAY);
if (isUse){
obj.sq_IsEnterSkillLastKeyUnits(SKILL_DARKEMPLER_DEUSEXRAY);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DEUSEXRAY, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function checkCommandEnable_DeusExray_bykk(obj)
{
if (!obj) return 0;
return 1;
}
function onSetState_DeusExray_bykk(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_StopMove();
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEUSEXRAY_BODY1);
obj.sq_PlaySound("SW_EXRAY_01");
obj.getVar("deuexray_count").setInt(10,0);
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,180,0,70,obj.getDirection(),4,SKILL_DARKEMPLER_DEUSEXRAY,1,0,0,0,0,0,0,0,0,0);
if(sq_GetIntData(obj, SKILL_DARKEMPLER_DEUSEXRAY, 4) > 0 || DEUSEXRAY_STONE > 0){
sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/darktempler/animation/atdeusexray/talisman/spirit_talisman_spirit_04a.ani", 180, 0, 70);
}
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEUSEXRAY_BODY2);//蓄氣動作
obj.getVar("deusexrayb").setBool(0, true);
local interval = sq_GetIntData(obj, SKILL_DARKEMPLER_DEUSEXRAY, 0);
local soulMax = sq_GetIntData(obj, SKILL_DARKEMPLER_DEUSEXRAY, 1);
local loadSlot = obj.sq_GetSkillLoad(SKILL_DARKEMPLER_EVOLVE);
if(!loadSlot) return;
local soulnum = loadSlot.getRemainLoadNumber();
if(soulnum < soulMax) soulMax = soulnum;
obj.setTimeEvent(1,interval,soulMax,false);
break;
case 2:
// if(obj.isMyControlObject()) sq_SetMyShake(obj,8,400);
obj.removeAllTimeEvent();
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DEUSEXRAY_BODY3);//引爆
local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_DEUSEXRAY);
local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_DEUSEXRAY, 0, skill_level);
local addRate = sq_GetLevelData(obj, SKILL_DARKEMPLER_DEUSEXRAY, 3, skill_level) * 10 / 100;
local deuexray_count = obj.getVar("deuexray_count").getInt(10);
if(deuexray_count > 0) totalDamage = totalDamage * (100 + deuexray_count * addRate) / 100;
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,180,0,70,obj.getDirection(),4,SKILL_DARKEMPLER_DEUSEXRAY,2,totalDamage,0,0,0,0,0,0,0,1);
if(sq_GetIntData(obj, SKILL_DARKEMPLER_DEUSEXRAY, 4) > 0 || DEUSEXRAY_STONE > 0){
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,-50,-30,120,obj.getDirection(),4,SKILL_DARKEMPLER_DEUSEXRAY,3,totalDamage * 3 / 100,0,0,0,0,0,0,0,1);
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,-50,30,120,obj.getDirection(),4,SKILL_DARKEMPLER_DEUSEXRAY,3,totalDamage * 3 / 100,0,0,0,0,0,0,0,1);
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,-50,-30,20,obj.getDirection(),4,SKILL_DARKEMPLER_DEUSEXRAY,3,totalDamage * 3 / 100,0,0,0,0,0,0,0,1);
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,-50,30,20,obj.getDirection(),4,SKILL_DARKEMPLER_DEUSEXRAY,3,totalDamage * 3 / 100,0,0,0,0,0,0,0,1);
}
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_DeusExray_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState)
{
case 0:
if(sq_GetIntData(obj, SKILL_DARKEMPLER_DEUSEXRAY, 4) > 0 || DEUSEXRAY_STONE > 0){
local chargeObj = obj.getVar("deusexray").get_obj_vector(0);
if(chargeObj){
local colObj = sq_GetCNRDObjectToCollisionObject(chargeObj);
colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");
}
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DEUSEXRAY, STATE_PRIORITY_IGNORE_FORCE, true);
local soulMax = sq_GetIntData(obj, SKILL_DARKEMPLER_DEUSEXRAY, 1);
local loadSlot = obj.sq_GetSkillLoad(SKILL_DARKEMPLER_EVOLVE);
if(!loadSlot) break;
local soulnum = loadSlot.getRemainLoadNumber();
if(soulnum < soulMax) soulMax = soulnum;
darkEmpler_Evolve(obj, 0, soulMax);
obj.getVar("deuexray_count").setInt(10, soulMax);
break;
}
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DEUSEXRAY, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onProcCon_DeusExray_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
if(subState == 1){
local bDownKey = obj.isDownSkillLastKey()
if(!bDownKey){
local chargeObj = obj.getVar("deusexray").get_obj_vector(0);
if(chargeObj){
local colObj = sq_GetCNRDObjectToCollisionObject(chargeObj);
colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");
}
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DEUSEXRAY, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
}
function onKeyFrameFlag_DeusExray_bykk(obj, flagIndex)
{
if (!obj) return;
switch(flagIndex){
case 1:
sq_flashScreen(obj,0, 80, 0, 255, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK);
sq_flashScreen(obj,0, 0, 160,255, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER);
break;
}
}
function onTimeEvent_DeusExray_bykk(obj, timeEventIndex, timeEventCount)
{
switch(timeEventIndex){
case 1:
local count = timeEventCount;
if(timeEventCount > 10) count = timeEventCount % 10;
sq_AddDrawOnlyAniFromParent(obj,"character/swordman/effect/animation/atdeusexray/spirit/spirit_"+timeEventCount.tostring()+"b.ani",180,0,70);
sq_AddDrawOnlyAniFromParent(obj,"character/swordman/effect/animation/atdeusexray/spirit/spirit_"+(timeEventCount+10).tostring()+"b.ani",180,0,70);
sq_AddDrawOnlyAniFromParent(obj,"character/swordman/effect/animation/atdeusexray/spirit/spirit_"+(timeEventCount+20).tostring()+"b.ani",180,0,70);
darkEmpler_Evolve(obj,0,1);
obj.getVar("deuexray_count").setInt(10,obj.getVar("deuexray_count").getInt(10) + 1);
break;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Doomsday
function checkExecutableSkill_Doomsday_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_DOOMSDAY);
if(isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DOOMSDAY, STATE_PRIORITY_IGNORE_FORCE, true);
obj.getVar("DoomsdayEnermy").clear_vector();
local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_DOOMSDAY);
if(skill_level >= 3){
local time = sq_GetLevelData(obj, SKILL_DARKEMPLER_DOOMSDAY, 5, skill_level);
local hitrate = sq_GetLevelData(obj, SKILL_DARKEMPLER_DOOMSDAY, 4, skill_level)/10;
local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_HIT_RATE, false, hitrate.tofloat(), 0);
if(ap){
ap.getAppendageInfo().setValidTime(time);
ap.sq_Append(obj, obj);
}
}
return 1;
}
return 0;
}
function checkCommandEnable_Doomsday_bykk(obj)
{
if (!obj) return 0;
return 1;
}
function onSetState_Doomsday_bykk(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(ANIMATION_DARKEMPLER_DOOMSDAYBODYCASTATTACK);
obj.sq_PlaySound("SW_DOOMSDAY");
local bonusRate = 1.0;
local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_DOOMSDAY);
if(skill_level >= 6) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DARKEMPLER_DOOMSDAY, 10, skill_level).tofloat() / 100.0;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_DOOMSDAY, SKILL_DARKEMPLER_DOOMSDAY, 0, bonusRate);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 119));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
obj.getVar("doomsday_move").setInt(10,sq_GetXPos(obj));
obj.getVar("doomsday_move").setInt(11,100);
local appendage = sq_AttractToMe(obj, 1500, 100, 1000);
obj.getVar("doomsday").setAppendage(0,appendage);//设置ap
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DOOMSDAYBODYATTACK1_BODY);
local bonusRate = 1.0;
local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_DOOMSDAY);
if(skill_level >= 6) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DARKEMPLER_DOOMSDAY, 10, skill_level).tofloat() / 100.0;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_DOOMSDAY, SKILL_DARKEMPLER_DOOMSDAY, 1, bonusRate);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 120));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
case 2:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DOOMSDAYBODYATTACK2_BODY);
break;
case 3:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DOOMSDAYBODYATTACK3_BODY);
break;
case 4:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DOOMSDAYBODYREADYFINISHATTACK);
break;
case 5:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DOOMSDAYBODYFINISHFIRST_BODY);
break;
case 6:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DOOMSDAYBODYFINISHSECOND_BODY);
break;
case 7:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_DOOMSDAYBODYFINISHLAST_BODY);
local bonusRate = 1.0;
local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_DOOMSDAY);
if(skill_level >= 6) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DARKEMPLER_DOOMSDAY, 10, skill_level).tofloat() / 100.0;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_DOOMSDAY, SKILL_DARKEMPLER_DOOMSDAY, 9, bonusRate);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 123));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
obj.getVar("doomsday_move").setInt(10,sq_GetXPos(obj));
obj.getVar("doomsday_move").setInt(11,500);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_Doomsday_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_DOOMSDAY, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 7:
if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_DOOMSDAY) >= 9){
local aptime = sq_GetLevelData(obj, SKILL_DARKEMPLER_DOOMSDAY, 8, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_DOOMSDAY));
local apdPath = "character/atswordman/4_darktempler/doomsday/ap_doomsdaybuff.nut";
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath , false);
appendage.sq_SetValidTime(aptime);
appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_DARKEMPLER_DOOMSDAY, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_DOOMSDAY));
appendage.setEnableIsBuff(true);
CNSquirrelAppendage.sq_Append(appendage, obj, obj, true);
}
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onTimeEvent_Doomsday_bykk(obj, timeEventIndex, timeEventCount)
{
if(!obj) return;
switch(timeEventIndex){
case 1: obj.resetHitObjectList(); break;
case 10:
local addRate = 0;
if(sq_GetSkillLevel(obj, 74)>5) addRate = obj.sq_GetLevelData(74, 10, sq_GetSkillLevel(obj, 74))/100.0;
sq_SetMyShake(obj,6,500);
sq_flashScreen(obj, 10, 50, 10, 255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
obj.sq_StartWrite();
obj.sq_WriteDword(74);
obj.sq_WriteDword(0);
obj.sq_WriteDword(obj.sq_GetBonusRateWithPassive(74, -1, 0, getATSwordmanBonus(obj,1.0,74)+addRate));
obj.sq_WriteDword(obj.sq_GetBonusRateWithPassive(74, -1, 9, getATSwordmanBonus(obj,1.0,74)+addRate));
obj.sq_SendCreatePassiveObjectPacket(24381, 0, 200, 0, 74);
break;
case 11:
local addRate = 0;
if(sq_GetSkillLevel(obj, 74)>5)
addRate = obj.sq_GetLevelData(74, 10, sq_GetSkillLevel(obj, 74))/100.0;
obj.sq_SetCurrentAttackBonusRate(obj.sq_GetBonusRateWithPassive(74, -1, 3, getATSwordmanBonus(obj,1.0,74)+addRate));
for(local i = 0; i < obj.getVar("DoomsdayEnermy").size_vector(); i++)
{
local object = sq_GetObjectByObjectId(obj, obj.getVar("DoomsdayEnermy").get_vector(i));
local z = object.getZPos() + object.getObjectHeight()/2;
local aniPPath = "character/swordman/effect/animation/atsouldrain/loopboom_01.ani";
DarktemplerCreateAniPooledObj(object,aniPPath,true,true,object.getXPos(), object.getYPos(),z, 1.0);
sq_SendHitObjectPacket(obj,object,0,0,z);
}
break;
}
}
function onProc_Doomsday_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
local pAni = obj.getCurrentAnimation();
local currentT = sq_GetCurrentTime(pAni);
local fireT1 = pAni.getDelaySum(0, 8);
local fireT2 = pAni.getDelaySum(9, 11);
if(currentT <= fireT1) return;
local appendage = obj.getVar("doomsday").getAppendage(0);
if(appendage) appendage.setValid(false);
if(currentT > fireT1 + fireT2) return;
local srcX = obj.getVar("doomsday_move").getInt(10);
local MoveX = obj.getVar("doomsday_move").getInt(11);
local v = sq_GetUniformVelocity(0, MoveX, currentT - fireT1, fireT2);
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);
if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);
else{
obj.getVar("doomsday_move").setInt(10,sq_GetXPos(obj));
obj.getVar("doomsday_move").setInt(11,0);
}
break;
case 7:
local pAni = obj.getCurrentAnimation();
local currentT = sq_GetCurrentTime(pAni);
local fireT = pAni.getDelaySum(0,5);
local srcX = obj.getVar("doomsday_move").getInt(10);
local MoveX = obj.getVar("doomsday_move").getInt(11);
local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT);
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);
if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);
else{
obj.getVar("doomsday_move").setInt(10,sq_GetXPos(obj));
obj.getVar("doomsday_move").setInt(11,0);
}
break;
}
}
function onAttack_Doomsday_bykk(obj, damager, boundingBox, isStuck)
{
if (!obj) return false;
local subState = obj.getSkillSubState();
if (!obj.isMyControlObject()) return false;
switch(subState){
case 0:
if(damager.isObjectType(OBJECTTYPE_ACTIVE) && !sq_IsFixture(damager)){
local apdPath = "character/atswordman/4_darktempler/doomsday/ap_doomsday.nut";
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, SKILL_DARKEMPLER_DOOMSDAY, false, apdPath, true);
sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, AddAppendage);
sq_MoveToAppendageForce(damager, obj, obj, 526, 0, 0, 300, true, AddAppendage);
AddAppendage.sq_SetValidTime(3000);
}
break;
case 7:
if(damager.isObjectType(OBJECTTYPE_ACTIVE)) sq_AddDrawOnlyAniFromParent(damager, "character/swordman/effect/animation/atdoomsday/finishhiteffect.ani", 0, 1, sq_GetHeightObject(damager) / 3);
break;
}
}
function onKeyFrameFlag_Doomsday_bykk(obj, flagIndex)
{
switch(flagIndex){
case 10:
sq_flashScreen(obj, 30, 10, 70, 100, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj,2,100);
local pAni = obj.getCurrentAnimation();
local delaySum = pAni.getDelaySum(8,13);
obj.sq_SetXScrollStart(200, delaySum);
break;
case 11: sq_SetMyShake(obj,2,100); break;
case 12:
//[OFFSET] `forward` 0 0 0
break;
case 13:
sq_flashScreen(obj, 10, 20, 30, 100, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj,10,100);
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,326,-1,73,obj.getDirection(),4,SKILL_DARKEMPLER_DOOMSDAY,2,0,0,0,0,0,0,0,0,1);
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,326,-1,0,obj.getDirection(),4,SKILL_DARKEMPLER_DOOMSDAY,3,0,0,0,0,0,0,0,0,1);
//[OFFSET] `boom` 201 0 73
break;
case 14: sq_SetMyShake(obj,1,700); break;
case 15: sq_SetMyShake(obj,10,100); break;
case 16:
//[OFFSET] `backward` 0 0 0
break;
case 21:
obj.sq_SetXScrollStop(100);
sq_flashScreen(obj, 30, 50, 70, 100, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK);
sq_SetMyShake(obj,5,100);
//[OFFSET] `attack boom` 21 0 2
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/atswordman_bykk/darktempler/animation/atdoomsday/domehit01_01.ani",41,-1,73);
break;
case 31:
obj.resetHitObjectList();
sq_flashScreen(obj, 30, 50, 70, 100, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK);
sq_SetMyShake(obj,5,100);
sq_AddDrawOnlyAniFromParent(obj,"passiveobject/atswordman_bykk/darktempler/animation/atdoomsday/domehit02_03.ani",41,-1,73);
//[OFFSET] `attack boom` 0 0 -11
break;
case 41:
obj.resetHitObjectList();
sq_flashScreen(obj, 30, 50, 70, 100, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK);
sq_SetMyShake(obj,5,100);
//[OFFSET] `finish attack boom` 1 0 -9
break;
case 51:
sq_flashScreen(obj, 0, 180, 200, 255, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
local bonusRate = 1.0;
local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_DOOMSDAY);
if(skill_level >= 6) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DARKEMPLER_DOOMSDAY, 10, skill_level).tofloat() / 100.0;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_DOOMSDAY, SKILL_DARKEMPLER_DOOMSDAY, 3, bonusRate);
local hitMax = sq_GetIntData(obj, SKILL_DARKEMPLER_DOOMSDAY, 20);
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,5,1,5,obj.getDirection(),4,SKILL_DARKEMPLER_DOOMSDAY,1,totalDamage,hitMax,0,0,0,0,0,0,1);
local effectObj = obj.getVar("doomsday_effect").get_obj_vector(0);
if(effectObj){
local colObj = sq_GetCNRDObjectToCollisionObject(effectObj);
colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
}
local effectObj2 = obj.getVar("doomsday_effect_b").get_obj_vector(0);
if(effectObj2){
local colObj = sq_GetCNRDObjectToCollisionObject(effectObj2);
colObj.setValid(false);
}
//[OFFSET] `finish boom` 5 0 5
//[OFFSET] `finish attack boom` 2 0 -19
break;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Immolation
function checkExecutableSkill_Immolation_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_IMMOLATION);
if (isUse){
if(sq_GetIntData(obj, SKILL_DARKEMPLER_IMMOLATION, 9) > 0 || IMMOLATION_STONE > 0){
obj.sq_IntVectClear();
obj.sq_IntVectPush(3);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_IMMOLATION, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
obj.sq_IsEnterSkillLastKeyUnits(SKILL_DARKEMPLER_IMMOLATION);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_IMMOLATION, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function checkCommandEnable_Immolation_bykk(obj)
{
if (!obj) return 0;
return 1;
}
function onSetState_Immolation_bykk(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(ANIMATION_DARKEMPLER_IMMOLATIONCAST);
local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_IMMOLATION);
local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_IMMOLATION, 0, skill_level);
local level = sq_GetLevelData(obj, SKILL_DARKEMPLER_IMMOLATION, 1, skill_level);
local time = sq_GetIntData(obj, SKILL_DARKEMPLER_IMMOLATION, 1);
local hitTime = sq_GetIntData(obj, SKILL_DARKEMPLER_IMMOLATION, 3);
local vespers_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS);
if(vespers_level > 0){
local decreaseRate = sq_GetLevelData(obj, SKILL_DARKEMPLER_VESPERS, 3, vespers_level);
hitTime = (hitTime * (100.0 + decreaseRate.tofloat()) / 100.0).tointeger();
}
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,-1,0,obj.getDirection(),4,SKILL_DARKEMPLER_IMMOLATION,2,totalDamage,hitTime,level,time,0,0,0,0,1);
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_IMMOLATIONLOOP);
break;
case 2:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_IMMOLATIONEND);
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 delay = currentAni.getDelaySum(0,0);
obj.setTimeEvent(2, delay, 1, false);
sq_AddDrawOnlyAniFromParent(obj,"character/swordman/effect/animation/atimmolation/end_magiccircle_01.ani",0,0,0);
break;
case 3:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_IMMOLATIONFIXINGCAST);
local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_IMMOLATION);
local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_IMMOLATION, 0, skill_level);
local totalDamage2 = sq_GetLevelData(obj, SKILL_DARKEMPLER_IMMOLATION, 3, skill_level);
if(sq_GetIntData(obj, SKILL_DARKEMPLER_IMMOLATION, 9) > 0 || IMMOLATION_STONE > 0){
totalDamage2 = (totalDamage2.tofloat() * 1.27 * 1.19).tointeger()
}
local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger();
local level = sq_GetLevelData(obj, SKILL_DARKEMPLER_IMMOLATION, 1, skill_level);
local time = sq_GetIntData(obj, SKILL_DARKEMPLER_IMMOLATION, 1);
local hitTime = sq_GetIntData(obj, SKILL_DARKEMPLER_IMMOLATION, 3);
local lifeTime = sq_GetIntData(obj, SKILL_DARKEMPLER_IMMOLATION, 6);
local vespers_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS);
if(vespers_level > 0){
local decreaseRate = sq_GetLevelData(obj, SKILL_DARKEMPLER_VESPERS, 3, vespers_level);
hitTime = (hitTime * (100.0 + decreaseRate.tofloat()) / 100.0).tointeger();
lifeTime = (lifeTime * (100.0 + decreaseRate.tofloat()) / 100.0).tointeger();
}
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,250,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_IMMOLATION,3,totalDamage,hitTime,level,time,damageRate,lifeTime,0,0,1);
break;
}
local vespers_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS);
if(vespers_level > 0 && subState != 2){
local decreaseRate = sq_GetLevelData(obj, SKILL_DARKEMPLER_VESPERS, 3, vespers_level);
local currentAni = obj.getCurrentAnimation();
sq_ClearAttackBox(currentAni);
local speedRate = 10000.0 / (100 + decreaseRate).tofloat();
currentAni.setSpeedRate(speedRate);
local attackObj = obj.getVar("immolation_magiccircle").get_obj_vector(0);
if(attackObj){
local colObj = sq_GetCNRDObjectToCollisionObject(attackObj);
local pAni = colObj.getCurrentAnimation();
pAni.setSpeedRate(speedRate);
}
}
}
function onProcCon_Immolation_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
local stateTime = obj.sq_GetStateTimer();
local minTime = sq_GetIntData(obj, SKILL_DARKEMPLER_IMMOLATION, 6);
local MaxTime = sq_GetIntData(obj, SKILL_DARKEMPLER_IMMOLATION, 2);
local vespers_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS);
if(vespers_level > 0){
local decreaseRate = sq_GetLevelData(obj, SKILL_DARKEMPLER_VESPERS, 3, vespers_level);
minTime = (minTime * (100.0 + decreaseRate.tofloat()) / 100.0).tointeger();
MaxTime = (MaxTime * (100.0 + decreaseRate.tofloat()) / 100.0).tointeger();
}
if(stateTime < minTime) return;
local bDownKey = obj.isDownSkillLastKey();
if(!bDownKey || stateTime >= MaxTime){
if(stateTime >= MaxTime) obj.getVar("immolation").setBool(0, true);
local attackObj = obj.getVar("immolation_magiccircle").get_obj_vector(0);
if(attackObj){
local colObj = sq_GetCNRDObjectToCollisionObject(attackObj);
colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
}
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_IMMOLATION, STATE_PRIORITY_IGNORE_FORCE, true);
}
break;
}
}
function onAttack_Immolation_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj) return;
local level = obj.sq_GetLevelData(168, 1, sq_GetSkillLevel(obj, 168));
sq_sendSetActiveStatusPacket(damager, obj, ACTIVESTATUS_SLOW, 100.0, level, false, sq_GetIntData(obj, 168, 1));
local path = "character/atswordman/4_darktempler/immolation/ap_immolation.nut";
local forceap = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, path, true);
if(sq_IsHoldable(obj,damager) && !sq_IsFixture(damager))
if(forceap){
sq_MoveToAppendageForce(damager, obj, obj, 0, 0, damager.getZPos(), 3000, true, forceap,true);
local appendageInfo = forceap.getAppendageInfo();
appendageInfo.setValidTime(600);
}
}
function onTimeEvent_Immolation_bykk(obj, timeEventIndex, timeEventCount)
{
if(!obj) return;
switch(timeEventIndex){
case 1: obj.resetHitObjectList(); break;
case 2:
local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_IMMOLATION);
local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_IMMOLATION, 2, skill_level);
if(obj.getVar("immolation").getBool(0)) totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_IMMOLATION, 3, skill_level);
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,-1,73,obj.getDirection(),4,SKILL_DARKEMPLER_IMMOLATION,1,totalDamage,0,0,0,0,0,0,0,1);
break;
}
}
function onEndCurrentAni_Immolation_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
local attackObj = obj.getVar("immolation_magiccircle").get_obj_vector(0);
if(attackObj){
local colObj = sq_GetCNRDObjectToCollisionObject(attackObj);
colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
}
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_IMMOLATION, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 2:
case 3:
obj.getVar("immolation").setBool(0, false);
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Jihad
function checkExecutableSkill_Jihad_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_JIHAD);
if (isUse){
AIMPOINT_ATSWORDMAN = SKILL_DARKEMPLER_JIHAD;
obj.sq_IsEnterSkillLastKeyUnits(SKILL_DARKEMPLER_JIHAD);
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_JIHAD, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function checkCommandEnable_Jihad_bykk(obj)
{
if (!obj) return 0;
return 1;
}
function onSetState_Jihad_bykk(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(ANIMATION_DARKEMPLER_JIHAD_START_BODY);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
obj.sq_PlaySound("SW_JIHAD");
obj.getVar("jihad_count").setInt(10,0);
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(false);
sq_StartDrawCastGauge(obj, delaySum, true);
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_JIHAD_CASTING_BODY);
local offsetX = 100;
offsetX = obj.sq_GetDistancePos(obj.getXPos(), obj.sq_GetDirection(), offsetX);
local vX = 500;
local vY = 250;
obj.sq_AddAimPointMark(offsetX, obj.getYPos(), vX, vY);
local interval = sq_GetIntData(obj, SKILL_DARKEMPLER_JIHAD, 0);
local soulMax = sq_GetLevelData(obj, SKILL_DARKEMPLER_JIHAD, 2, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_JIHAD));
local loadSlot = obj.sq_GetSkillLoad(SKILL_DARKEMPLER_EVOLVE);
if(!loadSlot) break;
local soulnum = loadSlot.getRemainLoadNumber();
if(soulnum < soulMax) soulMax = soulnum;
obj.setTimeEvent(1,interval,soulMax,false);
break;
case 2:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_JIHAD_CASTINGEND_BODY);
sq_flashScreen(obj, 400, 0, 0, 191, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
local isStone = obj.sq_GetVectorData(datas, 1);
if(isStone > 0){
obj.getVar("targetBoss").clear_obj_vector();
obj.getVar("targetNamed").clear_obj_vector();
obj.getVar("targetNormal").clear_obj_vector();
local objectManager = obj.getObjectManager();
local objectNumber = objectManager.getCollisionObjectNumber();
for(local i = 0; i < objectNumber; 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("targetBoss").push_obj_vector(activeObj);
else if(sq_IsNamed(activeObj)) obj.getVar("targetNamed").push_obj_vector(activeObj);
else obj.getVar("targetNormal").push_obj_vector(activeObj);
}
}
local offset_x = sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 250);
local offset_y = sq_GetYPos(obj);
if(obj.getVar("targetBoss").get_obj_vector_size() > 0){
local targetObj = obj.getVar("targetBoss").get_obj_vector(0);
if(targetObj){
offset_x = sq_GetXPos(targetObj) - sq_GetXPos(obj);
offset_y = sq_GetYPos(targetObj) - sq_GetYPos(obj);
}
}
else if(obj.getVar("targetNamed").get_obj_vector_size() > 0){
local targetObj = obj.getVar("targetNamed").get_obj_vector(0);
if(targetObj){
offset_x = sq_GetXPos(targetObj) - sq_GetXPos(obj);
offset_y = sq_GetYPos(targetObj) - sq_GetYPos(obj);
}
}
else if(obj.getVar("targetNormal").get_obj_vector_size() > 0){
local targetObj = obj.getVar("targetNormal").get_obj_vector(0);
if(targetObj){
offset_x = sq_GetXPos(targetObj) - sq_GetXPos(obj);
offset_y = sq_GetYPos(targetObj) - sq_GetYPos(obj);
}
}
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_JIHAD, SKILL_DARKEMPLER_JIHAD, 0, 1.0) + 100;
local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_JIHAD, SKILL_DARKEMPLER_JIHAD, 1, 1.0) + 100;
local addRate = sq_GetLevelData(obj, SKILL_DARKEMPLER_JIHAD, 3, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_JIHAD)) / 10;
local interval = sq_GetIntData(obj, SKILL_DARKEMPLER_JIHAD, 0);
local soulMax = sq_GetLevelData(obj, SKILL_DARKEMPLER_JIHAD, 2, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_JIHAD));
local loadSlot = obj.sq_GetSkillLoad(SKILL_DARKEMPLER_EVOLVE);
if(loadSlot){
local soulnum = loadSlot.getRemainLoadNumber();
if(soulnum < soulMax) soulMax = soulnum;
if(soulMax > 0){
darkEmpler_Evolve(obj,0,soulMax);
totalDamage = (totalDamage.tofloat() * (100 + soulMax * addRate).tofloat() / 100.0).tointeger();
totalDamage2 = (totalDamage2.tofloat() * (100 + soulMax * addRate).tofloat() / 100.0).tointeger();
}
}
local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger();
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,offset_x,offset_y,0,ENUM_DIRECTION_RIGHT,4,SKILL_DARKEMPLER_JIHAD,1,totalDamage,damageRate,0,0,0,0,0,0,1);
createOnlyDrawObject_AtSwordMan_bykk(obj,"passiveobject/atswordman_bykk/darktempler/animation/atjihad/jihad_summon_magiccirclea.ani",true,ENUM_DIRECTION_RIGHT,offset_x + sq_GetXPos(obj),offset_y + sq_GetYPos(obj), 0, ENUM_DRAWLAYER_BOTTOM);
}
break;
case 3:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_JIHAD_ATTACKBODY_A);
break;
}
}
function onEndState_Jihad_bykk(obj, new_state)
{
if(!obj) return;
if(new_state != SKILL_DARKEMPLER_JIHAD){
sq_EndDrawCastGauge(obj);
obj.sq_RemoveAimPointMark();
}
}
function onProc_Jihad_bykk(obj)
{
if(!obj) return;
local SubState = obj.getSkillSubState();
switch(SubState){
case 1:
local bDownKey = obj.isDownSkillLastKey();
if(!bDownKey){
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_JIHAD, STATE_PRIORITY_IGNORE_FORCE, true);
local Xpos = obj.sq_GetAimPosX(sq_GetXPos(obj), sq_GetYPos(obj), false) - sq_GetXPos(obj);
local Ypos = obj.sq_GetAimPosY(sq_GetXPos(obj), sq_GetYPos(obj), false) - sq_GetYPos(obj);
obj.sq_RemoveAimPointMark();
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_JIHAD, SKILL_DARKEMPLER_JIHAD, 0, 1.0) + 100;
local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_JIHAD, SKILL_DARKEMPLER_JIHAD, 1, 1.0) + 100;
local addRate = sq_GetLevelData(obj, SKILL_DARKEMPLER_JIHAD, 3, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_JIHAD)) / 10;
local jihad_count = obj.getVar("jihad_count").getInt(10);
if(jihad_count > 0){
totalDamage = (totalDamage.tofloat() * (100 + jihad_count * addRate).tofloat() / 100.0).tointeger();
totalDamage2 = (totalDamage2.tofloat() * (100 + jihad_count * addRate).tofloat() / 100.0).tointeger();
}
local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger();
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,Xpos,Ypos,0,ENUM_DIRECTION_RIGHT,4,SKILL_DARKEMPLER_JIHAD,1,totalDamage,damageRate,0,0,0,0,0,0,1);
createOnlyDrawObject_AtSwordMan_bykk(obj,"passiveobject/atswordman_bykk/darktempler/animation/atjihad/jihad_summon_magiccirclea.ani",true,ENUM_DIRECTION_RIGHT,Xpos + sq_GetXPos(obj),Ypos + sq_GetYPos(obj), 0, ENUM_DRAWLAYER_BOTTOM);
}
break;
}
}
function onEndCurrentAni_Jihad_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 2:
if(subState == 0 && (JIHAD_STONE > 0)){//sq_GetIntData(obj, SKILL_DARKEMPLER_JIHAD, 5) > 0 ||
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_JIHAD, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_JIHAD, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 3:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onTimeEvent_Jihad_bykk(obj, timeEventIndex, timeEventCount)
{
switch(timeEventIndex){
case 1:
darkEmpler_Evolve(obj,0,1);
obj.getVar("jihad_count").setInt(10,obj.getVar("jihad_count").getInt(10) + 1);
break;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Lacerthorns
function checkExecutableSkill_Lacerthorns_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_LACERTHORNS);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_LACERTHORNS, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function checkCommandEnable_Lacerthorns_bykk(obj)
{
if (!obj) return 0;
return 1;
}
function onSetState_Lacerthorns_bykk(obj, state, datas, isResetTimer)
{
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_ATLACERTHORNSCASTING_BODY);
obj.getVar("target_Lacerthorns").clear_obj_vector();
obj.sq_PlaySound("LACERTHORNS_CAST");
obj.sq_PlaySound("SW_LACERTHORNS_01");
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_ATLACERTHORNSSTARTMOTION_BODY);
local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_LACERTHORNS);
local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_LACERTHORNS, 0, skill_level);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 232));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atlacerthorns/atlacerthornsdash_00.ani", 0, 0, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atlacerthorns/atlacerthornsstartfront_00.ani", 0, 0, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atlacerthorns/atlacerthornsstartback_00.ani", 0, -1, -1);
break;
case 2:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_ATLACERTHORNSFINISH_BODY);
local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_LACERTHORNS);
local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_LACERTHORNS, 1, skill_level);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 231));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
obj.setTimeEvent(1, 100, 1, false);
obj.sq_PlaySound("LACERTHORNS_SUCCESS");
obj.sq_PlaySound("R_SW_LACERTHORNS_02");
sq_flashScreen(obj,0,0,30,191, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER);
if(obj.isMyControlObject()) sq_flashScreen(obj,0,0,30,178, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK);
sq_SetMyShake(obj, 20, 400);
break;
case 3:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_ATLACERTHORNSFAIL_BODY);
break;
}
}
function onEndCurrentAni_Lacerthorns_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_LACERTHORNS, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 1:
obj.sq_IntVectClear();
if(obj.getVar("target_Lacerthorns").get_obj_vector_size() > 0) obj.sq_IntVectPush(2);
else obj.sq_IntVectPush(3);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_LACERTHORNS, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 2:
case 3:
if(subState == 2){
local soulnum = sq_GetIntData(obj, SKILL_DARKEMPLER_LACERTHORNS, 11);
darkEmpler_Evolve(obj, soulnum, 0);
}
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onEndState_Lacerthorns_bykk(obj, new_state)
{
if(!obj) return;
if(new_state != SKILL_DARKEMPLER_LACERTHORNS){
//
}
}
function onEnterFrame_Lacerthorns(obj, frameIndex)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
switch(frameIndex){
case 3:
if(obj.isMyControlObject()) sq_flashScreen(obj,100,1000,0,178, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER);
break;
case 4:
sq_SetMyShake(obj, 15, 120);
break;
}
break;
}
}
function onTimeEvent_Lacerthorns_bykk(obj, timeEventIndex, timeEventCount)
{
switch(timeEventIndex){
case 1:
local size = obj.getVar("target_Lacerthorns").get_obj_vector_size();
for(local i = 0; i < size; i++){
local activeObj = obj.getVar("target_Lacerthorns").get_obj_vector(i);
if(activeObj){
sq_SendHitObjectPacket(obj,activeObj,0,0,sq_GetObjectHeight(activeObj) / 2);
CNSquirrelAppendage.sq_RemoveAppendage(activeObj, "character/atswordman/4_darktempler/lacerthorns/ap_lacerthorns.nut");
cearteSkillPassiveObj_AtSwordMan_bykk(obj,activeObj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,sq_GetObjectHeight(activeObj) / 2,obj.getDirection(),4,SKILL_DARKEMPLER_LACERTHORNS,1,0,0,0,0,0,0,0,0,0);
}
}
break;
}
}
function onAttack_Lacerthorns_bykk(obj, damager, boundingBox, isStuck)
{
local subState = obj.getSkillSubState();
switch(subState){
case 1:
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
obj.getVar("target_Lacerthorns").push_obj_vector(damager);
local apdPath = "character/atswordman/4_darktempler/lacerthorns/ap_lacerthorns.nut";
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true);
sq_HoldAndDelayDie(damager, obj, true, true, true, 0, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage);
sq_AddDrawOnlyAniFromParent(damager, "character/swordman/effect/animation/atlacerthorns/atlacerthornsshot_00.ani", 0, 0, sq_GetObjectHeight(damager) / 2);
}
break;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Madness
function checkExecutableSkill_Madness_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_MADNESS);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_MADNESS, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function checkCommandEnable_Madness_bykk(obj)
{
if (!obj) return 0;
local loadSlot = obj.sq_GetSkillLoad(SKILL_DARKEMPLER_EVOLVE);
if(!loadSlot) return 0;
local count = loadSlot.getRemainLoadNumber();
local mincount = obj.sq_GetLevelData(SKILL_DARKEMPLER_MADNESS, 0, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_MADNESS));
if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS) > 0){
local decase = obj.sq_GetLevelData(SKILL_DARKEMPLER_VESPERS, 1, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS));
mincount = (mincount*(100.0 - decase.tofloat()) / 100.0).tointeger();
}
if(count < mincount) return 0;
return 1;
}
function onSetState_Madness_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
switch(subState){
case 0:
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_MADNESS_BODY);
obj.sq_PlaySound("SW_MADNESS");
local currentAni = obj.getCurrentAnimation();
local DelaySum = currentAni.getDelaySum(false);
local castSum = currentAni.getDelaySum(0,7);
local expSum = currentAni.getDelaySum(0,7);
obj.sq_SetXScroll(300, castSum, DelaySum - castSum - expSum, expSum);
obj.getVar("madness_target").clear_obj_vector();
local loadSlot = obj.sq_GetSkillLoad(SKILL_DARKEMPLER_EVOLVE);
local mincount = obj.sq_GetLevelData(SKILL_DARKEMPLER_MADNESS, 0, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_MADNESS));
if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS) > 0){
local decase = obj.sq_GetLevelData(SKILL_DARKEMPLER_VESPERS, 1, sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS));
mincount = (mincount*(100.0 - decase.tofloat()) / 100.0).tointeger();
}
loadSlot.decreaseLoadCount(mincount);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_Madness_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onKeyFrameFlag_Madness_bykk(obj, flagIndex)
{
if (!obj) return false;
switch(flagIndex){
case 0://生成阵
sq_flashScreen(obj, 0, 60, 60, 204, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj, 5, 120);
local range = sq_GetIntData(obj, SKILL_DARKEMPLER_MADNESS, 0);
local currentAni = obj.getCurrentAnimation();
local DelaySum = currentAni.getDelaySum(8,22);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_MADNESS, SKILL_DARKEMPLER_MADNESS, 1, 1.0) + 100;
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,300,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_MADNESS,1,range,DelaySum,totalDamage,0,0,0,0,0,1);
break;
case 1://发射激光
local currentAni = obj.getCurrentAnimation();
local DelaySum = currentAni.getDelaySum(15,15);
local speedRate = 6000 / DelaySum;
local offsetX = [-30,25,85,120,80,-30,25,85,120,80];
local offsetZ = [150,145,112,60,30,150,145,112,60,30];
local disX = [580,560,490,440,375,340,290,330,280,260];
local disY = [15,-10,30,20,-20,-30,25,10,-15,-25];
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_MADNESS, SKILL_DARKEMPLER_MADNESS, 1, 1.0) + 100;
local range = sq_GetIntData(obj, SKILL_DARKEMPLER_MADNESS, 0);
for(local i = 0; i < 10; i++){
local disPosX = sq_GetDistancePos(sq_GetXPos(obj),obj.getDirection(),disX[i] - 150);
local disPosY = sq_GetYPos(obj) + disY[i];
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,offsetX[i],0,offsetZ[i],obj.getDirection(),4,SKILL_DARKEMPLER_MADNESS,2,speedRate,sq_getRandom(1,8),obj.getDirection(),disPosX,disPosY,0,0,0,1);
}
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,300,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_MADNESS,3,speedRate,totalDamage,range,0,0,0,0,0,1);
break;
case 3:
local attackObj = sq_GetCNRDObjectToCollisionObject(obj.getVar("madness").get_obj_vector(0));
local size = obj.getVar("madness_target").get_obj_vector_size();
break;
}
return true;
}
function onEndState_Madness_bykk(obj, new_state)
{
if(!obj) return;
if(new_state != SKILL_DARKEMPLER_MADNESS){
local attackObj = sq_GetCNRDObjectToCollisionObject(obj.getVar("madness").get_obj_vector(0));
if(attackObj) attackObj.setValid(false);
local size = obj.getVar("madness_target").get_obj_vector_size();
for(local i = 0; i < size; i++){
local activeObj = obj.getVar("madness_target").get_obj_vector(i);
if(activeObj) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, "character/atswordman/4_darktempler/madness/ap_madness.nut");
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Punishment
function checkExecutableSkill_Punishment_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_PUNISHMENT);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_PUNISHMENT, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function checkCommandEnable_Punishment_bykk(obj)
{
if (!obj) return 0;
return 1;
}
function onSetState_Punishment_bykk(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(ANIMATION_DARKEMPLER_PUNISHMENT_CASTING_BODY1);
obj.sq_PlaySound("SW_PUNISHMENT");
obj.sq_SetXScrollStart(400, 500);
obj.getVar("punishment_quick").setBool(0,false);
obj.getVar("punishment_base").setInt(10, sq_GetXPos(obj));
obj.getVar("punishment_target").clear_obj_vector();
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);
obj.getVar("punishment_speed").setInt(0, speedRate);
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_PUNISHMENT_ATTACK_MOTION1);
local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_PUNISHMENT);
local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_PUNISHMENT, 0, skill_level);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 115));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_PUNISHMENT,2,0,0,0,0,0,0,0,0,0);
obj.setTimeEvent(3,150,1,false);
break;
case 2:
obj.removeAllTimeEvent();
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_PUNISHMENT_FINISH_MOTION_BODY1);
obj.sq_PlaySound("SW_PUNISHMENT_FIN");
local pooledObj = createOnlyDrawObject_AtSwordMan_bykk(obj, "character/swordman/effect/animation/atpunishment/finish/atpunishment_finish_bottom1.ani",true,obj.getDirection(), sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), 350),sq_GetYPos(obj), 100, ENUM_DRAWLAYER_BOTTOM);
local pAni = pooledObj.getCurrentAnimation();
pAni.setImageRateFromOriginal(3.0, 1.2);
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(0,5);
obj.setTimeEvent(1, delaySum, 1, false);
local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_PUNISHMENT);
local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_PUNISHMENT, 1, skill_level);
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 116));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
obj.setTimeEvent(2, 1800, 1, false);
break;
}
}
function onTimeEvent_Punishment_bykk(obj, timeEventIndex, timeEventCount)
{
if(!obj) return;
switch(timeEventIndex){
case 0:
//sq_flashScreen(obj, 200, 100, 100, 255, sq_RGB(255,255,255), GRAPHICEFFECT_SPACE_DISTORT, ENUM_DRAWLAYER_CONTACT);
break;
case 1:
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atpunishment/finish/atpunishment_finish_top_eff2_dodge.ani", 350, 1, 100);
break;
case 2:
attack_Punishment_bykk(obj);
sq_SetMyShake(obj, 15, 500);
break;
case 3:
local inputConut = obj.getRapidInputFrequency();
inputConut = inputConut.tointeger();
local inputMax = 5;
local gapByInputMin = sq_GetIntData(obj,SKILL_DARKEMPLER_PUNISHMENT,4);
local gapByInputMax = sq_GetIntData(obj,SKILL_DARKEMPLER_PUNISHMENT,5);
if(inputConut >= inputMax){
obj.setTimeEvent(3, gapByInputMin, 1,false);
local currentAni = obj.getCurrentAnimation();
local speedRate = obj.getVar("punishment_speed").getInt(0) * 2;
currentAni.setSpeedRate(speedRate.tofloat());
obj.getVar("punishment_quick").setBool(0,true);
local passiveObj = obj.getVar("punishment_attack").get_obj_vector(0);
if(passiveObj){
local pAni = passiveObj.getCurrentAnimation();
pAni.setSpeedRate(speedRate.tofloat());
}
local passiveObj2 = obj.getVar("punishment_attack2").get_obj_vector(0);
if(passiveObj2){
local pAni = passiveObj2.getCurrentAnimation();
pAni.setSpeedRate(speedRate.tofloat());
}
local passiveObj3 = obj.getVar("punishment_attack3").get_obj_vector(0);
if(passiveObj3){
local pAni = passiveObj3.getCurrentAnimation();
pAni.setSpeedRate(speedRate.tofloat());
}
}
else{
obj.setTimeEvent(3, gapByInputMax, 1,false);
local currentAni = obj.getCurrentAnimation();
local speedRate = obj.getVar("punishment_speed").getInt(0);
currentAni.setSpeedRate(speedRate.tofloat());
local passiveObj = obj.getVar("punishment_attack").get_obj_vector(0);
if(passiveObj){
local pAni = passiveObj.getCurrentAnimation();
pAni.setSpeedRate(speedRate.tofloat());
}
local passiveObj2 = obj.getVar("punishment_attack2").get_obj_vector(0);
if(passiveObj2){
local pAni = passiveObj2.getCurrentAnimation();
pAni.setSpeedRate(speedRate.tofloat());
}
local passiveObj3 = obj.getVar("punishment_attack3").get_obj_vector(0);
if(passiveObj3){
local pAni = passiveObj3.getCurrentAnimation();
pAni.setSpeedRate(speedRate.tofloat());
}
}
break;
}
}
function onProc_Punishment_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput();
break;
}
}
function onEndCurrentAni_Punishment_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_PUNISHMENT, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 2:
obj.sq_SetXScrollStop(200);
local flashScreenObj = obj.getVar("flashobj").get_obj_vector(0);
if(flashScreenObj) flashScreenObj.setValid(false);
local size = obj.getVar("punishment_target").get_obj_vector_size();
for(local i = 0; i < size; i++){
local activeObj = obj.getVar("punishment_target").get_obj_vector(i);
if(activeObj) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, "character/atswordman/4_darktempler/punishment/ap_punishment.nut");
}
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onKeyFrameFlag_Punishment_bykk(obj, flagIndex)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(flagIndex){
case 0:
switch(subState){
case 0:
local range = sq_GetIntData(obj, SKILL_DARKEMPLER_PUNISHMENT, 0);
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,350,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_PUNISHMENT,1,range,0,0,0,0,0,0,0,0);
local flashScreenObj = sq_flashScreen(obj, 800, 99990, 0, 255, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
obj.getVar("flashobj").clear_obj_vector();
obj.getVar("flashobj").push_obj_vector(flashScreenObj);
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_PUNISHMENT, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
break;
case 30:
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atpunishment/attack/atpunishment_attack_eff1.ani", 350, 1, 100);
attack_Punishment_bykk(obj);
break;
case 36:
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atpunishment/attack/atpunishment_attack_slash_eff.ani", 350, 1, 100);
attack_Punishment_bykk(obj);
break;
case 40:
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,350,0,100,obj.getDirection(),4,SKILL_DARKEMPLER_PUNISHMENT,3,0,0,0,0,0,0,0,0,0);
break;
case 66:
// if(obj.getVar("punishment_quick").getBool(0))
//sendAwakeCutinInfo(obj,35);
case 41:
case 48:
case 57:
case 76:
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atpunishment/attack/atpunishment_attack_slash_eff.ani", sq_getRandom(150,350), 1, sq_getRandom(0,100));
attack_Punishment_bykk(obj);
break;
}
}
function attack_Punishment_bykk(obj)
{
local size = obj.getVar("punishment_target").get_obj_vector_size();
for(local i = 0; i < size; i++){
local activeObj = obj.getVar("punishment_target").get_obj_vector(i);
if(activeObj) sq_SendHitObjectPacket(obj,activeObj,0,0,sq_GetObjectHeight(activeObj) / 2);
}
}
function onEndState_Punishment_bykk(obj, newState)
{
if(!obj) return;
if(newState != SKILL_DARKEMPLER_PUNISHMENT){
obj.sq_SetXScrollStop(0);
local flashScreenObj = obj.getVar("flashobj").get_obj_vector(0);
if(flashScreenObj) flashScreenObj.setValid(false);
local size = obj.getVar("punishment_target").get_obj_vector_size();
for(local i = 0; i < size; i++){
local activeObj = obj.getVar("punishment_target").get_obj_vector(i);
if(activeObj) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, "character/atswordman/4_darktempler/punishment/ap_punishment.nut");
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Scaffold
function checkExecutableSkill_Scaffold_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_SCAFFOLD);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SCAFFOLD, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function checkCommandEnable_Scaffold_bykk(obj)
{
if (!obj) return 0;
return 1;
}
function onSetState_Scaffold_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
switch(subState){
case 0:
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SCAFFOLD);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atscaffold/start_00_cast.ani", 0, -3, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atscaffold/start_01_cast.ani", 0, -2, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atscaffold/start_02_cast.ani", 0, 1, 0);
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/atscaffold/start_03_cast.ani", 0, -1, 0);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_Scaffold_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onKeyFrameFlag_Scaffold_bykk(obj, flagIndex)
{
switch(flagIndex){
case 0:
local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_SCAFFOLD);
local lifeTime = sq_GetLevelData(obj, SKILL_DARKEMPLER_SCAFFOLD, 0, skill_level);
local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_SCAFFOLD, 1, skill_level);
local totalDamage2 = sq_GetLevelData(obj, SKILL_DARKEMPLER_SCAFFOLD, 2, skill_level);
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,50,0,90,obj.getDirection(),4,SKILL_DARKEMPLER_SCAFFOLD,1,totalDamage,totalDamage2,lifeTime,0,0,0,0,0,1);
break;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//ShadowBinding
function checkExecutableSkill_ShadowBinding_bykk(obj)
{
if (!obj) return 0;
if(obj.getVar("bindingObj").get_obj_vector_size() > 0 && obj.getVar("ShadowBindingBool").getBool(0)){
local bindingObj = obj.getVar("bindingObj").get_obj_vector(0);
if(bindingObj){
obj.getVar("ShadowBindingBool").setBool(0, false);
local colObj = sq_GetCNRDObjectToCollisionObject(bindingObj);
colObj.getVar().setBool(100, true);
colObj.stopTimeEvent(1);
colObj.setTimeEvent(1,100,1,true);
}
return 0;
}
local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_SHADOWBINDING);
if(isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWBINDING, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function checkCommandEnable_ShadowBinding_bykk(obj)
{
if (!obj) return 0;
return 1;
}
function onSetState_ShadowBinding_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
switch(subState){
case 0:
obj.sq_PlaySound("SW_SHADOW_BINDING");
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWBINDING);
obj.getVar("ShadowBindingBool").setBool(0, true);
local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_SHADOWBINDING);
local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWBINDING, 0, skill_level);
local totalDamage2 = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWBINDING, 1, skill_level);
local lifeTime = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWBINDING, 2, skill_level);
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_SHADOWBINDING,1,totalDamage,totalDamage2,lifeTime,0,0,0,0,0,1);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_ShadowBinding_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onProcCon_ShadowBinding_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
break;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//ShadowHarvest
function checkExecutableSkill_ShadowHarvest_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(64);
if(isUse){
obj.sq_IntVectClear();
if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(1);
else obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWHARVEST, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function checkCommandEnable_ShadowHarvest_bykk(obj)
{
if (!obj) return 0;
return 1;
}
function onSetState_ShadowHarvest_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
switch(subState){
case 0:
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWHARVESTSHOOTGROUND);
break;
case 1:
obj.sq_StopMove();
obj.sq_ZStop();
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWHARVESTSHOOT);
local currentAni = obj.getCurrentAnimation();
currentAni.setSpeedRate(200.0);
break;
}
}
function onEndCurrentAni_ShadowHarvest_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(0, STATE_PRIORITY_USER, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(6, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onKeyFrameFlag_ShadowHarvest_bykk(obj, flagIndex)
{
if (!obj) return false;
switch(flagIndex){
case 0:
local isSeal = 0,skill = sq_GetSkill(obj, SKILL_DARKEMPLER_SHADOWHARVEST),skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_SHADOWHARVEST);
if(!skill.isSealFunction()) isSeal = 1;
local passive_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_SHADOWHARVEST);
local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWHARVEST, 0, skill_level);
local totalDamage2 = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWHARVEST, 6, skill_level);
local range = 170 + 170 * sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWHARVEST, 1, skill_level) / 2 / 100;
local lifeTime = sq_GetIntData(obj, SKILL_DARKEMPLER_SHADOWHARVEST, 4);
local hitTime = sq_GetIntData(obj, SKILL_DARKEMPLER_SHADOWHARVEST, 5);
switch(obj.getSkillSubState()){
case 0:
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,30,0,80,obj.getDirection(),4,SKILL_DARKEMPLER_SHADOWHARVEST,1,totalDamage,totalDamage2,range,lifeTime,hitTime,isSeal,passive_level,0,1);
break;
case 1:
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,30,0,30,obj.getDirection(),4,SKILL_DARKEMPLER_SHADOWHARVEST,1,totalDamage,totalDamage2,range,lifeTime,hitTime,isSeal,passive_level,0,1);
break;
}
break;
}
return true;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//ShadowHiding
function checkExecutableSkill_ShadowHiding_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_SHADOWHIDING);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWHIDING, STATE_PRIORITY_IGNORE_FORCE, true);
obj.getVar("ShadowHiding").clear_vector();
obj.getVar("ShadowHiding").push_vector(obj.getXPos());
obj.getVar("ShadowHiding").push_vector(obj.getYPos());
obj.getVar("ShadowHiding").push_vector(obj.getXPos());
obj.getVar("ShadowHiding").push_vector(obj.getYPos());
return 1;
}
return 0;
}
function checkCommandEnable_ShadowHiding_bykk(obj)
{
if (!obj) return 0;
return 1;
}
function onSetState_ShadowHiding_bykk(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(ANIMATION_DARKEMPLER_SHADOWHIDINGCAST);
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWHIDINGMOVE);
local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_SHADOWHIDING);
local time = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWHIDING, 0, skill_level);
obj.setTimeEvent(0, time, 1, false);
obj.setTimeEvent(1, 25, -1, false);
CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_DARKEMPLER_SHADOWHIDING, false, "character/atswordman/4_darktempler/shadowhiding/ap_shadowhiding.nut", true);
break;
case 2:
obj.removeAllTimeEvent();
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWHIDINGEND);
CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/atswordman/4_darktempler/shadowhiding/ap_shadowhiding.nut");
break;
}
}
function onEndCurrentAni_ShadowHiding_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWHIDING, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onProcCon_ShadowHiding_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
obj.setSkillCommandEnable(SKILL_DARKEMPLER_SHADOWHIDING, true);
if(obj.sq_IsEnterSkill(SKILL_DARKEMPLER_SHADOWHIDING) != -1){
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWHIDING, STATE_PRIORITY_IGNORE_FORCE, true);
}
break;
}
}
function onTimeEvent_ShadowHiding_bykk(obj, timeEventIndex, timeEventCount)
{
switch(timeEventIndex){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWHIDING, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 1:
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){
if(obj.isMovablePos(obj.getXPos(),obj.getYPos() - 5)) sq_setCurrentAxisPos(obj, 1, obj.getYPos() - 5);
}
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){
if(obj.isMovablePos(obj.getXPos(),obj.getYPos() + 5)) sq_setCurrentAxisPos(obj, 1, obj.getYPos() + 5);
}
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){
if(obj.isMovablePos(obj.getXPos() - 10,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, obj.getXPos() - 10);
}
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
if(obj.isMovablePos(obj.getXPos() + 10,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, obj.getXPos() + 10);
}
break;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//ShadowLancer
function checkExecutableSkill_ShadowLancer_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(63);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWLANCER, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function checkCommandEnable_ShadowLancer_bykk(obj)
{
if (!obj) return 0;
return 1;
}
function onSetState_ShadowLancer_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
switch(subState){
case 0:
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWLANCERREADY);
obj.sq_PlaySound("SW_SHADOW_LANCER");
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWLANCER);
obj.getVar("move").setInt(0, sq_GetXPos(obj));
obj.getVar("move").setInt(1, 135);
local hitMax = sq_GetIntData(obj, SKILL_DARKEMPLER_SHADOWLANCER, 4);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DARKEMPLER_SHADOWLANCER, SKILL_DARKEMPLER_SHADOWLANCER, 0, 1.0) + 100;
local currentAni = obj.getCurrentAnimation();
local DelaySum = currentAni.getDelaySum(false);
local speedRate = 36000 / DelaySum;
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,0,60,obj.getDirection(),4,SKILL_DARKEMPLER_SHADOWLANCER,1,totalDamage,hitMax,speedRate,0,0,0,0,0,1);
local pooledObj = createOnlyDrawObject_AtSwordMan_bykk(obj,"character/swordman/effect/animation/atshadowlancer/13_dust.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj) + 1,sq_GetZPos(obj),ENUM_DRAWLAYER_NORMAL);
sq_moveWithParent(obj, pooledObj);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_ShadowLancer_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState)
{
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWLANCER, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(200);
obj.sq_AddSetStatePacket(6, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onProc_ShadowLancer_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
local baseX = obj.getVar("move").getInt(0);
local moveX = obj.getVar("move").getInt(1);
local stateTime = obj.sq_GetStateTimer();
local currentAni = obj.getCurrentAnimation();
local DelaySum = currentAni.getDelaySum(false);
local CelXpos = sq_GetAccel(0, moveX, stateTime, DelaySum, true);
local destX = sq_GetDistancePos(baseX, obj.getDirection(), CelXpos);
if(obj.isMovablePos(destX,obj.getYPos())) sq_setCurrentAxisPos(obj, 0, destX);
else obj.getVar("move").setInt(1, 0);
break;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//ShadowPuppet
function checkExecutableSkill_ShadowPuppet_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_SHADOWPUPPET);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWPUPPET, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function checkCommandEnable_ShadowPuppet_bykk(obj)
{
if (!obj) return 0;
return 1;
}
function onSetState_ShadowPuppet_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
obj.sq_StopMove();
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
switch(subState){
case 0:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWPUPPETCASTING);
obj.sq_PlaySound("SW_SHADOW_PUPPET");
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWPUPPETCHARGESTART);
break;
case 2:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWPUPPETCHARGELOOP);
break;
case 3:
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SHADOWPUPPETFINISH);
local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_SHADOWPUPPET);
local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWPUPPET, 2, skill_level);
local lifeTime = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWPUPPET, 1, skill_level);
local hitTime = sq_GetIntData(obj, SKILL_DARKEMPLER_SHADOWPUPPET, 1);
if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS) > 0){
totalDamage = totalDamage + sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWPUPPET, 0, skill_level);
hitTime = hitTime / 2;
}
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,30,0,70,obj.getDirection(),4,SKILL_DARKEMPLER_SHADOWPUPPET,1,totalDamage,lifeTime,hitTime,0,0,0,0,0,1);
break;
}
}
function onEndCurrentAni_ShadowPuppet_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
case 2:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWPUPPET, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 3:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onKeyFrameFlag_ShadowPuppet_bykk(obj, flagIndex)
{
local subState = obj.getSkillSubState();
if(subState == 0 && flagIndex == 0){
if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_INCARNATION) > 0){
local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_SHADOWPUPPET);
local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWPUPPET, 2, skill_level);
local lifeTime = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWPUPPET, 1, skill_level) / 2;
local hitTime = sq_GetIntData(obj, SKILL_DARKEMPLER_SHADOWPUPPET, 1) / 2;
local balance = 20;
totalDamage = totalDamage * balance / 100;
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,400,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_SHADOWPUPPET,2,totalDamage,lifeTime,hitTime,sq_GetOppositeDirection(obj.getDirection()),1,0,0,0,0);
obj.setTimeEvent(1,100,1,false);
}
else if(sq_GetSkillLevel(obj, SKILL_DARKEMPLER_VESPERS) > 0){
obj.sq_IntVectClear();
obj.sq_IntVectPush(3);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWPUPPET, STATE_PRIORITY_IGNORE_FORCE, true);
}
else{
local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_SHADOWPUPPET);
local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWPUPPET, 2, skill_level);
local lifeTime = sq_GetLevelData(obj, SKILL_DARKEMPLER_SHADOWPUPPET, 1, skill_level);
local hitTime = sq_GetIntData(obj, SKILL_DARKEMPLER_SHADOWPUPPET, 0);
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,400,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_SHADOWPUPPET,2,totalDamage,lifeTime,hitTime,sq_GetOppositeDirection(obj.getDirection()),0,0,0,0,0);
}
}
}
function onTimeEvent_ShadowPuppet_bykk(obj, timeEventIndex, timeEventCount)
{
switch(timeEventIndex){
case 1:
obj.sq_IntVectClear();
obj.sq_IntVectPush(3);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SHADOWPUPPET, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//SoulDrain
function checkExecutableSkill_SoulDrain_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(59);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_SOULDRAIN, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function checkCommandEnable_SoulDrain_bykk(obj)
{
if (!obj) return 0;
return 1;
}
function onSetState_SoulDrain_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
switch(subState){
case 0:
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_SOULDRAIN);
local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_SOULDRAIN);
local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_SOULDRAIN, 3, skill_level);
local lifeTime = sq_GetLevelData(obj, SKILL_DARKEMPLER_SOULDRAIN, 0, skill_level);
local enemyMax = sq_GetLevelData(obj, SKILL_DARKEMPLER_SOULDRAIN, 4, skill_level);
local hitMax = sq_GetLevelData(obj, SKILL_DARKEMPLER_SOULDRAIN, 2, skill_level);
local range = sq_GetLevelData(obj, SKILL_DARKEMPLER_SOULDRAIN, 1, skill_level) * 2;
local hitTime = sq_GetIntData(obj, SKILL_DARKEMPLER_SOULDRAIN, 0);
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,0,-1,0,obj.getDirection(),4,SKILL_DARKEMPLER_SOULDRAIN,1,totalDamage,lifeTime,enemyMax,hitMax,range,hitTime,0,0,1);
if(obj.getVar("souldrain").get_obj_vector_size() < 1) obj.getVar("souldrain").clear_obj_vector();
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_SoulDrain_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//StarFall
function checkExecutableSkill_StarFall_bykk(obj)
{
if (!obj) return 0;
local isUse = obj.sq_IsUseSkill(SKILL_DARKEMPLER_STARFALL);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_DARKEMPLER_STARFALL, STATE_PRIORITY_IGNORE_FORCE, true);
return 1;
}
return 0;
}
function checkCommandEnable_StarFall_bykk(obj)
{
if (!obj) return 0;
return 1;
}
function onSetState_StarFall_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
switch(subState){
case 0:
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(ANIMATION_DARKEMPLER_STARFALL);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_StarFall_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onKeyFrameFlag_StarFall_bykk(obj, flagIndex)
{
if (!obj) return false;
switch(flagIndex){
case 1:
local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_STARFALL);
local create_number = sq_GetLevelData(obj, SKILL_DARKEMPLER_STARFALL, 0, skill_level);
obj.setTimeEvent(1,50,create_number,true);
break;
}
return true;
}
function onTimeEvent_StarFall_bykk(obj, timeEventIndex, timeEventCount)
{
local skill_level = sq_GetSkillLevel(obj, SKILL_DARKEMPLER_STARFALL);
local totalDamage = sq_GetLevelData(obj, SKILL_DARKEMPLER_STARFALL, 1, skill_level);
local range = sq_GetIntData(obj, SKILL_DARKEMPLER_STARFALL, 0);
cearteSkillPassiveObj_AtSwordMan_bykk(obj,obj,PASSIVEOBJECT_BYKK_DARKEMPLER,100,0,0,obj.getDirection(),4,SKILL_DARKEMPLER_STARFALL,1,totalDamage,range,timeEventCount,0,0,0,0,0,1);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Whipswordbal_bykk(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_WHIPSWORDBAL);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_WHIPSWORDBAL, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Whipswordbal_bykk(obj)
{
if (!obj) return false;
local state = obj.sq_GetState();
if(state == 0 || state == 108 || state == 14) return true;
else return false;
}
function onSetState_Whipswordbal_bykk(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_PlaySound("SW_WHIPSWORDBAL");
if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH) > 0) obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_WHIPSWORDBAL1_DEVIL);
else obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_WHIPSWORDBAL1);
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("effect/animation/atwhipswordbal/bal_cast.ani"), 0, 0);
local bonusRate = 1.0;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/2_demonslayer/WillPower/ap_WillPower.nut")) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_WILLPOWER, 5, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_WILLPOWER)).tofloat() / 1000.0;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_WHIPSWORDBAL, SKILL_DEMONSLAYER_WHIPSWORDBAL, 0, bonusRate) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 86));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_WHIPSWORDBAL2);
break;
case 2:
obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_WHIPSWORDBAL3);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_Whipswordbal_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_WHIPSWORDBAL, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(0, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onAttack_Whipswordbal_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj) return false;
// Calldaimus_onAttack(obj,damager, boundingBox, isStuck);
}
function onEnterFrame_Whipswordbal_bykk(obj, frameIndex)
{
if(!obj) return;
switch(frameIndex){
case 4:
local count = sq_GetIntData(obj,SKILL_DEMONSLAYER_WHIPSWORDBAL, 0), isSub2 = 0;
if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_QUEENOFMINE) > 0){
if(count < 6) count = 6;
isSub2 = 1;
}
local offsetX = sq_GetIntData(obj,SKILL_DEMONSLAYER_WHIPSWORDBAL, 1), offsetY = 0, isSub = 0;
local skill_level = sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH);
if(skill_level > 0){offsetY = 40; isSub = 1;}
local bonusRate = 1.0;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/2_demonslayer/WillPower/ap_WillPower.nut")) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_WILLPOWER, 5, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_WILLPOWER)).tofloat() / 1000.0;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_WHIPSWORDBAL, SKILL_DEMONSLAYER_WHIPSWORDBAL, 0, bonusRate) + 100;
for (local i = 0; i < count ; i++){
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 135 + offsetX * i, offsetY, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_WHIPSWORDBAL, 1, totalDamage, isSub, isSub2, 0, 0, 0, 0, 0, 1);
if(skill_level > 0) cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 135 + offsetX * i, -40, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_WHIPSWORDBAL, 1, totalDamage, 1, isSub2, 0, 0, 0, 0, 0, 1);
}
break;
}
}
function onEndState_Whipswordbal_bykk(obj, newState)
{
if(!obj) return;
}
function onKeyFrameFlag_Whipswordbal_bykk(obj, flagIndex)
{
if (!obj) return;
}
function onProcCon_Whipswordbal_bykk(obj)
{
if(!obj) return;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Snakedance_bykk(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_SNAKEDANCE);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_SNAKEDANCE, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Snakedance_bykk(obj)
{
if (!obj) return false;
local state = obj.sq_GetState();
if(state == 0 || state == 108 || state == 14) return true;
else return false;
}
function onSetState_Snakedance_bykk(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(ANIMATION_DEMONSLAYER_SNAKEDANCE1);
obj.sq_PlaySound("SW_SNAKEDANCE_01");
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_SNAKEDANCE2);
obj.sq_PlaySound("SW_SNAKEDANCE_02");
break;
case 2:
obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_SNAKEDANCE3);
obj.sq_PlaySound("SW_SNAKEDANCE_03");
break;
}
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;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/2_demonslayer/WillPower/ap_WillPower.nut")) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_WILLPOWER, 2, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_WILLPOWER)).tofloat() / 1000.0;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_SNAKEDANCE, SKILL_DEMONSLAYER_SNAKEDANCE, subState, bonusRate) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 112 + subState));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
}
function onEndCurrentAni_Snakedance_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_SNAKEDANCE, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onAttack_Snakedance_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj) return;
}
function onEnterFrame_Snakedance_bykk(obj, frameIndex)
{
if(!obj) return;
}
function onEndState_Snakedance_bykk(obj, newState)
{
if(!obj) return;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Clawblade_bykk(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_CLAWBLADE);
if (isUse){
obj.getVar("Clawblade").clear_obj_vector();
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_CLAWBLADE, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Clawblade_bykk(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Clawblade_bykk(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(ANIMATION_DEMONSLAYER_CLAWBLADE1);
obj.sq_PlaySound("SW_CLAWBLADE");
obj.getVar("clawblade_target").clear_obj_vector();
local bonusRate = 1.0;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/2_demonslayer/WillPower/ap_WillPower.nut")) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_WILLPOWER, 1, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_WILLPOWER)).tofloat() / 1000.0;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_CLAWBLADE, SKILL_DEMONSLAYER_CLAWBLADE, 0, bonusRate) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 90));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
case 1:
obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_CLAWBLADE2);
local bonusRate = 1.0;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/2_demonslayer/WillPower/ap_WillPower.nut")) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_WILLPOWER, 1, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_WILLPOWER)).tofloat() / 1000.0;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_CLAWBLADE, SKILL_DEMONSLAYER_CLAWBLADE, 1, bonusRate) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 91));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
case 2:
obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_CLAWBLADE3);
break;
case 3:
obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_CLAWBLADEENDATTACK_BODY);
local bonusRate = 1.0;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/2_demonslayer/WillPower/ap_WillPower.nut")) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_WILLPOWER, 1, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_WILLPOWER)).tofloat() / 1000.0;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_CLAWBLADE, -1, 0, bonusRate) + obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_CLAWBLADE, -1, 1, bonusRate) + 200;
local damageRate = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_QUEENOFMINE, -1, 0, 1.0) + 100;
local totalDamage2 = totalDamage * damageRate / 1000;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 90));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage2);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
if(subState == 2){
local currentAni = obj.getCurrentAnimation();
currentAni.setSpeedRate(150.0);
}
}
function onEndCurrentAni_Clawblade_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_CLAWBLADE, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 2:
if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_QUEENOFMINE) > 0){
obj.sq_IntVectClear();
obj.sq_IntVectPush(3);
obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_CLAWBLADE, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
case 3:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onAttack_Clawblade_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj) return false;
local subState = obj.getSkillSubState();
//Calldaimus_onAttack(obj,damager, boundingBox, isStuck);
switch(subState){
case 0:
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(false);
local stateTime = obj.sq_GetStateTimer();
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH) > 0){
local bonusRate = 1.0;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/2_demonslayer/WillPower/ap_WillPower.nut")) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_WILLPOWER, 1, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_WILLPOWER)).tofloat() / 1000.0;
local totalDamage = (obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_CLAWBLADE, -1, 0, bonusRate) + 100) * (obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_DEVILSWORDTECH, -1, 5, bonusRate) + 100 ) / 100;
local id = sq_GetObjectId(damager);
local hitMax = sq_GetIntData(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH, 3);
cearteSkillPassiveObj_AtSwordMan_bykk(obj, damager, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 0, sq_GetObjectHeight(damager) / 2, obj.getDirection(), 2, SKILL_DEMONSLAYER_CLAWBLADE, 2, totalDamage, id, hitMax, 0, 0, 0, 0, 0, 1);
}
if(sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager) && !sq_IsFixture(damager)){
obj.getVar("clawblade_target").push_obj_vector(damager);
local apdPath = "character/atswordman/2_demonslayer/clawblade/ap_clawblade.nut";
local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true);
if(addAppendage){
sq_HoldAndDelayDie(damager, obj, true, true, false, 100, 100, ENUM_DIRECTION_NEUTRAL, addAppendage);
sq_MoveToAppendageForce(damager, obj, obj, 200, 0, 0, delaySum - stateTime, true, addAppendage);
}
}
}
break;
}
}
function onEnterFrame_Clawblade_bykk(obj, frameIndex)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
switch(frameIndex){
case 0:
local size = obj.getVar("clawblade_target").get_obj_vector_size();
if(size > 0){
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(false);
local apdPath = "character/atswordman/2_demonslayer/clawblade/ap_clawblade.nut";
for(local i = 0; i < size; i++){
local damager = obj.getVar("clawblade_target").get_obj_vector(i);
if(damager){
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(damager, apdPath);
sq_MoveToAppendageForce(damager, obj, obj, 150, 0, 100, delaySum, true, addAppendage);
}
}
}
break;
case 3:
case 5:
case 7:
obj.resetHitObjectList();
break;
}
case 2:
switch(frameIndex){
case 0:
local size = obj.getVar("clawblade_target").get_obj_vector_size();
if(size > 0){
local currentAni = obj.getCurrentAnimation();
local delaySum = currentAni.getDelaySum(0,2);
local apdPath = "character/atswordman/2_demonslayer/clawblade/ap_clawblade.nut";
for(local i = 0; i < size; i++){
local damager = obj.getVar("clawblade_target").get_obj_vector(i);
if(damager){
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(damager, apdPath);
sq_MoveToAppendageForce(damager, obj, obj, 180, 0, 0, delaySum, true, addAppendage);
}
}
}
break;
case 3:
local apdPath = "character/atswordman/2_demonslayer/clawblade/ap_clawblade.nut";
local size = obj.getVar("clawblade_target").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local damager = obj.getVar("clawblade_target").get_obj_vector(i);
if(damager){
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_CLAWBLADE, -1, 1, 1.0);
cearteSkillPassiveObj_AtSwordMan_bykk(obj, damager, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 0, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_CLAWBLADE, 1, totalDamage, 0, 0, 0, 0, 0, 0, 0, 1);
CNSquirrelAppendage.sq_RemoveAppendage(damager, apdPath);
}
}
}
break;
}
}
}
function onEndState_Clawblade_bykk(obj, newState)
{
if(!obj) return;
if(newState != SKILL_DEMONSLAYER_CLAWBLADE){
local size = obj.getVar("clawblade_target").get_obj_vector_size();
if(size > 0){
for(local i = 0; i < size; i++){
local targetObj = obj.getVar("clawblade_target").get_obj_vector(i);
if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/atswordman/2_demonslayer/clawblade/ap_clawblade.nut");
}
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Pikesword_bykk(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_PIKESWORD);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_PIKESWORD, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Pikesword_bykk(obj)
{
if (!obj) return false;
local state = obj.sq_GetState();
if(state == 0 || state == 108 || state == 14) return true;
else return false;
}
function onSetState_Pikesword_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH) > 0) obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_PIKESWORD_START_BODY);
else obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_PIKESWORD);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_PIKESWORD, -1, 0, 1.0) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 89));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
case 1:
if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH) > 0) obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_PIKESWORD_END_BODY);
else obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_PIKESWORDDRAG);
local bonusRate = 1.0;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/2_demonslayer/WillPower/ap_WillPower.nut")) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_WILLPOWER, 3, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_WILLPOWER)).tofloat() / 1000.0;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_PIKESWORD, -1, 1, bonusRate) + 100;
local attackIndex = 87;
if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH) > 0) attackIndex = 88;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_Pikesword_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_PIKESWORD, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 1:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onAttack_Pikesword_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj) return;
}
function onEnterFrame_Pikesword_bykk(obj, frameIndex)
{
if(!obj) return;
}
function onEndState_Pikesword_bykk(obj, newState)
{
if(!obj) return;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Wildwhip_bykk(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_WILDWHIP);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_WILDWHIP, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Wildwhip_bykk(obj)
{
if (!obj) return false;
local state = obj.sq_GetState();
if(state == 0 || state == 108 || state == 14) return true;
else return false;
}
function onSetState_Wildwhip_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
// BodyCalldaimus(obj, "wildwhip1");
obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_WILDWHIP1);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
break;
case 1:
// BodyCalldaimus(obj, "wildwhip2");
obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_WILDWHIP2);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
obj.sq_PlaySound("WILDWHIP_SPIRAL_LOOP", 2021);
obj.setTimeEvent(1, 100, 1, false);
local bonusRate = 1.0;
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/atswordman/2_demonslayer/WillPower/ap_WillPower.nut")) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_DEMONSLAYER_WILLPOWER, 4, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_WILLPOWER)).tofloat() / 1000.0;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_WILDWHIP, -1, 1, bonusRate) + 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 89));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH) > 0){
totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH, 3, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH)) / 100;
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(0, 0);
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 0, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_WILDWHIP, 1, totalDamage, delay, 0, 0, 0, 0, 0, 0, 1);
}
break;
case 2:
obj.stopSound(2021);
obj.removeAllTimeEvent();
obj.sq_PlaySound("WILDWHIP_SPIRAL_FINISH");
// BodyCalldaimus(obj, "wildwhip3");
obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_WILDWHIP3);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
break;
}
}
function onEndCurrentAni_Wildwhip_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
case 1:
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState + 1);
obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_WILDWHIP, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onTimeEvent_Wildwhip_bykk(obj, timeEventIndex, timeEventCount)
{
switch(timeEventIndex){
case 1:
local inputConut = obj.getRapidInputFrequency();
inputConut = inputConut.tointeger();
local currentAni = obj.getCurrentAnimation();
local speedRate = 100;
local inputMax = 2;
if(inputConut >= inputMax){
speedRate = sq_GetIntData(obj, SKILL_DEMONSLAYER_WILDWHIP, 0);
obj.getVar("wildwhip").setBool(0, true);
}
else obj.getVar("wildwhip").setBool(0, false);
currentAni.setSpeedRate(speedRate.tofloat());
local attackObj = obj.getVar("wildwhip_obj").get_obj_vector(0);
if(attackObj){
local colObj = sq_GetCNRDObjectToCollisionObject(attackObj);
local pAni = colObj.getCurrentAnimation();
pAni.setSpeedRate(speedRate.tofloat());
}
obj.setTimeEvent(1, 100, 1, false);
break;
}
}
function onAttack_Wildwhip_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj) return;
}
function onEnterFrame_Wildwhip_bykk(obj, frameIndex)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
if(frameIndex % 3 == 0){
if(obj.isMyControlObject()) obj.sq_SetShake(obj, 2, 85);
}
break;
}
}
function onEndState_Wildwhip_bykk(obj, newState)
{
if(!obj) return;
if(newState != 153){
obj.stopSound(2021);
local attackObj = obj.getVar("wildwhip_obj").get_obj_vector(0);
if(attackObj) attackObj.setValid(false);
}
}
function onProcCon_Wildwhip_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput();
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
break;
}
}
function onKeyFrameFlag_Wildwhip_bykk(obj, flagIndex)
{
if (!obj) return;
switch(flagIndex){
case 1: obj.resetHitObjectList(); break;
case 2:
if(obj.getVar("wildwhip").getBool(0)) obj.resetHitObjectList();
break;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Blooddance_bykk(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_BLOODDANCE);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_BLOODDANCE, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Blooddance_bykk(obj)
{
if (!obj) return false;
local state = obj.sq_GetState();
if(state == 0 || state == 108 || state == 14) return true;
else return false;
}
function onSetState_Blooddance_bykk(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_PlaySound("SW_BLOODDANCE_01");
obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_BLOODDANCESTART);
obj.getVar("blooddance_count").setInt(10, 1);
break;
case 1:
obj.sq_PlaySound("BLOODDANCE_LOOP", 2022);
obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_BLOODDANCELOOP);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_BLOODDANCE, -1, 0, 1.0) + 100;
if(sq_GetIntData(obj, SKILL_DEMONSLAYER_BLOODDANCE, 5) > 0 || BLOODDANCE_STONE > 0) totalDamage = totalDamage * 56 / 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 94));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
obj.setTimeEvent(1, 100, 1, false);
break;
case 2:
obj.stopSound(2022);
obj.removeAllTimeEvent();
obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_BLOODDANCEFINISH);
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_BLOODDANCE, -1, 5, 1.0) + 100;
if(sq_GetIntData(obj, SKILL_DEMONSLAYER_BLOODDANCE, 5) > 0 || BLOODDANCE_STONE > 0) totalDamage = totalDamage * 225 / 100;
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 96));
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
if(sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH) > 0){
if(subState == 1){
local totalDamage = (obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_BLOODDANCE, -1, 0, 1.0) + 100) * sq_GetLevelData(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH, 4, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH)) / 100;
if(sq_GetIntData(obj, SKILL_DEMONSLAYER_BLOODDANCE, 5) > 0 || BLOODDANCE_STONE > 0) totalDamage = totalDamage * 56 / 100;
local currentAni = obj.getCurrentAnimation();
local delay = currentAni.getDelaySum(0, 0);
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 0, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_BLOODDANCE, 1, totalDamage, delay, 0, 0, 0, 0, 0, 0, 1);
}
else if(subState == 2){
local attackObj = obj.getVar("blooddance_obj").get_obj_vector(0);
if(attackObj) attackObj.setValid(false);
local totalDamage = (obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_BLOODDANCE, -1, 5, 1.0) + 100) * sq_GetLevelData(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH, 4, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_DEVILSWORDTECH)) / 100;
if(sq_GetIntData(obj, SKILL_DEMONSLAYER_BLOODDANCE, 5) > 0 || BLOODDANCE_STONE > 0) totalDamage = totalDamage * 225 / 100;
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 0, 0, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_BLOODDANCE, 2, totalDamage, 0, 0, 0, 0, 0, 0, 0, 1);
}
}
}
function onEndCurrentAni_Blooddance_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_BLOODDANCE, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case 2:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onTimeEvent_Blooddance_bykk(obj, timeEventIndex, timeEventCount)
{
switch(timeEventIndex){
case 1:
local inputConut = obj.getRapidInputFrequency();
inputConut = inputConut.tointeger();
local currentAni = obj.getCurrentAnimation();
local speedRate = 100;
local hitMax = sq_GetIntData(obj, SKILL_DEMONSLAYER_BLOODDANCE, 1);
local inputMax = 2;
if(inputConut >= inputMax){
hitMax = sq_GetIntData(obj, SKILL_DEMONSLAYER_BLOODDANCE, 2);
speedRate = 180;
}
if(sq_GetIntData(obj, SKILL_DEMONSLAYER_BLOODDANCE, 5) > 0 || BLOODDANCE_STONE > 0) hitMax = hitMax * 2;
if(obj.getVar("blooddance_count").getInt(10) + 1 > hitMax){
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_BLOODDANCE, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
else{
obj.getVar("blooddance_count").setInt(10, obj.getVar("blooddance_count").getInt(10) + 1)
}
currentAni.setSpeedRate(speedRate.tofloat());
local attackObj = obj.getVar("blooddance_obj").get_obj_vector(0);
if(attackObj){
local colObj = sq_GetCNRDObjectToCollisionObject(attackObj);
local pAni = colObj.getCurrentAnimation();
pAni.setSpeedRate(speedRate.tofloat());
colObj.resetHitObjectList();
}
obj.resetHitObjectList();
obj.setTimeEvent(1, 100, 1, false);
break;
}
}
function onAttack_Blooddance_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj) return ;
}
function onEnterFrame_Blooddance_bykk(obj, frameIndex)
{
if(!obj) return;
}
function onEndState_Blooddance_bykk(obj, newState)
{
if(!obj) return;
if(newState != SKILL_DEMONSLAYER_BLOODDANCE){
obj.stopSound(2022);
local attackObj = obj.getVar("blooddance_obj").get_obj_vector(0);
if(attackObj) attackObj.setValid(false);
}
}
function onProc_Blooddance_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 1:
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput();
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){
obj.sq_IntVectClear();
obj.sq_IntVectPush(2);
obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_BLOODDANCE, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
break;
}
}
function onKeyFrameFlag_Blooddance_bykk(obj, flagIndex)
{
if (!obj) return;
switch(flagIndex){
case 1:
if(obj.getSkillSubState() == 2){
obj.sq_PlaySound("BLOODDANCE_02");
obj.sq_PlaySound("SW_BLOODDANCE_02");
}
break;
}
}
function onProcCon_Blooddance_bykk(obj)
{
if(!obj) return;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_BloodSeal_bykk(obj)
{
if(!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_BLOODSEAL);
if(isUse){
obj.sq_AddSetStatePacket(84, STATE_PRIORITY_USER, false);
return true;
}
return false;
}
function checkCommandEnable_BloodSeal_bykk(obj)
{
if(!obj) return false;
local hp = obj.getHp();
local hpMin = sq_GetLevelData(obj, SKILL_DEMONSLAYER_BLOODSEAL, 4, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_BLOODSEAL));
if(hp < hpMin) return false;
return true;
}
function onSetState_BloodSeal_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_BLOODSEAL);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local hp = obj.getHp();
local hpMin = sq_GetLevelData(obj, SKILL_DEMONSLAYER_BLOODSEAL, 4, sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_BLOODSEAL));
obj.sq_SendSetHpPacket(hp - hpMin, true, obj);
}
function onKeyFrameFlag_BloodSeal_bykk(obj, flagIndex)
{
if(!obj) return;
if(flagIndex == 1){
local skill_level = sq_GetSkillLevel(obj, SKILL_DEMONSLAYER_BLOODSEAL);
local totalDamage = sq_GetLevelData(obj, SKILL_DEMONSLAYER_BLOODSEAL, 0, skill_level);//迦羅亞多段物理攻擊力
local totalDamage2 = obj.sq_GetPowerWithPassive(SKILL_DEMONSLAYER_BLOODSEAL, SKILL_DEMONSLAYER_BLOODSEAL, 2, -1, 1.0);//印痕多段物理攻擊力
local totalDamage3 = sq_GetLevelData(obj, SKILL_DEMONSLAYER_BLOODSEAL, 3, skill_level);//爆炸物理攻擊力
local sizeRate = sq_GetIntData(obj, SKILL_DEMONSLAYER_BLOODSEAL, 7) * 10;//印痕大小比率
local damageRate = (totalDamage2.tofloat() / totalDamage.tofloat() * 100.0).tointeger();//印痕多段物理攻擊力百分比
local damageRate2 = (totalDamage3.tofloat() / totalDamage.tofloat() * 100.0).tointeger();//爆炸物理攻擊力百分比
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, 50, 0, 75, obj.getDirection(), 2, SKILL_DEMONSLAYER_BLOODSEAL, 1, totalDamage, sizeRate, damageRate, damageRate2, 0, 0, 0, 0, 1);
}
}
function onEndCurrentAni_BloodSeal_bykk(obj)
{
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkExecutableSkill_Groupdance_bykk(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_DEMONSLAYER_GROUPDANCE);
if (isUse){
obj.sq_IntVectClear();
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(SKILL_DEMONSLAYER_GROUPDANCE, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_Groupdance_bykk(obj)
{
if (!obj) return false;
return true;
}
function onSetState_Groupdance_bykk(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_StopMove();
switch(subState){
case 0:
// BodyCalldaimus(obj, "groupdance");
obj.sq_SetCurrentAnimation(ANIMATION_DEMONSLAYER_GROUPDANCE);
obj.sq_PlaySound("DANCE_APPEAR");
obj.sq_PlaySound("SW_DANCE");
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onEndCurrentAni_Groupdance_bykk(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
obj.sq_IntVectClear();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_IGNORE_FORCE, true);
break;
}
}
function onAttack_Groupdance_bykk(obj, damager, boundingBox, isStuck)
{
if(!obj) return;
}
function onEnterFrame_Groupdance_bykk(obj, frameIndex)
{
if(!obj) return;
local subState = obj.getSkillSubState();
switch(subState){
case 0:
switch(frameIndex){
case 0:
obj.getVar("groupdance_boss").clear_obj_vector();
obj.getVar("groupdance_named").clear_obj_vector();
obj.getVar("groupdance_normal").clear_obj_vector();
obj.getVar("groupdance_target").clear_obj_vector();
local objectManager = obj.getObjectManager();
local objectNumber = objectManager.getCollisionObjectNumber();
local range = sq_GetIntData(obj, SKILL_DEMONSLAYER_GROUPDANCE, 0);
for (local i = 0; i < objectNumber; i++){
local object = objectManager.getCollisionObject(i);
if(object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) < range && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) < range / 2){
local activeObj = sq_GetCNRDObjectToActiveObject(object);
if(sq_IsBoss(activeObj)) obj.getVar("groupdance_boss").push_obj_vector(activeObj);
else if(sq_IsNamed(activeObj)) obj.getVar("groupdance_named").push_obj_vector(activeObj);
else obj.getVar("groupdance_normal").push_obj_vector(activeObj);
}
}
if(obj.getVar("groupdance_boss").get_obj_vector_size() > 0){
for(local i = 0; i < obj.getVar("groupdance_boss").get_obj_vector_size(); i++){
local targetObj = obj.getVar("groupdance_boss").get_obj_vector(i);
if(targetObj) obj.getVar("groupdance_target").push_obj_vector(targetObj);
}
}
if(obj.getVar("groupdance_named").get_obj_vector_size() > 0){
for(local i = 0; i < obj.getVar("groupdance_named").get_obj_vector_size(); i++){
local targetObj = obj.getVar("groupdance_named").get_obj_vector(i);
if(targetObj) obj.getVar("groupdance_target").push_obj_vector(targetObj);
}
}
if(obj.getVar("groupdance_normal").get_obj_vector_size() > 0){
for(local i = 0; i < obj.getVar("groupdance_normal").get_obj_vector_size(); i++){
local targetObj = obj.getVar("groupdance_normal").get_obj_vector(i);
if(targetObj) obj.getVar("groupdance_target").push_obj_vector(targetObj);
}
}
break;
case 6:
local target_number = obj.getVar("groupdance_target").get_obj_vector_size();
local create_number = sq_GetIntData(obj, SKILL_DEMONSLAYER_GROUPDANCE, 1);
local targetMax = 5;
obj.getVar("groupdance_sub").setInt(10, 0);
if(sq_GetIntData(obj, SKILL_DEMONSLAYER_GROUPDANCE, 14) > 10 || GROUPDANCE_STONE > 0){targetMax = 10; create_number = create_number + 10;}
local baseangle = sq_getRandom(0,60);
if(target_number > 0){
for(local ui = 0; ui < target_number; ui++){
local targetObj = obj.getVar("groupdance_target").get_obj_vector(ui);
if(targetObj){
local id = sq_GetObjectId(targetObj);
for(local i = 0; i < targetMax; i++){
if(obj.getVar("groupdance_sub").getInt(10) >= create_number) return;
obj.getVar("groupdance_sub").setInt(10, obj.getVar("groupdance_sub").getInt(10) + 1);
local angle = 360 / targetMax * i + baseangle;
local x = (sq_Cos(sq_ToRadian(angle.tofloat())) * 150.0).tointeger();
local y = (sq_Sin(sq_ToRadian(angle.tofloat())) * 50.0).tointeger();
local sub = i % 5;//2;//
if(sq_GetIntData(obj, SKILL_DEMONSLAYER_GROUPDANCE, 14) > 10 || GROUPDANCE_STONE > 0) sub = i % 5;
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_GROUPDANCE, -1, 0, 1.0) + 100;//破
switch(sub){
case 1: totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_GROUPDANCE, -1, 1, 1.0) + 100; break;//舞
case 2: totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_GROUPDANCE, -1, 2, 1.0) + 100; break;//刺
case 3: totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_GROUPDANCE, -1, 3, 1.0) + 100; break;//滅
case 4: totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_DEMONSLAYER_GROUPDANCE, -1, 4, 1.0) + 100; break;//血飲狂舞
}
// print("sub = "+sub+" , totalDamage = "+totalDamage);
sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atswordman_bykk/demonslayer/animation/atgroupdance/appear_dance_fog.ani", x, y, 0);
cearteSkillPassiveObj_AtSwordMan_bykk(obj, obj, PASSIVEOBJECT_BYKK_DEMONSLAYER, x, y, 0, obj.getDirection(), 2, SKILL_DEMONSLAYER_GROUPDANCE, 1, totalDamage, sub, id, 0, 0, 0, 0, 0, 1);
}
}
}
}
break;
}
break;
}
}
function onEndState_Groupdance_bykk(obj, newState)
{
if(!obj) return;
}
function onProc_Groupdance_bykk(obj)
{
if(!obj) return;
}
function onKeyFrameFlag_Groupdance_bykk(obj, flagIndex)
{
if (!obj) return;
}
function onProcCon_Groupdance_bykk(obj)
{
if(!obj) return;
}
function setGroupdance_AtSwordman_bykk(obj, drawObj, targetObj)
{
if(!obj) return;
local X = drawObj.getXPos();
local Y = drawObj.getYPos();
local posX = obj.getVar("move").getInt(12);
local posY = targetObj.getYPos();
local offsetX = sq_Abs(X - posX);
local offsetY = Y - posY;
local atan = sq_Atan2(offsetX.tofloat(), offsetY.tofloat()) + 1.57;
if((X < posX && obj.getDirection() == ENUM_DIRECTION_LEFT) || (X > posX && obj.getDirection() == ENUM_DIRECTION_RIGHT)){
if(Y < posY) atan = atan + 2.355;
else atan = atan - 1.57;
}
local pAni = drawObj.getCurrentAnimation();
sq_SetfRotateAngle(pAni, -atan);
}