Sqr/character/atmage/magiccannon/magiccannon.nut

197 lines
6.0 KiB
Plaintext
Raw Normal View History

2024-03-18 21:37:40 +08:00
ENUM_MAGIC_CANNON_SUBSTATE_CHARGE <- 0; // 遽绿
ENUM_MAGIC_CANNON_SUBSTATE_HORIZON <- 1; // 热?(薄?)
ENUM_MAGIC_CANNON_SUBSTATE_VERTICAL <- 2; // 热霜(薄?)
ENUM_MAGIC_CANNON_SUBSTATE_DIAGONAL <- 3; // 渠陕摹(薄?)
ENUM_MAGIC_CANNON_SUBSTATE_LAND <- 4; // 釭酝缣 跷陛胀 虽鼻颤.
function checkExecutableSkill_MagicCannon(obj)
{
if(!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_MAGIC_CANNON);
if(b_useskill) {
// 薄?鼻鹧艘棻贼 奢酝 颤
obj.sq_IntVectClear();
if(obj.getState() == STATE_JUMP)
obj.sq_IntVectPush(ENUM_MAGIC_CANNON_SUBSTATE_CHARGE);
else //薄?陛 嬴栖贼 ?颤
obj.sq_IntVectPush(ENUM_MAGIC_CANNON_SUBSTATE_LAND);
obj.sq_IntVectPush(obj.getXPos());
obj.sq_IntVectPush(obj.getYPos());
obj.sq_IntVectPush(obj.getZPos());
obj.sq_AddSetStatePacket(STATE_MAGIC_CANNON , STATE_PRIORITY_USER, true);
return true;
}
return false;
}
function checkCommandEnable_MagicCannon(obj)
{
if(!obj)
return false;
local state = obj.sq_GetState();
if(state == STATE_ATTACK) {
// 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20]
return obj.sq_IsCommandEnable(SKILL_MAGIC_CANNON);
}
return true;
}
function onProc_MagicCannon(obj)
{
if(!obj)
return;
local myCannon = obj.getMyPassiveObject(24227,0);
if(myCannon) {
if(sq_GetCurrentFrameIndex(myCannon) == 7) {
}
}
}
function onSetState_MagicCannon(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
if(subState == ENUM_MAGIC_CANNON_SUBSTATE_CHARGE) {
obj.sq_SetCurrentAnimation(CUSTOM_ANI_AT_MAGIC_CANNON_READY);
obj.sq_PlaySound("MW_MCANNON");
}
else if(subState == ENUM_MAGIC_CANNON_SUBSTATE_HORIZON) {
obj.sq_SetCurrentAnimation(CUSTOM_ANI_AT_MAGIC_CANNON_1);
}
else if(subState == ENUM_MAGIC_CANNON_SUBSTATE_VERTICAL) {
obj.sq_SetCurrentAnimation(CUSTOM_ANI_AT_MAGIC_CANNON_3);
}
else if(subState == ENUM_MAGIC_CANNON_SUBSTATE_DIAGONAL) {
obj.sq_SetCurrentAnimation(CUSTOM_ANI_AT_MAGIC_CANNON_2);
}
else if(subState == ENUM_MAGIC_CANNON_SUBSTATE_LAND) {
obj.sq_SetCurrentAnimation(CUSTOM_ANI_AT_MAGIC_CANNON_4);
obj.sq_StopMove();
obj.sq_PlaySound("MW_MCANNON");
}
//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 element = obj.getThrowElement();
addElementalChain_ATMage(obj, element);
}
function onEndCurrentAni_MagicCannon(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
if(subState == ENUM_MAGIC_CANNON_SUBSTATE_LAND) {
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
//sq_GetOppositeDirection
//setStaticMoveInfo(0, skill->getIntData(3, this), skill->getIntData(3, this), false, skill->getIntData(4, this), true);
//setMoveDirection(getDirection(), ENUM_DIRECTION_NEUTRAL);
}
else 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_MAGIC_CANNON , STATE_PRIORITY_USER, true);
}
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 onKeyFrameFlag_MagicCannon(obj, flagIndex)
{
if(!obj) return true;
local subState = obj.getSkillSubState();
if(flagIndex == 1) {
local x = 0;
local z = 0;
obj.sq_SetStaticMoveInfo(0, 0, 0, false);
obj.sq_SetStaticMoveInfo(1, 0, 0, false);
sq_SetZVelocity(obj,1,0);
if(subState == ENUM_MAGIC_CANNON_SUBSTATE_LAND) {
x = 43;
z = 70;
}
else if(subState == ENUM_MAGIC_CANNON_SUBSTATE_HORIZON) {
x = 54;
z = 82;
}
else if(subState == ENUM_MAGIC_CANNON_SUBSTATE_DIAGONAL) {
x = 40;
z = 40;
}
obj.sq_SetMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL);
local currentElementalType = obj.getThrowElement();
if(obj.isMyControlObject())
{
sq_BinaryStartWrite();
sq_BinaryWriteWord(subState);
sq_BinaryWriteWord(currentElementalType);
obj.sq_SendCreatePassiveObjectPacket(24227, 0, x, 1, z);
printc("MW_MCANNON");
}
}
else if(flagIndex == 2) {
if(subState == ENUM_MAGIC_CANNON_SUBSTATE_HORIZON) {
obj.sq_SetStaticMoveInfo(0, -400, -400, false);
obj.sq_SetStaticMoveInfo(1, 0, 0, false);
sq_SetZVelocity(obj,1,0);
}
else if(subState == ENUM_MAGIC_CANNON_SUBSTATE_VERTICAL) {
sq_SetZVelocity(obj,400,-400);
}
else if(subState == ENUM_MAGIC_CANNON_SUBSTATE_DIAGONAL) {
obj.sq_SetStaticMoveInfo(0, -200, -200, false);
sq_SetZVelocity(obj,200,-200);
}
}
else if(flagIndex == 3) {
obj.sq_SetStaticMoveInfo(0, -800, -800, false, 3500, true);
obj.sq_SetMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL);
local x = sq_GetDistancePos(0, obj.getDirection(), -20);
sq_CreateParticleByGlobal(obj.getDustParticleType(LANDPARTICLE_MOVE), obj, x, 0, 0, true, 80, 120, 5);
}
return true;
}