MapManager Issue

Error:

/opt/WoW/Core/335/TrinityCore/src/server/game/Entities/Transport/Transport.cpp:32: error: no Transport MapManager::LoadTransportInMap(Map*, uint32, uint32) member function declared in class MapManager
/opt/WoW/Core/335/TrinityCore/src/server/game/Entities/Transport/Transport.cpp:69: error: no void MapManager::UnLoadTransportFromMap(Transport*) member function declared in class MapManager
/opt/WoW/Core/335/TrinityCore/src/server/game/Entities/Transport/Transport.cpp:101: error: no void MapManager::LoadTransportForPlayers(Player*) member function declared in class MapManager
/opt/WoW/Core/335/TrinityCore/src/server/game/Entities/Transport/Transport.cpp:119: error: no void MapManager::UnLoadTransportForPlayers(Player*) member function declared in class MapManager

Files as attachement…

Transport.h
Transport.cpp

PatchFile:

[SPOILER]
diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp

index f52d005…8ee2f85 100755
— a/src/server/game/Entities/Transport/Transport.cpp
+++ b/src/server/game/Entities/Transport/Transport.cpp
@@ -26,6 +26,123 @@
#include “DBCStores.h”
#include “World.h”
#include “GameObjectAI.h”
+#include “Vehicle.h”
+
+Transport* MapManager::LoadTransportInMap(Map* instance, uint32 goEntry, uint32 period)
+{

  • const GameObjectTemplate* goInfo = sObjectMgr->GetGameObjectTemplate(goEntry);
  • if (!goInfo)
  • {
  • return NULL;
  • }
  • if (goInfo->type != GAMEOBJECT_TYPE_MO_TRANSPORT)
  • {
  • return NULL;
  • }
  • Transport* t = new Transport(period, goInfo->ScriptId);
  • std::set mapsUsed;
  • if (!t->GenerateWaypoints(goInfo->moTransport.taxiPathId, mapsUsed))
  • {
  • delete t;
  • return NULL;
  • }
  • uint32 transportLowGuid = sObjectMgr->GenerateLowGuid(HIGHGUID_MO_TRANSPORT);
  • if (!t->Create(transportLowGuid, goEntry, t->m_WayPoints[0].mapid, t->m_WayPoints[0].x, t->m_WayPoints[0].y, t->m_WayPoints[0].z-10, 0.0f, 0, 0))
  • {
  • delete t;
  • return NULL;
  • }
  • m_Transports.insert(t);
  • m_TransportsByInstanceIdMap[instance->GetInstanceId()].insert(t);
  • t->SetMap(instance);
  • t->AddToWorld();
  • return t;
    +}

