3512 lines
137 KiB
C
3512 lines
137 KiB
C
|
|
//圣光普照
|
|
function checkExecutableSkill_Miraclechine(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_MIRACLECHINE);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_MIRACLECHINE, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Miraclechine(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Miraclechine(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_MIRACLESHINE01_02);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
obj.sq_PlaySound("R_PW_MIRACLESHINE");
|
|
obj.sq_PlaySound("MIRACLESHINE_CAST");
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_MIRACLESHINE02_02);
|
|
sq_flashScreen(obj,0,80,0,127, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
local targetMax = sq_GetIntData(obj, SKILL_BYKK_MIRACLECHINE, 10);
|
|
local firstTargetXRange = sq_GetIntData(obj, SKILL_BYKK_MIRACLECHINE, 1);
|
|
local firstTargetYRange = sq_GetIntData(obj, SKILL_BYKK_MIRACLECHINE, 2);
|
|
local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_MIRACLECHINE, -1, 1, 1.0);
|
|
local hitTime = sq_GetIntData(obj, SKILL_BYKK_MIRACLECHINE, 8);
|
|
local hitMax = sq_GetIntData(obj, SKILL_BYKK_MIRACLECHINE, 9);
|
|
local addRate = sq_GetIntData(obj, SKILL_BYKK_MIRACLECHINE, 13) / 10;
|
|
local HP_healRate = sq_GetLevelData(obj, SKILL_BYKK_MIRACLECHINE, 0, sq_GetSkillLevel(obj, SKILL_BYKK_MIRACLECHINE));
|
|
// if(obj.isMyControlObject()){
|
|
if(sq_GetLevelData(obj, SKILL_BYKK_MIRACLECHINE, 2, sq_GetSkillLevel(obj, SKILL_BYKK_MIRACLECHINE)) > 0){//stone
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,250,0,100,obj.getDirection(),1,SKILL_BYKK_MIRACLECHINE,10,power,hitTime,hitMax,HP_healRate,0,0,0,0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atmiracleshine/userhealing02_end02.ani", 40, 0, 95);
|
|
obj.setTimeEvent(0, 500, 1, false);
|
|
break;
|
|
}
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,40,0,95,obj.getDirection(),1,SKILL_BYKK_MIRACLECHINE,1,targetMax,firstTargetXRange,firstTargetYRange,power,hitTime,hitMax,addRate,HP_healRate);
|
|
// }
|
|
local stateTime = hitTime * hitMax;
|
|
local currentAni = obj.getCurrentAnimation();
|
|
sq_SetFrameDelayTime(currentAni, 1, stateTime);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_Miraclechine(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_MIRACLECHINE, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Miraclechine(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Miraclechine(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 201:
|
|
sq_flashScreen(obj,0,0,480,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Miraclechine(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Miraclechine(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
|
|
function setLightning_atp_Miraclechine_bykk(obj, drawObj, targetObj)
|
|
{
|
|
if(!obj) return;
|
|
//if(!pTargetChr) return;
|
|
|
|
local X = drawObj.getXPos();
|
|
local Y = drawObj.getYPos();
|
|
local Z = drawObj.getZPos();
|
|
|
|
local pAni = drawObj.getCurrentAnimation();
|
|
|
|
local activeObj = sq_GetCNRDObjectToActiveObject(targetObj);
|
|
local posX = activeObj.getXPos();
|
|
local posY = activeObj.getYPos() + 1;
|
|
local posZ = activeObj.getZPos() + (sq_GetObjectHeight(activeObj) / 2);
|
|
|
|
if(posX == -1) return;
|
|
|
|
local offset = posX - X;
|
|
|
|
if(offset < 0) drawObj.setCurrentDirection(ENUM_DIRECTION_LEFT);
|
|
else drawObj.setCurrentDirection(ENUM_DIRECTION_RIGHT);
|
|
|
|
local distance = sq_GetDistance( X, Y - Z, posX, posY - posZ, true);
|
|
local w = posX - X;
|
|
if(w < 0) w = -w;
|
|
local h = (posY) - (Y);
|
|
local width = sq_Abs(posX - X);
|
|
local angle = sq_Atan2( h.tofloat(), width.tofloat());
|
|
angle = -angle;
|
|
local nRevision = distance;
|
|
local cos = nRevision.tofloat() * sq_Cos(angle);
|
|
local sin = nRevision.tofloat() * sq_Sin(angle);
|
|
local nX = sq_Abs( cos.tointeger() );
|
|
local nY = sq_Abs( sin.tointeger() );
|
|
sq_SetfRotateAngle(pAni, angle);
|
|
local dis = 300;
|
|
local cos_x = dis.tofloat() * sq_Cos(angle);
|
|
local sin_y = dis.tofloat() * sq_Sin(angle);
|
|
local nW = sq_Abs( cos_x.tointeger() );
|
|
local nH = sq_Abs( sin_y.tointeger() );
|
|
local wRate = width.tofloat() / nW.tofloat();
|
|
local hRate = h.tofloat() / nH.tofloat();
|
|
pAni.setImageRate(wRate.tofloat(), hRate.tofloat());
|
|
}
|
|
|
|
|
|
//救赎彼岸:惩戒圣枪
|
|
function checkExecutableSkill_Brionac(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_BRIONAC);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_BRIONAC, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Brionac(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Brionac(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
obj.sq_ZStop();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_BRIONACBODY_BODY);
|
|
obj.sq_PlaySound("R_PW_BRUNAQ");
|
|
obj.sq_PlaySound("BRUNAQ_CAST");
|
|
break;
|
|
}
|
|
// obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local delay = currentAni.getDelaySum(0, 5);
|
|
local delay2 = currentAni.getDelaySum(5, 11);
|
|
sq_flashScreen(obj,delay,delay2,delay,150, sq_RGB(255, 255, 255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
}
|
|
|
|
function onEndCurrentAni_Brionac(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_Brionac(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Brionac(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 102:
|
|
//`HoldStart` 18 0 -50
|
|
obj.getVar("Brionac_Tar").clear_obj_vector();
|
|
local objectManager = obj.getObjectManager();
|
|
local objectNumber = objectManager.getCollisionObjectNumber();
|
|
for (local i = 0; i < objectNumber; i++){
|
|
local object = objectManager.getCollisionObject(i);
|
|
if(object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj)){
|
|
if(!obj.getVar("Brionac_Tar").is_obj_vector(object)) obj.getVar("Brionac_Tar").push_obj_vector(object);
|
|
local AddAppendage;
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(object, APDPATH_BRIONAC)) AddAppendage = CNSquirrelAppendage.sq_GetAppendage(object, APDPATH_BRIONAC);
|
|
else AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(object, obj, -1, false, APDPATH_BRIONAC, true);
|
|
sq_HoldAndDelayDie(object, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage);
|
|
sq_AddDrawOnlyAniFromParent(object, "character/swordman/effect/animation/1_atpriest_bykk/atbrionac/hold/bbholdlight_eff01.ani", 0, 0, sq_GetHeightObject(object) / 2);
|
|
sq_AddDrawOnlyAniFromParent(object, "character/swordman/effect/animation/1_atpriest_bykk/atbrionac/hold/bbholdaa_eff01.ani", 0, 0, sq_GetHeightObject(object) / 2);
|
|
sq_AddDrawOnlyAniFromParent(object, "character/swordman/effect/animation/1_atpriest_bykk/atbrionac/hold/bbholdab_eff11.ani", 0, 0, sq_GetHeightObject(object) / 2);
|
|
}
|
|
}
|
|
break;
|
|
case 104:
|
|
//`CutIn` 20 0 -42
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 6000.0 / currentAni.getDelaySum(0, 0).tofloat();
|
|
local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atbrionac/cutin/brionaccutina_eff01.ani";
|
|
local aniPath2 = "character/swordman/effect/animation/1_atpriest_bykk/atbrionac/cutin/brionaccutinc_bg05.ani";
|
|
local pooledObj = createOnlyDrawObject_ATPriest_bykk(obj,aniPath,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj),sq_GetZPos(obj)+142,ENUM_DRAWLAYER_BOTTOM);
|
|
local pooledObj2 = createOnlyDrawObject_ATPriest_bykk(obj,aniPath2,true,obj.getDirection(),sq_GetXPos(obj),sq_GetYPos(obj) - 1,sq_GetZPos(obj)+142,ENUM_DRAWLAYER_BOTTOM);
|
|
local sizeRate = 1.2;
|
|
local pAni = pooledObj.getCurrentAnimation();
|
|
pAni.setImageRateFromOriginal(sizeRate, sizeRate);
|
|
pAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
|
|
local pAni2 = pooledObj2.getCurrentAnimation();
|
|
pAni2.setImageRateFromOriginal(sizeRate, sizeRate);
|
|
pAni2.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
|
|
pAni.setSpeedRate(speedRate);
|
|
pAni2.setSpeedRate(speedRate);
|
|
break;
|
|
case 110:
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 6000.0 / currentAni.getDelaySum(0, 0).tofloat();
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atbrionac/body/brionacbody_eff09.ani", 0, -1, 0);
|
|
local pAni = pooledObj.getCurrentAnimation();
|
|
pAni.setSpeedRate(speedRate);
|
|
break;
|
|
case 111:
|
|
//`FlyStart` 0 0 0
|
|
local currentAni = obj.getCurrentAnimation();
|
|
obj.setTimeEvent(1, currentAni.getDelaySum(11, 14) / 60, 60, true);
|
|
break;
|
|
case 113:
|
|
sq_SetMyShake(obj, 5, 80);
|
|
break;
|
|
case 132:
|
|
//`DrawSpearCircle` 0 0 0
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atbrionac/spear/brionaclanceeff_eff08.ani", 0, 0, 0);
|
|
break;
|
|
case 152:
|
|
//`ThrowSpear` 100 -2 0
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 6000.0 / currentAni.getDelaySum(0, 0).tofloat();
|
|
local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BRIONAC, -1, 0, 1.0);
|
|
local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BRIONAC, -1, 1, 1.0);
|
|
// if(obj.isMyControlObject())
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,-50,-2,sq_GetZPos(obj) - 10,obj.getDirection(),1,SKILL_BYKK_BRIONAC,1,power,power_exp,speedRate.tointeger(),0,0,0,0,0);
|
|
break;
|
|
case 153:
|
|
//`SlowDown` 17 0 1
|
|
//`MoveScroll` -8 0 -40
|
|
obj.sq_SetXScrollStart(300, 200);
|
|
break;
|
|
case 162:
|
|
//`FlyEnd` -5 0 -27
|
|
local currentAni = obj.getCurrentAnimation();
|
|
obj.setTimeEvent(2, currentAni.getDelaySum(62, 65) / 60, 60, true);
|
|
obj.setTimeEvent(3, currentAni.getDelaySum(62, 64), 1, false);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Brionac(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 1:
|
|
local v = sq_GetAccel(0, 42, timeEventCount, 30, true);
|
|
sq_setCurrentAxisPos(obj, 2, v);
|
|
break;
|
|
case 2:
|
|
local v = sq_GetAccel(42, 0, timeEventCount, 60, false);
|
|
sq_setCurrentAxisPos(obj, 2, v);
|
|
// if(timeEventCount == 10) obj.setTimeEvent(3, 1000, 1, true);
|
|
break;
|
|
case 3:
|
|
sq_flashScreen(obj,80,200,0,255, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER);
|
|
sq_SetMyShake(obj, 24, 600);
|
|
local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_BRIONAC, -1, 1, 1.0);
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,150,1,-sq_GetZPos(obj),obj.getDirection(),1,SKILL_BYKK_BRIONAC,2,power_exp,0,0,0,0,0,0,0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Brionac(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
if(new_state != STATE_BYKK_BRIONAC){
|
|
obj.sq_SetXScrollStop(200);
|
|
local size = obj.getVar("Brionac_Tar").get_obj_vector_size();
|
|
if(size > 0){
|
|
for(local i = 0; i < size; i++){
|
|
local targetObj = obj.getVar("Brionac_Tar").get_obj_vector(i);
|
|
if(targetObj){
|
|
local activeObj = sq_GetCNRDObjectToActiveObject(targetObj);
|
|
CNSquirrelAppendage.sq_RemoveAppendage(activeObj, APDPATH_BRIONAC);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//圣言十字
|
|
function checkExecutableSkill_Cruxofshapiel(obj)
|
|
{
|
|
if (!obj) return false;
|
|
if(obj.getVar("cruxofshapiel_bool").getBool(0)){
|
|
obj.getVar("cruxofshapiel_bool").setBool(0, false);
|
|
local size = obj.getVar("cruxofshapiel_obj").get_obj_vector_size();
|
|
if(size > 0){
|
|
for(local i = 0; i < size; i++){
|
|
local aObj = obj.getVar("cruxofshapiel_obj").get_obj_vector(i);
|
|
if(aObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(aObj);
|
|
if(colObj.getVar("subtype").getInt(0) == 1) colObj.addSetStatePacket(23, null, STATE_PRIORITY_AUTO, false, "");
|
|
else colObj.addSetStatePacket(22, null, STATE_PRIORITY_AUTO, false, "");
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_CRUXOFSHAPIEL);
|
|
if (isUse){
|
|
obj.getVar("cruxofshapiel_obj").clear_obj_vector();
|
|
obj.getVar("cruxofshapiel_bool").setBool(0, false);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_CRUXOFSHAPIEL, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Cruxofshapiel(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Cruxofshapiel(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_CRUXOFSHAPIELREADY_BODY);
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 4100.0 / currentAni.getDelaySum(0, 0).tofloat();
|
|
local delay1 = 150 / speedRate.tointeger() * 100, delay2 = 1800 / speedRate.tointeger() * 100, delay3 = 400 / speedRate.tointeger() * 100;
|
|
sq_flashScreen(obj,delay1,delay2,delay3,204, sq_RGB(0, 0, 0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
}
|
|
|
|
function onEndCurrentAni_Cruxofshapiel(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_Cruxofshapiel(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Cruxofshapiel(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 108:
|
|
obj.sq_PlaySound("R_PW_CRUXOFSHAPIEL");
|
|
obj.sq_PlaySound("CRUXOFSHAPIEL_SHOT");
|
|
break;
|
|
case 109:
|
|
//`CreateCruxOfShapiel` 0 0 0
|
|
local power_fall = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CRUXOFSHAPIEL, -1, 0, 1.0);
|
|
local power = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CRUXOFSHAPIEL, -1, 1, 1.0);
|
|
local power_exp = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_CRUXOFSHAPIEL, -1, 2, 1.0);
|
|
local hitTime = sq_GetIntData(obj, SKILL_BYKK_CRUXOFSHAPIEL, 0);
|
|
// if(obj.isMyControlObject())
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,200,0,0,obj.getDirection(),1,SKILL_BYKK_CRUXOFSHAPIEL,1,power_fall,power,power_exp,hitTime,0,0,0,0);
|
|
local buffTime = hitTime * 21 + 2080;
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_CRUXOFSHAPIEL)) CNSquirrelAppendage.sq_RemoveAppendage(obj, APDPATH_CRUXOFSHAPIEL);
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, APDPATH_CRUXOFSHAPIEL, true);
|
|
AddAppendage.sq_SetValidTime(buffTime);
|
|
AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_CRUXOFSHAPIEL, sq_GetSkillLevel(obj, SKILL_BYKK_CRUXOFSHAPIEL));
|
|
CNSquirrelAppendage.sq_Append(AddAppendage, obj, obj, true);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Cruxofshapiel(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 0:
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Cruxofshapiel(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
////////////////////女圣骑设置
|
|
|
|
function setSkillBonusBate_Crusader_bykk(obj)
|
|
{
|
|
local bonusRate = 1000;
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_CRUSADE) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_CRUSADE, 6, sq_GetSkillLevel(obj, SKILL_BYKK_CRUSADE))) / 1000;
|
|
print("bonusRate1 = "+bonusRate);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_LUCULENTUISANGEL) > 0) bonusRate = bonusRate * (1000 + sq_GetLevelData(obj, SKILL_BYKK_LUCULENTUISANGEL, 0, sq_GetSkillLevel(obj, SKILL_BYKK_LUCULENTUISANGEL))) / 1000;
|
|
print("bonusRate2 = "+bonusRate);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, APDPATH_BLESSOFCOURAGE)) bonusRate * (1000 + bonusRate + sq_GetLevelData(obj, SKILL_BYKK_BLESSOFCOURAGE, 7, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFCOURAGE))) / 1000;
|
|
print("bonusRate3 = "+bonusRate);
|
|
obj.getVar("setSkillBonusRate").setInt(0, bonusRate.tointeger());
|
|
//sq_SetSkillAttackBonus(obj, bonusRate);
|
|
}
|
|
|
|
function onStartDungeon_Crusader_bykk(obj)
|
|
{
|
|
local apdPath = [APDPATH_BLESSOFCOURAGE, APDPATH_BLESSOFPROTECTION, APDPATH_HOLYLIGHT, APDPATH_EDIFICATION];
|
|
for(local i = 0; i < apdPath.len(); i++){
|
|
local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, apdPath[i]);
|
|
if(AddAppendage) CNSquirrelAppendage.sq_RemoveAppendage(obj, apdPath[i]);
|
|
}
|
|
setSkillBonusBate_Crusader_bykk(obj);
|
|
local now_mgAttack = sq_GetMagicalAttack();//1000;//
|
|
now_mgAttack = now_mgAttack * (100 + sq_GetIntData(obj, 169, 2)) / 100;
|
|
obj.getVar("isReset").setInt(0, 1);
|
|
obj.getVar("mgAttackSave").setInt(0, now_mgAttack);
|
|
print("now_mgAttack = "+now_mgAttack);
|
|
}
|
|
|
|
function retset_Crusader_bykk(obj)
|
|
{
|
|
setSkillBonusBate_Crusader_bykk(obj);
|
|
if(obj.getVar("mgAttackSave").getInt(0) > 0) return;
|
|
local now_mgAttack = sq_GetMagicalAttack();//1000;//
|
|
now_mgAttack = now_mgAttack * (100 + sq_GetIntData(obj, 169, 2)) / 100;
|
|
obj.getVar("mgAttackSave").setInt(0, now_mgAttack);
|
|
print("now_mgAttack = "+now_mgAttack);
|
|
}
|
|
|
|
function procSkill_Crusader_bykk(obj)
|
|
{
|
|
if(obj.getVar("canUseSkill").getBool(0)){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_BLESSOFCOURAGE, false);
|
|
// obj.setSkillCommandEnable(SKILL_BYKK_CRUXOFVICTORIA, false);
|
|
}
|
|
if(sq_GetIntData(obj, SKILL_BYKK_REPENTENCESMASH, 10) > 0 && sq_GetIntData(obj, SKILL_BYKK_REPENTENCESMASH, 10) != 5000){
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_REPENTENCESMASH);
|
|
if(loadSlot){
|
|
if(!loadSlot.isCooling()){
|
|
local getNumber = loadSlot.getRemainLoadNumber();
|
|
if(getNumber + 1 <= 2){
|
|
loadSlot.increaseLoadCount(1);
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
local coolTime = 15000;
|
|
if(sq_GetIntData(obj, SKILL_BYKK_REPENTENCESMASH, 10) > 5000) coolTime = 10000;
|
|
obj.sq_AddSkillLoad(SKILL_BYKK_REPENTENCESMASH, 112, 2, coolTime);
|
|
}
|
|
}
|
|
else{
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_REPENTENCESMASH);
|
|
if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_REPENTENCESMASH);
|
|
}
|
|
}
|
|
|
|
function setState_Crusader_canUseSkill(obj, state, datas, isResetTimer)
|
|
{
|
|
if(state == 13 && (sq_GetVectorData(datas, 2) == 7 || sq_GetVectorData(datas, 2) == 53)){
|
|
print("test");
|
|
local objectManager = obj.getObjectManager();
|
|
local objectNumber = objectManager.getCollisionObjectNumber();
|
|
local count = 0;
|
|
for (local i = 0; i < objectNumber; i++){
|
|
local object = objectManager.getCollisionObject(i);
|
|
if(object && !obj.isEnemy(object) && object.isObjectType(OBJECTTYPE_CHARACTER)){
|
|
local sqrChr = sq_GetCNRDObjectToSQRCharacter(object);
|
|
if(!CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_BLESSOFCOURAGEBOOL)) CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, APDPATH_BLESSOFCOURAGEBOOL, true);
|
|
if(sq_getJob(sqrChr) == ENUM_CHARACTERJOB_AT_MAGE && sq_getGrowType(sqrChr) == 1){
|
|
sqrChr.getVar("canUseSkill").setBool(0, true);
|
|
count = count + 1;
|
|
}
|
|
}
|
|
}
|
|
if(count > 0){
|
|
for (local i = 0; i < objectNumber; i++){
|
|
local object = objectManager.getCollisionObject(i);
|
|
if(object && !obj.isEnemy(object) && object.isObjectType(OBJECTTYPE_CHARACTER)){
|
|
local sqrChr = sq_GetCNRDObjectToSQRCharacter(object);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_BLESSOFCOURAGE)) CNSquirrelAppendage.sq_RemoveAppendage(sqrChr, APDPATH_BLESSOFCOURAGE);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/////////////////////////////被动
|
|
function onStart_appendage_atpriest_aria(appendage)
|
|
{
|
|
if(!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
|
if(!obj || obj.getState() == STATE_DIE) return;
|
|
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_ARIA);
|
|
local mgAttack = sq_GetLevelData(obj, SKILL_BYKK_ARIA, 0, skillLevel);
|
|
|
|
local change_appendage = appendage.sq_getChangeStatus("atpriest_aria");
|
|
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("atpriest_aria", obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, (mgAttack).tofloat());
|
|
}
|
|
}
|
|
|
|
function onStart_appendage_atpriest_blessofraphael(appendage)
|
|
{
|
|
if(!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
|
if(!obj || obj.getState() == STATE_DIE) return;
|
|
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFRAPHAEL);
|
|
local mgAttack = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFRAPHAEL, 0, skillLevel);
|
|
local mgctlRate = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFRAPHAEL, 1, skillLevel);
|
|
local mgctldmgRate = sq_GetLevelData(obj, SKILL_BYKK_BLESSOFRAPHAEL, 2, skillLevel);
|
|
|
|
local change_appendage = appendage.sq_getChangeStatus("atpriest_blessofraphael");
|
|
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("atpriest_blessofraphael", obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, (mgAttack).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_HIT_RATE, false, (mgctlRate * 0.1).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_CRITICAL_DAMAGE_RATE, false, (mgAttack * 0.1 / 0.667).tofloat());
|
|
}
|
|
}
|
|
|
|
function onStart_appendage_atcrusader_weaponmastery(appendage)
|
|
{
|
|
if(!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
|
if(!obj || obj.getState() == STATE_DIE) return;
|
|
local weaponType = obj.getWeaponSubType();
|
|
if(weaponType == -1) return;
|
|
if(weaponType == 0){
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CROSSMASTERY);
|
|
local adtEquAttack = sq_GetLevelData(obj, SKILL_BYKK_CROSSMASTERY, 0, skillLevel);
|
|
local castSpeed = sq_GetLevelData(obj, SKILL_BYKK_CROSSMASTERY, 1, skillLevel);
|
|
local mgctlRate = sq_GetLevelData(obj, SKILL_BYKK_CROSSMASTERY, 2, skillLevel);
|
|
|
|
local change_appendage = appendage.sq_getChangeStatus("crossmastery");
|
|
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("crossmastery",obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK , true, (adtEquAttack * 0.1).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_CAST_SPEED, false, (castSpeed * 0.1).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_BACK_ATTACK_CRITICAL, false, (mgctlRate * 0.1).tofloat());
|
|
}
|
|
}
|
|
}
|
|
|
|
function onStart_appendage_atpriest_crusade(appendage)
|
|
{
|
|
if(!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
|
if(!obj || obj.getState() == STATE_DIE) return;
|
|
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_CRUSADE);
|
|
local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_CRUSADE, 5, skillLevel);
|
|
|
|
local change_appendage = appendage.sq_getChangeStatus("atpriest_crusade");
|
|
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("atpriest_crusade", obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed * 0.1).tofloat());
|
|
}
|
|
}
|
|
|
|
function onStart_appendage_atpriest_graceofdevine(appendage)
|
|
{
|
|
if(!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
|
if(!obj || obj.getState() == STATE_DIE) return;
|
|
|
|
local lightTolerance = sq_GetIntData(obj, SKILL_BYKK_GRACEOFDEVINE, 2);
|
|
local actTolerance = sq_GetIntData(obj, SKILL_BYKK_GRACEOFDEVINE, 3);
|
|
local countMax = sq_GetIntData(obj, SKILL_BYKK_GRACEOFDEVINE, 0);
|
|
local debuffTime = sq_GetIntData(obj, SKILL_BYKK_GRACEOFDEVINE, 1);
|
|
local decrease = sq_GetLevelData(obj, SKILL_BYKK_GRACEOFDEVINE, 0, sq_GetSkillLevel(obj, SKILL_BYKK_GRACEOFDEVINE));
|
|
appendage.getVar("custom").setInt(10, countMax);
|
|
appendage.getVar("custom").setInt(11, debuffTime);
|
|
appendage.getVar("custom").setInt(12, decrease);
|
|
|
|
local change_appendage = appendage.sq_getChangeStatus("atpriest_graceofdevine");
|
|
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("atpriest_graceofdevine", obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_LIGHT, false, (lightTolerance).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_ACTIVESTATUS_TOLERANCE_ALL, false, (actTolerance).tofloat());
|
|
}
|
|
}
|
|
|
|
function onAttackParent_appendage_atpriest_graceofdevine(appendage, realAttacker, damager, boundingBox, isStuck)
|
|
{
|
|
if(!appendage) return;
|
|
return;
|
|
if(isStuck) return;
|
|
local parentObj = appendage.getParent();
|
|
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
|
if(!obj || obj.getState() == STATE_DIE) return;
|
|
if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return;
|
|
local activeObj = sq_GetCNRDObjectToActiveObject(damager);
|
|
local AddAppendage;
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_GRACEOFDEVINEDEBUFF)) AddAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, APDPATH_GRACEOFDEVINEDEBUFF);
|
|
else{
|
|
AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(activeObj, obj, -1, false, APDPATH_GRACEOFDEVINEDEBUFF, true);
|
|
AddAppendage.getVar("debuffTime").setInt(10, appendage.getVar("custom").getInt(11));
|
|
}
|
|
local timer = AddAppendage.getVar().get_ct_vector(0);
|
|
if(!timer){
|
|
AddAppendage.getVar().clear_ct_vector();
|
|
AddAppendage.getVar().push_ct_vector();
|
|
timer = AddAppendage.getVar().get_ct_vector(0);
|
|
}
|
|
timer.Reset();
|
|
timer.Start(10000,0);
|
|
if(AddAppendage.getVar("count").getInt(10) < appendage.getVar("custom").getInt(10)){
|
|
AddAppendage.getVar("count").setInt(10, AddAppendage.getVar("count").getInt(10) + 1);
|
|
}
|
|
|
|
local decrease = appendage.getVar("custom").getInt(12) * AddAppendage.getVar("count").getInt(10);
|
|
local change_appendage = AddAppendage.sq_getChangeStatus("atpriest_graceofdevine");
|
|
if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("atpriest_graceofdevine", activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_ALL, false, (decrease * -1).tofloat());
|
|
}
|
|
}
|
|
|
|
function proc_appendage_graceofdevinedebuff(appendage)
|
|
{
|
|
if(!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj || parentObj.getState() == STATE_DIE){
|
|
appendage.setValid(false);
|
|
return;
|
|
}
|
|
|
|
local timer = appendage.getVar().get_ct_vector(0);
|
|
if(timer){
|
|
local currentT = timer.Get();
|
|
if(currentT > appendage.getVar("debuffTime").getInt(10)){
|
|
appendage.getVar("count").setInt(10, 0);
|
|
timer.Reset();
|
|
timer.Start(10000,0);
|
|
}
|
|
}
|
|
}
|
|
|
|
function onStart_appendage_atpriest_luculentuisangel(appendage)
|
|
{
|
|
if(!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
|
if(!obj || obj.getState() == STATE_DIE) return;
|
|
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_LUCULENTUISANGEL);
|
|
local mgAttack = sq_GetLevelData(obj, SKILL_BYKK_LUCULENTUISANGEL, 1, skillLevel);
|
|
|
|
local change_appendage = appendage.sq_getChangeStatus("atpriest_luculentuisangel");
|
|
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("atpriest_luculentuisangel", obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, (mgAttack).tofloat());
|
|
}
|
|
}
|
|
|
|
function onStart_appendage_atpriest_zealoffaith(appendage)
|
|
{
|
|
if(!appendage) return;
|
|
local parentObj = appendage.getParent();
|
|
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
|
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_ZEALOFFAITH);
|
|
local addAttack = sq_GetLevelData(obj, SKILL_BYKK_ZEALOFFAITH, 0, skillLevel);
|
|
local addDefense = sq_GetLevelData(obj, SKILL_BYKK_ZEALOFFAITH, 1, skillLevel);
|
|
local attackSpeed = sq_GetLevelData(obj, SKILL_BYKK_ZEALOFFAITH, 2, skillLevel);
|
|
local moveSpeed = sq_GetLevelData(obj, SKILL_BYKK_ZEALOFFAITH, 3, skillLevel);
|
|
// local addTime = sq_GetIntData(obj, SKILL_BYKK_ZEALOFFAITH, 1);
|
|
// appendage.getVar("custom").setInt(10, addAttack);
|
|
// appendage.getVar("custom").setInt(11, addDefense);
|
|
// appendage.getVar("custom").setInt(12, attackSpeed);
|
|
// appendage.getVar("custom").setInt(13, moveSpeed);
|
|
// appendage.getVar("custom").setInt(14, addTime);
|
|
// appendage.getVar("user").clear_obj_vector();
|
|
|
|
// appendage.getVar().clear_timer_vector();
|
|
// appendage.getVar().push_timer_vector();
|
|
// local t = appendage.getVar().get_timer_vector(0);
|
|
// t.setParameter(1000, -1);
|
|
// t.resetInstant(0);
|
|
|
|
local change_appendage = appendage.sq_getChangeStatus("atpriest_luculentuisangel");
|
|
if(!change_appendage) change_appendage = appendage.sq_AddChangeStatus("atpriest_luculentuisangel", obj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
|
if(change_appendage){
|
|
change_appendage.clearParameter();
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, false, (addAttack).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, (addAttack).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_DEFENSE, false, (addDefense).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_DEFENSE, false, (addDefense).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed).tofloat());
|
|
change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed).tofloat());
|
|
}
|
|
}
|
|
|
|
function proc_appendage_atpriest_zealoffaith(appendage)
|
|
{
|
|
if(!appendage) return;
|
|
// if(sq_GetCurrentModuleType() != 3) return;
|
|
local parentObj = appendage.getParent();
|
|
local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
|
if(!obj || obj.getState() == STATE_DIE){
|
|
appendage.setValid(false);
|
|
return;
|
|
}
|
|
|
|
// local t = appendage.getVar().get_timer_vector(0);
|
|
// local currentT = appendage.getTimer().Get();
|
|
// if(t && t.isOnEvent(currentT)){
|
|
// local addAttack = appendage.getVar("custom").getInt(10);
|
|
// local addDefense = appendage.getVar("custom").getInt(11);
|
|
// local attackSpeed = appendage.getVar("custom").getInt(12);
|
|
// local moveSpeed = appendage.getVar("custom").getInt(13);
|
|
|
|
// local objectManager = obj.getObjectManager();
|
|
// local objectNumber = objectManager.getCollisionObjectNumber();
|
|
// for (local i = 0; i < objectNumber; i++){
|
|
// local object = objectManager.getCollisionObject(i);
|
|
// if(object && object.isObjectType(OBJECTTYPE_CHARACTER) && !obj.isEnemy(object)){// && isSameObject(obj, object)
|
|
// local sqrChr = sq_GetCNRDObjectToSQRCharacter(object);
|
|
// if(sqrChr.getState() == STATE_DIE || sqrChr.getHp() <= 0) continue;
|
|
// if(!CNSquirrelAppendage.sq_IsAppendAppendage(sqrChr, APDPATH_ZEALOFFAITHBUFF)){
|
|
// if(!appendage.getVar("user").is_obj_vector(sqrChr)) appendage.getVar("user").push_obj_vector(sqrChr);
|
|
// local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, obj, -1, false, APDPATH_ZEALOFFAITHBUFF, true);
|
|
// AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_ZEALOFFAITH, sq_GetSkillLevel(obj, SKILL_BYKK_ZEALOFFAITH));
|
|
// CNSquirrelAppendage.sq_Append(AddAppendage, sqrChr, obj, true);
|
|
|
|
// local tiaozheng = 1;
|
|
// if(isSameObject(obj, sqrChr)){
|
|
// tiaozheng = 0;
|
|
// }
|
|
|
|
// local change_appendage = AddAppendage.sq_getChangeStatus("atpriest_zealoffaithbuff");
|
|
// if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("atpriest_zealoffaithbuff", sqrChr, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
|
// if(change_appendage){
|
|
// change_appendage.clearParameter();
|
|
// change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, false, (addAttack * tiaozheng).tofloat());
|
|
// change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, (addAttack * tiaozheng).tofloat());
|
|
// change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_DEFENSE, false, (addDefense).tofloat());
|
|
// change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_DEFENSE, false, (addDefense).tofloat());
|
|
// change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, (attackSpeed).tofloat());
|
|
// change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, (moveSpeed).tofloat());
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
}
|
|
|
|
function onAttackParent_appendage_atpriest_zealoffaith(appendage, realAttacker, damager, boundingBox, isStuck)
|
|
{
|
|
if(!appendage) return;
|
|
return;
|
|
// if(isStuck) return;
|
|
// local parentObj = appendage.getParent();
|
|
// local obj = sq_GetCNRDObjectToSQRCharacter(parentObj);
|
|
// if(!obj || obj.getState() == STATE_DIE) return;
|
|
// if(obj.getState() == STATE_ATTACK || obj.getState() == STATE_DASH_ATTACK || obj.getState() == STATE_JUMP_ATTACK) return;
|
|
// if(!damager.isObjectType(OBJECTTYPE_ACTIVE)) return;
|
|
// local size = appendage.getVar("user").get_obj_vector_size();
|
|
// if(size > 0){
|
|
// local addTime = appendage.getVar("custom").getInt(14);
|
|
// for(local i = 0; i < size; i++){
|
|
// local sqr = appendage.getVar("user").get_obj_vector(i);
|
|
// if(sqr){
|
|
// local activeObj = sq_GetCNRDObjectToActiveObject(sqr);
|
|
// if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFCOURAGE)){
|
|
// local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, APDPATH_BLESSOFCOURAGE);
|
|
// if(AddAppendage){
|
|
// local useTime = AddAppendage.getTimer().Get();
|
|
// local validT = AddAppendage.getAppendageInfo().getValidTime();
|
|
// AddAppendage.sq_SetValidTime(validT + addTime - useTime);
|
|
// print(validT + addTime - useTime);
|
|
// AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_BLESSOFCOURAGE, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFCOURAGE));
|
|
// CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, obj, true);
|
|
|
|
// local phAttack = AddAppendage.getVar("custom").getInt(10);
|
|
// local mgAttack = AddAppendage.getVar("custom").getInt(11);
|
|
// local adtAttack = AddAppendage.getVar("custom").getInt(12);
|
|
// local phlAttack = AddAppendage.getVar("custom").getInt(13);
|
|
// local mglAttack = AddAppendage.getVar("custom").getInt(14);
|
|
// local stuckRate = AddAppendage.getVar("custom").getInt(15);
|
|
|
|
// local change_appendage = AddAppendage.sq_getChangeStatus("AT_Blessofcourage");
|
|
// if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Blessofcourage",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
|
// if(change_appendage){
|
|
// change_appendage.clearParameter();
|
|
// change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_ATTACK, false, (phAttack).tofloat());
|
|
// change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_ATTACK, false, (mgAttack).tofloat());
|
|
// change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_PHYSICAL_GENUINE_ATTACK, false, (adtAttack).tofloat());
|
|
// change_appendage.addParameter(CHANGE_STATUS_TYPE_ADDITIONAL_MAGICAL_GENUINE_ATTACK, false, (adtAttack).tofloat());
|
|
// change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, false, (phlAttack).tofloat());
|
|
// change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, (mglAttack).tofloat());
|
|
// change_appendage.addParameter(CHANGE_STATUS_TYPE_STUCK, false, (stuckRate * -0.1).tofloat());
|
|
// }
|
|
// }
|
|
// }
|
|
// if(CNSquirrelAppendage.sq_IsAppendAppendage(activeObj, APDPATH_BLESSOFPROTECTION)){
|
|
// local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(activeObj, APDPATH_BLESSOFPROTECTION);
|
|
// if(AddAppendage){
|
|
// local useTime = AddAppendage.getTimer().Get();
|
|
// local validT = AddAppendage.getAppendageInfo().getValidTime();
|
|
// AddAppendage.sq_SetValidTime(validT + addTime - useTime);
|
|
// AddAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BYKK_BLESSOFPROTECTION, sq_GetSkillLevel(obj, SKILL_BYKK_BLESSOFPROTECTION));
|
|
// CNSquirrelAppendage.sq_Append(AddAppendage, activeObj, obj, true);
|
|
|
|
// local hpMax = AddAppendage.getVar("custom").getInt(11);
|
|
// local mpMax = AddAppendage.getVar("custom").getInt(12);
|
|
// local phDefense = AddAppendage.getVar("custom").getInt(13);
|
|
// local mgDefense = AddAppendage.getVar("custom").getInt(14);
|
|
// local phlDefense = AddAppendage.getVar("custom").getInt(15);
|
|
// local mglDefense = AddAppendage.getVar("custom").getInt(16);
|
|
|
|
// local change_appendage = AddAppendage.sq_getChangeStatus("AT_Blessofprotection");
|
|
// if(!change_appendage) change_appendage = AddAppendage.sq_AddChangeStatus("AT_Blessofprotection",activeObj, obj, 0, CHANGE_STATUS_TYPE_PHYSICAL_ATTACK, true, 1000);
|
|
// if(change_appendage){
|
|
// change_appendage.clearParameter();
|
|
// change_appendage.addParameter(CHANGE_STATUS_TYPE_HP_MAX, false, (hpMax).tofloat());
|
|
// change_appendage.addParameter(CHANGE_STATUS_TYPE_MP_MAX, false, (mpMax).tofloat());
|
|
// change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_PHYSICAL_DEFENSE, false, (phDefense).tofloat());
|
|
// change_appendage.addParameter(CHANGE_STATUS_TYPE_EQUIPMENT_MAGICAL_DEFENSE, false, (mgDefense).tofloat());
|
|
// change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_DEFENSE, false, (phlDefense).tofloat());
|
|
// change_appendage.addParameter(CHANGE_STATUS_TYPE_PHYSICAL_DEFENSE, false, (mglDefense).tofloat());
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
}
|
|
|
|
function proc_appendage_atpriest_zealoffaithbuff(appendage)
|
|
{
|
|
if(!appendage) return;
|
|
|
|
local parentObj = appendage.getParent();
|
|
if(!parentObj || parentObj.getState() == STATE_DIE){
|
|
appendage.setValid(false);
|
|
return;
|
|
}
|
|
local sourceObj = appendage.getSource();
|
|
if(!sourceObj || sourceObj.getState() == STATE_DIE){
|
|
appendage.setValid(false);
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////
|
|
|
|
function getAttackAni_DemonicSwordman(obj, index)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetAttackAni(index);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_BODYPRESSEDSIN) > 0){
|
|
ani = sq_GetCustomAni(obj, ATPANI_BYKK_MISTRESS_ATTACK1 + index);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
local aniName = ["demonizationattack_basic_a_body","demonizationattack_basic_b_body","demonizationattack_basic_c_body"];
|
|
ani = getCurrentAnimation_demonization(obj, aniName[index], false);
|
|
}
|
|
}
|
|
else if(sq_GetSkillLevel(obj, SKILL_BYKK_CRUSADE) > 0){
|
|
ani = sq_GetCustomAni(obj, ATPANI_BYKK_CRUSADEATTACK1_BODY + index);
|
|
}
|
|
else if(sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0){
|
|
ani = sq_GetCustomAni(obj, ATPANI_BYKK_INQUISITOR_ATTACK1 + index);
|
|
}
|
|
return ani;
|
|
}
|
|
|
|
function getStayAni_DemonicSwordman(obj)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetStayAni();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
ani = getCurrentAnimation_demonization(obj, "demonization_stay", false);
|
|
return ani;
|
|
}
|
|
return ani;
|
|
}
|
|
|
|
function getMoveAni_DemonicSwordman(obj)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetMoveAni();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
ani = getCurrentAnimation_demonization(obj, "demonization_move", false);
|
|
return ani;
|
|
}
|
|
return ani;
|
|
}
|
|
|
|
function getSitAni_DemonicSwordman(obj)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetSitAni();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
ani = getCurrentAnimation_demonization(obj, "demonization_sit", false);
|
|
return ani;
|
|
}
|
|
return ani;
|
|
}
|
|
|
|
function getDamageAni_DemonicSwordman(obj, index)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetDamageAni(index);
|
|
local aniName = ["demonization_damage1","demonization_damage2"];
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
ani = getCurrentAnimation_demonization(obj, aniName[index], false);
|
|
return ani;
|
|
}
|
|
return ani;
|
|
}
|
|
|
|
function getDownAni_DemonicSwordman(obj)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetDownAni();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
ani = getCurrentAnimation_demonization(obj, "demonization_down", false);
|
|
return ani;
|
|
}
|
|
return ani;
|
|
}
|
|
|
|
function getOverturnAni_DemonicSwordman(obj)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetOverturnAni();
|
|
return ani;
|
|
}
|
|
|
|
function getJumpAni_DemonicSwordman(obj)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetJumpAni();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
ani = getCurrentAnimation_demonization(obj, "demonization_jump", false);
|
|
return ani;
|
|
}
|
|
return ani;
|
|
}
|
|
|
|
function getJumpAttackAni_DemonicSwordman(obj)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetJumpAttackAni();
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_CRUSADE) > 0){
|
|
ani = sq_GetCustomAni(obj, ATPANI_BYKK_CRUSADEJUMPATTACK_BODY);
|
|
}
|
|
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
ani = getCurrentAnimation_demonization(obj, "demonizationattack_jump_body", false);
|
|
return ani;
|
|
}
|
|
return ani;
|
|
}
|
|
|
|
function getRestAni_DemonicSwordman(obj)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetRestAni();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
ani = getCurrentAnimation_demonization(obj, "demonization_stay", false);
|
|
return ani;
|
|
}
|
|
return ani;
|
|
}
|
|
|
|
function getThrowChargeAni_DemonicSwordman(obj, index)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetThrowChargeAni(index);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
ani = getCurrentAnimation_demonization(obj, "demonization_throw1", false);
|
|
return ani;
|
|
}
|
|
return ani;
|
|
}
|
|
|
|
function getThrowShootAni_DemonicSwordman(obj, index)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetThrowShootAni(index);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
ani = getCurrentAnimation_demonization(obj, "demonization_throw2", false);
|
|
return ani;
|
|
}
|
|
return ani;
|
|
}
|
|
|
|
function getDashAni_DemonicSwordman(obj)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetDashAni();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
ani = getCurrentAnimation_demonization(obj, "demonization_dash", false);
|
|
return ani;
|
|
}
|
|
return ani;
|
|
}
|
|
|
|
function getDashAttackAni_DemonicSwordman(obj)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetDashAttackAni();
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_CRUSADE) > 0){
|
|
ani = sq_GetCustomAni(obj, ATPANI_BYKK_CRUSADEDASHATTACK_BODY);
|
|
}
|
|
else if(sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0){
|
|
ani = sq_GetCustomAni(obj, ATPANI_BYKK_HOLYFLAME_FRONT_BODY);
|
|
}
|
|
else if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
ani = getCurrentAnimation_demonization(obj, "demonizationattack_dash_body", false);
|
|
return ani;
|
|
}
|
|
return ani;
|
|
}
|
|
|
|
function getGetItemAni_DemonicSwordman(obj)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetGetItemAni();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
ani = getCurrentAnimation_demonization(obj, "demonization_sit", false);
|
|
return ani;
|
|
}
|
|
return ani;
|
|
}
|
|
|
|
function getBuffAni_DemonicSwordman(obj)
|
|
{
|
|
if(!obj) return null;
|
|
local ani = obj.sq_GetBuffAni();
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
ani = getCurrentAnimation_demonization(obj, "demonization_buff", false);
|
|
return ani;
|
|
}
|
|
return ani;
|
|
}
|
|
|
|
|
|
function getDefaultAttackInfo_DemonicSwordman(obj, index)
|
|
{
|
|
if (!obj) return null;
|
|
local attackInfo = obj.sq_GetDefaultAttackInfo(index);
|
|
local growType = sq_getGrowType(obj);
|
|
switch(growType){
|
|
case 1:
|
|
if(index == 4) index = 0;
|
|
attackInfo = sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_CRUSADERATTACK1 + index);
|
|
break;
|
|
case 2:
|
|
attackInfo = sq_GetCustomAttackInfo(obj, ATPATK_BYKK_INQUISITOR_ATTACK1 + index);
|
|
break;
|
|
}
|
|
return attackInfo;
|
|
}
|
|
|
|
function getDashAttackInfo_DemonicSwordman(obj)
|
|
{
|
|
if (!obj) return null;
|
|
local attackInfo = obj.sq_GetDashAttackInfo();
|
|
if(sq_getGrowType(obj) == 1){
|
|
attackInfo = sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_CRUSADERDASHATTACK);
|
|
}
|
|
return attackInfo;
|
|
}
|
|
|
|
function getJumpAttackInfo_DemonicSwordman(obj)
|
|
{
|
|
if (!obj) return null;
|
|
local attackInfo = obj.sq_GetJumpAttackInfo();
|
|
if(sq_getGrowType(obj) == 1){
|
|
attackInfo = sq_GetCustomAttackInfo(obj, ATPRIESTATK_BYKK_CRUSADERJUMPATTACK);
|
|
}
|
|
return attackInfo;
|
|
}
|
|
|
|
function onSetState_ATPriestAttack(obj, state, datas, isResetTimer)
|
|
{
|
|
if(sq_getGrowType(obj) == 4){
|
|
if(sq_GetVectorData(datas, 0) != 0) return;
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_BODYPRESSEDSIN) > 0){
|
|
//print("test");
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(10);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_DEPRAVITYSEVENSINS, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
}
|
|
}
|
|
else if(sq_getGrowType(obj) == 1) {
|
|
local attackIndex = sq_GetVectorData(datas, 0);
|
|
switch(attackIndex){
|
|
case 0: obj.sq_PlaySound("R_PW_1ATK"); break;
|
|
case 1: obj.sq_PlaySound("R_PW_2ATK"); break;
|
|
case 2: obj.sq_PlaySound("R_PW_3ATK"); break;
|
|
}
|
|
}
|
|
}
|
|
|
|
function onAfterSetState_ATPriestAttack(obj, state, datas, isResetTimer)
|
|
{
|
|
//
|
|
local growType = sq_getGrowType(obj);
|
|
switch(growType){
|
|
case 2:
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0){
|
|
local attackIndex = obj.getAttackIndex();
|
|
switch(attackIndex){
|
|
case 0: obj.sq_PlaySound("R_PW_INQUISITOR_READING_01"); obj.sq_PlaySound("R_PW_1ATK"); break;
|
|
case 1: obj.sq_PlaySound("R_PW_INQUISITOR_READING_02"); obj.sq_PlaySound("R_PW_2ATK"); break;
|
|
case 2: obj.sq_PlaySound("R_PW_INQUISITOR_READING_03"); obj.sq_PlaySound("R_PW_3ATK"); break;
|
|
}
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot){
|
|
local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
attackInfo.setElement(ENUM_ELEMENT_LIGHT);
|
|
attackInfo.setElement(ENUM_ELEMENT_FIRE);
|
|
switch(attackIndex){
|
|
case 0:
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/attack1.ani"), 0, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atwillofinquisitor/attack1_holyflamea_1hitsmokea.ani", 0, 1, 0);
|
|
break;
|
|
case 1:
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/attack2.ani"), 0, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atwillofinquisitor/attack2_holyflame_2hitsmoke.ani", 0, 1, 0);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
obj.setTimeEvent(1, currentAni.getDelaySum(0, 3), 1, false);
|
|
break;
|
|
case 2:
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/attack3.ani"), 0, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atwillofinquisitor/attack3_holyflame_3hitsmoke.ani", 0, 1, 0);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
obj.setTimeEvent(1, currentAni.getDelaySum(0, 6), 1, false);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
obj.getVar("cansetAttackInfo").setBool(0, true);
|
|
}
|
|
|
|
function onTimeEvent_ATPriestAttack(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
local growType = sq_getGrowType(obj);
|
|
switch(growType){
|
|
case 2:
|
|
switch(timeEventIndex){
|
|
case 1:
|
|
local epObj = obj.getVar("EssenceofPhlegeObj").get_obj_vector(0);
|
|
if(epObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(epObj);
|
|
if(((sq_GetXPos(colObj) - sq_GetXPos(obj)) <= 200 && sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT || (sq_GetXPos(obj) - sq_GetXPos(colObj)) <= 200 && sq_GetDirection(obj) == ENUM_DIRECTION_LEFT) && sq_Abs(sq_GetYPos(colObj) - sq_GetYPos(obj)) <= 40){
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ESSENCEOFPHLEGE, -1, 1, 1.0);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 13);
|
|
createSkillPassive_ATPriest_bykk(obj,colObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,-sq_GetZPos(obj) + 100,obj.getDirection(),2,SKILL_BYKK_ESSENCEOFPHLEGE,5,totalDamage,sizeRate,0,0,0,0,0,0);
|
|
sq_SetMyShake(obj, 2, 100);
|
|
colObj.setTimeEvent(1, 1000, 1, true);
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onBeforeAttack_ATPriestAttack(obj,damager,boundingBox,isStuck)
|
|
{
|
|
if(obj.getVar("cansetAttackInfo").getBool(0)){
|
|
obj.getVar("cansetAttackInfo").setBool(0, false);
|
|
obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),obj.getState());
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCurrentAttackInfo(obj));
|
|
}
|
|
local growType = sq_getGrowType(obj);
|
|
switch(growType){
|
|
case 1:
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_GRACEOFDEVINE) > 0){
|
|
local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
attackInfo.setElement(ENUM_ELEMENT_LIGHT);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onAttack_ATPriestAttack(obj, damager, boundingBox, isStuck)
|
|
{
|
|
if(!obj || isStuck) return;
|
|
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox);
|
|
}
|
|
}
|
|
|
|
function getAttackCancelStartFrameSize_DemonicSwordman(obj)
|
|
{
|
|
local maxAttackNumber = obj.sq_GetAttackCancelStartFrameSize();
|
|
if(sq_getGrowType(obj) == 2){
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0) maxAttackNumber = 2;
|
|
}
|
|
return maxAttackNumber;
|
|
}
|
|
|
|
function getAttackCancelStartFrame_DemonicSwordman(obj, index)
|
|
{
|
|
if(!obj) return null;
|
|
local growType = sq_getGrowType(obj);
|
|
local frm = obj.sq_GetAttackCancelStartFrame(index);
|
|
switch(growType){
|
|
case 1:
|
|
switch(index){
|
|
case 0: frm = 2; break;
|
|
case 1: frm = 3; break;
|
|
}
|
|
break;
|
|
case 2: frm = 3; break;
|
|
}
|
|
return frm;
|
|
}
|
|
|
|
function onSetState_ATPriestDashAttack(obj, state, datas, isResetTimer)
|
|
{
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
obj.sq_PlaySound("PW_DASHATK_DM");
|
|
obj.sq_PlaySound("R_SCYTHE");
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_dash_glow.ani"), 0, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_dash_staydusta.ani", 0, -1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_dash_staydustb.ani", 0, -1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_dash_staydustc.ani", 0, -1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_dash_stayrosea.ani", 0, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_dash_stayroseb.ani", 0, 1, 0);
|
|
}
|
|
else obj.sq_PlaySound("R_PW_3ATK");
|
|
}
|
|
|
|
function onAfterSetState_ATPriestDashAttack(obj, state, datas, isResetTimer)
|
|
{
|
|
local growType = sq_getGrowType(obj);
|
|
switch(growType){
|
|
case 2:
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0){
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atwillofinquisitor/dashattack_effect_dashtail.ani"), 0, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atwillofinquisitor/dashattack_effect_dashdust.ani", 0, 1, 0);
|
|
obj.sq_PlaySound("R_PW_3ATK");
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot){
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/dashattack.ani"), 0, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atholyflame/holyflame_beffect2_bdodge2.ani", 125, 0, 0);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
obj.setTimeEvent(1, currentAni.getDelaySum(0, 1), 1, false);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
obj.getVar("cansetAttackInfo").setBool(0, true);
|
|
}
|
|
|
|
function onTimeEvent_ATPriestDashAttack(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
local growType = sq_getGrowType(obj);
|
|
switch(growType){
|
|
case 2:
|
|
switch(timeEventIndex){
|
|
case 1:
|
|
local epObj = obj.getVar("EssenceofPhlegeObj").get_obj_vector(0);
|
|
if(epObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(epObj);
|
|
if(((sq_GetXPos(colObj) - sq_GetXPos(obj)) <= 200 && sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT || (sq_GetXPos(obj) - sq_GetXPos(colObj)) <= 200 && sq_GetDirection(obj) == ENUM_DIRECTION_LEFT) && sq_Abs(sq_GetYPos(colObj) - sq_GetYPos(obj)) <= 40){
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ESSENCEOFPHLEGE, -1, 1, 1.0);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 13);
|
|
createSkillPassive_ATPriest_bykk(obj,colObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,-sq_GetZPos(obj) + 100,obj.getDirection(),2,SKILL_BYKK_ESSENCEOFPHLEGE,5,totalDamage,sizeRate,0,0,0,0,0,0);
|
|
sq_SetMyShake(obj, 2, 100);
|
|
colObj.setTimeEvent(1, 1000, 1, true);
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onBeforeAttack_ATPriestDashAttack(obj,damager,boundingBox,isStuck)
|
|
{
|
|
if(obj.getVar("cansetAttackInfo").getBool(0)){
|
|
obj.getVar("cansetAttackInfo").setBool(0, false);
|
|
obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),obj.getState());
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCurrentAttackInfo(obj));
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot){
|
|
local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
attackInfo.setElement(ENUM_ELEMENT_LIGHT);
|
|
attackInfo.setElement(ENUM_ELEMENT_FIRE);
|
|
}
|
|
}
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_GRACEOFDEVINE) > 0){
|
|
local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
attackInfo.setElement(ENUM_ELEMENT_LIGHT);
|
|
}
|
|
}
|
|
|
|
function onAttack_ATPriestDashAttack(obj, damager, boundingBox, isStuck)
|
|
{
|
|
if(!obj || isStuck) return;
|
|
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox);
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_ATPriestDashAttack(obj, flagIndex)
|
|
{}
|
|
|
|
function onSetState_ATPriestJumpAttack(obj, state, datas, isResetTimer)
|
|
{
|
|
// print("state = "+state);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, DEMONIZATION_APDPATH)){
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_jump_effb01.ani"), 0, 0);
|
|
obj.sq_AddStateLayerAnimation(2,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_jump_stayrosea.ani"), 0, 0);
|
|
obj.sq_AddStateLayerAnimation(3,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atdepravitysevensins/attack/demonizationattack_jump_stayroseb.ani"), 0, 0);
|
|
obj.sq_PlaySound("PW_JUMPATK_DM");
|
|
obj.sq_PlaySound("R_SCYTHE");
|
|
}
|
|
else obj.sq_PlaySound("PW_JUMPATK");
|
|
}
|
|
|
|
function onAfterSetState_ATPriestJumpAttack(obj, state, datas, isResetTimer)
|
|
{
|
|
local growType = sq_getGrowType(obj);
|
|
switch(growType){
|
|
case 2:
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0){
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atwillofinquisitor/jumpattack_effect_jumptail.ani"), 0, 0);
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot){
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/jumpattack.ani"), 0, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atwillofinquisitor/jumpattack_holyflame_jumpsmoke.ani", 0, 1, 0);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
obj.getVar("cansetAttackInfo").setBool(0, true);
|
|
}
|
|
|
|
function onBeforeAttack_ATPriestJumpAttack(obj,damager,boundingBox,isStuck)
|
|
{
|
|
if(obj.getVar("cansetAttackInfo").getBool(0)){
|
|
obj.getVar("cansetAttackInfo").setBool(0, false);
|
|
obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),obj.getState());
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCurrentAttackInfo(obj));
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot){
|
|
local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
attackInfo.setElement(ENUM_ELEMENT_LIGHT);
|
|
attackInfo.setElement(ENUM_ELEMENT_FIRE);
|
|
}
|
|
}
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_GRACEOFDEVINE) > 0){
|
|
local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
attackInfo.setElement(ENUM_ELEMENT_LIGHT);
|
|
}
|
|
}
|
|
|
|
function onAttack_ATPriestJumpAttack(obj, damager, boundingBox, isStuck)
|
|
{
|
|
if(!obj || isStuck) return;
|
|
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox);
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_ATPriestJumpAttack(obj, flagIndex)
|
|
{
|
|
}
|
|
|
|
function onAfterSetState_ATPriestJump(obj, state, datas, isResetTimer)
|
|
{
|
|
local growType = sq_getGrowType(obj);
|
|
switch(growType){
|
|
case 2:
|
|
local isBackStep = sq_GetVectorData(datas, 1);
|
|
if(isBackStep == 1 && sq_GetSkillLevel(obj, SKILL_BYKK_WILLOFINQUISITOR) > 0){
|
|
local timer = obj.getVar("ATPriestJumpTimer").get_ct_vector(0);
|
|
if(!timer){
|
|
obj.getVar("ATPriestJumpTimer").clear_ct_vector();
|
|
obj.getVar("ATPriestJumpTimer").push_ct_vector();
|
|
timer = obj.getVar("ATPriestJumpTimer").get_ct_vector(0);
|
|
timer.Reset();
|
|
timer.Start(10000,0);
|
|
}
|
|
obj.getVar("ATPriestJumpSet").setBool(0, true);
|
|
}
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot){
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/jump.ani"), 0, 0);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProc_ATPriestJump(obj)
|
|
{
|
|
if(!obj) return;
|
|
if(obj.getVar("ATPriestJumpSet").getBool(0)){
|
|
local timer = obj.getVar("ATPriestJumpTimer").get_ct_vector(0);
|
|
if(timer){
|
|
local currentT = timer.Get();
|
|
local coolTime = sq_GetIntData(obj, SKILL_BYKK_WILLOFINQUISITOR, 14);
|
|
if(currentT >= coolTime){
|
|
obj.setSkillCommandEnable(SKILL_BYKK_PATROLBOMB,true);
|
|
if(obj.sq_IsEnterSkill(SKILL_BYKK_PATROLBOMB) != -1){
|
|
obj.getVar("ATPriestJumpSet").setBool(0, false);
|
|
timer.Reset();
|
|
timer.Start(10000,0);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PATROLBOMB, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return;
|
|
}
|
|
obj.setSkillCommandEnable(SKILL_BYKK_ESSENCEOFPHLEGE,true);
|
|
if(obj.sq_IsEnterSkill(SKILL_BYKK_ESSENCEOFPHLEGE) != -1){
|
|
obj.getVar("ATPriestJumpSet").setBool(0, false);
|
|
timer.Reset();
|
|
timer.Start(10000,0);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_ESSENCEOFPHLEGE, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return;
|
|
}
|
|
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
|
|
if(sq_IsEnterCommand(obj, E_ATTACK_COMMAND)){
|
|
obj.getVar("ATPriestJumpSet").setBool(0, false);
|
|
timer.Reset();
|
|
timer.Start(10000,0);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_JUMP_ATTACK, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
function onEndState_ATPriestJump(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
local growType = sq_getGrowType(obj);
|
|
switch(growType){
|
|
case 2:
|
|
if(obj.getVar("ATPriestJumpSet").getBool(0)) obj.getVar("ATPriestJumpSet").setBool(0, false);
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
function onAfterSetState_ATPriestStand(obj, state, datas, isResetTimer)
|
|
{
|
|
local growType = sq_getGrowType(obj);
|
|
switch(growType){
|
|
case 2:
|
|
obj.getVar("StaySet").setInt(0, 0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProc_ATPriestStand(obj)
|
|
{
|
|
if(!obj) return;
|
|
local growType = sq_getGrowType(obj);
|
|
switch(growType){
|
|
case 2:
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot && CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/demonicswordman/2_inquistor/ap_holyflame_buff.nut")){
|
|
local poleAni = obj.getCurrentAnimation();
|
|
local poleAniFrameNumber = sq_GetAniFrameNumber(poleAni, 0);
|
|
if(poleAniFrameNumber != obj.getVar("StaySet").getInt(0)){
|
|
obj.getVar("StaySet").setInt(0, poleAniFrameNumber);
|
|
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/demonicswordman/2_inquistor/ap_holyflame_buff.nut");
|
|
if(addAppendage){
|
|
addAppendage.sq_DeleteEffectFront();
|
|
switch(poleAniFrameNumber){
|
|
case 15: addAppendage.sq_AddEffectFront("character/swordman/effect/animation/1_atpriest_bykk/holyflameweaponeffect/rest.ani"); break;//rest
|
|
case 4: addAppendage.sq_AddEffectFront("character/swordman/effect/animation/1_atpriest_bykk/holyflameweaponeffect/stay.ani"); break;//stay
|
|
case 8: addAppendage.sq_AddEffectFront("character/swordman/effect/animation/1_atpriest_bykk/holyflameweaponeffect/move.ani"); break;//move
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_ATPriestStand(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
local growType = sq_getGrowType(obj);
|
|
switch(growType){
|
|
case 2:
|
|
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(obj, "character/demonicswordman/2_inquistor/ap_holyflame_buff.nut");
|
|
if(addAppendage){
|
|
addAppendage.sq_DeleteEffectFront();
|
|
obj.getVar("StaySet").setInt(0, 0);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onAfterSetState_ATPriestDash(obj, state, datas, isResetTimer)
|
|
{
|
|
local growType = sq_getGrowType(obj);
|
|
switch(growType){
|
|
case 2:
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot){
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/dash.ani"), 0, 0);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onStartDungeon_AtPriest_2bykk(obj)
|
|
{
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/demonicswordman/2_inquistor/ap_holyflame_buff.nut")) CNSquirrelAppendage.sq_RemoveAppendage(obj, "character/demonicswordman/2_inquistor/ap_holyflame_buff.nut");
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot) obj.sq_RemoveSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
obj.getVar("isReset").setInt(0, 1);
|
|
}
|
|
|
|
|
|
|
|
|
|
////////////////////团长
|
|
|
|
function onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox)
|
|
{
|
|
if(damager.isObjectType(OBJECTTYPE_ACTIVE) && damager.getState() != STATE_DIE){
|
|
local activeObj = sq_GetCNRDObjectToActiveObject(damager);
|
|
local epObj = activeObj.getVar("EssenceofPhlege").get_obj_vector(0);
|
|
if(epObj){
|
|
//character/demonicswordman/2_inquistor/ap_holyflame_hold.nut
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(epObj);
|
|
if(colObj.getState() >= 20) return;
|
|
if(colObj.isExistTimeEvent(1)) colObj.stopTimeEvent(1);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut")) CNSquirrelAppendage.sq_RemoveAppendage(damager, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut");
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, colObj, -1, false, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut", true);
|
|
sq_HoldAndDelayDie(damager, colObj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage);
|
|
local lifeTimeForBurning = colObj.getVar("custom").getInt(0);
|
|
AddAppendage.sq_SetValidTime(lifeTimeForBurning);
|
|
sq_EffectLayerAppendage(damager,sq_RGB(0,0,0),255,0,0,lifeTimeForBurning + 500);
|
|
sq_SendHitObjectPacket(colObj,damager,0,0,0);
|
|
colObj.addSetStatePacket(20, null, STATE_PRIORITY_AUTO, false, "");
|
|
colObj.setTimeEvent(2, lifeTimeForBurning - 500, 1, false);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//净化火焰瓶
|
|
function checkExecutableSkill_PatrolBomb(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PATROLBOMB);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_POURESSENCE) > 0 && (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_IntVectPush(2);
|
|
else obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PATROLBOMB, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_PatrolBomb(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_PatrolBomb(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_PETROLBOMB_STANDING_BODY);
|
|
obj.sq_PlaySound("R_PW_PETROL_BOMB");
|
|
obj.sq_PlaySound("PETROL_BOMB_READY");
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot){
|
|
if(loadSlot.getRemainLoadNumber() > 0){
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/petrolbomb_standing_body.ani"), 0, 0);
|
|
obj.getVar("PatrolBombSet").setInt(0, 1);
|
|
loadSlot.decreaseLoadCount(1);
|
|
}
|
|
else obj.getVar("PatrolBombSet").setInt(0, 0);
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
obj.setTimeEvent(1, currentAni.getDelaySum(0, 7), 1, false);
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_PETROLBOMB_BACKSTEP_BODY);
|
|
obj.sq_PlaySound("R_PW_PETROL_BOMB");
|
|
obj.sq_PlaySound("PETROL_BOMB_READY");
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot){
|
|
if(loadSlot.getRemainLoadNumber() > 0){
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/petrolbomb_backstep_body.ani"), 0, 0);
|
|
obj.getVar("PatrolBombSet").setInt(0, 1);
|
|
loadSlot.decreaseLoadCount(1);
|
|
}
|
|
else obj.getVar("PatrolBombSet").setInt(0, 0);
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
obj.setTimeEvent(1, currentAni.getDelaySum(0, 4), 1, false);
|
|
break;
|
|
case 2:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_MALLEUSMALEFICARUM);
|
|
obj.sq_PlaySound("PW_PETROL_BOMB");
|
|
obj.sq_PlaySound("ESSENCE_PHLEGE_EXP");
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot){
|
|
if(loadSlot.getRemainLoadNumber() > 0){
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/petrolbomb_backstep_body.ani"), 0, 0);
|
|
obj.getVar("PatrolBombSet").setInt(0, 1);
|
|
loadSlot.decreaseLoadCount(1);
|
|
}
|
|
else obj.getVar("PatrolBombSet").setInt(0, 0);
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
obj.setTimeEvent(2, currentAni.getDelaySum(0, 4), 1, false);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_PatrolBomb(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
case 2:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_IntVectPush(sq_GetZPos(obj));
|
|
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_PatrolBomb(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_PatrolBomb(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_PatrolBomb(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 1:
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PATROLBOMB, -1, 0, 1.0);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_PATROLBOMB, 5);
|
|
local isFire = obj.getVar("PatrolBombSet").getInt(0);
|
|
if(obj.getSkillSubState() == 0) createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,51,0,97,obj.getDirection(),2,SKILL_BYKK_PATROLBOMB,1,totalDamage,sizeRate,isFire,0,0,0,0,0);
|
|
else createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,31,1,97,obj.getDirection(),2,SKILL_BYKK_PATROLBOMB,1,totalDamage,sizeRate,isFire,0,0,0,0,0);
|
|
break;
|
|
case 2:
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PATROLBOMB, -1, 0, 1.0);
|
|
local isFire = obj.getVar("PatrolBombSet").getInt(0);
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,-50,0,0,obj.getDirection(),2,SKILL_BYKK_PATROLBOMB,4,totalDamage,isFire,0,0,0,0,0,0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_PatrolBomb(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
|
|
//裁决之击
|
|
function checkExecutableSkill_PunishmentBlow(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PUNISHMENTBLOW);
|
|
if (isUse){
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot){
|
|
if(loadSlot.getRemainLoadNumber() > 0){
|
|
obj.getVar("PunishmentBlowBool").setBool(2, true);
|
|
loadSlot.decreaseLoadCount(1);
|
|
}
|
|
else obj.getVar("PunishmentBlowBool").setBool(2, false);
|
|
}
|
|
else obj.getVar("PunishmentBlowBool").setBool(2, false);
|
|
obj.sq_IntVectClear();
|
|
if(obj.getState() == STATE_JUMP){
|
|
obj.getVar("PunishmentBlowSet").setInt(1, sq_GetZPos(obj));
|
|
obj.sq_IntVectPush(1);
|
|
}
|
|
else if(sq_GetSkillLevel(obj, SKILL_BYKK_FIRECONFESSION) > 0) obj.sq_IntVectPush(3);
|
|
else obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PUNISHMENTBLOW, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_PunishmentBlow(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_PunishmentBlow(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
obj.sq_ZStop();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_PUNISHMENTBLOW_BODY_A);
|
|
obj.getVar("PunishmentBlowSet").setInt(0, sq_GetXPos(obj));
|
|
obj.getVar("PunishmentBlowBool").setBool(0, true);
|
|
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 = 3000 / currentAni.getDelaySum(0, 0);
|
|
currentAni.setSpeedRate(speedRate.tofloat() * 2.0);
|
|
obj.sq_PlaySound("R_PW_PUNISHMENT_BLOW_01");
|
|
obj.sq_PlaySound("PUNISHMENT_BLOW_JUMP");
|
|
if(obj.getVar("PunishmentBlowBool").getBool(2)) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/punishmentblow_body_a.ani"), 0, 0);
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_PUNISHMENTBLOW_BODY_B);
|
|
obj.getVar("PunishmentBlowSet").setInt(0, sq_GetXPos(obj));
|
|
obj.getVar("PunishmentBlowBool").setBool(0, true);
|
|
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 = 3000 / currentAni.getDelaySum(0, 0);
|
|
currentAni.setSpeedRate(speedRate.tofloat() * 3.0);
|
|
if(obj.getVar("PunishmentBlowBool").getBool(2)) obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/punishmentblow_body_b.ani"), 0, 0);
|
|
break;
|
|
case 2:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_PUNISHMENTBLOW_BODY_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 = 6000 / currentAni.getDelaySum(0, 0);
|
|
print(speedRate);
|
|
currentAni.setSpeedRate(speedRate * 3.0);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PATROLBOMB, -1, 0, 1.0);
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_PUNISHMENTBLOW_ATTACK));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
if(obj.getVar("PunishmentBlowBool").getBool(2)) {
|
|
totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000;
|
|
obj.getVar("holyflameDamageSet").setInt(0, totalDamage);
|
|
local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
attackInfo.setElement(ENUM_ELEMENT_FIRE);
|
|
attackInfo.setElement(ENUM_ELEMENT_LIGHT);
|
|
}
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atpunishmentblow/pslash_01.ani", 0, 2, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atpunishmentblow/pslash_02.ani", 0, 1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atpunishmentblow/floor.ani", 0, -1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atpunishmentblow/dust.ani", 0, -2, 0);
|
|
obj.sq_PlaySound("R_PW_PUNISHMENT_BLOW_02");
|
|
if(obj.getVar("PunishmentBlowBool").getBool(2)){
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atpunishmentblow/psaintfire_01.ani", 0, 2, 0);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/punishmentblow_body_attack.ani"), 0, 0);
|
|
obj.sq_PlaySound("PUNISHMENT_BLOW_FLAME");
|
|
}
|
|
else obj.sq_PlaySound("PUNISHMENT_BLOW");
|
|
break;
|
|
case 3:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_PUNISHMENTBLOWDASH_BODY);
|
|
obj.sq_PlaySound("PUNISHMENT_BLOW_DASH");
|
|
if(obj.getVar("PunishmentBlowBool").getBool(2)){
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atpunishmentblow/pendfire_01.ani", -200, 2, 0);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/punishmentblowdash_body.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("PunishmentBlowSet").setInt(0, sq_GetXPos(obj));
|
|
obj.getVar("PunishmentBlowBool").setBool(0, true);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
sq_AddAttackBox(currentAni, -50, -30, -5, 250, 60, 155);
|
|
local bonusRate = sq_GetLevelData(obj, SKILL_BYKK_FIRECONFESSION, 3, sq_GetSkillLevel(obj, SKILL_BYKK_FIRECONFESSION));
|
|
bonusRate = bonusRate.tofloat() / 1000.0;
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PATROLBOMB, -1, 0, bonusRate);
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_PUNISHMENTBLOW_DASHATTACK));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
if(obj.getVar("PunishmentBlowBool").getBool(2)) {
|
|
totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000;
|
|
obj.getVar("holyflameDamageSet").setInt(0, totalDamage);
|
|
local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
attackInfo.setElement(ENUM_ELEMENT_FIRE);
|
|
attackInfo.setElement(ENUM_ELEMENT_LIGHT);
|
|
}
|
|
break;
|
|
case 4:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_PUNISHMENTBLOWDASHATTACK_BODY);
|
|
if(obj.getVar("PunishmentBlowBool").getBool(2)){
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atfireconfession/punishmentblowdashattack_dashsmokea.ani", 0, 2, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atfireconfession/punishmentblowdashattack_dashsmokeb.ani", 0, -1, 0);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/punishmentblowdashattack_body.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 currentAni = obj.getCurrentAnimation();
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PATROLBOMB, -1, 0, 1.0);
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_PUNISHMENTBLOW_ATTACK));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
if(obj.getVar("PunishmentBlowBool").getBool(2)) {
|
|
totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000;
|
|
obj.getVar("holyflameDamageSet").setInt(0, totalDamage);
|
|
local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
attackInfo.setElement(ENUM_ELEMENT_FIRE);
|
|
attackInfo.setElement(ENUM_ELEMENT_LIGHT);
|
|
}
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
function onEndCurrentAni_PunishmentBlow(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
obj.getVar("PunishmentBlowSet").setInt(1, sq_GetZPos(obj));
|
|
case 1:
|
|
case 3:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(subState + 1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PUNISHMENTBLOW, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 2:
|
|
case 4:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_PunishmentBlow(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onProc_PunishmentBlow(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
local stateTime = obj.sq_GetStateTimer();
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local fullTime = currentAni.getDelaySum(false);
|
|
if(obj.getVar("PunishmentBlowBool").getBool(0)){
|
|
local vx = sq_GetUniformVelocity(0, 50, stateTime, fullTime);
|
|
local dstX = sq_GetDistancePos(obj.getVar("PunishmentBlowSet").getInt(0), sq_GetDirection(obj), vx);
|
|
if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);
|
|
else obj.getVar("PunishmentBlowBool").setBool(0, false);
|
|
}
|
|
local vz = sq_GetAccel(0, 100, stateTime, fullTime / 2, true);
|
|
sq_setCurrentAxisPos(obj, 2, vz);
|
|
break;
|
|
case 1:
|
|
local stateTime = obj.sq_GetStateTimer();
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local fullTime = currentAni.getDelaySum(false);
|
|
if(obj.getVar("PunishmentBlowBool").getBool(0)){
|
|
local vx = sq_GetUniformVelocity(0, 50, stateTime, fullTime);
|
|
local dstX = sq_GetDistancePos(obj.getVar("PunishmentBlowSet").getInt(0), sq_GetDirection(obj), vx);
|
|
if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);
|
|
else obj.getVar("PunishmentBlowBool").setBool(0, false);
|
|
}
|
|
local vz = sq_GetAccel(obj.getVar("PunishmentBlowSet").getInt(1), 0, stateTime, fullTime, false);
|
|
sq_setCurrentAxisPos(obj, 2, vz);
|
|
break;
|
|
case 3:
|
|
local stateTime = obj.sq_GetStateTimer();
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local fullTime = currentAni.getDelaySum(false);
|
|
if(obj.getVar("PunishmentBlowBool").getBool(0)){
|
|
local vx = sq_GetUniformVelocity(0, 200, stateTime, fullTime);
|
|
local dstX = sq_GetDistancePos(obj.getVar("PunishmentBlowSet").getInt(0), sq_GetDirection(obj), vx);
|
|
if(obj.isMovablePos(dstX, sq_GetYPos(obj))) sq_setCurrentAxisPos(obj, 0, dstX);
|
|
else obj.getVar("PunishmentBlowBool").setBool(0, false);
|
|
}
|
|
obj.setSkillCommandEnable(SKILL_BYKK_PUNISHMENTBLOW,true);
|
|
if(obj.sq_IsEnterSkill(SKILL_BYKK_PUNISHMENTBLOW) != -1){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PUNISHMENTBLOW, STATE_PRIORITY_AUTO, true);
|
|
return false;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_PunishmentBlow(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 101:
|
|
obj.getVar("HolyFlameEnable").setBool(0, true);
|
|
obj.getVar("PurificationEnable").setBool(0, true);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_PunishmentBlow(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
}
|
|
|
|
function onEndState_PunishmentBlow(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
if(new_state != STATE_BYKK_PUNISHMENTBLOW){
|
|
sq_SimpleMoveToNearMovablePos(obj,200);
|
|
obj.getVar("PunishmentBlowBool").setBool(1, false);
|
|
}
|
|
}
|
|
|
|
function onAttack_PunishmentBlow(obj, damager, boundingBox, isStuck)
|
|
{
|
|
if(!obj || isStuck) return;
|
|
if(damager.isObjectType(OBJECTTYPE_ACTIVE) && obj.getSkillSubState() == 2){
|
|
if(obj.getVar("PunishmentBlowBool").getBool(2)) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox);
|
|
}
|
|
}
|
|
|
|
//火焰精华
|
|
function checkExecutableSkill_EssenceofPhlege(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_ESSENCEOFPHLEGE);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_POURESSENCE) > 0 && (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_IntVectPush(2);
|
|
else obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_ESSENCEOFPHLEGE, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_EssenceofPhlege(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_EssenceofPhlege(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_ESSENCEOFPHLEGE_BODY);
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_ESSENCEOFPHLEGEAIR_BODY);
|
|
break;
|
|
case 2:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_POURESSENCE_BODY);
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
}
|
|
|
|
function onEndCurrentAni_EssenceofPhlege(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
case 2:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_IntVectPush(sq_GetZPos(obj));
|
|
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_EssenceofPhlege(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_EssenceofPhlege(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 101://`throw bottle` 56 0 95
|
|
obj.getVar("EssenceofPhlegeObj").clear_obj_vector();
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ESSENCEOFPHLEGE, -1, 1, 1.0);
|
|
local lifeTimeForTarget = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 3);
|
|
local lifeTimeForBurning = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 4);
|
|
local lifeTimeForLanding = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 9);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 13);
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,56,0,95,obj.getDirection(),2,SKILL_BYKK_ESSENCEOFPHLEGE,1,totalDamage,lifeTimeForTarget,lifeTimeForBurning,lifeTimeForLanding,sizeRate,0,0,0);
|
|
break;
|
|
case 102://`throw bottle` 38 0 89
|
|
obj.getVar("EssenceofPhlegeObj").clear_obj_vector();
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ESSENCEOFPHLEGE, -1, 1, 1.0);
|
|
local lifeTimeForTarget = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 3);
|
|
local lifeTimeForBurning = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 4);
|
|
local lifeTimeForLanding = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 9);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 13);
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,38,0,89,obj.getDirection(),2,SKILL_BYKK_ESSENCEOFPHLEGE,1,totalDamage,lifeTimeForTarget,lifeTimeForBurning,lifeTimeForLanding,sizeRate,0,0,0);
|
|
break;
|
|
case 103://
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ESSENCEOFPHLEGE, -1, 1, 1.0);
|
|
local lifeTimeForTarget = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 3);
|
|
local lifeTimeForBurning = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 4);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 19);
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),2,SKILL_BYKK_ESSENCEOFPHLEGE,2,totalDamage,lifeTimeForTarget,lifeTimeForBurning,sizeRate,0,0,0,0);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_EssenceofPhlege(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
}
|
|
|
|
function onEndState_EssenceofPhlege(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
|
|
//神焰
|
|
function checkExecutableSkill_HolyFlame(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_HOLYFLAME);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_HOLYFLAME, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_HolyFlame(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_HolyFlame(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_HOLYFLAME_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);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_HOLYFLAME, -1, 1, 1.0);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_HOLYFLAME, 10);
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),2,SKILL_BYKK_HOLYFLAME,1,totalDamage,sizeRate,speedRate,0,0,0,0,0);
|
|
obj.sq_PlaySound("R_PW_HOLY_FLAME");
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_HolyFlame(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_HolyFlame(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_HolyFlame(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 102:
|
|
sq_SetMyShake(obj, 2, 100);
|
|
sq_flashScreen(obj,20,100,80,150, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(!loadSlot){
|
|
local loadNumber = sq_GetIntData(obj, SKILL_BYKK_HOLYFLAME, 0);
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BRANDOFHERESY);
|
|
if(skillLevel > 0) loadNumber = loadNumber + sq_GetLevelData(obj, SKILL_BYKK_BRANDOFHERESY, 0, skillLevel);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_FIRECONFESSION) > 0) loadNumber = loadNumber + 2;
|
|
obj.sq_AddSkillLoad(SKILL_BYKK_HOLYFLAME, 147, loadNumber, 5000);
|
|
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "character/demonicswordman/2_inquistor/ap_holyflame_buff.nut")){
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "character/demonicswordman/2_inquistor/ap_holyflame_buff.nut", true);
|
|
local burnTime = sq_GetIntData(obj, SKILL_BYKK_HOLYFLAME, 1);
|
|
AddAppendage.getVar("custom").setInt(0, burnTime);
|
|
}
|
|
}
|
|
else{
|
|
local nowNumber = loadSlot.getRemainLoadNumber();
|
|
local loadNumber = sq_GetIntData(obj, SKILL_BYKK_HOLYFLAME, 0);
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_BRANDOFHERESY);
|
|
if(skillLevel > 0) loadNumber = loadNumber + sq_GetLevelData(obj, SKILL_BYKK_BRANDOFHERESY, 0, skillLevel);
|
|
if(sq_GetSkillLevel(obj, SKILL_BYKK_FIRECONFESSION) > 0) loadNumber = loadNumber + 2;
|
|
if(nowNumber < loadNumber){
|
|
loadSlot.increaseLoadCount(loadNumber - nowNumber);
|
|
}
|
|
// obj.sq_RemoveSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
}
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_HolyFlame(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
}
|
|
|
|
function onEndState_HolyFlame(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
|
|
//审判重击
|
|
function checkExecutableSkill_JudgmentBlow(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_JUDGMENTBLOW);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_JUDGMENTBLOW, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_JudgmentBlow(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_JudgmentBlow(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 loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
local atkIndex = ATPATK_BYKK_JUDGMENTBLOW;
|
|
if(loadSlot){
|
|
if(loadSlot.getRemainLoadNumber() > 0){
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_HOLYFLAME_JUDGMENTBLOW);
|
|
atkIndex = ATPATK_BYKK_HOLYFLAME_JUDGMENTBLOW;
|
|
loadSlot.decreaseLoadCount(1);
|
|
obj.getVar("JudgmentBlowSet").setInt(0, 1);
|
|
}
|
|
else{
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_JUDGMENTBLOW_BODY);
|
|
obj.getVar("JudgmentBlowSet").setInt(0, 0);
|
|
}
|
|
}
|
|
else{
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_JUDGMENTBLOW_BODY);
|
|
obj.getVar("JudgmentBlowSet").setInt(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_JUDGMENTBLOW, -1, 0, 1.0);
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
if(obj.getVar("JudgmentBlowSet").getInt(0) > 0) {
|
|
totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000;
|
|
obj.getVar("holyflameDamageSet").setInt(0, totalDamage);
|
|
local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
attackInfo.setElement(ENUM_ELEMENT_FIRE);
|
|
attackInfo.setElement(ENUM_ELEMENT_LIGHT);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_JudgmentBlow(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_JudgmentBlow(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_JudgmentBlow(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 101:
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atholyflame/atjudgmentblow/atjudgmentblow_att1_01.ani"), 0, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atholyflame/atjudgmentblow/atjudgmentblow_stone_6.ani", 0, 1, 0);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_JUDGMENTBLOW, -1, 1, 1.0);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_JUDGMENTBLOW, 0);
|
|
local isFire = obj.getVar("JudgmentBlowSet").getInt(0);
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,185,0,0,obj.getDirection(),2,SKILL_BYKK_JUDGMENTBLOW,1,totalDamage,sizeRate,isFire,0,0,0,0,0);
|
|
sq_SetMyShake(obj, 5, 80);
|
|
break;
|
|
case 102:
|
|
obj.getVar("HolyFlameEnable").setBool(0, true);
|
|
obj.getVar("PurificationEnable").setBool(0, true);
|
|
obj.sq_PlaySound("JUDGMENT_BLOW");
|
|
break;
|
|
case 111://69
|
|
sq_SetMyShake(obj, 2, 120);
|
|
sq_flashScreen(obj,0,80,40,204, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
break;
|
|
case 112:
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atholyflame/atjudgmentblow/atjudgmentblow_att2_02.ani"), 0, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atholyflame/atjudgmentblow/atjudgmentblow_stone_6.ani", 0, 1, 0);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_JUDGMENTBLOW, -1, 1, 1.0);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_JUDGMENTBLOW, 0);
|
|
local isFire = obj.getVar("JudgmentBlowSet").getInt(0);
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,185,0,0,obj.getDirection(),2,SKILL_BYKK_JUDGMENTBLOW,1,totalDamage,sizeRate,isFire,0,0,0,0,0);
|
|
sq_SetMyShake(obj, 12, 120);
|
|
local skillLevel = sq_GetSkillLevel(obj, SKILL_BYKK_FIRECONFESSION);
|
|
if(skillLevel > 0){
|
|
local addTime = sq_GetIntData(obj, SKILL_BYKK_FIRECONFESSION, 11);
|
|
local hitMax = sq_GetIntData(obj, SKILL_BYKK_FIRECONFESSION, 12);
|
|
local totalDamage2 = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_JUDGMENTBLOW, -1, 0, 1.0);
|
|
totalDamage = totalDamage + totalDamage2
|
|
local bonusRate = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FIRECONFESSION, -1, 4, 1.0);
|
|
totalDamage = totalDamage * bonusRate / 1000;
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,185,0,0,obj.getDirection(),2,SKILL_BYKK_JUDGMENTBLOW,2,totalDamage,sizeRate,isFire,hitMax,addTime,0,0,0);
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,185,0,0,obj.getDirection(),2,SKILL_BYKK_JUDGMENTBLOW,3,sizeRate,0,0,0,0,0,0,0);
|
|
}
|
|
break;
|
|
case 113:
|
|
obj.sq_PlaySound("JUDGMENT_BLOW_FLAME");
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_JudgmentBlow(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
}
|
|
|
|
function onEndState_JudgmentBlow(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onAttack_JudgmentBlow(obj, damager, boundingBox, isStuck)
|
|
{
|
|
if(!obj || isStuck) return;
|
|
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
|
|
if(obj.getVar("JudgmentBlowSet").getInt(0) > 0) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox);
|
|
}
|
|
}
|
|
|
|
|
|
//神焰斩
|
|
function checkExecutableSkill_Summarytiral(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_SUMMARYTIRAL);
|
|
if (isUse){
|
|
obj.getVar("Summarytiral").setInt(1, 0);
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot){
|
|
if(loadSlot.getRemainLoadNumber() > 0){
|
|
loadSlot.decreaseLoadCount(1);
|
|
obj.getVar("Summarytiral").setInt(1, 1);
|
|
}
|
|
}
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_SUMMARYTIRAL, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Summarytiral(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Summarytiral(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_SUMMARYTIRAL_BODY_PIERCE_ATK1);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
obj.getVar("Summarytiral").setInt(0, 0);
|
|
obj.getVar("SummarytiralTar").clear_obj_vector();
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_SUMMARYTIRAL, -1, 0, 1.0);
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_SUMMARYTIRALPIERCE));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
print("test : "+obj.getVar("Summarytiral").getInt(1));
|
|
if(obj.getVar("Summarytiral").getInt(1) > 0) {
|
|
totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000;
|
|
obj.getVar("holyflameDamageSet").setInt(0, totalDamage);
|
|
local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
attackInfo.setElement(ENUM_ELEMENT_FIRE);
|
|
attackInfo.setElement(ENUM_ELEMENT_LIGHT);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/summarytiral_body_pierce_atk1.ani"), 0, 0);
|
|
}
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_SUMMARYTIRAL_BODY_NOMAL_ATTACK2);
|
|
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_SUMMARYTIRAL, -1, 1, 1.0);
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_SUMMARYTIRALNOMALSWING));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
if(obj.getVar("Summarytiral").getInt(1) > 0){
|
|
totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000;
|
|
obj.getVar("holyflameDamageSet").setInt(0, totalDamage);
|
|
local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
attackInfo.setElement(ENUM_ELEMENT_FIRE);
|
|
attackInfo.setElement(ENUM_ELEMENT_LIGHT);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/summarytiral_body_nomal_attack2.ani"), 0, 0);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 8000 / currentAni.getDelaySum(0, 2);
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atsummarytiral/normal/statk1fire_firedodge.ani", 0, 1, 0);
|
|
local pAni = pooledObj.getCurrentAnimation();
|
|
pAni.setSpeedRate(speedRate.tofloat() * 0.9);
|
|
}
|
|
break;
|
|
case 2:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_SUMMARYTIRAL_BODY_INCINERATION_ATTACK2);
|
|
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_SUMMARYTIRAL, -1, 2, 1.0);
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_SUMMARYTIRALINCINERATIONSWING));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
if(obj.getVar("Summarytiral").getInt(1) > 0){
|
|
totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000;
|
|
obj.getVar("holyflameDamageSet").setInt(0, totalDamage);
|
|
local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
attackInfo.setElement(ENUM_ELEMENT_FIRE);
|
|
attackInfo.setElement(ENUM_ELEMENT_LIGHT);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/summarytiral_body_incineration_attack2.ani"), 0, 0);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 8000 / currentAni.getDelaySum(0, 2);
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atsummarytiral/incineration/statk2fire_fire01.ani", 0, 1, 0);
|
|
local pAni = pooledObj.getCurrentAnimation();
|
|
pAni.setSpeedRate(speedRate.tofloat());
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_Summarytiral(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
if(obj.getVar("SummarytiralTar").get_obj_vector_size() > 0){
|
|
obj.setTimeEvent(1, 200, 1, false);
|
|
return;
|
|
}
|
|
case 1:
|
|
case 2:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Summarytiral(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_Summarytiral(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 201:
|
|
if(obj.getVar("Summarytiral").getInt(1) > 0) obj.sq_PlaySound("SUMMARY_TIRAL_SWISH_FLAME");
|
|
else obj.sq_PlaySound("SUMMARY_TIRAL_SWISH");
|
|
break;
|
|
case 202:
|
|
sq_SetMyShake(obj, 5, 240);
|
|
break;
|
|
case 203:
|
|
//`purification enable`
|
|
obj.getVar("PurificationEnable").setBool(0, true);
|
|
break;
|
|
case 204:
|
|
//`SwingEndHolyFlameEffect` -11 0 -21
|
|
if(obj.getVar("Summarytiral").getInt(1) > 0) sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atsummarytiral/normal/statk1endfire_01.ani", -11, 0, -21);
|
|
//`holy flame enable`
|
|
obj.getVar("HolyFlameEnable").setBool(0, true);
|
|
obj.getVar("PurificationEnable").setBool(0, true);
|
|
break;
|
|
case 301://flag=2
|
|
//`HoldMonsterMovePos` 166 0 -20
|
|
local size = obj.getVar("SummarytiralTar").get_obj_vector_size();
|
|
if(size > 0){
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local delay = currentAni.getDelaySum(2, 2);
|
|
for(local i = 0; i < size; i++){
|
|
local targetObj = obj.getVar("SummarytiralTar").get_obj_vector(i);
|
|
if(targetObj && targetObj.getState() != STATE_DIE){
|
|
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut");
|
|
if(!sq_IsFixture(targetObj)) sq_MoveToAppendageForce(targetObj, obj, obj, 166, 0, -20, delay, true, addAppendage);
|
|
}
|
|
}
|
|
}
|
|
//`CreateHoleEffect` 136 0 -66
|
|
//`CreateDustEffect` 108 0 -103
|
|
break;
|
|
case 302://flag=3
|
|
sq_SetMyShake(obj, 5, 160);
|
|
//`HoldMonsterMovePos` 153 0 -40
|
|
local size = obj.getVar("SummarytiralTar").get_obj_vector_size();
|
|
if(size > 0){
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local delay = currentAni.getDelaySum(3, 3);
|
|
for(local i = 0; i < size; i++){
|
|
local targetObj = obj.getVar("SummarytiralTar").get_obj_vector(i);
|
|
if(targetObj && targetObj.getState() != STATE_DIE){
|
|
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut");
|
|
if(!sq_IsFixture(targetObj)) sq_MoveToAppendageForce(targetObj, obj, obj, 153, 0, -40, delay, true, addAppendage);
|
|
}
|
|
}
|
|
}
|
|
if(obj.getVar("Summarytiral").getInt(1) > 0) obj.sq_PlaySound("SUMMARY_TIRAL_DOWN_FLAME");
|
|
else obj.sq_PlaySound("SUMMARY_TIRAL_DOWN");
|
|
break;
|
|
case 303://flag=7
|
|
local size = obj.getVar("SummarytiralTar").get_obj_vector_size();
|
|
if(size > 0){
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local delay = currentAni.getDelaySum(7, 7);
|
|
for(local i = 0; i < size; i++){
|
|
local targetObj = obj.getVar("SummarytiralTar").get_obj_vector(i);
|
|
if(targetObj && targetObj.getState() != STATE_DIE){
|
|
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut");
|
|
if(!sq_IsFixture(targetObj)) sq_MoveToAppendageForce(targetObj, obj, obj, 213, 0, 10, delay, true, addAppendage);
|
|
}
|
|
}
|
|
}
|
|
//`HoldMonsterMovePos` 213 0 10
|
|
//`CreateDustEffect` 192 0 -43
|
|
//`RemoveHoleEffect` 162 0 -91
|
|
if(obj.getVar("Summarytiral").getInt(1) > 0) obj.sq_PlaySound("SUMMARY_TIRAL_UP_FLAME");
|
|
else obj.sq_PlaySound("SUMMARY_TIRAL_UP");
|
|
break;
|
|
case 304://flag=8
|
|
local size = obj.getVar("SummarytiralTar").get_obj_vector_size();
|
|
if(size > 0){
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local delay = currentAni.getDelaySum(8, 8);
|
|
for(local i = 0; i < size; i++){
|
|
local targetObj = obj.getVar("SummarytiralTar").get_obj_vector(i);
|
|
if(targetObj && targetObj.getState() != STATE_DIE){
|
|
local addAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut");
|
|
if(!sq_IsFixture(targetObj)) sq_MoveToAppendageForce(targetObj, obj, obj, 199, 0, 50, delay, true, addAppendage);
|
|
}
|
|
}
|
|
}
|
|
//`HoldMonsterMovePos` 199 0 50
|
|
//`HoldMonsterCutting` 192 0 14
|
|
break;
|
|
case 305://flag=9
|
|
sq_flashScreen(obj,0,80,240,204, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER);
|
|
break;
|
|
case 306://flag=10
|
|
sq_SetMyShake(obj, 5, 240);
|
|
break;
|
|
case 307://flag=11
|
|
//`holy flame enable` 0 0 0
|
|
obj.getVar("HolyFlameEnable").setBool(0, true);
|
|
//`purification enable` 0 0 0
|
|
obj.getVar("PurificationEnable").setBool(0, true);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Summarytiral(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
if(obj.getVar("Summarytiral").getInt(0) > 0) obj.sq_IntVectPush(2);
|
|
else obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_SUMMARYTIRAL, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_Summarytiral(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
if(new_state != STATE_BYKK_SUMMARYTIRAL){
|
|
local size = obj.getVar("SummarytiralTar").get_obj_vector_size();
|
|
if(size > 0){
|
|
for(local i = 0; i < size; i++){
|
|
local targetObj = obj.getVar("SummarytiralTar").get_obj_vector(i);
|
|
if(targetObj && targetObj.getState() != STATE_DIE){
|
|
// local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(targetObj, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut");
|
|
// if(AddAppendage && !sq_IsFixture(targetObj)) sq_MoveToAppendageForce(targetObj, obj, targetObj, 0, 0, -sq_GetZPos(targetObj), 300, true, AddAppendage);
|
|
CNSquirrelAppendage.sq_RemoveAppendage(targetObj, "character/demonicswordman/2_inquistor/ap_summarytiral_hold.nut");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function onAttack_Summarytiral(obj, damager, boundingBox, isStuck)
|
|
{
|
|
if(!obj || isStuck) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
|
|
if(obj.getVar("Summarytiral").getInt(1) > 0) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox);
|
|
if(!obj.getVar("SummarytiralTar").is_obj_vector(damager)) obj.getVar("SummarytiralTar").push_obj_vector(damager);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local frameIndex = sq_GetCurrentFrameIndex(obj);
|
|
local delay = currentAni.getDelaySum(frameIndex, 4);
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut")){
|
|
if(obj.getVar("Summarytiral").getInt(0) != 1) obj.getVar("Summarytiral").setInt(0, 1);
|
|
local AddAppendage = CNSquirrelAppendage.sq_GetAppendage(damager, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut");
|
|
if(!sq_IsFixture(damager)) sq_MoveToAppendageForce(damager, obj, obj, 151, 0, 52, delay, true, AddAppendage);
|
|
return;
|
|
}
|
|
else{
|
|
local apdPath = "character/demonicswordman/2_inquistor/ap_summarytiral_hold.nut";
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(damager, apdPath)) CNSquirrelAppendage.sq_RemoveAppendage(damager, apdPath);
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, -1, false, apdPath, true);
|
|
sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage);
|
|
if(!sq_IsFixture(damager)) sq_MoveToAppendageForce(damager, obj, obj, 151, 0, 52, delay, true, AddAppendage);
|
|
}
|
|
|
|
|
|
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
//神焰洗礼
|
|
function checkExecutableSkill_FlameOfBaptism(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_FLAMEOFBAPTISM);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_FLAMEOFBAPTISM, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_FlameOfBaptism(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_FlameOfBaptism(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_FLAMEOFBAPTISM_BODY);
|
|
obj.sq_PlaySound("PW_FLAME_BAPTISM_01");
|
|
obj.sq_PlaySound("FLAME_BAPTISM_SPLASH");
|
|
obj.getVar("FlameOfBaptism").setInt(0, 0);
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot){
|
|
if(loadSlot.getRemainLoadNumber() > 0){
|
|
obj.getVar("FlameOfBaptism").setInt(0, 1);
|
|
loadSlot.decreaseLoadCount(1);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
}
|
|
|
|
function onEndCurrentAni_FlameOfBaptism(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_FlameOfBaptism(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_FlameOfBaptism(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 101:
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 5000 / currentAni.getDelaySum(0, 0);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_FLAMEOFBAPTISM, -1, 0, 1.0);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_FLAMEOFBAPTISM, 2);
|
|
local sub = obj.getVar("FlameOfBaptism").getInt(0);
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),2,SKILL_BYKK_FLAMEOFBAPTISM,1,totalDamage,sizeRate,speedRate,sub,0,0,0,0);
|
|
break;
|
|
case 102:
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 5000 / currentAni.getDelaySum(0, 0);
|
|
local pooledObj = sq_AddDrawOnlyAniFromParent(obj, "passiveobject/atpriest_bykk/animation/2_inquistor/animation/atflameofbaptism/flameofbaptismback_24.ani", 0, -1, 0);
|
|
local pAni = pooledObj.getCurrentAnimation();
|
|
pAni.setSpeedRate(speedRate.tofloat());
|
|
if(obj.getVar("FlameOfBaptism").getInt(0) > 0){
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_FLAMEOFBAPTISM, 2);
|
|
local rangeX = 290 * sizeRate / 100, rangeY = 70 * sizeRate / 100;;
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_ESSENCEOFPHLEGE, -1, 1, 1.0);
|
|
local lifeTimeForTarget = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 3);
|
|
local lifeTimeForBurning = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 4);
|
|
sizeRate = sq_GetIntData(obj, SKILL_BYKK_ESSENCEOFPHLEGE, 19);
|
|
local sub = obj.getVar("FlameOfBaptism").getInt(0);
|
|
local objectManager = obj.getObjectManager();
|
|
local objectNumber = objectManager.getCollisionObjectNumber();
|
|
for (local i = 0; i < objectNumber; i++){
|
|
local object = objectManager.getCollisionObject(i);
|
|
if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj) && sq_Abs(sq_GetXPos(obj) - sq_GetXPos(object)) <= rangeX && sq_Abs(sq_GetYPos(obj) - sq_GetYPos(object)) <= rangeY) {
|
|
local group = sq_GetGroup(object);
|
|
local uniqueId = sq_GetUniqueId(object);
|
|
local aObj = object.getVar("EssenceofPhlege").get_obj_vector(0);
|
|
if(aObj){
|
|
local colObj = sq_GetCNRDObjectToCollisionObject(aObj);
|
|
if(colObj.getState() >= 20) continue;
|
|
else colObj.setTimeEvent(1, 1000, 1, true);
|
|
}
|
|
createSkillPassive_ATPriest_bykk(obj,object,PASSIVEOBJ_BYKK_ATPRIEST,0,1,sq_GetZPos(object) + sq_GetHeightObject(object) / 2 - sq_GetZPos(obj),obj.getDirection(),2,SKILL_BYKK_ESSENCEOFPHLEGE,3,totalDamage,lifeTimeForTarget,lifeTimeForBurning,sizeRate,group,uniqueId,0,0);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 103:
|
|
sq_SetShake(obj, 3, 250);
|
|
break;
|
|
case 104:
|
|
obj.sq_PlaySound("PW_FLAME_BAPTISM_02");
|
|
obj.sq_PlaySound("FLAME_BAPTISM_FIRE");
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_FlameOfBaptism(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
}
|
|
|
|
function onEndState_FlameOfBaptism(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
|
|
//神焰怒火
|
|
function checkExecutableSkill_Virtuousfury(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_VIRTUOUSFURY);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_VIRTUOUSFURY, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Virtuousfury(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Virtuousfury(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.getVar("FlameOfBaptism").setInt(0, 0);
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot){
|
|
if(loadSlot.getRemainLoadNumber() > 0){
|
|
obj.getVar("FlameOfBaptism").setInt(0, 1);
|
|
loadSlot.decreaseLoadCount(1);
|
|
local flashScreenObj = sq_flashScreen(obj,80,99990,240,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
obj.getVar("Virtuousfury_Flashobj").clear_obj_vector();
|
|
obj.getVar("Virtuousfury_Flashobj").push_obj_vector(flashScreenObj);
|
|
}
|
|
}
|
|
if(obj.getVar("FlameOfBaptism").getInt(0) > 0){
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_VIRTUOUSFURY_HOLYFLAME_BODY);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/virtuousfury_holyflame_body.ani"), 0, 0);
|
|
}
|
|
else obj.sq_SetCurrentAnimation(ATPANI_BYKK_VIRTUOUSFURY_NORMAL_BODY);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
obj.getVar("VirtuousfuryBool").setBool(0, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_Virtuousfury(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_Virtuousfury(obj)
|
|
{
|
|
if(!obj) return;
|
|
if(obj.getVar("VirtuousfuryBool").getBool(0)){
|
|
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true);
|
|
if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)){
|
|
obj.getVar("VirtuousfuryBool").setBool(0, false);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
}
|
|
}
|
|
}
|
|
|
|
function onKeyFrameFlag_Virtuousfury(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 103:
|
|
case 203:
|
|
local atkIndex = ATPATK_BYKK_VIRTUOUSFURY_NORMAL;
|
|
if(obj.getVar("FlameOfBaptism").getInt(0) > 0) atkIndex = ATPATK_BYKK_VIRTUOUSFURY_HOLYFLAME;
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_VIRTUOUSFURY, -1, 0, 1.0);
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
if(obj.getVar("FlameOfBaptism").getInt(0) > 0){
|
|
totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000;
|
|
obj.getVar("holyflameDamageSet").setInt(0, totalDamage);
|
|
local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
attackInfo.setElement(ENUM_ELEMENT_FIRE);
|
|
attackInfo.setElement(ENUM_ELEMENT_LIGHT);
|
|
}
|
|
break;
|
|
case 104:
|
|
case 204:
|
|
//`loop start`
|
|
break;
|
|
case 107:
|
|
case 207:
|
|
case 113:
|
|
case 213:
|
|
case 117:
|
|
case 217:
|
|
case 119:
|
|
case 219:
|
|
obj.resetHitObjectList();
|
|
break;
|
|
case 124:
|
|
case 224:
|
|
if(obj.getVar("VirtuousfuryBool").getBool(0)) obj.getVar("VirtuousfuryBool").setBool(0, false);
|
|
break;
|
|
case 125:
|
|
case 225:
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_VIRTUOUSFURY, -1, 1, 1.0);
|
|
local atkIndex = ATPATK_BYKK_VIRTUOUSFURY_LAST_NORMAL;
|
|
if(obj.getVar("FlameOfBaptism").getInt(0) > 0) atkIndex = ATPATK_BYKK_VIRTUOUSFURY_LAST_HOLYFLAME;
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, atkIndex));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
if(obj.getVar("FlameOfBaptism").getInt(0) > 0){
|
|
totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000;
|
|
obj.getVar("holyflameDamageSet").setInt(0, totalDamage);
|
|
local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
attackInfo.setElement(ENUM_ELEMENT_FIRE);
|
|
attackInfo.setElement(ENUM_ELEMENT_LIGHT);
|
|
}
|
|
obj.sq_PlaySound("R_PW_VIRTUOUS_FURY");
|
|
break;
|
|
case 126:
|
|
case 226:
|
|
if(obj.getVar("FlameOfBaptism").getInt(0) > 0){
|
|
//`off flash`
|
|
local flashScreenObj = obj.getVar("Virtuousfury_Flashobj").get_obj_vector(0);
|
|
local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj);
|
|
if(pflashScreen) pflashScreen.fadeOut();
|
|
sq_flashScreen(obj,0,80,160,204, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_COVER);
|
|
}
|
|
else sq_flashScreen(obj,0,60,300,204, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
sq_SetMyShake(obj, 5, 360);
|
|
obj.resetHitObjectList();
|
|
break;
|
|
case 128:
|
|
case 228:
|
|
//`holy flame enable`
|
|
obj.getVar("HolyFlameEnable").setBool(0, true);
|
|
obj.getVar("PurificationEnable").setBool(0, true);
|
|
break;
|
|
case 230:
|
|
//`add holy flame off effect`
|
|
if(obj.getVar("FlameOfBaptism").getInt(0) > 0){
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atvirtuousfury/holyflame/vfsaintendfire_endfire01.ani", 0, 1, 0);
|
|
}
|
|
//`remove holy flame weapon effect`
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Virtuousfury(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
}
|
|
|
|
function onEndState_Virtuousfury(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onAttack_Virtuousfury(obj, damager, boundingBox, isStuck)
|
|
{
|
|
if(!obj || isStuck) return;
|
|
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
|
|
if(obj.getVar("FlameOfBaptism").getInt(0) > 0) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox);
|
|
}
|
|
}
|
|
|
|
|
|
//行刑
|
|
function checkExecutableSkill_Decollation(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_DECOLLATION);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_DECOLLATION, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Decollation(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Decollation(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.getVar("Decollation").setInt(0, 0);
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot){
|
|
if(loadSlot.getRemainLoadNumber() > 0){
|
|
obj.getVar("Decollation").setInt(0, 1);
|
|
loadSlot.decreaseLoadCount(1);
|
|
}
|
|
}
|
|
if(obj.getVar("Decollation").getInt(0) > 0){
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_DECOLLATIONFIREBODY_BODY);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/decollationfirebody_body.ani"), 0, 0);
|
|
}
|
|
else obj.sq_SetCurrentAnimation(ATPANI_BYKK_DECOLLATIONNORMAL_BODY);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
}
|
|
|
|
function onEndCurrentAni_Decollation(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_Decollation(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_Decollation(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 102:
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_DECOLLATION_PUSH));
|
|
obj.getVar("DecollationBool").setBool(0, true);
|
|
break;
|
|
case 107:
|
|
sq_SetMyShake(obj, 2, 160);
|
|
local flashScreenObj = sq_flashScreen(obj,80,99990,240,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
obj.getVar("Decollation_Flashobj").clear_obj_vector();
|
|
obj.getVar("Decollation_Flashobj").push_obj_vector(flashScreenObj);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local delay = currentAni.getDelaySum(7, 10);
|
|
local delay2 = currentAni.getDelaySum(11, 12);
|
|
sq_flashScreen(obj,120,delay,delay2,102, sq_RGB(255,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
break;
|
|
case 115:
|
|
obj.getVar("DecollationBool").setBool(0, false);
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_DECOLLATION, -1, 0, 1.0);
|
|
sq_SetCurrentAttackInfo(obj, sq_GetCustomAttackInfo(obj, ATPATK_BYKK_DECOLLATION));
|
|
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), totalDamage);
|
|
if(obj.getVar("Decollation").getInt(0) > 0){
|
|
totalDamage = totalDamage * sq_GetLevelData(obj, SKILL_BYKK_HOLYFLAME, 0, sq_GetSkillLevel(obj, SKILL_BYKK_HOLYFLAME)) / 1000;
|
|
obj.getVar("holyflameDamageSet").setInt(0, totalDamage);
|
|
local attackInfo = sq_GetCurrentAttackInfo(obj);
|
|
attackInfo.setElement(ENUM_ELEMENT_FIRE);
|
|
attackInfo.setElement(ENUM_ELEMENT_LIGHT);
|
|
}
|
|
break;
|
|
case 116:
|
|
sq_SetMyShake(obj, 5, 320);
|
|
//off flash
|
|
local flashScreenObj = obj.getVar("Decollation_Flashobj").get_obj_vector(0);
|
|
local pflashScreen = sq_GetCNRDObjectToFlashScreen(flashScreenObj);
|
|
if(pflashScreen) pflashScreen.fadeOut();
|
|
// sq_flashScreen(obj,0,0,80,102, sq_RGB(255,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
sq_flashScreen(obj,0,0,320,255, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
|
|
break;
|
|
case 117:
|
|
//`holy flame enable`
|
|
obj.getVar("HolyFlameEnable").setBool(0, true);
|
|
obj.getVar("PurificationEnable").setBool(0, true);
|
|
break;
|
|
case 120:
|
|
//`add holy flame off effect`
|
|
if(obj.getVar("Decollation").getInt(0) > 0){
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atdecollation/decollationendfire_endfire_01.ani", 0, 1, 0);
|
|
}
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Decollation(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
}
|
|
|
|
function onEndState_Decollation(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onAttack_Decollation(obj, damager, boundingBox, isStuck)
|
|
{
|
|
if(!obj || isStuck) return;
|
|
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
|
|
if(obj.getVar("Decollation").getInt(0) > 0) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox);
|
|
if(obj.getVar("DecollationBool").getBool(0)){
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//神焰漩涡
|
|
function checkExecutableSkill_VortexOfHellFire(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_VORTEXOFHELLFIRE);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_VORTEXOFHELLFIRE, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_VortexOfHellFire(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_VortexOfHellFire(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_VORTEXOFHELLFIREBODYREADY_00);
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
obj.getVar("VortexOfHellFire").setInt(0, 0);
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot){
|
|
if(loadSlot.getRemainLoadNumber() > 0){
|
|
obj.getVar("VortexOfHellFire").setInt(0, 1);
|
|
loadSlot.decreaseLoadCount(1);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/vortexofhellfirebodyready_00.ani"), 0, 0);
|
|
}
|
|
}
|
|
obj.startRapidInput();
|
|
obj.getVar("VortexOfHellFire").setInt(1, 0);
|
|
obj.getVar("VortexOfHellFire").setInt(2, 0);
|
|
break;
|
|
case 1:
|
|
// local atkIndex = ATPATK_BYKK_VORTEXOFHELLFIRELOOP;
|
|
local sub = obj.getVar("VortexOfHellFire").getInt(0);
|
|
if(sub > 0){
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_VORTEXOFHELLFIREBODYLOOP_00_HOLYFRAME);
|
|
// atkIndex = ATPATK_BYKK_VORTEXOFHELLFIRELOOP_HOLYFRAME;
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/vortexofhellfirebodyloop_00_holyframe.ani"), 0, 0);
|
|
}
|
|
else obj.sq_SetCurrentAnimation(ATPANI_BYKK_VORTEXOFHELLFIREBODYLOOP_00);
|
|
// obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/atvortexofhellfire/loop/vortexofhellfireeffloop_00.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_VORTEXOFHELLFIRE, -1, 0, 1.0);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VORTEXOFHELLFIRE, 14);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 8000 / currentAni.getDelaySum(0, 0);
|
|
sq_ClearAttackBox(currentAni);
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),2,SKILL_BYKK_VORTEXOFHELLFIRE,1,totalDamage,sizeRate,speedRate,sub,0,0,0,0);
|
|
if(obj.getVar("VortexOfHellFire").getInt(2) == 0){
|
|
obj.getVar("VortexOfHellFire").setInt(2, 1);
|
|
local aniPath = "character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/loop/vortexofhellfireeffloop_00.ani";
|
|
local pooledObj = createOnlyDrawObjectEX_ATPriest_bykk(obj,aniPath,false,sq_GetDirection(obj),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate);
|
|
sq_moveWithParent(obj, pooledObj);
|
|
local pAni = pooledObj.getCurrentAnimation();
|
|
pAni.setLoop(true);
|
|
pAni.setSpeedRate(speedRate.tofloat());
|
|
obj.getVar("VortexOfHellFireEffect").clear_obj_vector();
|
|
obj.getVar("VortexOfHellFireEffect").push_obj_vector(pooledObj);
|
|
}
|
|
if(!obj.isExistTimeEvent(1)) obj.setTimeEvent(1, 20, -1, false);
|
|
break;
|
|
case 2:
|
|
obj.stopTimeEvent(1);
|
|
local sub = obj.getVar("VortexOfHellFire").getInt(0);
|
|
if(sub > 0){
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_VORTEXOFHELLFIREBODYEND_00_HOLYFRAME);
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/vortexofhellfirebodyend_00_holyframe.ani"), 0, 0);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VORTEXOFHELLFIRE, 14);
|
|
local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj);
|
|
createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/endfire/vortexofhellfireatkfire_01.ani",true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate);
|
|
createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/endfire/vortexofhellfireatksmoke_01.ani",true,direction,xPos,yPos - 1,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate);
|
|
}
|
|
else obj.sq_SetCurrentAnimation(ATPANI_BYKK_VORTEXOFHELLFIREBODYEND_00);
|
|
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_VORTEXOFHELLFIRE, -1, 1, 1.0);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VORTEXOFHELLFIRE, 14);
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 8000 / currentAni.getDelaySum(0, 0);
|
|
sq_ClearAttackBox(currentAni);
|
|
createSkillPassive_ATPriest_bykk(obj,obj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),2,SKILL_BYKK_VORTEXOFHELLFIRE,2,totalDamage,sizeRate,speedRate,sub,0,0,0,0);
|
|
createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/end/vortexofhellfirebodyend_eff.ani",true,sq_GetDirection(obj),sq_GetXPos(obj),sq_GetYPos(obj),0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/end/vortexofhellfirebodyend_smoke00.ani", 0, -1, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/end/vortexofhellfirebodyend_smoke01.ani", 0, -1, 0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndCurrentAni_VortexOfHellFire(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 0:
|
|
sq_SetMyShake(obj, 3, 80);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_VORTEXOFHELLFIRE, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
case 1:
|
|
local roundMax = 5;
|
|
if(obj.getRapidInputFrequency() > 0) roundMax = 10;
|
|
if(obj.getVar("VortexOfHellFire").getInt(1) + 1 >= roundMax){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(2);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_VORTEXOFHELLFIRE, STATE_PRIORITY_AUTO, true);
|
|
}
|
|
else{
|
|
obj.getVar("VortexOfHellFire").setInt(1, obj.getVar("VortexOfHellFire").getInt(1) + 1);
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_VORTEXOFHELLFIRE, STATE_PRIORITY_AUTO, true);
|
|
}
|
|
break;
|
|
case 2:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_VortexOfHellFire(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onProc_VortexOfHellFire(obj)
|
|
{
|
|
if(!obj) return;
|
|
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true);
|
|
obj.setSkillCommandEnable(SKILL_BYKK_VORTEXOFHELLFIRE,true);
|
|
if(obj.sq_IsEnterSkill(SKILL_BYKK_VORTEXOFHELLFIRE) != -1 || sq_IsEnterCommand(obj, E_ATTACK_COMMAND))
|
|
obj.addRapidInput();
|
|
}
|
|
|
|
function onKeyFrameFlag_VortexOfHellFire(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 0:
|
|
obj.resetHitObjectList();
|
|
local currentAni = obj.getCurrentAnimation();
|
|
local speedRate = 8000 / currentAni.getDelaySum(0, 0);
|
|
if(obj.getRapidInputFrequency() > 0){
|
|
currentAni.setSpeedRate(speedRate.tofloat() * 1.5);
|
|
local pooledObj = obj.getVar("VortexOfHellFireEffect").get_obj_vector(0);
|
|
if(pooledObj){
|
|
local pAni = pooledObj.getCurrentAnimation();
|
|
pAni.setSpeedRate(speedRate.tofloat() * 1.5);
|
|
}
|
|
}
|
|
if(obj.getVar("VortexOfHellFire").getInt(0) > 0){
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VORTEXOFHELLFIRE, 14);
|
|
local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj);
|
|
createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/loopfire/vortexofhellfireloopfirea_01.ani",true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate);
|
|
createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/loopfire/vortexofhellfireloopsmokea_01.ani",true,direction,xPos,yPos - 1,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate);
|
|
}
|
|
break;
|
|
case 1:
|
|
if(obj.getVar("VortexOfHellFire").getInt(0) > 0){
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VORTEXOFHELLFIRE, 14);
|
|
local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj);
|
|
createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/loopfire/vortexofhellfireloopfireb_01.ani",true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate);
|
|
createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/loopfire/vortexofhellfireloopsmokeb_01.ani",true,direction,xPos,yPos - 1,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate);
|
|
}
|
|
break;
|
|
case 2:
|
|
// if(obj.getRapidInputFrequency() > 0) obj.resetHitObjectList();
|
|
if(obj.getVar("VortexOfHellFire").getInt(0) > 0){
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VORTEXOFHELLFIRE, 14);
|
|
local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj);
|
|
createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/loopfire/vortexofhellfireloopfirec_01.ani",true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate);
|
|
createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/loopfire/vortexofhellfireloopsmokec_01.ani",true,direction,xPos,yPos - 1,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate);
|
|
}
|
|
break;
|
|
case 3:
|
|
if(obj.getVar("VortexOfHellFire").getInt(0) > 0){
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_VORTEXOFHELLFIRE, 14);
|
|
local direction = sq_GetDirection(obj), xPos = sq_GetXPos(obj), yPos = sq_GetYPos(obj);
|
|
createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/loopfire/vortexofhellfireloopfired_01.ani",true,direction,xPos,yPos,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate);
|
|
createOnlyDrawObjectEX_ATPriest_bykk(obj,"character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/loopfire/vortexofhellfireloopsmoked_01.ani",true,direction,xPos,yPos - 1,0,ENUM_DRAWLAYER_NORMAL,sizeRate,sizeRate);
|
|
}
|
|
break;
|
|
case 100:
|
|
//`EndEffectCorrection`
|
|
local pooledObj = obj.getVar("VortexOfHellFireEffect").get_obj_vector(0);
|
|
if(pooledObj) pooledObj.setValid(false);
|
|
break;
|
|
case 101:
|
|
obj.sq_PlaySound("PW_VORTEX_HELL_FIRE");
|
|
sq_SetMyShake(obj, 8, 200);
|
|
break;
|
|
case 102:
|
|
//`holy flame enable`
|
|
obj.getVar("HolyFlameEnable").setBool(0, true);
|
|
obj.getVar("PurificationEnable").setBool(0, true);
|
|
break;
|
|
case 106:
|
|
//`add holy flame end effect`
|
|
if(obj.getVar("VortexOfHellFire").getInt(0) > 0){
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/end/vortexofhellfirebodyend_fireend01.ani", 0, 0, 0);
|
|
sq_AddDrawOnlyAniFromParent(obj, "character/swordman/effect/animation/1_atpriest_bykk/atvortexofhellfire/end/vortexofhellfirebodyend_fireend02.ani", 0, -1, 0);
|
|
}
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_VortexOfHellFire(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
switch(timeEventIndex){
|
|
case 1:
|
|
if(obj.isMyControlObject()){
|
|
local speed = 400.0;
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL)) sq_SetVelocity(obj, 0, speed);
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL)) sq_SetVelocity(obj, 0, -speed);
|
|
else sq_SetVelocity(obj, 0, 0.0);
|
|
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL)) sq_SetVelocity(obj, 1, -speed * 0.2);
|
|
else if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL)) sq_SetVelocity(obj, 1, speed * 0.2);
|
|
else sq_SetVelocity(obj, 1, 0.0);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onEndState_VortexOfHellFire(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
if(new_state != STATE_BYKK_VORTEXOFHELLFIRE){
|
|
local pooledObj = obj.getVar("VortexOfHellFireEffect").get_obj_vector(0);
|
|
if(pooledObj) pooledObj.setValid(false);
|
|
}
|
|
}
|
|
|
|
function onAttack_VortexOfHellFire(obj, damager, boundingBox, isStuck)
|
|
{
|
|
if(!obj || isStuck) return;
|
|
if(damager.isObjectType(OBJECTTYPE_ACTIVE)){
|
|
if(obj.getVar("VortexOfHellFire").getInt(0) > 0) onAttack_EssenceofPhlege_SetFireBomb(obj, damager, boundingBox);
|
|
}
|
|
}
|
|
|
|
|
|
//净化之焰
|
|
function checkExecutableSkill_Purification(obj)
|
|
{
|
|
if (!obj) return false;
|
|
local isUse = obj.sq_IsUseSkill(SKILL_BYKK_PURIFICATION);
|
|
if (isUse){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(0);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PURIFICATION, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function checkCommandEnable_Purification(obj)
|
|
{
|
|
if (!obj) return false;
|
|
return true;
|
|
}
|
|
|
|
function onSetState_Purification(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.sq_GetVectorData(datas, 0);
|
|
obj.setSkillSubState(subState);
|
|
obj.sq_StopMove();
|
|
switch(subState){
|
|
case 0:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_PURIFICATION_LOOP_BODY);
|
|
obj.getVar("PurificationSet").setInt(0, 0);
|
|
obj.getVar("PurificationTar").clear_obj_vector();
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot){
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/purification_loop_body.ani"), 0, 0);
|
|
}
|
|
break;
|
|
case 1:
|
|
obj.sq_SetCurrentAnimation(ATPANI_BYKK_PURIFICATION_END_BODY);
|
|
local sub = 0;
|
|
local loadSlot = obj.sq_GetSkillLoad(SKILL_BYKK_HOLYFLAME);
|
|
if(loadSlot){
|
|
sub = 1;
|
|
obj.sq_AddStateLayerAnimation(1,obj.sq_CreateCNRDAnimation("effect/animation/1_atpriest_bykk/holyflameweaponeffect/purification_end_body.ani"), 0, 0);
|
|
}
|
|
local size = obj.getVar("PurificationTar").get_obj_vector_size();
|
|
print("size = "+size);
|
|
if(size > 0){
|
|
local totalDamage = obj.sq_GetBonusRateWithPassive(SKILL_BYKK_PURIFICATION, -1, 0, 1.0);
|
|
local sizeRate = sq_GetIntData(obj, SKILL_BYKK_PURIFICATION, 2);
|
|
for(local i = 0; i < size; i++){
|
|
local targetObj = obj.getVar("PurificationTar").get_obj_vector(i);
|
|
if(targetObj && targetObj.getState() != STATE_DIE) createSkillPassive_ATPriest_bykk(obj,targetObj,PASSIVEOBJ_BYKK_ATPRIEST,0,0,0,obj.getDirection(),2,SKILL_BYKK_PURIFICATION,1,totalDamage,sizeRate,sub,0,0,0,0,0);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
}
|
|
|
|
function onEndCurrentAni_Purification(obj)
|
|
{
|
|
if(!obj) return;
|
|
local subState = obj.getSkillSubState();
|
|
switch(subState){
|
|
case 1:
|
|
obj.sq_IntVectClear();
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_AUTO, true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onProcCon_Purification(obj)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|
|
function onKeyFrameFlag_Purification(obj, flagIndex)
|
|
{
|
|
if(!obj) return false;
|
|
switch(flagIndex){
|
|
case 101:
|
|
local objectManager = obj.getObjectManager();//得到對象管理器
|
|
for (local i = 0; i < objectManager.getCollisionObjectNumber(); i++){
|
|
local object = objectManager.getCollisionObject(i);//得到控制類對象
|
|
if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj)){
|
|
if(CNSquirrelAppendage.sq_IsAppendAppendage(object, "character/demonicswordman/2_inquistor/passiveskill/ap_brandofheresy_debuff.nut") || CNSquirrelAppendage.sq_IsAppendAppendage(object, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut")){
|
|
if(!CNSquirrelAppendage.sq_IsAppendAppendage(object, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut")){
|
|
local AddAppendage = CNSquirrelAppendage.sq_AppendAppendage(object, obj, -1, false, "character/demonicswordman/2_inquistor/ap_holyflame_hold.nut", true);
|
|
sq_HoldAndDelayDie(object, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , AddAppendage);
|
|
AddAppendage.sq_SetValidTime(1500);
|
|
}
|
|
if(!obj.getVar("PurificationTar").is_obj_vector(object)) obj.getVar("PurificationTar").push_obj_vector(object);
|
|
obj.getVar("PurificationSet").setInt(0, obj.getVar("PurificationSet").getInt(0) + 1);
|
|
}
|
|
}
|
|
}
|
|
if(obj.getVar("PurificationSet").getInt(0) > 3){
|
|
obj.sq_IntVectClear();
|
|
obj.sq_IntVectPush(1);
|
|
obj.sq_AddSetStatePacket(STATE_BYKK_PURIFICATION, STATE_PRIORITY_IGNORE_FORCE, true);
|
|
}
|
|
else obj.getVar("PurificationSet").setInt(0, obj.getVar("PurificationSet").getInt(0) + 1);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onTimeEvent_Purification(obj, timeEventIndex, timeEventCount)
|
|
{
|
|
if(!obj) return false;
|
|
}
|
|
|
|
function onEndState_Purification(obj, new_state)
|
|
{
|
|
if(!obj) return;
|
|
}
|
|
|