From ce55647c415b710c6b440d96c2f26ebbc06c1d6e Mon Sep 17 00:00:00 2001 From: Shauren Date: Wed, 16 Oct 2013 18:37:29 +0200 Subject: Core/Transports * Rewritten path generation, now uses splines - timers are a lot more accurate now * Implemented stopping transports * Implemented spawning transports in instances * Implemented spawning gameobjects as transport passengers * Transport passengers are now stored in creature/gameobject table using gameobject_template.data6 from transport's template as map id --- src/server/game/Grids/ObjectGridLoader.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/server/game/Grids/ObjectGridLoader.cpp') diff --git a/src/server/game/Grids/ObjectGridLoader.cpp b/src/server/game/Grids/ObjectGridLoader.cpp index 58a5bbbff06..b2ddd6b8a4a 100644 --- a/src/server/game/Grids/ObjectGridLoader.cpp +++ b/src/server/game/Grids/ObjectGridLoader.cpp @@ -43,6 +43,20 @@ void ObjectGridEvacuator::Visit(CreatureMapType &m) } } +void ObjectGridEvacuator::Visit(GameObjectMapType &m) +{ + // gameobject in unloading grid can have respawn point in another grid + // if it will be unloaded then it will not respawn in original grid until unload/load original grid + // move to respawn point to prevent this case. For player view in respawn grid this will be normal respawn. + for (GameObjectMapType::iterator iter = m.begin(); iter != m.end();) + { + GameObject* go = iter->GetSource(); + ++iter; + + go->GetMap()->GameObjectRespawnRelocation(go, true); + } +} + // for loading world object at grid loading (Corpses) /// @todo to implement npc on transport, also need to load npcs at grid loading class ObjectWorldLoader @@ -70,7 +84,12 @@ template void ObjectGridLoader::SetObjectCell(T* /*obj*/, CellCoord con template<> void ObjectGridLoader::SetObjectCell(Creature* obj, CellCoord const& cellCoord) { Cell cell(cellCoord); + obj->SetCurrentCell(cell); +} +template<> void ObjectGridLoader::SetObjectCell(GameObject* obj, CellCoord const& cellCoord) +{ + Cell cell(cellCoord); obj->SetCurrentCell(cell); } -- cgit v1.2.3 From 565dd4299cde1f878e3f9c72a72c7c2665d51a3f Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 17 Oct 2013 00:55:50 +0200 Subject: Build fix --- src/server/game/Grids/ObjectGridLoader.cpp | 9 +++++++++ src/server/game/Maps/Map.cpp | 17 ++++++++++++----- src/server/game/Maps/Map.h | 6 ++---- 3 files changed, 23 insertions(+), 9 deletions(-) (limited to 'src/server/game/Grids/ObjectGridLoader.cpp') diff --git a/src/server/game/Grids/ObjectGridLoader.cpp b/src/server/game/Grids/ObjectGridLoader.cpp index b2ddd6b8a4a..d124cd57276 100644 --- a/src/server/game/Grids/ObjectGridLoader.cpp +++ b/src/server/game/Grids/ObjectGridLoader.cpp @@ -95,6 +95,15 @@ template<> void ObjectGridLoader::SetObjectCell(GameObject* obj, CellCoord const template void AddObjectHelper(CellCoord &cell, GridRefManager &m, uint32 &count, Map* map, T *obj) +{ + obj->AddToGrid(m); + ObjectGridLoader::SetObjectCell(obj, cell); + obj->AddToWorld(); + ++count; +} + +template <> +void AddObjectHelper(CellCoord &cell, CreatureMapType &m, uint32 &count, Map* map, Creature *obj) { obj->AddToGrid(m); ObjectGridLoader::SetObjectCell(obj, cell); diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 46eee6613fe..2f4194b3f5f 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -2541,10 +2541,15 @@ void Map::AddToActive(Creature* c) } } +template<> +void Map::AddToActive(DynamicObject* d) +{ + AddToActiveHelper(d); +} + template void Map::RemoveFromActive(T* obj) { - RemoveFromActiveHelper(obj); } template <> @@ -2569,6 +2574,12 @@ void Map::RemoveFromActive(Creature* c) } } +template<> +void Map::RemoveFromActive(DynamicObject* obj) +{ + RemoveFromActiveHelper(obj); +} + template bool Map::AddToMap(Corpse*); template bool Map::AddToMap(Creature*); template bool Map::AddToMap(GameObject*); @@ -2579,10 +2590,6 @@ template void Map::RemoveFromMap(Creature*, bool); template void Map::RemoveFromMap(GameObject*, bool); template void Map::RemoveFromMap(DynamicObject*, bool); -template void Map::AddToActive(DynamicObject*); - -template void Map::RemoveFromActive(DynamicObject*); - /* ******* Dungeon Instance Maps ******* */ InstanceMap::InstanceMap(uint32 id, time_t expiry, uint32 InstanceId, uint8 SpawnMode, Map* _parent) diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index c57f7d36bc6..932f3e213ae 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -603,14 +603,12 @@ class Map : public GridRefManager template void DeleteFromWorld(T*); - template - void AddToActiveHelper(T* obj) + void AddToActiveHelper(WorldObject* obj) { m_activeNonPlayers.insert(obj); } - template - void RemoveFromActiveHelper(T* obj) + void RemoveFromActiveHelper(WorldObject* obj) { // Map::Update for active object in proccess if (m_activeNonPlayersIter != m_activeNonPlayers.end()) -- cgit v1.2.3 From 77013aa08128f84d7f08ba05151136cf9d050a98 Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Fri, 18 Oct 2013 13:31:09 +0200 Subject: Core: Fix warnings --- src/server/game/Grids/ObjectGridLoader.cpp | 2 +- src/server/game/Maps/Map.cpp | 2 +- src/server/game/Maps/TransportMgr.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'src/server/game/Grids/ObjectGridLoader.cpp') diff --git a/src/server/game/Grids/ObjectGridLoader.cpp b/src/server/game/Grids/ObjectGridLoader.cpp index d124cd57276..05dff6823be 100644 --- a/src/server/game/Grids/ObjectGridLoader.cpp +++ b/src/server/game/Grids/ObjectGridLoader.cpp @@ -94,7 +94,7 @@ template<> void ObjectGridLoader::SetObjectCell(GameObject* obj, CellCoord const } template -void AddObjectHelper(CellCoord &cell, GridRefManager &m, uint32 &count, Map* map, T *obj) +void AddObjectHelper(CellCoord &cell, GridRefManager &m, uint32 &count, Map* /*map*/, T *obj) { obj->AddToGrid(m); ObjectGridLoader::SetObjectCell(obj, cell); diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 2f4194b3f5f..fab1b05cd59 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -2548,7 +2548,7 @@ void Map::AddToActive(DynamicObject* d) } template -void Map::RemoveFromActive(T* obj) +void Map::RemoveFromActive(T* /*obj*/) { } diff --git a/src/server/game/Maps/TransportMgr.cpp b/src/server/game/Maps/TransportMgr.cpp index b5469049cca..bd79cd793d5 100644 --- a/src/server/game/Maps/TransportMgr.cpp +++ b/src/server/game/Maps/TransportMgr.cpp @@ -361,7 +361,7 @@ Transport* TransportMgr::CreateTransport(uint32 entry, uint32 guid /*= 0*/, Map* if (MapEntry const* mapEntry = sMapStore.LookupEntry(mapId)) { - if (uint32(mapEntry->Instanceable()) != tInfo->inInstance) + if (mapEntry->Instanceable() != tInfo->inInstance) { TC_LOG_ERROR(LOG_FILTER_TRANSPORTS, "Transport %u (name: %s) attempted creation in instance map (id: %u) but it is not an instanced transport!", entry, trans->GetName().c_str(), mapId); delete trans; -- cgit v1.2.3