|
SUB_STATE_METEORSWORD_0<- 0
SUB_STATE_METEORSWORD_1<- 1
SUB_STATE_METEORSWORD_2<- 2
SUB_STATE_METEORSWORD_3<- 3
SUB_STATE_METEORSWORD_4<- 4
SUB_STATE_METEORSWORD_5<- 5
function checkExecutableSkill_MeteorSword(obj)
{
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(SKILL_METEORSWORD);
if (isUse)
{
obj.sq_IsEnterSkillLastKeyUnits(SKILL_METEORSWORD);
obj.getVar("aniobj").clear_obj_vector();
obj.getVar("time").clear_ct_vector();
obj.getVar("endtime").clear_ct_vector();
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_METEORSWORD_0);
obj.sq_AddSetStatePacket(STATE_METEORSWORD, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_MeteorSword(obj)
{
if (!obj) return false;
local state = obj.sq_GetState();
if (state == STATE_STAND)
return true;
if(state == STATE_ATTACK)
{
return obj.sq_IsCommandEnable(SKILL_METEORSWORD);
}
return true;
}
function onSetState_MeteorSword(obj, state, datas, isResetTimer)
{
if(!obj) return;
local SubState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(SubState);
obj.sq_StopMove();
switch (SubState)
{
case SUB_STATE_METEORSWORD_0:
obj.sq_SetCurrentAnimation(CUSTOM_ANI_METEORSWORDSTART);
local WeaponType = obj.getWeaponSubType();
obj.getVar("weapontype").clear_vector();
obj.getVar("weapontype").push_vector(WeaponType);
local skill_level = sq_GetSkillLevel(obj, SKILL_METEORSWORD);
obj.getVar("atkinfo").clear_vector();
local AtkInfoVar = obj.getVar("atkinfo");
AtkInfoVar.push_vector(sq_GetLevelData(obj,SKILL_METEORSWORD, 0, skill_level));
AtkInfoVar.push_vector(sq_GetLevelData(obj,SKILL_METEORSWORD, 1, skill_level));
AtkInfoVar.push_vector(sq_GetLevelData(obj,SKILL_METEORSWORD, 2, skill_level));
AtkInfoVar.push_vector(sq_GetLevelData(obj,SKILL_METEORSWORD, 3, skill_level));
AtkInfoVar.push_vector(sq_GetLevelData(obj,SKILL_METEORSWORD, 4, skill_level));
AtkInfoVar.push_vector(sq_GetLevelData(obj,SKILL_METEORSWORD, 5, skill_level));
AtkInfoVar.push_vector(sq_GetLevelData(obj,SKILL_METEORSWORD, 6, skill_level));
AtkInfoVar.push_vector(sq_GetLevelData(obj,SKILL_METEORSWORD, 7, skill_level));
AtkInfoVar.push_vector(sq_GetLevelData(obj,SKILL_METEORSWORD, 8, skill_level));
AtkInfoVar.push_vector(sq_GetLevelData(obj,SKILL_METEORSWORD, 9, skill_level));
AtkInfoVar.push_vector(sq_GetLevelData(obj,SKILL_METEORSWORD, 10, skill_level));
switch (WeaponType)
{
case 1:
AtkInfoVar.push_vector(sq_GetLevelData(obj,SKILL_METEORSWORD, 11, skill_level));
AtkInfoVar.push_vector(sq_GetLevelData(obj,SKILL_METEORSWORD, 12, skill_level));
AtkInfoVar.push_vector(sq_GetLevelData(obj,SKILL_METEORSWORD, 13, skill_level));
AtkInfoVar.push_vector(sq_GetLevelData(obj,SKILL_METEORSWORD, 14, skill_level));
break;
}
break;
case SUB_STATE_METEORSWORD_1:
obj.sq_SetCurrentAnimation(CUSTOM_ANI_METEORSWORDCHARGE);
break;
case SUB_STATE_METEORSWORD_2:
obj.sq_SetCurrentAnimation(CUSTOM_ANI_METEORSWORDCHARGEFINISH);
break;
case SUB_STATE_METEORSWORD_3:
obj.sq_SetCurrentAnimation(CUSTOM_ANI_METEORSWORDUP);
sq_CreateDrawOnlyObject(obj, "character/swordman/effect/animation/MeteorSword/up_MeteorSword_start_dust.ani", ENUM_DRAWLAYER_NORMAL, true);
sq_CreateDrawOnlyObject(obj, "character/swordman/effect/animation/MeteorSword/up_MeteorSword_upeffect.ani", ENUM_DRAWLAYER_NORMAL, true);
obj.sq_StartWrite();
obj.sq_WriteDword(SKILL_METEORSWORD);
obj.sq_SendCreatePassiveObjectPacket(24370, 0, 0, 0, 0);
break;
case SUB_STATE_METEORSWORD_4:
local flashScreenObj = sq_flashScreen(obj,50,99990,0,150, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
obj.getVar("flashobj").clear_obj_vector();
obj.getVar("flashobj").push_obj_vector(flashScreenObj);
obj.sq_SetCurrentAnimation(CUSTOM_ANI_METEORSWORDDROP);
obj.sq_ZStop();
break;
case SUB_STATE_METEORSWORD_5:
obj.sq_SetCurrentAnimation(CUSTOM_ANI_METEORSWORDEXPLOSION);
obj.sq_SetCurrentAttackInfo(CUSTOM_ATTACK_METEORSWORDEXPLOSION);
obj.sq_SetCurrentAttackBonusRate(obj.getVar("atkinfo").get_vector(10));
RemoveAllFlash(obj);
sq_SetMyShake(obj,6,200);
sq_flashScreen(obj, 50, 100, 0, 150, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
break;
}
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,
SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function onProc_MeteorSword(obj)
{
if(!obj) return;
if(!obj.isMyControlObject()) return;
local SubState = obj.getSkillSubState();
switch (SubState)
{
case SUB_STATE_METEORSWORD_1:
case SUB_STATE_METEORSWORD_2:
if(!obj.isDownSkillLastKey())
{
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_METEORSWORD_3);
obj.sq_AddSetStatePacket(STATE_METEORSWORD, STATE_PRIORITY_IGNORE_FORCE, true);
}
if(SubState!=SUB_STATE_METEORSWORD_1) return;
local AtkInfoVar = obj.getVar("atkinfo");
local StateTime = obj.sq_GetStateTimer();
if(StateTime>=obj.getVar("atkinfo").get_vector(0))
{
local addrate = AtkInfoVar.get_vector(1);
local atkdamage1 = AtkInfoVar.get_vector(2);
local atkdamage2 = AtkInfoVar.get_vector(5);
local atkdamage3 = AtkInfoVar.get_vector(10);
AtkInfoVar.set_vector(2,atkdamage1+atkdamage1/100*addrate);
AtkInfoVar.set_vector(5,atkdamage2+atkdamage2/100*addrate);
AtkInfoVar.set_vector(10,atkdamage3+atkdamage3/100*addrate);
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_METEORSWORD_2);
obj.sq_AddSetStatePacket(STATE_METEORSWORD, STATE_PRIORITY_IGNORE_FORCE, true);
}
break;
case SUB_STATE_METEORSWORD_3:
local size = obj.getVar("aniobj").get_obj_vector_size();
if(size!=1)
{
local pAni = obj.sq_GetCurrentAni();
local currentT = sq_GetCurrentTime(pAni);
local MoveDistance = 900;
local zpos= 0;
local delay = 150;
local v = sq_GetUniformVelocity(zpos, MoveDistance, currentT, delay);
sq_setCurrentAxisPos(obj, 2, v);
if(obj.getZPos()>=900)
{
obj.sq_ZStop();
local AniObj = sq_CreateDrawOnlyObject(obj, "passiveobject/script_sqr_nut_qq506807329/swordman/animation/meteorsword/meteorsword_target.ani", ENUM_DRAWLAYER_BOTTOM, true);
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj);
AniObj.setCurrentPos(x,y,0);
obj.getVar("aniobj").push_obj_vector(AniObj);
}
}
else
{
local MaxMoveTime = obj.getVar("atkinfo").get_vector(4);
local StateTime = obj.sq_GetStateTimer()-300;
if(StateTime<MaxMoveTime)
{
local offsetx = 0;
local offsety = 0;
local movelv = obj.getVar("atkinfo").get_vector(3);
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL))
offsety-=movelv;
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL))
offsety+=movelv;
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL))
offsetx-=movelv;
if(sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL))
offsetx+=movelv;
if(offsetx==0&&offsety==0) return;
local AniObj = obj.getVar("aniobj").get_obj_vector(0);
local x = sq_GetXPos(AniObj)+offsetx;
local y = sq_GetYPos(AniObj)+offsety;
if(!obj.isMovablePos(x, y)) return;
sq_setCurrentAxisPos(AniObj, 0, x);
sq_setCurrentAxisPos(AniObj, 1, y);
}else
{
local AniObj = obj.getVar("aniobj").get_obj_vector(0);
obj.getVar("moveinfo").clear_vector();
obj.getVar("moveinfo").push_vector(sq_GetXPos(AniObj));
obj.getVar("moveinfo").push_vector(sq_GetYPos(AniObj));
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_METEORSWORD_4);
obj.sq_AddSetStatePacket(STATE_METEORSWORD, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
break;
case SUB_STATE_METEORSWORD_4:
local endtimer = obj.getVar("endtime").get_ct_vector(0);
if(endtimer)
{
local currentT = endtimer.Get();
if(currentT>=200)
{
local MoveDistance = 0;
local zpos= 900;
local delay = 50+200;
local v = sq_GetUniformVelocity(zpos, MoveDistance, currentT, delay);
sq_setCurrentAxisPos(obj, 2, v);
if(v!=0) return;
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_METEORSWORD_5);
obj.sq_AddSetStatePacket(STATE_METEORSWORD, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
break;
}
}
function onEndCurrentAni_MeteorSword(obj)
{
if(!obj) return;
local SubState = obj.getSkillSubState();
switch (SubState)
{
case SUB_STATE_METEORSWORD_0:
obj.sq_IntVectClear();
if(obj.isDownSkillLastKey())
obj.sq_IntVectPush(SUB_STATE_METEORSWORD_1);
else
obj.sq_IntVectPush(SUB_STATE_METEORSWORD_3);
obj.sq_AddSetStatePacket(STATE_METEORSWORD, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case SUB_STATE_METEORSWORD_2:
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_METEORSWORD_3);
obj.sq_AddSetStatePacket(STATE_METEORSWORD, STATE_PRIORITY_IGNORE_FORCE, true);
break;
case SUB_STATE_METEORSWORD_5:
obj.getVar("time").clear_ct_vector();
obj.getVar("endtime").clear_ct_vector();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
break;
}
}
function onTimeEvent_MeteorSword(obj, timeEventIndex, timeEventCount)
{
if(!obj)
return;
if(!obj.isMyControlObject())
return;
switch (timeEventIndex)
{
case 0:
local AtkInfoVar = obj.getVar("atkinfo");
local CreateCount = AtkInfoVar.get_vector(6);
if(CreateCount>0)
{
local Atkx = AtkInfoVar.get_vector(8)/2;
local Atky = AtkInfoVar.get_vector(9)/2;
local Anix = obj.getVar("moveinfo").get_vector(0);
local Aniy = obj.getVar("moveinfo").get_vector(1);
local Randomx = sq_getRandom(Anix-Atkx,Anix+Atkx);
local Randomy = sq_getRandom(Aniy-Atky,Aniy+Atky);
obj.sq_StartWrite();
obj.sq_WriteDword(SKILL_METEORSWORD);
sq_SendCreatePassiveObjectPacketPos(obj, 24370, 0, Randomx, Randomy, 800);
obj.getVar("atkinfo").set_vector(6,CreateCount-1);
}else
{
obj.getVar("time").push_ct_vector();
local timer = obj.getVar("time").get_ct_vector(0);
timer.Reset();
timer.Start(10000,0);
obj.stopTimeEvent(0);
}
break;
}
}
function getScrollBasisPos_MeteorSword(obj)
{
if (!obj) return;
if(!obj.isMyControlObject()) return false;
local SubState = obj.getSkillSubState();
if(SubState == SUB_STATE_METEORSWORD_4)
{
local CreateCount = obj.getVar("atkinfo").get_vector(6);
if(CreateCount>0)
{
local pAni = obj.sq_GetCurrentAni();
local currentT = sq_GetCurrentTime(pAni);
local delay = 150;
local xpos= obj.getXPos();
local Anix = obj.getVar("moveinfo").get_vector(0);
Anix = xpos+(Anix-xpos)/2;
local v = sq_GetUniformVelocity(xpos, Anix, currentT, delay);
obj.sq_SetCameraScrollPosition(v, obj.getYPos(), 0);
if(v==Anix && !obj.isExistTimeEvent(0))
{
local CreateDelay = obj.getVar("atkinfo").get_vector(7);
obj.setTimeEvent(0, CreateDelay, 0, true);
RemoveAllAni(obj);
}
}else
{
local timer = obj.getVar("time").get_ct_vector(0);
if(timer)
{
local currentT = timer.Get();
local delay = 150;
local xpos= obj.getXPos();
local Anix = obj.getVar("moveinfo").get_vector(0);
xpos = xpos+(Anix-xpos)/2;
local v = sq_GetUniformVelocity(xpos, Anix, currentT, delay);
obj.sq_SetCameraScrollPosition(v, obj.getYPos(), 0);
if(v==Anix)
{
local Aniy = obj.getVar("moveinfo").get_vector(1);
sq_SetCurrentPos(obj,Anix,Aniy,900);
obj.getVar("time").clear_ct_vector();
obj.getVar("endtime").push_ct_vector();
local endtimer = obj.getVar("endtime").get_ct_vector(0);
endtimer.Reset();
endtimer.Start(10000,0);
}
}
}
return true;
}
return false;
} |
|