+void MapManager::UnLoadTransportFromMap(Transport* t)
+{

  • Map* map = t->GetMap();
  • for (Transport::CreatureSet::iterator itr = t->m_NPCPassengerSet.begin(); itr != t->m_NPCPassengerSet.end() /emoticons/default_wink.png
  • {
  • if (Creature* npc = *itr)
  • {
  • npc->SetTransport(NULL);
  • npc->setActive(false);
  • npc->RemoveFromWorld();
  • }
  • ++itr;
  • }
  • UpdateData transData;
  • t->BuildOutOfRangeUpdateBlock(&transData);
  • WorldPacket out_packet;
  • transData.BuildPacket(&out_packet);
  • for (Map::PlayerList::const_iterator itr = map->GetPlayers().begin(); itr != map->GetPlayers().end(); ++itr)
  • if (t != itr->getSource()->GetTransport())
  • itr->getSource()->SendDirectMessage(&out_packet);
  • t->m_NPCPassengerSet.clear();
  • m_TransportsByInstanceIdMap[t->GetInstanceId()].erase(t);
  • m_Transports.erase(t);
  • t->m_WayPoints.clear();
  • t->RemoveFromWorld();

+}
+
+void MapManager::LoadTransportForPlayers(Player* player)
+{

  • MapManager::TransportMap& tmap = sMapMgr->m_TransportsByInstanceIdMap;
  • UpdateData transData;
  • MapManager::TransportSet& tset = tmap[player->GetInstanceId()];
  • for (MapManager::TransportSet::const_iterator i = tset.begin(); i != tset.end(); ++i)
  • {
  • (*i)->BuildCreateUpdateBlockForPlayer(&transData, player);
  • }
  • WorldPacket packet;
  • transData.BuildPacket(&packet);
  • player->SendDirectMessage(&packet);
    +}

+void MapManager::UnLoadTransportForPlayers(Player* player)
+{

  • MapManager::TransportMap& tmap = sMapMgr->m_TransportsByInstanceIdMap;
  • UpdateData transData;
  • MapManager::TransportSet& tset = tmap[player->GetInstanceId()];
  • for (MapManager::TransportSet::const_iterator i = tset.begin(); i != tset.end(); ++i)
  • {
  • for (Transport::CreatureSet::iterator itr = (*i)->m_NPCPassengerSet.begin(); itr != (*i)->m_NPCPassengerSet.end() /emoticons/default_wink.png
  • {
  • if (Creature* npc = *itr)
  • {
  • npc->SetTransport(NULL);
  • npc->setActive(false);
  • npc->RemoveFromWorld();
  • }
  • ++itr;
  • }
  • (*i)->BuildOutOfRangeUpdateBlock(&transData);
  • }
  • WorldPacket packet;
  • transData.BuildPacket(&packet);
  • player->SendDirectMessage(&packet);
    +}

void MapManager::LoadTransports()
{
@@ -84,8 +201,8 @@ void MapManager::LoadTransports()
uint32 mapid = t->m_WayPoints[0].mapid;
float o = 1.0f;

  • // creates the Gameobject
  • if (!t->Create(lowguid, entry, mapid, x, y, z, o, 255, 0))
  • // creates the Gameobject – Gunship
  • if (!t->Create(lowguid, entry, mapid, x, y, z, o, 100, 0))
    {
    delete t;
    continue;
    @@ -213,7 +330,8 @@ bool Transport::Create(uint32 guidlow, uint32 entry, uint32 mapid, float x, floa
    SetObjectScale(goinfo->size);

SetUInt32Value(GAMEOBJECT_FACTION, goinfo->faction);

  • SetUInt32Value(GAMEOBJECT_FLAGS, goinfo->flags);
  • //SetUInt32Value(GAMEOBJECT_FLAGS, goinfo->flags); – gunship
  • SetUInt32Value(GAMEOBJECT_FLAGS, MAKE_PAIR32(0x28, 0x64));
    SetUInt32Value(GAMEOBJECT_LEVEL, m_period);
    SetEntry(goinfo->entry);

@@ -553,6 +671,8 @@ void Transport::Update(uint32 p_diff)
{
Relocate(m_curr->second.x, m_curr->second.y, m_curr->second.z, GetAngle(m_next->second.x, m_next->second.y) + float(M_PI));
UpdateNPCPositions(); // COME BACK MARKER

  • // This forces the server to update positions in transportation for players – gunship
  • UpdatePlayerPositions();
    }

sScriptMgr->OnRelocate(this, m_curr->first, m_curr->second.mapid, m_curr->second.x, m_curr->second.y, m_curr->second.z);
@@ -672,10 +792,49 @@ uint32 Transport::AddNPCPassenger(uint32 tguid, uint32 entry, float x, float y,
else
currenttguid = std::max(tguid, currenttguid);

  • creature->setActive(true);
    creature->SetGUIDTransport(tguid);
    sScriptMgr->OnAddCreaturePassenger(this, creature);
    return tguid;
    }
    +// gunship data
    +Creature* Transport::AddNPCPassengerInInstance(uint32 entry, float x, float y, float z, float o, uint32 anim)
    +{
  • Map* map = GetMap();
  • Creature* creature = new Creature;
  • if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, GetPhaseMask(), entry, 0, GetGOInfo()->faction, 0, 0, 0, 0))
  • {
  • delete creature;
  • return 0;
  • }
  • creature->SetTransport(this);
  • creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);
  • creature->m_movementInfo.guid = GetGUID();
  • creature->m_movementInfo.t_pos.Relocate(x, y, z, o);
  • creature->Relocate(
  • GetPositionX() + (x * cos(GetOrientation()) + y * sin(GetOrientation() + float(M_PI))),
  • GetPositionY() + (y * cos(GetOrientation()) + x * sin(GetOrientation())),
  • z + GetPositionZ(),
  • o + GetOrientation());
  • creature->SetHomePosition(creature->GetPositionX(), creature->GetPositionY(), creature->GetPositionZ(), creature->GetOrientation());
  • if (!creature->IsPositionValid())
  • {
  • delete creature;
  • return 0;
  • }
  • map->AddToMap(creature);
  • m_NPCPassengerSet.insert(creature);
  • creature->setActive(true);
  • sScriptMgr->OnAddCreaturePassenger(this, creature);
  • return creature;
    +}

void Transport::UpdatePosition(MovementInfo* mi)
{
@@ -686,6 +845,7 @@ void Transport::UpdatePosition(MovementInfo* mi)

Relocate(transport_x, transport_y, transport_z, transport_o);
UpdateNPCPositions();

  • UpdatePlayerPositions();
    }

void Transport::UpdateNPCPositions()
@@ -703,6 +863,25 @@ void Transport::UpdateNPCPositions()
npc->SetHomePosition(x, y, z, o);
}
}
+// gunship Data
+void Transport::UpdatePlayerPositions()
+{

  • for (PlayerSet::iterator itr = m_passengers.begin(); itr != m_passengers.end(); ++itr)
  • {
  • Player* plr = *itr;
  • float x, y, z, o;
  • o = GetOrientation() + plr->m_movementInfo.t_pos.m_orientation;
  • x = GetPositionX() + (plr->m_movementInfo.t_pos.m_positionX * cos(GetOrientation()) + plr->m_movementInfo.t_pos.m_positionY * sin(GetOrientation() + M_PI));
  • y = GetPositionY() + (plr->m_movementInfo.t_pos.m_positionY * cos(GetOrientation()) + plr->m_movementInfo.t_pos.m_positionX * sin(GetOrientation()));
  • z = GetPositionZ() + plr->m_movementInfo.t_pos.m_positionZ;
  • plr->Relocate(x, y, z, o);
  • UpdateData transData;
  • WorldPacket packet;
  • transData.BuildPacket(&packet);
  • plr->SendDirectMessage(&packet);
  • }
    +}

