3759 lines
145 KiB
C
3759 lines
145 KiB
C
|
|
|
|
function createOnlyDrawObject_ATPriest_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer)
|
|
{
|
|
local ani = sq_CreateAnimation("",aniPath);
|
|
local pooledObj = sq_CreatePooledObject(ani,isTrue);
|
|
sq_SetCurrentDirection(pooledObj, direction);
|
|
pooledObj.setCurrentPos(x,y,z);
|
|
pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer);
|
|
sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false);
|
|
return pooledObj;
|
|
}
|
|
|
|
function createOnlyDrawObjectEX_ATPriest_bykk(obj,aniPath,isTrue,direction,x,y,z,drawlayer,sizeRateX,sizeRateY)
|
|
{
|
|
local ani = sq_CreateAnimation("",aniPath);
|
|
local pooledObj = sq_CreatePooledObject(ani,isTrue);
|
|
sq_SetCurrentDirection(pooledObj, direction);
|
|
pooledObj.setCurrentPos(x,y,z);
|
|
local currentAni = pooledObj.getCurrentAnimation();
|
|
sizeRateX = sizeRateX.tofloat() / 100.0;
|
|
sizeRateY = sizeRateY.tofloat() / 100.0;
|
|
currentAni.setImageRateFromOriginal(sizeRateX, sizeRateY);
|
|
pooledObj = sq_SetEnumDrawLayer(pooledObj, drawlayer);
|
|
sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false);
|
|
return pooledObj;
|
|
}
|
|
|
|
function createSkillPassive_ATPriest_bykk(obj,passiveObj,objnum,x,y,z,direction,job,skillIndex,subtype,pushv1,pushv2,pushv3,pushv4,pushv5,pushv6,pushv7,pushv8)
|
|
{
|
|
if(!obj || !passiveObj || obj.getState() == STATE_DIE) return;
|
|
local destX_01 = 0;
|
|
local destY_01 = 0;
|
|
if(!isSameObject(obj, passiveObj)){
|
|
destX_01 = passiveObj.getXPos() - obj.getXPos();
|
|
destY_01 = passiveObj.getYPos() - obj.getYPos();
|
|
if(direction == ENUM_DIRECTION_LEFT) destX_01 = obj.getXPos() - passiveObj.getXPos();
|
|
}
|
|
sq_BinaryStartWrite();
|
|
sq_BinaryWriteDword(job);
|
|
sq_BinaryWriteDword(skillIndex);
|
|
sq_BinaryWriteDword(subtype);
|
|
sq_BinaryWriteDword(pushv1);
|
|
sq_BinaryWriteDword(pushv2);
|
|
sq_BinaryWriteDword(pushv3);
|
|
sq_BinaryWriteDword(pushv4);
|
|
sq_BinaryWriteDword(pushv5);
|
|
sq_BinaryWriteDword(pushv6);
|
|
sq_BinaryWriteDword(pushv7);
|
|
sq_BinaryWriteDword(pushv8);
|
|
sq_SendCreatePassiveObjectPacket(obj, objnum, 0, destX_01 + x, destY_01 + y, z, direction);
|
|
}
|
|
|
|
|
|
function getAttackAni_DemonicSwordman(obj, index)
|
|
{
|
|
if(!obj) return null;
|
|
print("attackIndex = "+index);
|
|
local ani = obj.sq_GetAttackAni(index);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_BODYPRESSEDSIN) > 0){
|
|
ani = sq_GetCustomAni(obj, ATPANI_BYKK_MISTRESS_ATTACK1 + index);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
local aniName = ["demonizationattack_basic_a_body","demonizationattack_basic_b_body","demonizationattack_basic_c_body"];
|
|
ani = getCurrentAnimation_demonization(obj, aniName[index], false);
|
|
}
|
|
}
|
|
else if(sq_GetSkillLevel(obj, SKILL_BYKK_CRUSADE) > 0){
|
|
ani = sq_GetCustomAni(obj, ATPANI_BYKK_CRUSADEATTACK1_BODY + index);
|
|
}
|
|
else if(sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0){
|
|
ani = sq_GetCustomAni(obj, ATPANI_BYKK_INQUISITOR_ATTACK1 + index);
|
|
}
|
|
return ani;
|
|
}
|
|
|
|
function getStayAni_DemonicSwordman(obj)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetStayAni();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
ani = getCurrentAnimation_demonization(obj, "demonization_stay", false);
|
|
return ani;
|
|
}
|
|
return ani;
|
|
}
|
|
|
|
function getMoveAni_DemonicSwordman(obj)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetMoveAni();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
ani = getCurrentAnimation_demonization(obj, "demonization_move", false);
|
|
return ani;
|
|
}
|
|
return ani;
|
|
}
|
|
|
|
function getSitAni_DemonicSwordman(obj)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetSitAni();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
ani = getCurrentAnimation_demonization(obj, "demonization_sit", false);
|
|
return ani;
|
|
}
|
|
return ani;
|
|
}
|
|
|
|
function getDamageAni_DemonicSwordman(obj, index)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetDamageAni(index);
|
|
local aniName = ["demonization_damage1","demonization_damage2"];
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
ani = getCurrentAnimation_demonization(obj, aniName[index], false);
|
|
return ani;
|
|
}
|
|
return ani;
|
|
}
|
|
|
|
function getDownAni_DemonicSwordman(obj)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetDownAni();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
ani = getCurrentAnimation_demonization(obj, "demonization_down", false);
|
|
return ani;
|
|
}
|
|
return ani;
|
|
}
|
|
|
|
function getOverturnAni_DemonicSwordman(obj)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetOverturnAni();
|
|
return ani;
|
|
}
|
|
|
|
function getJumpAni_DemonicSwordman(obj)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetJumpAni();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
ani = getCurrentAnimation_demonization(obj, "demonization_jump", false);
|
|
return ani;
|
|
}
|
|
return ani;
|
|
}
|
|
|
|
function getJumpAttackAni_DemonicSwordman(obj)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetJumpAttackAni();
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_CRUSADE) > 0){
|
|
ani = sq_GetCustomAni(obj, ATPANI_BYKK_CRUSADEJUMPATTACK_BODY);
|
|
}
|
|
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
ani = getCurrentAnimation_demonization(obj, "demonizationattack_jump_body", false);
|
|
return ani;
|
|
}
|
|
return ani;
|
|
}
|
|
|
|
function getRestAni_DemonicSwordman(obj)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetRestAni();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
ani = getCurrentAnimation_demonization(obj, "demonization_stay", false);
|
|
return ani;
|
|
}
|
|
return ani;
|
|
}
|
|
|
|
function getThrowChargeAni_DemonicSwordman(obj, index)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetThrowChargeAni(index);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
ani = getCurrentAnimation_demonization(obj, "demonization_throw1", false);
|
|
return ani;
|
|
}
|
|
return ani;
|
|
}
|
|
|
|
function getThrowShootAni_DemonicSwordman(obj, index)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetThrowShootAni(index);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
ani = getCurrentAnimation_demonization(obj, "demonization_throw2", false);
|
|
return ani;
|
|
}
|
|
return ani;
|
|
}
|
|
|
|
function getDashAni_DemonicSwordman(obj)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetDashAni();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
ani = getCurrentAnimation_demonization(obj, "demonization_dash", false);
|
|
return ani;
|
|
}
|
|
return ani;
|
|
}
|
|
|
|
function getDashAttackAni_DemonicSwordman(obj)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetDashAttackAni();
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_CRUSADE) > 0){
|
|
ani = sq_GetCustomAni(obj, ATPANI_BYKK_CRUSADEDASHATTACK_BODY);
|
|
}
|
|
else if(sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0){
|
|
ani = sq_GetCustomAni(obj, ATPANI_BYKK_HOLYFLAME_FRONT_BODY);
|
|
}
|
|
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
ani = getCurrentAnimation_demonization(obj, "demonizationattack_dash_body", false);
|
|
return ani;
|
|
}
|
|
return ani;
|
|
}
|
|
|
|
function getGetItemAni_DemonicSwordman(obj)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetGetItemAni();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
ani = getCurrentAnimation_demonization(obj, "demonization_sit", false);
|
|
return ani;
|
|
}
|
|
return ani;
|
|
}
|
|
|
|
function getBuffAni_DemonicSwordman(obj)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetBuffAni();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
ani = getCurrentAnimation_demonization(obj, "demonization_buff", false);
|
|
return ani;
|
|
}
|
|
return ani;
|
|
}
|
|
|
|
|
|
function getDefaultAttackInfo_DemonicSwordman(obj, index)
|
|
{
|
|
if (!obj) return null;
|
|
local attackInfo = obj.sq_GetDefaultAttackInfo(index);
|
|
local growType = sq_getGrowType(obj);
|
|
switch(growType){
|
|
case 1:
|
|
if(index == 4) index = 0;
|
|
attackInfo = sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_CRUSADERATTACK1 + index);
|
|
break;
|
|
case 2:
|
|
attackInfo = sq_GetCustomAttackInfo(obj, ATPATK_BYKK_INQUISITOR_ATTACK1 + index);
|
|
break;
|
|
}
|
|
return attackInfo;
|
|
}
|
|
|
|
function getDashAttackInfo_DemonicSwordman(obj)
|
|
{
|
|
if (!obj) return null;
|
|
local attackInfo = obj.sq_GetDashAttackInfo();
|
|
if(sq_getGrowType(obj) == 1){
|
|
attackInfo = sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_CRUSADERDASHATTACK);
|
|
}
|
|
return attackInfo;
|
|
}
|
|
|
|
function getJumpAttackInfo_DemonicSwordman(obj)
|
|
{
|
|
if (!obj) return null;
|
|
local attackInfo = obj.sq_GetJumpAttackInfo();
|
|
if(sq_getGrowType(obj) == 1){
|
|
attackInfo = sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_CRUSADERJUMPATTACK);
|
|
}
|
|
return attackInfo;
|
|
}
|
|
|
|
function onSetState_ATPriestAttack(obj, state, datas, isResetTimer)
|
|
{
|
|
print("sub = "+sq_GetVectorData(datas, 0));
|
|
if(sq_getGrowType(obj) == 4){
|
|
if(sq_GetVectorData(datas, 0) != 0) return;
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_BODYPRESSEDSIN) > 0){
|
|
//print("test");
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(10);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_DEPRAVITYSEVENSINS, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
}
|
|
}
|
|
else if(sq_getGrowType(obj) == 1) {
|
|
local attackIndex = sq_GetVectorData(datas, 0);
|
|
switch(attackIndex){
|
|
case 0: obj.sq_PlaySound("R_PW_1ATK"); break;
|
|
case 1: obj.sq_PlaySound("R_PW_2ATK"); break;
|
|
case 2: obj.sq_PlaySound("R_PW_3ATK"); break;
|
|
}
|
|
}
|
|
}
|
|
|
|
function onAfterSetState_ATPriestAttack(obj, state, datas, isResetTimer)
|
|
{
|
|
//
|
|
local growType = sq_getGrowType(obj);
|
|
switch(growType){
|
|
case 2:
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0){
|
|
local attackIndex = obj.getAttackIndex();
|
|
switch(attackIndex){
|
|
case 0: obj.sq_PlaySound("R_PW_INQUISITOR_READING_01"); obj.sq_PlaySound("R_PW_1ATK"); break;
|
|
case 1: obj.sq_PlaySound("R_PW_INQUISITOR_READING_02"); obj.sq_PlaySound("R_PW_2ATK"); break;
|
|
case 2: obj.sq_PlaySound("R_PW_INQUISITOR_READING_03"); obj.sq_PlaySound("R_PW_3ATK"); break;
|
|
}
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot){
|
|
local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
switch(attackIndex){
|
|
case 0:
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/attack1.ani"), 0, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atwillofinquisitor/attack1_holyflamea_1hitsmokea.ani", 0, 1, 0);
|
|
break;
|
|
case 1:
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/attack2.ani"), 0, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atwillofinquisitor/attack2_holyflame_2hitsmoke.ani", 0, 1, 0);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
obj.setTimeEvent(1, currentAni.getDelaySum(0, 3), 1, false);
|
|
break;
|
|
case 2:
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/attack3.ani"), 0, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atwillofinquisitor/attack3_holyflame_3hitsmoke.ani", 0, 1, 0);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
obj.setTimeEvent(1, currentAni.getDelaySum(0, 6), 1, false);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
obj.getVar("cansetAttackInfo").setBool(0, true);
|
|
}
|
|
|
|
function onTimeEvent_ATPriestAttack(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
local growType = sq_getGrowType(obj);
|
|
switch(growType){
|
|
case 2:
|
|
switch(timeEventIndex){
|
|
case 1:
|
|
local epObj = obj.getVar("EssenceofPhlegeObj").get_obj_vector(0);
|
|
if(epObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(epObj);
|
|
if(((sq_GetXPos(colObj) - sq_GetXPos(obj)) <= 200 && sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT || (sq_GetXPos(obj) - sq_GetXPos(colObj)) <= 200 && sq_GetDirection(obj) == ENUM_DIRECTION_LEFT) && sq_Abs(sq_GetYPos(colObj) - sq_GetYPos(obj)) <= 40){
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ESSENCEOFPHLEGE, -1, 1, 1.0);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 13);
|
|
createSkillPassive_ATPriest_bykk(obj,colObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,-sq_GetZPos(obj) + 100,obj.getDirection(),2,SKILL_BYKK_ESSENCEOFPHLEGE,5,totalDamage,sizeRate,0,0,0,0,0,0);
|
|
sq_SetMyShake(obj, 2, 100);
|
|
colObj.setTimeEvent(1, 1000, 1, true);
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onBeforeAttack_ATPriestAttack(obj,damager,boundingBox,isStuck)
|
|
{
|
|
if(obj.getVar("cansetAttackInfo").getBool(0)){
|
|
obj.getVar("cansetAttackInfo").setBool(0, false);
|
|
obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),obj.getState());
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCurrentAttackInfo(obj));
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot){
|
|
local totalDamage = sq_GetLevelData(obj, 174, 0, sq_GetSkillLevel(obj, 174)) * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000;
|
|
obj.getVar("holyflameDamageSet").setInt(0, totalDamage);
|
|
local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
attackInfo.setElement(ENUM_ELEMENT_LIGHT);
|
|
attackInfo.setElement(ENUM_ELEMENT_FIRE);
|
|
}
|
|
}
|
|
local growType = sq_getGrowType(obj);
|
|
switch(growType){
|
|
case 1:
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_GRACEOFDEVINE) > 0){
|
|
local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
attackInfo.setElement(ENUM_ELEMENT_LIGHT);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onAttack_ATPriestAttack(obj, damager, boundingBox, isStuck)
|
|
{
|
|
if(!obj || isStuck) return;
|
|
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox);
|
|
}
|
|
}
|
|
|
|
function getAttackCancelStartFrameSize_DemonicSwordman(obj)
|
|
{
|
|
local maxAttackNumber = 2;
|
|
local growType = sq_getGrowType(obj);
|
|
switch(growType){
|
|
case 2: if(sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0) maxAttackNumber = 2; break;
|
|
case 4: maxAttackNumber = 2; break;
|
|
}
|
|
return maxAttackNumber;
|
|
}
|
|
|
|
function getAttackCancelStartFrame_DemonicSwordman(obj, index)
|
|
{
|
|
if(!obj) return null;
|
|
local growType = sq_getGrowType(obj);
|
|
local frm = obj.sq_GetAttackCancelStartFrame(index);
|
|
if(growType == 2) frm = 3;
|
|
return frm;
|
|
}
|
|
|
|
function onSetState_ATPriestDashAttack(obj, state, datas, isResetTimer)
|
|
{
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
obj.sq_PlaySound("PW_DASHATK_DM");
|
|
obj.sq_PlaySound("R_SCYTHE");
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_dash_glow.ani"), 0, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_dash_staydusta.ani", 0, -1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_dash_staydustb.ani", 0, -1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_dash_staydustc.ani", 0, -1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_dash_stayrosea.ani", 0, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_dash_stayroseb.ani", 0, 1, 0);
|
|
}
|
|
else obj.sq_PlaySound("R_PW_3ATK");
|
|
}
|
|
|
|
function onAfterSetState_ATPriestDashAttack(obj, state, datas, isResetTimer)
|
|
{
|
|
local growType = sq_getGrowType(obj);
|
|
switch(growType){
|
|
case 2:
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0){
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atwillofinquisitor/dashattack_effect_dashtail.ani"), 0, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atwillofinquisitor/dashattack_effect_dashdust.ani", 0, 1, 0);
|
|
obj.sq_PlaySound("R_PW_3ATK");
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot){
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/dashattack.ani"), 0, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atholyflame/holyflame_beffect2_bdodge2.ani", 125, 0, 0);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
obj.setTimeEvent(1, currentAni.getDelaySum(0, 1), 1, false);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
obj.getVar("cansetAttackInfo").setBool(0, true);
|
|
}
|
|
|
|
function onTimeEvent_ATPriestDashAttack(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
local growType = sq_getGrowType(obj);
|
|
switch(growType){
|
|
case 2:
|
|
switch(timeEventIndex){
|
|
case 1:
|
|
local epObj = obj.getVar("EssenceofPhlegeObj").get_obj_vector(0);
|
|
if(epObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(epObj);
|
|
if(((sq_GetXPos(colObj) - sq_GetXPos(obj)) <= 200 && sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT || (sq_GetXPos(obj) - sq_GetXPos(colObj)) <= 200 && sq_GetDirection(obj) == ENUM_DIRECTION_LEFT) && sq_Abs(sq_GetYPos(colObj) - sq_GetYPos(obj)) <= 40){
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ESSENCEOFPHLEGE, -1, 1, 1.0);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 13);
|
|
createSkillPassive_ATPriest_bykk(obj,colObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,-sq_GetZPos(obj) + 100,obj.getDirection(),2,SKILL_BYKK_ESSENCEOFPHLEGE,5,totalDamage,sizeRate,0,0,0,0,0,0);
|
|
sq_SetMyShake(obj, 2, 100);
|
|
colObj.setTimeEvent(1, 1000, 1, true);
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onBeforeAttack_ATPriestDashAttack(obj,damager,boundingBox,isStuck)
|
|
{
|
|
if(obj.getVar("cansetAttackInfo").getBool(0)){
|
|
obj.getVar("cansetAttackInfo").setBool(0, false);
|
|
obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),obj.getState());
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCurrentAttackInfo(obj));
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot){
|
|
local totalDamage = sq_GetLevelData(obj, 174, 1, sq_GetSkillLevel(obj, 174)) * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000;
|
|
obj.getVar("holyflameDamageSet").setInt(0, totalDamage);
|
|
local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
attackInfo.setElement(ENUM_ELEMENT_LIGHT);
|
|
attackInfo.setElement(ENUM_ELEMENT_FIRE);
|
|
}
|
|
}
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_GRACEOFDEVINE) > 0){
|
|
local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
attackInfo.setElement(ENUM_ELEMENT_LIGHT);
|
|
}
|
|
}
|
|
|
|
function onAttack_ATPriestDashAttack(obj, damager, boundingBox, isStuck)
|
|
{
|
|
if(!obj || isStuck) return;
|
|
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox);
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_ATPriestDashAttack(obj, flagIndex)
|
|
{}
|
|
|
|
function onSetState_ATPriestJumpAttack(obj, state, datas, isResetTimer)
|
|
{
|
|
// print("state = "+state);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_jump_effb01.ani"), 0, 0);
|
|
obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_jump_stayrosea.ani"), 0, 0);
|
|
obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_jump_stayroseb.ani"), 0, 0);
|
|
obj.sq_PlaySound("PW_JUMPATK_DM");
|
|
obj.sq_PlaySound("R_SCYTHE");
|
|
}
|
|
else obj.sq_PlaySound("PW_JUMPATK");
|
|
}
|
|
|
|
function onAfterSetState_ATPriestJumpAttack(obj, state, datas, isResetTimer)
|
|
{
|
|
local growType = sq_getGrowType(obj);
|
|
switch(growType){
|
|
case 2:
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0){
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atwillofinquisitor/jumpattack_effect_jumptail.ani"), 0, 0);
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot){
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/jumpattack.ani"), 0, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atwillofinquisitor/jumpattack_holyflame_jumpsmoke.ani", 0, 1, 0);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
obj.getVar("cansetAttackInfo").setBool(0, true);
|
|
}
|
|
|
|
function onBeforeAttack_ATPriestJumpAttack(obj,damager,boundingBox,isStuck)
|
|
{
|
|
if(obj.getVar("cansetAttackInfo").getBool(0)){
|
|
obj.getVar("cansetAttackInfo").setBool(0, false);
|
|
obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),obj.getState());
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCurrentAttackInfo(obj));
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot){
|
|
local totalDamage = sq_GetLevelData(obj, 174, 2, sq_GetSkillLevel(obj, 174)) * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000;
|
|
obj.getVar("holyflameDamageSet").setInt(0, totalDamage);
|
|
local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
attackInfo.setElement(ENUM_ELEMENT_LIGHT);
|
|
attackInfo.setElement(ENUM_ELEMENT_FIRE);
|
|
}
|
|
}
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_GRACEOFDEVINE) > 0){
|
|
local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
attackInfo.setElement(ENUM_ELEMENT_LIGHT);
|
|
}
|
|
}
|
|
|
|
function onAttack_ATPriestJumpAttack(obj, damager, boundingBox, isStuck)
|
|
{
|
|
if(!obj || isStuck) return;
|
|
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox);
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_ATPriestJumpAttack(obj, flagIndex)
|
|
{
|
|
}
|
|
|
|
function onAfterSetState_ATPriestJump(obj, state, datas, isResetTimer)
|
|
{
|
|
local growType = sq_getGrowType(obj);
|
|
switch(growType){
|
|
case 2:
|
|
local isBackStep = sq_GetVectorData(datas, 1);
|
|
if(isBackStep == 1 && sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0){
|
|
local timer = obj.getVar("ATPriestJumpTimer").get_ct_vector(0);
|
|
if(!timer){
|
|
obj.getVar("ATPriestJumpTimer").clear_ct_vector();
|
|
obj.getVar("ATPriestJumpTimer").push_ct_vector();
|
|
timer = obj.getVar("ATPriestJumpTimer").get_ct_vector(0);
|
|
timer.Reset();
|
|
timer.Start(10000,0);
|
|
}
|
|
obj.getVar("ATPriestJumpSet").setBool(0, true);
|
|
}
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot){
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/jump.ani"), 0, 0);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProc_ATPriestJump(obj)
|
|
{
|
|
if(!obj) return;
|
|
if(obj.getVar("ATPriestJumpSet").getBool(0)){
|
|
local timer = obj.getVar("ATPriestJumpTimer").get_ct_vector(0);
|
|
if(timer){
|
|
local currentT = timer.Get();
|
|
local coolTime = sq_GetIntData(obj, SKILL_BYKK_WILLOFINQUISITOR, 14);
|
|
if(currentT >= coolTime){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_PATROLBOMB,true);
|
|
if(obj.sq_IsEnterSkill(SKILL_BYKK_PATROLBOMB) != -1){
|
|
obj.getVar("ATPriestJumpSet").setBool(0, false);
|
|
timer.Reset();
|
|
timer.Start(10000,0);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PATROLBOMB, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return;
|
|
}
|
|
obj.setSkillCommandEnable(SKILL_BYKK_ESSENCEOFPHLEGE,true);
|
|
if(obj.sq_IsEnterSkill(SKILL_BYKK_ESSENCEOFPHLEGE) != -1){
|
|
obj.getVar("ATPriestJumpSet").setBool(0, false);
|
|
timer.Reset();
|
|
timer.Start(10000,0);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_ESSENCEOFPHLEGE, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return;
|
|
}
|
|
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
|
|
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){
|
|
obj.getVar("ATPriestJumpSet").setBool(0, false);
|
|
timer.Reset();
|
|
timer.Start(10000,0);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_JUMP_ATTACK, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
function onEndState_ATPriestJump(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
local growType = sq_getGrowType(obj);
|
|
switch(growType){
|
|
case 2:
|
|
if(obj.getVar("ATPriestJumpSet").getBool(0)) obj.getVar("ATPriestJumpSet").setBool(0, false);
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
function onAfterSetState_ATPriestStand(obj, state, datas, isResetTimer)
|
|
{
|
|
local growType = sq_getGrowType(obj);
|
|
switch(growType){
|
|
case 2:
|
|
obj.getVar("StaySet").setInt(0, 0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProc_ATPriestStand(obj)
|
|
{
|
|
if(!obj) return;
|
|
local growType = sq_getGrowType(obj);
|
|
switch(growType){
|
|
case 2:
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot && CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/demonicswordman/2_inquistor/ap_holyflame_buff.nut")){
|
|
local poleAni = obj.getCurrentAnimation();
|
|
local poleAniFrameNumber = sq_GetAniFrameNumber(poleAni, 0);
|
|
if(poleAniFrameNumber != obj.getVar("StaySet").getInt(0)){
|
|
obj.getVar("StaySet").setInt(0, poleAniFrameNumber);
|
|
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/demonicswordman/2_inquistor/ap_holyflame_buff.nut");
|
|
if(addAppendage){
|
|
addAppendage.sq_DeleteEffectFront();
|
|
switch(poleAniFrameNumber){
|
|
case 15: addAppendage.sq_AddEffectFront("character/swordman/effect/animation/1_atpriest_bykk/holyflameweaponeffect/rest.ani"); break;//rest
|
|
case 4: addAppendage.sq_AddEffectFront("character/swordman/effect/animation/1_atpriest_bykk/holyflameweaponeffect/stay.ani"); break;//stay
|
|
case 8: addAppendage.sq_AddEffectFront("character/swordman/effect/animation/1_atpriest_bykk/holyflameweaponeffect/move.ani"); break;//move
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_ATPriestStand(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
local growType = sq_getGrowType(obj);
|
|
switch(growType){
|
|
case 2:
|
|
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/demonicswordman/2_inquistor/ap_holyflame_buff.nut");
|
|
if(addAppendage){
|
|
addAppendage.sq_DeleteEffectFront();
|
|
obj.getVar("StaySet").setInt(0, 0);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onAfterSetState_ATPriestDash(obj, state, datas, isResetTimer)
|
|
{
|
|
local growType = sq_getGrowType(obj);
|
|
switch(growType){
|
|
case 2:
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot){
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/dash.ani"), 0, 0);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function procSkill_Temptress_bykk(obj)
|
|
{
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_VIOLENTASSAULT,false);
|
|
obj.setSkillCommandEnable(SKILL_BYKK_CURE,false);
|
|
obj.setSkillCommandEnable(SKILL_BYKK_HOLYSMASH,false);
|
|
obj.setSkillCommandEnable(SKILL_BYKK_WEAPONGUARD,false);
|
|
obj.setSkillCommandEnable(SKILL_BYKK_TALISMANOFLIGHTNING,false);
|
|
obj.setSkillCommandEnable(SKILL_BYKK_PRAYEROFHEAL,false);
|
|
}
|
|
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_SINSAYER) > 0 && obj.getVar("setCancelSkill").getBool(10)){
|
|
local skillIndex = [SKILL_BYKK_CARDINALEXECUTION, SKILL_BYKK_DUALSLASH, SKILL_BYKK_ENVIOUSKISS, SKILL_BYKK_FLOWEROFPURIFICATION, SKILL_BYKK_GLUTTONYVOMIT, SKILL_BYKK_GREEDTHELURKER, SKILL_BYKK_HANDAWAKENTOSIN, SKILL_BYKK_LASTGENESIS, SKILL_BYKK_LUSTHAND, SKILL_BYKK_PRIDEACCEL, SKILL_BYKK_ROLLINGRUSH, SKILL_BYKK_SCUDTHEWRATH, SKILL_BYKK_SCYTHEMSSACRE, SKILL_BYKK_SECONDSOUL, SKILL_BYKK_SLOTHBODY, SKILL_BYKK_THIRDRIB];
|
|
for(local i = 0; i < skillIndex.len(); i++){
|
|
if(!sq_GetSkill(obj, skillIndex[i]).isInCoolTime()){
|
|
if(skillIndex[i] == SKILL_BYKK_FLOWEROFPURIFICATION && !CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) continue;
|
|
obj.setSkillCommandEnable(skillIndex[i],true);
|
|
local b_useskill = obj.sq_IsEnterSkill(skillIndex[i]);
|
|
if(b_useskill != -1){
|
|
print("test");
|
|
obj.getVar("setCancelSkill").setBool(10, false);
|
|
switch(skillIndex){
|
|
case SKILL_BYKK_CARDINALEXECUTION:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_CARDINALEXECUTION, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
break;
|
|
case SKILL_BYKK_DUALSLASH:
|
|
obj.sq_IntVectClear();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(1);
|
|
else obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_DUALSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
break;
|
|
case SKILL_BYKK_ENVIOUSKISS:
|
|
obj.getVar("Enviouskiss_Bool").setBool(0, false);
|
|
obj.getVar("Enviouskiss_Tar").clear_obj_vector();
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_ENVIOUSKISS, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
break;
|
|
case SKILL_BYKK_FLOWEROFPURIFICATION:
|
|
obj.getVar("Flowerofpurification_Tar").clear_obj_vector();
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_FLOWEROFPURIFICATION, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
break;
|
|
case SKILL_BYKK_GLUTTONYVOMIT:
|
|
obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_GLUTTONYVOMIT);
|
|
obj.getVar("Gluttonyvomit_Count").setInt(0, 0);
|
|
obj.sq_IntVectClear();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(1);
|
|
else obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_GLUTTONYVOMIT, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
break;
|
|
case SKILL_BYKK_GREEDTHELURKER:
|
|
obj.sq_IntVectClear();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(1);
|
|
else obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_GREEDTHELURKER, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
break;
|
|
case SKILL_BYKK_HANDAWAKENTOSIN:
|
|
obj.getVar("Handawakentosin_EXP").clear_obj_vector();
|
|
obj.sq_IntVectClear();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(1);
|
|
else obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_HANDAWAKENTOSIN, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
break;
|
|
case SKILL_BYKK_LASTGENESIS:
|
|
obj.getVar("Lastgenesis_Tar").clear_obj_vector();
|
|
obj.getVar("Lastgenesis_TarFix").clear_obj_vector();
|
|
obj.getVar("Lastgenesis_Bool").setBool(0, true);
|
|
obj.getVar("Lastgenesis_Bool").setBool(1, false);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.getVar("Lastgenesis_Bool").setBool(1, true);
|
|
obj.sq_IntVectClear();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(1);
|
|
else obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_LASTGENESIS, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
break;
|
|
case SKILL_BYKK_LUSTHAND:
|
|
obj.getVar("lusthand_tar").clear_obj_vector();
|
|
obj.sq_IntVectClear();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(10);
|
|
else obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_LUSTHAND, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
break;
|
|
case SKILL_BYKK_PRIDEACCEL:
|
|
obj.getVar("Prideaccel_Move").setBool(0, false);
|
|
obj.sq_IntVectClear();
|
|
if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(4);
|
|
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(1);
|
|
else obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PRIDEACCEL, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
break;
|
|
case SKILL_BYKK_ROLLINGRUSH:
|
|
obj.getVar("Rollingrush_Bool").setBool(0, false);
|
|
obj.getVar("Rollingrush_Bool").setBool(1, false);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.getVar("Rollingrush_Bool").setBool(0, true);
|
|
obj.sq_IntVectClear();
|
|
if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(1);
|
|
else obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_ROLLINGRUSH, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
break;
|
|
case SKILL_BYKK_SCUDTHEWRATH:
|
|
obj.getVar("Scudthewrath_Bool").setBool(0, false);
|
|
obj.getVar("Scudthewrath_Bool").setBool(1, false);
|
|
obj.getVar("Scudthewrath_Tar").clear_obj_vector();
|
|
obj.sq_IntVectClear();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(1);
|
|
else obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_SCUDTHEWRATH, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
break;
|
|
case SKILL_BYKK_SCYTHEMSSACRE:
|
|
obj.getVar("Scythemssacre_Bool").setBool(0, false);
|
|
obj.getVar("Scythemssacre_Count").setInt(10, 0);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.getVar("Scythemssacre_Bool").setBool(0, true);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_SCYTHEMSSACRE, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
break;
|
|
case SKILL_BYKK_SECONDSOUL:
|
|
obj.getVar("Secondsoul_Bool").setBool(0, false);
|
|
obj.getVar("Scudthewrath_Tar").clear_obj_vector();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.getVar("Secondsoul_Bool").setBool(0, true);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_SECONDSOUL, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
break;
|
|
case SKILL_BYKK_SLOTHBODY:
|
|
obj.getVar("Slothbody_ani").clear_obj_vector();
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_SLOTHBODY, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
break;
|
|
case SKILL_BYKK_THIRDRIB:
|
|
obj.getVar("Thirdrib_Bool").setBool(0, false);
|
|
if(false) obj.getVar("Thirdrib_Bool").setBool(0, true);
|
|
obj.getVar("Thirdrib_Tar").clear_obj_vector();
|
|
obj.sq_IntVectClear();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(1);
|
|
else obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_THIRDRIB, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function getCurrentAnimation_demonization(obj, aniName, isRewind)
|
|
{
|
|
local ani = null;
|
|
local aniPath_01 = "character/swordman/dsanimation/atpriest_bykk/", aName = "demonization_" + aniName;
|
|
ani = obj.getVar().GetAnimationMap(aName, aniPath_01 + aniName + ".ani");
|
|
if(ani && isRewind) sq_Rewind(ani);
|
|
return ani;
|
|
}
|
|
|
|
function proc_appendage_latentability(appendage)
|
|
{
|
|
if(!appendage) return;
|
|
local obj = appendage.getParent();
|
|
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj);
|
|
if(!sqrChr || sqrChr.getState() == STATE_DIE){
|
|
appendage.setValid(false);
|
|
return;
|
|
}
|
|
|
|
local t = appendage.getVar("skill_1").get_timer_vector(0);
|
|
local t2 = appendage.getVar("skill_2").get_timer_vector(0);
|
|
local currentT = appendage.getTimer().Get();
|
|
if(t2 && t2.isOnEvent(currentT)){
|
|
local skillLevel = sqrChr.sq_GetSkillLevel(SKILL_LATENTABILITY);
|
|
local value57 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 57, skillLevel); //是否释能
|
|
if(value57 > 0){
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, sqrChr, -1, false, "appendage/character/ap_skillbonus.nut", true);
|
|
AddAppendage.sq_SetValidTime(20000);
|
|
AddAppendage.getVar().setInt(10, value57);
|
|
// print("bonus = "+AddAppendage.getVar().getInt(10));
|
|
if(value57 > 100){
|
|
local tTerm = t2.getEventTerm();
|
|
if(tTerm == 5000) t2.setEventTerm(20000);
|
|
else if(tTerm != 20000) t2.setEventTerm(20000);
|
|
}
|
|
else {
|
|
local tTerm = t2.getEventTerm();
|
|
if(tTerm == 5000) t2.setEventTerm(30000);
|
|
else if(tTerm != 30000) t2.setEventTerm(30000);
|
|
}
|
|
sq_SendCreatePassiveObjectPacket(sqrChr, 990002, 0, 0, 0, 0, sqrChr.getDirection());
|
|
}
|
|
|
|
}
|
|
if(t && t.isOnEvent(currentT)){
|
|
local skillLevel = sqrChr.sq_GetSkillLevel(SKILL_LATENTABILITY);
|
|
local value0 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 0, skillLevel); //力量%
|
|
local value1 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 1, skillLevel); //智力%
|
|
local value2 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 2, skillLevel); //體力%
|
|
local value3 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 3, skillLevel); //精神%
|
|
|
|
local value4 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 4, skillLevel); //力量
|
|
local value5 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 5, skillLevel); //智力
|
|
local value6 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 6, skillLevel); //體力
|
|
local value7 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 7, skillLevel); //精神
|
|
|
|
local value8 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 8, skillLevel); //力量增加率%
|
|
local value9 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 9, skillLevel); //智力增加率%
|
|
local value10 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 10, skillLevel); //體力增加率%
|
|
local value11 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 11, skillLevel); //精神增加率%
|
|
|
|
local value12 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 12, skillLevel); //力量增加率
|
|
local value13 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 13, skillLevel); //智力增加率
|
|
local value14 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 14, skillLevel); //體力增加率
|
|
local value15 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 15, skillLevel); //精神增加率
|
|
|
|
local value16 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 16, skillLevel); //?擊速度
|
|
local value17 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 17, skillLevel); //釋放速度
|
|
local value18 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 18, skillLevel); //移動速度
|
|
|
|
local value19 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 19, skillLevel); //物理暴擊率
|
|
local value20 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 20, skillLevel); //魔法暴擊率
|
|
|
|
local value21 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 21, skillLevel); //火強
|
|
local value22 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 22, skillLevel); //冰強
|
|
local value23 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 23, skillLevel); //暗強
|
|
local value24 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 24, skillLevel); //光強
|
|
local value25 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 25, skillLevel); //所有屬強
|
|
|
|
local value26 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 26, skillLevel); //CD
|
|
if(sq_getJob(sqrChr) == 10 && sq_getGrowType(sqrChr) == 1 && CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, "character/atswordman/1_swordmaster/timeslash/ap_timeslash.nut")){
|
|
value26 = value26 - sq_GetLevelData(sqrChr, SKILL_SWORDMASTER_BYKK_TIMESLASH, 6, sq_GetSkillLevel(sqrChr, SKILL_SWORDMASTER_BYKK_TIMESLASH));
|
|
}
|
|
|
|
local value27 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 27, skillLevel); //物理暴傷增加率
|
|
local value28 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 28, skillLevel); //魔法暴傷增加率
|
|
|
|
local value29 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 29, skillLevel); //物理攻擊力
|
|
local value30 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 30, skillLevel); //魔法攻擊力
|
|
local value31 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 31, skillLevel); //獨立物理攻擊力
|
|
local value32 = sq_GetLevelData(sqrChr, SKILL_LATENTABILITY, 32, skillLevel); //獨立魔法攻擊力
|
|
|
|
local valueMax = [value0, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10, value11, value12, value13, value14, value15, value16, value17, value18, value19, value20, value21, value22, value23, value24, value25, value26, value27, value28, value29, value30];
|
|
|
|
for(local i = 0; i < valueMax.len(); i++){
|
|
if(valueMax[i] == appendage.getVar("value").getInt(i)) continue;
|
|
else{
|
|
appendage.getVar("value").setInt(i, valueMax[i]);
|
|
local change_appendage = appendage.sq_getChangeStatus("latentability");
|
|
if(!change_appendage){
|
|
change_appendage = appendage.sq_AddChangeStatus("latentability",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value0);
|
|
}
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, value0.tofloat()); //力量%
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, true, value1.tofloat()); //智力%
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_DEFENSE, true, value2.tofloat()); //體力%
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_DEFENSE, true, value3.tofloat()); //精神%
|
|
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, false, value4.tofloat()); //力量+
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, value5.tofloat()); //智力+
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_DEFENSE, false, value6.tofloat()); //體力+
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_DEFENSE, false, value7.tofloat()); //精神+
|
|
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_ATTACK_BONUS, true, value8.tofloat()); //力量增加率%
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK_BONUS, true, value9.tofloat()); //智力增加率%
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_PHYSICAL_GENUINE_ATTACK, true, value10.tofloat()); //體力增加率%
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_MAGICAL_GENUINE_ATTACK, true, value11.tofloat()); //精神增加率%
|
|
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, false, value12.tofloat()); //力量增加率
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, false, value13.tofloat()); //智力增加率
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_PHYSICAL_GENUINE_ATTACK, false, value14.tofloat()); //體力增加率
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_MAGICAL_GENUINE_ATTACK, false, value15.tofloat()); //精神增加率
|
|
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, true, value16.tofloat()); //攻擊速度
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_CAST_SPEED, true, value17.tofloat()); //釋放速度
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, true, value18.tofloat()); //移動速度
|
|
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, value19.tofloat()); //物理暴擊率
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_HIT_RATE, false, value20.tofloat()); //魔法暴擊率
|
|
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_FIRE, false, value21.tofloat()); //火強
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_WATER, false, value22.tofloat()); //冰強
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_DARK, false, value23.tofloat()); //暗強
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_LIGHT, false, value24.tofloat()); //光強
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_ALL, false, value25.tofloat()); //所有屬強
|
|
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_COOLTIME_DECLINE, true, value26.tofloat()); //CD
|
|
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_DAMAGE_RATE, false, (value27 / 0.667).tofloat()); //物理暴傷增加率
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_DAMAGE_RATE, false, (value28 / 0.667).tofloat()); //魔法暴傷增加率
|
|
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, value29.tofloat()); //物理攻擊力
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, value30.tofloat()); //魔法攻擊力
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_PHYSICAL_GENUINE_ATTACK, true, value31.tofloat()); //獨立物理攻擊力
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_MAGICAL_GENUINE_ATTACK, true, value32.tofloat()); //獨立魔法攻擊力
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
function onStart_appendage_latentability(appendage)
|
|
{
|
|
if(!appendage) return;
|
|
appendage.getVar("skill_1").clear_timer_vector();
|
|
appendage.getVar("skill_1").push_timer_vector();
|
|
local t_01 = appendage.getVar("skill_1").get_timer_vector(0);
|
|
t_01.setParameter(500, -1);
|
|
t_01.resetInstant(0);
|
|
for(local i = 0; i < 29; i++){
|
|
appendage.getVar("value").setInt(i, 0);
|
|
}
|
|
appendage.getVar("skill_2").clear_timer_vector();
|
|
appendage.getVar("skill_2").push_timer_vector();
|
|
local t_02 = appendage.getVar("skill_2").get_timer_vector(0);
|
|
t_02.setParameter(5000, -1);
|
|
t_02.resetInstant(0);
|
|
t_02.setEventOnStart(true);
|
|
}
|
|
|
|
function onEnd_appendage_latentability(appendage)
|
|
{
|
|
if(!appendage) return;
|
|
local obj = appendage.getParent();
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//惩戒十字
|
|
function checkExecutableSkill_Crossofpunishment(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CROSSOFPUNISHMENT);
|
|
if (isUse){
|
|
obj.getVar("Crossofpunishment").setInt(0, 0);
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot){
|
|
if(loadSlot.getRemainLoadNumber() > 0){
|
|
obj.getVar("Crossofpunishment").setInt(0, 1);
|
|
loadSlot.decreaseLoadCount(1);
|
|
}
|
|
}
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_CROSSOFPUNISHMENT, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Crossofpunishment(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Crossofpunishment(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(ATPANI_BYKK_CROSSOFPUNISHMENT_A_BODY);
|
|
obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atcrossofpunishment/crossofpunishment_a_basic_slash02.ani"), 0, 0);
|
|
obj.sq_PlaySound("CROSS_PUNISHMENT_01_FLAME");
|
|
obj.sq_PlaySound("CROSS_PUNISHMENT_01");
|
|
if(obj.getVar("Crossofpunishment").getInt(0) > 0){
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/crossofpunishment_a_body.ani"), 0, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcrossofpunishment/crossofpunishment_a_holyflame_smoke.ani", 0, 1, 0);
|
|
obj.sq_PlaySound("CROSS_PUNISHMENT_01_FLAME");
|
|
}
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_CROSSOFPUNISHMENT_B_BODY);
|
|
obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atcrossofpunishment/crossofpunishment_b_basic_slash02.ani"), 0, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcrossofpunishment/crossofpunishment_b_basic_backdust.ani", 0, -1, 0);
|
|
obj.sq_PlaySound("CROSS_PUNISHMENT_02_FLAME");
|
|
obj.sq_PlaySound("CROSS_PUNISHMENT_02");
|
|
if(obj.getVar("Crossofpunishment").getInt(0) > 0){
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/crossofpunishment_b_body.ani"), 0, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcrossofpunishment/crossofpunishment_b_holyflame_backeff02.ani", 0, -1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcrossofpunishment/crossofpunishment_b_holyflame_smoke.ani", 0, 1, 0);
|
|
obj.sq_PlaySound("CROSS_PUNISHMENT_01_FLAME");
|
|
}
|
|
break;
|
|
}
|
|
local bonus = [0, 1], attackIndex = [ATPRIESTATK_BYKK_CROSSOFPUNISHMENT_A, ATPRIESTATK_BYKK_CROSSOFPUNISHMENT_B];
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CROSSOFPUNISHMENT, -1, bonus[subState], 1.0) + 100;
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex[subState]));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
if(obj.getVar("Crossofpunishment").getInt(0) > 0){
|
|
local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
attackInfo.setElement(ENUM_ELEMENT_FIRE);
|
|
attackInfo.setElement(ENUM_ELEMENT_LIGHT);
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_Crossofpunishment(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_CROSSOFPUNISHMENT, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Crossofpunishment(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_Crossofpunishment(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Crossofpunishment(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
}
|
|
|
|
function onEndState_Crossofpunishment(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onAttack_Crossofpunishment(obj, damager, boundingBox, isStuck)
|
|
{
|
|
if(!obj || isStuck) return;
|
|
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
|
|
if(obj.getVar("Crossofpunishment").getInt(0) > 0) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox);
|
|
}
|
|
}
|
|
|
|
|
|
//衝刺斬
|
|
function checkExecutableSkill_Cutindash(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CUTINDASH);
|
|
if (isUse){
|
|
obj.getVar("Cutindash_Bool").setBool(0, false);
|
|
obj.getVar("Cutindash_Bool").setBool(1, false);
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CUTINDASH);
|
|
local sub = 0;
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) sub = 1;
|
|
local count = sq_GetLevelData(obj, SKILL_BYKK_CUTINDASH, sub, skillLevel);
|
|
obj.getVar("Cutindash_Count").setInt(10, count);
|
|
obj.sq_IntVectClear();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(10);
|
|
else obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_CUTINDASH, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Cutindash(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Cutindash(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0://dash
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATCUTINDASH_FRONT_DASH_BODY);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcutindash/atcutindash_front_dust_1.ani", 0, 1, 0);
|
|
obj.sq_PlaySound("R_PW_CUTINDASH_01");
|
|
break;
|
|
case 1://redash
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATCUTINDASH_FRONT_REDASH_BODY);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcutindash/atcutindash_front_dust_1.ani", 0, 1, 0);
|
|
obj.sq_PlaySound("R_PW_CUTINDASH_02");
|
|
break;
|
|
case 2://back dash
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATCUTINDASH_BACK_DASH_BODY);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcutindash/atcutindash_back_dust_1.ani", 0, 1, 0);
|
|
obj.sq_PlaySound("R_PW_CUTINDASH_02");
|
|
break;
|
|
case 3://att
|
|
obj.removeAllTimeEvent();
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_ORIGINALSIN) > 0){
|
|
local ani = getCurrentAnimation_demonization(obj, "atcutindashlv95atoriginalsinattacka_body", false);
|
|
obj.setCurrentAnimation(ani);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcutindash/lv95atoriginalsin/atcutindashlv95atoriginalsinattackafront_13.ani", 0, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcutindash/lv95atoriginalsin/atcutindashlv95atoriginalsinattackbfront_08.ani", 0, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcutindash/lv95atoriginalsin/atcutindashlv95atoriginalsinstartafront_01.ani", 0, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcutindash/lv95atoriginalsin/atcutindashlv95atoriginalsinslashb_00.ani", 0, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcutindash/lv95atoriginalsin/atcutindashlv95atoriginalsinstartafront_03.ani", 0, -1, 0);
|
|
}
|
|
else obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATCUTINDASH_ATT_BODY);
|
|
break;
|
|
case 4:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATCUTINDASHLV95ATORIGINALSINATTACKA_LAST_BODY);
|
|
break;
|
|
case 10:
|
|
local ani = getCurrentAnimation_demonization(obj, "atcutindash_front_dash_demonization", false);
|
|
obj.setCurrentAnimation(ani);
|
|
obj.sq_PlaySound("R_PW_CUTINDASH_DM_01");
|
|
break;
|
|
case 11:
|
|
obj.removeAllTimeEvent();
|
|
local aniSet = "atcutindash_att_demonization_front";
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_ORIGINALSIN) > 0){
|
|
aniSet = "atcutindashlv95atoriginalsinattackb_body";
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcutindash/lv95atoriginalsin/atcutindashlv95atoriginalsinattackafront_13.ani", 0, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcutindash/lv95atoriginalsin/atcutindashlv95atoriginalsinattackbfront_08.ani", 0, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcutindash/lv95atoriginalsin/atcutindashlv95atoriginalsinstartafront_01.ani", 0, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcutindash/lv95atoriginalsin/atcutindashlv95atoriginalsinslashb_00.ani", 0, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcutindash/lv95atoriginalsin/atcutindashlv95atoriginalsinstartafront_03.ani", 0, -1, 0);
|
|
}
|
|
local ani = getCurrentAnimation_demonization(obj, aniSet, false);
|
|
obj.setCurrentAnimation(ani);
|
|
obj.sq_PlaySound("PW_CUTINDASH_DM_02");
|
|
break;
|
|
case 12:
|
|
local aniSet = "atcutindash_back_dash_demonization";
|
|
local ani = getCurrentAnimation_demonization(obj, aniSet, false);
|
|
obj.setCurrentAnimation(ani);
|
|
obj.sq_PlaySound("PW_CUTINDASH_DM_02");
|
|
break;
|
|
case 13:
|
|
obj.removeAllTimeEvent();
|
|
local ani = getCurrentAnimation_demonization(obj, "atcutindash_att_demonization_back", false);
|
|
obj.setCurrentAnimation(ani);
|
|
break;
|
|
}
|
|
if(subState == 3 || subState == 11 || subState == 13) {
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CUTINDASH, -1, 2, 1.0) + 100;
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_CUTINDASH_ATTACK));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
return;
|
|
}
|
|
local moveX = [300, 200, -300, 0, 0];
|
|
if(subState > 9) {subState = subState - 10; moveX = [300, 200, -300, 0, 0];}
|
|
obj.getVar("Cutindash_Move").setInt(10, sq_GetXPos(obj));
|
|
obj.getVar("Cutindash_Move").setInt(11, moveX[subState]);
|
|
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 delaySum = currentAni.getDelaySum(false);
|
|
obj.setTimeEvent(0, delaySum / 50, 30, true);
|
|
}
|
|
|
|
function onEndCurrentAni_Cutindash(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
if(obj.getVar("Cutindash_Bool").getBool(0)) {
|
|
if(obj.getVar("Cutindash_Bool").getBool(1)) obj.sq_IntVectPush(2);
|
|
else obj.sq_IntVectPush(1);
|
|
}
|
|
else obj.sq_IntVectPush(3);
|
|
obj.getVar("Cutindash_Bool").setBool(0, false);
|
|
//obj.getVar("Cutindash_Bool").setBool(1, false);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_CUTINDASH, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
if(obj.getVar("Cutindash_Bool").getBool(0)) {
|
|
obj.getVar("Cutindash_Bool").setBool(0, false);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_CUTINDASH, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
case 2:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(3);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_CUTINDASH, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 3:
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_ORIGINALSIN) > 0){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(4);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_CUTINDASH, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
case 4:
|
|
case 11:
|
|
case 13:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 10:
|
|
obj.sq_IntVectClear();
|
|
if(obj.getVar("Cutindash_Bool").getBool(0)) {
|
|
if(obj.getVar("Cutindash_Bool").getBool(1)) obj.sq_IntVectPush(12);
|
|
else obj.sq_IntVectPush(10);
|
|
print(obj.getVar("Cutindash_Bool").getBool(0));
|
|
print(obj.getVar("Cutindash_Bool").getBool(1));
|
|
}
|
|
else obj.sq_IntVectPush(11);
|
|
obj.getVar("Cutindash_Bool").setBool(0, false);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_CUTINDASH, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 12:
|
|
obj.sq_IntVectClear();
|
|
if(obj.getVar("Cutindash_Bool").getBool(0)) {
|
|
if(obj.getVar("Cutindash_Bool").getBool(1)) obj.sq_IntVectPush(12);
|
|
else obj.sq_IntVectPush(10);
|
|
}
|
|
else obj.sq_IntVectPush(13);
|
|
obj.getVar("Cutindash_Bool").setBool(0, false);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_CUTINDASH, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Cutindash(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
case 1:
|
|
case 10:
|
|
case 12:
|
|
sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true);
|
|
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
|
|
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND) || sq_IsEnterCommand(obj, E_SKILL_COMMAND)){
|
|
obj.sq_IntVectClear();
|
|
if(subState == 10) obj.sq_IntVectPush(11);
|
|
else if(subState == 12) obj.sq_IntVectPush(13);
|
|
else obj.sq_IntVectPush(3);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_CUTINDASH, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
if(obj.getVar("Cutindash_Count").getInt(10) < 1) return;
|
|
if(obj.getVar("Cutindash_Bool").getBool(0) == false) {
|
|
obj.setSkillCommandEnable(SKILL_BYKK_CUTINDASH, true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_CUTINDASH);
|
|
if(b_useskill != -1) {
|
|
obj.getVar("Cutindash_Bool").setBool(0, true);
|
|
obj.getVar("Cutindash_Count").setInt(10, obj.getVar("Cutindash_Count").getInt(10) - 1);
|
|
}
|
|
}
|
|
if(obj.getVar("Cutindash_Bool").getBool(1) == false) {
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT ||sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT) {
|
|
obj.getVar("Cutindash_Bool").setBool(1, true);
|
|
}
|
|
}
|
|
break;
|
|
case 2:
|
|
sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true);
|
|
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
|
|
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND) || sq_IsEnterCommand(obj, E_SKILL_COMMAND)){
|
|
obj.sq_IntVectClear();
|
|
if(subState == 10) obj.sq_IntVectPush(11);
|
|
else if(subState == 12) obj.sq_IntVectPush(13);
|
|
else obj.sq_IntVectPush(3);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_CUTINDASH, STATE_PRIORITY_AUTO, true);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Cutindash(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 103: sq_SetMyShake(obj, 10, 120); break;
|
|
case 104: sq_SetMyShake(obj, 2, 180); break;
|
|
case 10001: obj.getVar("setCancelSkill").setBool(10, true); break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Cutindash(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
local base_X = obj.getVar("Cutindash_Move").getInt(10);
|
|
local v = sq_GetUniformVelocity(0, obj.getVar("Cutindash_Move").getInt(11), timeEventCount, 30);
|
|
local moveX = sq_GetDistancePos(base_X, obj.getDirection(), v);
|
|
if(obj.isMovablePos(moveX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, moveX);
|
|
local subState = obj.getSkillSubState();
|
|
if(timeEventCount >= 25 && subState == 2){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(3);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_CUTINDASH, STATE_PRIORITY_AUTO, true);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Cutindash(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
|
|
//罪業加身
|
|
function checkExecutableSkill_Heavysin(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HEAVYSIN);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(2);
|
|
else obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_HEAVYSIN, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Heavysin(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Heavysin(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(ATPANI_BYKK_HEAVYSIN_READY_BODY);
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_HEAVYSIN_ATTACK_BODY);
|
|
obj.sq_PlaySound("R_PW_HEAVYSIN");
|
|
break;
|
|
case 2:
|
|
local ani = getCurrentAnimation_demonization(obj, "heavysin_demonization", false);
|
|
obj.setCurrentAnimation(ani);
|
|
obj.sq_PlaySound("R_PW_HEAVYSIN_DM");
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
}
|
|
|
|
function onEndCurrentAni_Heavysin(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_HEAVYSIN, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
case 2:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Heavysin(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_Heavysin(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 101:
|
|
obj.sq_PlaySound("HEAVYSIN");
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HEAVYSIN, -1, 0, 1.0) + 100;
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_HEAVYSIN, 0);
|
|
local sub = 0;
|
|
if(sq_getGrowType(obj) == 4){
|
|
local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, THESEVENDEADLYSINS_APDPATH);
|
|
if(AddAppendage && AddAppendage.getVar("Sub").getInt(10) == 3){
|
|
sub = 1;
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_HEAVYSIN);
|
|
local prob = sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 1, skillLevel);
|
|
local level = sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 2, skillLevel);
|
|
local time = sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 3, skillLevel);
|
|
local speedRate = sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 4, skillLevel);
|
|
local speedRate2 = sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 5, skillLevel);
|
|
if(obj.isMyControlObject()){
|
|
local add_number = sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 6, sq_GetSkillLevel(obj, SKILL_BYKK_HEAVYSIN));
|
|
if(add_number > 0){
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_THESEVENDEADLYSINS);
|
|
if(loadSlot){
|
|
local loadnumber = loadSlot.getRemainLoadNumber();
|
|
if(loadnumber > add_number){
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,-20,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,sub,prob,level,time,speedRate,speedRate2);
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,20,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,sub,prob,level,time,speedRate,speedRate2);
|
|
}
|
|
else createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,0,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,sub,prob,level,time,speedRate,speedRate2);
|
|
}
|
|
else createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,0,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,sub,prob,level,time,speedRate,speedRate2);
|
|
}
|
|
else{
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,0,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,sub,prob,level,time,speedRate,speedRate2);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
else if(obj.isMyControlObject()){
|
|
local add_number = sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 6, sq_GetSkillLevel(obj, SKILL_BYKK_HEAVYSIN));
|
|
if(add_number > 0){
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_THESEVENDEADLYSINS);
|
|
if(loadSlot){
|
|
local loadnumber = loadSlot.getRemainLoadNumber();
|
|
if(loadnumber > add_number){
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,-20,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,0,0,0,0,0,0);
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,20,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,0,0,0,0,0,0);
|
|
}
|
|
else createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,0,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,0,0,0,0,0,0);
|
|
}
|
|
else createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,0,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,0,0,0,0,0,0);
|
|
}
|
|
else{
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,0,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,0,0,0,0,0,0);
|
|
}
|
|
}
|
|
}
|
|
else if(obj.isMyControlObject()){
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,0,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,0,0,0,0,0,0);
|
|
}
|
|
local buffCount = sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 9, sq_GetSkillLevel(obj, SKILL_BYKK_HEAVYSIN));
|
|
if(buffCount > 0){
|
|
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, HEAVYSINBUFF_APDPATH);
|
|
if(!addAppendage){
|
|
addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, HEAVYSINBUFF_APDPATH, true);
|
|
}
|
|
addAppendage.sq_SetValidTime(10000);
|
|
addAppendage.setEnableIsBuff(true);
|
|
addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_HEAVYSIN, sq_GetSkillLevel(obj, SKILL_BYKK_HEAVYSIN));
|
|
CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true);
|
|
if(addAppendage.getVar("buffCount").getInt(10) >= buffCount) break;
|
|
addAppendage.getVar("buffCount").setInt(10, addAppendage.getVar("buffCount").getInt(10) + 1);
|
|
setSkillBonusRate_Temptress(obj);
|
|
}
|
|
break;
|
|
case 10001: obj.getVar("setCancelSkill").setBool(10, true); break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Heavysin(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
}
|
|
|
|
function onEndState_Heavysin(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onEnd_appendage_heavysin_buff(appendage)
|
|
{
|
|
if(!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
|
if(!obj || obj.getState() == STATE_DIE) return;
|
|
setSkillBonusRate_Temptress(obj);
|
|
}
|
|
|
|
|
|
//審判錘擊
|
|
function checkExecutableSkill_Holysmash(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HOLYSMASH);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_HOLYSMASH, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Holysmash(obj)
|
|
{
|
|
if (!obj) return false;
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Holysmash(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://normal
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_HOLYSMASH_BODY);
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYSMASH, -1, 1, 1.0) + 100;
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_HOLYSMASH));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
}
|
|
|
|
function onEndCurrentAni_Holysmash(obj)
|
|
{
|
|
if(!obj) return;
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
}
|
|
|
|
function onProcCon_Holysmash(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_Holysmash(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 101:
|
|
obj.sq_PlaySound("R_PW_HOLYSMASH");
|
|
obj.sq_PlaySound("HOLYSMASH");
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atholysmash/hseff_hseffa.ani", 0, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atholysmash/holysmash_eff.ani", 0, 1, 0);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Holysmash(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
}
|
|
|
|
function onEndState_Holysmash(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
|
|
//鉤頸斬
|
|
function checkExecutableSkill_Neckupscythe(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_NECKUPSCYTHE);
|
|
if (isUse){
|
|
obj.getVar("NeckupscytheTar").clear_obj_vector();
|
|
obj.getVar("Neckupscythe_Bool").setBool(0, false);
|
|
obj.sq_IntVectClear();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(3);
|
|
else obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_NECKUPSCYTHE, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Neckupscythe(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Neckupscythe(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://attack1
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_NECKUPSCYTHE_ATTACK1_BODY);
|
|
break;
|
|
case 1://attack2
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_NECKUPSCYTHE_ATTACK2_BODY);
|
|
break;
|
|
case 2://attack2 front
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_NECKUPSCYTHE_ATTACK2_FRONT_BODY);
|
|
break;
|
|
case 3:
|
|
local ani = getCurrentAnimation_demonization(obj, "neckupscythe_attack1_demon", false);
|
|
obj.setCurrentAnimation(ani);
|
|
break;
|
|
case 4:
|
|
local ani = getCurrentAnimation_demonization(obj, "neckupscythe_attack2_demon", false);
|
|
obj.setCurrentAnimation(ani);
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
local bonus = [0, 1, 1, 0, 1], attackIndex = [ATPRIESTATK_BYKK_NECKUPSCYTHE_POKE, ATPRIESTATK_BYKK_NECKUPSCYTHE_BACKTHROW, ATPRIESTATK_BYKK_NECKUPSCYTHE_FRONTTHROW, ATPRIESTATK_BYKK_NECKUPSCYTHE_POKE, ATPRIESTATK_BYKK_NECKUPSCYTHE_BACKTHROW];
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_NECKUPSCYTHE, -1, bonus[subState], 1.0) + 100;
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex[subState]));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
}
|
|
|
|
function onEndCurrentAni_Neckupscythe(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
if(obj.getVar("NeckupscytheTar").get_obj_vector_size() < 1){
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
if(obj.getVar("Neckupscythe_Bool").getBool(0)) obj.sq_IntVectPush(1);
|
|
else obj.sq_IntVectPush(2);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_NECKUPSCYTHE, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
case 2:
|
|
case 4:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 3:
|
|
obj.sq_IntVectClear();
|
|
if(obj.getVar("NeckupscytheTar").get_obj_vector_size() < 1){
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
obj.sq_IntVectPush(4);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_NECKUPSCYTHE, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Neckupscythe(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
if(obj.getVar("Neckupscythe_Bool").getBool(0) == false) {
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT ||sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT) {
|
|
obj.getVar("Neckupscythe_Bool").setBool(0, true);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Neckupscythe(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 102:
|
|
local size = obj.getVar("NeckupscytheTar").get_obj_vector_size();
|
|
if(size > 0){
|
|
for(local i = 0; i < size; i++){
|
|
local targetObj = obj.getVar("NeckupscytheTar").get_obj_vector(i);
|
|
if(targetObj){
|
|
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/demonicswordman/0_common/ap_neckupscythe.nut");
|
|
sq_MoveToAppendageForce(targetObj, obj, obj, -150, 0, 0, 100, true, addAppendage);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 103: sq_SetMyShake(obj, 3, 160); break;
|
|
case 104: sq_SetMyShake(obj, 2, 240); break;
|
|
case 105: sq_SetMyShake(obj, 2, 160); break;
|
|
case 106: sq_SetMyShake(obj, 3, 120); break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Neckupscythe(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
}
|
|
|
|
function onEndState_Neckupscythe(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
if(new_state != STATE_BYKK_NECKUPSCYTHE){
|
|
local size = obj.getVar("NeckupscytheTar").get_obj_vector_size();
|
|
if(size > 0){
|
|
for(local i = 0; i < size; i++){
|
|
local targetObj = obj.getVar("NeckupscytheTar").get_obj_vector(i);
|
|
if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/demonicswordman/0_common/ap_neckupscythe.nut");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function onAttack_Neckupscythe(obj, damager, boundingBox, isStuck)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
case 3:
|
|
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
|
|
if(sq_IsHoldable(obj,damager) && !sq_IsFixture(damager) && sq_IsGrabable(obj,damager)){
|
|
if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/demonicswordman/0_common/ap_neckupscythe.nut")){
|
|
if(!obj.getVar("NeckupscytheTar").is_obj_vector(damager)) obj.getVar("NeckupscytheTar").push_obj_vector(damager);
|
|
local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/demonicswordman/0_common/ap_neckupscythe.nut", true);
|
|
sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, addAppendage);
|
|
if(subState == 0) sq_MoveToAppendageForce(damager, obj, obj, 160, 0, 50, 100, true, addAppendage);
|
|
else sq_MoveToAppendageForce(damager, obj, obj, 50, 0, 0, 200, true, addAppendage);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//喚雷符
|
|
function checkExecutableSkill_Talismanoflightning(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_TALISMANOFLIGHTNING);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_TALISMANOFLIGHTNING, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Talismanoflightning(obj)
|
|
{
|
|
if (!obj) return false;
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Talismanoflightning(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(ATPANI_BYKK_TALISMANOFLIGHTNING_CAST_BODY);
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_TALISMANOFLIGHTNING_SHOT_BODY);
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
}
|
|
|
|
function onEndCurrentAni_Talismanoflightning(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_TALISMANOFLIGHTNING, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Talismanoflightning(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_Talismanoflightning(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 101:
|
|
local offset_x = sq_GetIntData(obj, SKILL_BYKK_TALISMANOFLIGHTNING, 8);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_TALISMANOFLIGHTNING, -1, 0, 1.0) + 100;
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_TALISMANOFLIGHTNING, 10);
|
|
if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,offset_x,0,0,obj.getDirection(),0,SKILL_BYKK_TALISMANOFLIGHTNING,0,totalDamage,sizeRate,0,0,0,0,0,0);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Talismanoflightning(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
}
|
|
|
|
function onEndState_Talismanoflightning(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
//空中錘擊
|
|
function checkExecutableSkill_Violentassault(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_VIOLENTASSAULT);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_VIOLENTASSAULT, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Violentassault(obj)
|
|
{
|
|
if (!obj) return false;
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Violentassault(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0://normal
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_VIOLENTASSAULT_START_BODY);
|
|
sq_SetVelocity(obj, 2, -600.0);
|
|
obj.setTimeEvent(0, 10, 20, true);
|
|
obj.getVar("ViolentassaultMove").setInt(10, sq_GetXPos(obj));
|
|
obj.getVar("ViolentassaultMove").setInt(11, sq_GetZPos(obj) * 15 / 10);
|
|
obj.sq_PlaySound("PW_JUMP_DM");
|
|
// obj.sq_ZStop();
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_VIOLENTASSAULT_LOOP_BODY);
|
|
sq_SetVelocity(obj, 2, -600.0);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_VIOLENTASSAULT, -1, 0, 1.0) + 100;
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_VIOLENTASSAULT));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
break;
|
|
case 2:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_VIOLENTASSAULT_END_BODY);
|
|
obj.removeAllTimeEvent();
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_VIOLENTASSAULT, -1, 0, 1.0) + 100;
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VIOLENTASSAULT, 2);
|
|
if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,50,0,0,obj.getDirection(),0,SKILL_BYKK_VIOLENTASSAULT,0,totalDamage,sizeRate,0,0,0,0,0,0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_Violentassault(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_VIOLENTASSAULT, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 2:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Violentassault(obj)
|
|
{
|
|
if(!obj) return;
|
|
local zPos = sq_GetZPos(obj);
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 1:
|
|
if(zPos <= 0){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(2);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_VIOLENTASSAULT, STATE_PRIORITY_AUTO, true);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Violentassault(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Violentassault(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
local base_X = obj.getVar("ViolentassaultMove").getInt(10);
|
|
local v = sq_GetUniformVelocity(0, obj.getVar("ViolentassaultMove").getInt(11), timeEventCount, 20);
|
|
local moveX = sq_GetDistancePos(base_X, obj.getDirection(), v);
|
|
sq_setCurrentAxisPos(obj, 0, moveX);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Violentassault(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
//武器格擋
|
|
function checkExecutableSkill_Weaponguard(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_WEAPONGUARD);
|
|
if (isUse){
|
|
obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_WEAPONGUARD);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_WEAPONGUARD, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Weaponguard(obj)
|
|
{
|
|
if (!obj) return false;
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Weaponguard(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0://normal
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_WEAPONGUARD_STAND_BODY);
|
|
local apdPath = "character/demonicswordman/0_common/ap_weaponguard.nut";
|
|
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)){
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_WEAPONGUARD, false, apdPath, true);
|
|
}
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_WEAPONGUARD_ATTACKED_BODY);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_Weaponguard(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_WEAPONGUARD, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onDamage_Weaponguard(obj,attacker,boundingBox)
|
|
{
|
|
if(!obj) return;
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_WEAPONGUARD, STATE_PRIORITY_AUTO, true);
|
|
}
|
|
|
|
function onProcCon_Weaponguard(obj)
|
|
{
|
|
if(!obj) return;
|
|
local bDownKey = obj.isDownSkillLastKey();
|
|
if(!bDownKey){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Weaponguard(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Weaponguard(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
}
|
|
|
|
function onEndState_Weaponguard(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/demonicswordman/0_common/ap_weaponguard.nut");
|
|
}
|
|
|
|
function getImmuneTypeDamageRate_appendage_Atpriest_weaponguard(appendage, damageRate, attacker)
|
|
{
|
|
if (!appendage) return damageRate;
|
|
local parentObj = appendage.getParent();
|
|
parentObj = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
|
if (!parentObj) {
|
|
appendage.setValid(false);
|
|
return damageRate;
|
|
}
|
|
local sub = 2;
|
|
local attackInfo = sq_GetCurrentAttackInfo(attacker);
|
|
if (sq_GetAttackType(attackInfo) == 1) sub = 3;
|
|
local newdamageRate = (1000 - sq_GetLevelData(parentObj, SKILL_BYKK_WEAPONGUARD, sub, sq_GetSkillLevel(parentObj, SKILL_BYKK_WEAPONGUARD))) / 10;
|
|
return newdamageRate;
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////诱魔者///////////////////////////////////////////////////////////
|
|
|
|
//雙重切割
|
|
function checkExecutableSkill_Dualslash(obj)
|
|
{
|
|
if (!obj) return false;
|
|
if(obj.getState() == STATE_BYKK_DEPRAVITYSEVENSINS && obj.getSkillSubState() < 10) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DUALSLASH);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(1);
|
|
else obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_DUALSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Dualslash(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Dualslash(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0://normal
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_DUALSLASH_BODY);
|
|
obj.sq_PlaySound("R_PW_DUALSLASH_01");
|
|
break;
|
|
case 1:
|
|
local ani = getCurrentAnimation_demonization(obj, "dualslash_demonization", false);
|
|
obj.setCurrentAnimation(ani);
|
|
obj.sq_PlaySound("PW_DUALSLASH_DM");
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DUALSLASH, -1, 0, 1.0) + obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DUALSLASH, -1, 1, 1.0) + 200;
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_DUALSLASH_SECOND));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_Dualslash(obj)
|
|
{
|
|
if(!obj) return;
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
}
|
|
|
|
function onProcCon_Dualslash(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_Dualslash(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex) {
|
|
case 101:
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DUALSLASH, -1, 0, 1.0) + 100;
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_DUALSLASH_FIRST));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
break;
|
|
case 102:
|
|
obj.sq_PlaySound("R_PW_DUALSLASH_02");
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DUALSLASH, -1, 1, 1.0) + 100;
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_DUALSLASH_SECOND));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
break;
|
|
case 10001: obj.getVar("setCancelSkill").setBool(10, true); break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Dualslash(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
}
|
|
|
|
function onEndState_Dualslash(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
//斷頭台
|
|
function checkExecutableSkill_Pwguillotine(obj)
|
|
{
|
|
if (!obj) return false;
|
|
if(obj.getState() == STATE_BYKK_DEPRAVITYSEVENSINS && obj.getSkillSubState() < 10) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PWGUILLOTINE);
|
|
if (isUse){
|
|
obj.getVar("PwguillotineTar").clear_obj_vector();
|
|
obj.getVar("PwguillotineTar_fix").clear_obj_vector();
|
|
obj.getVar("Pwguillotine_Bool").setBool(0, false);
|
|
obj.getVar("Pwguillotine_Bool").setBool(1, false);
|
|
obj.sq_IntVectClear();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(10);
|
|
else obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PWGUILLOTINE, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Pwguillotine(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Pwguillotine(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://normal
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_GUILLOTINE_READY_BODY);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
obj.sq_PlaySound("PW_GUILLOTINE_01");
|
|
break;
|
|
case 1://normal
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_GUILLOTINE_SMASH);
|
|
obj.sq_PlaySound("PW_GUILLOTINE_02");
|
|
break;
|
|
case 2://normal
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_GUILLOTINE_GRAB);
|
|
local xPos = obj.getVar("Pwguillotine_Move").getInt(10), yPos = obj.getVar("Pwguillotine_Move").getInt(11), zPos = obj.getVar("Pwguillotine_Move").getInt(12);
|
|
sq_setCurrentAxisPos(obj, 0, xPos);
|
|
sq_setCurrentAxisPos(obj, 1, yPos);
|
|
sq_setCurrentAxisPos(obj, 2, zPos);
|
|
obj.sq_PlaySound("PW_GUILLOTINE_02");
|
|
break;
|
|
case 10:
|
|
local ani = getCurrentAnimation_demonization(obj, "guillotine_ready_demonization", false);
|
|
obj.setCurrentAnimation(ani);
|
|
obj.sq_PlaySound("PW_GUILLOTINE_DM_01");
|
|
break;
|
|
case 11:
|
|
local ani = getCurrentAnimation_demonization(obj, "guillotine_smash_demonization", false);
|
|
obj.setCurrentAnimation(ani);
|
|
obj.sq_PlaySound("PW_GUILLOTINE_DM_02");
|
|
obj.sq_PlaySound("BURSTSLASH_JUMP");
|
|
break;
|
|
case 12:
|
|
local ani = getCurrentAnimation_demonization(obj, "guillotine_grab_demonization", false);
|
|
obj.setCurrentAnimation(ani);
|
|
local xPos = obj.getVar("Pwguillotine_Move").getInt(10), yPos = obj.getVar("Pwguillotine_Move").getInt(11), zPos = obj.getVar("Pwguillotine_Move").getInt(12);
|
|
sq_setCurrentAxisPos(obj, 0, xPos);
|
|
sq_setCurrentAxisPos(obj, 1, yPos);
|
|
sq_setCurrentAxisPos(obj, 2, zPos);
|
|
obj.sq_PlaySound("PW_GUILLOTINE_DM_02");
|
|
break;
|
|
}
|
|
local bonus = 1, attackIndex = ATPRIESTATK_BYKK_GUILLOTINE_GRABTRY;
|
|
if(subState != 0 && subState != 10) {
|
|
bonus = 2;
|
|
if(subState == 1) attackIndex = ATPRIESTATK_BYKK_GUILLOTINE_SMASH;
|
|
else if(subState == 2) attackIndex = ATPRIESTATK_BYKK_GUILLOTINE_GRAB_FIRST;
|
|
else if(subState == 11) attackIndex = ATPRIESTATK_BYKK_GUILLOTINE_SMASH;
|
|
else attackIndex = ATPRIESTATK_BYKK_GUILLOTINE_GRAB_FIRST;
|
|
}
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PWGUILLOTINE, -1, bonus, 1.0) + 100;
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, attackIndex));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
}
|
|
|
|
function onEndCurrentAni_Pwguillotine(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
case 10:
|
|
obj.sq_IntVectClear();
|
|
if(obj.getVar("PwguillotineTar").get_obj_vector_size() < 1 && obj.getVar("PwguillotineTar_fix").get_obj_vector_size() < 1){
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
if(sq_GetLevelData(obj, SKILL_BYKK_PWGUILLOTINE, 4, sq_GetSkillLevel(obj, SKILL_BYKK_PWGUILLOTINE)) > 0){
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
if(subState == 0) obj.sq_IntVectPush(2);
|
|
else obj.sq_IntVectPush(12);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PWGUILLOTINE, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
case 11:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 2:
|
|
case 12:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_IntVectPush(sq_GetZPos(obj));
|
|
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Pwguillotine(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_Pwguillotine(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex) {
|
|
case 101:
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PWGUILLOTINE, -1, 1, 1.0) + 100;
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_GUILLOTINE_GRAB_SECOND));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
break;
|
|
case 102:
|
|
sq_flashScreen(obj,10,100,20,51, sq_RGB(255,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
sq_SetMyShake(obj,2,100);
|
|
break;
|
|
case 10001: obj.getVar("setCancelSkill").setBool(10, true); break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Pwguillotine(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
}
|
|
|
|
function onEndState_Pwguillotine(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
if(new_state != STATE_BYKK_PWGUILLOTINE){
|
|
local size = obj.getVar("PwguillotineTar").get_obj_vector_size();
|
|
if(size > 0){
|
|
for(local i = 0; i < size; i++){
|
|
local targetObj = obj.getVar("PwguillotineTar").get_obj_vector(i);
|
|
if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, PWGUILLOTINETE_APDPATH);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function onAttack_Pwguillotine(obj, damager, boundingBox, isStuck)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
case 10:
|
|
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
|
|
if(sq_IsHoldable(obj,damager) && !sq_IsFixture(damager) && sq_IsGrabable(obj,damager)){
|
|
if(obj.getVar("Pwguillotine_Bool").getBool(1) == false){
|
|
obj.getVar("Pwguillotine_Bool").setBool(1, true);
|
|
obj.getVar("Pwguillotine_Move").setInt(10, sq_GetXPos(damager));
|
|
obj.getVar("Pwguillotine_Move").setInt(11, sq_GetYPos(damager));
|
|
obj.getVar("Pwguillotine_Move").setInt(12, sq_GetZPos(damager) + sq_GetObjectHeight(obj));
|
|
}
|
|
if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, PWGUILLOTINETE_APDPATH)){
|
|
if(!obj.getVar("PwguillotineTar").is_obj_vector(damager)) obj.getVar("PwguillotineTar").push_obj_vector(damager);
|
|
local addAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, PWGUILLOTINETE_APDPATH, true);
|
|
sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL, addAppendage);
|
|
}
|
|
}
|
|
else if(sq_IsFixture(damager)){
|
|
obj.sq_IntVectClear();
|
|
if(subState == 0) obj.sq_IntVectPush(1);
|
|
else obj.sq_IntVectPush(11);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PWGUILLOTINE, STATE_PRIORITY_AUTO, true);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
//七宗罪
|
|
function checkExecutableSkill_Thesevendeadlysins(obj)
|
|
{
|
|
if (!obj) return false;
|
|
if(obj.getState() == STATE_BYKK_DEPRAVITYSEVENSINS && obj.getSkillSubState() < 10) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_THESEVENDEADLYSINS);
|
|
if (isUse){
|
|
obj.getVar("Thesevendeadlysins_Bool").setBool(0, false);
|
|
obj.getVar("Thesevendeadlysins_Sub").setInt(10, 0);
|
|
obj.sq_IntVectClear();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(1);
|
|
else obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_THESEVENDEADLYSINS, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Thesevendeadlysins(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Thesevendeadlysins(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://normal
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_THEDEADLYSINS_CAST);
|
|
break;
|
|
case 1:
|
|
local ani = getCurrentAnimation_demonization(obj, "thedeadlysinsdemon_05", false);
|
|
obj.setCurrentAnimation(ani);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_Thesevendeadlysins(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onProcCon_Thesevendeadlysins(obj)
|
|
{
|
|
if(!obj) return;
|
|
local stateTime = obj.sq_GetStateTimer();
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local delaySum = currentAni.getDelaySum(false);
|
|
if(stateTime >= 5000) obj.setTimeEvent(0, 300, 1, true);
|
|
if(stateTime >= delaySum / 2 && obj.getVar("Thesevendeadlysins_Bool").getBool(0) == false){
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)) obj.getVar("Thesevendeadlysins_Sub").setInt(10, 1);
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) obj.getVar("Thesevendeadlysins_Sub").setInt(10, 2);
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)) obj.getVar("Thesevendeadlysins_Sub").setInt(10, 3);
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) obj.getVar("Thesevendeadlysins_Sub").setInt(10, 4);
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_SKILL2, ENUM_SUBKEY_TYPE_ALL)) obj.getVar("Thesevendeadlysins_Sub").setInt(10, 5);
|
|
if(obj.getVar("Thesevendeadlysins_Sub").getInt(10) > 0){
|
|
obj.getVar("Thesevendeadlysins_Bool").setBool(0, true);
|
|
local sub = obj.getVar("Thesevendeadlysins_Sub").getInt(10);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, THESEVENDEADLYSINS_APDPATH)) CNSquirrelAppendage.sq_RemoveAppendage(obj, THESEVENDEADLYSINS_APDPATH);
|
|
if(sub == 5){
|
|
CNSquirrelAppendage.sq_RemoveAppendage(obj, THESEVENDEADLYSINS_APDPATH);
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_THESEVENDEADLYSINS);
|
|
if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_THESEVENDEADLYSINS);
|
|
obj.setTimeEvent(0, 300, 1, false);
|
|
return;
|
|
}
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_THESEVENDEADLYSINS, false, THESEVENDEADLYSINS_APDPATH, true);
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_THESEVENDEADLYSINS);
|
|
local buffTime = sq_GetLevelData(obj, SKILL_BYKK_THESEVENDEADLYSINS, 21, skillLevel);
|
|
if(buffTime > 0) AddAppendage.sq_SetValidTime(buffTime);
|
|
AddAppendage.setEnableIsBuff(true);
|
|
AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_THESEVENDEADLYSINS, sq_GetSkillLevel(obj, SKILL_BYKK_THESEVENDEADLYSINS));
|
|
CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true);
|
|
local bufficonNum = 0;
|
|
switch(sub){
|
|
case 1: bufficonNum = 152; break;
|
|
case 2: bufficonNum = 154; break;
|
|
case 3: bufficonNum = 153; break;
|
|
case 4: bufficonNum = 155; break;
|
|
}
|
|
AddAppendage.setBuffIconImage(bufficonNum);
|
|
AddAppendage.getVar("Sub").setInt(10, sub);
|
|
|
|
setBuffEffect_Temptress(obj, AddAppendage, sub);
|
|
|
|
obj.setTimeEvent(0, 300, 1, false);
|
|
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atthedeadlysins/thedeadlysins_02.ani", 0, 1, 0);
|
|
else{
|
|
for(local i = 1; i < 5; i++){
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atthedeadlysins/thedeadlysinsdemon_0"+i.tostring()+".ani", 0, i, 0);
|
|
}
|
|
}
|
|
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_THESEVENDEADLYSINS);
|
|
if(!loadSlot){
|
|
local coolTime = sq_GetIntData(obj, SKILL_BYKK_THESEVENDEADLYSINS, 0);
|
|
obj.sq_AddSkillLoad(SKILL_BYKK_THESEVENDEADLYSINS, 109, 0, coolTime);
|
|
print(1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Thesevendeadlysins(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 101:
|
|
obj.sq_PlaySound("R_PW_SEVENSINS");
|
|
obj.sq_PlaySound("DEDLY_CAPE_CAST");
|
|
obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atthedeadlysins/selecticon_01.ani"), -40, -50);
|
|
obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atthedeadlysins/selecticon_02.ani"), 40, -50);
|
|
obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atthedeadlysins/selecticon_03.ani"), 0, -90);
|
|
obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atthedeadlysins/selecticon_04.ani"), 0, -10);
|
|
break;
|
|
case 102:
|
|
obj.sq_PlaySound("R_PW_SEVENSINS_DM");
|
|
obj.sq_PlaySound("DEDLY_CAPE_CAST");
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Thesevendeadlysins(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Thesevendeadlysins(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onAfterSetState_PW_Throw(obj, state, datas, isResetTimer)
|
|
{
|
|
local skillIndex = obj.getThrowIndex();
|
|
if (skillIndex == SKILL_BYKK_THESEVENDEADLYSINS){
|
|
if (obj.getThrowState() == 0){
|
|
obj.setIsCustomSelectSkill(true);
|
|
}
|
|
else if (obj.getThrowState() == 1){
|
|
if (obj.isMyControlObject()){
|
|
print("1");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function setBuffEffect_Temptress(obj, appendage, sub)
|
|
{
|
|
if(sub < 1) return;
|
|
obj = sq_GetCNRDObjectToSQRCharacter(obj);
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_THESEVENDEADLYSINS);
|
|
switch(sub){
|
|
case 1://贪食者的欲念
|
|
local hpmpRate = sq_GetLevelData(obj, SKILL_BYKK_THESEVENDEADLYSINS, 6, skillLevel);
|
|
local attackRate = sq_GetLevelData(obj, SKILL_BYKK_THESEVENDEADLYSINS, 12, skillLevel);
|
|
local change_appendage = appendage.sq_getChangeStatus("Thesevendeadlysins");
|
|
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("Thesevendeadlysins",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_HP_MAX, false, (hpmpRate * -0.1).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MP_MAX, false, (hpmpRate * -0.1).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (attackRate * 0.1).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (attackRate * 0.1).tofloat());
|
|
}
|
|
break;
|
|
case 2://浸染嫉妒的喜悦
|
|
local elemental_tol = sq_GetLevelData(obj, SKILL_BYKK_THESEVENDEADLYSINS, 2, skillLevel);//CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_ALL
|
|
local elemental_attack = sq_GetLevelData(obj, SKILL_BYKK_THESEVENDEADLYSINS, 23, skillLevel);
|
|
local change_appendage = appendage.sq_getChangeStatus("Thesevendeadlysins");
|
|
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("Thesevendeadlysins",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_ALL, false, (elemental_tol * 1).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_ALL, false, (elemental_attack * 1).tofloat());
|
|
}
|
|
setSkillBonusRate_Temptress(obj);
|
|
break;
|
|
case 3://傲慢者的懒惰
|
|
local speedRate = sq_GetLevelData(obj, SKILL_BYKK_THESEVENDEADLYSINS, 8, skillLevel);
|
|
local change_appendage = appendage.sq_getChangeStatus("Thesevendeadlysins");
|
|
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("Thesevendeadlysins",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, true, (speedRate * -0.1).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, true, (speedRate * -0.1).tofloat());
|
|
}
|
|
setSkillBonusRate_Temptress(obj);
|
|
break;
|
|
case 4://欲望溢满的愤怒
|
|
local defenseRate = sq_GetLevelData(obj, SKILL_BYKK_THESEVENDEADLYSINS, 4, skillLevel);
|
|
local criticaldamageRate = sq_GetLevelData(obj, SKILL_BYKK_THESEVENDEADLYSINS, 22, skillLevel);
|
|
local change_appendage = appendage.sq_getChangeStatus("Thesevendeadlysins");
|
|
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("Thesevendeadlysins",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_DEFENSE, true, (defenseRate * -0.1).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE , true, (defenseRate * -0.1).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_DAMAGE_RATE, false, (criticaldamageRate * 0.1 / 0.667).tofloat());
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
//欲望之手
|
|
function checkExecutableSkill_Lusthand(obj)
|
|
{
|
|
if (!obj) return false;
|
|
if(obj.getState() == STATE_BYKK_DEPRAVITYSEVENSINS && obj.getSkillSubState() < 10) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_LUSTHAND);
|
|
if (isUse){
|
|
// obj.getVar("lusthand_bosstar").clear_obj_vector();
|
|
// obj.getVar("lusthand_namedtar").clear_obj_vector();
|
|
// obj.getVar("lusthand_normaltar").clear_obj_vector();
|
|
obj.getVar("lusthand_tar").clear_obj_vector();
|
|
obj.sq_IntVectClear();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(10);
|
|
else obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_LUSTHAND, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Lusthand(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Lusthand(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://normal
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_LUSTHANDATK01_BODY);
|
|
obj.sq_PlaySound("R_PW_LUSTHAND");
|
|
break;
|
|
case 1://normal
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_LUSTHANDATK02_BODY);
|
|
local targetObj = obj.getVar("lusthand_tar").get_obj_vector(0);
|
|
if(targetObj){
|
|
local dis = sq_Abs(sq_GetXPos(targetObj) - sq_GetXPos(obj)) - 50;
|
|
if(dis < 60) dis = 0;
|
|
sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), dis));
|
|
sq_setCurrentAxisPos(obj, 1, sq_GetYPos(targetObj));
|
|
}
|
|
break;
|
|
case 2://normal
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_LUSTHANDATK03BODY_BODY);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LUSTHAND, -1, 1, 1.0) + 100;
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_LUSTHANDSWINGCUT));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
break;
|
|
case 3://normal
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_LUSTHANDEND_BODY);
|
|
break;
|
|
case 10:
|
|
local ani = getCurrentAnimation_demonization(obj, "lusthandatk01_demon", false);
|
|
obj.setCurrentAnimation(ani);
|
|
local sound = ["PW_LUSTHAND_DM_01","PW_LUSTHAND_DM_02","PW_LUSTHAND_DM_03"];
|
|
obj.sq_PlaySound(sound[sq_getRandom(0,2)]);
|
|
break;
|
|
case 11:
|
|
local ani = getCurrentAnimation_demonization(obj, "lusthandatk03effa_demon", false);
|
|
obj.setCurrentAnimation(ani);
|
|
local targetObj = obj.getVar("lusthand_tar").get_obj_vector(0);
|
|
if(targetObj){
|
|
local dis = sq_Abs(sq_GetXPos(targetObj) - sq_GetXPos(obj)) - 50;
|
|
if(dis < 60) dis = 0;
|
|
sq_setCurrentAxisPos(obj, 0, sq_GetDistancePos(sq_GetXPos(obj), obj.getDirection(), dis));
|
|
sq_setCurrentAxisPos(obj, 1, sq_GetYPos(targetObj));
|
|
}
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LUSTHAND, -1, 1, 1.0) + 100;
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_LUSTHANDSWINGCUT));
|
|
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(subState == 0 || subState == 10){
|
|
// local currentAni = obj.getCurrentAnimation();
|
|
// local delaySum = currentAni.getDelaySum(false);
|
|
// obj.setTimeEvent(0, delaySum / 3, 1, false);
|
|
// }
|
|
}
|
|
|
|
function onEndCurrentAni_Lusthand(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
case 10:
|
|
if(obj.getVar("lusthand_tar").get_obj_vector_size() > 0){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(subState + 1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_LUSTHAND, STATE_PRIORITY_AUTO, true);
|
|
}
|
|
else{
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
}
|
|
break;
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(subState + 1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_LUSTHAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 2:
|
|
case 11:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Lusthand(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_Lusthand(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 101:
|
|
obj.sq_PlaySound("PW_LUSTHAND_DM_03");
|
|
obj.sq_PlaySound("DGUARDIAN_CATCH");
|
|
//`CreateClaw` 103 0 81
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LUSTHAND, -1, 0, 1.0) + 100;
|
|
if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,103,0,81,obj.getDirection(),4,SKILL_BYKK_LUSTHAND,0,totalDamage,0,0,0,0,0,0,0);
|
|
break;
|
|
case 102:
|
|
sq_flashScreen(obj,10,50,60,76, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
break;
|
|
case 103:
|
|
sq_SetMyShake(obj, 2, 100);
|
|
break;
|
|
case 104:
|
|
//`CreateClaw` 103 0 81
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LUSTHAND, -1, 0, 1.0) + 100;
|
|
if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,103,0,81,obj.getDirection(),4,SKILL_BYKK_LUSTHAND,0,totalDamage,0,0,0,0,0,0,0);
|
|
break;
|
|
case 10001: obj.getVar("setCancelSkill").setBool(10, true); break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Lusthand(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
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) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= 400 && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= 30) {
|
|
print(i);
|
|
local activeObj = sq_GetCNRDObjectToActiveObject(object);
|
|
if(sq_IsBoss(activeObj)) obj.getVar("lusthand_bosstar").push_obj_vector(activeObj);
|
|
else if(sq_IsNamed(activeObj)) obj.getVar("lusthand_namedtar").push_obj_vector(activeObj);
|
|
else obj.getVar("lusthand_normaltar").push_obj_vector(activeObj);
|
|
}
|
|
}
|
|
local size1 = obj.getVar("lusthand_bosstar").get_obj_vector_size();
|
|
local size2 = obj.getVar("lusthand_namedtar").get_obj_vector_size();
|
|
local size3 = obj.getVar("lusthand_normaltar").get_obj_vector_size();
|
|
if(size1 > 0){
|
|
for(local i = 0; i < size1; i++){
|
|
local targetObj = obj.getVar("lusthand_bosstar").get_obj_vector(i);
|
|
obj.getVar("lusthand_tar").push_obj_vector(targetObj);
|
|
}
|
|
}
|
|
if(size2 > 0){
|
|
for(local i = 0; i < size2; i++){
|
|
local targetObj = obj.getVar("lusthand_namedtar").get_obj_vector(i);
|
|
obj.getVar("lusthand_tar").push_obj_vector(targetObj);
|
|
}
|
|
}
|
|
if(size3 > 0){
|
|
for(local i = 0; i < size3; i++){
|
|
local targetObj = obj.getVar("lusthand_normaltar").get_obj_vector(i);
|
|
obj.getVar("lusthand_tar").push_obj_vector(targetObj);
|
|
}
|
|
}
|
|
local targetObj = obj.getVar("lusthand_tar").get_obj_vector(0);
|
|
sq_SendHitObjectPacket(obj,targetObj,0,0,75);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Lusthand(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
if(new_state != STATE_BYKK_LUSTHAND){
|
|
local size = obj.getVar("lusthand_tar").get_obj_vector_size();
|
|
if(size > 0){
|
|
for(local i = 0; i < size; i++){
|
|
local targetObj = obj.getVar("lusthand_tar").get_obj_vector(i);
|
|
if(targetObj){
|
|
CNSquirrelAppendage.sq_RemoveAppendage(targetObj, LUSTHAND_APDPATH);
|
|
}
|
|
}
|
|
}
|
|
sq_SimpleMoveToNearMovablePos(obj,300);
|
|
}
|
|
}
|
|
|
|
//傲慢之堕
|
|
function checkExecutableSkill_Prideaccel(obj)
|
|
{
|
|
if (!obj) return false;
|
|
if(obj.getState() == STATE_BYKK_DEPRAVITYSEVENSINS && obj.getSkillSubState() < 10) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PRIDEACCEL);
|
|
if (isUse){
|
|
obj.getVar("Prideaccel_Move").setBool(0, false);
|
|
if(sq_GetLevelData(obj, SKILL_BYKK_PRIDEACCEL, 3, sq_GetSkillLevel(obj, SKILL_BYKK_PRIDEACCEL)) > 0) obj.getVar("Prideaccel_Bool").setBool(0, true);
|
|
obj.sq_IntVectClear();
|
|
if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(4);
|
|
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(1);
|
|
else obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PRIDEACCEL, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Prideaccel(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Prideaccel(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(ATPANI_BYKK_PRIDEACCEL_START_BOBY);
|
|
obj.sq_PlaySound("R_PW_PRIDEACCEL");
|
|
break;
|
|
case 1:
|
|
local ani = getCurrentAnimation_demonization(obj, "prideaccelmove01_boby", false);
|
|
obj.setCurrentAnimation(ani);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atprideaccel/prideaccelmove01_02.ani", 0, -1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atprideaccel/prideaccelmove01_07.ani", 0, 1, 0);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_PlaySound("R_PW_PRIDEACCEL_DM");
|
|
break;
|
|
case 2:
|
|
sq_setCurrentAxisPos(obj, 2, 0);
|
|
local ani = getCurrentAnimation_demonization(obj, "prideaccelmove02_boby", false);
|
|
obj.setCurrentAnimation(ani);
|
|
sq_flashScreen(obj,30,50,60,102, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
sq_SetMyShake(obj,4,200);
|
|
//CreateShockWave
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PRIDEACCEL, -1, 0, 1.0) + 100;
|
|
local sizeRate = sq_GetLevelData(obj, SKILL_BYKK_PRIDEACCEL, 2, sq_GetSkillLevel(obj, SKILL_BYKK_PRIDEACCEL));
|
|
if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),4,SKILL_BYKK_PRIDEACCEL,0,totalDamage,sizeRate,0,0,0,0,0,0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atprideaccel/prideaccelmove02_02.ani", 0, 1, 0);
|
|
break;
|
|
case 3:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_PRIDEACCEL_END_BOBY);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atprideaccel/prideaccel_end_01.ani", 0, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atprideaccel/prideaccel_end_03.ani", 0, -1, 0);
|
|
break;
|
|
case 4:
|
|
local ani = getCurrentAnimation_demonization(obj, "prideaccelmove01_air_boby", false);
|
|
obj.setCurrentAnimation(ani);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atprideaccel/prideaccelmove01_air_02.ani", 0, -1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atprideaccel/prideaccelmove01_air_07.ani", 0, 1, 0);
|
|
obj.sq_PlaySound("R_PW_PRIDEACCEL_DM");
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
}
|
|
|
|
function onEndCurrentAni_Prideaccel(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
case 1:
|
|
if(subState == 0) sq_setCurrentAxisPos(obj, 2, 125);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(subState + 1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PRIDEACCEL, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 2:
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
}
|
|
else{
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(subState + 1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PRIDEACCEL, STATE_PRIORITY_AUTO, true);
|
|
}
|
|
break;
|
|
case 3:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 4:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(2);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PRIDEACCEL, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Prideaccel(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 1:
|
|
case 4:
|
|
if(obj.getVar("Prideaccel_Move").getBool(0) == false){
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){
|
|
obj.getVar("Prideaccel_Move").setBool(0, true);
|
|
if(obj.isMovablePos(sq_GetXPos(obj) - 200, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, sq_GetXPos(obj) - 200);
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){
|
|
sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) - 50);
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){
|
|
sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) + 50);
|
|
}
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
|
|
obj.getVar("Prideaccel_Move").setBool(0, true);
|
|
if(obj.isMovablePos(sq_GetXPos(obj) + 200, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, sq_GetXPos(obj) + 200);
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){
|
|
sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) - 50);
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){
|
|
sq_setCurrentAxisPos(obj, 1, sq_GetYPos(obj) + 50);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
if(subState != 3){
|
|
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_DEPRAVITYSEVENSINS, true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_DEPRAVITYSEVENSINS);
|
|
if(b_useskill != -1){
|
|
setDepravitysevensinsAppendage(obj);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Prideaccel(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 101:
|
|
local add_number = sq_GetLevelData(obj, SKILL_BYKK_PRIDEACCEL, 3, sq_GetSkillLevel(obj, SKILL_BYKK_PRIDEACCEL));
|
|
if(add_number > 0){
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_THESEVENDEADLYSINS);
|
|
if(loadSlot){
|
|
local loadnumber = loadSlot.getRemainLoadNumber();
|
|
if(loadnumber >= add_number && obj.getVar("Prideaccel_Bool").getBool(0)){
|
|
obj.getVar("Prideaccel_Bool").setBool(0, false);
|
|
loadSlot.decreaseLoadCount(1);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(2);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PRIDEACCEL, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 10001: obj.getVar("setCancelSkill").setBool(10, true); break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Prideaccel(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
}
|
|
|
|
function onEndState_Prideaccel(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
if(new_state != STATE_BYKK_PRIDEACCEL){
|
|
sq_SimpleMoveToNearMovablePos(obj, 200);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//屠戮回旋斩
|
|
function checkExecutableSkill_Rollingrush(obj)
|
|
{
|
|
if (!obj) return false;
|
|
if(obj.getState() == STATE_BYKK_DEPRAVITYSEVENSINS && obj.getSkillSubState() < 10) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_ROLLINGRUSH);
|
|
if (isUse){
|
|
obj.getVar("Rollingrush_Bool").setBool(0, false);
|
|
obj.getVar("Rollingrush_Bool").setBool(1, false);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.getVar("Rollingrush_Bool").setBool(0, true);
|
|
obj.sq_IntVectClear();
|
|
if(sq_GetZPos(obj) > 0) obj.sq_IntVectPush(1);
|
|
else if(sq_GetLevelData(obj, SKILL_BYKK_ROLLINGRUSH, 4, sq_GetSkillLevel(obj, SKILL_BYKK_ROLLINGRUSH)) > 0) obj.sq_IntVectPush(5);
|
|
else obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_ROLLINGRUSH, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Rollingrush(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Rollingrush(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:
|
|
if(obj.getVar("Rollingrush_Bool").getBool(0)){
|
|
local ani = getCurrentAnimation_demonization(obj, "atrollingrush_d_ready_body", false);
|
|
obj.setCurrentAnimation(ani);
|
|
}
|
|
else{
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATROLLINGRUSH_READY_BODY);
|
|
obj.sq_PlaySound("PW_ROLLINGRUSH_01_2");
|
|
}
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ROLLINGRUSH, -1, 0, 1.0) + 100;
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_ROLLINGRUSH));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
break;
|
|
case 1:
|
|
if(obj.getVar("Rollingrush_Bool").getBool(0)){
|
|
local ani = getCurrentAnimation_demonization(obj, "atrollingrush_d_hit_01_body", false);
|
|
obj.setCurrentAnimation(ani);
|
|
}
|
|
else obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATROLLINGRUSH_HIT_01_BODY);
|
|
obj.resetHitObjectList();
|
|
break;
|
|
case 2:
|
|
if(obj.getVar("Rollingrush_Bool").getBool(0)){
|
|
local ani = getCurrentAnimation_demonization(obj, "atrollingrush_d_hit_02_body", false);
|
|
obj.setCurrentAnimation(ani);
|
|
}
|
|
else obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATROLLINGRUSH_HIT_02_BODY);
|
|
obj.resetHitObjectList();
|
|
break;
|
|
case 3:
|
|
if(obj.getVar("Rollingrush_Bool").getBool(0)){
|
|
local ani = getCurrentAnimation_demonization(obj, "atrollingrush_d_spin_end_body", false);
|
|
obj.setCurrentAnimation(ani);
|
|
}
|
|
else obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATROLLINGRUSH_SPIN_END_BODY);
|
|
break;
|
|
case 4:
|
|
if(obj.getVar("Rollingrush_Bool").getBool(0)){
|
|
local ani = getCurrentAnimation_demonization(obj, "atrollingrush_d_landing_body", false);
|
|
obj.setCurrentAnimation(ani);
|
|
}
|
|
else obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATROLLINGRUSH_LANDING_BODY);
|
|
break;
|
|
case 5:
|
|
if(obj.getVar("Rollingrush_Bool").getBool(0)){
|
|
local ani = getCurrentAnimation_demonization(obj, "atrollingrush_d_finish_body", false);
|
|
obj.setCurrentAnimation(ani);
|
|
obj.sq_PlaySound("PW_ROLLINGRUSH_DM_02");
|
|
}
|
|
else{
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATROLLINGRUSH_FINISH_BODY);
|
|
obj.sq_PlaySound("PW_ROLLINGRUSH_02_2");
|
|
}
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ROLLINGRUSH, -1, 1, 1.0) + 100;
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_ROLLINGRUSHFINSH));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
sq_flashScreen(obj,0,10,100,38, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
sq_SetMyShake(obj,4,200);
|
|
break;
|
|
}
|
|
local speed = 1.0 + sq_GetLevelData(obj, SKILL_BYKK_ROLLINGRUSH, 3, sq_GetSkillLevel(obj, SKILL_BYKK_ROLLINGRUSH)) / 100.0;
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speed, speed);
|
|
if(obj.getVar("Rollingrush_Bool").getBool(1) == false && subState == 1){
|
|
obj.getVar("Rollingrush_Bool").setBool(1, true);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local delay = currentAni.getDelaySum(0, 0);
|
|
if(delay <= 5) delay = 5;
|
|
obj.getVar("Rollingrush").setInt(10, delay);
|
|
local hitMax = sq_GetLevelData(obj, SKILL_BYKK_ROLLINGRUSH, 2, sq_GetSkillLevel(obj, SKILL_BYKK_ROLLINGRUSH));
|
|
obj.getVar("Rollingrush").setInt(11, hitMax);
|
|
obj.getVar("Rollingrush").setInt(13, hitMax * 3 / 2 * 5 + 10);
|
|
if(sq_GetZPos(obj) <= 0) obj.setTimeEvent(0, delay / 5, obj.getVar("Rollingrush").getInt(13), true);
|
|
else{
|
|
obj.getVar("Rollingrush").setInt(12, sq_GetZPos(obj));
|
|
obj.getVar("Rollingrush").setInt(13, hitMax * 3 * 5);
|
|
obj.setTimeEvent(1, delay / 5, hitMax * 3 * 5, true);
|
|
}
|
|
}
|
|
if(subState == 1 || subState == 2){
|
|
local speed = 100 * obj.getVar("Rollingrush").getInt(10) / 60.0;
|
|
if(obj.getDirection() == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed);
|
|
else sq_SetVelocity(obj, 0, -speed);
|
|
}
|
|
else if(subState == 3){
|
|
if(obj.getDirection() == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, 200.0);
|
|
else sq_SetVelocity(obj, 0, -200.0);
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_Rollingrush(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
case 3:
|
|
case 4:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(subState + 1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_ROLLINGRUSH, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 5:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
case 2:
|
|
if(obj.getVar("Rollingrush").getInt(11) <= 0){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(3);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_ROLLINGRUSH, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
else{
|
|
obj.getVar("Rollingrush").setInt(11, obj.getVar("Rollingrush").getInt(11) - 1);
|
|
obj.sq_IntVectClear();
|
|
if(subState == 1) obj.sq_IntVectPush(2);
|
|
else obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_ROLLINGRUSH, STATE_PRIORITY_AUTO, true);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Rollingrush(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 1:
|
|
case 2:
|
|
if((sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT) || (sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT)){
|
|
local speed = 300 * obj.getVar("Rollingrush").getInt(10) / 60.0;
|
|
if(obj.getDirection() == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed);
|
|
else sq_SetVelocity(obj, 0, -speed);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Rollingrush(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 10001: obj.getVar("setCancelSkill").setBool(10, true); break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Rollingrush(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
local hitMax = sq_GetIntData(obj, SKILL_BYKK_ROLLINGRUSH, 0);
|
|
local v = sq_GetAccel(0, 123, timeEventCount, obj.getVar("Rollingrush").getInt(13), true);
|
|
sq_setCurrentAxisPos(obj, 2, v);
|
|
if(timeEventCount >= obj.getVar("Rollingrush").getInt(13)){
|
|
local delay = obj.getVar("Rollingrush").getInt(10);
|
|
obj.getVar("Rollingrush").setInt(12, sq_GetZPos(obj));
|
|
obj.setTimeEvent(1, delay / 5, obj.getVar("Rollingrush").getInt(13), true);
|
|
}
|
|
break;
|
|
case 1:
|
|
local hitMax = sq_GetIntData(obj, SKILL_BYKK_ROLLINGRUSH, 0);
|
|
local v = sq_GetAccel(obj.getVar("Rollingrush").getInt(12), 0, timeEventCount, obj.getVar("Rollingrush").getInt(13), false);
|
|
sq_setCurrentAxisPos(obj, 2, v);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Rollingrush(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
|
|
//怠惰之息
|
|
function checkExecutableSkill_Slothbody(obj)
|
|
{
|
|
if (!obj) return false;
|
|
if(obj.getState() == STATE_BYKK_DEPRAVITYSEVENSINS && obj.getSkillSubState() < 10) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SLOTHBODY);
|
|
if (isUse){
|
|
obj.getVar("Slothbody_ani").clear_obj_vector();
|
|
obj.sq_IntVectClear();
|
|
local sub = sq_GetLevelData(obj, SKILL_BYKK_SLOTHBODY, 4, sq_GetSkillLevel(obj, SKILL_BYKK_SLOTHBODY));
|
|
if(sub > 0 && sub < 100) obj.sq_IntVectPush(1);
|
|
else obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_SLOTHBODY, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Slothbody(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Slothbody(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://SLOTHBODY_APDPATH
|
|
local ani = getCurrentAnimation_demonization(obj, "slothbodystep1_body", false);
|
|
obj.setCurrentAnimation(ani);
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BYKK_SLOTHBODY, false, SLOTHBODY_APDPATH, true);
|
|
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_SLOTHBODY);
|
|
local allTolerance = sq_GetLevelData(obj, SKILL_BYKK_SLOTHBODY, 2, skillLevel);
|
|
local change_appendage = AddAppendage.sq_getChangeStatus("Slothbody");
|
|
if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("Slothbody",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_ACTIVESTATUS_TOLERANCE_ALL, false, (allTolerance * 1).tofloat());
|
|
}
|
|
obj.getVar("Slothbody_Bool").setBool(0, true);
|
|
obj.setTimeEvent(0, 100, 1, false);
|
|
obj.sq_PlaySound("R_PW_SLOTHBODY_01");
|
|
|
|
local range = 270, speed = 350;
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_ORIGINALSIN) > 0){
|
|
range = range * sq_GetLevelData(obj, SKILL_BYKK_ORIGINALSIN, 2, sq_GetSkillLevel(obj, SKILL_BYKK_ORIGINALSIN)) / 100;
|
|
speed = speed * sq_GetLevelData(obj, SKILL_BYKK_ORIGINALSIN, 1, sq_GetSkillLevel(obj, SKILL_BYKK_ORIGINALSIN)) / 100;
|
|
obj.sq_AddStateLayerAnimation(-1001,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atslothbody/lv95atoriginalsin/atslothbodylv95atoriginalsinpullbottom_05.ani"), 0, 0);
|
|
obj.sq_AddStateLayerAnimation(10001,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atslothbody/lv95atoriginalsin/atslothbodylv95atoriginalsinpullfront_07.ani"), 0, 0);
|
|
}
|
|
local appendage = sq_AttractToMe(obj, range, 100, speed);
|
|
obj.getVar("Slothbody").setAppendage(0,appendage);//设置ap
|
|
break;
|
|
case 1:
|
|
obj.removeAllTimeEvent();
|
|
local appendage = obj.getVar("Slothbody").getAppendage(0);
|
|
if(appendage) appendage.setValid(false);
|
|
local aniSet = "slothbodyfinish_body";
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_ORIGINALSIN) > 0) aniSet = "atslothbodylv95atoriginalsinattackbodydemon_00";
|
|
local ani = getCurrentAnimation_demonization(obj, aniSet, false);
|
|
obj.setCurrentAnimation(ani);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
CNSquirrelAppendage.sq_RemoveAppendage(obj, SLOTHBODY_APDPATH);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SLOTHBODY, -1, 2, 1.0) + 100;
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_SLOTHBODYATTACK));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
local size = obj.getVar("Slothbody_ani").get_obj_vector_size();
|
|
if(size > 0){
|
|
for(local i = 0; i < size; i++){
|
|
local aniObj = obj.getVar("Slothbody_ani").get_obj_vector(i);
|
|
if(aniObj) aniObj.setValid(false);
|
|
}
|
|
}
|
|
obj.sq_PlaySound("R_PW_SLOTHBODY_02");
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_Slothbody(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
if(sq_GetLevelData(obj, SKILL_BYKK_SLOTHBODY, 4, sq_GetSkillLevel(obj, SKILL_BYKK_SLOTHBODY)) >= 100){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(subState + 1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_SLOTHBODY, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Slothbody(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
local sub = sq_GetLevelData(obj, SKILL_BYKK_SLOTHBODY, 4, sq_GetSkillLevel(obj, SKILL_BYKK_SLOTHBODY));
|
|
if(obj.getVar("Slothbody_Bool").getBool(0) && sub < 100){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_SLOTHBODY,true);
|
|
sq_SetKeyxEnable(obj, E_SKILL_COMMAND, true);
|
|
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_SLOTHBODY);
|
|
if(b_useskill != -1 || sq_IsEnterCommand(obj, E_SKILL_COMMAND)){
|
|
obj.getVar("Slothbody_Bool").setBool(0, false);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_SLOTHBODY, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
else if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){
|
|
obj.getVar("Slothbody_Bool").setBool(0, false);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
else if(sub >= 100){
|
|
if(!sq_GetSkill(obj, SKILL_BYKK_GREEDTHELURKER).isInCoolTime()){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_GREEDTHELURKER, true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_GREEDTHELURKER);
|
|
if(b_useskill != -1){
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_GREEDTHELURKER);
|
|
obj.startSkillCoolTime(SKILL_BYKK_GREEDTHELURKER, skillLevel, -1);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GREEDTHELURKER, -1, 0, 1.0) + 100;
|
|
local sizeRate = sq_GetLevelData(obj, SKILL_BYKK_GREEDTHELURKER, 2, skillLevel);
|
|
local hitTime = sq_GetLevelData(obj, SKILL_BYKK_GREEDTHELURKER, 3, skillLevel);
|
|
local hitMax = sq_GetLevelData(obj, SKILL_BYKK_GREEDTHELURKER, 1, skillLevel);
|
|
local sub = 0, maxHit = 0;
|
|
if(sq_GetLevelData(obj, SKILL_BYKK_GREEDTHELURKER, 4, skillLevel) > 0){sub = 1; maxHit = sq_GetLevelData(obj, SKILL_BYKK_GREEDTHELURKER, 5, skillLevel);}
|
|
if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,25,0,3,obj.getDirection(),4,SKILL_BYKK_GREEDTHELURKER,0,totalDamage,sizeRate,hitMax,hitTime,sub,maxHit,0,0);
|
|
break;
|
|
}
|
|
}
|
|
if(!sq_GetSkill(obj, SKILL_BYKK_HEAVYSIN).isInCoolTime()){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_HEAVYSIN, true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_HEAVYSIN);
|
|
if(b_useskill != -1){
|
|
obj.startSkillCoolTime(SKILL_BYKK_HEAVYSIN, sq_GetSkillLevel(obj, SKILL_BYKK_HEAVYSIN), -1);
|
|
obj.sq_PlaySound("HEAVYSIN");
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HEAVYSIN, -1, 0, 1.0) + 100;
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_HEAVYSIN, 0);
|
|
local sub = 0;
|
|
local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, THESEVENDEADLYSINS_APDPATH);
|
|
if(AddAppendage && AddAppendage.getVar("Sub").getInt(10) == 3){
|
|
sub = 1;
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_HEAVYSIN);
|
|
local prob = sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 1, skillLevel);
|
|
local level = sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 2, skillLevel);
|
|
local time = sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 3, skillLevel);
|
|
local speedRate = sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 4, skillLevel);
|
|
local speedRate2 = sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 5, skillLevel);
|
|
if(obj.isMyControlObject()){
|
|
local add_number = sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 6, sq_GetSkillLevel(obj, SKILL_BYKK_HEAVYSIN));
|
|
if(add_number > 0){
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_THESEVENDEADLYSINS);
|
|
local loadnumber = loadSlot.getRemainLoadNumber();
|
|
if(loadnumber > add_number){
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,-20,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,sub,prob,level,time,speedRate,speedRate2);
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,20,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,sub,prob,level,time,speedRate,speedRate2);
|
|
}
|
|
else createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,0,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,sub,prob,level,time,speedRate,speedRate2);
|
|
}
|
|
else{
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,0,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,sub,prob,level,time,speedRate,speedRate2);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
else if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,175,0,0,obj.getDirection(),0,SKILL_BYKK_HEAVYSIN,0,totalDamage,sizeRate,0,0,0,0,0,0);
|
|
|
|
local buffCount = sq_GetLevelData(obj, SKILL_BYKK_HEAVYSIN, 9, sq_GetSkillLevel(obj, SKILL_BYKK_HEAVYSIN));
|
|
if(buffCount > 0){
|
|
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, HEAVYSINBUFF_APDPATH);
|
|
if(!addAppendage){
|
|
addAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, HEAVYSINBUFF_APDPATH, true);
|
|
}
|
|
addAppendage.sq_SetValidTime(10000);
|
|
addAppendage.setEnableIsBuff(true);
|
|
addAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_HEAVYSIN, sq_GetSkillLevel(obj, SKILL_BYKK_HEAVYSIN));
|
|
CNSquirrelAppendage.sq_Append(addAppendage, obj, obj, true);
|
|
if(addAppendage.getVar("buffCount").getInt(10) >= buffCount) break;
|
|
addAppendage.getVar("buffCount").setInt(10, addAppendage.getVar("buffCount").getInt(10) + 1);
|
|
setSkillBonusRate_Temptress(obj);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
|
|
if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_DEPRAVITYSEVENSINS, true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_DEPRAVITYSEVENSINS);
|
|
if(b_useskill != -1){
|
|
setDepravitysevensinsAppendage(obj);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Slothbody(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 101:
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atslothbody/slothbodystep1_smoke1.ani", 0, -1, 0);
|
|
break;
|
|
case 102:
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atslothbody/slothbodyfinish_atkleaf.ani", 0, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atslothbody/slothbodyfinish_atk.ani", 0, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atslothbody/slothbodyfinish_dust.ani", 0, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atslothbody/slothbodyfinish_backshock2.ani", 0, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atslothbody/slothbodyfinish_backshock1.ani", 0, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atslothbody/slothbodyfinish_circle.ani", 0, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atslothbody/slothbodyfinish_shockwave.ani", 0, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atslothbody/slothbodyfinish_scytheshadow.ani", 0, 1, 0);
|
|
sq_flashScreen(obj,10,80,100,102, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
sq_SetMyShake(obj,4,300);
|
|
break;
|
|
case 103:
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atslothbody/slothbodyfinish_roseleaf.ani", 0, -1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atslothbody/slothbodyfinish_smoke1.ani", 0, 1, 0);
|
|
break;
|
|
case 201:
|
|
createOnlyDrawObject_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atslothbody/lv95atoriginalsin/atslothbodylv95atoriginalsinattackbottom_13.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atslothbody/lv95atoriginalsin/atslothbodylv95atoriginalsinattackfront_16.ani", 0, 1, 0);
|
|
sq_flashScreen(obj,20,160,40,134, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
sq_SetMyShake(obj, 7, 340);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SLOTHBODY, -1, 2, 1.0) + 100;
|
|
local sizeRate = 100;
|
|
if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),4,SKILL_BYKK_SLOTHBODY,0,totalDamage,sizeRate,0,0,0,0,0,0);
|
|
break;
|
|
case 202://cancel
|
|
obj.getVar("setCancelSkill").setBool(10, true);
|
|
break;
|
|
case 10001: obj.getVar("setCancelSkill").setBool(10, true); break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Slothbody(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atslothbody/slothbodypull_01.ani"), 0, 0);
|
|
obj.setTimeEvent(1, 500, -1, true);
|
|
break;
|
|
case 1:
|
|
local pooledObj = createOnlyDrawObject_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atslothbody/slothbodypull_floor.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM);
|
|
obj.getVar("Slothbody_ani").push_obj_vector(pooledObj);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Slothbody(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
if(new_state != STATE_BYKK_SLOTHBODY){
|
|
local appendage = obj.getVar("Slothbody").getAppendage(0);
|
|
if(appendage) appendage.setValid(false);
|
|
}
|
|
}
|
|
|
|
function getImmuneTypeDamageRate_appendage_SlothBody(appendage, damageRate, attacker)
|
|
{
|
|
if(!appendage) return damageRate;
|
|
local parentObj = appendage.getParent();
|
|
parentObj = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
|
if (!parentObj) {
|
|
appendage.setValid(false);
|
|
return damageRate;
|
|
}
|
|
local newdamageRate = (100 - sq_GetLevelData(parentObj, SKILL_BYKK_SLOTHBODY, 1, sq_GetSkillLevel(parentObj, SKILL_BYKK_SLOTHBODY)));
|
|
return newdamageRate;
|
|
}
|
|
|
|
//诱魔之手
|
|
function checkExecutableSkill_Handawakentosin(obj)
|
|
{
|
|
if (!obj) return false;
|
|
if(obj.getState() == STATE_BYKK_DEPRAVITYSEVENSINS && obj.getSkillSubState() < 10) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HANDAWAKENTOSIN);
|
|
if (isUse){
|
|
obj.getVar("Handawakentosin_EXP").clear_obj_vector();
|
|
obj.sq_IntVectClear();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(1);
|
|
else obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_HANDAWAKENTOSIN, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Handawakentosin(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Handawakentosin(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
obj.sq_ZStop();
|
|
switch(subState){
|
|
case 0:
|
|
local ani = getCurrentAnimation_demonization(obj, "handawakentosin_human2devil_body", false);
|
|
obj.setCurrentAnimation(ani);
|
|
obj.sq_PlaySound("PW_HANDAWAKENTOSIN");
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/athandawakentosin/handawakentosin_human2devil_greedready_eff_a.ani", 0, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/athandawakentosin/handawakentosin_human2devil_greedready_eff_d.ani", 0, 0, 0);
|
|
break;
|
|
case 1:
|
|
local ani = getCurrentAnimation_demonization(obj, "handawakentosin_skill_body_a", false);
|
|
obj.setCurrentAnimation(ani);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HANDAWAKENTOSIN, -1, 0, 1.0) + 100;
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_HANDAWAKENTOSIN));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_PlaySound("PW_HANDAWAKENTOSIN_DM");
|
|
break;
|
|
case 2:
|
|
local ani = getCurrentAnimation_demonization(obj, "handawakentosin_skill_body_b", false);
|
|
obj.setCurrentAnimation(ani);
|
|
break;
|
|
case 3:
|
|
local ani = getCurrentAnimation_demonization(obj, "handawakentosin_devil2human_body", false);
|
|
obj.setCurrentAnimation(ani);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/athandawakentosin/handawakentosin_devil2human_greedready_eff_a_e.ani", 0, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/athandawakentosin/handawakentosin_devil2human_greedready_eff_d_e.ani", 0, 0, 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_Handawakentosin(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(STATE_BYKK_HANDAWAKENTOSIN, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 2:
|
|
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(subState + 1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_HANDAWAKENTOSIN, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
case 3:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Handawakentosin(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
if(subState != 3){
|
|
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_DEPRAVITYSEVENSINS, true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_DEPRAVITYSEVENSINS);
|
|
if(b_useskill != -1){
|
|
setDepravitysevensinsAppendage(obj);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Handawakentosin(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 104:
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/athandawakentosin/handawakentosin_skill_slash_nor2.ani", 0, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/athandawakentosin/handawakentosin_skill_slash_nor1.ani", 0, 0, 0);
|
|
break;
|
|
case 105:
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/athandawakentosin/handawakentosin_skill_absorption.ani", 0, 1, 0);
|
|
obj.sq_PlaySound("HOLD_GO_FINGER");
|
|
obj.sq_PlaySound("SCUDWRATH_END");
|
|
sq_flashScreen(obj,0,80,160,107, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
sq_SetMyShake(obj,6,300);
|
|
local size = obj.getVar("Handawakentosin_EXP").get_obj_vector_size();
|
|
print("size = "+size);
|
|
if(size > 0){
|
|
for(local i = 0; i < size; i++){
|
|
local attackObj = obj.getVar("Handawakentosin_EXP").get_obj_vector(i);
|
|
if(attackObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(attackObj);
|
|
colObj.addSetStatePacket(21, null, STATE_PRIORITY_AUTO, false, "");
|
|
}
|
|
}
|
|
}
|
|
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_THESEVENDEADLYSINS);
|
|
if(loadSlot){
|
|
local loadnumber = loadSlot.getRemainLoadNumber();
|
|
local increaseCount = sq_GetLevelData(obj, SKILL_BYKK_HANDAWAKENTOSIN, 2, sq_GetSkillLevel(obj, SKILL_BYKK_HANDAWAKENTOSIN));
|
|
local loadMax = sq_GetLevelData(obj, SKILL_BYKK_THESEVENDEADLYSINS, 0, sq_GetSkillLevel(obj, SKILL_BYKK_THESEVENDEADLYSINS));
|
|
if((loadnumber + increaseCount) > loadMax) increaseCount = loadMax - loadnumber;
|
|
if(loadnumber < loadMax){
|
|
loadSlot.increaseLoadCount(increaseCount);
|
|
}
|
|
}
|
|
break;
|
|
case 10001: obj.getVar("setCancelSkill").setBool(10, true); break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Handawakentosin(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
}
|
|
|
|
function onEndState_Handawakentosin(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onAttack_Handawakentosin(obj, damager, boundingBox, isStuck)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 1:
|
|
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
|
|
local group = sq_GetGroup(damager);
|
|
local uniqueId = sq_GetUniqueId(damager);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PRIDEACCEL, -1, 0, 1.0) + 100;
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_PRIDEACCEL, 2);
|
|
if(obj.isMyControlObject()) createSkillPassive_ATPriest_bykk(obj,damager,PASSIVEOBJ_BYKK_ATPRIEST,0,0,sq_GetObjectHeight(damager) / 2,obj.getDirection(),4,SKILL_BYKK_HANDAWAKENTOSIN,0,totalDamage,group,uniqueId,0,0,0,0,0);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
|