[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:
Yaki Khadafi 2012-08-13 12:46:10 +03:00 committed by Antz
parent d861cd0d3a
commit b4d97ccf77
11 changed files with 663 additions and 462 deletions

View file

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

View file

@ -21,6 +21,7 @@
#include "Log.h"
#include "ProgressBar.h"
#include "SharedDefines.h"
#include "SpellAuraDefines.h"
#include "ObjectGuid.h"
#include "SpellAuraDefines.h"

View file

@ -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);

View file

@ -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);

View file

@ -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)) {}
};

View file

@ -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 );

View file

@ -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

View file

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

View file

@ -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
{

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__
#define __REVISION_NR_H__
#define REVISION_NR "12089"
#define REVISION_NR "0072"
#endif // __REVISION_NR_H__