From 6a5b6f08e0734ba6c530853090aae64be138ed3b Mon Sep 17 00:00:00 2001 From: Ambal Date: Sun, 14 Jun 2009 11:10:37 +0400 Subject: [PATCH] [8007] Do not create empty maps while sending packets. Signed-off-by: AlexDereka --- src/game/Object.cpp | 10 ++++++++-- src/game/Player.cpp | 32 +++++++++++++++++++++++++++++--- src/shared/revision_nr.h | 2 +- 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/src/game/Object.cpp b/src/game/Object.cpp index 3200f6881..d722b033b 100644 --- a/src/game/Object.cpp +++ b/src/game/Object.cpp @@ -1550,12 +1550,18 @@ void WorldObject::BuildTeleportAckMsg(WorldPacket *data, float x, float y, float void WorldObject::SendMessageToSet(WorldPacket *data, bool /*bToSelf*/) { - GetMap()->MessageBroadcast(this, data); + //if object is in world, map for it already created! + Map * _map = IsInWorld() ? GetMap() : MapManager::Instance().FindMap(GetMapId(), GetInstanceId()); + if(_map) + _map->MessageBroadcast(this, data); } void WorldObject::SendMessageToSetInRange(WorldPacket *data, float dist, bool /*bToSelf*/) { - GetMap()->MessageDistBroadcast(this, data, dist); + //if object is in world, map for it already created! + Map * _map = IsInWorld() ? GetMap() : MapManager::Instance().FindMap(GetMapId(), GetInstanceId()); + if(_map) + _map->MessageDistBroadcast(this, data, dist); } void WorldObject::SendObjectDeSpawnAnim(uint64 guid) diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 8126abc6b..78faf4e08 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -5559,17 +5559,43 @@ void Player::SaveRecallPosition() void Player::SendMessageToSet(WorldPacket *data, bool self) { - GetMap()->MessageBroadcast(this, data, self); + Map * _map = IsInWorld() ? GetMap() : MapManager::Instance().FindMap(GetMapId(), GetInstanceId()); + if(_map) + { + _map->MessageBroadcast(this, data, self); + return; + } + + //if player is not in world and map in not created/already destroyed + //no need to create one, just send packet for itself! + if(self) + GetSession()->SendPacket(data); } void Player::SendMessageToSetInRange(WorldPacket *data, float dist, bool self) { - GetMap()->MessageDistBroadcast(this, data, dist, self); + Map * _map = IsInWorld() ? GetMap() : MapManager::Instance().FindMap(GetMapId(), GetInstanceId()); + if(_map) + { + _map->MessageDistBroadcast(this, data, dist, self); + return; + } + + if(self) + GetSession()->SendPacket(data); } void Player::SendMessageToSetInRange(WorldPacket *data, float dist, bool self, bool own_team_only) { - GetMap()->MessageDistBroadcast(this, data, dist, self,own_team_only); + Map * _map = IsInWorld() ? GetMap() : MapManager::Instance().FindMap(GetMapId(), GetInstanceId()); + if(_map) + { + _map->MessageDistBroadcast(this, data, dist, self, own_team_only); + return; + } + + if(self) + GetSession()->SendPacket(data); } void Player::SendDirectMessage(WorldPacket *data) diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 9264a1eb2..24ad45ee5 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "8006" + #define REVISION_NR "8007" #endif // __REVISION_NR_H__