diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/Object.cpp | 10 | ||||
-rw-r--r-- | src/game/Player.cpp | 32 |
2 files changed, 37 insertions, 5 deletions
diff --git a/src/game/Object.cpp b/src/game/Object.cpp index af96905b529..132729aea40 100644 --- a/src/game/Object.cpp +++ b/src/game/Object.cpp @@ -1646,12 +1646,18 @@ void Unit::BuildHeartBeatMsg(WorldPacket *data) const void WorldObject::SendMessageToSet(WorldPacket *data, bool /*fake*/) { - 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 9e86cab3615..02556d4f199 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -5681,17 +5681,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) |