Sqr/character/common/burster/burster.nut

305 lines
8.6 KiB
Plaintext
Raw Permalink 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.

// 帼蝶搅 蝶鉴击 噩 热 毡朝 蝶鉴樯虽 羹觼?琐栖棻.
function isEnableBursterSkill(chr, skillIndex)
{
if (!chr)
return false;
local bursterSkill = sq_GetSkill(chr, SKILL_BURSTER);
if (!bursterSkill)
return false;
local size = sq_GetCustomIntDataSize(bursterSkill, chr);
for (local i = 0; i < size; i++)
{
// 旎虽胀 蝶鉴樯策蝶菟击 椭横蚂棻.
local disableSkillIndex = sq_GetIntData(chr, SKILL_BURSTER, i);
if (disableSkillIndex == skillIndex)
{
print(" disableSkillIndex:" + disableSkillIndex);
return false;
}
}
return true;
}
// 议葛搅 奢鳝 藤颤歜 亵瞰 (帼蝶搅赅萄缣怃 藤颤歜击 亵瞰?栖棻.)
function startSkillCoolTime(obj, skillIndex, skillLevel, currentCoolTime)
{
if (!obj)
return -1;
local appendage = obj.GetSquirrelAppendage("Character/Common/Burster/ap_Common_Burster.nut");
if(appendage)
{
// 帼蝶搅赅萄陛 ?撩? 鼻鹧桧坚 ?渡肾朝 蝶鉴桧塭贼 藤颤歜桧 亵瞰 腌栖棻.
if (appendage.isValid() && isEnableBursterSkill(obj, skillIndex))
{
local level = sq_GetSkillLevel(obj, SKILL_BURSTER);
// (5) 晦狱 譆模 藤颤歜 (ms)
local value = obj.sq_GetLevelData(SKILL_BURSTER, SKL_LVL_COLUMN_IDX_5, level);
return value; // 帼蝶搅赅萄 藤颤歜
}
}
return -1;
}
function checkExecutableSkill_Burster(obj)
{
if (!obj)
return false;
local isUseSkill = obj.sq_IsUseSkill(SKILL_BURSTER);
if (isUseSkill)
{
obj.sq_AddSetStatePacket(STATE_BURSTER, STATE_PRIORITY_IGNORE_FORCE, false);
return true;
}
return false;
}
function checkCommandEnable_Burster(obj)
{
if (!obj)
return false;
// ?营 颤表湍蟒樯虽 羹觼?栖棻. (饵蜂暧 鳖, 瞰蜂暧 鳖)
// 饵鳖, 瞰鳖缣怃朝 帼蝶搅赅萄陛 嫦翕肾虽 强蝗栖棻.
if (sq_IsTowerDungeon())
{
print(" here top dungeon");
return false;
}
local state = sq_GetState(obj);
if(state == STATE_ATTACK)
{
// 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20]
return obj.sq_IsCommandEnable(SKILL_BURSTER);
}
return true;
}
function onEndState_Burster(obj, state)
{
// 蝶才桧? 谦猿 ?擎 镞模 肾历棻贼 议蝶? 啪桧虽 桡据
sq_EndDrawCastGauge(obj);
}
// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻.
function onSetState_Burster(obj, state, datas, isResetTimer)
{
if (!obj)
return;
print(" burster mode start");
obj.getVar().clear_vector();
obj.getVar().push_vector(0);
obj.sq_StopMove();
local buffAni = obj.sq_GetBuffAni();
obj.setCurrentAnimation(buffAni);
//sq_var.set_vector(1, 1);
local ani = sq_GetCurrentAnimation(obj);
obj.sq_SetCurrentAttackInfo(CUSTOM_ATTACK_INFO_RESONANCE);
// 热楼撩 鬼? 帼?蒂 勘横遽棻.
local skillLevel = sq_GetSkillLevel(obj, SKILL_BURSTER);
print(" Burster skillLevel:" + skillLevel);
// 议蝶? 楼紫蒂 评塭陛紫烟 扑姜
// 议蝶? 楼紫陛 渗唳肾贼, 缣栖诡桧暮 楼紫紫 渗唳 腌栖棻.
// 议蝶? 啪桧虽紫 ?卫蒂 ?鄹栖棻.
local castTime = sq_GetCastTime(obj, SKILL_BURSTER, skillLevel);
print(" Burster castTime:" + castTime);
local animation = sq_GetCurrentAnimation(obj);
local startTime = sq_GetDelaySum(animation);
local speedRate = startTime.tofloat() / castTime.tofloat();
print(" cast speedRate:" + speedRate);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED,
SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate);
if (ani)
{
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
local bodyBackEffAni = sq_CreateAnimation("","Character/Common/Animation/BusterMode/buster_start_back_light3.ani");
local bodyBackEffObj = obj.sq_CreateCNRDPooledObject(bodyBackEffAni, true);
bodyBackEffObj.setCurrentDirection(obj.getDirection());
bodyBackEffObj.setCurrentPos(posX, posY - 1, 47);
// 议蝶? 颤歜缣 评塭怃 ?娄紫 蜃啪 棺溥鄹栖棻.
local effAniTime = sq_GetDelaySum(bodyBackEffAni);
local speedrate = effAniTime.tofloat() / castTime.tofloat();
local castSpeed = sq_GetCastSpeed(obj);
local animationSpeedValue = castSpeed.tofloat() * speedrate.tofloat();
local aniSpeedRate = animationSpeedValue.tofloat() * 100.0 / SPEED_VALUE_DEFAULT;
bodyBackEffAni.setSpeedRate(aniSpeedRate.tofloat());
print(" backAniSpeedRate:" + aniSpeedRate.tofloat());
obj.sq_AddObject(bodyBackEffObj);
local bodyFrontEffAni = sq_CreateAnimation("","Character/Common/Animation/BusterMode/buster_start_front_cross.ani");
// 议蝶? 颤歜缣 评塭怃 ?娄紫 蜃啪 棺溥鄹栖棻.
local effFrontAniTime = sq_GetDelaySum(bodyFrontEffAni);
local sr = effFrontAniTime.tofloat() / castTime.tofloat();
//local castSpeed = sq_GetCastSpeed(obj);
local frontAnimationSpeedValue = castSpeed.tofloat() * sr.tofloat();
local frontAniSpeedRate = frontAnimationSpeedValue.tofloat() * 100.0 / SPEED_VALUE_DEFAULT;
bodyFrontEffAni.setSpeedRate(frontAniSpeedRate.tofloat());
print(" frontAniSpeedRate:" + frontAniSpeedRate);
local bodyFrontEffObj = obj.sq_CreateCNRDPooledObject(bodyFrontEffAni, true);
bodyFrontEffObj.setCurrentDirection(obj.getDirection());
bodyFrontEffObj.setCurrentPos(posX, posY + 2, 47);
obj.sq_AddObject(bodyFrontEffObj);
// ?贼?娄
if (castTime > 100)
{
sq_flashScreen(obj, castTime - 100, 100, 0, 150, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
}
}
sq_StartDrawCastGauge(obj, startTime, true);
}
function onProc_Burster(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
local pAni = obj.sq_GetCurrentAni();
local frmIndex = obj.sq_GetCurrentFrameIndex(pAni);
local currentT = sq_GetCurrentTime(pAni);
local sq_var = obj.getVar();
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
}
function onEndCurrentAni_Burster(obj)
{
if(!obj)
return;
if(obj.sq_IsMyControlObject())
{
obj.sq_SetShake(obj, 3, 250);
}
local skill_level = sq_GetSkillLevel(obj, SKILL_BURSTER);
// 酝犒肾贼 寰肾晦 阳侥缣.. 棻卫 椭朝棻..
local appendage = obj.GetSquirrelAppendage("Character/Common/Burster/ap_Common_Burster.nut");
if(appendage)
{
// 毡棻贼 晦襄 横?蛤虽 饷薯
local spectrumAppendage = appendage.sq_GetOcularSpectrum("ocularSpectrum");
if(spectrumAppendage)
spectrumAppendage.endCreateSpectrum();
appendage.sq_DeleteAppendages();
CNSquirrelAppendage.sq_RemoveAppendage(obj, "Character/Common/Burster/ap_Common_Burster.nut");
}
appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_BURSTER, false,
"Character/Common/Burster/ap_Common_Burster.nut", false);
// (0) 虽楼卫除
local change_time = sq_GetLevelData(obj, SKILL_BURSTER, 0, skill_level);
print(" burst mode valid time:" + change_time);
appendage.sq_SetValidTime(change_time); // 横?蛤虽 颤歜 撮?
appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_BURSTER, skill_level);
// 罹晦怃 append 蒙机
CNSquirrelAppendage.sq_Append(appendage, obj, obj);
// 酝犒肾贼 寰肾晦 阳侥缣.. 棻卫 椭朝棻..
appendage = obj.GetSquirrelAppendage("Character/Common/Burster/ap_Common_Burster.nut");
// 桧楼 马模
if(appendage)
{
local change_appendage = appendage.sq_getChangeStatus("burstChangeStatus");
local value = sq_GetLevelData(obj, SKILL_BURSTER, 1, skill_level); // (1) 奢问 楼紫(+)
if(!change_appendage)
change_appendage = appendage.sq_AddChangeStatusAppendageID(obj, obj, change_time,
CHANGE_STATUS_TYPE_ATTACK_SPEED,
false, value, APID_COMMON);
if(change_appendage) {
local atk_spd = sq_GetLevelData(obj, SKILL_BURSTER, 1, skill_level); // (1) 奢问 楼紫(+)
local mov_spd = sq_GetLevelData(obj, SKILL_BURSTER, 2, skill_level); // (2) 桧翕 楼紫(+)
local cast_spd = sq_GetLevelData(obj, SKILL_BURSTER, 3, skill_level); // (3) 议蝶? 楼紫(+)
change_appendage.clearParameter();
change_appendage.addParameter(CHANGE_STATUS_TYPE_ATTACK_SPEED, false, atk_spd.tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_MOVE_SPEED, false, mov_spd.tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_CAST_SPEED, false, cast_spd.tofloat());
}
}
if (obj.isMyControlObject())
{
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
}
function onAttack_Burster(obj, damager, boundingBox, isStuck)
{
if(!obj) return;
}