/************************************************ ************************************************ // 议葛搅 嫔纂缣怃 当撩肾朝 赎 ?嫦 螃粽薛? ************************************************ ************************************************/ // ?热赀檩 牖怃煎 嫦翕脾 // 楼撩嫦翕缣 暧?怃 摹鸥胀 楼撩桧 陛潍 葆虽虞缣 嫦翕腌栖棻. SUB_STATE_ELEMENTAL_BUSTER_START <- 0 VAR_ELEMENTAL_BUSTER_COUNT <- 0; VAR_ELEMENTAL_BUSTER_TYPE <- 1; VAR_ELEMENTAL_BUSTER_IS_LAST <- 2; function isElementalBusterCastingState(subState) { return subState%2 == 0; } function isLastElementalBusterAttack(obj) { local var = obj.getVar(); local count = var.getInt(VAR_ELEMENTAL_BUSTER_COUNT); local maxCount = obj.sq_GetLevelData(SKILL_ELEMENTAL_BUSTER, 4); if(count+1 >= maxCount) return true; return false; } function getStartElementalBuster(element, totalCount) { if(element == ENUM_ELEMENT_NONE) return ENUM_ELEMENT_FIRE; if (element == ENUM_ELEMENT_FIRE) element = ENUM_ELEMENT_LIGHT; else if (element == ENUM_ELEMENT_WATER) element = ENUM_ELEMENT_FIRE; else if (element == ENUM_ELEMENT_DARK) element = ENUM_ELEMENT_WATER; else if (element == ENUM_ELEMENT_LIGHT) element = ENUM_ELEMENT_DARK; totalCount = totalCount-1; if(totalCount <= 1) return element; return getStartElementalBuster(element, totalCount) } // 县溯诠骁 帼蝶搅 蝶鉴嫦翕 function checkExecutableSkill_ElementalBuster(obj) { if (!obj) return false; local isUseSkill = obj.sq_IsUseSkill(SKILL_ELEMENTAL_BUSTER); if (isUseSkill) { // ?营 摹鸥胀 楼撩擎, 陛潍 葆虽虞缣 嫦翕?棻. local element = obj.getThrowElement(); local maxCount = obj.sq_GetLevelData(SKILL_ELEMENTAL_BUSTER, 4); element = getStartElementalBuster(element, maxCount); printc("element : "+ element); obj.sq_IntVectClear(); obj.sq_IntVectPush(SUB_STATE_ELEMENTAL_BUSTER_START); obj.sq_IntVectPush(element); obj.sq_AddSetStatePacket(STATE_ELEMENTAL_BUSTER, STATE_PRIORITY_IGNORE_FORCE, true); return true; } return false; } function checkCommandEnable_ElementalBuster(obj) { if(!obj) return false; local state = obj.sq_GetState(); if(state == STATE_ATTACK) { return obj.sq_IsCommandEnable(SKILL_ELEMENTAL_BUSTER); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_BROKENARROW); } return true; } function onProc_ElementalBuster(obj) { if (!obj) return; } // state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻. function onSetState_ElementalBuster(obj, state, datas, isResetTimer) { if (!obj) return; local var = obj.getVar(); local subState = obj.sq_GetVectorData(datas, 0); local count = 0; local isLast = false; local element = ENUM_ELEMENT_FIRE; if (subState == SUB_STATE_ELEMENTAL_BUSTER_START) { element = obj.sq_GetVectorData(datas, 1); var.setInt(VAR_ELEMENTAL_BUSTER_COUNT,0); var.setInt(VAR_ELEMENTAL_BUSTER_TYPE, element); var.setBool(VAR_ELEMENTAL_BUSTER_IS_LAST, false); } else { element = var.getInt(VAR_ELEMENTAL_BUSTER_TYPE); count = var.getInt(VAR_ELEMENTAL_BUSTER_COUNT); isLast = var.getBool(VAR_ELEMENTAL_BUSTER_IS_LAST); } local isCast = isElementalBusterCastingState(subState); obj.setSkillSubState(subState); obj.sq_SetStaticMoveInfo(0, 0, 0, false); obj.sq_SetStaticMoveInfo(1, 0, 0, false); local animationIndex = 0; local soundTag = ""; local passiveObjectIndex = 0; if (element == ENUM_ELEMENT_FIRE) { animationIndex = isCast ? 85 : 86; passiveObjectIndex = 24290; soundTag = "EBUSTER_FIRE"; } else if (element == ENUM_ELEMENT_WATER) { animationIndex = isCast ? 87 : 88; passiveObjectIndex = 24293; soundTag = "EBUSTER_ICE"; } else if (element == ENUM_ELEMENT_DARK) { animationIndex = isCast ? 91 : 92; passiveObjectIndex = 24299; soundTag = "EBUSTER_DARK"; } else if (element == ENUM_ELEMENT_LIGHT) { animationIndex = isCast ? 89 : 90; passiveObjectIndex = 24296; soundTag = "EBUSTER_LIGHT"; } if (subState != SUB_STATE_ELEMENTAL_BUSTER_START) { // 县溯诠骁 帼蝶搅朝 4楼撩 赅舒 勘横遽棻. addElementalChain_ATMage(obj, -1); } local animation = obj.sq_GetCurrentAni(); local flashTime = 0; // 议蝶? //animationIndex = ANIMATION_TABLE[animationIndex]; obj.sq_SetCurrentAnimation(animationIndex); if (subState == SUB_STATE_ELEMENTAL_BUSTER_START) { local skillLevel = sq_GetSkillLevel(obj, SKILL_ELEMENTAL_BUSTER); local castTime = sq_GetCastTime(obj, SKILL_ELEMENTAL_BUSTER, 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_EBUSTER_READY"); } else { obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CONST, SPEED_TYPE_CONST, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0); } if (!isCast) // 嫦饵 { animation = obj.sq_GetCurrentAni(); flashTime += animation.getDelaySum(false); obj.sq_PlaySound(soundTag); // 议葛搅 嫔纂缣 当撩肾朝 醴棻坞 ?嫦 螃粽薛? local powerIndex = count%3; local sizeRate = obj.sq_GetLevelData(SKILL_ELEMENTAL_BUSTER, 5); local time = 640; local shake = 3; if (isLastElementalBusterAttack(obj)) { // 虞颤朝 饵桧锷陛 觼棻 sizeRate = obj.sq_GetLevelData(SKILL_ELEMENTAL_BUSTER, 6); time = 800 shake = 5; powerIndex = 3; // ?表紫 ? print("isLast"); // 虞颤 饵遴萄 obj.sq_PlaySound("MW_EBUSTER"); } local power = obj.sq_GetBonusRateWithPassive(SKILL_ELEMENTAL_BUSTER, STATE_ELEMENTAL_BUSTER, powerIndex, 1.0); // 虽姜胀 嫔纂缣 ?卫粽 螃粽薛?菟击 当撩?棻 if (obj.sq_IsMyControlObject()) { obj.sq_StartWrite(); obj.sq_WriteDword(power); obj.sq_WriteWord(sizeRate); obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndex, 0, 0, 1, 0); sq_flashScreen(obj, 0, flashTime, 240, 200, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); obj.sq_SetShake(obj, shake, time); } } else { if (element == ENUM_ELEMENT_FIRE) obj.sq_PlaySound("EBUSTER_CAST_01"); else if (element == ENUM_ELEMENT_WATER) obj.sq_PlaySound("EBUSTER_CAST_02"); else if (element == ENUM_ELEMENT_DARK) obj.sq_PlaySound("EBUSTER_CAST_04"); else if (element == ENUM_ELEMENT_LIGHT) obj.sq_PlaySound("EBUSTER_CAST_03"); } } // 缣栖诡桧暮桧 部陬挤. function onEndCurrentAni_ElementalBuster(obj) { if (!obj) return; local subState = obj.getSkillSubState(); local nextAnimationIndex = obj.getVar().get_vector(0) + 1; local nextSubState = subState + 1; local isLast = false; if(!isElementalBusterCastingState(subState)) // 奢问 拥栖陛 部陬棻贼 { setNextElementalType(obj); // 怃粽蝶才桧?陛 奢问桧历棻贼 棻挤 锰模煎 渗? local var = obj.getVar(); local count = var.getInt(VAR_ELEMENTAL_BUSTER_COUNT); local maxCount = obj.sq_GetLevelData(SKILL_ELEMENTAL_BUSTER, 4); count = count + 1; if(count >= maxCount) { var.setBool(VAR_ELEMENTAL_BUSTER_IS_LAST, true); isLast = true; } var.setInt(VAR_ELEMENTAL_BUSTER_COUNT, count); } if (subState == SUB_STATE_ELEMENTAL_BUSTER_START) { sq_EndDrawCastGauge(obj); } if (!isLast) { if (obj.sq_IsMyControlObject()) { obj.sq_IntVectClear(); obj.sq_IntVectPush(nextSubState); obj.sq_IntVectPush(nextAnimationIndex); obj.sq_AddSetStatePacket(STATE_ELEMENTAL_BUSTER, STATE_PRIORITY_IGNORE_FORCE, true); } } else { if (obj.sq_IsMyControlObject()) obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); } } function onEndState_ElementalBuster(obj, newState) { if (!obj) return; } function createElementalBusterCircle(obj, element, isLast, flagIndex) { if (obj.sq_IsMyControlObject()) { local passiveObjectIndexBig = 24291; // ? local passiveObjectIndexSmall = 24292; if (element == ENUM_ELEMENT_FIRE) { passiveObjectIndexBig = 24291; // ? passiveObjectIndexSmall = 24292; } else if (element == ENUM_ELEMENT_WATER) { passiveObjectIndexBig = 24294; // 热 passiveObjectIndexSmall = 24295; } else if (element == ENUM_ELEMENT_LIGHT) { passiveObjectIndexBig = 24297; // 赀 passiveObjectIndexSmall = 24298; } else if (element == ENUM_ELEMENT_DARK) { passiveObjectIndexBig = 24300; // 檩 passiveObjectIndexSmall = 24301; } // 议葛搅 嫔纂缣 当撩肾朝 醴棻坞 ?嫦 螃粽薛? local var = obj.getVar(); local count = var.getInt(VAR_ELEMENTAL_BUSTER_COUNT); local powerIndex = count%3; local sizeIndex = 5; if (isLastElementalBusterAttack(obj)) { powerIndex = 3; // 虞颤辨 ?表 sizeIndex = 6; } local power = obj.sq_GetBonusRateWithPassive(SKILL_ELEMENTAL_BUSTER, STATE_ELEMENTAL_BUSTER, powerIndex, 1.0); local sizeRate = obj.sq_GetLevelData(SKILL_ELEMENTAL_BUSTER, sizeIndex); obj.sq_StartWrite(); obj.sq_WriteDword(power); obj.sq_WriteWord(sizeRate); local isLastAttack = isLastElementalBusterAttack(obj); if (flagIndex == 1) { // 赎 ?嫦 螃粽薛? obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 150, 2, 110); if (isLastAttack && element != ENUM_ELEMENT_MAX) { // 葆虽虞 桧塭贼 涡 当撩? obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 100, 0, 110); obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 80, 0, 110); } } else if (flagIndex == 2) { // 蒙擎 ?嫦 螃粽薛? obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexSmall, 0, 187, 2, 229); // 赎 ?嫦 螃粽薛? obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 308, 2, 208); if (isLastAttack && element != ENUM_ELEMENT_MAX) { // 葆虽虞 桧塭贼 涡 当撩? obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexSmall, 0, -4, 2, 239); obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexSmall, 0, 157, 0, 229); obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexSmall, 0, 157, 0, 229); obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 208, 0, 208); obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 208, 0, 208); } } else if (flagIndex == 3) { // 蒙擎 ?嫦 螃粽薛? obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexSmall, 0, 310, 2, 98); if (isLastAttack && element != ENUM_ELEMENT_MAX) { // 葆虽虞 桧塭贼 涡 当撩? // 赎 ?嫦 螃粽薛? obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 278, 2, 328); obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexSmall, 0, 250, 0, 98); obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexSmall, 0, 250, 0, 98); obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 278, 2, 110); } } else if (flagIndex == 4) { // 赎 ?嫦 螃粽薛? obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 468, 2, 91); if (isLastAttack && element != ENUM_ELEMENT_MAX) { // 葆虽虞 桧塭贼 涡 当撩? // 蒙擎 ?嫦 螃粽薛? obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexSmall, 0, 569, 2, 242); obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 358, 0, 200); obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 418, 0, 150); obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 550, 0, 250); obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 620, 0, 150); } } } } function setNextElementalType(obj) { print("setNextElementalType"); local var = obj.getVar(); local element = var.getInt(VAR_ELEMENTAL_BUSTER_TYPE); if(element == ENUM_ELEMENT_NONE) return element; local newElement; switch(element) { case ENUM_ELEMENT_FIRE : newElement = ENUM_ELEMENT_WATER; break; case ENUM_ELEMENT_WATER : newElement = ENUM_ELEMENT_DARK; break; case ENUM_ELEMENT_DARK : newElement = ENUM_ELEMENT_LIGHT; break; case ENUM_ELEMENT_LIGHT : newElement = ENUM_ELEMENT_FIRE; break; } var.setInt(VAR_ELEMENTAL_BUSTER_TYPE, newElement); return element; } // 奢问卫 葆彻 掘羹蒂 当撩?棻. function onKeyFrameFlag_ElementalBuster(obj, flagIndex) { if (!obj) return false; local var = obj.getVar(); local subState = obj.getSkillSubState(); local element = var.getInt(VAR_ELEMENTAL_BUSTER_TYPE); local isLast = (var.getBool(VAR_ELEMENTAL_BUSTER_IS_LAST)) && (obj.getThrowElement() != ENUM_ELEMENT_NONE); createElementalBusterCircle(obj, element, isLast, flagIndex); return true; } function getScrollBasisPos_ElementalBuster(obj) { if (!obj) return; local subState = obj.getSkillSubState(); if (obj.isMyControlObject()) { local destX = sq_GetDistancePos(obj.getXPos(), obj.getDirection(), 300); local xPos = obj.getXPos(); local var = obj.getVar(); local isLast = var.getBool(VAR_ELEMENTAL_BUSTER_IS_LAST); if (subState == SUB_STATE_ELEMENTAL_BUSTER_START) { // 蝶鉴 卫瞪 : 蝶觼煤 卫蒙 local stateTimer = obj.sq_GetStateTimer(); xPos = sq_GetUniformVelocity(xPos, destX, stateTimer, 300); } else if (isLast) { // 蝶鉴 谦猿 : 蝶觼煤 谦猿 local stateTimer = obj.sq_GetStateTimer(); xPos = sq_GetUniformVelocity(destX, xPos, stateTimer, 300); } else { xPos = destX; } obj.sq_SetCameraScrollPosition(xPos, obj.getYPos(), 0); return true; } return false; }