Sqr/character/atmage/multishot/multishot.nut

275 lines
9.1 KiB
Plaintext
Raw 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.

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;
}