Core/Movement: Implemented methods to animate creatures landing and takeoff and use them in Sindragosa script
This commit is contained in:
@@ -456,29 +456,36 @@ void Unit::SendMonsterMove(float NewPosX, float NewPosY, float NewPosZ, uint32 T
|
||||
AddUnitState(UNIT_STAT_MOVE);
|
||||
}
|
||||
|
||||
void Unit::SendMonsterMove(float NewPosX, float NewPosY, float NewPosZ, uint32 MoveFlags, uint32 time, float speedZ, Player* player)
|
||||
void Unit::SendMonsterMove(MonsterMoveData const& moveData, Player* player)
|
||||
{
|
||||
WorldPacket data(SMSG_MONSTER_MOVE, 12+4+1+4+4+4+12+GetPackGUID().size());
|
||||
WorldPacket data(SMSG_MONSTER_MOVE, GetPackGUID().size() + 1 + 12 + 4 + 1 + 4 + 8 + 4 + 4 + 12);
|
||||
data.append(GetPackGUID());
|
||||
|
||||
data << uint8(0); // new in 3.1
|
||||
data << uint8(0); // new in 3.1
|
||||
data << GetPositionX() << GetPositionY() << GetPositionZ();
|
||||
data << getMSTime();
|
||||
|
||||
data << uint8(0);
|
||||
data << MoveFlags;
|
||||
data << moveData.SplineFlag;
|
||||
|
||||
if (MoveFlags & SPLINEFLAG_TRAJECTORY)
|
||||
if (moveData.SplineFlag & SPLINEFLAG_ANIMATIONTIER)
|
||||
{
|
||||
data << time;
|
||||
data << speedZ;
|
||||
data << (uint32)0; // walk time after jump
|
||||
data << uint8(moveData.AnimationState);
|
||||
data << uint32(0);
|
||||
}
|
||||
else
|
||||
data << time;
|
||||
|
||||
data << uint32(1); // 1 single waypoint
|
||||
data << NewPosX << NewPosY << NewPosZ; // the single waypoint Point B
|
||||
data << moveData.Time;
|
||||
|
||||
if (moveData.SplineFlag & SPLINEFLAG_TRAJECTORY)
|
||||
{
|
||||
data << moveData.SpeedZ;
|
||||
data << uint32(0); // walk time after jump
|
||||
}
|
||||
|
||||
data << uint32(1); // waypoint count
|
||||
data << moveData.DestLocation.GetPositionX();
|
||||
data << moveData.DestLocation.GetPositionY();
|
||||
data << moveData.DestLocation.GetPositionZ();
|
||||
|
||||
if (player)
|
||||
player->GetSession()->SendPacket(&data);
|
||||
@@ -486,6 +493,17 @@ void Unit::SendMonsterMove(float NewPosX, float NewPosY, float NewPosZ, uint32 M
|
||||
SendMessageToSet(&data, true);
|
||||
}
|
||||
|
||||
void Unit::SendMonsterMove(float NewPosX, float NewPosY, float NewPosZ, uint32 MoveFlags, uint32 time, float speedZ, Player* player)
|
||||
{
|
||||
MonsterMoveData data;
|
||||
data.DestLocation.Relocate(NewPosX, NewPosY, NewPosZ);
|
||||
data.SplineFlag = MoveFlags;
|
||||
data.Time = time;
|
||||
data.SpeedZ = speedZ;
|
||||
|
||||
SendMonsterMove(data, player);
|
||||
}
|
||||
|
||||
void Unit::SendMonsterMoveExitVehicle(Position const* newPos)
|
||||
{
|
||||
WorldPacket data(SMSG_MONSTER_MOVE, 1+12+4+1+4+4+4+12+GetPackGUID().size());
|
||||
|
||||
@@ -667,7 +667,7 @@ enum MovementFlags
|
||||
// TODO: Check if PITCH_UP and PITCH_DOWN really belong here..
|
||||
MOVEMENTFLAG_MASK_MOVING =
|
||||
MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_STRAFE_LEFT | MOVEMENTFLAG_STRAFE_RIGHT |
|
||||
MOVEMENTFLAG_PITCH_UP | MOVEMENTFLAG_PITCH_DOWN | MOVEMENTFLAG_JUMPING | MOVEMENTFLAG_FALLING | MOVEMENTFLAG_ASCENDING | MOVEMENTFLAG_DESCENDING |
|
||||
MOVEMENTFLAG_PITCH_UP | MOVEMENTFLAG_PITCH_DOWN | MOVEMENTFLAG_JUMPING | MOVEMENTFLAG_FALLING | MOVEMENTFLAG_ASCENDING | MOVEMENTFLAG_DESCENDING |
|
||||
MOVEMENTFLAG_SPLINE_ELEVATION,
|
||||
|
||||
MOVEMENTFLAG_MASK_TURNING =
|
||||
@@ -717,7 +717,7 @@ enum SplineFlags
|
||||
SPLINEFLAG_CATMULL_ROM = 0x00040000,
|
||||
SPLINEFLAG_UNKNOWN20 = 0x00080000,
|
||||
SPLINEFLAG_UNKNOWN21 = 0x00100000,
|
||||
SPLINEFLAG_UNKNOWN22 = 0x00200000,
|
||||
SPLINEFLAG_ANIMATIONTIER = 0x00200000,
|
||||
SPLINEFLAG_UNKNOWN23 = 0x00400000,
|
||||
SPLINEFLAG_TRANSPORT = 0x00800000,
|
||||
SPLINEFLAG_EXIT_VEHICLE = 0x01000000,
|
||||
@@ -953,6 +953,24 @@ struct SpellPeriodicAuraLogInfo
|
||||
|
||||
uint32 createProcExtendMask(SpellNonMeleeDamage *damageInfo, SpellMissInfo missCondition);
|
||||
|
||||
enum UnitAnimationState
|
||||
{
|
||||
ANIMATION_ON_GROUND = 0,
|
||||
ANIMATION_SWIMMING = 1,
|
||||
ANIMATION_HOVER = 2,
|
||||
ANIMATION_FLYING = 3,
|
||||
};
|
||||
|
||||
struct MonsterMoveData
|
||||
{
|
||||
MonsterMoveData() : SplineFlag(0), AnimationState(ANIMATION_ON_GROUND), Time(0), SpeedZ(0.0f) {}
|
||||
Position DestLocation;
|
||||
uint32 SplineFlag;
|
||||
UnitAnimationState AnimationState; // Only used with SPLINEFLAG_ANIMATIONTIER
|
||||
uint32 Time;
|
||||
float SpeedZ; // Only used with SPLINEFLAG_TRAJECTORY
|
||||
};
|
||||
|
||||
#define MAX_DECLINED_NAME_CASES 5
|
||||
|
||||
struct DeclinedName
|
||||
@@ -1555,6 +1573,7 @@ class Unit : public WorldObject
|
||||
void SendMonsterStop(bool on_death = false);
|
||||
void SendMonsterMove(float NewPosX, float NewPosY, float NewPosZ, uint32 Time, Player* player = NULL);
|
||||
void SendMonsterMove(float NewPosX, float NewPosY, float NewPosZ, uint32 MoveFlags, uint32 time, float speedZ, Player* player = NULL);
|
||||
void SendMonsterMove(MonsterMoveData const& moveData, Player* receiver = NULL);
|
||||
void SendMonsterMoveExitVehicle(Position const* newPos);
|
||||
//void SendMonsterMove(float NewPosX, float NewPosY, float NewPosZ, uint8 type, uint32 MovementFlags, uint32 Time, Player* player = NULL);
|
||||
void SendMonsterMoveTransport(Unit *vehicleOwner);
|
||||
|
||||
Reference in New Issue
Block a user