Sqr/character/atmage/multishot/multishot.nut

275 lines
9.1 KiB
Plaintext
Raw Normal View History

2024-03-18 21:37:40 +08:00
TIMER_MULTI_SHOT_CREATE_MAGIC_BALL <- 0; // 翱颤
TIMER_MULTI_SHOT_INPUT_COUNT <- 1; // 蟾渡 郦殓溘 ?热 ?钦.
TIMER_MULTI_SHOT_WATING_STAND <- 2; // 虞颤桧? 蝶鼹萄 梱虽暧 裁溯桧
VAR_MULTI_SHOT_CURRENT_COUNT <- 0;
ENUM_MULTI_SHOT_SUBSTATE_CHARGE <- 0; // 薄? 酝 遽绿
ENUM_MULTI_SHOT_SUBSTATE_HORIZON <- 1; // 薄? 酝 热?
ENUM_MULTI_SHOT_SUBSTATE_VERTICAL <- 2; // 薄? 酝 热霜
ENUM_MULTI_SHOT_SUBSTATE_DIAGONAL <- 3; // 薄? 酝 渠陕摹
ENUM_MULTI_SHOT_SUBSTATE_FLOOR <- 4; // 夥款缣怃 ?颤
function checkExecutableSkill_MultiShot(obj)
{
if(!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_MULTI_SHOT);
if(b_useskill) {
obj.sq_IntVectClear();
if(obj.getState() == STATE_JUMP)
obj.sq_IntVectPush(ENUM_MULTI_SHOT_SUBSTATE_CHARGE);
else
obj.sq_IntVectPush(ENUM_MULTI_SHOT_SUBSTATE_FLOOR);
obj.sq_IntVectPush(obj.getXPos());
obj.sq_IntVectPush(obj.getYPos());
obj.sq_IntVectPush(obj.getZPos());
obj.sq_AddSetStatePacket(STATE_MULTI_SHOT , STATE_PRIORITY_USER, true);
return true;
}
return false;
}
function checkCommandEnable_MultiShot(obj)
{
if(!obj)
return false;
local state = obj.sq_GetState();
if(state == STATE_ATTACK) {
// 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20]
return obj.sq_IsCommandEnable(SKILL_MULTI_SHOT); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_MULTI_SHOT);
}
return true;
}
function sendMultiShotEnd(obj)
{
if(!obj)
return;
if(obj.isMyControlObject()) {
local subState = obj.getSkillSubState();
if(subState == ENUM_MULTI_SHOT_SUBSTATE_FLOOR)
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
else {
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 onProc_MultiShot(obj)
{
if(!obj)
return;
local var = obj.getVar();
local currentInputCount = var.getInt(VAR_MULTI_SHOT_CURRENT_COUNT);
if(obj.isMyControlObject())
{
obj.setSkillCommandEnable(SKILL_MULTI_SHOT,true);
local b_useskill = obj.sq_IsEnterSkill(SKILL_MULTI_SHOT);
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); //奢问郦 ?撩?
if(b_useskill != -1 || sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) //蝶鉴嬴桧夔桧釭 奢问帼? 援蒂卫
obj.addRapidInput(); // 翱颤 殓溘 籀葬
}
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); //薄?郦 ?撩?
if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)) { // 薄?郦 殓溘卫 镞模
sendMultiShotEnd(obj);
}
}
function onSetState_MultiShot(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
if(subState != ENUM_MULTI_SHOT_SUBSTATE_FLOOR) {
if(subState == ENUM_MULTI_SHOT_SUBSTATE_CHARGE) {
obj.sq_SetStaticMoveInfo(0, 0, 0, false);
obj.sq_SetStaticMoveInfo(1, 0, 0, false);
sq_SetZVelocity(obj,1,0);
obj.sq_SetCurrentAnimation(CUSTOM_ANI_AT_MAGIC_CANNON_READY);
}
else if(subState == ENUM_MULTI_SHOT_SUBSTATE_HORIZON) {
obj.sq_SetCurrentAnimation(CUSTOM_ANI_AT_MAGIC_CANNON_1);
}
else if(subState == ENUM_MULTI_SHOT_SUBSTATE_VERTICAL) {
obj.sq_SetCurrentAnimation(CUSTOM_ANI_AT_MAGIC_CANNON_3);
}
else if(subState == ENUM_MULTI_SHOT_SUBSTATE_DIAGONAL) {
obj.sq_SetCurrentAnimation(CUSTOM_ANI_AT_MAGIC_CANNON_2);
}
}
else {
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(CUSTOM_ANI_MULTI_SHOT);
}
//obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED,
// SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local x = sq_GetVectorData(datas, 1);
local y = sq_GetVectorData(datas, 2);
local z = sq_GetVectorData(datas, 3);
sq_SetCurrentPos(obj,x,y,z);
local var = obj.getVar();
var.setInt(VAR_MULTI_SHOT_CURRENT_COUNT,0);
if(subState == ENUM_MULTI_SHOT_SUBSTATE_FLOOR || subState == ENUM_MULTI_SHOT_SUBSTATE_CHARGE) // 嫦饵?阳 尔桧蝶
obj.sq_PlaySound("MW_TAKE");
local element = obj.getThrowElement();
addElementalChain_ATMage(obj, element);
}
function onTimeEvent_MultiShot(obj, timeEventIndex, timeEventCount)
{
if(!obj)
return false;
if(timeEventIndex == TIMER_MULTI_SHOT_CREATE_MAGIC_BALL) {
local var = obj.getVar();
local count = var.getInt(VAR_MULTI_SHOT_CURRENT_COUNT);
local level = sq_GetSkillLevel(obj, SKILL_MULTI_SHOT);
local max = sq_GetLevelData(obj, SKILL_MULTI_SHOT, 0, level);
if(count < max) {
local inputConut = obj.getRapidInputFrequency();
inputConut = inputConut.tointeger();
local inputMax = sq_GetIntData(obj, SKILL_MULTI_SHOT, 0); // 0:蟾渡 翱颤 缀紫 譆渠纂
local gapByInputMin = sq_GetIntData(obj, SKILL_MULTI_SHOT, 1); // 1:嫦饵 除问 ms (翱颤 譆模卫)
local gapByInputMax = sq_GetIntData(obj, SKILL_MULTI_SHOT, 2); // 2:嫦饵 除问 ms (翱颤 譆渠卫)
local gap = 300;
if(inputConut > inputMax)
inputConut = inputMax;
// 翱颤陛 桡戏贼 gapByInputMin 高戏煎.
// 翱颤陛 号击 热烟 gapByInputMax缣 陛梱遴 高戏煎.
local upValue = gapByInputMax - gapByInputMin;
upValue = upValue.tofloat() * (inputConut.tofloat()/inputMax.tofloat());
gap = gapByInputMin + upValue.tointeger();
obj.setTimeEvent(TIMER_MULTI_SHOT_CREATE_MAGIC_BALL, gap, 1,false);
count = count+1;
var.setInt(VAR_MULTI_SHOT_CURRENT_COUNT, count);
local currentElementalType = obj.getThrowElement();
local subState = obj.getSkillSubState();
local bonusDamage = 0;
if(currentElementalType == ENUM_ELEMENT_NONE)
{
local basicState = STATE_ATTACK;
if(subState == ENUM_MULTI_SHOT_SUBSTATE_DIAGONAL || subState == ENUM_MULTI_SHOT_SUBSTATE_VERTICAL) // 渠陕摹,热霜
basicState = STATE_JUMP_ATTACK;
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj),0);
obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),basicState);
bonusDamage = sq_GetCurrentAttackBonusRate(obj);
}
local addMultiShotDamage = sq_GetLevelData(obj, SKILL_MULTI_SHOT, 1, level);
if(subState == ENUM_MULTI_SHOT_SUBSTATE_FLOOR)
createMiniMagicCircle(obj, 30, 65, 0, bonusDamage + addMultiShotDamage);
else if(subState == ENUM_MULTI_SHOT_SUBSTATE_HORIZON) // 姜贼
createMiniMagicCircle(obj, 30, 82, 0, bonusDamage + addMultiShotDamage);
else if(subState == ENUM_MULTI_SHOT_SUBSTATE_DIAGONAL) // 渠陕摹
createMiniMagicCircle(obj, 20, 55, 1, bonusDamage + addMultiShotDamage);
else if(subState == ENUM_MULTI_SHOT_SUBSTATE_VERTICAL) // 热霜
createMiniMagicCircle(obj, 0, 45, 2, bonusDamage + addMultiShotDamage);
local typeName = "none";
switch(currentElementalType)
{
case ENUM_ELEMENT_FIRE : typeName = "fire"; break;
case ENUM_ELEMENT_WATER : typeName = "water"; break;
case ENUM_ELEMENT_DARK : typeName = "dark"; break;
case ENUM_ELEMENT_LIGHT : typeName = "light"; break;
}
local path = "Character/Mage/Effect/Animation/ATMultiShot/attack" + subState + "_" + typeName + "_dodge.ani";
sq_CreateDrawOnlyObject(obj,path, ENUM_DRAWLAYER_NORMAL, true);
local element = obj.getThrowElement();
local attackIndex = obj.getAttackIndex();
playSoundForAtmageAttack(obj, element, attackIndex);
}
else {
local endDelay = 50;
obj.setTimeEvent(TIMER_MULTI_SHOT_WATING_STAND, endDelay, 1,false);
}
}
else if(timeEventIndex == TIMER_MULTI_SHOT_INPUT_COUNT) {
}
else if(timeEventIndex == TIMER_MULTI_SHOT_WATING_STAND) {
// 谦猿 颤桧该
sendMultiShotEnd(obj);
return true;
}
return false;
}
function onEndCurrentAni_MultiShot(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
if(subState == ENUM_MAGIC_CANNON_SUBSTATE_CHARGE) {
local isHorizon = sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL);
local isVertical = sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL);
local subState = ENUM_MAGIC_CANNON_SUBSTATE_DIAGONAL; // 渠陕摹桧 晦狱
if(isHorizon && !isVertical)
subState = ENUM_MAGIC_CANNON_SUBSTATE_HORIZON;
else if(!isHorizon && isVertical)
subState = ENUM_MAGIC_CANNON_SUBSTATE_VERTICAL;
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState);
obj.sq_IntVectPush(obj.getXPos());
obj.sq_IntVectPush(obj.getYPos());
obj.sq_IntVectPush(obj.getZPos());
obj.sq_AddSetStatePacket(STATE_MULTI_SHOT , STATE_PRIORITY_USER, true);
}
}
function onKeyFrameFlag_MultiShot(obj, flagIndex)
{
if(!obj) return true;
local subState = obj.getSkillSubState();
if(flagIndex == 1) {
obj.setTimeEvent(TIMER_MULTI_SHOT_CREATE_MAGIC_BALL, 50, 1,true); // 嫦饵
obj.setTimeEvent(TIMER_MULTI_SHOT_INPUT_COUNT, 1000, 1,false); // 蟾渡 郦殓溘 ?热 ?钦.
obj.startRapidInput();
}
return true;
}