3680 lines
144 KiB
C
3680 lines
144 KiB
C
|
|
//聖潔之光
|
|
function checkExecutableSkill_Holyflash(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HOLYFLASH);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_HOLYFLASH, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Holyflash(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Holyflash(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_HOLYFLASH_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_Holyflash(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Holyflash(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_Holyflash(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 101:
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYFLASH, -1, 0, 1.0) + 100;
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_HOLYFLASH, 3);
|
|
local moveX = sq_GetIntData(obj, SKILL_BYKK_HOLYFLASH, 5);
|
|
// if(obj.isMyControlObject())
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,47,1,94,obj.getDirection(),0,SKILL_BYKK_HOLYFLASH,1,totalDamage,sizeRate,moveX,0,0,0,0,0);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Holyflash(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
}
|
|
|
|
function onEndState_Holyflash(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
|
|
//治愈祈禱
|
|
function checkExecutableSkill_Prayerofheal(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PRAYEROFHEAL);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PRAYEROFHEAL, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Prayerofheal(obj)
|
|
{
|
|
if (!obj) return false;
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Prayerofheal(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;//126
|
|
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_PRAYEROFHEAL_BODY);
|
|
obj.sq_PlaySound("R_PW_PRAYERHEAL");//
|
|
//obj.sq_AddStateLayerAnimation(-1, obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atprayerofheal/groundrange_00.ani"), 0, 0);
|
|
local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atprayerofheal/groundrange_00.ani";
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_PRAYEROFHEAL, 1).tofloat() / 207.5;
|
|
local pooledObj = createOnlyDrawObject_ATPriest_bykk(obj, aniPath, true, obj.getDirection(), sq_GetXPos(obj), sq_GetYPos(obj), 0, ENUM_DRAWLAYER_BOTTOM);
|
|
local pAni = pooledObj.getCurrentAnimation();
|
|
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
|
|
pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
|
|
break;
|
|
}
|
|
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();
|
|
obj.setTimeEvent(0, currentAni.getDelaySum(false) / 4 * 3, 1, false);
|
|
}
|
|
|
|
function onEndCurrentAni_Prayerofheal(obj)
|
|
{
|
|
if(!obj) return;
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
}
|
|
|
|
function onProcCon_Prayerofheal(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_Prayerofheal(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Prayerofheal(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
local range = sq_GetIntData(obj, SKILL_BYKK_PRAYEROFHEAL, 1);
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_PRAYEROFHEAL);
|
|
local HP_heal = sq_GetLevelData(obj, SKILL_BYKK_PRAYEROFHEAL, 1, skillLevel);
|
|
local apdPath = "character/demonicswordman/0_common/ap_prayerofheal.nut";
|
|
local objectManager = obj.getObjectManager();
|
|
local objectNumber = objectManager.getCollisionObjectNumber();
|
|
for (local i = 0; i < objectNumber; i++){
|
|
local object = objectManager.getCollisionObject(i);
|
|
if (object && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) {
|
|
local appendage = CNSquirrelAppendage.sq_AppendAppendage(object, obj, -1, false, apdPath, true);
|
|
local change_appendage = appendage.sq_GetCNChangeHp("changehp");
|
|
if (!change_appendage) change_appendage = appendage.sq_AddCNChangeHp("changehp", object, obj, 0, HP_heal.tofloat(), 1000);
|
|
appendage.sq_SetValidTime(1000);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Prayerofheal(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
|
|
//升空斬
|
|
function checkExecutableSkill_Risingslash(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_RISINGSLASH);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
if(false) obj.sq_IntVectPush(1);
|
|
else if(sq_GetSkillLevel(obj, SKILL_BYKK_CRUSADE) > 0) obj.sq_IntVectPush(3);
|
|
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) obj.sq_IntVectPush(2);
|
|
else obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_RISINGSLASH, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Risingslash(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Risingslash(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_CRUSADERISINGSLASH_BODY);
|
|
obj.sq_PlaySound("PW_RISING_SLASH");
|
|
break;
|
|
case 1://FFF
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_RISINGSLASH_BODY);
|
|
obj.sq_PlaySound("PW_RISING_SLASH");
|
|
break;
|
|
case 2:
|
|
local ani = getCurrentAnimation_demonization(obj, "demonizationattack_basic_z_body", false);
|
|
obj.setCurrentAnimation(ani);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_basic_z_eff01.ani"), 0, 0);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_basic_z_eff02.ani"), 0, 0);
|
|
obj.sq_AddStateLayerAnimation(0,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_basic_z_eff03.ani"), 0, 0);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_basic_z_eff04.ani"), 0, 0);
|
|
obj.sq_AddStateLayerAnimation(0,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_basic_z_eff05.ani"), 0, 0);
|
|
obj.sq_PlaySound("R_PW_CUTINDASH_02");
|
|
obj.sq_PlaySound("CUTINDASH_SWISH");
|
|
break;
|
|
case 3:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_CRUSADERISINGSLASH_BODY);
|
|
obj.sq_PlaySound("PW_RISING_SLASH");
|
|
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_RISINGSLASH, -1, 1, 1.0) + 100;
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_RISINGSLASH));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
sq_SetCurrentAttacknBackForce(attackInfo, 100);
|
|
sq_SetCurrentAttacknUpForce(attackInfo, 600);
|
|
if(obj.getDirection() == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, 100.0);
|
|
else if(obj.getDirection() == ENUM_DIRECTION_LEFT) sq_SetVelocity(obj, 0, -100.0);
|
|
}
|
|
|
|
function onEndCurrentAni_Risingslash(obj)
|
|
{
|
|
if(!obj) return;
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
}
|
|
|
|
function onProcCon_Risingslash(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_Risingslash(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Risingslash(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
}
|
|
|
|
function onEndState_Risingslash(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
|
|
//净化
|
|
function checkExecutableSkill_Cure(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CURE);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_CURE, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Cure(obj)
|
|
{
|
|
if (!obj) return false;
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Cure(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_CURE_CAST_BODY);
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_CURE_START_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_Cure(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_CURE, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
local range = sq_GetIntData(obj, SKILL_BYKK_CURE, 5);
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CURE);
|
|
local realeaseMax = sq_GetLevelData(obj, SKILL_BYKK_CURE, 0, skillLevel);
|
|
local objectManager = obj.getObjectManager();
|
|
local objectNumber = objectManager.getCollisionObjectNumber();
|
|
for (local i = 0; i < objectNumber; i++){
|
|
local object = objectManager.getCollisionObject(i);
|
|
if (object && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) {
|
|
local activeObj = sq_GetCNRDObjectToActiveObject(object);
|
|
local count = 0;
|
|
for(local ui = 0; ui < 18; ui++){
|
|
if (sq_IsValidActiveStatus(activeObj, ui)){
|
|
sq_ReleaseActiveStatus(activeObj, ui);
|
|
count = count + 1;
|
|
if(count > realeaseMax) continue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Cure(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_Cure(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Cure(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
}
|
|
|
|
function onEndState_Cure(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
|
|
//胜利之矛
|
|
function checkExecutableSkill_Spearofvictory(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SPEAROFVICTORY);
|
|
if (isUse){
|
|
obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_SPEAROFVICTORY);
|
|
obj.getVar("spv").setBool(0, false);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_SPEAROFVICTORY, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Spearofvictory(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Spearofvictory(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_SPEAROFVICTORY_BODY_READY);
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_SPEAROFVICTORY_BODY_CHARGELOOP);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atspearofvictory/spearnochargeloop_01.ani"), 0, -76);
|
|
break;
|
|
case 2:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_SPEAROFVICTORY_BODYSHOT_02);
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
}
|
|
|
|
function onEndCurrentAni_Spearofvictory(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_SPEAROFVICTORY, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 2:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Spearofvictory(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 1:
|
|
local pAni = obj.getCurrentAnimation();
|
|
local chargeTime = sq_GetCurrentTime(pAni);
|
|
if((chargeTime >= sq_GetIntData(obj, SKILL_BYKK_SPEAROFVICTORY, 0) || sq_GetSkillLevel(obj, SKILL_BYKK_LUCULENTUISANGEL) > 0) && obj.getVar("spv").getBool(0) == false){
|
|
obj.sq_PlaySound("WSPEAR_CREATE_BIG");
|
|
obj.getVar("spv").setBool(0, true);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atspearofvictory/speartchargeeff_01.ani", 0, 0, 76);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atspearofvictory/spearchargeokloop.ani"), 0, -76);
|
|
}
|
|
local bDownKey = obj.isDownSkillLastKey();
|
|
if(!bDownKey){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(2);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_SPEAROFVICTORY, STATE_PRIORITY_AUTO, true);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Spearofvictory(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 101:
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atspearofvictory/spearstart_01.ani", 0, 0, 76);
|
|
local pAni = pooledObj.getCurrentAnimation();
|
|
obj.setTimeEvent(0, pAni.getDelaySum(false), 1, false);
|
|
obj.sq_PlaySound("PW_VICTORYSPEAR_01");
|
|
obj.sq_PlaySound("WSPEAR_CREATE");
|
|
break;
|
|
case 102: obj.sq_PlaySound("VICTORYSPEAR"); break;
|
|
case 103:
|
|
if(obj.getVar("spv").getBool(0)) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atspearofvictory/shot_charge.ani", -40, 0, 145);
|
|
else sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atspearofvictory/shot_normal.ani", -40, 0, 145);
|
|
break;
|
|
case 104:
|
|
obj.sq_PlaySound("PW_VICTORYSPEAR_02");
|
|
obj.sq_PlaySound("SPEAR_THROW_BIG");
|
|
//`CreateSpear` 0 0 130
|
|
local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SPEAROFVICTORY, -1, 0, 1.0);
|
|
local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SPEAROFVICTORY, -1, 2, 1.0);
|
|
local holdTime = sq_GetIntData(obj, SKILL_BYKK_SPEAROFVICTORY, 2);
|
|
local isCharge = 0;
|
|
if(obj.getVar("spv").getBool(0) || sq_GetSkillLevel(obj, SKILL_BYKK_LUCULENTUISANGEL) > 0){holdTime = sq_GetIntData(obj, SKILL_BYKK_SPEAROFVICTORY, 3); isCharge = 1;}
|
|
// if(obj.isMyControlObject())
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,130,obj.getDirection(),1,SKILL_BYKK_SPEAROFVICTORY,0,power,power_exp,holdTime,isCharge,0,0,0,0);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Spearofvictory(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atspearofvictory/spearnochargeloop_01.ani"), 0, -76);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Spearofvictory(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
|
|
//守护祝福
|
|
function checkExecutableSkill_Blessofprotection(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BLESSOFPROTECTION);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_BLESSOFPROTECTION, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Blessofprotection(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Blessofprotection(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_BLESSOFPROTECTIONCAST_BODY);
|
|
local castTime = sq_GetCastTime(obj, SKILL_BYKK_BLESSOFPROTECTION, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFPROTECTION));
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local delaySum = currentAni.getDelaySum(false);
|
|
local speedRate = delaySum.tofloat() / castTime.tofloat();
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate);
|
|
sq_StartDrawCastGauge(obj, castTime, true);
|
|
break;
|
|
case 1:
|
|
sq_EndDrawCastGauge(obj);
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_BLESSOFPROTECTIONSTART_BODY);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_Blessofprotection(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_BLESSOFPROTECTION, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Blessofprotection(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Blessofprotection(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 101:
|
|
obj.sq_PlaySound("PW_BLESSPROTECTION");
|
|
obj.sq_PlaySound("BLESSPROTECTION_CAST");
|
|
break;
|
|
case 102:
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atblessofprotection/start_sky.ani", 0, -1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atblessofprotection/start_front_4.ani", 0, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atblessofprotection/start_back_1.ani", 0, -1, 0);
|
|
createOnlyDrawObject_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atblessofprotection/start_floor.ani",true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM);
|
|
if(!obj.isMyControlObject()) break;
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFPROTECTION);
|
|
local range = sq_GetIntData(obj, SKILL_BYKK_BLESSOFPROTECTION, 0);
|
|
local damageRate = sq_GetIntData(obj, SKILL_BYKK_BLESSOFPROTECTION, 1);
|
|
local buffTime = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 0, skillLevel);
|
|
local hpMax = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 6, skillLevel);
|
|
local mpMax = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 7, skillLevel);
|
|
local phDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 2, skillLevel);
|
|
local mgDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 3, skillLevel);
|
|
local phlDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 4, skillLevel);
|
|
local mglDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 5, skillLevel);
|
|
|
|
local now_mgAttack = sq_GetMagicalAttack();//1000;//
|
|
now_mgAttack = now_mgAttack * (100 + sq_GetIntData(obj, 169, 2)) / 100;
|
|
local addRate = now_mgAttack.tofloat() / sq_GetIntData(obj, SKILL_BYKK_BLESSOFCOURAGE, 1).tofloat();
|
|
if(addRate > 1){
|
|
hpMax = hpMax.tofloat() * (1.0 + addRate);
|
|
mpMax = mpMax.tofloat() * (1.0 + addRate);
|
|
phDefense = phDefense.tofloat() * (1.0 + addRate);
|
|
mgDefense = mgDefense.tofloat() * (1.0 + addRate);
|
|
}
|
|
|
|
sq_BinaryStartWrite();
|
|
sq_BinaryWriteDword(1);
|
|
sq_BinaryWriteDword(SKILL_BYKK_BLESSOFPROTECTION);
|
|
sq_BinaryWriteDword(1);
|
|
sq_BinaryWriteDword(skillLevel);
|
|
sq_BinaryWriteDword(range);
|
|
sq_BinaryWriteDword(buffTime);
|
|
sq_BinaryWriteDword(hpMax.tointeger());
|
|
sq_BinaryWriteDword(mpMax.tointeger());
|
|
sq_BinaryWriteDword(phDefense.tointeger());
|
|
sq_BinaryWriteDword(mgDefense.tointeger());
|
|
sq_BinaryWriteDword(phlDefense);
|
|
sq_BinaryWriteDword(mglDefense);
|
|
sq_BinaryWriteDword(damageRate);
|
|
sq_SendCreatePassiveObjectPacket(obj, PASSIVEOBJ_BYKK_ATPRIEST, 0, 0, 0, 0, obj.getDirection());
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Blessofprotection(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Blessofprotection(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
if(new_state != STATE_BYKK_BLESSOFPROTECTION){
|
|
sq_EndDrawCastGauge(obj);
|
|
}
|
|
}
|
|
|
|
function getImmuneTypeDamageRate_appendage_at_blessofprotection(appendage, damageRate, attacker)
|
|
{
|
|
local parentObj = appendage.getParent();
|
|
parentObj = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
|
local targetObj = appendage.getVar("source").get_obj_vector(0);
|
|
if(targetObj && targetObj.getState() != STATE_DIE && !isSameObject(targetObj, parentObj)){
|
|
local new_damageRate = damageRate - appendage.getVar("custom").getInt(10);
|
|
return new_damageRate;
|
|
}
|
|
else{
|
|
return damageRate;
|
|
}
|
|
}
|
|
|
|
//圣光守护
|
|
function checkExecutableSkill_Holylight(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HOLYLIGHT);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_HOLYLIGHT, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Holylight(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Holylight(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_ARIA) > 0) obj.sq_SetCurrentAnimation(ATPANI_BYKK_HOLYLIGHTARIA_CAST_BODY);
|
|
else obj.sq_SetCurrentAnimation(ATPANI_BYKK_HOLYLIGHT_CAST_BODY);
|
|
local castTime = sq_GetCastTime(obj, SKILL_BYKK_HOLYLIGHT, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYLIGHT));
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local delaySum = currentAni.getDelaySum(false);
|
|
local speedRate = delaySum.tofloat() / castTime.tofloat();
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate);
|
|
sq_StartDrawCastGauge(obj, castTime, true);
|
|
break;
|
|
case 1:
|
|
sq_EndDrawCastGauge(obj);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_ARIA) > 0) obj.sq_SetCurrentAnimation(ATPANI_BYKK_HOLYLIGHTARIA_START_BODY);
|
|
else obj.sq_SetCurrentAnimation(ATPANI_BYKK_HOLYLIGHT_START_BODY);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_Holylight(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_HOLYLIGHT, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Holylight(obj)
|
|
{
|
|
if(!obj) return;
|
|
// local subState = obj.getSkillSubState();
|
|
// switch(subState){
|
|
// }
|
|
}
|
|
|
|
function onKeyFrameFlag_Holylight(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 101:
|
|
obj.sq_PlaySound("PW_HOLYLIGHT");
|
|
obj.sq_PlaySound("CURE_CAST");
|
|
break;
|
|
case 102:
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_HOLYLIGHT);
|
|
local range = sq_GetIntData(obj, SKILL_BYKK_HOLYLIGHT, 0);
|
|
local buffTime = sq_GetLevelData(obj, SKILL_BYKK_HOLYLIGHT, 0, skillLevel) + 720;
|
|
local power_Chr = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYLIGHT, -1, 1, 1.0);
|
|
local power_Pty = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYLIGHT, -1, 5, 1.0);
|
|
local damageRate = sq_GetLevelData(obj, SKILL_BYKK_HOLYLIGHT, 2, skillLevel);
|
|
local increaseRate = sq_GetIntData(obj, SKILL_BYKK_HOLYLIGHT, 4);
|
|
|
|
local skillLevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFPROTECTION);
|
|
local hpMax = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 6, skillLevel2) * (100 + increaseRate) / 100;
|
|
local mpMax = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 7, skillLevel2) * (100 + increaseRate) / 100;
|
|
local phDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 2, skillLevel2) * (100 + increaseRate) / 100;
|
|
local mgDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 3, skillLevel2) * (100 + increaseRate) / 100;
|
|
local phlDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 4, skillLevel2) * (100 + increaseRate) / 100;
|
|
local mglDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 5, skillLevel2) * (100 + increaseRate) / 100;
|
|
|
|
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_CHARACTER) && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) {
|
|
local activeObj = sq_GetCNRDObjectToActiveObject(object);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_HOLYLIGHT)) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_HOLYLIGHT);
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_HOLYLIGHT, true);
|
|
if(buffTime > 0) AddAppendage.sq_SetValidTime(buffTime);
|
|
AddAppendage.setBuffIconImage(44);
|
|
AddAppendage.setEnableIsBuff(true);
|
|
AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_HOLYLIGHT, skillLevel);
|
|
CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, obj, true);
|
|
AddAppendage.getVar("custom").setInt(10, damageRate);
|
|
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFPROTECTION)){
|
|
local ptcAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, APDPATH_BLESSOFPROTECTION);
|
|
local change_appendage = ptcAppendage.sq_getChangeStatus("AT_Blessofprotection");
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_HP_MAX, false, (hpMax).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MP_MAX, false, (mpMax).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, false, (phDefense).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, false, (mgDefense).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_DEFENSE, false, (phlDefense).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_DEFENSE, false, (mglDefense).tofloat());
|
|
}
|
|
}
|
|
|
|
local group = sq_GetGroup(activeObj);
|
|
local uniqueId = sq_GetUniqueId(activeObj);
|
|
local power = power_Pty;
|
|
if(isSameObject(obj, activeObj)) power = power_Chr;
|
|
// if(obj.isMyControlObject())
|
|
createSkillPassive_ATPriest_bykk(obj,activeObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,sq_GetHeightObject(activeObj) / 2,obj.getDirection(),1,SKILL_BYKK_HOLYLIGHT,0,power,buffTime,group,uniqueId,0,0,0,0);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Holylight(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Holylight(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
if(new_state != STATE_BYKK_HOLYLIGHT){
|
|
sq_EndDrawCastGauge(obj);
|
|
}
|
|
}
|
|
|
|
function getImmuneTypeDamageRate_appendage_at_holylight(appendage, damageRate, attacker)
|
|
{
|
|
local new_damageRate = damageRate - appendage.getVar("custom").getInt(10) / 10;
|
|
return new_damageRate;
|
|
}
|
|
|
|
function onDamageParent_appendage_at_holylight(appendage ,attacker, boundingBox, isStuck)
|
|
{
|
|
if(!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
parentObj = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
|
if (!parentObj) {
|
|
appendage.setValid(false);
|
|
return;
|
|
}
|
|
local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atholylight/barrier/hiteffect.ani";
|
|
local pooledObj = createOnlyDrawObject_ATPriest_bykk(parentObj,aniPath,true,attacker.getDirection(),sq_GetXPos(parentObj),sq_GetYPos(parentObj),sq_GetZPos(parentObj) + sq_GetHeightObject(parentObj) / 2,ENUM_DRAWLAYER_NORMAL);
|
|
sq_moveWithParent(parentObj, pooledObj);
|
|
}
|
|
|
|
//洗礼之光
|
|
function checkExecutableSkill_Lightofhaptism(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_LIGHTOFHAPTISM);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_LIGHTOFHAPTISM, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Lightofhaptism(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Lightofhaptism(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_ATLIGHTOFHAPTISM_CASTING_BODY);
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATLIGHTOFHAPTISM_SHOOT_BODY);
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
}
|
|
|
|
function onEndCurrentAni_Lightofhaptism(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_LIGHTOFHAPTISM, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Lightofhaptism(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Lightofhaptism(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 1:
|
|
local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LIGHTOFHAPTISM, SKILL_BYKK_LIGHTOFHAPTISM, 0, 1.0);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_LIGHTOFHAPTISM, 0);
|
|
// if(obj.isMyControlObject())
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,250,0,0,obj.getDirection(),1,SKILL_BYKK_LIGHTOFHAPTISM,0,power,sizeRate,0,0,0,0,0,0);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Lightofhaptism(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Lightofhaptism(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
|
|
//勇气祝福
|
|
function checkExecutableSkill_Blessofcourage(obj)
|
|
{
|
|
if (!obj) return false;
|
|
if(obj.getVar("canUseSkill").getBool(0)) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BLESSOFCOURAGE);
|
|
if (isUse){
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_BLESSOFCOURAGE)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_BLESSOFCOURAGE);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_BLESSOFCOURAGE, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Blessofcourage(obj)
|
|
{
|
|
if (!obj) return false;
|
|
if(obj.getVar("canUseSkill").getBool(0)) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Blessofcourage(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_BLESSOFCOURAGECAST_BODY);
|
|
|
|
//if(obj.isMyControlObject()){
|
|
// obj.getVar("Save_mgAttack").setInt(10, now_mgAttack);
|
|
//}
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_BLESSOFCOURAGESTART_BODY);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atblessofcourage/starta_effect_front_d1.ani", 0, 0, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atblessofcourage/startb_effect_1.ani", 0, 0, 0);
|
|
local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atblessofcourage/starta_effect_back_floor.ani";
|
|
local aniPath2 = "character/swordman/effect/animation/1_atpriest_bykk/atblessofcourage/starta_effect_back_glow.ani";
|
|
createOnlyDrawObject_ATPriest_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM);
|
|
createOnlyDrawObject_ATPriest_bykk(obj,aniPath2,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM);
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
}
|
|
|
|
function onEndCurrentAni_Blessofcourage(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_BLESSOFCOURAGE, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Blessofcourage(obj)
|
|
{
|
|
if(!obj) return;
|
|
// local subState = obj.getSkillSubState();
|
|
// switch(subState){
|
|
// }
|
|
}
|
|
|
|
function onKeyFrameFlag_Blessofcourage(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 101:
|
|
obj.sq_PlaySound("PW_BLESSCOURAGE");
|
|
obj.sq_PlaySound("DAWN_BLESS_CAST");
|
|
break;
|
|
case 102:
|
|
local objectManager = obj.getObjectManager();
|
|
local objectNumber = objectManager.getCollisionObjectNumber();
|
|
local count = 0;
|
|
for (local i = 0; i < objectNumber; i++){
|
|
local object = objectManager.getCollisionObject(i);
|
|
if(object && !obj.isEnemy(object) && object.isObjectType(OBJECTTYPE_CHARACTER)){
|
|
local sqrChr = sq_GetCNRDObjectToSQRCharacter(object);
|
|
if(sq_getJob(sqrChr) == ENUM_CHARACTERJOB_PRIEST && sq_getGrowType(sqrChr) == GROW_TYPE_CRUSADER) count = count + 1;
|
|
}
|
|
}
|
|
print("count = "+count);
|
|
if(count > 0){
|
|
obj.getVar("canUseSkill").setBool(0, true);
|
|
return;
|
|
}
|
|
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/priest/1crusader_bykk/ap_gloriousbless.nut")) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/priest/1crusader_bykk/ap_gloriousbless.nut");
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFVICTORIA)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_CRUXOFVICTORIA);
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFCOURAGE);
|
|
local range = sq_GetIntData(obj, SKILL_BYKK_BLESSOFCOURAGE, 0);
|
|
local buffTime = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFCOURAGE, 0, skillLevel);
|
|
local phAttack = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFCOURAGE, 1, skillLevel);
|
|
local mgAttack = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFCOURAGE, 2, skillLevel);
|
|
local adtAttack = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFCOURAGE, 3, skillLevel);
|
|
local phlAttack = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFCOURAGE, 4, skillLevel);
|
|
local mglAttack = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFCOURAGE, 5, skillLevel);
|
|
local stuckRate = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFCOURAGE, 6, skillLevel);
|
|
|
|
//local now_mgAttack = obj.getVar("Save_mgAttack").getInt(10);
|
|
local now_mgAttack = obj.getVar("mgAttackSave").getInt(0);
|
|
print("now_mgAttack = "+now_mgAttack);
|
|
local addRate = now_mgAttack.tofloat() / sq_GetIntData(obj, SKILL_BYKK_BLESSOFCOURAGE, 1).tofloat();
|
|
if(addRate > 1){
|
|
phAttack = phAttack.tofloat() * (1.0 + addRate);
|
|
mgAttack = mgAttack.tofloat() * (1.0 + addRate);
|
|
adtAttack = adtAttack.tofloat() * (1.0 + addRate);
|
|
phlAttack = phlAttack.tofloat() * (1.0 + addRate);
|
|
mglAttack = mglAttack.tofloat() * (1.0 + addRate);
|
|
}
|
|
// print("addRate = "+addRate);
|
|
sq_BinaryStartWrite();
|
|
sq_BinaryWriteDword(1);
|
|
sq_BinaryWriteDword(SKILL_BYKK_BLESSOFCOURAGE);
|
|
sq_BinaryWriteDword(1);
|
|
sq_BinaryWriteDword(skillLevel);
|
|
sq_BinaryWriteDword(range);
|
|
sq_BinaryWriteDword(buffTime);
|
|
sq_BinaryWriteDword(phAttack.tointeger());
|
|
sq_BinaryWriteDword(mgAttack.tointeger());
|
|
sq_BinaryWriteDword(adtAttack.tointeger());
|
|
sq_BinaryWriteDword(phlAttack.tointeger());
|
|
sq_BinaryWriteDword(mglAttack.tointeger());
|
|
sq_BinaryWriteDword(stuckRate);
|
|
sq_SendCreatePassiveObjectPacket(obj, PASSIVEOBJ_BYKK_ATPRIEST, 0, 0, 0, 0, obj.getDirection());
|
|
|
|
setSkillBonusBate_Crusader_bykk(obj);
|
|
break;
|
|
case 103:
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atblessofcourage/cast_effect_1.ani", 0, 1, 0);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Blessofcourage(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Blessofcourage(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onEnd_appendage_at_blessofcourage(appendage)
|
|
{
|
|
if(!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj || parentObj.getState() == STATE_DIE){
|
|
appendage.setValid(false);
|
|
return;
|
|
}
|
|
local sqrChr = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
|
if(sq_getJob(sqrChr) == ENUM_CHARACTERJOB_AT_MAGE && sq_getGrowType(sqrChr) == 1) setSkillBonusBate_Crusader_bykk(sqrChr);
|
|
}
|
|
|
|
//圣光烬盾
|
|
function checkExecutableSkill_Saintflash(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SAINTFLASH);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_SAINTFLASH, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Saintflash(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Saintflash(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_SAINTFLASH_CAST_BODY);
|
|
local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SAINTFLASH, -1, 4, 1.0);
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_SAINTWALLCAST));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power);
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_SAINTFLASH_SHOOT_BODY);
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
}
|
|
|
|
function onEndCurrentAni_Saintflash(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_SAINTFLASH, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
function onProcCon_Saintflash(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Saintflash(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 101:
|
|
obj.sq_PlaySound("R_PW_SAINTWALL_01");
|
|
obj.sq_PlaySound("SAINTWALL");
|
|
sq_SetMyShake(obj, 5, 200);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_SAINTFLASH, 0);
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atsaintwall/saintwall_ready_creatshield.ani", 60, 0, 0);
|
|
local currentAni = pooledObj.getCurrentAnimation();
|
|
sizeRate = sizeRate.tofloat() / 100.0;
|
|
currentAni.setImageRateFromOriginal(sizeRate, sizeRate);
|
|
currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
|
|
sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate);
|
|
break;
|
|
case 102:
|
|
obj.sq_PlaySound("FINALTEMPEST_MOVE_02");
|
|
obj.sq_PlaySound("R_PW_SAINTWALL_02");
|
|
local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SAINTFLASH, -1, 4, 1.0);
|
|
local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SAINTFLASH, -1, 0, 1.0);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_SAINTFLASH, 0);
|
|
// if(obj.isMyControlObject())
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,60,0,0,obj.getDirection(),1,SKILL_BYKK_SAINTFLASH,0,power,power_exp,sizeRate,0,0,0,0,0);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Saintflash(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Saintflash(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
|
|
//勇气圣歌
|
|
function checkExecutableSkill_Ariaofcourage(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_ARIAOFCOURAGE);
|
|
if (isUse){
|
|
obj.getVar("hitCount").setInt(10, 0);
|
|
obj.getVar("Ariaofcourage_Tar").clear_obj_vector();
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFCOURAGE, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Ariaofcourage(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Ariaofcourage(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_ARIAOFCOURAGESTART_BODY);
|
|
obj.sq_PlaySound("R_PW_ARIACOURAGE");
|
|
obj.sq_PlaySound("ARIACOURAGE_CAST");
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atariaofcourage/ora/orastartfront_1.ani"), 0, 0);
|
|
obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atariaofcourage/ora/orastartback_1.ani"), 0, 0);
|
|
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_ARIAOFCOURAGE);
|
|
local damageRate = sq_GetLevelData(obj, SKILL_BYKK_ARIAOFCOURAGE, 1, skillLevel);
|
|
local allTolerance = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 9);
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_ARIAOFCOURAGE, true);
|
|
AddAppendage.getVar("custom").setInt(10, damageRate);
|
|
local change_appendage = AddAppendage.sq_getChangeStatus("AT_Ariaofcourage");
|
|
if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Ariaofcourage",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).tofloat());
|
|
}
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_ARIAOFCOURAGELOOP_BODY);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atariaofcourage/ora/oraloopfront_5.ani"), 0, 0);
|
|
obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atariaofcourage/ora/oraloopback_1.ani"), 0, 0);
|
|
//-270 -70 -4 540 140 300
|
|
local skill = sq_GetSkill(obj, SKILL_BYKK_ARIA);
|
|
if(!skill.isSealFunction()){
|
|
local currentAni = obj.getCurrentAnimation();
|
|
sq_AddAttackBox(currentAni,-270, -70, -4, 540, 140, 300);
|
|
}
|
|
break;
|
|
case 2:
|
|
obj.stopSound(2001);
|
|
obj.stopTimeEvent(2);
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_ARIAOFCOURAGEEND_BODY);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atariaofcourage/ora/oraendfront_6.ani"), 0, 0);
|
|
obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atariaofcourage/ora/oraendback_1.ani"), 0, 0);
|
|
obj.sq_PlaySound("ARIACOURAGE_END");
|
|
local pooledObj = obj.getVar("Ariaofcourage_eff").get_obj_vector(0);
|
|
local pooledObj2 = obj.getVar("Ariaofcourage_eff").get_obj_vector(1);
|
|
if(pooledObj) pooledObj.setValid(false);
|
|
if(pooledObj2) pooledObj2.setValid(false);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/ora/oraendfront_6.ani", 0, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/ora/oraendback_1.ani", 0, -1, 0);
|
|
local floorObj = obj.getVar("ARIAOFCOURAGE_FLOOR").get_obj_vector(0);
|
|
local effectObj = obj.getVar("ARIAOFCOURAGE_EFFECT").get_obj_vector(0);
|
|
local musicObj = obj.getVar("ARIAOFCOURAGE_MUSIC").get_obj_vector(0);
|
|
if(floorObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(floorObj);
|
|
colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
|
|
}
|
|
if(effectObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(effectObj);
|
|
colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
|
|
}
|
|
if(musicObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(musicObj);
|
|
colObj.setValid(false);
|
|
}
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
}
|
|
|
|
function onEndCurrentAni_Ariaofcourage(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
local isStone = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 13);
|
|
if(isStone > 0) {//stone
|
|
local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ARIAOFCOURAGE, -1, 0, 1.0);
|
|
local hitTime = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 5);
|
|
local hitMax = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 6);
|
|
local range = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 7);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL) > 0) range = range * (1000 + sq_GetLevelData(obj, SKILL_BYKK_BLESSOFRAPHAEL, 5, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL))) / 1000;
|
|
if(isStone > 100) hitTime = hitTime / 2;
|
|
print("range = "+range);
|
|
local sizeRate = range * 100 / 275;
|
|
local lifeTime = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 0);
|
|
local increaseRate = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 8);
|
|
local buffTime = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 12);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFSHAPIEL)) buffTime = buffTime + sq_GetLevelData(obj, SKILL_BYKK_CRUXOFSHAPIEL, 3, sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL));
|
|
// if(obj.isMyControlObject()){
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFCOURAGE,4,sizeRate,power,hitTime,hitMax,lifeTime,range,increaseRate,buffTime);
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFCOURAGE,5,sizeRate,lifeTime,0,0,0,0,0,0);
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFCOURAGE,6,sizeRate,lifeTime,0,0,0,0,0,0);
|
|
// }
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
local hitTime = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 5);
|
|
local skill = sq_GetSkill(obj, SKILL_BYKK_ARIA);
|
|
if(!skill.isSealFunction()){
|
|
local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ARIAOFCOURAGE, -1, 0, 1.0);
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_ARIAOFCOURAGEATTACK));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power);
|
|
obj.setTimeEvent(1, hitTime, 1, false);
|
|
}
|
|
else{
|
|
local lifeTime = hitTime * sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 6);
|
|
obj.setTimeEvent(4, lifeTime, 1, false);
|
|
}
|
|
obj.setTimeEvent(2,20,-1,false);
|
|
obj.setTimeEvent(3,hitTime,-1,true);
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/buffeffect/buffloop_front.ani", 0, 0, 67);
|
|
local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/buffeffect/buffloop_back.ani", 0, -1, 67);
|
|
sq_moveWithParent(obj, pooledObj);
|
|
sq_moveWithParent(obj, pooledObj2);
|
|
obj.getVar("Ariaofcourage_eff").clear_obj_vector();
|
|
obj.getVar("Ariaofcourage_eff").push_obj_vector(pooledObj);
|
|
obj.getVar("Ariaofcourage_eff").push_obj_vector(pooledObj2);
|
|
local range = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 7);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL) > 0) range = range * (1000 + sq_GetLevelData(obj, SKILL_BYKK_BLESSOFRAPHAEL, 5, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL))) / 1000;
|
|
local sizeRate = range * 100 / 275;
|
|
// if(obj.isMyControlObject())
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFCOURAGE,3,sizeRate,0,0,0,0,0,0,0);
|
|
obj.sq_PlaySound("ARIACOURAGE", 2001);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFCOURAGE, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFCOURAGE, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 2:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Ariaofcourage(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 1:
|
|
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
|
|
if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(2);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFCOURAGE, STATE_PRIORITY_AUTO, true);
|
|
}
|
|
|
|
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
|
|
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) obj.addRapidInput();
|
|
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_LIGHTOFHAPTISM) > 0 && !sq_GetSkill(obj, SKILL_BYKK_LIGHTOFHAPTISM).isInCoolTime()){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_LIGHTOFHAPTISM,true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_LIGHTOFHAPTISM);
|
|
if(b_useskill != -1){
|
|
obj.startSkillCoolTime(SKILL_BYKK_LIGHTOFHAPTISM, sq_GetSkillLevel(obj, SKILL_BYKK_LIGHTOFHAPTISM), -1);
|
|
local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LIGHTOFHAPTISM, SKILL_BYKK_LIGHTOFHAPTISM, 0, 1.0);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_LIGHTOFHAPTISM, 0);
|
|
// if(obj.isMyControlObject()){
|
|
local target = sq_FindTarget(obj, 0, 500, 500, 500);
|
|
if(target) createSkillPassive_ATPriest_bykk(obj,target,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_LIGHTOFHAPTISM,0,power,sizeRate,0,0,0,0,0,0);
|
|
else createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,250,0,0,obj.getDirection(),1,SKILL_BYKK_LIGHTOFHAPTISM,0,power,sizeRate,0,0,0,0,0,0);
|
|
// }
|
|
}
|
|
}
|
|
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFANGEL) > 0 && !sq_GetSkill(obj, SKILL_BYKK_BLESSOFANGEL).isInCoolTime()){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_BLESSOFANGEL,true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_BLESSOFANGEL);
|
|
if(b_useskill != -1){
|
|
obj.startSkillCoolTime(SKILL_BYKK_BLESSOFANGEL, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFANGEL), -1);
|
|
local range = sq_GetIntData(obj, SKILL_BYKK_BLESSOFANGEL, 1);
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFANGEL);
|
|
local buffTime = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 0, skillLevel);
|
|
obj.sq_AddSkillLoad(SKILL_BYKK_BLESSOFANGEL, 111, 1, buffTime);
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_BLESSOFANGEL);
|
|
if(loadSlot) loadSlot.setStartCool();
|
|
local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 2, skillLevel);
|
|
local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 3, skillLevel);
|
|
local castSpeed = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 4, skillLevel);
|
|
local power_Chr = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLESSOFANGEL, -1, 1, 1.0);
|
|
local power_Pty = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLESSOFANGEL, -1, 5, 1.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_CHARACTER) && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) {
|
|
local activeObj = sq_GetCNRDObjectToActiveObject(object);
|
|
if(!obj.getVar("Blessofangel_sqr").is_obj_vector(activeObj)) obj.getVar("Blessofangel_sqr").push_obj_vector(activeObj);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFANGEL)){
|
|
CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_BLESSOFANGEL);
|
|
local effectObj = activeObj.getVar("Blessofangel_eff").get_obj_vector(0);
|
|
if(effectObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(effectObj);
|
|
colObj.setValid(false);
|
|
}
|
|
}
|
|
local power = power_Pty;
|
|
if(isSameObject(obj, activeObj)) power = power_Chr;
|
|
local group = sq_GetGroup(activeObj);
|
|
local uniqueId = sq_GetUniqueId(activeObj);
|
|
// if(obj.isMyControlObject())
|
|
createSkillPassive_ATPriest_bykk(obj,activeObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,sq_GetHeightObject(activeObj) + 30,obj.getDirection(),1,SKILL_BYKK_BLESSOFANGEL,1,power,buffTime,group,uniqueId,0,0,0,0);
|
|
if(obj.getVar("Blessofangel_Bool").getBool(0) == false) obj.getVar("Blessofangel_Bool").setBool(0, true);
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_BLESSOFANGEL, true);
|
|
AddAppendage.setBuffIconImage(131);
|
|
AddAppendage.sq_SetValidTime(buffTime);
|
|
AddAppendage.getVar("tar").clear_obj_vector();
|
|
AddAppendage.getVar("tar").push_obj_vector(obj);
|
|
|
|
local change_appendage = AddAppendage.sq_getChangeStatus("AT_Blessofangel");
|
|
if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Blessofangel",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_CAST_SPEED, false, (castSpeed).tofloat());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_PROTECTIONOFURIEL) > 0 && !sq_GetSkill(obj, SKILL_BYKK_PROTECTIONOFURIEL).isInCoolTime()){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_PROTECTIONOFURIEL,true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_PROTECTIONOFURIEL);
|
|
if(b_useskill != -1){
|
|
obj.startSkillCoolTime(SKILL_BYKK_PROTECTIONOFURIEL, sq_GetSkillLevel(obj, SKILL_BYKK_PROTECTIONOFURIEL), -1);
|
|
local lifeTime = sq_GetIntData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 1);
|
|
local range = sq_GetIntData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 4);
|
|
local hitTime = sq_GetIntData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 2);
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_PROTECTIONOFURIEL);
|
|
local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 2, skillLevel);
|
|
local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 3, skillLevel);
|
|
local castSpeed = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 4, skillLevel);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFSHAPIEL)){
|
|
local addRate = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFSHAPIEL, 5, sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL));
|
|
attackSpeed = attackSpeed + addRate;
|
|
moveSpeed = moveSpeed + addRate;
|
|
castSpeed = castSpeed + addRate;
|
|
}
|
|
local damageRate = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 5, skillLevel) / 10;
|
|
local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PROTECTIONOFURIEL, -1, 0, 1.0);
|
|
// if(obj.isMyControlObject())
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_PROTECTIONOFURIEL,1,power,lifeTime,hitTime,range,attackSpeed,moveSpeed,castSpeed,damageRate);
|
|
}
|
|
}
|
|
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_HOLYLIGHT) > 0 && !sq_GetSkill(obj, SKILL_BYKK_HOLYLIGHT).isInCoolTime()){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_HOLYLIGHT,true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_HOLYLIGHT);
|
|
if(b_useskill != -1){
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_HOLYLIGHT);
|
|
obj.startSkillCoolTime(SKILL_BYKK_HOLYLIGHT, skillLevel, -1);
|
|
local range = sq_GetIntData(obj, SKILL_BYKK_HOLYLIGHT, 0);
|
|
local buffTime = sq_GetLevelData(obj, SKILL_BYKK_HOLYLIGHT, 0, skillLevel) + 720;
|
|
local power_Chr = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYLIGHT, -1, 1, 1.0);
|
|
local power_Pty = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYLIGHT, -1, 5, 1.0);
|
|
local damageRate = sq_GetLevelData(obj, SKILL_BYKK_HOLYLIGHT, 2, skillLevel);
|
|
local increaseRate = sq_GetIntData(obj, SKILL_BYKK_HOLYLIGHT, 4);
|
|
|
|
local skillLevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFPROTECTION);
|
|
local hpMax = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 6, skillLevel2) * (100 + increaseRate) / 100;
|
|
local mpMax = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 7, skillLevel2) * (100 + increaseRate) / 100;
|
|
local phDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 2, skillLevel2) * (100 + increaseRate) / 100;
|
|
local mgDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 3, skillLevel2) * (100 + increaseRate) / 100;
|
|
local phlDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 4, skillLevel2) * (100 + increaseRate) / 100;
|
|
local mglDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 5, skillLevel2) * (100 + increaseRate) / 100;
|
|
|
|
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_CHARACTER) && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) {
|
|
local activeObj = sq_GetCNRDObjectToActiveObject(object);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_HOLYLIGHT)) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_HOLYLIGHT);
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_HOLYLIGHT, true);
|
|
if(buffTime > 0) AddAppendage.sq_SetValidTime(buffTime);
|
|
AddAppendage.setBuffIconImage(44);
|
|
AddAppendage.setEnableIsBuff(true);
|
|
AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_HOLYLIGHT, skillLevel);
|
|
CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, obj, true);
|
|
AddAppendage.getVar("custom").setInt(10, damageRate);
|
|
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFPROTECTION)){
|
|
local ptcAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, APDPATH_BLESSOFPROTECTION);
|
|
local change_appendage = ptcAppendage.sq_getChangeStatus("AT_Blessofprotection");
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_HP_MAX, false, (hpMax).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MP_MAX, false, (mpMax).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, false, (phDefense).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, false, (mgDefense).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_DEFENSE, false, (phlDefense).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_DEFENSE, false, (mglDefense).tofloat());
|
|
}
|
|
}
|
|
|
|
local group = sq_GetGroup(activeObj);
|
|
local uniqueId = sq_GetUniqueId(activeObj);
|
|
local power = power_Pty;
|
|
if(isSameObject(obj, activeObj)) power = power_Chr;
|
|
// if(obj.isMyControlObject())
|
|
createSkillPassive_ATPriest_bykk(obj,activeObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,sq_GetHeightObject(activeObj) / 2,obj.getDirection(),1,SKILL_BYKK_HOLYLIGHT,0,power,buffTime,group,uniqueId,0,0,0,0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_EDIFICATION) > 0 && !sq_GetSkill(obj, SKILL_BYKK_EDIFICATION).isInCoolTime()){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_EDIFICATION,true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_EDIFICATION);
|
|
if(b_useskill != -1){
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_EDIFICATION);
|
|
obj.startSkillCoolTime(SKILL_BYKK_HOLYLIGHT, skillLevel, -1);
|
|
local buffTime = sq_GetLevelData(obj, SKILL_BYKK_EDIFICATION, 0, skillLevel);
|
|
local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_EDIFICATION, 1, skillLevel);
|
|
|
|
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_CHARACTER) && !obj.isEnemy(object)) {
|
|
local activeObj = sq_GetCNRDObjectToActiveObject(object);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_EDIFICATION)) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_EDIFICATION);
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_EDIFICATION, true);
|
|
AddAppendage.sq_SetValidTime(buffTime);
|
|
AddAppendage.setBuffIconImage(128);
|
|
AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_EDIFICATION, skillLevel);
|
|
CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, obj, true);
|
|
AddAppendage.getVar("custom").setInt(10, moveSpeed);
|
|
|
|
local change_appendage = AddAppendage.sq_getChangeStatus("AT_Edification");
|
|
if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Edification",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed).tofloat());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL) > 0 && !sq_GetSkill(obj, SKILL_BYKK_CRUXOFSHAPIEL).isInCoolTime()){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_CRUXOFSHAPIEL,true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_CRUXOFSHAPIEL);
|
|
if(b_useskill != -1){
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL);
|
|
obj.startSkillCoolTime(SKILL_BYKK_CRUXOFSHAPIEL, skillLevel, -1);
|
|
|
|
obj.getVar("cruxofshapiel_obj").clear_obj_vector();
|
|
obj.getVar("cruxofshapiel_bool").setBool(0, false);
|
|
|
|
local power_fall = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CRUXOFSHAPIEL, -1, 0, 1.0);
|
|
local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CRUXOFSHAPIEL, -1, 1, 1.0);
|
|
local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CRUXOFSHAPIEL, -1, 2, 1.0);
|
|
local hitTime = sq_GetIntData(obj, SKILL_BYKK_CRUXOFSHAPIEL, 0);
|
|
// if(obj.isMyControlObject())
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,200,0,0,obj.getDirection(),1,SKILL_BYKK_CRUXOFSHAPIEL,1,power_fall,power,power_exp,hitTime,0,0,0,0);
|
|
local buffTime = hitTime * 21 + 2080;
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFSHAPIEL)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_CRUXOFSHAPIEL);
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_CRUXOFSHAPIEL, true);
|
|
AddAppendage.sq_SetValidTime(buffTime);
|
|
AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_CRUXOFSHAPIEL, sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL));
|
|
CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true);
|
|
}
|
|
}
|
|
|
|
if(obj.getVar("cruxofshapiel_bool").getBool(0)){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_CRUXOFSHAPIEL,true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_CRUXOFSHAPIEL);
|
|
if(b_useskill != -1){
|
|
obj.getVar("cruxofshapiel_bool").setBool(0, false);
|
|
local size = obj.getVar("cruxofshapiel_obj").get_obj_vector_size();
|
|
if(size > 0){
|
|
for(local i = 0; i < size; i++){
|
|
local aObj = obj.getVar("cruxofshapiel_obj").get_obj_vector(i);
|
|
if(aObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(aObj);
|
|
if(colObj.getVar("subtype").getInt(0) == 1) colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");
|
|
else colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Ariaofcourage(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 103:
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 13) > 0) break; //stone
|
|
local range = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 7);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL) > 0) range = range * (1000 + sq_GetLevelData(obj, SKILL_BYKK_BLESSOFRAPHAEL, 5, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL))) / 1000;
|
|
local sizeRate = range * 100 / 275;
|
|
// if(obj.isMyControlObject())
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFCOURAGE,1,sizeRate,0,0,0,0,0,0,0);
|
|
// if(obj.isMyControlObject())
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFCOURAGE,2,sizeRate,0,0,0,0,0,0,0);
|
|
break;
|
|
case 106:
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/ora/orastartfront_1.ani", 0, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atariaofcourage/ora/orastartback_1.ani", 0, -1, 0);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Ariaofcourage(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 1:
|
|
local inputConut = obj.getRapidInputFrequency();
|
|
inputConut = inputConut.tointeger();
|
|
|
|
local inputMax = 2;
|
|
local gapByInputMin = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 5) / 2;
|
|
local gapByInputMax = gapByInputMin * 2;
|
|
local hitMax = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 6);
|
|
|
|
if(obj.getVar("hitCount").getInt(10) + 1 >= hitMax){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(2);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFCOURAGE, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
else obj.getVar("hitCount").setInt(10, obj.getVar("hitCount").getInt(10) + 1);
|
|
|
|
if(inputConut >= inputMax) obj.setTimeEvent(1, gapByInputMin, 1, false);
|
|
else obj.setTimeEvent(1, gapByInputMax, 1, false);
|
|
|
|
obj.resetHitObjectList();
|
|
break;
|
|
case 2:
|
|
local xpos = sq_GetXPos(obj), ypos = sq_GetYPos(obj);
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos,ypos - 1)) sq_setCurrentAxisPos(obj, 1, ypos - 2);
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos - 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 2);
|
|
return;
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos + 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 2);
|
|
return;
|
|
}
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos,ypos + 1)) sq_setCurrentAxisPos(obj, 1, ypos + 2);
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos - 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 2);
|
|
return;
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos + 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 2);
|
|
return;
|
|
}
|
|
}
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos - 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 2);
|
|
return;
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos + 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 2);
|
|
return;
|
|
}
|
|
break;
|
|
case 3:
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_ARIAOFCOURAGE);
|
|
local increaseRate = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 8);
|
|
local buffTime = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 12);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFSHAPIEL)) buffTime = buffTime + sq_GetLevelData(obj, SKILL_BYKK_CRUXOFSHAPIEL, 3, sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL));
|
|
local range = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 7);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL) > 0) range = range * (1000 + sq_GetLevelData(obj, SKILL_BYKK_BLESSOFRAPHAEL, 5, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL))) / 1000;
|
|
local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ARIAOFCOURAGE, -1, 0, 1.0) / 2;
|
|
local skill = sq_GetSkill(obj, SKILL_BYKK_ARIAOFCOURAGE);
|
|
local isSeal = skill.isSealFunction();
|
|
|
|
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_CHARACTER) && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) {
|
|
local activeObj = sq_GetCNRDObjectToActiveObject(object);
|
|
if(!obj.getVar("Ariaofcourage_Tar").is_obj_vector(activeObj)) obj.getVar("Ariaofcourage_Tar").push_obj_vector(activeObj);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_ARIAOFCOURAGEBUFF)){
|
|
CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_ARIAOFCOURAGEBUFF);
|
|
}
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_ARIAOFCOURAGEBUFF, true);
|
|
|
|
if(!isSeal){
|
|
local change2_appendage = AddAppendage.sq_GetCNChangeHp("changehp");
|
|
if (!change2_appendage) change2_appendage = AddAppendage.sq_AddCNChangeHp("changehp", activeObj, obj, 0, power.tofloat(), 1000);
|
|
AddAppendage.sq_SetValidTime(buffTime);
|
|
AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_ARIAOFCOURAGE, skillLevel);
|
|
CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, obj, true);
|
|
}
|
|
|
|
AddAppendage.getVar("custom").setInt(16, buffTime);
|
|
AddAppendage.getVar("custom").setInt(17, range);
|
|
AddAppendage.getVar("bool").setBool(0, true);
|
|
|
|
if(!CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFCOURAGE)) continue;
|
|
local AddAppendage2 = CNSquirrelAppendage.sq_GetAppendage(activeObj, APDPATH_BLESSOFCOURAGE);
|
|
local phAttack = AddAppendage2.getVar("custom").getInt(10);
|
|
local mgAttack = AddAppendage2.getVar("custom").getInt(11);
|
|
local adtAttack = AddAppendage2.getVar("custom").getInt(12);
|
|
local phlAttack = AddAppendage2.getVar("custom").getInt(13);
|
|
local mglAttack = AddAppendage2.getVar("custom").getInt(14);
|
|
local stuckRate = AddAppendage2.getVar("custom").getInt(15);
|
|
// print("phAttack = "+phAttack+"; mgAttack ="+mgAttack+"; adtAttack ="+adtAttack+"; phlAttack ="+phlAttack+"; mglAttack ="+mglAttack+"; stuckRate ="+stuckRate);
|
|
|
|
local change_appendage = AddAppendage.sq_getChangeStatus("AT_AriaofcourageBuff");
|
|
if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_AriaofcourageBuff",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, false, (phAttack * increaseRate / 100).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, false, (mgAttack * increaseRate / 100).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_PHYSICAL_GENUINE_ATTACK, false, (adtAttack * increaseRate / 100).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_MAGICAL_GENUINE_ATTACK, false, (adtAttack * increaseRate / 100).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, false, (phlAttack * increaseRate / 100).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, (mglAttack * increaseRate / 100).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK, false, (stuckRate * -0.1 * increaseRate / 100).tofloat());
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 4:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(2);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFCOURAGE, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Ariaofcourage(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
if(new_state != STATE_BYKK_ARIAOFCOURAGE){
|
|
local size = obj.getVar("Ariaofcourage_Tar").get_obj_vector_size();
|
|
if(size > 0){
|
|
local buffTime = sq_GetIntData(obj, SKILL_BYKK_ARIAOFCOURAGE, 12);
|
|
for(local i = 0; i < size; i++){
|
|
local targetObj = obj.getVar("Ariaofcourage_Tar").get_obj_vector(i);
|
|
if(targetObj && targetObj.getState() != STATE_DIE){
|
|
local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, APDPATH_ARIAOFCOURAGEBUFF);
|
|
local validT = AddAppendage.getAppendageInfo().getValidTime();
|
|
AddAppendage.getAppendageInfo().setValidTime(buffTime);
|
|
}
|
|
}
|
|
}
|
|
local floorObj = obj.getVar("ARIAOFCOURAGE_FLOOR").get_obj_vector(0);
|
|
local effectObj = obj.getVar("ARIAOFCOURAGE_EFFECT").get_obj_vector(0);
|
|
local musicObj = obj.getVar("ARIAOFCOURAGE_MUSIC").get_obj_vector(0);
|
|
if(floorObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(floorObj);
|
|
colObj.setValid(false);
|
|
}
|
|
if(effectObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(effectObj);
|
|
colObj.setValid(false);
|
|
}
|
|
if(musicObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(musicObj);
|
|
colObj.setValid(false);
|
|
}
|
|
local pooledObj = obj.getVar("Ariaofcourage_eff").get_obj_vector(0);
|
|
local pooledObj2 = obj.getVar("Ariaofcourage_eff").get_obj_vector(1);
|
|
if(pooledObj) pooledObj.setValid(false);
|
|
if(pooledObj2) pooledObj2.setValid(false);
|
|
}
|
|
}
|
|
|
|
function getImmuneTypeDamageRate_appendage_at_ariaofcourage(appendage, damageRate, attacker)
|
|
{
|
|
local new_damageRate = damageRate - appendage.getVar("custom").getInt(10) / 10;
|
|
return new_damageRate;
|
|
}
|
|
|
|
function proc_appendage_at_ariaofcouragebuff(appendage)
|
|
{
|
|
if(!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
if(!CNSquirrelAppendage.sq_IsAppendAppendage(parentObj, APDPATH_BLESSOFCOURAGE)){
|
|
appendage.setValid(false);
|
|
return;
|
|
}
|
|
if((!parentObj || parentObj.getState() == STATE_DIE) && appendage.getVar("bool").getBool(1) == false){
|
|
appendage.getVar("bool").setBool(1, true);
|
|
appendage.sq_SetValidTime(appendage.getVar("custom").getInt(16));
|
|
return;
|
|
}
|
|
local sourceObj = appendage.getSource();
|
|
if((!parentObj || parentObj.getState() == STATE_DIE) && appendage.getVar("bool").getBool(1) == false){
|
|
appendage.getVar("bool").setBool(1, true);
|
|
appendage.sq_SetValidTime(appendage.getVar("custom").getInt(16));
|
|
return;
|
|
}
|
|
local range = appendage.getVar("custom").getInt(17);
|
|
if(sq_Abs(sourceObj.getXPos() - parentObj.getXPos()) > range && sq_Abs(sourceObj.getYPos() - parentObj.getYPos()) > range / 2 && appendage.getVar("bool").getBool(0)){
|
|
appendage.getVar("bool").setBool(0, false);
|
|
appendage.sq_SetValidTime(appendage.getVar("custom").getInt(16));
|
|
}
|
|
}
|
|
|
|
function onEnd_appendage_at_ariaofcouragebuff(appendage)
|
|
{
|
|
if(!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj || parentObj.getState() == STATE_DIE){
|
|
appendage.setValid(false);
|
|
return;
|
|
}
|
|
}
|
|
|
|
//神之教诲
|
|
function checkExecutableSkill_Edification(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_EDIFICATION);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_EDIFICATION, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Edification(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Edification(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_EDIFICATION_CAST_BODY);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atedification/edification_top_angelbody.ani", 0, 1, 0);
|
|
local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atedification/edification_bottom_glow.ani";
|
|
createOnlyDrawObject_ATPriest_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_BOTTOM);
|
|
obj.sq_PlaySound("R_PW_EDITICATION");
|
|
obj.sq_PlaySound("EDIFICATION_CAST");
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_EDIFICATION_START_BODY);
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_EDIFICATION);
|
|
local buffTime = sq_GetLevelData(obj, SKILL_BYKK_EDIFICATION, 0, skillLevel);
|
|
local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_EDIFICATION, 1, skillLevel);
|
|
|
|
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_CHARACTER) && !obj.isEnemy(object)) {
|
|
local activeObj = sq_GetCNRDObjectToActiveObject(object);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_EDIFICATION)) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_EDIFICATION);
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_EDIFICATION, true);
|
|
AddAppendage.sq_SetValidTime(buffTime);
|
|
AddAppendage.setBuffIconImage(128);
|
|
AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_EDIFICATION, skillLevel);
|
|
CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, obj, true);
|
|
AddAppendage.getVar("custom").setInt(10, moveSpeed);
|
|
|
|
local change_appendage = AddAppendage.sq_getChangeStatus("AT_Edification");
|
|
if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Edification",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed).tofloat());
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
}
|
|
|
|
function onEndCurrentAni_Edification(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_EDIFICATION, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Edification(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Edification(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Edification(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Edification(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
|
|
//神光惩戒
|
|
function checkExecutableSkill_Shinecross(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SHINECROSS);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_SHINECROSS, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Shinecross(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Shinecross(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_SC_BODYA);
|
|
local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHINECROSS, -1, 0, 1.0);
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_SHINECROSSATK1));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power);
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_SC_BODYB);
|
|
local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHINECROSS, -1, 1, 1.0);
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_SHINECROSSATK2));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power);
|
|
break;
|
|
case 2:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_SC_BODYC);
|
|
local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SHINECROSS, -1, 2, 1.0);
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_SHINECROSSATK3));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power);
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
}
|
|
|
|
function onEndCurrentAni_Shinecross(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_SHINECROSS, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(2);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_SHINECROSS, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 2:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Shinecross(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Shinecross(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 101: obj.sq_PlaySound("PW_1ATK_01"); break;
|
|
case 103: obj.sq_PlaySound("SHINECROSS_01"); break;
|
|
case 105: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atshinecross/sc_slasha_01.ani", 0, 1, 0); break;
|
|
case 200:
|
|
obj.sq_PlaySound("PW_3ATK_02");
|
|
obj.sq_PlaySound("SHINECROSS_02");
|
|
break;
|
|
case 203: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atshinecross/sc_slashb_01.ani", 0, 1, 0); break;
|
|
case 300: obj.sq_PlaySound("PW_RISING_SLASH"); break;
|
|
case 301:
|
|
obj.sq_PlaySound("SHINECROSS_03");
|
|
sq_flashScreen(obj,0,80,0,153, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
sq_SetMyShake(obj, 6, 100);
|
|
break;
|
|
case 310: sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atshinecross/sc_slashc_01.ani", 0, 1, 0); break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Shinecross(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Shinecross(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
|
|
//神圣锁环
|
|
function checkExecutableSkill_Holycirclet(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HOLYCIRCLET);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_HOLYCIRCLET, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Holycirclet(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Holycirclet(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_HOLYCIRCLET_A_BODY);
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_HOLYCIRCLET_B_BODY);
|
|
sq_SetMyShake(obj, 2, 40);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atholycirclet/holycirclet_b_bodyeff.ani", 0, 1, 0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_Holycirclet(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_HOLYCIRCLET, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Holycirclet(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Holycirclet(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 101:
|
|
//`ShootHolyCirclet` 300 0 70
|
|
local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYCIRCLET, -1, 0, 1.0);
|
|
local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYCIRCLET, -1, 1, 1.0);
|
|
local hitTime = sq_GetIntData(obj, SKILL_BYKK_HOLYCIRCLET, 6);
|
|
local subTime = sq_GetIntData(obj, SKILL_BYKK_HOLYCIRCLET, 0);
|
|
local lifeTime = sq_GetIntData(obj, SKILL_BYKK_HOLYCIRCLET, 2);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_HOLYCIRCLET, 10);
|
|
// if(obj.isMyControlObject())
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,300,0,70,obj.getDirection(),1,SKILL_BYKK_HOLYCIRCLET,1,power,power_exp,hitTime,lifeTime,subTime,sizeRate,0,0);
|
|
break;
|
|
case 104: sq_SetMyShake(obj, 2, 80); break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Holycirclet(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Holycirclet(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
|
|
//复苏之光
|
|
function checkExecutableSkill_Revive(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CUTINDASH);
|
|
if (isUse){
|
|
//obj.sq_IntVectClear();
|
|
//obj.sq_IntVectPush(0);
|
|
//obj.sq_AddSetStatePacket(STATE_BYKK_CUTINDASH, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Revive(obj)
|
|
{
|
|
if (!obj) return false;
|
|
// return true;
|
|
return false;
|
|
}
|
|
|
|
function onSetState_Revive(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_Revive(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
}
|
|
}
|
|
|
|
function onProcCon_Revive(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Revive(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Revive(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Revive(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
|
|
//忏悔之雷
|
|
function checkExecutableSkill_Thunderofcleans(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_THUNDEROFCLEANS);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_THUNDEROFCLEANS, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Thunderofcleans(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Thunderofcleans(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_ATTHUNDEROFCLEANS_CASTING_BODY);
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATTHUNDEROFCLEANS_START_BODY);
|
|
if(sq_GetIntData(obj, SKILL_BYKK_THUNDEROFCLEANS, 23) < 1){//stone
|
|
local createMax = sq_GetIntData(obj, SKILL_BYKK_THUNDEROFCLEANS, 2);
|
|
local createTime = sq_GetIntData(obj, SKILL_BYKK_THUNDEROFCLEANS, 3);
|
|
local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THUNDEROFCLEANS, -1, 3, 1.0);
|
|
local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THUNDEROFCLEANS, -1, 0, 1.0);
|
|
local minSizeRate = sq_GetIntData(obj, SKILL_BYKK_THUNDEROFCLEANS, 10);
|
|
// if(obj.isMyControlObject())
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,300,0,0,obj.getDirection(),1,SKILL_BYKK_THUNDEROFCLEANS,1,power,power_exp,createMax,createTime,0,minSizeRate,0,0);
|
|
}
|
|
else{
|
|
local createTime = sq_GetIntData(obj, SKILL_BYKK_THUNDEROFCLEANS, 3);
|
|
local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THUNDEROFCLEANS, -1, 0, -1, 2.0);
|
|
local sub = sq_GetIntData(obj, SKILL_BYKK_THUNDEROFCLEANS, 23);
|
|
local speed = 200;
|
|
if(sub > 50) speed = 300;
|
|
// if(obj.isMyControlObject())
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,200,0,0,obj.getDirection(),1,SKILL_BYKK_THUNDEROFCLEANS,1,0,power_exp,0,createTime,sub,0,speed,0);
|
|
obj.setTimeEvent(0, 100, 1, false);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_Thunderofcleans(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_THUNDEROFCLEANS, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Thunderofcleans(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Thunderofcleans(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Thunderofcleans(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_Thunderofcleans(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
|
|
//新生圣歌
|
|
function checkExecutableSkill_Ariaofregeneration(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_ARIAOFREGENERATION);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFREGENERATION, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Ariaofregeneration(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Ariaofregeneration(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_ARIAOFREGENERATIONSTART_BODY);
|
|
obj.sq_PlaySound("R_PW_ARIAREGENERATION");
|
|
obj.sq_PlaySound("ARIAREGENERATION", 2001);
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_ARIAOFREGENERATION);
|
|
local damageRate = sq_GetLevelData(obj, SKILL_BYKK_ARIAOFREGENERATION, 1, skillLevel);
|
|
local allTolerance = sq_GetIntData(obj, SKILL_BYKK_ARIAOFREGENERATION, 9);
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_ARIAOFCOURAGE, true);
|
|
AddAppendage.getVar("custom").setInt(10, damageRate);
|
|
local change_appendage = AddAppendage.sq_getChangeStatus("AT_Ariaofcourage");
|
|
if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Ariaofcourage",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).tofloat());
|
|
}
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_ARIAOFREGENERATIONLOOP_BODY);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atariaofregeneration/ora/oraloopfront_1.ani"), 0, -67);
|
|
obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atariaofregeneration/ora/oraloopback_glow.ani"), 0, -67);
|
|
break;
|
|
case 2:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_ARIAOFREGENERATIONEND_BODY);
|
|
obj.stopSound(2001);
|
|
obj.removeAllTimeEvent();
|
|
local floorObj = obj.getVar("ARIAOFREGENERATION_FLOOR").get_obj_vector(0);
|
|
local effectObj = obj.getVar("ARIAOFREGENERATION_EFFECT").get_obj_vector(0);
|
|
local musicObj = obj.getVar("ARIAOFREGENERATION_MUSIC").get_obj_vector(0);
|
|
if(floorObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(floorObj);
|
|
colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
|
|
}
|
|
if(effectObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(effectObj);
|
|
colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
|
|
}
|
|
if(musicObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(musicObj);
|
|
colObj.setValid(false);
|
|
}
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
}
|
|
|
|
function onEndCurrentAni_Ariaofregeneration(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ARIAOFREGENERATION, 13) > 0) {//stone
|
|
local range = sq_GetIntData(obj, SKILL_BYKK_ARIAOFREGENERATION, 5);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL) > 0) range = range * (1000 + sq_GetLevelData(obj, SKILL_BYKK_BLESSOFRAPHAEL, 7, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL))) / 1000;
|
|
local sizeRate = range * 100 / 275;
|
|
local lifeTime = sq_GetIntData(obj, SKILL_BYKK_ARIAOFREGENERATION, 0);
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_ARIAOFREGENERATION);
|
|
local HP_healRate = sq_GetLevelData(obj, SKILL_BYKK_ARIAOFREGENERATION, 0, skillLevel);
|
|
local decreaseMax = sq_GetIntData(obj, SKILL_BYKK_ARIAOFREGENERATION, 0) / 1000;
|
|
// if(obj.isMyControlObject()){
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFREGENERATION,4,sizeRate,lifeTime,HP_healRate,decreaseMax,range,0,0,0);
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFREGENERATION,5,sizeRate,lifeTime,0,0,0,0,0,0);
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFREGENERATION,6,sizeRate,lifeTime,0,0,0,0,0,0);
|
|
// }
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
local lifeTime = sq_GetIntData(obj, SKILL_BYKK_ARIAOFREGENERATION, 0);
|
|
obj.setTimeEvent(1,lifeTime,1,false);
|
|
obj.setTimeEvent(2,20,-1,false);
|
|
obj.setTimeEvent(3,1000,-1,true);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFREGENERATION, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFREGENERATION, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 2:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Ariaofregeneration(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 1:
|
|
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
|
|
if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(2);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFREGENERATION, STATE_PRIORITY_AUTO, true);
|
|
}
|
|
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_LIGHTOFHAPTISM) > 0 && !sq_GetSkill(obj, SKILL_BYKK_LIGHTOFHAPTISM).isInCoolTime()){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_LIGHTOFHAPTISM,true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_LIGHTOFHAPTISM);
|
|
if(b_useskill != -1){
|
|
obj.startSkillCoolTime(SKILL_BYKK_LIGHTOFHAPTISM, sq_GetSkillLevel(obj, SKILL_BYKK_LIGHTOFHAPTISM), -1);
|
|
local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_LIGHTOFHAPTISM, SKILL_BYKK_LIGHTOFHAPTISM, 0, -1, 1.0);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_LIGHTOFHAPTISM, 0);
|
|
// if(obj.isMyControlObject()){
|
|
local target = sq_FindTarget(obj, 0, 500, 500, 500);
|
|
if(target) createSkillPassive_ATPriest_bykk(obj,target,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_LIGHTOFHAPTISM,0,power,sizeRate,0,0,0,0,0,0);
|
|
else createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,250,0,0,obj.getDirection(),1,SKILL_BYKK_LIGHTOFHAPTISM,0,power,sizeRate,0,0,0,0,0,0);
|
|
// }
|
|
}
|
|
}
|
|
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFANGEL) > 0 && !sq_GetSkill(obj, SKILL_BYKK_BLESSOFANGEL).isInCoolTime()){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_BLESSOFANGEL,true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_BLESSOFANGEL);
|
|
if(b_useskill != -1){
|
|
obj.startSkillCoolTime(SKILL_BYKK_BLESSOFANGEL, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFANGEL), -1);
|
|
local range = sq_GetIntData(obj, SKILL_BYKK_BLESSOFANGEL, 1);
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFANGEL);
|
|
local buffTime = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 0, skillLevel);
|
|
obj.sq_AddSkillLoad(SKILL_BYKK_BLESSOFANGEL, 111, 1, buffTime);
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_BLESSOFANGEL);
|
|
if(loadSlot) loadSlot.setStartCool();
|
|
local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 2, skillLevel);
|
|
local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 3, skillLevel);
|
|
local castSpeed = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 4, skillLevel);
|
|
local power_Chr = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLESSOFANGEL, -1, 1, 1.0);
|
|
local power_Pty = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLESSOFANGEL, -1, 5, 1.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_CHARACTER) && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) {
|
|
local activeObj = sq_GetCNRDObjectToActiveObject(object);
|
|
if(!obj.getVar("Blessofangel_sqr").is_obj_vector(activeObj)) obj.getVar("Blessofangel_sqr").push_obj_vector(activeObj);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFANGEL)){
|
|
CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_BLESSOFANGEL);
|
|
local effectObj = activeObj.getVar("Blessofangel_eff").get_obj_vector(0);
|
|
if(effectObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(effectObj);
|
|
colObj.setValid(false);
|
|
}
|
|
}
|
|
local power = power_Pty;
|
|
if(isSameObject(obj, activeObj)) power = power_Chr;
|
|
local group = sq_GetGroup(activeObj);
|
|
local uniqueId = sq_GetUniqueId(activeObj);
|
|
// if(obj.isMyControlObject())
|
|
createSkillPassive_ATPriest_bykk(obj,activeObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,sq_GetHeightObject(activeObj) + 30,obj.getDirection(),1,SKILL_BYKK_BLESSOFANGEL,1,power,buffTime,group,uniqueId,0,0,0,0);
|
|
if(obj.getVar("Blessofangel_Bool").getBool(0) == false) obj.getVar("Blessofangel_Bool").setBool(0, true);
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_BLESSOFANGEL, true);
|
|
AddAppendage.setBuffIconImage(131);
|
|
AddAppendage.sq_SetValidTime(buffTime);
|
|
AddAppendage.getVar("tar").clear_obj_vector();
|
|
AddAppendage.getVar("tar").push_obj_vector(obj);
|
|
|
|
local change_appendage = AddAppendage.sq_getChangeStatus("AT_Blessofangel");
|
|
if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Blessofangel",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_CAST_SPEED, false, (castSpeed).tofloat());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_PROTECTIONOFURIEL) > 0 && !sq_GetSkill(obj, SKILL_BYKK_PROTECTIONOFURIEL).isInCoolTime()){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_PROTECTIONOFURIEL,true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_PROTECTIONOFURIEL);
|
|
if(b_useskill != -1){
|
|
obj.startSkillCoolTime(SKILL_BYKK_PROTECTIONOFURIEL, sq_GetSkillLevel(obj, SKILL_BYKK_PROTECTIONOFURIEL), -1);
|
|
local lifeTime = sq_GetIntData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 1);
|
|
local range = sq_GetIntData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 4);
|
|
local hitTime = sq_GetIntData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 2);
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_PROTECTIONOFURIEL);
|
|
local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 2, skillLevel);
|
|
local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 3, skillLevel);
|
|
local castSpeed = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 4, skillLevel);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFSHAPIEL)){
|
|
local addRate = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFSHAPIEL, 5, sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL));
|
|
attackSpeed = attackSpeed + addRate;
|
|
moveSpeed = moveSpeed + addRate;
|
|
castSpeed = castSpeed + addRate;
|
|
}
|
|
local damageRate = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 5, skillLevel) / 10;
|
|
local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PROTECTIONOFURIEL, -1, 0, 1.0);
|
|
// if(obj.isMyControlObject())
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_PROTECTIONOFURIEL,1,power,lifeTime,hitTime,range,attackSpeed,moveSpeed,castSpeed,damageRate);
|
|
}
|
|
}
|
|
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_HOLYLIGHT) > 0 && !sq_GetSkill(obj, SKILL_BYKK_HOLYLIGHT).isInCoolTime()){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_HOLYLIGHT,true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_HOLYLIGHT);
|
|
if(b_useskill != -1){
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_HOLYLIGHT);
|
|
obj.startSkillCoolTime(SKILL_BYKK_HOLYLIGHT, skillLevel, -1);
|
|
local range = sq_GetIntData(obj, SKILL_BYKK_HOLYLIGHT, 0);
|
|
local buffTime = sq_GetLevelData(obj, SKILL_BYKK_HOLYLIGHT, 0, skillLevel) + 720;
|
|
local power_Chr = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYLIGHT, -1, 1, 1.0);
|
|
local power_Pty = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYLIGHT, -1, 5, 1.0);
|
|
local damageRate = sq_GetLevelData(obj, SKILL_BYKK_HOLYLIGHT, 2, skillLevel);
|
|
local increaseRate = sq_GetIntData(obj, SKILL_BYKK_HOLYLIGHT, 4);
|
|
|
|
local skillLevel2 = sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFPROTECTION);
|
|
local hpMax = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 6, skillLevel2) * (100 + increaseRate) / 100;
|
|
local mpMax = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 7, skillLevel2) * (100 + increaseRate) / 100;
|
|
local phDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 2, skillLevel2) * (100 + increaseRate) / 100;
|
|
local mgDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 3, skillLevel2) * (100 + increaseRate) / 100;
|
|
local phlDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 4, skillLevel2) * (100 + increaseRate) / 100;
|
|
local mglDefense = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFPROTECTION, 5, skillLevel2) * (100 + increaseRate) / 100;
|
|
|
|
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_CHARACTER) && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) {
|
|
local activeObj = sq_GetCNRDObjectToActiveObject(object);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_HOLYLIGHT)) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_HOLYLIGHT);
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_HOLYLIGHT, true);
|
|
if(buffTime > 0) AddAppendage.sq_SetValidTime(buffTime);
|
|
AddAppendage.setBuffIconImage(44);
|
|
AddAppendage.setEnableIsBuff(true);
|
|
AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_HOLYLIGHT, skillLevel);
|
|
CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, obj, true);
|
|
AddAppendage.getVar("custom").setInt(10, damageRate);
|
|
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFPROTECTION)){
|
|
local ptcAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, APDPATH_BLESSOFPROTECTION);
|
|
local change_appendage = ptcAppendage.sq_getChangeStatus("AT_Blessofprotection");
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_HP_MAX, false, (hpMax).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MP_MAX, false, (mpMax).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, false, (phDefense).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, false, (mgDefense).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_DEFENSE, false, (phlDefense).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_DEFENSE, false, (mglDefense).tofloat());
|
|
}
|
|
}
|
|
|
|
local group = sq_GetGroup(activeObj);
|
|
local uniqueId = sq_GetUniqueId(activeObj);
|
|
local power = power_Pty;
|
|
if(isSameObject(obj, activeObj)) power = power_Chr;
|
|
// if(obj.isMyControlObject())
|
|
createSkillPassive_ATPriest_bykk(obj,activeObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,sq_GetHeightObject(activeObj) / 2,obj.getDirection(),1,SKILL_BYKK_HOLYLIGHT,0,power,buffTime,group,uniqueId,0,0,0,0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_EDIFICATION) > 0 && !sq_GetSkill(obj, SKILL_BYKK_EDIFICATION).isInCoolTime()){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_EDIFICATION,true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_EDIFICATION);
|
|
if(b_useskill != -1){
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_EDIFICATION);
|
|
obj.startSkillCoolTime(SKILL_BYKK_HOLYLIGHT, skillLevel, -1);
|
|
local buffTime = sq_GetLevelData(obj, SKILL_BYKK_EDIFICATION, 0, skillLevel);
|
|
local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_EDIFICATION, 1, skillLevel);
|
|
|
|
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_CHARACTER) && !obj.isEnemy(object)) {
|
|
local activeObj = sq_GetCNRDObjectToActiveObject(object);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_EDIFICATION)) CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_EDIFICATION);
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_EDIFICATION, true);
|
|
AddAppendage.sq_SetValidTime(buffTime);
|
|
AddAppendage.setBuffIconImage(128);
|
|
AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_EDIFICATION, skillLevel);
|
|
CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, obj, true);
|
|
AddAppendage.getVar("custom").setInt(10, moveSpeed);
|
|
|
|
local change_appendage = AddAppendage.sq_getChangeStatus("AT_Edification");
|
|
if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Edification",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed).tofloat());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL) > 0 && !sq_GetSkill(obj, SKILL_BYKK_CRUXOFSHAPIEL).isInCoolTime()){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_CRUXOFSHAPIEL,true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_CRUXOFSHAPIEL);
|
|
if(b_useskill != -1){
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL);
|
|
obj.startSkillCoolTime(SKILL_BYKK_CRUXOFSHAPIEL, skillLevel, -1);
|
|
|
|
obj.getVar("cruxofshapiel_obj").clear_obj_vector();
|
|
obj.getVar("cruxofshapiel_bool").setBool(0, false);
|
|
|
|
local power_fall = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CRUXOFSHAPIEL, -1, 0, 1.0);
|
|
local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CRUXOFSHAPIEL, -1, 1, 1.0);
|
|
local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CRUXOFSHAPIEL, -1, 2, 1.0);
|
|
local hitTime = sq_GetIntData(obj, SKILL_BYKK_CRUXOFSHAPIEL, 0);
|
|
// if(obj.isMyControlObject())
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,200,0,0,obj.getDirection(),1,SKILL_BYKK_CRUXOFSHAPIEL,1,power_fall,power,power_exp,hitTime,0,0,0,0);
|
|
local buffTime = hitTime * 21 + 2080;
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFSHAPIEL)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_CRUXOFSHAPIEL);
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_CRUXOFSHAPIEL, true);
|
|
AddAppendage.sq_SetValidTime(buffTime);
|
|
AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_CRUXOFSHAPIEL, sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL));
|
|
CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true);
|
|
}
|
|
}
|
|
|
|
if(obj.getVar("cruxofshapiel_bool").getBool(0)){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_CRUXOFSHAPIEL,true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_CRUXOFSHAPIEL);
|
|
if(b_useskill != -1){
|
|
obj.getVar("cruxofshapiel_bool").setBool(0, false);
|
|
local size = obj.getVar("cruxofshapiel_obj").get_obj_vector_size();
|
|
if(size > 0){
|
|
for(local i = 0; i < size; i++){
|
|
local aObj = obj.getVar("cruxofshapiel_obj").get_obj_vector(i);
|
|
if(aObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(aObj);
|
|
if(colObj.getVar("subtype").getInt(0) == 1) colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");
|
|
else colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Ariaofregeneration(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 103:
|
|
//`StartEffect` 61 0 60
|
|
if(sq_GetIntData(obj, SKILL_BYKK_ARIAOFREGENERATION, 13) > 0) break;
|
|
local range = sq_GetIntData(obj, SKILL_BYKK_ARIAOFREGENERATION, 5);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL) > 0) range = range * (1000 + sq_GetLevelData(obj, SKILL_BYKK_BLESSOFRAPHAEL, 7, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL))) / 1000;
|
|
local sizeRate = range * 100 / 275;
|
|
// if(obj.isMyControlObject())
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFREGENERATION,1,sizeRate,0,0,0,0,0,0,0);
|
|
// if(obj.isMyControlObject())
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_ARIAOFREGENERATION,2,sizeRate,0,0,0,0,0,0,0);
|
|
break;
|
|
case 106:
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atariaofregeneration/ora/orastartfront_1.ani", 0, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atariaofregeneration/ora/orastartback_backlight.ani", 0, -1, 0);
|
|
break;
|
|
case 300:
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atariaofregeneration/ora/oraendfront_1.ani", 0, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atariaofregeneration/ora/oraendback_1.ani", 0, -1, 0);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Ariaofregeneration(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(2);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_ARIAOFREGENERATION, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 2:
|
|
local xpos = sq_GetXPos(obj), ypos = sq_GetYPos(obj);
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos,ypos - 1)) sq_setCurrentAxisPos(obj, 1, ypos - 2);
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos - 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 2);
|
|
return;
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos + 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 2);
|
|
return;
|
|
}
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos,ypos + 1)) sq_setCurrentAxisPos(obj, 1, ypos + 2);
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos - 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 2);
|
|
return;
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos + 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 2);
|
|
return;
|
|
}
|
|
}
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos - 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos - 2);
|
|
return;
|
|
}
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)){
|
|
if(obj.isMovablePos(xpos + 2,ypos)) sq_setCurrentAxisPos(obj, 0, xpos + 2);
|
|
return;
|
|
}
|
|
break;
|
|
case 3:
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_ARIAOFREGENERATION);
|
|
local HP_healRate = sq_GetLevelData(obj, SKILL_BYKK_ARIAOFREGENERATION, 0, skillLevel);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFSHAPIEL)) HP_healRate = HP_healRate + sq_GetLevelData(obj, SKILL_BYKK_CRUXOFSHAPIEL, 4, sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL)) / 10;
|
|
local decreaseMax = sq_GetIntData(obj, SKILL_BYKK_ARIAOFREGENERATION, 0) / 1000;
|
|
local range = sq_GetIntData(obj, SKILL_BYKK_ARIAOFREGENERATION, 5);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL) > 0) range = range * (1000 + sq_GetLevelData(obj, SKILL_BYKK_BLESSOFRAPHAEL, 7, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL))) / 1000;
|
|
|
|
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_CHARACTER) && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) {
|
|
local activeObj = sq_GetCNRDObjectToActiveObject(object);
|
|
local hp = activeObj.getHp() * HP_healRate / 100;
|
|
local appendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_ARIAOFREGENERATIONBUFF, true);
|
|
local change_appendage = appendage.sq_GetCNChangeHp("changehp");
|
|
if (!change_appendage) change_appendage = appendage.sq_AddCNChangeHp("changehp", activeObj, obj, 0, hp.tofloat(), 800);
|
|
appendage.sq_SetValidTime(500);
|
|
local activeStatus = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 15, 16];
|
|
local count = 0;
|
|
for(local ui = 0; ui < activeStatus.len(); ui++){
|
|
if (sq_IsValidActiveStatus(activeObj, activeStatus[ui])){
|
|
if(count + 1 < decreaseMax){
|
|
sq_ReleaseActiveStatus(activeObj, activeStatus[ui]);
|
|
count = count + 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Ariaofregeneration(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
if(new_state != STATE_BYKK_ARIAOFREGENERATION){
|
|
local floorObj = obj.getVar("ARIAOFREGENERATION_FLOOR").get_obj_vector(0);
|
|
local effectObj = obj.getVar("ARIAOFREGENERATION_EFFECT").get_obj_vector(0);
|
|
local musicObj = obj.getVar("ARIAOFREGENERATION_MUSIC").get_obj_vector(0);
|
|
if(floorObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(floorObj);
|
|
colObj.setValid(false);
|
|
}
|
|
if(effectObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(effectObj);
|
|
colObj.setValid(false);
|
|
}
|
|
if(musicObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(musicObj);
|
|
colObj.setValid(false);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//神光十字
|
|
function checkExecutableSkill_Grandcrosscrash(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_GRANDCROSSCRASH);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_GRANDCROSSCRASH, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Grandcrosscrash(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Grandcrosscrash(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_ATGRANDCROSSCRASH_READY_BODY);
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATGRANDCROSSCRASH_SMASH_BODY);
|
|
local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GRANDCROSSCRASH, -1, 2, 1.0);
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_GRANDCROSSCRASHATTACK));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power);
|
|
obj.sq_PlaySound("PW_GRANDCROSS_02");
|
|
obj.sq_PlaySound("HOLYSANCTUARY_EXP");
|
|
sq_SetMyShake(obj, 15, 300);
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
if(subState == 1){
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 5000.0 / currentAni.getDelaySum(0, 0).tofloat();
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atgrandcrosscrash/screen/atgrandcrosscrash_screen.ani", 302, 10, 0);
|
|
local pAni = pooledObj.getCurrentAnimation();
|
|
pAni.setSpeedRate(speedRate);
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_Grandcrosscrash(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_GRANDCROSSCRASH, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Grandcrosscrash(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Grandcrosscrash(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 1:
|
|
//75 0 5
|
|
local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_GRANDCROSSCRASH, -1, 0, 1.0);
|
|
// if(obj.isMyControlObject())
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,75,0,5,obj.getDirection(),1,SKILL_BYKK_GRANDCROSSCRASH,1,power_exp,0,0,0,0,0,0,0);
|
|
break;
|
|
case 2:
|
|
local lifeTime = sq_GetIntData(obj, SKILL_BYKK_GRANDCROSSCRASH, 1);
|
|
local addTime = sq_GetLevelData(obj, SKILL_BYKK_GRANDCROSSCRASH, 1, sq_GetSkillLevel(obj, SKILL_BYKK_GRANDCROSSCRASH));
|
|
// if(obj.isMyControlObject())
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,74,0,5,obj.getDirection(),1,SKILL_BYKK_GRANDCROSSCRASH,2,lifeTime,addTime,0,0,0,0,0,0);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Grandcrosscrash(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Grandcrosscrash(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
|
|
//圣光天启
|
|
function checkExecutableSkill_Cruxofvictoria(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CRUXOFVICTORIA);
|
|
if (isUse){
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFVICTORIA) >= 6) sq_SetCustomDamageType(obj, true, 2);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_CRUXOFVICTORIA, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Cruxofvictoria(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Cruxofvictoria(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_VICTORY1);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcruxofvictoria/ready/covreadyeff_skylight.ani", 0, 1, 0);
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_VICTORY2);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcruxofvictoria/fly/covflyeff_01.ani", 0, 1, 0);
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcruxofvictoria/fly/covflycross_01.ani", 0, -1, -50);
|
|
obj.getVar("Cruxofvictoria_Eff").clear_obj_vector();
|
|
obj.getVar("Cruxofvictoria_Eff").push_obj_vector(pooledObj);
|
|
break;
|
|
case 2:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_VICTORY3);
|
|
local pooledObj = obj.getVar("Cruxofvictoria_Eff").get_obj_vector(0);
|
|
if(pooledObj) pooledObj.setValid(false);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atcruxofvictoria/crosscatch/covsetupeff_feather_00.ani", 0, 1, 0);
|
|
sq_flashScreen(obj,100,500,100,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK);
|
|
break;
|
|
case 3:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_VICTORY_ITEM4);
|
|
sq_SetMyShake(obj, 5, 320);
|
|
break;
|
|
case 4:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_COVBUFFFINISHBODY_BODY);
|
|
sq_SetMyShake(obj, 5, 320);
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
if(subState == 1){
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local delay = currentAni.getDelaySum(false);
|
|
obj.setTimeEvent(0, delay / 50, 40, true);
|
|
}
|
|
else if(subState == 3){
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local delay = currentAni.getDelaySum(0, 1);
|
|
// obj.getVar("Cruxofvictoria_move").setInt(10, sq_GetZPos(obj));
|
|
obj.setTimeEvent(1, delay / 10, 10, true);
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_Cruxofvictoria(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
case 1:
|
|
case 2:
|
|
case 3:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(subState + 1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_CRUXOFVICTORIA, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 4:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Cruxofvictoria(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Cruxofvictoria(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 101:
|
|
obj.sq_PlaySound("R_PW_CRUXVICTORIA");
|
|
obj.sq_PlaySound("CRUXVICTORIA_CAST");
|
|
break;
|
|
case 104:
|
|
//`CreateBuffChaser` 40 0 150
|
|
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_CHARACTER) && !obj.isEnemy(object)) {
|
|
local sqrChr = sq_GetCNRDObjectToSQRCharacter(object);
|
|
if(sq_getJob(sqrChr) == ENUM_CHARACTERJOB_PRIEST && sq_getGrowType(sqrChr) == GROW_TYPE_CRUSADER) continue;
|
|
local activeObj = sq_GetCNRDObjectToActiveObject(object);
|
|
local group = sq_GetGroup(activeObj);
|
|
local uniqueId = sq_GetUniqueId(activeObj);
|
|
// if(obj.isMyControlObject())
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,10,0,50,obj.getDirection(),1,SKILL_BYKK_CRUXOFVICTORIA,2,group,uniqueId,0,0,0,0,0,0);
|
|
}
|
|
}
|
|
|
|
obj.setTimeEvent(2, 1100, 1, false);
|
|
break;
|
|
case 404:
|
|
sq_SetMyShake(obj, 2, 2400);
|
|
local bonusRate = 1.0;
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFVICTORIA);
|
|
if(skillLevel >= 3) bonusRate = 1.1;
|
|
local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CRUXOFVICTORIA, -1, 0, bonusRate);
|
|
local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CRUXOFVICTORIA, -1, 1, bonusRate);
|
|
local hitTime = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFVICTORIA, 12, skillLevel);
|
|
// if(obj.isMyControlObject())
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,10,0,-sq_GetZPos(obj),obj.getDirection(),1,SKILL_BYKK_CRUXOFVICTORIA,1,power,power_exp,hitTime,0,0,0,0,0);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 427:
|
|
//`AddFlash` 62 0 131
|
|
break;
|
|
case 439:
|
|
sq_SetMyShake(obj, 5, 400);
|
|
//`FinishExplosion` 69 0 47
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Cruxofvictoria(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
local v = sq_GetUniformVelocity(0, 150, timeEventCount, 40);
|
|
sq_setCurrentAxisPos(obj, 2, v);
|
|
break;
|
|
case 1:
|
|
local v = sq_GetUniformVelocity(150, 0, timeEventCount, 4);
|
|
sq_setCurrentAxisPos(obj, 2, v);
|
|
break;
|
|
case 2:
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFVICTORIA);
|
|
local buffTime = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFVICTORIA, 11, skillLevel);
|
|
if(skillLevel >= 9) buffTime = buffTime + 3000;
|
|
local phAttack = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFVICTORIA, 4, skillLevel);
|
|
local mgAttack = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFVICTORIA, 5, skillLevel);
|
|
local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFVICTORIA, 2, skillLevel);
|
|
local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFVICTORIA, 3, skillLevel);
|
|
local phDefense = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFVICTORIA, 6, skillLevel);
|
|
local mgDefense = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFVICTORIA, 7, skillLevel);
|
|
|
|
local now_mgAttack = sq_GetMagicalAttack();//1000;//
|
|
now_mgAttack = now_mgAttack * (100 + sq_GetIntData(obj, 169, 2)) / 100;
|
|
// print("now_mgAttack = "+now_mgAttack);
|
|
local addRate = now_mgAttack.tofloat() / sq_GetIntData(obj, SKILL_BYKK_CRUXOFVICTORIA, 1).tofloat();
|
|
// print("addRate = "+addRate);
|
|
if(addRate > 1){
|
|
phAttack = (phAttack.tofloat() * (1.0 + addRate)).tointeger();
|
|
mgAttack = (mgAttack.tofloat() * (1.0 + addRate)).tointeger();
|
|
}
|
|
|
|
sq_BinaryStartWrite();
|
|
sq_BinaryWriteDword(1);
|
|
sq_BinaryWriteDword(SKILL_BYKK_CRUXOFVICTORIA);
|
|
sq_BinaryWriteDword(3);
|
|
sq_BinaryWriteDword(skillLevel);
|
|
sq_BinaryWriteDword(buffTime);
|
|
sq_BinaryWriteDword(phAttack.tointeger());
|
|
sq_BinaryWriteDword(mgAttack.tointeger());
|
|
sq_BinaryWriteDword(attackSpeed);
|
|
sq_BinaryWriteDword(moveSpeed);
|
|
sq_BinaryWriteDword(phDefense);
|
|
sq_BinaryWriteDword(mgDefense);
|
|
sq_SendCreatePassiveObjectPacket(obj, PASSIVEOBJ_BYKK_ATPRIEST, 0, 0, 0, 0, obj.getDirection());
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Cruxofvictoria(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
if(new_state != STATE_BYKK_CRUXOFVICTORIA){
|
|
sq_SetCustomDamageType(obj, true, 0);
|
|
}
|
|
}
|
|
|
|
|
|
//忏悔重击
|
|
function checkExecutableSkill_Repentencesmash(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isStone = sq_GetIntData(obj, SKILL_BYKK_REPENTENCESMASH, 10);
|
|
if(isStone > 0 && isStone != 5000){
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_REPENTENCESMASH);
|
|
if(loadSlot){
|
|
local getNumber = loadSlot.getRemainLoadNumber()
|
|
if(getNumber > 0){
|
|
loadSlot.decreaseLoadCount(1);
|
|
loadSlot.setStartCool();
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_REPENTENCESMASH, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
else return false;
|
|
}
|
|
else return false;
|
|
}
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_REPENTENCESMASH);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_REPENTENCESMASH, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Repentencesmash(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Repentencesmash(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_ATREPENTENCESMASH_READY_BODY);
|
|
obj.sq_PlaySound("PW_REPENTENCE_01");
|
|
obj.sq_PlaySound("THUNDERHAMMER");
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATREPENTENCESMASH_SMASH01_BODY);
|
|
local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_REPENTENCESMASH, -1, 0, 1.0);
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_REPENTENCESMASHATK1));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power);
|
|
break;
|
|
case 2:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATREPENTENCESMASH_SMASH02_BODY);
|
|
local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_REPENTENCESMASH, -1, 1, 1.0);
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_REPENTENCESMASHATK2));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), power);
|
|
obj.sq_PlaySound("PW_REPENTENCE_02");
|
|
obj.sq_PlaySound("IMPACT_SMASH");
|
|
break;
|
|
case 3:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_ATREPENTENCESMASH_END_BODY);
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
if(subState == 0){
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atrepentencesmash/atrepentencesmash_ready_front.ani", 0, 0, 0);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 10000.0 / currentAni.getDelaySum(0, 0).tofloat();
|
|
local pAni = pooledObj.getCurrentAnimation();
|
|
pAni.setSpeedRate(speedRate);
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_Repentencesmash(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
case 1:
|
|
case 2:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(subState + 1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_REPENTENCESMASH, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 3:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Repentencesmash(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Repentencesmash(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 101: sq_SetMyShake(obj, 12, 100); break;
|
|
case 1:
|
|
sq_flashScreen(obj,0,80,0,89, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
sq_SetMyShake(obj, 15, 300);
|
|
break;
|
|
case 2:
|
|
sq_flashScreen(obj,0,200,200,127, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Repentencesmash(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Repentencesmash(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onAttack_Repentencesmash(obj, damager, boundingBox, isStuck)
|
|
{
|
|
if(!obj) return;
|
|
if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 1:
|
|
sq_AddDrawOnlyAniFromParent(damager, "character/swordman/effect/animation/1_atpriest_bykk/atrepentencesmash/atrepentencesmash_hit_normal.ani", 0, 0, sq_GetCenterZPos(boundingBox));
|
|
break;
|
|
case 2:
|
|
sq_AddDrawOnlyAniFromParent(damager, "character/swordman/effect/animation/1_atpriest_bykk/atrepentencesmash/atrepentencesmash_hit_finish.ani", 0, 0, sq_GetCenterZPos(boundingBox) - 75);
|
|
break;
|
|
}
|
|
if(sq_IsFixture(damager)) return;
|
|
if(sq_GetIntData(obj, SKILL_BYKK_REPENTENCESMASH, 10) > 0){
|
|
//APDPATH_REPENTENCESMASH
|
|
if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, APDPATH_REPENTENCESMASH)){
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, APDPATH_REPENTENCESMASH, true);
|
|
AddAppendage.sq_SetValidTime(500);
|
|
sq_MoveToAppendageForce(damager, obj, obj, 200, 0, damager.getZPos(), 300, true, AddAppendage);
|
|
}
|
|
}
|
|
}
|
|
|
|
//圣佑之阵
|
|
function checkExecutableSkill_Protectionofuriel(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PROTECTIONOFURIEL);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PROTECTIONOFURIEL, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Protectionofuriel(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Protectionofuriel(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_PROTECTIONOFURIEL_CAST_BODY);
|
|
obj.sq_PlaySound("R_PW_URIEL");
|
|
obj.sq_PlaySound("URIEL_CAST");
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
}
|
|
|
|
function onEndCurrentAni_Protectionofuriel(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Protectionofuriel(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Protectionofuriel(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 101:
|
|
//`CreateProtection` 0 0 0
|
|
local lifeTime = sq_GetIntData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 1);
|
|
local range = sq_GetIntData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 4);
|
|
local hitTime = sq_GetIntData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 2);
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_PROTECTIONOFURIEL);
|
|
local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 2, skillLevel);
|
|
local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 3, skillLevel);
|
|
local castSpeed = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 4, skillLevel);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFSHAPIEL)){
|
|
local addRate = sq_GetLevelData(obj, SKILL_BYKK_CRUXOFSHAPIEL, 5, sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL));
|
|
attackSpeed = attackSpeed + addRate;
|
|
moveSpeed = moveSpeed + addRate;
|
|
castSpeed = castSpeed + addRate;
|
|
}
|
|
local damageRate = sq_GetLevelData(obj, SKILL_BYKK_PROTECTIONOFURIEL, 5, skillLevel) / 10;
|
|
local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PROTECTIONOFURIEL, -1, 0, 1.0);
|
|
// if(obj.isMyControlObject())
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_PROTECTIONOFURIEL,1,power,lifeTime,hitTime,range,attackSpeed,moveSpeed,castSpeed,damageRate);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Protectionofuriel(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Protectionofuriel(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function getImmuneTypeDamageRate_appendage_at_protectionofuriel(appendage, damageRate, attacker)
|
|
{
|
|
local new_damageRate = damageRate - appendage.getVar("custom").getInt(10);
|
|
return new_damageRate;
|
|
}
|
|
|
|
function onEnd_appendage_at_protectionofuriel(appendage)
|
|
{
|
|
local parentObj = appendage.getParent();
|
|
local sqrChr = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
|
if(sqrChr && sqrChr.getState() != STATE_DIE){
|
|
sq_SendMessage(sqrChr, 0, 0, 0);
|
|
}
|
|
}
|
|
|
|
//圣洁之翼
|
|
function checkExecutableSkill_Blessofangel(obj)
|
|
{
|
|
if (!obj) return false;
|
|
if(obj.getVar("Blessofangel_Bool").getBool(0)){
|
|
obj.getVar("Blessofangel_Bool").setBool(0, false);
|
|
local size = obj.getVar("Blessofangel_sqr").get_obj_vector_size();//
|
|
if(size > 0){
|
|
obj.sq_PlaySound("URIEL_END");
|
|
local power_Chr = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLESSOFANGEL, -1, 1, 1.0);
|
|
local power_Pty = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLESSOFANGEL, -1, 5, 1.0);
|
|
local sizeRate = 100;
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_BLESSOFANGEL);
|
|
if(loadSlot){
|
|
local count = loadSlot.getRemainLoadNumber();
|
|
if(count > 1) sizeRate = sizeRate * (100 + sq_GetIntData(obj, SKILL_BYKK_BLESSOFANGEL, 0) * count) / 100;
|
|
obj.sq_RemoveSkillLoad(SKILL_BYKK_BLESSOFANGEL);
|
|
}
|
|
for(local i = 0; i < size; i++){
|
|
local targetObj = obj.getVar("Blessofangel_sqr").get_obj_vector(i);
|
|
if(!targetObj || targetObj.getState() == STATE_DIE) continue;
|
|
local activeObj = sq_GetCNRDObjectToActiveObject(targetObj);
|
|
CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_BLESSOFANGEL);
|
|
local power = power_Pty;
|
|
if(isSameObject(obj, activeObj)) power = power_Chr;
|
|
// if(obj.isMyControlObject())
|
|
createSkillPassive_ATPriest_bykk(obj,activeObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),1,SKILL_BYKK_BLESSOFANGEL,2,power,sizeRate,0,0,0,0,0,0);
|
|
}
|
|
print("testsize = "+obj.getVar("Blessofangel_eff").get_obj_vector_size());
|
|
local size2 = obj.getVar("Blessofangel_eff").get_obj_vector_size();
|
|
if(size2 > 0){
|
|
for(local i = 0; i < size2; i++){
|
|
local effect = obj.getVar("Blessofangel_eff").get_obj_vector(i);
|
|
if(effect){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(effect);
|
|
colObj.setValid(false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
local state = obj.getState();
|
|
if(state == 0 || state == 14){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(state, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
}
|
|
return false;
|
|
}
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BLESSOFANGEL);
|
|
if (isUse){
|
|
obj.getVar("Blessofangel_sqr").clear_obj_vector();
|
|
obj.getVar("Blessofangel_eff").clear_obj_vector();
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_BLESSOFANGEL, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Blessofangel(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Blessofangel(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_BLESSOFANGEL_PHASE1_BODY);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
obj.sq_PlaySound("R_PW_URIEL");
|
|
obj.sq_PlaySound("URIEL_CAST");
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atblessofangel/blessofangel_phase1bottom_feather02.ani", 0, -1 ,0);
|
|
local pooledObj2 = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atblessofangel/blessofangel_phase1top_sparkle02.ani", 0, 1 ,0);
|
|
sq_moveWithParent(obj, pooledObj);
|
|
sq_moveWithParent(obj, pooledObj2);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local delay = currentAni.getDelaySum(0, 0);
|
|
local speedRate = 15000.0 / delay.tofloat();
|
|
local pAni = pooledObj.getCurrentAnimation();
|
|
local pAni2 = pooledObj2.getCurrentAnimation();
|
|
pAni.setSpeedRate(speedRate);
|
|
pAni2.setSpeedRate(speedRate);
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
function onEndCurrentAni_Blessofangel(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Blessofangel(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Blessofangel(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 1:
|
|
local range = sq_GetIntData(obj, SKILL_BYKK_BLESSOFANGEL, 1);
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFANGEL);
|
|
local buffTime = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 0, skillLevel);
|
|
obj.sq_AddSkillLoad(SKILL_BYKK_BLESSOFANGEL, 111, 1, buffTime);
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_BLESSOFANGEL);
|
|
if(loadSlot) loadSlot.setStartCool();
|
|
local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 2, skillLevel);
|
|
local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 3, skillLevel);
|
|
local castSpeed = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFANGEL, 4, skillLevel);
|
|
// local power_Chr = obj.sq_GetPowerWithPassive(SKILL_BYKK_BLESSOFANGEL, -1, 1, -1, 1.0);
|
|
// local power_Pty = obj.sq_GetPowerWithPassive(SKILL_BYKK_BLESSOFANGEL, -1, 5, -1, 1.0);
|
|
print("size = "+obj.getVar("Blessofangel_eff").get_obj_vector_size());
|
|
local size2 = obj.getVar("Blessofangel_eff").get_obj_vector_size();
|
|
if(size2 > 0){
|
|
for(local i = 0; i < size2; i++){
|
|
local effect = obj.getVar("Blessofangel_eff").get_obj_vector(i);
|
|
if(effect){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(effect);
|
|
colObj.setValid(false);
|
|
}
|
|
}
|
|
}
|
|
|
|
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_CHARACTER) && !obj.isEnemy(object) && sq_Abs(sq_GetXPos(object) - sq_GetXPos(obj)) <= range && sq_Abs(sq_GetYPos(object) - sq_GetYPos(obj)) <= range / 2) {
|
|
local activeObj = sq_GetCNRDObjectToActiveObject(object);
|
|
if(!obj.getVar("Blessofangel_sqr").is_obj_vector(activeObj)) obj.getVar("Blessofangel_sqr").push_obj_vector(activeObj);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFANGEL)){
|
|
CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_BLESSOFANGEL);
|
|
}
|
|
// local power = power_Pty;
|
|
// if(isSameObject(obj, activeObj)) power = power_Chr;
|
|
local group = sq_GetGroup(activeObj);
|
|
local uniqueId = sq_GetUniqueId(activeObj);
|
|
// if(obj.isMyControlObject())
|
|
createSkillPassive_ATPriest_bykk(obj,activeObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,sq_GetHeightObject(activeObj) + 30,obj.getDirection(),1,SKILL_BYKK_BLESSOFANGEL,1,0,buffTime,group,uniqueId,0,0,0,0);
|
|
if(obj.getVar("Blessofangel_Bool").getBool(0) == false) obj.getVar("Blessofangel_Bool").setBool(0, true);
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_BLESSOFANGEL, true);
|
|
AddAppendage.setBuffIconImage(131);
|
|
AddAppendage.sq_SetValidTime(buffTime);
|
|
AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_BLESSOFANGEL, skillLevel);
|
|
CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, obj, true);
|
|
AddAppendage.getVar("tar").clear_obj_vector();
|
|
AddAppendage.getVar("tar").push_obj_vector(obj);
|
|
|
|
local change_appendage = AddAppendage.sq_getChangeStatus("AT_Blessofangel");
|
|
if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Blessofangel",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_CAST_SPEED, false, (castSpeed).tofloat());
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Blessofangel(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
// switch(timeEventIndex){
|
|
// case 0:
|
|
// break;
|
|
// }
|
|
}
|
|
|
|
function onEndState_Blessofangel(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onAttackParent_appendage_at_blessofangel(appendage, realAttacker, damager, boundingBox, isStuck)
|
|
{
|
|
if(!appendage) return;
|
|
if(isStuck) return;
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj || parentObj.getState() == STATE_DIE){
|
|
appendage.setValid(false);
|
|
return;
|
|
}
|
|
local targetObj = appendage.getVar("tar").get_obj_vector(0);
|
|
if(!targetObj || targetObj.getState() == STATE_DIE){
|
|
appendage.setValid(false);
|
|
return;
|
|
}
|
|
if(!isSameObject(targetObj, parentObj)) return;
|
|
if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return;
|
|
if(parentObj.getState() == STATE_ATTACK) return;
|
|
local sqrChr = sq_GetCNRDObjectToSQRCharacter(targetObj);
|
|
local loadSlot = sqrChr.sq_GetSkillLoad(SKILL_BYKK_BLESSOFANGEL);
|
|
local maxCount = sq_GetIntData(sqrChr, SKILL_BYKK_BLESSOFANGEL, 3);
|
|
if(loadSlot){
|
|
local count = loadSlot.getRemainLoadNumber();
|
|
if(count + 1 <= maxCount) loadSlot.increaseLoadCount(1);
|
|
}
|
|
}
|
|
|
|
function onEnd_appendage_at_blessofangel(appendage)
|
|
{
|
|
if(!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj || parentObj.getState() == STATE_DIE){
|
|
appendage.setValid(false);
|
|
return;
|
|
}
|
|
local targetObj = appendage.getVar("tar").get_obj_vector(0);
|
|
if(!targetObj || targetObj.getState() == STATE_DIE){
|
|
appendage.setValid(false);
|
|
return;
|
|
}
|
|
if(!isSameObject(targetObj, parentObj)) return;
|
|
local sqrChr = sq_GetCNRDObjectToSQRCharacter(targetObj);
|
|
local loadSlot = sqrChr.sq_GetSkillLoad(SKILL_BYKK_BLESSOFANGEL);
|
|
if(loadSlot) sqrChr.sq_RemoveSkillLoad(SKILL_BYKK_BLESSOFANGEL);
|
|
sqrChr.getVar("Blessofangel_Bool").setBool(0, false);
|
|
}
|