void Transport::CalculatePassengerPosition(float& x, float& y, float& z, float& o)
{

warning: LF will be replaced by CRLF in src/server/game/Entities/Transport/Transport.cpp.
The file will have its original line endings in your working directory.
diff --git a/src/server/game/Entities/Transport/Transport.h b/src/server/game/Entities/Transport/Transport.h
index 8fd12b5…04c4716 100755
— a/src/server/game/Entities/Transport/Transport.h
+++ b/src/server/game/Entities/Transport/Transport.h
@@ -46,8 +46,10 @@ class Transport : public GameObject, public TransportBase
typedef std::set CreatureSet;
CreatureSet m_NPCPassengerSet;
uint32 AddNPCPassenger(uint32 tguid, uint32 entry, float x, float y, float z, float o, uint32 anim=0);

  • Creature* AddNPCPassengerInInstance(uint32 entry, float x, float y, float z, float o, uint32 anim=0);
    void UpdatePosition(MovementInfo* mi);
    void UpdateNPCPositions();
  • void UpdatePlayerPositions();

/// This method transforms supplied transport offsets into global coordinates
void CalculatePassengerPosition(float& x, float& y, float& z, float& o);
@@ -95,10 +97,9 @@ class Transport : public GameObject, public TransportBase
uint32 m_nextNodeTime;

private:

  • void TeleportTransport(uint32 newMapid, float x, float y, float z);
  • void UpdateForMap(Map const* map);
  • void TeleportTransport(uint32 newMapid, float x, float y, float z);
  • void UpdateForMap(Map const* map);
    void DoEventIfAny(WayPointMap::value_type const& node, bool departure);
    WayPointMap::const_iterator GetNextWayPoint();
    };
    #endif

warning: LF will be replaced by CRLF in src/server/game/Entities/Transport/Transport.h.
The file will have its original line endings in your working directory.[/SPOILER]*>

Anyone can help Fix it ?

Transport.rar

That is custom, and is a updatemap hack and onetime loading go on clientside, please check Shauren’s fork on transportsv2 branch for info, where is managing grid and etc etc, proper implementation.

Regards

Eilo