// 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) { }