Sqr/character/atmage/bluedragonwill/bluedragonwill.nut

471 lines
14 KiB
Plaintext
Raw 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_BLUEDRAGONWILL_0 <- 0
SUB_STATE_BLUEDRAGONWILL_1 <- 1
SUB_STATE_BLUEDRAGONWILL_2 <- 2
SUB_STATE_BLUEDRAGONWILL_3 <- 3
SUB_STATE_BLUEDRAGONWILL_4 <- 4
function checkExecutableSkill_BlueDragonWill(obj)
{
if(!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_BLUEDRAGONWILL);
if(b_useskill) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_BLUEDRAGONWILL_0); // substate撮?
obj.sq_AddSetStatePacket(STATE_BLUEDRAGONWILL, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_BlueDragonWill(obj)
{
if(!obj) return false;
local state = obj.sq_GetState();
if(state == STATE_ATTACK)
{
return obj.sq_IsCommandEnable(SKILL_BLUEDRAGONWILL); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_BROKENARROW);
}
return true;
}
function onSetState_BlueDragonWill(obj, state, datas, isResetTimer)
{
if(!obj) return;
local substate = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(substate);
obj.sq_StopMove();
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
obj.getVar().clear_vector();
obj.getVar().push_vector(0);
obj.getVar().push_vector(0);
if(substate == SUB_STATE_BLUEDRAGONWILL_0) {
obj.sq_PlaySound("MW_ICEHAMMER_READY");
obj.sq_SetCurrentAnimation(CUSTOM_ANI_BLUEDRAGONWILL1);
local pAni = obj.sq_GetCurrentAni();
//local chargeT = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 0); // 晦遴 醱瞪卫除
//local delaySum = sq_GetDelaySum(pAni);
//
//local rate = delaySum.tofloat() * 100.0 / chargeT.tofloat();
//
//obj.sq_SetAnimationSpeedRate(pAni, rate);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BLUEDRAGONWILL);
// 议蝶? 楼紫蒂 评塭陛紫烟 扑姜
// 议蝶? 楼紫陛 渗唳肾贼, 缣栖诡桧暮 楼紫紫 渗唳 腌栖棻.
// 议蝶? 啪桧虽紫 ?卫蒂 ?鄹栖棻.
local castTime = sq_GetCastTime(obj, SKILL_BLUEDRAGONWILL, skillLevel);
local animation = sq_GetCurrentAnimation(obj);
local startTime = sq_GetFrameStartTime(animation, 16);
local speedRate = startTime.tofloat() / castTime.tofloat();
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED,
SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate);
sq_StartDrawCastGauge(obj, startTime, true);
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_1) {
local group = obj.sq_GetVectorData(datas, 1);
local uniqueId = obj.sq_GetVectorData(datas, 2);
local targetObj = sq_GetObject(obj, group, uniqueId);
obj.getVar().push_vector(posX); // ?营 x : i: 2
obj.getVar().push_vector(posY); // ?营 y : i: 3
if(targetObj) {
local disX = sq_Abs(targetObj.getXPos() - posX);
local disY = targetObj.getYPos() - posY;
disX = disX - 40;
if(disX <= 0)
disX = 0;
obj.getVar().push_vector(disX); // x蹴 桧翕剪葬 : i: 4
obj.getVar().push_vector(disY); // y蹴 桧翕剪葬 : i: 5
}
else { // 蛤?? 桧翕剪葬
local defaultDistance = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 1); // 除蕾 奢问 (虽霞 ?渠徽) (100~)
obj.getVar().push_vector(defaultDistance); // x蹴 桧翕剪葬
obj.getVar().push_vector(0); // y蹴 桧翕剪葬
}
obj.sq_SetCurrentAnimation(CUSTOM_ANI_BLUEDRAGONWILL2);
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_2) {
obj.sq_PlaySound("MW_ICEHAMMER");
obj.sq_SetCurrentAnimation(CUSTOM_ANI_BLUEDRAGONWILL3);
sq_setCurrentAxisPos(obj, 2, 0);
if(obj.isMyControlObject()) {
obj.sq_SetShake(obj,3,300);
local distanceL = 90;
local h = 0;
local spin_radius = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 2); // 除蕾 奢问 (虽霞 ?渠徽) (100~)
local spin_r = spin_radius.tofloat() / 100.0;
local firstAttackRate = obj.sq_GetBonusRateWithPassive(SKILL_BLUEDRAGONWILL, STATE_BLUEDRAGONWILL, 0, 1.0); //2.奢问溘(%)
local power = obj.sq_GetPowerWithPassive(SKILL_BLUEDRAGONWILL, STATE_BLUEDRAGONWILL, 1,-1,1.0); // 除蕾奢问溘
local pow = obj.sq_GetSkillPower(SKILL_BLUEDRAGONWILL, 1);
local l_data = obj.sq_GetLevelData(SKILL_BLUEDRAGONWILL, 1, 1);
print("power:" + power + " pow:" + pow + " l_data:" + l_data);
sq_BinaryStartWrite();
sq_BinaryWriteFloat(spin_r); //
sq_BinaryWriteDword(power); // 除蕾奢问溘
obj.sq_SendCreatePassiveObjectPacket(24246, 0, distanceL, -1, h); // 虽霞桧嘐虽 除蕾 奢问
sq_BinaryStartWrite();
sq_BinaryWriteDword(firstAttackRate); // 奢问溘(%)
obj.sq_SendCreatePassiveObjectPacket(24245, 0, distanceL, 5, h);
}
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_3) {
// SUB_STATE_BLUEDRAGONWILL_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_4) {
// SUB_STATE_BLUEDRAGONWILL_4 怃粽蝶才桧? 蒙机
}
//obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED,
// SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function prepareDraw_BlueDragonWill(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_BLUEDRAGONWILL_0) {
// SUB_STATE_BLUEDRAGONWILL_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_1) {
// SUB_STATE_BLUEDRAGONWILL_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_2) {
// SUB_STATE_BLUEDRAGONWILL_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_3) {
// SUB_STATE_BLUEDRAGONWILL_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_4) {
// SUB_STATE_BLUEDRAGONWILL_4 怃粽蝶才桧? 蒙机
}
}
function onProc_BlueDragonWill(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
local pAni = obj.sq_GetCurrentAni();
local frmIndex = obj.sq_GetCurrentFrameIndex(pAni);
local sq_var = obj.getVar();
local currentT = sq_GetCurrentTime(pAni);
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
if(substate == SUB_STATE_BLUEDRAGONWILL_0) {
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_1) {
//local dash_t = pAni.getDelaySum(false); //
local dash_t = pAni.getDelaySum(0, 2) + 60; //
local srcX = obj.getVar().get_vector(2); // 卫蒙x
local srcY = obj.getVar().get_vector(3); // 卫蒙y
local dis_x_len = sq_var.get_vector(4); // 识 桧翕剪葬
local dis_y_len = obj.getVar().get_vector(5); // y蹴 桧翕剪葬
local v = sq_GetAccel(0, dis_x_len, currentT, dash_t, true);
local my = sq_GetUniformVelocity(0, dis_y_len, currentT, dash_t);
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);
local dstY = srcY + my;
if(sq_var.get_vector(0)) { // 瞪?溯歜缣怃 桧翕? 热 桡朝 虽羲击 虏陬棻贼..
if(sq_var.get_vector(1) != posY) { // 瞪 posY谛 绿掖?瑭怃 殖塭螺棻贼..
sq_var.set_vector(0, 0); // 桧翕?楚斜蒂 off?鄹栖棻..
sq_var.set_vector(1, posY);
}
}
if(obj.isMovablePos(dstX, dstY) && !sq_var.get_vector(0)) { // 桧翕?楚斜谛 桧翕陛栋虽羲桧 赅舒 陛栋?捡 桧翕
sq_setCurrentAxisPos(obj, 0, dstX);
sq_setCurrentAxisPos(obj, 1, dstY);
}
else { // 桧翕? 热 桡朝 虽羲击 虏陬棻..
sq_var.set_vector(0,1); // 桧翕 ?楚斜 樯策蝶 3 桧翕? 热 桡朝 虽羲击 虏陬击 阳 斜牖除 涡桧鼻 桧翕跤?棻..
local offset = dstX - posX;
if(offset != 0) {
if(offset < 0)
offset = -offset;
local totalLen = sq_var.get_vector(4); // 识桧翕剪葬
sq_var.set_vector(4, totalLen - offset);
}
}
if(frmIndex == 2){
sq_setCurrentAxisPos(obj, 2, 30);
}
else if(frmIndex == 3) {
sq_setCurrentAxisPos(obj, 2, 60);
}
else if(frmIndex == 4){
sq_setCurrentAxisPos(obj, 2, 50);
}
else if(frmIndex == 5){
sq_setCurrentAxisPos(obj, 2, 40);
}
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_2) {
// SUB_STATE_BLUEDRAGONWILL_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_3) {
// SUB_STATE_BLUEDRAGONWILL_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_4) {
// SUB_STATE_BLUEDRAGONWILL_4 怃粽蝶才桧? 蒙机
}
}
function onProcCon_BlueDragonWill(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_BLUEDRAGONWILL_0) {
// SUB_STATE_BLUEDRAGONWILL_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_1) {
// SUB_STATE_BLUEDRAGONWILL_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_2) {
// SUB_STATE_BLUEDRAGONWILL_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_3) {
// SUB_STATE_BLUEDRAGONWILL_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_4) {
// SUB_STATE_BLUEDRAGONWILL_4 怃粽蝶才桧? 蒙机
}
}
function onEndCurrentAni_BlueDragonWill(obj)
{
if(!obj) return;
if(!obj.isMyControlObject()) {
return;
}
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_BLUEDRAGONWILL_0) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_BLUEDRAGONWILL_1); // substate撮?
// 500 // x蹴 颤啃? 彰嫔
// 120 // y蹴 颤啃? 彰嫔
// 10 // z蹴 颤啃? 彰嫔
//local x_range = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 3); // 晦遴 醱瞪卫除
//local y_range = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 4); // 晦遴 醱瞪卫除
//local z_range = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 5); // 晦遴 醱瞪卫除
//local targetObj = sq_FindTarget(obj, 0, x_range, y_range, z_range);
//
//if(targetObj) {
//local group = sq_GetGroup(targetObj);
//local uniqueId = sq_GetUniqueId(targetObj);
//
//obj.sq_IntVectPush(group); //
//obj.sq_IntVectPush(uniqueId); //
//}
//else {
//obj.sq_IntVectPush(-1); //
//obj.sq_IntVectPush(-1); //
//}
local distance = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, SKL_STATIC_INT_IDX_3); // 瞳娄暧 剪葬
local angle = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, SKL_STATIC_INT_IDX_4); // 瞳娄暧 陕紫
local targetObj = findAngleTarget(obj, distance, angle, 100);
if(targetObj) {
local group = sq_GetGroup(targetObj);
local uniqueId = sq_GetUniqueId(targetObj);
obj.sq_IntVectPush(group); //
obj.sq_IntVectPush(uniqueId); //
}
else {
obj.sq_IntVectPush(-1); //
obj.sq_IntVectPush(-1); //
}
obj.sq_AddSetStatePacket(STATE_BLUEDRAGONWILL, STATE_PRIORITY_IGNORE_FORCE, true);
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_1) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_BLUEDRAGONWILL_2); // substate撮?
obj.sq_AddSetStatePacket(STATE_BLUEDRAGONWILL, STATE_PRIORITY_IGNORE_FORCE, true);
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_2) {
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_3) {
// SUB_STATE_BLUEDRAGONWILL_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_4) {
// SUB_STATE_BLUEDRAGONWILL_4 怃粽蝶才桧? 蒙机
}
}
function onKeyFrameFlag_BlueDragonWill(obj, flagIndex)
{
if(!obj) return false;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_BLUEDRAGONWILL_0) {
// SUB_STATE_BLUEDRAGONWILL_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_1) {
// SUB_STATE_BLUEDRAGONWILL_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_2) {
// SUB_STATE_BLUEDRAGONWILL_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_3) {
// SUB_STATE_BLUEDRAGONWILL_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_4) {
// SUB_STATE_BLUEDRAGONWILL_4 怃粽蝶才桧? 蒙机
}
return false;
}
function onEndState_BlueDragonWill(obj, new_state)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_BLUEDRAGONWILL_0) {
// SUB_STATE_BLUEDRAGONWILL_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_1) {
// SUB_STATE_BLUEDRAGONWILL_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_2) {
// SUB_STATE_BLUEDRAGONWILL_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_3) {
// SUB_STATE_BLUEDRAGONWILL_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_4) {
// SUB_STATE_BLUEDRAGONWILL_4 怃粽蝶才桧? 蒙机
}
sq_EndDrawCastGauge(obj);
}
function onAfterSetState_BlueDragonWill(obj, state, datas, isResetTimer)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_BLUEDRAGONWILL_0) {
// SUB_STATE_BLUEDRAGONWILL_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_1) {
// SUB_STATE_BLUEDRAGONWILL_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_2) {
// SUB_STATE_BLUEDRAGONWILL_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_3) {
// SUB_STATE_BLUEDRAGONWILL_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_4) {
// SUB_STATE_BLUEDRAGONWILL_4 怃粽蝶才桧? 蒙机
}
}
function getHitDirection_BlueDragonWill(obj, damager)
{
if(!obj) return 0;
print("getHitDirection_BlueDragonWill");
return sq_GetOppositeDirection(obj.getDirection());
}