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