aboutsummaryrefslogtreecommitdiff
path: root/src/game/Transports.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/Transports.cpp')
-rw-r--r--src/game/Transports.cpp58
1 files changed, 46 insertions, 12 deletions
diff --git a/src/game/Transports.cpp b/src/game/Transports.cpp
index 147f8ce39a3..386de1a66d1 100644
--- a/src/game/Transports.cpp
+++ b/src/game/Transports.cpp
@@ -89,8 +89,6 @@ void MapManager::LoadTransports()
continue;
}
- t->m_name = goinfo->name;
-
float x, y, z, o;
uint32 mapid;
x = t->m_WayPoints[0].x; y = t->m_WayPoints[0].y; z = t->m_WayPoints[0].z; mapid = t->m_WayPoints[0].mapid; o = 1;
@@ -185,6 +183,8 @@ bool Transport::Create(uint32 guidlow, uint32 mapid, float x, float y, float z,
if(dynflags)
SetUInt32Value(GAMEOBJECT_DYNAMIC, MAKE_PAIR32(0, dynflags));
+ SetName(goinfo->name);
+
return true;
}
@@ -439,11 +439,9 @@ Transport::WayPointMap::iterator Transport::GetNextWayPoint()
void Transport::TeleportTransport(uint32 newMapid, float x, float y, float z)
{
- //MapManager::Instance().GetMap(oldMapid)->Remove((GameObject *)this, false);
+ Map const* oldMap = GetMap();
SetMapId(newMapid);
- //MapManager::Instance().LoadGrid(newMapid,x,y,true);
Relocate(x, y, z);
- //MapManager::Instance().GetMap(newMapid)->Add<GameObject>((GameObject *)this);
for(PlayerSet::iterator itr = m_passengers.begin(); itr != m_passengers.end();)
{
@@ -467,13 +465,21 @@ void Transport::TeleportTransport(uint32 newMapid, float x, float y, float z)
//data << uint32(0);
//plr->GetSession()->SendPacket(&data);
}
+
+ Map const* newMap = GetMap();
+
+ if(oldMap != newMap)
+ {
+ UpdateForMap(oldMap);
+ UpdateForMap(newMap);
+ }
}
bool Transport::AddPassenger(Player* passenger)
{
if (m_passengers.find(passenger) == m_passengers.end())
{
- sLog.outDetail("Player %s boarded transport %s.", passenger->GetName(), this->m_name.c_str());
+ sLog.outDetail("Player %s boarded transport %s.", passenger->GetName(), GetName());
m_passengers.insert(passenger);
}
return true;
@@ -482,7 +488,7 @@ bool Transport::AddPassenger(Player* passenger)
bool Transport::RemovePassenger(Player* passenger)
{
if (m_passengers.erase(passenger))
- sLog.outDetail("Player %s removed from transport %s.", passenger->GetName(), m_name.c_str());
+ sLog.outDetail("Player %s removed from transport %s.", passenger->GetName(), GetName());
return true;
}
@@ -511,7 +517,6 @@ void Transport::Update(uint32 /*p_time*/)
}
else
{
- //MapManager::Instance().GetMap(m_curr->second.mapid)->GameobjectRelocation((GameObject *)this, m_curr->second.x, m_curr->second.y, m_curr->second.z, this->m_orientation);
Relocate(m_curr->second.x, m_curr->second.y, m_curr->second.z);
}
/*
@@ -549,10 +554,6 @@ void Transport::Update(uint32 /*p_time*/)
if (m_curr == m_WayPoints.begin() && (sLog.getLogFilter() & LOG_FILTER_TRANSPORT_MOVES)==0)
sLog.outDetail(" ************ BEGIN ************** %s", this->m_name.c_str());
- // MapManager::Instance().GetMap(m_curr->second.mapid)->Add(&this); // -> // ->Add(t);
- //MapManager::Instance().GetMap(m_curr->second.mapid)->Remove((GameObject *)this, false); // -> // ->Add(t);
- //MapManager::Instance().GetMap(m_curr->second.mapid)->Add((GameObject *)this); // -> // ->Add(t);
-
if ((sLog.getLogFilter() & LOG_FILTER_TRANSPORT_MOVES)==0)
sLog.outDetail("%s moved to %d %f %f %f %d", this->m_name.c_str(), m_curr->second.id, m_curr->second.x, m_curr->second.y, m_curr->second.z, m_curr->second.mapid);
@@ -561,3 +562,36 @@ void Transport::Update(uint32 /*p_time*/)
}
}
+void Transport::UpdateForMap(Map const* targetMap)
+{
+ Map::PlayerList const& pl = targetMap->GetPlayers();
+ if(pl.isEmpty())
+ return;
+
+ if(GetMapId()==targetMap->GetId())
+ {
+ for(Map::PlayerList::const_iterator itr = pl.begin(); itr != pl.end(); ++itr)
+ {
+ if(this != itr->getSource()->GetTransport())
+ {
+ UpdateData transData;
+ BuildCreateUpdateBlockForPlayer(&transData, itr->getSource());
+ WorldPacket packet;
+ transData.BuildPacket(&packet, true);
+ itr->getSource()->SendDirectMessage(&packet);
+ }
+ }
+ }
+ else
+ {
+ UpdateData transData;
+ BuildOutOfRangeUpdateBlock(&transData);
+ WorldPacket out_packet;
+ transData.BuildPacket(&out_packet, true);
+
+ for(Map::PlayerList::const_iterator itr = pl.begin(); itr != pl.end(); ++itr)
+ if(this != itr->getSource()->GetTransport())
+ itr->getSource()->SendDirectMessage(&out_packet);
+ }
+}
+