275 lines
9.1 KiB
Plaintext
275 lines
9.1 KiB
Plaintext
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;
|
||
|
||
}
|
||
|