Sqr/character/atmage/elementalrain/elementalrain.nut

386 lines
12 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.

getroottable()["ElementalRainCreatePos"] <- {};
getroottable()["ElementalRainCreatePos"] = [[-76,27],[-108,44],[-129,67],[-79,57],[-50,66],
[-93,83],[-120,118],[-58,109],[-121,152],[-82,145],
[-92,180],[39,143],[-49,180],[-5,128],[-7,171],
[-24,221],[25,184],[-5,128],[43,113],[58,143]];
// 县溯诠骁 溯樯 怃粽 蝶才桧?
SUB_STATE_ELEMENTAL_RAIN_CAST <- 0 // 议蝶?
SUB_STATE_ELEMENTAL_RAIN_JUMP <- 1 // 薄?
SUB_STATE_ELEMENTAL_RAIN_CHARGE <- 2 // 醱瞪(薄? 渠晦)
SUB_STATE_ELEMENTAL_RAIN_FIRE <- 3 // 葆彻掘 嫦饵
SUB_STATE_ELEMENTAL_RAIN_LAST <- 4 // 醱瞪 塽 ?嫦掘 当撩, 阶戏煎暧 杂虽
// 县溯诠骁 溯樯 蝶鉴嫦翕
function checkExecutableSkill_ElementalRain(obj)
{
if (!obj) return false;
local isUseSkill = obj.sq_IsUseSkill(SKILL_ELEMENTAL_RAIN);
if (isUseSkill)
{
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_ELEMENTAL_RAIN_CAST);
obj.sq_AddSetStatePacket(STATE_ELEMENTAL_RAIN, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_ElementalRain(obj)
{
if(!obj) return false;
local state = obj.sq_GetState();
if(state == STATE_ATTACK)
{
return obj.sq_IsCommandEnable(SKILL_ELEMENTAL_RAIN); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_BROKENARROW);
}
return true
}
function onProc_ElementalRain(obj)
{
if (!obj) return;
local subState = obj.getSkillSubState();
// 橾姜 堪桧桧鼻 薄??棻贼 夸辞
if (subState == SUB_STATE_ELEMENTAL_RAIN_JUMP)
{
local zPos = obj.sq_GetIntData(SKILL_ELEMENTAL_RAIN, 2);
if (sq_GetZPos(obj) >= zPos)
{
obj.sq_SetCurrentPos(obj, obj.getXPos(), obj.getYPos(), zPos);
if (obj.sq_IsMyControlObject())
{
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_ELEMENTAL_RAIN_CHARGE);
obj.sq_AddSetStatePacket(STATE_ELEMENTAL_RAIN, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
}
}
// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻.
function onSetState_ElementalRain(obj, state, datas, isResetTimer)
{
if (!obj) return;
local var = obj.getVar();
local oldSubState = obj.getSkillSubState();
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_SetStaticMoveInfo(0, 0, 0, false);
obj.sq_SetStaticMoveInfo(1, 0, 0, false);
if (subState == SUB_STATE_ELEMENTAL_RAIN_CAST)
{
obj.sq_ZStop();
// 议蝶?
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ELEMENTAL_RAIN_CAST);
// 桧?? 缣栖诡桧暮
obj.sq_AddStateLayerAnimation(1,
obj.sq_CreateCNRDAnimation("Effect/Animation/ATElementalRain/Cast/1_under_dodge.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2,
obj.sq_CreateCNRDAnimation("Effect/Animation/ATElementalRain/Cast/20_body_dodge.ani"), 0, 0);
// 议蝶? 楼紫蒂 评塭陛紫烟 扑姜
// 议蝶? 楼紫陛 渗唳肾贼, 缣栖诡桧暮 楼紫紫 渗唳 腌栖棻.
// 议蝶? 啪桧虽紫 ?卫蒂 ?鄹栖棻.
local skillLevel = sq_GetSkillLevel(obj, SKILL_ELEMENTAL_RAIN);
local castTime = sq_GetCastTime(obj, SKILL_ELEMENTAL_RAIN, skillLevel);
local animation = sq_GetCurrentAnimation(obj);
local castAniTime = animation.getDelaySum(false);
local speedRate = castAniTime.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, castAniTime, true);
obj.sq_PlaySound("MW_ERAIN_READY");
// 县溯诠骁 溯樯擎 4楼撩 赅舒 勘横遽棻.
addElementalChain_ATMage(obj, -1);
}
else if (subState == SUB_STATE_ELEMENTAL_RAIN_JUMP)
{
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ELEMENTAL_RAIN_JUMP);
sq_SetZVelocity(obj, 750, -1200);
}
else if (subState == SUB_STATE_ELEMENTAL_RAIN_CHARGE)
{
local zPos = obj.sq_GetIntData(SKILL_ELEMENTAL_RAIN, 2);
obj.sq_SetCurrentPos(obj, obj.getXPos(), obj.getYPos(), zPos);
obj.sq_PlaySound("MW_ERAIN");
obj.sq_ZStop();
// 醱瞪
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ELEMENTAL_RAIN_JUMP_STAY);
// 桧?? 缣栖诡桧暮
obj.sq_AddStateLayerAnimation(1,
obj.sq_CreateCNRDAnimation("Effect/Animation/ATElementalRain/Charge/26_handup_dodge.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2,
obj.sq_CreateCNRDAnimation("Effect/Animation/ATElementalRain/Charge/25_shoot_dodge.ani"), 0, 0);
local skillLevel = sq_GetSkillLevel(obj, SKILL_ELEMENTAL_RAIN);
local maxNumber = obj.sq_GetLevelData(SKILL_ELEMENTAL_RAIN, 0, skillLevel);
// 譆模高娄 譆渠高 饵桧暧 楠浑? 璋濠蒂 陛螳褥.
// 钦, ?廓 陛螳蚂 高擎 罗廓箪 ?塭嘐搅陛 true陛 肾虽 强朝 ?擎 舒廓 棻卫 釭螃虽 强挤.
// -1桧 釭螃贼 谦猿. 涡桧鼻 高桧 桡挤.
// min 高挤 0 桧?陛 腆热 桡挤.
local index = sq_getRandomUnique(true, 0, ::ElementalRainCreatePos.len()); // 蟾晦?
if (obj.sq_IsMyControlObject())
{
for (local i = 0; i < maxNumber; ++i)
{
if (index < 0)
break;
local pos = ::ElementalRainCreatePos[index];
local x = pos[0];
local y = sq_getRandom(0, 2)-1;
local z = pos[1];
local randElementalType = sq_getRandom(ENUM_ELEMENT_FIRE, ENUM_ELEMENT_MAX);
obj.sq_StartWrite();
obj.sq_WriteWord(randElementalType);
obj.sq_SendCreatePassiveObjectPacket(24233, 0, x, y, z);
index = sq_getRandomUnique(false, 0, i % ::ElementalRainCreatePos.len());
}
}
}
else if (subState == SUB_STATE_ELEMENTAL_RAIN_FIRE)
{
// 葆彻掘 嫦饵
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ELEMENTAL_RAIN_SHOOT);
// 桧?? 缣栖诡桧暮
local angle = sq_GetIntData(obj, SKILL_ELEMENTAL_RAIN, 5);
local animation = obj.sq_CreateCNRDAnimation("Effect/Animation/ATElementalRain/Shoot/25_shoot_dodge.ani");
sq_SetfRotateAngle(animation, sq_ToRadian(-angle.tofloat()));
obj.sq_AddStateLayerAnimation(1, animation, 0, 0);
sq_SetCustomRotate(obj, sq_ToRadian(-angle.tofloat()));
}
else if (subState == SUB_STATE_ELEMENTAL_RAIN_LAST)
{
// 醱瞪 塽 ?嫦掘 当撩, 阶戏煎暧 杂虽
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ELEMENTAL_RAIN_CHARGE_SHOOT);
// 桧?? 缣栖诡桧暮
obj.sq_AddStateLayerAnimation(1,
obj.sq_CreateCNRDAnimation("Effect/Animation/ATElementalRain/ChargeShoot/21_circle_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2,
obj.sq_CreateCNRDAnimation("Effect/Animation/ATElementalRain/ChargeShoot/22_circle_dodge.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(3,
obj.sq_CreateCNRDAnimation("Effect/Animation/ATElementalRain/ChargeShoot/23_circle1_normal.ani"), -62, -188);
obj.sq_AddStateLayerAnimation(4,
obj.sq_CreateCNRDAnimation("Effect/Animation/ATElementalRain/ChargeShoot/24_circle1_dodge.ani"), -62, -188);
obj.sq_PlaySound("MW_ERAIN_FIN");
}
}
// 缣栖诡桧暮桧 部陬挤.
function onEndCurrentAni_ElementalRain(obj)
{
if (!obj) return;
local subState = obj.getSkillSubState();
if (subState == SUB_STATE_ELEMENTAL_RAIN_CAST)
{
// 议蝶? -> 醱瞪
if (obj.sq_IsMyControlObject())
{
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_ELEMENTAL_RAIN_JUMP);
obj.sq_AddSetStatePacket(STATE_ELEMENTAL_RAIN, STATE_PRIORITY_IGNORE_FORCE, true);
}
sq_EndDrawCastGauge(obj);
}
else if (subState == SUB_STATE_ELEMENTAL_RAIN_JUMP)
{
if (obj.sq_IsMyControlObject())
{
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_ELEMENTAL_RAIN_CHARGE);
obj.sq_AddSetStatePacket(STATE_ELEMENTAL_RAIN, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
else if (subState == SUB_STATE_ELEMENTAL_RAIN_CHARGE)
{
// 醱瞪 -> 葆彻掘 嫦饵
if (obj.sq_IsMyControlObject())
{
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_ELEMENTAL_RAIN_FIRE);
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_ELEMENTAL_RAIN, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
else if (subState == SUB_STATE_ELEMENTAL_RAIN_FIRE)
{
// 葆彻掘 嫦饵
local var = obj.getVar();
local skillLevel = sq_GetSkillLevel(obj, SKILL_ELEMENTAL_RAIN);
local maxNumber = obj.sq_GetLevelData(SKILL_ELEMENTAL_RAIN, 0, skillLevel);
// 嫦饵?啪 陴懊挤.
local fireEnd = true;
local ballCount = obj.getMyPassiveObjectCount(24233);
for (local i = 0; i < ballCount ; ++i)
{
local magicBall = obj.getMyPassiveObject(24233,i)
if (!magicBall || magicBall.getState() != SUBSTATE_PO_ELEMENTAL_CREATOR_FIRE) {
fireEnd = false;
break;
}
}
if (!fireEnd)
{
if (obj.sq_IsMyControlObject())
{
// 葆彻掘 啗楼 嫦饵
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_ELEMENTAL_RAIN_FIRE);
obj.sq_AddSetStatePacket(STATE_ELEMENTAL_RAIN, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
else
{
if (obj.sq_IsMyControlObject())
{
// 葆彻掘 嫦饵 -> 醱瞪 塽 ?嫦掘 当撩, 阶戏煎 杂虽
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_ELEMENTAL_RAIN_LAST);
obj.sq_AddSetStatePacket(STATE_ELEMENTAL_RAIN, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
}
else if (subState == SUB_STATE_ELEMENTAL_RAIN_LAST)
{
// 醱瞪 塽 ?嫦掘 当撩, 阶戏煎暧 杂虽
if (obj.sq_IsMyControlObject())
{
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_USER, true);
}
}
}
function onEndState_ElementalRain(obj, newState)
{
if (!obj) return;
if (newState != STATE_ELEMENTAL_RAIN)
{
sq_SetCustomRotate(obj, 0.0);
if (obj.sq_IsMyControlObject())
{
local ballCount = obj.getMyPassiveObjectCount(24233);
for (local i = 0; i<ballCount ; ++i)
{
local magicBall = obj.getMyPassiveObject(24233,i)
if (!magicBall)
continue;
if (obj.sq_IsMyControlObject())
sq_SendDestroyPacketPassiveObject(magicBall);
}
}
}
}
// 奢问卫 葆彻 掘羹蒂 当撩?棻.
function onKeyFrameFlag_ElementalRain(obj, flagIndex)
{
if (!obj) return false;
local subState = obj.getSkillSubState();
if (subState == SUB_STATE_ELEMENTAL_RAIN_CAST)
{
if (flagIndex == 1)
sq_EffectLayerAppendage(obj, sq_RGB(255,255,255), 255, 0, 0, 240);
}
else if (subState == SUB_STATE_ELEMENTAL_RAIN_FIRE)
{
if (flagIndex == 1 && obj.sq_IsMyControlObject())
{
local ballCount = obj.getMyPassiveObjectCount(24233);
printc("ballCount" + ballCount);
for (local i = 0; i<ballCount ; ++i)
{
local magicBall = obj.getMyPassiveObject(24233,i)
if (!magicBall || magicBall.getState() == SUBSTATE_PO_ELEMENTAL_CREATOR_FIRE)
continue;
magicBall.sendStateOnlyPacket(SUBSTATE_PO_ELEMENTAL_CREATOR_FIRE);
break;
}
}
}
else if (subState == SUB_STATE_ELEMENTAL_RAIN_LAST)
{
// 醱瞪 塽 ?嫦掘 当撩, 阶戏煎暧 杂虽
if (flagIndex == 1 && obj.sq_IsMyControlObject())
{
// 葆虽虞 赎 葆彻掘暧 奢问溘 椭横螃晦
local skill = sq_GetSkill(obj, SKILL_ELEMENTAL_RAIN);
local attackBonusRate = obj.sq_GetBonusRateWithPassive(SKILL_ELEMENTAL_RAIN, STATE_ELEMENTAL_RAIN, 1, 1.0);
obj.sq_StartWrite();
obj.sq_WriteDword(attackBonusRate);
print("onKeyFrameFlag_ElementalRain");
obj.sq_SendCreatePassiveObjectPacket(24219, 0, -73, 1, 215);
}
}
return true;
}
function onEndMap_ElementalRain(obj)
{
if (obj.sq_IsMyControlObject())
{
local ballCount = obj.getMyPassiveObjectCount(24233);
printc("ballCount" + ballCount);
for (local i = 0; i<ballCount ; ++i)
{
local magicBall = obj.getMyPassiveObject(24233,i)
if (!magicBall)
continue;
if (obj.sq_IsMyControlObject())
{
print("onEndMap_ElementalRain");
sq_SendDestroyPacketPassiveObject(magicBall);
}
}
}
}