mirror of
https://github.com/mangosfour/server.git
synced 2025-12-12 19:37:03 +00:00
[0072] Fix world teleport and use normalized orientation in some more places
Signed-off-by: Yaki Khadafi <ElSolDolLo@gmail.com>
This commit is contained in:
parent
d861cd0d3a
commit
b4d97ccf77
11 changed files with 663 additions and 462 deletions
|
|
@ -414,11 +414,11 @@ struct CreatureCreatePos
|
|||
public:
|
||||
// exactly coordinates used
|
||||
CreatureCreatePos(Map* map, float x, float y, float z, float o, uint32 phaseMask)
|
||||
: m_map(map), m_phaseMask(phaseMask), m_closeObject(NULL), m_angle(0.0f), m_dist(0.0f) { m_pos.x = x; m_pos.y = y; m_pos.z = z; m_pos.o = o; }
|
||||
: m_map(map), m_phaseMask(phaseMask), m_closeObject(NULL), m_angle(0.0f), m_dist(0.0f) { m_pos.x = x; m_pos.y = y; m_pos.z = z; m_pos.o = NormalizeOrientation(o); }
|
||||
// if dist == 0.0f -> exactly object coordinates used, in other case close point to object (CONTACT_DIST can be used as minimal distances)
|
||||
CreatureCreatePos(WorldObject* closeObject, float ori, float dist = 0.0f, float angle = 0.0f)
|
||||
: m_map(closeObject->GetMap()), m_phaseMask(closeObject->GetPhaseMask()),
|
||||
m_closeObject(closeObject), m_angle(angle), m_dist(dist) { m_pos.o = ori; }
|
||||
m_closeObject(closeObject), m_angle(angle), m_dist(dist) { m_pos.o = NormalizeOrientation(ori); }
|
||||
public:
|
||||
Map* GetMap() const { return m_map; }
|
||||
uint32 GetPhaseMask() const { return m_phaseMask; }
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@
|
|||
#include "Log.h"
|
||||
#include "ProgressBar.h"
|
||||
#include "SharedDefines.h"
|
||||
#include "SpellAuraDefines.h"
|
||||
#include "ObjectGuid.h"
|
||||
#include "SpellAuraDefines.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -202,14 +202,15 @@ void WorldSession::HandleMoveWorldportAckOpcode()
|
|||
|
||||
void WorldSession::HandleMoveTeleportAckOpcode(WorldPacket& recv_data)
|
||||
{
|
||||
DEBUG_LOG("MSG_MOVE_TELEPORT_ACK");
|
||||
DEBUG_LOG("CMSG_MOVE_TELEPORT_ACK");
|
||||
|
||||
ObjectGuid guid;
|
||||
|
||||
recv_data >> guid.ReadAsPacked();
|
||||
|
||||
uint32 counter, time;
|
||||
recv_data >> counter >> time;
|
||||
|
||||
recv_data.ReadGuidMask<5, 0, 1, 6, 3, 7, 2, 4>(guid);
|
||||
recv_data.ReadGuidBytes<4, 2, 7, 6, 5, 1, 3, 0>(guid);
|
||||
|
||||
DEBUG_LOG("Guid: %s", guid.GetString().c_str());
|
||||
DEBUG_LOG("Counter %u, time %u", counter, time / IN_MILLISECONDS);
|
||||
|
||||
|
|
|
|||
|
|
@ -1093,7 +1093,7 @@ void WorldObject::Relocate(float x, float y, float z, float orientation)
|
|||
m_position.x = x;
|
||||
m_position.y = y;
|
||||
m_position.z = z;
|
||||
m_position.o = orientation;
|
||||
m_position.o = NormalizeOrientation(orientation);
|
||||
|
||||
if (isType(TYPEMASK_UNIT))
|
||||
((Unit*)this)->m_movementInfo.ChangePosition(x, y, z, orientation);
|
||||
|
|
@ -1111,7 +1111,7 @@ void WorldObject::Relocate(float x, float y, float z)
|
|||
|
||||
void WorldObject::SetOrientation(float orientation)
|
||||
{
|
||||
m_position.o = orientation;
|
||||
m_position.o = NormalizeOrientation(orientation);
|
||||
|
||||
if (isType(TYPEMASK_UNIT))
|
||||
((Unit*)this)->m_movementInfo.ChangeOrientation(orientation);
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@
|
|||
#include "UpdateData.h"
|
||||
#include "ObjectGuid.h"
|
||||
#include "Camera.h"
|
||||
#include "Util.h"
|
||||
|
||||
#include <set>
|
||||
#include <string>
|
||||
|
|
@ -88,9 +89,9 @@ struct WorldLocation
|
|||
float coord_z;
|
||||
float orientation;
|
||||
explicit WorldLocation(uint32 _mapid = 0, float _x = 0, float _y = 0, float _z = 0, float _o = 0)
|
||||
: mapid(_mapid), coord_x(_x), coord_y(_y), coord_z(_z), orientation(_o) {}
|
||||
: mapid(_mapid), coord_x(_x), coord_y(_y), coord_z(_z), orientation(NormalizeOrientation(_o)) {}
|
||||
WorldLocation(WorldLocation const& loc)
|
||||
: mapid(loc.mapid), coord_x(loc.coord_x), coord_y(loc.coord_y), coord_z(loc.coord_z), orientation(loc.orientation) {}
|
||||
: mapid(loc.mapid), coord_x(loc.coord_x), coord_y(loc.coord_y), coord_z(loc.coord_z), orientation(NormalizeOrientation(loc.orientation)) {}
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -108,8 +108,8 @@ void InitializeOpcodes()
|
|||
OPCODE(SMSG_CHAR_DELETE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
OPCODE(CMSG_PLAYER_LOGIN, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandlePlayerLoginOpcode );
|
||||
OPCODE(SMSG_NEW_WORLD, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//OPCODE(SMSG_TRANSFER_PENDING, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//OPCODE(SMSG_TRANSFER_ABORTED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
OPCODE(SMSG_TRANSFER_PENDING, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
OPCODE(SMSG_TRANSFER_ABORTED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//OPCODE(SMSG_CHARACTER_LOGIN_FAILED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
OPCODE(SMSG_LOGIN_SETTIMESPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//OPCODE(SMSG_GAMETIME_UPDATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
|
|
@ -260,9 +260,9 @@ void InitializeOpcodes()
|
|||
OPCODE(CMSG_MOVE_SET_RUN_MODE, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes );
|
||||
OPCODE(CMSG_MOVE_SET_WALK_MODE, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes );
|
||||
//OPCODE(MSG_MOVE_TOGGLE_LOGGING, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
OPCODE(MSG_MOVE_TELEPORT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
OPCODE(SMSG_MOVE_TELEPORT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
//OPCODE(MSG_MOVE_TELEPORT_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
//OPCODE(MSG_MOVE_TELEPORT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveTeleportAckOpcode );
|
||||
OPCODE(CMSG_MOVE_TELEPORT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveTeleportAckOpcode );
|
||||
//OPCODE(MSG_MOVE_TOGGLE_FALL_LOGGING, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
OPCODE(CMSG_MOVE_FALL_LAND, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes );
|
||||
OPCODE(CMSG_MOVE_START_SWIM, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes );
|
||||
|
|
@ -283,7 +283,7 @@ void InitializeOpcodes()
|
|||
//OPCODE(MSG_MOVE_TOGGLE_COLLISION_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
OPCODE(CMSG_MOVE_SET_FACING, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes );
|
||||
OPCODE(CMSG_MOVE_SET_PITCH, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes );
|
||||
//OPCODE(MSG_MOVE_WORLDPORT_ACK, STATUS_TRANSFER, PROCESS_THREADUNSAFE, &WorldSession::HandleMoveWorldportAckOpcode );
|
||||
OPCODE(MSG_MOVE_WORLDPORT_ACK, STATUS_TRANSFER, PROCESS_THREADUNSAFE, &WorldSession::HandleMoveWorldportAckOpcode );
|
||||
OPCODE(SMSG_MONSTER_MOVE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
OPCODE(SMSG_MOVE_WATER_WALK, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
OPCODE(SMSG_MOVE_LAND_WALK, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
|
|
@ -824,7 +824,7 @@ void InitializeOpcodes()
|
|||
//OPCODE(SMSG_PET_UNLEARN_CONFIRM, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//OPCODE(SMSG_PARTY_MEMBER_STATS_FULL, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//OPCODE(CMSG_PET_SPELL_AUTOCAST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePetSpellAutocastOpcode );
|
||||
//OPCODE(SMSG_WEATHER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
OPCODE(SMSG_WEATHER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//OPCODE(SMSG_PLAY_TIME_WARNING, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//OPCODE(SMSG_MINIGAME_SETUP, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//OPCODE(SMSG_MINIGAME_STATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
|
|
|
|||
|
|
@ -102,8 +102,8 @@ enum Opcodes
|
|||
SMSG_CHAR_DELETE = 0x0304, // 4.3.4 15595
|
||||
CMSG_PLAYER_LOGIN = 0x05B1, // 4.3.4 15595
|
||||
SMSG_NEW_WORLD = 0x79B1, // 4.3.4 15595
|
||||
SMSG_TRANSFER_PENDING = 0x1040,
|
||||
SMSG_TRANSFER_ABORTED = 0x1041,
|
||||
SMSG_TRANSFER_PENDING = 0x18A6, // 4.3.4 15595
|
||||
SMSG_TRANSFER_ABORTED = 0x0537, // 4.3.4 15595
|
||||
SMSG_CHARACTER_LOGIN_FAILED = 0x1042,
|
||||
SMSG_LOGIN_SETTIMESPEED = 0x4D15, // 4.3.4 15595
|
||||
SMSG_GAMETIME_UPDATE = 0x1044,
|
||||
|
|
@ -254,9 +254,9 @@ enum Opcodes
|
|||
CMSG_MOVE_SET_RUN_MODE = 0x791A, // 4.3.4 15595
|
||||
CMSG_MOVE_SET_WALK_MODE = 0x7002, // 4.3.4 15595
|
||||
MSG_MOVE_TOGGLE_LOGGING = 0x10C5,
|
||||
MSG_MOVE_TELEPORT = 0x55A0, // 4.3.4 15595
|
||||
SMSG_MOVE_TELEPORT = 0x55A0, // 4.3.4 15595
|
||||
MSG_MOVE_TELEPORT_CHEAT = 0x10C7,
|
||||
MSG_MOVE_TELEPORT_ACK = 0x10C8,
|
||||
CMSG_MOVE_TELEPORT_ACK = 0x390C, // 4.3.4 15595
|
||||
MSG_MOVE_TOGGLE_FALL_LOGGING = 0x10C9,
|
||||
CMSG_MOVE_FALL_LAND = 0x380A, // 4.3.4 15595
|
||||
CMSG_MOVE_START_SWIM = 0x3206, // 4.3.4 15595
|
||||
|
|
@ -277,7 +277,7 @@ enum Opcodes
|
|||
MSG_MOVE_TOGGLE_COLLISION_CHEAT = 0x10DA,
|
||||
CMSG_MOVE_SET_FACING = 0x7914, // 4.3.4 15595
|
||||
CMSG_MOVE_SET_PITCH = 0x7312, // 4.3.4 15595
|
||||
MSG_MOVE_WORLDPORT_ACK = 0x10DD,
|
||||
MSG_MOVE_WORLDPORT_ACK = 0x2411, // 4.3.4 15595
|
||||
SMSG_MONSTER_MOVE = 0x6E17, // 4.3.4 15595
|
||||
SMSG_MOVE_WATER_WALK = 0x75B1, // 4.3.4 15595
|
||||
SMSG_MOVE_LAND_WALK = 0x34B7, // 4.3.4 15595
|
||||
|
|
@ -809,7 +809,7 @@ enum Opcodes
|
|||
SMSG_PET_UNLEARN_CONFIRM = 0x12F2,
|
||||
SMSG_PARTY_MEMBER_STATS_FULL = 0x12F3,
|
||||
CMSG_PET_SPELL_AUTOCAST = 0x12F4,
|
||||
SMSG_WEATHER = 0x12F5,
|
||||
SMSG_WEATHER = 0x2904, // 4.3.4 15595
|
||||
SMSG_PLAY_TIME_WARNING = 0x12F6,
|
||||
SMSG_MINIGAME_SETUP = 0x12F7,
|
||||
SMSG_MINIGAME_STATE = 0x12F8,
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -2196,8 +2196,6 @@ class MANGOS_DLL_SPEC Player : public Unit
|
|||
}
|
||||
void HandleFall(MovementInfo const& movementInfo);
|
||||
|
||||
void BuildTeleportAckMsg(WorldPacket& data, float x, float y, float z, float ang) const;
|
||||
|
||||
bool isMoving() const { return m_movementInfo.HasMovementFlag(movementFlagsMask); }
|
||||
bool isMovingOrTurning() const { return m_movementInfo.HasMovementFlag(movementOrTurningFlagsMask); }
|
||||
|
||||
|
|
|
|||
|
|
@ -139,6 +139,9 @@ void WorldSession::SendPacket(WorldPacket const* packet)
|
|||
return;
|
||||
}
|
||||
|
||||
sLog.outError("SESSION: sent packet 0x%.4X (%s) to %s (%u)", packet->GetOpcode(),
|
||||
LookupOpcodeName(packet->GetOpcode()), GetPlayerName(), GetAccountId());
|
||||
|
||||
const_cast<WorldPacket*>(packet)->FlushBits();
|
||||
|
||||
#ifdef MANGOS_DEBUG
|
||||
|
|
@ -219,6 +222,9 @@ bool WorldSession::Update(PacketFilter& updater)
|
|||
packet->GetOpcode());
|
||||
#endif*/
|
||||
|
||||
sLog.outError("SESSION: received packet 0x%.4X (%s) from %s (%u)", packet->GetOpcode(),
|
||||
LookupOpcodeName(packet->GetOpcode()), GetPlayerName(), GetAccountId());
|
||||
|
||||
OpcodeHandler const& opHandle = opcodeTable[packet->GetOpcode()];
|
||||
try
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#ifndef __REVISION_NR_H__
|
||||
#define __REVISION_NR_H__
|
||||
#define REVISION_NR "12089"
|
||||
#define REVISION_NR "0072"
|
||||
#endif // __REVISION_NR_H__
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue