Sqr/character/priest/fastmove.nut

591 lines
19 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// sub state
S_FASTMOVE_PLAY <- 0
S_FASTMOVE_LOOP <- 1
S_FASTMOVE_PRO <- 2
S_FASTMOVE_END <- 3
// 蝶鹧? 等桧颤 樯策蝶
FM_SI_C_TIME <- 0 // ?瞪 ? 体陈桧 谏瞪 当撩肾朝 卫除
FM_SI_MULTI_HIT_COUNT <- 1 // 棻钦?? 除问
FM_SI_MOVE_VEL <- 2 // 体陈 桧翕楼紫
FM_SI_Y_AXIS_MOVESPEED <- 3 // 体陈 鼻? 桧翕楼紫
// 溯涟樯? 樯策蝶
FM_LI_HIT_RATE <- 0 // 体陈 ?? 等嘐虽(%)
FM_LI_MOVE_LEN <- 1 // 桧翕剪葬 (px)
VECTOR_I_SRC_X <- 0 // 卫蒙虽薄击 荡潍? 漱搅 樯策蝶
// 蝶鉴 撮睡嫦翕 亵勒击 虏菟横舆朝 ?热殓栖棻.. 嫦翕 亵勒 state朝 桧嘐 模蝶缣怃 掘?肾横 毡蝗栖棻. 桧够缣怃 useskill娄 setstate蒂 虽姜?舆贼 腌栖棻.
function checkExecutableSkill_Fastmove(obj)
{
if(!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_FASTMOVE);
if(b_useskill) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(S_FASTMOVE_PLAY); // substate撮?
obj.sq_addSetStatePacket(STATE_FASTMOVE, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
// 蝶鉴嬴桧夔 ?撩? 亵勒击 评虽朝 ?热殓栖棻. true蒂 葬欐?贼 蝶鉴 嬴桧夔桧 ?撩?陛 腌栖棻. (嫦翕亵勒 state朝 模蝶缣怃 籀葬腌栖棻.)
function checkCommandEnable_Fastmove(obj)
{
if(!obj) return false;
local state = obj.sq_GetSTATE();
if(state == STATE_ATTACK) {
return obj.sq_IsCommandEnable(SKILL_FASTMOVE); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_FASTMOVE);
}
return true;
}
// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻.
function onSetState_fastmove(obj, state, datas, isResetTimer)
{
if(!obj) return;
local substate = obj.sq_getVectorData(datas, 0); // 罗廓箪 substate殓栖棻..
obj.setSkillSubState(substate); //set substate
local sq_var = obj.getVar();
sq_var.clear_vector();
sq_var.push_vector(0);
// 蝶鹧? 等桧颤 樯策蝶
//FM_SI_C_TIME <- 0 // ?瞪 ? 体陈桧 谏瞪 当撩肾朝 卫除
//FM_SI_MULTI_HIT_COUNT <- 1 // 棻钦?? 除问
// 溯涟樯? 樯策蝶
//FM_LI_HIT_RATE <- 0 // 体陈 ?? 等嘐虽(%)
//FM_LI_MOVE_LEN <- 1 // 桧翕剪葬 (px)
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
local particle = sq_var.GetparticleCreaterMap("FastMove", "Character/Priest/Effect/Particle/Fastmove.ptl", obj);
obj.sq_setCurrentAttackInfo(CUSTOM_ATTACKINFO_FASTMOVE);
obj.sq_setAttackPowerWithPassive(SKILL_FASTMOVE, state, -1,FM_LI_HIT_RATE,1.0);
if(substate == S_FASTMOVE_PLAY) {
obj.sq_stopMove();
local time = obj.sq_getIntData(SKILL_FASTMOVE, FM_SI_C_TIME);
sq_var.push_vector(time);
sq_var.push_vector(0);
obj.sq_setCurrentAnimation(CUSTOM_ANI_FASTMOVE1);
}
else if(substate == S_FASTMOVE_LOOP) {
obj.sq_stopMove();
//obj.sq_var.push_vector(posZ);
//local pAni = obj.sq_getCurrentAni();
sq_var.push_vector(posZ); // index : 1 // srcZ
local jumpstate = 0;
//print("sq_GetVelocityZ:" + sq_GetVelocity(obj, 2));
//print("getDownDownFrame:" + obj.getDownDownFrame() + " getDownUpFrame:" + obj.getDownUpFrame() + " getDownBounceUpFrame:" + obj.getDownBounceUpFrame() + " getDownLieFrame:" + obj.getDownLieFrame());
//print("getJumpUpStartFrame:" + obj.getJumpUpStartFrame() + " getJumpDownStartFrame:" + obj.getJumpDownStartFrame() + " getJumpLandStartFrame:" + obj.getJumpLandStartFrame());
if(posZ > 0) {
//local frmIndex = obj.getDownUpFrame();
if(sq_GetVelocity(obj, 2) < 0) {
jumpstate = 2; // ?鬼酝
}
else {
jumpstate = 1; // 鼻蝓酝
}
}
sq_var.push_vector(jumpstate); // index : 2 // 薄??楚斜 0 : 裔阶缣 毡历击 阳 1 : 萤塭陞 阳 毡历击阳 2 : 顶溥陛朝 牖除 毡历击 阳
sq_var.push_vector(0); // index : 3 //
sq_var.push_vector(0); // index : 4 //
obj.sq_setCurrentAnimation(CUSTOM_ANI_FASTMOVE2);
}
else if(substate == S_FASTMOVE_PRO) {
//CUSTOM_ATTACKINFO_FASTMOVE
local max_break_v = obj.sq_getVectorData(datas, 1); // 舒廓箪 vector高擎 马楼 高
obj.sq_setCurrentAnimation(CUSTOM_ANI_FASTMOVE3);
sq_var.push_vector(posX); // 漱搅 樯策蝶 1
local pAni = obj.sq_getCurrentAni();
local initDelay = pAni.GetFrameStartTime(3);
//local vel = obj.sq_getIntData(SKILL_FASTMOVE, FM_SI_MOVE_VEL); // 桧翕楼紫
local vel = obj.sq_getIntData(SKILL_FASTMOVE, FM_SI_MOVE_VEL); // 桧翕楼紫
local d = obj.sq_getLevelData(SKILL_FASTMOVE, FM_LI_MOVE_LEN, 1);
//local moveT = (d * 10) / vel; // 桧翕 识 卫除 掘?晦
local v_rate;
if(!(sq_GetCurrentModuleType() == 4) && !(sq_GetCurrentModuleType() == 5)) //?营赅菊桧 pvp赅菊桧釭 fair_pvp赅菊橾 唳办
{
v_rate = (vel - max_break_v);
}
else
{
v_rate = vel;
}
if(v_rate <= 0)
{
v_rate = 1;
}
local moveT = (d * 800) / (v_rate); // 桧翕 识 卫除 掘?晦
sq_var.push_vector(moveT); // 桧翕 识 卫除 漱搅 樯策蝶 2
sq_var.push_vector(0); // 桧翕 ?楚斜 樯策蝶 3 桧翕? 热 桡朝 虽羲击 虏陬击 阳 斜牖除 涡桧鼻 桧翕跤?棻..
sq_var.push_vector(posY); // 樯策蝶4 夥煎 瞪 posY谢?蒂 荡潍?朝 睡碟殓栖棻.. 体陈奢问桧 鼻?煎 桧翕桧 陛栋?虽贼怃 桧翕?楚斜妇湿 籀葬蒂 亿照啪 ?捡?栖棻..
local len = obj.sq_getLevelData(SKILL_FASTMOVE, FM_LI_MOVE_LEN, 1);
//len = len - break_len; // 马楼胀 高击 梗朝棻..
sq_var.push_vector(len); // 樯策蝶5
sq_var.push_vector(0); // 樯策蝶6 饵遴萄 ?楚斜
local hitCnt = obj.sq_getIntData(SKILL_FASTMOVE, FM_SI_MULTI_HIT_COUNT); // 棻钦??
local term = moveT / hitCnt;
obj.sq_setShake(obj, 2, moveT);
//obj.sq_setShake(obj, 4, moveT);
// 赝葬?
sq_CurrentAnimationProc(pAni);
// local alsSpinNormal = obj.sq_getAutoLayerWorkAnimation(pAni, "2_sn");
// local alsSpinDodge = obj.sq_getAutoLayerWorkAnimation(pAni, "2_sd");
// if(alsSpinNormal)
// alsSpinNormal.setCustomClipArea(true, 0, 0, 10, 10, false);
//if(alsSpinDodge)
//alsSpinDodge.setCustomClipArea(true, 0, 0, 10, 10, false);
//
sq_var.clear_timer_vector();
sq_var.push_timer_vector();
local t = sq_var.get_timer_vector(0);
//t.setParameter(35, -1);
t.setParameter(60, -1);
t.resetInstant(0);
obj.sq_timer_.setParameter(term, hitCnt);
obj.sq_timer_.resetInstant(initDelay);
// 坚楼桧翕 y蹴 桧翕 陛栋?紫烟 热姜蒙机
// 蝶鹧? 等桧颤煎 鼻?桧翕 楼紫 跷陛
// FM_SI_Y_AXIS_MOVESPEED <- 3 // 体陈 鼻? 桧翕楼紫
local y_axis_movespeed = obj.sq_getIntData(SKILL_FASTMOVE, FM_SI_Y_AXIS_MOVESPEED);
//obj.sq_setMoveDirection(ENUM_DIRECTION_DOWN, ENUM_DIRECTION_DOWN);
//obj.setAxisMoveDirection(1, ENUM_DIRECTION_DOWN, true, true);
//obj.sq_setStaticMoveInfo(1, 263, 0, true, 0, 0);
//obj.sq_setStaticMoveInfo(1, 200, 0, true, 0, 0);
//obj.sq_setStaticSpeedInfo(1, 1);
//
obj.sq_setStaticMoveInfo(1,y_axis_movespeed,y_axis_movespeed,true);
obj.sq_setMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL);
//
}
else if(substate == S_FASTMOVE_END) {
obj.sq_stopMove();
sq_var.push_vector(posX); // 漱搅 樯策蝶 1
obj.sq_setCurrentAnimation(CUSTOM_ANI_FASTMOVE4);
}
}
// prepareDraw ?热 殓栖棻..
function prepareDraw_fastmove(obj)
{
if(!obj) return;
// local substate = obj.getSkillSubState();
//if(substate == S_FASTMOVE_PRO) {
//local pAni = obj.sq_getCurrentAni();
//local alsSpinNormal = obj.sq_getAutoLayerWorkAnimation(pAni, "2_sn");
//local alsSpinDodge = obj.sq_getAutoLayerWorkAnimation(pAni, "2_sd");
//if(alsSpinNormal)
// alsSpinNormal.setCustomClipArea(true, 5, 5, 5, 5, false);
//if(alsSpinDodge)
// alsSpinDodge.setCustomClipArea(true, 0, 0, 0, 0, false);
// }
}
// loop 睡碟殓栖棻 ismycontrol煎 马谆虽 强擎 翱念胀 赅苌 object菟桧 桧够击 剪纂啪腌栖棻.
function onProc_fastmove(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
local pAni = obj.sq_getCurrentAni();
local frmIndex = obj.sq_ani_GetCurrentFrameIndex(pAni);
local sq_var = obj.getVar();
local currentT = sq_GetCurrentTime(pAni);
//S_FASTMOVE_PLAY <- 0
//S_FASTMOVE_LOOP <- 1
//S_FASTMOVE_PRO <- 2
//S_FASTMOVE_END <- 3
if(substate == S_FASTMOVE_PLAY) {
}
else if(substate == S_FASTMOVE_LOOP) {
local max_break_v = 0;
//local time = obj.sq_getIntData(SKILL_FASTMOVE, FM_SI_C_TIME);
local time = obj.sq_getIntData(SKILL_FASTMOVE, FM_SI_C_TIME); // 体陈桧 谏瞪 当撩肾朝 卫除..
if(obj.isMyControlObject()) {
if(sq_GetSkillLevel(obj, SKILL_FASTMOVE_EX) > 0) // 坚楼桧翕鬼? 妇湿 蒙机
{
local direction = obj.sq_getInputDirection(0);
if(direction == ENUM_DIRECTION_NEUTRAL) {
sq_var.set_vector(4, currentT); // 嬴鼠匙紫 寰扬毓击阳 卫除击 羹觼?棻..
}
if(direction == ENUM_DIRECTION_LEFT || direction == ENUM_DIRECTION_RIGHT) {
if(obj.getDirection() == ENUM_DIRECTION_LEFT || obj.getDirection() == ENUM_DIRECTION_RIGHT) {
if(direction != obj.getDirection()) {
//local max_break = 200;
local max_break = obj.sq_getIntData(SKILL_FASTMOVE_EX, 4); //替葬啪 桧翕?朝 绿徽 (0~300) // 0 戏煎 ?贼 晦襄 楼紫陛 釭螃啪 肾坚 高桧 棺横釭贼 楼紫陛 替溥喂栖棻..
local t = time - sq_var.get_vector(4);
local c_t = currentT - sq_var.get_vector(4);
local v = sq_GetUniformVelocity(0, max_break, c_t, t);
max_break_v = v;
//print("\n v:" + v + " c_t:" + c_t + " t:" + t);
}
}
}
}
}
//sq_var.push_vector(posZ); // index : 1 // srcZ
local srcZ = sq_var.get_vector(1); // 卫瞪 卫蒙 堪桧
local jumpstate = sq_var.get_vector(2); // jumpstate : 0 : 夥款 1 : 鼻蝓酝 2 : ?鬼酝
local up_t = time / 2;
local up_l = 20 + srcZ;
local move_l = 0;
//if(srcZ <= 0) {
if(jumpstate == 0) {
if(up_t > currentT) {
//move_l = sq_GetAccel(0, up_l, currentT, up_t, true);
move_l = sq_GetAccel(srcZ, up_l, currentT, up_t, true);
}
else {
move_l = sq_GetAccel(up_l, 0, currentT - up_t, up_t, false);
}
if(currentT >= time) {
obj.setCurrentPos(posX, posY, 0);
if(obj.isMyControlObject()) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(S_FASTMOVE_PRO);
obj.sq_IntVectPush(max_break_v);
obj.sq_addSetStatePacket(STATE_FASTMOVE, STATE_PRIORITY_USER, true);
}
}
else {
obj.setCurrentPos(posX, posY, move_l);
}
}
else if(jumpstate == 1) {
up_t = 100;
local down_t = 400;
up_l = 10 + srcZ;
move_l = 0;
//print("\n uprising");
if(up_t > currentT) {
move_l = sq_GetAccel(srcZ, up_l, currentT, up_t, true);
}
else {
move_l = sq_GetAccel(up_l, 0, currentT - up_t, down_t, false);
}
if(currentT >= (down_t + up_t) ) {
obj.setCurrentPos(posX, posY, 0);
if(obj.isMyControlObject()) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(S_FASTMOVE_PRO);
obj.sq_IntVectPush(max_break_v);
obj.sq_addSetStatePacket(STATE_FASTMOVE, STATE_PRIORITY_USER, true);
}
}
else {
obj.setCurrentPos(posX, posY, move_l);
}
}
else if(jumpstate == 2) { // ?鬼酝
up_t = 50;
local down_t = 400;
up_l = srcZ;
move_l = 0;
//print("\n downing");
if(up_t > currentT) {
move_l = sq_GetAccel(srcZ, up_l, currentT, up_t, true);
}
else {
move_l = sq_GetAccel(up_l, 0, currentT - up_t, down_t, false);
}
if(currentT >= (down_t + up_t) ) {
obj.setCurrentPos(posX, posY, 0);
if(obj.isMyControlObject()) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(S_FASTMOVE_PRO);
obj.sq_IntVectPush(max_break_v);
obj.sq_addSetStatePacket(STATE_FASTMOVE, STATE_PRIORITY_USER, true);
}
}
else {
obj.setCurrentPos(posX, posY, move_l);
}
}
}
else if(substate == S_FASTMOVE_PRO) {
//FM_LI_HIT_RATE <- 0 // 体陈 ?? 等嘐虽(%)
//FM_LI_MOVE_LEN <- 1 // 桧翕剪葬 (px)
local initDelay = pAni.GetFrameStartTime(2);
if(initDelay <= currentT) {
local delayT = sq_var.get_vector(2); // 漱搅樯策蝶 2 识 桧翕卫除
//print(delayT);
local len = sq_var.get_vector(5);
//print(len);
if(sq_var.get_vector(6) == 0) // 樯策蝶6 饵遴萄 ?楚斜
{
obj.sq_PlaySound("FMOVE_DASH_LOOP", 7575);
sq_var.set_vector(6, 1);
}
local v = sq_GetAccel(0, len, currentT - initDelay, delayT, false);
//local v = sq_GetUniformVelocity(0, len, currentT - initDelay, delayT);
local srcX = sq_var.get_vector(1); // 漱搅 樯策蝶 1
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);
if(sq_var.get_vector(3)) { // 瞪?溯歜缣怃 桧翕? 热 桡朝 虽羲击 虏陬棻贼..
if(sq_var.get_vector(4) != posY) { // 瞪 posY谛 绿掖?瑭怃 殖塭螺棻贼..
sq_var.set_vector(3, 0); // 桧翕?楚斜蒂 off?鄹栖棻..
sq_var.set_vector(4, posY);
}
}
if(obj.isMovablePos(dstX, posY) && !sq_var.get_vector(3)) { // 桧翕?楚斜谛 桧翕陛栋虽羲桧 赅舒 陛栋?捡 桧翕
//obj.setCurrentPos(dstX, posY, posZ);
sq_setCurrentAxisPos(obj, 0, dstX);
}
else { // 桧翕? 热 桡朝 虽羲击 虏陬棻..
sq_var.set_vector(3,1); // 桧翕 ?楚斜 樯策蝶 3 桧翕? 热 桡朝 虽羲击 虏陬击 阳 斜牖除 涡桧鼻 桧翕跤?棻..
local offset = dstX - posX;
if(offset != 0) {
if(offset < 0)
offset = -offset;
local totalLen = sq_var.get_vector(5);
sq_var.set_vector(5, totalLen - offset);
}
}
if (obj.sq_timer_.isOnEvent(currentT) == true)
obj.resetHitObjectList();
if(v >= len) { // 迹瞳虽缣 紫杂?击 阳 sub state蒂 夥羞棻..
obj.stopSound(7575);
if(obj.isMyControlObject()) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(S_FASTMOVE_END);
obj.sq_addSetStatePacket(STATE_FASTMOVE, STATE_PRIORITY_USER, true);
}
}
// 坚楼桧翕 y蹴 桧翕 陛栋?紫烟 热姜蒙机
// 蝶鹧? 等桧颤煎 鼻?桧翕 楼紫 跷陛
// 试虽 ??赝 当撩
local t = sq_var.get_timer_vector(0);
if(t.isOnEvent(currentT) == true) {
//local dust_type = obj.getDustParticleType(LANDPARTICLE_MOVE);
//local particleCreater = sq_GetobjectParticleCreaters(dust_type);
//if(obj.getDirection() == ENUM_DIRECTION_LEFT)
//particleCreater.getParticleInfo().xFlip = true;
//else
//particleCreater.getParticleInfo().xFlip = false;
//OBJECT_VECTOR objects = chargeSpearParticleCreator_->createObjectParticle();
local particleCreater = sq_var.GetparticleCreaterMap("FastMove", "Character/Priest/Effect/Particle/Fastmove.ptl", obj);
particleCreater.Restart(0);
//particleCreater.SetPos(posX, posY, posZ-1);
local dstX = sq_GetDistancePos(posX, obj.getDirection(), -20);
particleCreater.SetPos(dstX, posY, posZ+28);
sq_AddParticleObject(obj, particleCreater);
}
}
}
else if(substate == S_FASTMOVE_END) {
local len = 40;
local delaySum = 400;
local v = sq_GetAccel(0, len, currentT, delaySum, false);
//local v = sq_GetUniformVelocity(0, len, currentT - initDelay, delayT);
local srcX = sq_var.get_vector(1); // 漱搅 樯策蝶 1
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);
if(obj.isMovablePos(dstX, posY)) {
obj.setCurrentPos(dstX, posY, posZ);
}
}
}
// loop 睡碟殓栖棻 ismycontrol ?蝶?陛 狱樯桧 object陛 桧够击 菟横骨栖棻. setstate 撮?桧釭 ?卫粽螃粽薛? 当撩 , 蛔蛔 籀葬?栖棻.
function onProcCon_fastmove(obj)
{
if(!obj) return;
local pAni = obj.sq_getCurrentAni();
local bEnd = obj.sq_ani_IsEnd(pAni);
local frmIndex = obj.sq_ani_GetCurrentFrameIndex(pAni);
//
local substate = obj.getSkillSubState();
if(substate == S_FASTMOVE_PLAY) {
}
else if(substate == S_FASTMOVE_LOOP) {
}
else if(substate == S_FASTMOVE_PRO) {
}
else if(substate == S_FASTMOVE_END) {
}
if(bEnd) {
if(substate == S_FASTMOVE_PLAY) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(S_FASTMOVE_LOOP);
obj.sq_addSetStatePacket(STATE_FASTMOVE, STATE_PRIORITY_USER, true);
//obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
else if(substate == S_FASTMOVE_LOOP) {
}
else if(substate == S_FASTMOVE_PRO) {
//obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
else if(substate == S_FASTMOVE_END) {
obj.sq_addSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
}
}
// state谦猿谛 翕卫缣 ?廓 ?轿肾朝 ?热殓栖棻. oldstate陛 谦猿肾朝 state殓栖棻. 鼠树陛 嫦饵胀匙桧 毡剪釭 谦猿籀葬腆匙桧 毡棻贼 桧够缣怃 籀葬?栖棻.
function onEndState_fastmove(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_FASTMOVE) {
obj.stopSound(7575);
}
}
// irdcharacter缣怃 setstate() -> IRDActiveObject::setState -> aftersetstate() 桧楛牖怃缣怃 葆虽虞 setstate殓栖棻. skill?撩缣 评塭怃 ?轿? ?蹂陛
// 毡棻贼 桧 ?热蒂 桧辨?栖棻.
function onAfterSetState_fastmove(obj, state, datas, isResetTimer)
{
if(!obj) return;
}
// onbeforeattack 属寥?热 殓栖棻
function onBeforeAttack_fastmove(obj, damager, boundingBox)
{
}
// onAttack 属寥?热 殓栖棻
function onAttack_fastmove(obj, damager, boundingBox)
{
}
// onAfterAttack 属寥?热 殓栖棻
function onAfterAttack_fastmove(obj, damager, boundingBox)
{
}
// onBeforeDamage 属寥?热 殓栖棻
function onBeforeDamage_fastmove(obj, attacker, boundingBox)
{
}
// onDamage 属寥?热 殓栖棻
function onDamage_fastmove(obj, attacker, boundingBox)
{
}
// onAfterDamage 属寥?热 殓栖棻
function onAfterDamage_fastmove(obj, attacker, boundingBox)
{
}