2079 lines
89 KiB
C
2079 lines
89 KiB
C
|
|
|
|
|
|
//无双击
|
|
function checkExecutableSkill_Atomicsmash(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_ATOMICSMASH);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_ATOMICSMASH, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Atomicsmash(obj)
|
|
{
|
|
if (!obj) return false;
|
|
if(obj.getState() == STATE_BYKK_GALESMASH){
|
|
if(obj.getVar("skillCancel").getBool(0)) return true;
|
|
else return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Atomicsmash(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_SetCurrentAnimation(PRANI_BYKK_ATOMICSMASHREADY);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
obj.getVar("atomicsmashTar").clear_obj_vector();
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(PRANI_BYKK_ATOMICSMASH);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/atomicsmash/effect.ani"), 0, 0);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){
|
|
local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
|
|
local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/atomicsmash_effecth2.ani"), 0, 0);
|
|
}
|
|
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/atomicsmash_effecth2.ani"), 0, 0);
|
|
}
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ATOMICSMASH, -1, 0, 1.0);
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_ATOMICSMASHSMASH));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
setChakraAttackInfo(obj);
|
|
break;
|
|
case 2:
|
|
obj.sq_SetCurrentAnimation(PRANI_BYKK_ATOMICSMASHFINISH);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/atomicsmash/effectfinal.ani"), 0, 0);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){
|
|
local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
|
|
local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/light/atomicsmash_effectfinalc.ani"), 0, 0);
|
|
}
|
|
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/atomicsmash/lv75chakraofgod/chakragodslash_dodge.ani"), 0, 0);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/chakraofgod/fire/atomicsmash_effectfinalc.ani"), 0, 0);
|
|
}
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_Atomicsmash(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(subState + 1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_ATOMICSMASH, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 2:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Atomicsmash(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_Atomicsmash(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 1:
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 1:
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local delay = currentAni.getDelaySum(1,1);
|
|
local size = obj.getVar("atomicsmashTar").get_obj_vector_size();
|
|
if(size > 0){
|
|
for(local i = 0; i < size; i++){
|
|
local targetObj = obj.getVar("atomicsmashTar").get_obj_vector(i);
|
|
if(targetObj && targetObj.getState() != STATE_DIE){
|
|
local masterAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/priest/3exorcist_bykk/ap_atomicsmash_hold.nut");
|
|
sq_MoveToAppendageForce(targetObj, obj, obj, -50, 0, 180, delay, true, masterAppendage);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 2:
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 8000 / currentAni.getDelaySum(0, 0);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ATOMICSMASH, -1, 1, 1.0);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_ATOMICSMASH, 1);
|
|
local apdPath = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)){
|
|
sizeRate = sizeRate * (100 + sq_GetIntData(obj, SKILL_BYKK_ATOMICSMASH, 3) / 10) / 100;
|
|
local bonusRate = 1.0 + sq_GetIntData(obj, SKILL_BYKK_ATOMICSMASH, 2).tofloat() / 1000.0;
|
|
totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ATOMICSMASH, -1, 1, bonusRate);
|
|
}
|
|
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643022,0,0,0,sq_GetDirection(obj),totalDamage,sizeRate,speedRate,0,0,0,0,0);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD) > 0){
|
|
local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
|
|
local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
|
|
local bonusRate = sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 0, sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD));
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ATOMICSMASH, -1, 1, 1.0);
|
|
totalDamage = totalDamage * bonusRate / 100;
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){
|
|
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643001,160,1,50,sq_GetDirection(obj),totalDamage,1,0,1,0,0,0,0);
|
|
}
|
|
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){
|
|
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643001,160,1,50,sq_GetDirection(obj),totalDamage,0,0,1,0,0,0,0);
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/atomicsmash/lv20chakraofpassion/shockwave_00.ani", 150, 0, 0);
|
|
sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM);
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/atomicsmash/lv20chakraofpassion/atomicsmashpassionfloor_00.ani", 150, 0, 0);
|
|
sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/atomicsmash/lv20chakraofpassion/passiondust_00.ani", 150, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/atomicsmash/lv20chakraofpassion/passionstone.ani", 150, 1, 0);
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/atomicsmash/lv75chakraofgod/atomicsmashgodfloor_00.ani", 150, 0, 0);
|
|
sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/atomicsmash/lv75chakraofgod/atomicsmashfloorchakra_00.ani", 150, 1, 0);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT) > 0 && sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON) > 0){
|
|
setStageofhermitAppendage(obj);
|
|
}
|
|
}
|
|
}
|
|
sq_SetMyShake(obj, 12, 300);
|
|
break;
|
|
}
|
|
break;
|
|
case 2:
|
|
case 3:
|
|
case 4:
|
|
case 5:
|
|
local frameIndex = [3, 5, 7, 11];
|
|
local offSet = [[-140,0],[0,15],[130,0],[130,0]];
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local delay = currentAni.getDelaySum(frameIndex[flagIndex - 2],frameIndex[flagIndex - 2]);
|
|
local size = obj.getVar("atomicsmashTar").get_obj_vector_size();
|
|
if(size > 0){
|
|
for(local i = 0; i < size; i++){
|
|
local targetObj = obj.getVar("atomicsmashTar").get_obj_vector(i);
|
|
if(targetObj && targetObj.getState() != STATE_DIE){
|
|
local masterAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/priest/3exorcist_bykk/ap_atomicsmash_hold.nut");
|
|
sq_MoveToAppendageForce(targetObj, obj, obj, offSet[flagIndex - 2][0], offSet[flagIndex - 2][1], flagIndex==5?150:0, delay, true, masterAppendage);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 6:
|
|
local size = obj.getVar("atomicsmashTar").get_obj_vector_size();
|
|
if(size > 0){
|
|
for(local i = 0; i < size; i++){
|
|
local targetObj = obj.getVar("atomicsmashTar").get_obj_vector(i);
|
|
if(targetObj && targetObj.getState() != STATE_DIE){
|
|
local masterAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/priest/3exorcist_bykk/ap_atomicsmash_hold.nut");
|
|
if(masterAppendage) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/priest/3exorcist_bykk/ap_atomicsmash_hold.nut");
|
|
}
|
|
}
|
|
}
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 6000 / currentAni.getDelaySum(12, 12);
|
|
speedRate = 18000 / speedRate;
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/atomicsmash/start.ani", -50, 1, 30);
|
|
local pAni = pooledObj.getCurrentAnimation();
|
|
pAni.setSpeedRate(speedRate.tofloat());
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Atomicsmash(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
}
|
|
|
|
function onEndState_Atomicsmash(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onAttack_Atomicsmash(obj, damager, boundingBox, isStuck)
|
|
{
|
|
if(!obj || isStuck) return;
|
|
if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 1:
|
|
if(sq_IsHoldable(obj,damager) && !sq_IsFixture(damager) && sq_IsGrabable(obj,damager)){
|
|
if(!CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/priest/3exorcist_bykk/ap_atomicsmash_hold.nut")){
|
|
obj.getVar("atomicsmashTar").push_obj_vector(damager);
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, "character/priest/3exorcist_bykk/ap_atomicsmash_hold.nut", true);
|
|
sq_HoldAndDelayDie(damager, obj, true, true, false, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage);
|
|
}
|
|
}
|
|
break;
|
|
case 2:
|
|
break;
|
|
}
|
|
}
|
|
|
|
//逆鳞震
|
|
function checkExecutableSkill_Dangerousscale(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DANGEROUSSCALE);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_DANGEROUSSCALE, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Dangerousscale(obj)
|
|
{
|
|
if (!obj) return false;
|
|
if(obj.getState() == STATE_BYKK_GALESMASH){
|
|
if(obj.getVar("skillCancel").getBool(0)) return true;
|
|
else return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Dangerousscale(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(PRANI_BYKK_DANGEROUSSCALE01_BODY);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
// obj.sq_IsEnterSkillLastKeyUnits(SKILL_BYKK_DANGEROUSSCALE);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/dangerousscale/dangerousscale01_casting.ani"), -150, -75);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/dangerousscale/dangerousscalecasting_00.ani"), -150, -75);
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(PRANI_BYKK_DANGEROUSSCALE02_BODY);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 3800 / currentAni.getDelaySum(0 ,0);
|
|
currentAni.setSpeedRate(speedRate.tofloat() * 2.0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/dangerousscale/dangerousscale02_after_00.ani", 0, 0, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/dangerousscale/dangerousscale02dust_front.ani", 0, 1, 1);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/dangerousscale/dangerousscale02dust_back.ani", 0, -1, -1);
|
|
break;
|
|
case 2:
|
|
sq_setCurrentAxisPos(obj, 2, 0);
|
|
obj.sq_SetCurrentAnimation(PRANI_BYKK_DANGEROUSSCALE03_BODY);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD);
|
|
if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000;
|
|
print("bonusRate = "+ bonusRate);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DANGEROUSSCALE, -1, 0, bonusRate);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_DANGEROUSSCALE, 4);
|
|
sizeRate = sizeRate * sq_GetIntData(obj, SKILL_BYKK_DANGEROUSSCALE, 3) / 100;
|
|
local isTalisman = 0;
|
|
if(sq_GetIntData(obj, SKILL_BYKK_DANGEROUSSCALE, 15) > 0){
|
|
isTalisman = 1;
|
|
totalDamage = totalDamage * 110 / 100;
|
|
sizeRate = sizeRate * 125 / 100;
|
|
}
|
|
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643023,0,0,0,sq_GetDirection(obj),1,totalDamage,sizeRate,isTalisman,0,0,0,0);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT) > 0 && sq_GetSkillLevel(obj, SKILL_BYKK_CHARGEWEAPON) > 0){
|
|
setStageofhermitAppendage(obj);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_Dangerousscale(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(subState + 1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_DANGEROUSSCALE, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 2:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProc_Dangerousscale(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 1:
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local delaySum = currentAni.getDelaySum(false);
|
|
local stateTime = obj.sq_GetStateTimer();
|
|
local vz = sq_GetUniformVelocity(0, 250, stateTime, delaySum);
|
|
sq_setCurrentAxisPos(obj, 2, vz);
|
|
break;
|
|
}
|
|
}
|
|
|
|
THEBEST7HIT_STONE <- 0
|
|
//逆龙七杀
|
|
function checkExecutableSkill_Thebest7hit(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_THEBEST7HIT);
|
|
if (isUse){
|
|
local isTalisman = 0,skill = sq_GetSkill(obj, SKILL_BYKK_THEBEST7HIT);
|
|
if(sq_GetIntData(obj, SKILL_BYKK_THEBEST7HIT, 10) > 0) isTalisman = 1;
|
|
obj.sq_IntVectClear();
|
|
if(THEBEST7HIT_STONE > 0 || isTalisman > 0) obj.sq_IntVectPush(7);
|
|
else obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_THEBEST7HIT, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Thebest7hit(obj)
|
|
{
|
|
if (!obj) return false;
|
|
if(obj.getState() == STATE_BYKK_GALESMASH){
|
|
if(obj.getVar("skillCancel").getBool(0)) return true;
|
|
else return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Thebest7hit(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_SetCurrentAnimation(PRANI_BYKK_THEBEST7HIT_ATK1BODY);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/thebest7hit/atk1slash_eff_b.ani"), 0, 0);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
obj.getVar("Thebest7hitTar").clear_obj_vector();
|
|
obj.getVar("Thebest7hitBool").setBool(0, true);
|
|
obj.getVar("Thebest7hitBool").setBool(1, false);
|
|
obj.sq_PlaySound("R_PR_BESTSEVEN");
|
|
sq_SetMyShake(obj, 2, 80);
|
|
break;
|
|
case 1:
|
|
local speedUp = obj.sq_GetVectorData(datas, 1);
|
|
obj.sq_SetCurrentAnimation(PRANI_BYKK_THEBEST7HIT_ATK2BODY_01);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/thebest7hit/atk2slash_eff_b.ani"), 0, 0);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
if(speedUp > 0){
|
|
print("speed up!");
|
|
obj.getVar("Thebest7hitBool").setBool(1, true);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 8000.0 / currentAni.getDelaySum(0, 0).tofloat();
|
|
currentAni.setSpeedRate(speedRate * 1.3);
|
|
}
|
|
obj.sq_PlaySound("R_PR_BESTSEVEN");
|
|
break;
|
|
case 2:
|
|
obj.sq_SetCurrentAnimation(PRANI_BYKK_THEBEST7HIT_ATK3BODY_01);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/thebest7hit/atk3slash_eff_a.ani"), 0, 0);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
if(obj.getVar("Thebest7hitBool").getBool(1)){
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 8000.0 / currentAni.getDelaySum(0, 0).tofloat();
|
|
currentAni.setSpeedRate(speedRate * 1.3);
|
|
}
|
|
obj.sq_PlaySound("R_PR_BESTSEVEN");
|
|
break;
|
|
case 3:
|
|
obj.sq_SetCurrentAnimation(PRANI_BYKK_THEBEST7HIT_ATK4BODY);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/thebest7hit/atk4slash_eff_a.ani"), 0, 0);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
if(obj.getVar("Thebest7hitBool").getBool(1)){
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 8000.0 / currentAni.getDelaySum(0, 0).tofloat();
|
|
currentAni.setSpeedRate(speedRate * 1.3);
|
|
}
|
|
obj.sq_PlaySound("R_PR_BESTSEVEN");
|
|
break;
|
|
case 4:
|
|
obj.sq_SetCurrentAnimation(PRANI_BYKK_THEBEST7HIT_ATK5BODY);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/thebest7hit/atk5slash_eff_b.ani"), 0, 0);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
if(obj.getVar("Thebest7hitBool").getBool(1)){
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 8000.0 / currentAni.getDelaySum(0, 0).tofloat();
|
|
currentAni.setSpeedRate(speedRate * 1.3);
|
|
}
|
|
obj.sq_PlaySound("PR_BESTSEVEN_09");
|
|
break;
|
|
case 5:
|
|
obj.sq_ZStop();
|
|
obj.sq_SetCurrentAnimation(PRANI_BYKK_THEBEST7HIT_ATK6BODY);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/thebest7hit/atk6slash_eff_c.ani"), 0, 0);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
if(obj.getVar("Thebest7hitBool").getBool(1)){
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 8000.0 / currentAni.getDelaySum(0, 0).tofloat();
|
|
currentAni.setSpeedRate(speedRate * 1.3);
|
|
}
|
|
obj
|
|
break;
|
|
case 6:
|
|
sq_setCurrentAxisPos(obj, 2, 0);
|
|
obj.sq_SetCurrentAnimation(PRANI_BYKK_THEBEST7HIT_ATK7BODY_BODY);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
if(obj.getVar("Thebest7hitBool").getBool(1)){
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 8000.0 / currentAni.getDelaySum(0, 0).tofloat();
|
|
currentAni.setSpeedRate(speedRate * 1.3);
|
|
}
|
|
obj.sq_PlaySound("PR_BESTSEVEN_FIN");
|
|
break;
|
|
case 7:
|
|
obj.sq_SetCurrentAnimation(PRANI_BYKK_THEBEST7HIT_TALISMAN_THEBEST7HIT_TALISMANBODY);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
sq_SetFrameDelayTime(currentAni, 10, 400);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
obj.sq_PlaySound("BEST_SEVEN_01");
|
|
sq_SetMyShake(obj, 5, 300);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_Thebest7hit(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
if(obj.getVar("Thebest7hitTar").get_obj_vector_size() > 0){
|
|
local isDownSkillLastKey = 0;
|
|
if(obj.getVar("Thebest7hitBool").getBool(0) == false) isDownSkillLastKey = 1;
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_IntVectPush(isDownSkillLastKey);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_THEBEST7HIT, STATE_PRIORITY_AUTO, true);
|
|
}
|
|
else{
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
}
|
|
break;
|
|
case 1:
|
|
case 2:
|
|
case 3:
|
|
case 4:
|
|
case 5:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(subState + 1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_THEBEST7HIT, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 6:
|
|
case 7:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProc_Thebest7hit(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 5:
|
|
local stateTime = obj.sq_GetStateTimer();
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local delaySum = currentAni.getDelaySum(false);
|
|
local vz = sq_GetUniformVelocity(0, 200, stateTime, delaySum);
|
|
sq_setCurrentAxisPos(obj, 2, vz);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Thebest7hit(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
if(obj.getVar("Thebest7hitBool").getBool(0)){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_THEBEST7HIT, true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_THEBEST7HIT);
|
|
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
|
|
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND) || b_useskill != -1){
|
|
obj.getVar("Thebest7hitBool").setBool(0, false);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Thebest7hit(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 101:
|
|
obj.sq_PlaySound("BEST_SEVEN_01");
|
|
sq_flashScreen(obj,0,160,80,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
sq_SetMyShake(obj, 8, 560);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 6000 / currentAni.getDelaySum(0, 0);
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/thebest7hit/atk1text_b.ani", 0, 1, 1);
|
|
sq_SetCurrentDirection(pooledObj, ENUM_DIRECTION_RIGHT);
|
|
local pAni = pooledObj.getCurrentAnimation();
|
|
pAni.setSpeedRate(speedRate.tofloat());
|
|
local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD);
|
|
if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000;
|
|
print("bonusRate = "+ bonusRate);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THEBEST7HIT, -1, 0, bonusRate);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_THEBEST7HIT, 3);
|
|
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643024,0,0,0,sq_GetDirection(obj),totalDamage,sizeRate,1,speedRate,0,0,0,0);
|
|
break;
|
|
case 201:
|
|
obj.sq_PlaySound("BEST_SEVEN_02");
|
|
sq_flashScreen(obj,0,160,80,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
sq_SetMyShake(obj, 5, 320);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 8000 / currentAni.getDelaySum(0, 0);
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/thebest7hit/atk2text_b.ani", 0, 1, 1);
|
|
sq_SetCurrentDirection(pooledObj, ENUM_DIRECTION_RIGHT);
|
|
local pAni = pooledObj.getCurrentAnimation();
|
|
pAni.setSpeedRate(speedRate.tofloat());
|
|
local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD);
|
|
if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000;
|
|
print("bonusRate = "+ bonusRate);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THEBEST7HIT, -1, 1, bonusRate);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_THEBEST7HIT, 3);
|
|
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643024,0,0,0,sq_GetDirection(obj),totalDamage,sizeRate,2,speedRate,0,0,0,0);
|
|
break;
|
|
case 301:
|
|
obj.sq_PlaySound("BEST_SEVEN_03");
|
|
sq_flashScreen(obj,0,160,80,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
sq_SetMyShake(obj, 7, 240);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 8000 / currentAni.getDelaySum(0, 0);
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/thebest7hit/atk3text_b.ani", 0, 1, 1);
|
|
sq_SetCurrentDirection(pooledObj, ENUM_DIRECTION_RIGHT);
|
|
local pAni = pooledObj.getCurrentAnimation();
|
|
pAni.setSpeedRate(speedRate.tofloat());
|
|
local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD);
|
|
if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000;
|
|
print("bonusRate = "+ bonusRate);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THEBEST7HIT, -1, 2, bonusRate);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_THEBEST7HIT, 3);
|
|
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643024,0,0,0,sq_GetDirection(obj),totalDamage,sizeRate,3,speedRate,0,0,0,0);
|
|
break;
|
|
case 401:
|
|
obj.sq_PlaySound("BEST_SEVEN_04");
|
|
sq_flashScreen(obj,0,160,80,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
sq_SetMyShake(obj, 5, 240);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 8000 / currentAni.getDelaySum(0, 0);
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/thebest7hit/atk4text_a.ani", 0, 1, 1);
|
|
sq_SetCurrentDirection(pooledObj, ENUM_DIRECTION_RIGHT);
|
|
local pAni = pooledObj.getCurrentAnimation();
|
|
pAni.setSpeedRate(speedRate.tofloat());
|
|
local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD);
|
|
if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000;
|
|
print("bonusRate = "+ bonusRate);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THEBEST7HIT, -1, 3, bonusRate);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_THEBEST7HIT, 3);
|
|
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643024,0,0,0,sq_GetDirection(obj),totalDamage,sizeRate,4,speedRate,0,0,0,0);
|
|
break;
|
|
case 501:
|
|
obj.sq_PlaySound("BEST_SEVEN_05");
|
|
sq_flashScreen(obj,0,160,80,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
sq_SetMyShake(obj, 7, 160);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 8000 / currentAni.getDelaySum(0, 0);
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/thebest7hit/atk5text_b.ani", 0, 1, 1);
|
|
sq_SetCurrentDirection(pooledObj, ENUM_DIRECTION_RIGHT);
|
|
local pAni = pooledObj.getCurrentAnimation();
|
|
pAni.setSpeedRate(speedRate.tofloat());
|
|
local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD);
|
|
if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000;
|
|
print("bonusRate = "+ bonusRate);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THEBEST7HIT, -1, 4, bonusRate);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_THEBEST7HIT, 3);
|
|
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643024,0,0,0,sq_GetDirection(obj),totalDamage,sizeRate,5,speedRate,0,0,0,0);
|
|
break;
|
|
case 601:
|
|
obj.sq_PlaySound("BEST_SEVEN_06");
|
|
sq_flashScreen(obj,0,160,80,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
sq_SetMyShake(obj, 7, 240);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 8000 / currentAni.getDelaySum(0, 0);
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/thebest7hit/atk6text_b.ani", 0, 1, 1);
|
|
sq_SetCurrentDirection(pooledObj, ENUM_DIRECTION_RIGHT);
|
|
local pAni = pooledObj.getCurrentAnimation();
|
|
pAni.setSpeedRate(speedRate.tofloat());
|
|
local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD);
|
|
if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000;
|
|
print("bonusRate = "+ bonusRate);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THEBEST7HIT, -1, 5, bonusRate);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_THEBEST7HIT, 3);
|
|
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643024,0,0,0,sq_GetDirection(obj),totalDamage,sizeRate,6,speedRate,0,0,0,0);
|
|
sq_SetMyShake(obj, 6, 150);
|
|
break;
|
|
case 701:
|
|
obj.sq_PlaySound("BEST_SEVEN_07");
|
|
sq_flashScreen(obj,0,160,400,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
sq_SetMyShake(obj, 7, 320);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 8000 / currentAni.getDelaySum(0, 0);
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/thebest7hit/atk7finish_word_7th.ani", 0, 1, 1);
|
|
sq_SetCurrentDirection(pooledObj, ENUM_DIRECTION_RIGHT);
|
|
// local pAni = pooledObj.getCurrentAnimation();
|
|
// pAni.setSpeedRate(speedRate.tofloat());
|
|
local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD);
|
|
if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000;
|
|
print("bonusRate = "+ bonusRate);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_THEBEST7HIT, -1, 6, bonusRate);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_THEBEST7HIT, 3);
|
|
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643024,0,0,0,sq_GetDirection(obj),totalDamage,sizeRate,7,speedRate,0,0,0,0);
|
|
sq_SetMyShake(obj, 10, 500);
|
|
local size = obj.getVar("Thebest7hitTar").get_obj_vector_size();
|
|
if(size > 0){
|
|
for(local i = 0; i < size; i++){
|
|
local targetObj = obj.getVar("Thebest7hitTar").get_obj_vector(i);
|
|
if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/priest/3exorcist_bykk/ap_thebest7hit_hold.nut");
|
|
}
|
|
}
|
|
break;
|
|
case 1001:
|
|
//`create talisman charge effect`
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 6000 / currentAni.getDelaySum(0, 0);
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thebest7hit/thebest1hit_castingend_02.ani", -50, 1, 30);
|
|
local pAni = pooledObj.getCurrentAnimation();
|
|
pAni.setSpeedRate(speedRate.tofloat());
|
|
if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thebest7hit/thebest1hit_atk1text.ani", 0, 0, 0);
|
|
else pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/thebest7hit/thebest1hit_atk1textleftlook.ani", 0, 0, 0);
|
|
sq_SetCurrentDirection(pooledObj, ENUM_DIRECTION_RIGHT);
|
|
local pAni = pooledObj.getCurrentAnimation();
|
|
pAni.setSpeedRate(speedRate.tofloat());
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_THEBEST7HIT);
|
|
local totalDamage = sq_GetLevelData(obj, SKILL_BYKK_THEBEST7HIT, 0, skillLevel) + sq_GetLevelData(obj, SKILL_BYKK_THEBEST7HIT, 1, skillLevel) + sq_GetLevelData(obj, SKILL_BYKK_THEBEST7HIT, 2, skillLevel) + sq_GetLevelData(obj, SKILL_BYKK_THEBEST7HIT, 3, skillLevel) + sq_GetLevelData(obj, SKILL_BYKK_THEBEST7HIT, 4, skillLevel) + sq_GetLevelData(obj, SKILL_BYKK_THEBEST7HIT, 5, skillLevel) + sq_GetLevelData(obj, SKILL_BYKK_THEBEST7HIT, 6, skillLevel) - 100;
|
|
local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD);
|
|
if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000;
|
|
print("bonusRate = "+ bonusRate);
|
|
totalDamage = (totalDamage.tofloat() * bonusRate).tointeger();
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_THEBEST7HIT, 3) * 110 / 100;
|
|
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643025,0,0,0,sq_GetDirection(obj),totalDamage,sizeRate,speedRate,0,0,0,0,0);
|
|
break;
|
|
case 1002: obj.sq_PlaySound("PR_BESTSEVEN_FIN"); break;
|
|
case 1003:
|
|
obj.sq_PlaySound("BEST_SEVEN_07");
|
|
sq_flashScreen(obj,0,300,100,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
sq_SetMyShake(obj, 8, 560);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Thebest7hit(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
}
|
|
|
|
function onEndState_Thebest7hit(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
if(new_state != STATE_BYKK_THEBEST7HIT){
|
|
local size = obj.getVar("Thebest7hitTar").get_obj_vector_size();
|
|
if(size > 0){
|
|
for(local i = 0; i < size; i++){
|
|
local targetObj = obj.getVar("Thebest7hitTar").get_obj_vector(i);
|
|
if(targetObj) CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/priest/3exorcist_bykk/ap_thebest7hit_hold.nut");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//式神封灵阵
|
|
function checkExecutableSkill_Pentagon(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PENTAGON);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PENTAGON, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Pentagon(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Pentagon(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
local Ani = obj.sq_GetThrowChargeAni(2);
|
|
obj.setCurrentAnimation(Ani);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/3exorcist_bykk/pentagon/pentagonobject/cast/pentagoncast01.ani"), 0, 0);
|
|
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local delaySum = currentAni.getDelaySum(false);
|
|
|
|
local skill_level = sq_GetSkillLevel(obj, SKILL_BYKK_PENTAGON);
|
|
local castTime = sq_GetCastTime(obj, SKILL_BYKK_PENTAGON, skill_level);
|
|
local timeRate = delaySum * 100 / castTime;
|
|
currentAni.setSpeedRate(timeRate.tofloat());
|
|
sq_StartDrawCastGauge(obj, castTime, true);
|
|
break;
|
|
case 1:
|
|
sq_EndDrawCastGauge(obj);
|
|
obj.sq_PlaySound("PR_PENTAGON");
|
|
local Ani = obj.sq_GetThrowShootAni(2);
|
|
obj.setCurrentAnimation(Ani);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/pentagon/pentagonobject/cast/pentagoncastafter.ani", 0, 0, 0);
|
|
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_PENTAGON, 12);
|
|
local lifeTime = sq_GetIntData(obj, SKILL_BYKK_PENTAGON, 19);
|
|
local hitTime = sq_GetIntData(obj, SKILL_BYKK_PENTAGON, 15);
|
|
local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD);
|
|
if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000;
|
|
print("bonusRate = "+ bonusRate);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PENTAGON, -1, 1, bonusRate);
|
|
local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PENTAGON, -1, 2, bonusRate);
|
|
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643026,250,25,0,sq_GetDirection(obj),totalDamage,totalDamageExp,sizeRate,lifeTime,hitTime,0,0,0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_Pentagon(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(subState + 1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PENTAGON, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Pentagon(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_Pentagon(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Pentagon(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
}
|
|
|
|
function onEndState_Pentagon(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
if(new_state != STATE_BYKK_PENTAGON)
|
|
sq_EndDrawCastGauge(obj);
|
|
}
|
|
|
|
//式神灭却·合
|
|
function checkExecutableSkill_Fourgodpower(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_FOURGODPOWER);
|
|
if (isUse){
|
|
local state = 0;
|
|
local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
|
|
local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){
|
|
state = 10;
|
|
}
|
|
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){
|
|
state = 20;
|
|
}
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(state);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_FOURGODPOWER, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Fourgodpower(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
|
|
local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
|
|
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1) && !CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Fourgodpower(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 10:
|
|
obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_MAGICALTYPE_CAST_BODY);
|
|
obj.getVar("fourgodpowerBool").setBool(0, true);
|
|
obj.getVar("fourgodpowerBool").setBool(1, true);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
break;
|
|
case 11:
|
|
local isRemote = obj.sq_GetVectorData(datas, 1);
|
|
local isStrong = obj.sq_GetVectorData(datas, 2);
|
|
obj.getVar("fourgodpowerSet").setInt(0, isRemote);
|
|
obj.getVar("fourgodpowerSet").setInt(1, isStrong);
|
|
if(isRemote > 0) obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_MAGICALTYPE_START_REMOTE_BODY);
|
|
else obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_MAGICALTYPE_START_BODY);
|
|
obj.sq_PlaySound("FOURGODPOWER_WATER_1");
|
|
obj.sq_PlaySound("PR_FOURGODPOWER_WATER_01");
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
break;
|
|
case 12:
|
|
local isRemote = obj.getVar("fourgodpowerSet").getInt(0);
|
|
local isStrong = obj.getVar("fourgodpowerSet").getInt(1);
|
|
if(isRemote > 0){
|
|
if(isStrong > 0) obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_MAGICALTYPE_LOOPSTRONG_REMOTE_BODY);
|
|
else obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_MAGICALTYPE_LOOPBASIC_REMOTE_BODY);
|
|
}
|
|
else{
|
|
if(isStrong > 0) obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_MAGICALTYPE_LOOPSTRONG_BODY);
|
|
else obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_MAGICALTYPE_LOOPBASIC_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("FOURGODPOWER_WATER_2", 2333);
|
|
if(isStrong > 0) sq_SetMyShake(obj, 2, 3120);
|
|
local hitMax = sq_GetIntData(obj, SKILL_BYKK_FOURGODPOWER, 8);
|
|
local hitTime = sq_GetIntData(obj, SKILL_BYKK_FOURGODPOWER, 7);
|
|
local lifeTime = 350 + hitMax * hitTime;
|
|
if(isStrong > 0) lifeTime = 350 + hitMax * hitTime / 2;
|
|
if(isRemote > 0) lifeTime = 350;
|
|
obj.setTimeEvent(1, lifeTime, 1, false);
|
|
local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD);
|
|
if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000;
|
|
print("bonusRate = "+ bonusRate);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FOURGODPOWER, -1, 4, bonusRate);
|
|
local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FOURGODPOWER, -1, 5, bonusRate);
|
|
if(isRemote > 0) createSkillPassive_Priest_3exorcist_bykk(obj,obj,643037,60,0,0,sq_GetDirection(obj),totalDamage,totalDamageExp,hitTime,hitMax,isStrong,0,0,0);
|
|
else createSkillPassive_Priest_3exorcist_bykk(obj,obj,643036,0,0,0,sq_GetDirection(obj),totalDamage,totalDamageExp,hitTime,hitMax,isStrong,0,0,0);
|
|
break;
|
|
case 13:
|
|
obj.stopSound(2333);
|
|
local isRemote = obj.getVar("fourgodpowerSet").getInt(0);
|
|
local isStrong = obj.getVar("fourgodpowerSet").getInt(1);
|
|
if(isRemote > 0) obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_MAGICALTYPE_END_REMOTE_BODY);
|
|
else obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_MAGICALTYPE_END_BODY);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
sq_flashScreen(obj,0,60,20,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local delay = currentAni.getDelaySum(0, 0);
|
|
obj.setTimeEvent(2, delay, 1, false);
|
|
break;
|
|
case 20:
|
|
obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_PYSICALTYPE_START_BODY);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 4000 / currentAni.getDelaySum(0, 0);
|
|
print("speedRate = "+speedRate);
|
|
if(speedRate > 200) speedRate = 200;
|
|
obj.getVar("fourgodpowerSet").setInt(2, speedRate);
|
|
currentAni.setSpeedRate(speedRate.tofloat());
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/start/start_front_00.ani", 0, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/start/start_back_00.ani", 0, -1, 0);
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/start/start_bottom_00.ani", 0, 0, 0);
|
|
sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM);
|
|
obj.sq_PlaySound("FOURGODPOWER_FIRE_1");
|
|
break;
|
|
case 21:
|
|
obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_PYSICALTYPE_1STATTACK_BODY);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = obj.getVar("fourgodpowerSet").getInt(2);
|
|
currentAni.setSpeedRate(speedRate.tofloat());
|
|
local aniPath = ["character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/1stattack/1stattack_front_00.ani", "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/1stattack/1stattack_back_00.ani", "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/1stattack/1stattack_bottom_00.ani"];
|
|
for(local i = 0; i < aniPath.len(); i++){
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath[0], 0, i==0?1:0, 0);
|
|
local pAni = pooledObj.getCurrentAnimation();
|
|
pAni.setSpeedRate(speedRate.tofloat());
|
|
if(i == 2) sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM);
|
|
}
|
|
sq_flashScreen(obj,0,80,0,178, sq_RGB(255,90,0), GRAPHICEFFECT_LINEARDODGE, ENUM_DRAWLAYER_CLOSEBACK);
|
|
sq_SetMyShake(obj, 15, 250);
|
|
if(sq_getRandom(1, 100) > 50) obj.sq_PlaySound("PR_FOURGODPOWER_FIRE_01");
|
|
else obj.sq_PlaySound("PR_FOURGODPOWER_FIRE_04");
|
|
local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD);
|
|
if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000;
|
|
print("bonusRate = "+ bonusRate);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FOURGODPOWER, -1, 0, bonusRate);
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_FOURGODPOWER_1STATTACK));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
setChakraAttackInfo(obj);
|
|
break;
|
|
case 22:
|
|
obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_PYSICALTYPE_2NDATTACK_BODY);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = obj.getVar("fourgodpowerSet").getInt(2);
|
|
currentAni.setSpeedRate(speedRate.tofloat());
|
|
local aniPath = ["character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/2ndattack/2ndattack_startfront_00.ani", "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/2ndattack/2ndattack_startbottom_00.ani"];
|
|
for(local i = 0; i < aniPath.len(); i++){
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath[0], 0, i==0?1:0, 0);
|
|
local pAni = pooledObj.getCurrentAnimation();
|
|
pAni.setSpeedRate(speedRate.tofloat());
|
|
if(i == 1) sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM);
|
|
}
|
|
obj.sq_PlaySound("FOURGODPOWER_FIRE_2");
|
|
obj.sq_PlaySound("PR_FOURGODPOWER_FIRE_02");
|
|
local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD);
|
|
if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000;
|
|
print("bonusRate = "+ bonusRate);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FOURGODPOWER, -1, 1, bonusRate);
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, PRATK_BYKK_FOURGODPOWER_2NDATTACK));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
setChakraAttackInfo(obj);
|
|
break;
|
|
case 23:
|
|
obj.sq_SetCurrentAnimation(PRANI_BYKK_FOURGODPOWER_PYSICALTYPE_3RDATTACK_BODY);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = obj.getVar("fourgodpowerSet").getInt(2);
|
|
currentAni.setSpeedRate(speedRate.tofloat());
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/3rdattack/3rdattackhit_speedline_00.ani", 0, 0, 0);
|
|
local pAni = pooledObj.getCurrentAnimation();
|
|
pAni.setSpeedRate(speedRate.tofloat());
|
|
obj.sq_PlaySound("FOURGODPOWER_FIRE_3");
|
|
if(sq_getRandom(1, 100) > 50) obj.sq_PlaySound("PR_FOURGODPOWER_FIRE_05");
|
|
else obj.sq_PlaySound("PR_FOURGODPOWER_FIRE_03");
|
|
sq_flashScreen(obj,240,0,0,178, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_Fourgodpower(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 10:
|
|
case 11:
|
|
case 12:
|
|
case 20:
|
|
case 21:
|
|
case 22:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(subState + 1);
|
|
if(subState == 10){
|
|
if(obj.getVar("fourgodpowerBool").getBool(0) == false) obj.sq_IntVectPush(1);
|
|
else obj.sq_IntVectPush(0);
|
|
if(obj.getVar("fourgodpowerBool").getBool(1) == false) obj.sq_IntVectPush(1);
|
|
else obj.sq_IntVectPush(0);
|
|
}
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_FOURGODPOWER, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 13:
|
|
case 23:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Fourgodpower(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 10:
|
|
if(obj.getVar("fourgodpowerBool").getBool(0)){
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT){
|
|
obj.getVar("fourgodpowerBool").setBool(0, false);
|
|
}
|
|
}
|
|
if(obj.getVar("fourgodpowerBool").getBool(1)){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_FOURGODPOWER, true);
|
|
local b_useskill = obj.sq_IsEnterSkill(SKILL_BYKK_FOURGODPOWER);
|
|
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
|
|
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND) || b_useskill != -1){
|
|
obj.getVar("fourgodpowerBool").setBool(1, false);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Fourgodpower(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 21:
|
|
//`Rise Stone`
|
|
local speedRate = obj.getVar("fourgodpowerSet").getInt(2);
|
|
local aniPath = ["character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/2ndattack/2ndattack_risefront_00.ani", "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/2ndattack/2ndattack_riseback_00.ani", "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/2ndattack/2ndattack_risebottom_00.ani"];
|
|
for(local i = 0; i < aniPath.len(); i++){
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, aniPath[0], i==2?-300:0, i==0?1:0, 0);
|
|
local pAni = pooledObj.getCurrentAnimation();
|
|
pAni.setSpeedRate(speedRate.tofloat());
|
|
if(i == 2) sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM);
|
|
}
|
|
break;
|
|
case 22: sq_SetMyShake(obj, 30, 200); break;
|
|
case 23:
|
|
//`Create Wave`
|
|
local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD);
|
|
if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000;
|
|
print("bonusRate = "+ bonusRate);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FOURGODPOWER, -1, 2, bonusRate);
|
|
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643038,0,0,0,sq_GetDirection(obj),totalDamage,0,0,0,0,0,0,0);
|
|
break;
|
|
case 31:
|
|
sq_flashScreen(obj,0,100,0,178, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK);
|
|
break;
|
|
case 32:
|
|
sq_flashScreen(obj,0,160,0,178, sq_RGB(255,90,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK);
|
|
sq_SetMyShake(obj, 30, 400);
|
|
//`Create Stone`
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/3rdattack/3rdattack_groundhit_00.ani", 0, 1, 1);
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/3rdattack/3rdattack_flash_00.ani", 0, -1, -1);
|
|
sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM);
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/fourgodpower/pysicaltype/3rdattack/3rdattack_hit_bottom_00.ani", 0, 0, 0);
|
|
sq_ChangeDrawLayer(pooledObj, ENUM_DRAWLAYER_BOTTOM);
|
|
local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD);
|
|
if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000;
|
|
print("bonusRate = "+ bonusRate);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FOURGODPOWER, -1, 3, bonusRate);
|
|
local hitMax = sq_GetIntData(obj, SKILL_BYKK_FOURGODPOWER, 1);
|
|
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643035,0,0,0,sq_GetDirection(obj),totalDamage,hitMax,0,0,0,0,0,0);
|
|
break;
|
|
case 33:
|
|
sq_flashScreen(obj,0,0,120,204, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Fourgodpower(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(13);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_FOURGODPOWER, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 2:
|
|
obj.sq_PlaySound("FOURGODPOWER_WATER_3");
|
|
sq_flashScreen(obj,0,10,250,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
sq_SetMyShake(obj, 12, 350);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Fourgodpower(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
if(new_state != STATE_BYKK_FOURGODPOWER) obj.stopSound(2333);
|
|
}
|
|
|
|
//苍龙逐日
|
|
function checkExecutableSkill_Bluedragon(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BLUEDRAGON);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_BLUEDRAGON, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Bluedragon(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
|
|
local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
|
|
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1) && !CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Bluedragon(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_SetCurrentAnimation(PRANI_BYKK_BLUEDRAGON_START_BODY);
|
|
local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
|
|
local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
}
|
|
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
}
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 8000 / currentAni.getDelaySum(0, 0);
|
|
obj.getVar("bluedragonTotem").clear_obj_vector();
|
|
obj.getVar("bluedragonSet").setInt(0, -60);
|
|
//obj.setTimeEvent(1, 20, -1, false);
|
|
local bonusRate = 1.0;
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLUEDRAGON);
|
|
if(skillLevel >= 3) sq_SendMessage(obj, 0, 1, 0);
|
|
if(skillLevel >= 9) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_BLUEDRAGON, 3, skillLevel).tofloat() / 1000.0;
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLUEDRAGON, -1, 1, bonusRate);
|
|
local sizeRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BLUEDRAGON, -1, 2, 1.0) + 1100;
|
|
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643039,100,0,150,sq_GetDirection(obj),1,totalDamage,sizeRate,speedRate,0,0,0,0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_Bluedragon(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_Bluedragon(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_Bluedragon(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 0:
|
|
//`dragonTotemCreate`
|
|
break;
|
|
case 2:
|
|
//`dragonCreate`
|
|
obj.sq_PlaySound("PR_DRAGONSPEAR");
|
|
break;
|
|
case 16:
|
|
//`dragonDown`
|
|
obj.stopTimeEvent(1);
|
|
local totemObj = obj.getVar("bluedragonTotem").get_obj_vector(0);
|
|
if(totemObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(totemObj);
|
|
// colObj.getVar("custom").setInt(3, -60);
|
|
colObj.setTimeEvent(1, 1000, 1, true);
|
|
}
|
|
break;
|
|
case 17:
|
|
//`cameraBack`
|
|
break;
|
|
case 18: obj.sq_PlaySound("PR_DRAGONSPEAR_SHOT"); break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onCreateObject_Bluedragon(obj, createObject)
|
|
{
|
|
if(!obj) return;
|
|
if(createObject.isObjectType(OBJECTTYPE_PASSIVE)){
|
|
// local colObj = sq_GetCNRDObjectToCollisionObject(createObject);
|
|
// local index = colObj.getCollisionObjectIndex();
|
|
// print("index = "+index);
|
|
// if(index == 24030){
|
|
// }
|
|
}
|
|
}
|
|
|
|
function onTimeEvent_Bluedragon(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 1:
|
|
// if(obj.isMyControlObject()){
|
|
// local angle = obj.getVar("bluedragonSet").getInt(0);
|
|
// local angleSave = angle;
|
|
// if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT){
|
|
// angle = angle + 1;
|
|
// }
|
|
// else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT){
|
|
// angle = angle - 1;
|
|
// }
|
|
// if(angle > -30) angle = -20;
|
|
// else if(angle < -60) angle = -80;
|
|
// obj.getVar("bluedragonSet").setInt(0, angle);
|
|
// if(angle != angleSave){
|
|
// obj.sq_StartWrite();
|
|
// obj.sq_WriteDword(angle);
|
|
// sq_SendChangeSkillEffectPacket(obj, SKILL_BYKK_BLUEDRAGON);
|
|
// }
|
|
// }
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onChangeSkillEffect_Bluedragon(obj, skillIndex, reciveData)
|
|
{
|
|
if(!obj) return;
|
|
local angle = reciveData.readDword();
|
|
print("angle = "+angle);
|
|
// local totemObj = obj.getVar("bluedragonTotem").get_obj_vector(0);
|
|
// if(totemObj){
|
|
// local colObj = sq_GetCNRDObjectToCollisionObject(totemObj);
|
|
// colObj.getVar("custom").setInt(3, angle);
|
|
// sq_SetCustomRotate(colObj, sq_ToRadian(angle.tofloat()));
|
|
// }
|
|
}
|
|
|
|
function onEndState_Bluedragon(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
if(new_state != STATE_BYKK_BLUEDRAGON){
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLUEDRAGON);
|
|
if(skillLevel >= 3) sq_SendMessage(obj, 0, 0, 0);
|
|
}
|
|
}
|
|
|
|
//真龙焚天
|
|
function checkExecutableSkill_Advanceddragon(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_ADVANCEDDRAGON);
|
|
if (isUse){
|
|
local state = 0;
|
|
local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
|
|
local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)) state = 1;
|
|
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)) state = 2;
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(state);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_ADVANCEDDRAGON, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Advanceddragon(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
|
|
local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
|
|
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1) && !CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Advanceddragon(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(PRANI_BYKK_ADVANCEDDRAGON_BRIGHT_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("PR_ADVANCED_DRAGON");
|
|
break;
|
|
case 2:
|
|
obj.sq_SetCurrentAnimation(PRANI_BYKK_ADVANCEDDRAGON_PASSION_ATTACK);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 5000 / currentAni.getDelaySum(0, 0);
|
|
local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD);
|
|
if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000;
|
|
print("bonusRate = "+ bonusRate);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ADVANCEDDRAGON, -1, 2, bonusRate);
|
|
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643040,0,0,0,sq_GetDirection(obj),2,totalDamage,speedRate,0,0,0,0,0);
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/4_priest_bykk/3exorcist_bykk/animation/advanceddragon/advanceddragon_passion/front/attack_dust_front_normal.ani", 0, 1, 0);
|
|
local pAni = pooledObj.getCurrentAnimation();
|
|
pAni.setSpeedRate(speedRate.tofloat());
|
|
obj.sq_PlaySound("PR_ADVANCED_DRAGON");
|
|
break;
|
|
case 100:
|
|
local ani = obj.sq_GetStayAni();
|
|
obj.setCurrentAnimation(ani);
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 0));
|
|
|
|
local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
if(attackInfo.isValidElement(ENUM_ELEMENT_FIRE)) obj.getVar("element_kk").setInt(0, 100);
|
|
else obj.getVar("element_kk").setInt(0, 0);
|
|
if(attackInfo.isValidElement(ENUM_ELEMENT_WATER)) obj.getVar("element_kk").setInt(1, 100);
|
|
else obj.getVar("element_kk").setInt(1, 0);
|
|
if(attackInfo.isValidElement(ENUM_ELEMENT_DARK)) obj.getVar("element_kk").setInt(2, 100);
|
|
else obj.getVar("element_kk").setInt(2, 0);
|
|
if(attackInfo.isValidElement(ENUM_ELEMENT_LIGHT)) obj.getVar("element_kk").setInt(3, 100);
|
|
else obj.getVar("element_kk").setInt(3, 0);
|
|
obj.setTimeEvent(1, 50, 1, false);
|
|
print("getatkelement_success");
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_Advanceddragon(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 1:
|
|
case 2:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Advanceddragon(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_Advanceddragon(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 1:
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 5000 / currentAni.getDelaySum(0, 0);
|
|
local bonusRate = 1.0, chakraofgodLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD);
|
|
if(chakraofgodLevel > 0) bonusRate = bonusRate + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, chakraofgodLevel).tofloat() / 1000;
|
|
print("bonusRate = "+ bonusRate);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ADVANCEDDRAGON, -1, 0, bonusRate);
|
|
local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ADVANCEDDRAGON, -1, 1, bonusRate);
|
|
local range = sq_GetIntData(obj, SKILL_BYKK_ADVANCEDDRAGON, 2);
|
|
local hitTime = sq_GetIntData(obj, SKILL_BYKK_ADVANCEDDRAGON, 4);
|
|
local lifeTime = sq_GetIntData(obj, SKILL_BYKK_ADVANCEDDRAGON, 3);
|
|
if(speedRate >= 150) speedRate = 150;
|
|
createSkillPassive_Priest_3exorcist_bykk(obj,obj,643040,250,0,0,sq_GetDirection(obj),1,totalDamage,totalDamageExp,range,hitTime,lifeTime,speedRate,0);
|
|
break;
|
|
case 2:
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/3exorcist_bykk/advanceddragon_passion/dust/attack_dusta7.ani", 0, 0, 0);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Advanceddragon(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
////////
|
|
function onStart_appendage_bigweaponmastery(appendage)//巨兵精通 1/4
|
|
{
|
|
if(!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj || parentObj.getState() == STATE_DIE) {
|
|
appendage.setValid(false);
|
|
return;
|
|
}
|
|
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
|
local weaponSubType = obj.getWeaponSubType();
|
|
if(weaponSubType != 1 && weaponSubType != 4) return;
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BIGWEAPONMASTERY);
|
|
local stuckRate = sq_GetLevelData(obj, SKILL_BYKK_BIGWEAPONMASTERY, 0, skillLevel);
|
|
local pysicalAtkRate = sq_GetLevelData(obj, SKILL_BYKK_BIGWEAPONMASTERY, 1, skillLevel);
|
|
local magicalAtkRate = sq_GetLevelData(obj, SKILL_BYKK_BIGWEAPONMASTERY, 3, skillLevel);
|
|
local cooltimeRate = sq_GetLevelData(obj, SKILL_BYKK_BIGWEAPONMASTERY, 4, skillLevel);
|
|
local change_appendage = appendage.sq_getChangeStatus("prBigweaponmastery");
|
|
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("prBigweaponmastery",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK, false, -(stuckRate * 0.1).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (pysicalAtkRate * 0.1).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (magicalAtkRate * 0.1).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_COOLTIME_DECLINE, true, (cooltimeRate * -0.1).tofloat());
|
|
}
|
|
}
|
|
|
|
function onStart_appendage_forceofexorcism(appendage)//驱魔震慑
|
|
{
|
|
if(!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj || parentObj.getState() == STATE_DIE) {
|
|
appendage.setValid(false);
|
|
return;
|
|
}
|
|
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
|
local attackRate = sq_GetIntData(obj, SKILL_BYKK_FORCEOFEXORCISM, 0);
|
|
local moveSpeed = sq_GetIntData(obj, SKILL_BYKK_FORCEOFEXORCISM, 1);
|
|
local change_appendage = appendage.sq_getChangeStatus("prForceofexorcism");
|
|
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("prForceofexorcism",obj, 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());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (attackRate * 0.1).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (attackRate * 0.1).tofloat());
|
|
}
|
|
}
|
|
|
|
function onStart_appendage_stageofhermit_magic(appendage)//式神之力_魔法
|
|
{
|
|
if(!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj || parentObj.getState() == STATE_DIE) {
|
|
appendage.setValid(false);
|
|
return;
|
|
}
|
|
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT);
|
|
local attackRate = sq_GetLevelData(obj, SKILL_BYKK_STAGEOFHERMIT, 2, skillLevel);
|
|
local hitRate = sq_GetLevelData(obj, SKILL_BYKK_STAGEOFHERMIT, 3, skillLevel);
|
|
local change_appendage = appendage.sq_getChangeStatus("prStageofhermit_magic");
|
|
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("prStageofhermit_magic",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_HIT_RATE, false, (hitRate * 0.1).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, true, (attackRate * 0.1).tofloat());
|
|
}
|
|
}
|
|
|
|
function onStart_appendage_stageofhermit_pysic(appendage)//式神之力_力量
|
|
{
|
|
if(!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj || parentObj.getState() == STATE_DIE) {
|
|
appendage.setValid(false);
|
|
return;
|
|
}
|
|
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT);
|
|
local attackRate = sq_GetLevelData(obj, SKILL_BYKK_STAGEOFHERMIT, 0, skillLevel);
|
|
local hitRate = sq_GetLevelData(obj, SKILL_BYKK_STAGEOFHERMIT, 1, skillLevel);
|
|
local change_appendage = appendage.sq_getChangeStatus("prStageofhermit_magic");
|
|
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("prStageofhermit_magic",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_CRITICAL_HIT_RATE, false, (hitRate * 0.1).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, true, (attackRate * 0.1).tofloat());
|
|
}
|
|
}
|
|
|
|
function setStageofhermitAppendage(obj)
|
|
{
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_STAGEOFHERMIT);
|
|
if(skillLevel > 0){
|
|
local buffTime = sq_GetIntData(obj, SKILL_BYKK_STAGEOFHERMIT, 2);
|
|
local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
|
|
local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){
|
|
local apdPath = "character/priest/3exorcist_bykk/passiveskill/ap_stageofhermit_magic.nut";
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/priest/3exorcist_bykk/passiveskill/ap_stageofhermit_pysic.nut")) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/priest/3exorcist_bykk/passiveskill/ap_stageofhermit_pysic.nut");
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath);
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true);
|
|
AddAppendage.sq_SetValidTime(buffTime);
|
|
AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_STAGEOFHERMIT, skillLevel);
|
|
CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true);
|
|
}
|
|
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){
|
|
local apdPath = "character/priest/3exorcist_bykk/passiveskill/ap_stageofhermit_pysic.nut";
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/priest/3exorcist_bykk/passiveskill/ap_stageofhermit_magic.nut")) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/priest/3exorcist_bykk/passiveskill/ap_stageofhermit_magic.nut");
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath);
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, apdPath, true);
|
|
AddAppendage.sq_SetValidTime(buffTime);
|
|
AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_STAGEOFHERMIT, skillLevel);
|
|
CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true);
|
|
}
|
|
}
|
|
}
|
|
|
|
function setSkillBonusRate_3Exorcist_bykk(obj)
|
|
{
|
|
local bonusRate = 1000;
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_BOOKOFEXOCISM) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_BOOKOFEXOCISM, 0, sq_GetSkillLevel(obj, SKILL_BYKK_BOOKOFEXOCISM))) / 1000;
|
|
print("bonusRate1 = "+bonusRate);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_RADIATEFIGHTINGAURA) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_RADIATEFIGHTINGAURA, 2, sq_GetSkillLevel(obj, SKILL_BYKK_RADIATEFIGHTINGAURA))) / 1000;
|
|
print("bonusRate2 = "+bonusRate);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_GODOFEXORCISM) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_GODOFEXORCISM, 0, sq_GetSkillLevel(obj, SKILL_BYKK_GODOFEXORCISM))) / 1000;
|
|
print("bonusRate3 = "+bonusRate);
|
|
local apdPath1 = "character/priest/3exorcist_bykk/ap_chakraofcalmness.nut";
|
|
local apdPath2 = "character/priest/3exorcist_bykk/ap_chakraofpassion.nut";
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath1)){
|
|
bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFCALMNESS, 1, sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFCALMNESS))) / 1000;
|
|
}
|
|
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, apdPath2)){
|
|
bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFPASSION, 1, sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFPASSION))) / 1000;
|
|
}
|
|
print("bonusRate4 = "+bonusRate);
|
|
obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger());
|
|
//sq_SetSkillAttackBonus(obj, bonusRate);
|
|
}
|
|
|
|
function onStartDungeon_PrExorcist_bykk(obj)
|
|
{
|
|
obj.getVar("isReset").setInt(0, 1);
|
|
setSkillBonusRate_3Exorcist_bykk(obj);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(100);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_ADVANCEDDRAGON, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
}
|
|
|
|
function reset_Priest(obj)
|
|
{
|
|
if(!obj) return;
|
|
if(sq_getGrowType(obj) == 3){
|
|
if(obj.getVar("isReset").getInt(0) == 0) setSkillBonusRate_3Exorcist_bykk(obj);
|
|
}
|
|
}
|
|
|
|
function ProcPassiveSkill_3PrExorcist_bykk(obj, skill_index, skill_level)
|
|
{
|
|
switch(skill_index){
|
|
case SKILL_BYKK_BIGWEAPONMASTERY:
|
|
local append = "character/priest/3exorcist_bykk/passiveskill/ap_bigweaponmastery.nut";
|
|
if (skill_level > 0) {
|
|
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, append, true);
|
|
appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), skill_index, skill_level);
|
|
CNSquirrelAppendage.sq_Append(appendage, obj, obj, true);
|
|
} else {
|
|
if (CNSquirrelAppendage.sq_IsAppendAppendage(obj, append)) {
|
|
CNSquirrelAppendage.sq_RemoveAppendage(obj, append);
|
|
}
|
|
}
|
|
break;
|
|
case SKILL_BYKK_FORCEOFEXORCISM:
|
|
local append = "character/priest/3exorcist_bykk/passiveskill/ap_forceofexorcism.nut";
|
|
if (skill_level > 0) {
|
|
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, append, true);
|
|
appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), skill_index, skill_level);
|
|
CNSquirrelAppendage.sq_Append(appendage, obj, obj, true);
|
|
} else {
|
|
if (CNSquirrelAppendage.sq_IsAppendAppendage(obj, append)) {
|
|
CNSquirrelAppendage.sq_RemoveAppendage(obj, append);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function setChakraAttackInfo(obj)
|
|
{
|
|
local skill = sq_GetSkill(obj, SKILL_BYKK_FORCEOFEXORCISM);
|
|
if(skill.isSealFunction()) sq_setAttackInfoType(obj, ATTACKTYPE_MAGICAL);
|
|
else sq_setAttackInfoType(obj, ATTACKTYPE_PHYSICAL);
|
|
local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
if(attackInfo){
|
|
local element_kk_fire = obj.getVar("element_kk").getInt(0);
|
|
local element_kk_water = obj.getVar("element_kk").getInt(1);
|
|
local element_kk_dark = obj.getVar("element_kk").getInt(2);
|
|
local element_kk_light = obj.getVar("element_kk").getInt(3);
|
|
if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE);
|
|
if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER);
|
|
if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK);
|
|
if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT);
|
|
}
|
|
}
|
|
|
|
function setAttackType_2Exorcist(sqrChr, obj)
|
|
{
|
|
if(sqrChr && sqrChr.getState() != STATE_DIE){
|
|
local skill = sq_GetSkill(sqrChr, SKILL_BYKK_FORCEOFEXORCISM);
|
|
if(skill.isSealFunction()){
|
|
sq_setAttackInfoType(obj, ATTACKTYPE_MAGICAL);
|
|
obj.getVar("atkType").setInt(0, 1);
|
|
}
|
|
else{
|
|
sq_setAttackInfoType(obj, ATTACKTYPE_PHYSICAL);
|
|
obj.getVar("atkType").setInt(0, 0);
|
|
}
|
|
local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
if(attackInfo){
|
|
local element_kk_fire = sqrChr.getVar("element_kk").getInt(0);
|
|
local element_kk_water = sqrChr.getVar("element_kk").getInt(1);
|
|
local element_kk_dark = sqrChr.getVar("element_kk").getInt(2);
|
|
local element_kk_light = sqrChr.getVar("element_kk").getInt(3);
|
|
if(!attackInfo.isValidElement(ENUM_ELEMENT_FIRE) && element_kk_fire > 0) attackInfo.setElement(ENUM_ELEMENT_FIRE);
|
|
if(!attackInfo.isValidElement(ENUM_ELEMENT_WATER) && element_kk_water > 0) attackInfo.setElement(ENUM_ELEMENT_WATER);
|
|
if(!attackInfo.isValidElement(ENUM_ELEMENT_DARK) && element_kk_dark > 0) attackInfo.setElement(ENUM_ELEMENT_DARK);
|
|
if(!attackInfo.isValidElement(ENUM_ELEMENT_LIGHT) && element_kk_light > 0) attackInfo.setElement(ENUM_ELEMENT_LIGHT);
|
|
}
|
|
}
|
|
}
|
|
|
|
function onStart_appendage_prchakraofgod(appendage)
|
|
{
|
|
if(!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj || parentObj.getState() == STATE_DIE) {
|
|
appendage.setValid(false);
|
|
return;
|
|
}
|
|
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
|
sq_clearSkillData();
|
|
local bonusRate = sq_GetLevelData(obj, SKILL_BYKK_CHAKRAOFGOD, 1, sq_GetSkillLevel(obj, SKILL_BYKK_CHAKRAOFGOD)) / 10;
|
|
print("bonusRate = "+bonusRate);
|
|
sq_setLevelData(obj, SKILL_BYKK_ENTERINGNIRVANA, 0, bonusRate, 1);
|
|
sq_setLevelData(obj, SKILL_BYKK_CUTTINGDARKNESS, 1, bonusRate, 1);
|
|
sq_setLevelData(obj, SKILL_BYKK_CUTTINGDARKNESS, 2, bonusRate, 1);
|
|
sq_setLevelData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 0, bonusRate, 1);
|
|
sq_setLevelData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 1, bonusRate, 1);
|
|
sq_setLevelData(obj, SKILL_BYKK_VERMILIONBIRDTALISMAN, 2, bonusRate, 1);
|
|
sq_setLevelData(obj, SKILL_BYKK_BAEKHO, 0, bonusRate, 1);
|
|
sq_setLevelData(obj, SKILL_BYKK_THUNDERBOLTTALISMAN, 1, bonusRate, 1);
|
|
sq_setLevelData(obj, SKILL_BYKK_SHIKIGAMI, 0, bonusRate, 1);
|
|
sq_setLevelData(obj, SKILL_BYKK_SHIKIGAMI, 1, bonusRate, 1);
|
|
sq_setLevelData(obj, SKILL_BYKK_SHIKIGAMI, 1, bonusRate, 1);
|
|
sq_setLevelData(obj, SKILL_BYKK_DESTROYSPIRITTALISMAN, 1, bonusRate, 1);
|
|
sq_setLevelData(obj, SKILL_BYKK_DANGEROUSSCALE, 0, bonusRate, 1);
|
|
sq_setLevelData(obj, SKILL_BYKK_PENTAGON, 1, bonusRate, 1);
|
|
sq_setLevelData(obj, SKILL_BYKK_PENTAGON, 2, bonusRate, 1);
|
|
sq_setLevelData(obj, SKILL_BYKK_THEBEST7HIT, 0, bonusRate, 1);
|
|
sq_setLevelData(obj, SKILL_BYKK_THEBEST7HIT, 1, bonusRate, 1);
|
|
sq_setLevelData(obj, SKILL_BYKK_THEBEST7HIT, 2, bonusRate, 1);
|
|
sq_setLevelData(obj, SKILL_BYKK_THEBEST7HIT, 3, bonusRate, 1);
|
|
sq_setLevelData(obj, SKILL_BYKK_THEBEST7HIT, 4, bonusRate, 1);
|
|
sq_setLevelData(obj, SKILL_BYKK_THEBEST7HIT, 5, bonusRate, 1);
|
|
sq_setLevelData(obj, SKILL_BYKK_THEBEST7HIT, 6, bonusRate, 1);
|
|
sq_setLevelData(obj, SKILL_BYKK_ADVANCEDDRAGON, 0, bonusRate, 1);
|
|
sq_setLevelData(obj, SKILL_BYKK_ADVANCEDDRAGON, 1, bonusRate, 1);
|
|
sq_setLevelData(obj, SKILL_BYKK_ADVANCEDDRAGON, 2, bonusRate, 1);
|
|
sq_setLevelData(obj, SKILL_BYKK_FOURGODPOWER, 0, bonusRate, 1);
|
|
sq_setLevelData(obj, SKILL_BYKK_FOURGODPOWER, 1, bonusRate, 1);
|
|
sq_setLevelData(obj, SKILL_BYKK_FOURGODPOWER, 2, bonusRate, 1);
|
|
sq_setLevelData(obj, SKILL_BYKK_FOURGODPOWER, 3, bonusRate, 1);
|
|
sq_setLevelData(obj, SKILL_BYKK_FOURGODPOWER, 4, bonusRate, 1);
|
|
sq_setLevelData(obj, 99, 0, bonusRate, 1);
|
|
sq_setLevelData(obj, 99, 3, 10, 1);
|
|
}
|
|
|
|
|
|
|
|
function setCustomData_po_2nd_priest(obj, receiveData)
|
|
{
|
|
setCustomData_po_qq506807329new_priest_24374(obj, receiveData);
|
|
}
|
|
|
|
function setState_po_2nd_priest(obj, state, datas)
|
|
{
|
|
setState_po_qq506807329new_priest_24374(obj, state, datas);
|
|
}
|
|
|
|
function onEndCurrentAni_po_2nd_priest(obj)
|
|
{
|
|
onEndCurrentAni_po_qq506807329new_priest_24374(obj);
|
|
}
|
|
|
|
function onTimeEvent_po_2nd_priest(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
onTimeEvent_po_qq506807329new_priest_24374(obj, timeEventIndex, timeEventCount);
|
|
}
|
|
|
|
function onKeyFrameFlag_po_2nd_priest(obj, flagIndex)
|
|
{
|
|
onKeyFrameFlag_po_qq506807329new_priest_24374(obj, flagIndex);
|
|
}
|
|
|
|
function onAttack_po_2nd_priest(obj, damager, boundingBox, isStuck)
|
|
{
|
|
onAttack_po_qq506807329new_priest_24374(obj, damager, boundingBox, isStuck);
|
|
}
|
|
|
|
function getCustomHitEffectFileName_po_2nd_priest(obj, isAttachOnDamager)
|
|
{
|
|
getCustomHitEffectFileName_po_qq506807329new_priest_24374(obj, isAttachOnDamager);
|
|
}
|
|
|
|
function onChangeSkillEffect_po_2nd_priest(obj, skillIndex, reciveData)
|
|
{
|
|
onChangeSkillEffect_po_qq506807329new_priest_24374(obj, skillIndex, reciveData);
|
|
}
|
|
|
|
function destroy_po_2nd_priest(obj)
|
|
{
|
|
destroy_po_qq506807329new_priest_24374(obj);
|
|
}
|
|
|
|
function procAppend_po_2nd_priest(obj)
|
|
{
|
|
procAppend_po_qq506807329new_priest_24374(obj);
|
|
}
|
|
|
|
|
|
|
|
|
|
//////////////////////2
|
|
|
|
//正义铁拳
|
|
function checkExecutableSkill_AggressiveJudgement(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_AGGRESSIVEJUDGEMENT);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(SKILL_BYKK_AGGRESSIVEJUDGEMENT, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_AggressiveJudgement(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_AggressiveJudgement(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(378);
|
|
if(sq_IsMyControlObject(obj)) sq_flashScreen(obj,150,0,0,204, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(379);
|
|
obj.setTimeEvent(1, 200, -1, false);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 3200 / currentAni.getDelaySum(0, 0);
|
|
createSkillPassive_Priest_bykk(obj,obj,PASSIVEOBJECT_PRIESTBYKK,300,0,0,sq_GetDirection(obj),2,SKILL_BYKK_AGGRESSIVEJUDGEMENT,3,speedRate,0,0,0,0,0,0,0);
|
|
break;
|
|
case 2:
|
|
obj.sq_SetCurrentAnimation(381);
|
|
break;
|
|
case 3:
|
|
obj.sq_SetCurrentAnimation(382);
|
|
obj.sq_PlaySound("R_PR_AGGRESSIVE_JUDGEMENT_03");
|
|
obj.sq_PlaySound("AGGRESSIVE_JUDGEMENT_FINISH");
|
|
sq_flashScreen(obj,0,50,600,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK);
|
|
sq_SetMyShake(obj, 20, 400);
|
|
//`createHitSuccessEffect` 84 0 66
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/2infighter_bykk/aggressivejudgement/dlasthit/dfront_00.ani", 84, 0, 66);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/2infighter_bykk/aggressivejudgement/dlasthit/dback_04.ani", 84, -1, 65);
|
|
//`stopMultiHitSound`
|
|
obj.stopTimeEvent(1);
|
|
obj.stopSound(2333);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AGGRESSIVEJUDGEMENT, -1, 2, 1.0);
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, 186));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_AggressiveJudgement(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
case 1:
|
|
case 2:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(subState + 1);
|
|
obj.sq_AddSetStatePacket(SKILL_BYKK_AGGRESSIVEJUDGEMENT, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 3:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_AggressiveJudgement(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_AggressiveJudgement(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 103:
|
|
obj.sq_PlaySound("R_PR_AGGRESSIVE_JUDGEMENT_01");
|
|
obj.sq_PlaySound("AGGRESSIVE_JUDGEMENT_START");
|
|
sq_SetMyShake(obj, 13, 300);
|
|
//`createGroundExpObject` 115 0 0
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AGGRESSIVEJUDGEMENT, -1, 0, 1.0);
|
|
createSkillPassive_Priest_bykk(obj,obj,PASSIVEOBJECT_PRIESTBYKK,115,0,0,sq_GetDirection(obj),2,SKILL_BYKK_AGGRESSIVEJUDGEMENT,1,totalDamage,0,0,0,0,0,0,0);
|
|
break;
|
|
case 202:
|
|
sq_SetMyShake(obj, 2, 32);
|
|
//`createMultiHitObject` 112 0 73
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local time = currentAni.getDelaySum(2, 48);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_AGGRESSIVEJUDGEMENT, -1, 1, 1.0);
|
|
local hitMax = sq_GetIntData(obj, SKILL_BYKK_AGGRESSIVEJUDGEMENT, 6);
|
|
local hitTime = time / (hitMax + 1);
|
|
print("hitMax = "+hitMax);
|
|
print("hitTime = "+hitTime);
|
|
createSkillPassive_Priest_bykk(obj,obj,PASSIVEOBJECT_PRIESTBYKK,112,0,73,sq_GetDirection(obj),2,SKILL_BYKK_AGGRESSIVEJUDGEMENT,2,totalDamage,hitMax,hitTime,0,0,0,0,0);
|
|
break;
|
|
case 203:
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local delay = currentAni.getDelaySum(3, 48);
|
|
sq_SetMyShake(obj, 2, delay);
|
|
break;
|
|
case 303:
|
|
sq_flashScreen(obj,250,0,250,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_CLOSEBACK);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_AggressiveJudgement(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 1:
|
|
obj.sq_PlaySound("AGGRESSIVE_JUDGEMENT_BEAT", 2333);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_AggressiveJudgement(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
if(new_state != SKILL_BYKK_AGGRESSIVEJUDGEMENT){
|
|
}
|
|
}
|
|
|
|
///////////////////////////////1
|
|
|
|
//神罚之锤 : 天怒
|
|
function checkExecutableSkill_Astrafe(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_ASTRAFE);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(SKILL_BYKK_ASTRAFE, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Astrafe(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Astrafe(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
obj.sq_ZStop();
|
|
switch(subState){
|
|
case 0:
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/new_priest/jupiter/ap_jupiter.nut") == true) obj.sq_SetCurrentAnimation(385);
|
|
else obj.sq_SetCurrentAnimation(377);
|
|
obj.getVar("AstrafeJump").setBool(0, false);
|
|
sq_flashScreen(obj,0,0,300,127, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/1crusader_bykk/astrafe/startfront_00.ani", 0, 1, 1);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/1crusader_bykk/astrafe/startback_01.ani", 0, -1, -1);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/1crusader_bykk/astrafe/startback_04.ani", 0, -1, -1);
|
|
obj.sq_PlaySound("PR_ASTRAPE_V1_01");
|
|
break;
|
|
case 1:
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/new_priest/jupiter/ap_jupiter.nut") == true) obj.sq_SetCurrentAnimation(384);
|
|
else obj.sq_SetCurrentAnimation(376);
|
|
local isBigJump = obj.sq_GetVectorData(datas, 1);
|
|
if(isBigJump > 0) sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/1crusader_bykk/astrafe/jump_bigfeather.ani", 0, 0, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/1crusader_bykk/astrafe/jumpfeather_00.ani", 0, 0, 0);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1crusader_bykk/astrafe/userbuff_front.ani"), 0, 0);
|
|
obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/1crusader_bykk/astrafe/userbuffback_03.ani"), 0, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/1crusader_bykk/astrafe/buffarea_00.ani", 0, 1, 1);
|
|
local speed = 300.0;
|
|
if(isBigJump > 0) speed = 500.0;
|
|
if(sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT) sq_SetVelocity(obj, 0, speed);
|
|
else sq_SetVelocity(obj, 0, -speed);
|
|
//`buff`
|
|
break;
|
|
case 2:
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/new_priest/jupiter/ap_jupiter.nut") == true) obj.sq_SetCurrentAnimation(383);
|
|
else obj.sq_SetCurrentAnimation(375);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1crusader_bykk/astrafe/boombodyfront_01.ani"), 0, 0);
|
|
obj.sq_AddStateLayerAnimation(-1,obj.sq_CreateCNRDAnimation("effect/animation/1crusader_bykk/astrafe/boombody_back.ani"), 0, 0);
|
|
obj.setTimeEvent(1, 5, 9, false);
|
|
//`sound1`
|
|
obj.sq_PlaySound("R_PR_ASTRAPE_V2_02");
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_Astrafe(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(subState + 1);
|
|
if(subState == 1){
|
|
if(obj.getVar("AstrafeJump").getBool(0)) obj.sq_IntVectPush(1);
|
|
else obj.sq_IntVectPush(0);
|
|
}
|
|
obj.sq_AddSetStatePacket(SKILL_BYKK_ASTRAFE, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 2:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Astrafe(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
if(obj.getVar("AstrafeJump").getBool(0) == false){
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_LEFT || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL) && obj.getDirection() == ENUM_DIRECTION_RIGHT){
|
|
obj.sq_StartWrite();
|
|
obj.sq_WriteDword(1);
|
|
sq_SendChangeSkillEffectPacket(obj, SKILL_BYKK_ASTRAFE);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProc_Astrafe(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 1:
|
|
local stateTime = obj.sq_GetStateTimer();
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local fireT = currentAni.getDelaySum(false);
|
|
local vz = sq_GetUniformVelocity(0, 250, stateTime, fireT);
|
|
sq_setCurrentAxisPos(obj, 2, vz);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onChangeSkillEffect_Astrafe(obj, skillIndex, reciveData)
|
|
{
|
|
if(!obj) return;
|
|
local set = reciveData.readDword();
|
|
if(set == 1) obj.getVar("AstrafeJump").setBool(0, true);
|
|
}
|
|
|
|
function onKeyFrameFlag_Astrafe(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 110: sq_SetMyShake(obj, 1, 200); break;
|
|
case 0:
|
|
sq_SetMyShake(obj, 25, 300);
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/1crusader_bykk/astrafe/boombodyfront_04.ani", 0, 1, -sq_GetZPos(obj));
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/priest/effect/animation/1crusader_bykk/astrafe/boomback_00.ani", 0, -1, -sq_GetZPos(obj));
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ASTRAFE, -1, 0, 1.0);
|
|
local totalDamageExp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ASTRAFE, -1, 1, 1.0);
|
|
createSkillPassive_Priest_bykk(obj,obj,PASSIVEOBJECT_PRIESTBYKK,200,0,0,sq_GetDirection(obj),1,SKILL_BYKK_ASTRAFE,1,totalDamage,totalDamageExp,0,0,0,0,0,0);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Astrafe(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 1:
|
|
local vz = sq_GetUniformVelocity(250, 0, timeEventCount, 9);
|
|
sq_setCurrentAxisPos(obj, 2, vz);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Astrafe(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
if(new_state != SKILL_BYKK_ASTRAFE){
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function createSkillPassive_Priest_bykk(obj,passiveObj,objnum,x,y,z,direction,job,skillIndex,subtype,pushv1,pushv2,pushv3,pushv4,pushv5,pushv6,pushv7,pushv8)
|
|
{
|
|
if(!obj || !passiveObj || obj.getState() == STATE_DIE) return;
|
|
local destX_01 = 0;
|
|
local destY_01 = 0;
|
|
if(!isSameObject(obj, passiveObj)){
|
|
destX_01 = passiveObj.getXPos() - obj.getXPos();
|
|
destY_01 = passiveObj.getYPos() - obj.getYPos();
|
|
if(direction == ENUM_DIRECTION_LEFT) destX_01 = obj.getXPos() - passiveObj.getXPos();
|
|
}
|
|
sq_BinaryStartWrite();
|
|
sq_BinaryWriteDword(job);
|
|
sq_BinaryWriteDword(skillIndex);
|
|
sq_BinaryWriteDword(subtype);
|
|
sq_BinaryWriteDword(pushv1);
|
|
sq_BinaryWriteDword(pushv2);
|
|
sq_BinaryWriteDword(pushv3);
|
|
sq_BinaryWriteDword(pushv4);
|
|
sq_BinaryWriteDword(pushv5);
|
|
sq_BinaryWriteDword(pushv6);
|
|
sq_BinaryWriteDword(pushv7);
|
|
sq_BinaryWriteDword(pushv8);
|
|
sq_SendCreatePassiveObjectPacket(obj, objnum, 0, destX_01 + x, destY_01 + y, z, direction);
|
|
}
|
|
|