mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-18 00:18:43 +01:00
Core/Transports: Fixed new spawned transports not being visible for players already present on map
This commit is contained in:
@@ -411,38 +411,10 @@ bool Transport::TeleportTransport(uint32 newMapid, float x, float y, float z)
|
||||
if (oldMap->GetId() != newMapid)
|
||||
{
|
||||
Map* newMap = sMapMgr->CreateBaseMap(newMapid);
|
||||
Map::PlayerList const& oldPlayers = GetMap()->GetPlayers();
|
||||
if (!oldPlayers.isEmpty())
|
||||
{
|
||||
UpdateData data;
|
||||
BuildOutOfRangeUpdateBlock(&data);
|
||||
WorldPacket packet;
|
||||
data.BuildPacket(&packet);
|
||||
for (Map::PlayerList::const_iterator itr = oldPlayers.begin(); itr != oldPlayers.end(); ++itr)
|
||||
if (itr->GetSource()->GetTransport() != this)
|
||||
itr->GetSource()->SendDirectMessage(&packet);
|
||||
}
|
||||
|
||||
UnloadStaticPassengers();
|
||||
GetMap()->RemoveFromMap<Transport>(this, false);
|
||||
SetMap(newMap);
|
||||
|
||||
Map::PlayerList const& newPlayers = GetMap()->GetPlayers();
|
||||
if (!newPlayers.isEmpty())
|
||||
{
|
||||
for (Map::PlayerList::const_iterator itr = newPlayers.begin(); itr != newPlayers.end(); ++itr)
|
||||
{
|
||||
if (itr->GetSource()->GetTransport() != this)
|
||||
{
|
||||
UpdateData data;
|
||||
BuildCreateUpdateBlockForPlayer(&data, itr->GetSource());
|
||||
WorldPacket packet;
|
||||
data.BuildPacket(&packet);
|
||||
itr->GetSource()->SendDirectMessage(&packet);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (std::set<WorldObject*>::iterator itr = _passengers.begin(); itr != _passengers.end();)
|
||||
{
|
||||
WorldObject* obj = (*itr++);
|
||||
|
||||
@@ -553,6 +553,22 @@ bool Map::AddToMap(Transport* obj)
|
||||
obj->AddToWorld();
|
||||
_transports.insert(obj);
|
||||
|
||||
// Broadcast creation to players
|
||||
if (!GetPlayers().isEmpty())
|
||||
{
|
||||
for (Map::PlayerList::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
|
||||
{
|
||||
if (itr->GetSource()->GetTransport() != obj)
|
||||
{
|
||||
UpdateData data;
|
||||
obj->BuildCreateUpdateBlockForPlayer(&data, itr->GetSource());
|
||||
WorldPacket packet;
|
||||
data.BuildPacket(&packet);
|
||||
itr->GetSource()->SendDirectMessage(&packet);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -801,6 +817,18 @@ void Map::RemoveFromMap(Transport* obj, bool remove)
|
||||
{
|
||||
obj->RemoveFromWorld();
|
||||
|
||||
Map::PlayerList const& players = GetPlayers();
|
||||
if (!players.isEmpty())
|
||||
{
|
||||
UpdateData data;
|
||||
obj->BuildOutOfRangeUpdateBlock(&data);
|
||||
WorldPacket packet;
|
||||
data.BuildPacket(&packet);
|
||||
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
|
||||
if (itr->GetSource()->GetTransport() != obj)
|
||||
itr->GetSource()->SendDirectMessage(&packet);
|
||||
}
|
||||
|
||||
if (_transportsUpdateIter != _transports.end())
|
||||
{
|
||||
TransportsContainer::iterator itr = _transports.find(obj);
|
||||
|
||||
Reference in New Issue
Block a user