Sqr/character/atmage/elementalbuster/elementalbuster.nut

484 lines
13 KiB
Plaintext

/************************************************
************************************************
// 议葛搅 嫔纂缣怃 当撩肾朝 赎 ?嫦 螃粽薛?
************************************************
************************************************/
// ?热赀檩 牖怃煎 嫦翕脾
// 楼撩嫦翕缣 暧?怃 摹鸥胀 楼撩桧 陛潍 葆虽虞缣 嫦翕腌栖棻.
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;
}