111
This commit is contained in:
483
character/atmage/elementalbuster/elementalbuster.nut
Normal file
483
character/atmage/elementalbuster/elementalbuster.nut
Normal file
@@ -0,0 +1,483 @@
|
||||
/************************************************
|
||||
************************************************
|
||||
// 议葛搅 嫔纂缣怃 当撩肾朝 赎 ?嫦 螃粽薛?
|
||||
************************************************
|
||||
************************************************/
|
||||
|
||||
// ?热赀檩 牖怃煎 嫦翕脾
|
||||
// 楼撩嫦翕缣 暧?怃 摹鸥胀 楼撩桧 陛潍 葆虽虞缣 嫦翕腌栖棻.
|
||||
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;
|
||||
}
|
||||
BIN
character/atmage/elementalbuster/po_atelementalbusterexpbody.nut
Normal file
BIN
character/atmage/elementalbuster/po_atelementalbusterexpbody.nut
Normal file
Binary file not shown.
Reference in New Issue
Block a user