diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/DungeonFinding/LFGMgr.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 3 | ||||
-rw-r--r-- | src/server/game/Handlers/MovementHandler.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Maps/Map.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Maps/Map.h | 5 | ||||
-rw-r--r-- | src/server/game/Maps/MapManager.cpp | 10 | ||||
-rw-r--r-- | src/server/game/Maps/MapManager.h | 6 |
7 files changed, 21 insertions, 12 deletions
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index 03d6e9dcfd5..a823dcfd9ec 100644 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -1427,7 +1427,7 @@ void LFGMgr::TeleportPlayer(Player* player, bool out, bool fromOpcode /*= false* player->FinishTaxiFlight(); - if (!player->TeleportTo(mapid, x, y, z, orientation)) + if (!player->TeleportTo({ .Location = WorldLocation(mapid, x, y, z, orientation), .LfgDungeonsId = dungeon->id })) error = LFG_TELEPORT_RESULT_NO_RETURN_LOCATION; } else diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 957bf84d891..5b87d6273b2 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1158,8 +1158,9 @@ enum class ZonePVPTypeOverride : uint32 struct TeleportLocation { WorldLocation Location; - Optional<uint32> InstanceId; Optional<ObjectGuid> TransportGuid; + Optional<uint32> InstanceId; + Optional<uint32> LfgDungeonsId; }; class TC_GAME_API Player final : public Unit, public GridObject<Player> diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index f37958be579..49878841752 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -77,7 +77,7 @@ void WorldSession::HandleMoveWorldportAck() Map* oldMap = player->GetMap(); Map* newMap = loc.InstanceId ? sMapMgr->FindMap(loc.Location.GetMapId(), *loc.InstanceId) : - sMapMgr->CreateMap(loc.Location.GetMapId(), GetPlayer()); + sMapMgr->CreateMap(loc.Location.GetMapId(), GetPlayer(), loc.LfgDungeonsId); if (TransportBase* transport = player->GetTransport()) transport->RemovePassenger(player); diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 9f1120da59e..de865a978c0 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -2828,9 +2828,10 @@ template TC_GAME_API void Map::RemoveFromMap(Conversation*, bool); /* ******* Dungeon Instance Maps ******* */ -InstanceMap::InstanceMap(uint32 id, time_t expiry, uint32 InstanceId, Difficulty SpawnMode, TeamId InstanceTeam, InstanceLock* instanceLock) +InstanceMap::InstanceMap(uint32 id, time_t expiry, uint32 InstanceId, Difficulty SpawnMode, TeamId InstanceTeam, InstanceLock* instanceLock, + Optional<uint32> lfgDungeonsId) : Map(id, expiry, InstanceId, SpawnMode), - i_data(nullptr), i_script_id(0), i_scenario(nullptr), i_instanceLock(instanceLock) + i_data(nullptr), i_script_id(0), i_scenario(nullptr), i_instanceLock(instanceLock), i_lfgDungeonsId(lfgDungeonsId) { //lets initialize visibility distance for dungeons InstanceMap::InitVisibilityDistance(); diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index 901e03e0264..50ab8cf9120 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -859,7 +859,8 @@ enum class InstanceResetResult : uint8 class TC_GAME_API InstanceMap : public Map { public: - InstanceMap(uint32 id, time_t, uint32 InstanceId, Difficulty SpawnMode, TeamId InstanceTeam, InstanceLock* instanceLock); + InstanceMap(uint32 id, time_t, uint32 InstanceId, Difficulty SpawnMode, TeamId InstanceTeam, InstanceLock* instanceLock, + Optional<uint32> lfgDungeonsId); ~InstanceMap(); bool AddPlayerToMap(Player* player, bool initPlayer = true) override; void RemovePlayerFromMap(Player*, bool) override; @@ -882,6 +883,7 @@ class TC_GAME_API InstanceMap : public Map uint32 GetMaxPlayers() const; TeamId GetTeamIdInInstance() const; Team GetTeamInInstance() const { return GetTeamIdInInstance() == TEAM_ALLIANCE ? ALLIANCE : HORDE; } + Optional<uint32> GetLfgDungeonsId() const { return i_lfgDungeonsId; } virtual void InitVisibilityDistance() override; @@ -896,6 +898,7 @@ class TC_GAME_API InstanceMap : public Map InstanceScenario* i_scenario; InstanceLock* i_instanceLock; GroupInstanceReference i_owningGroupRef; + Optional<uint32> i_lfgDungeonsId; }; class TC_GAME_API BattlegroundMap : public Map diff --git a/src/server/game/Maps/MapManager.cpp b/src/server/game/Maps/MapManager.cpp index 902d665ca61..f3fefda4c94 100644 --- a/src/server/game/Maps/MapManager.cpp +++ b/src/server/game/Maps/MapManager.cpp @@ -86,7 +86,8 @@ Map* MapManager::CreateWorldMap(uint32 mapId, uint32 instanceId) return map; } -InstanceMap* MapManager::CreateInstance(uint32 mapId, uint32 instanceId, InstanceLock* instanceLock, Difficulty difficulty, TeamId team, Group* group) +InstanceMap* MapManager::CreateInstance(uint32 mapId, uint32 instanceId, InstanceLock* instanceLock, Difficulty difficulty, TeamId team, Group* group, + Optional<uint32> lfgDungeonsId) { // make sure we have a valid map id MapEntry const* entry = sMapStore.LookupEntry(mapId); @@ -102,7 +103,7 @@ InstanceMap* MapManager::CreateInstance(uint32 mapId, uint32 instanceId, Instanc TC_LOG_DEBUG("maps", "MapInstanced::CreateInstance: {}map instance {} for {} created with difficulty {}", instanceLock && instanceLock->IsNew() ? "" : "new ", instanceId, mapId, sDifficultyStore.AssertEntry(difficulty)->Name[sWorld->GetDefaultDbcLocale()]); - InstanceMap* map = new InstanceMap(mapId, i_gridCleanUpDelay, instanceId, difficulty, team, instanceLock); + InstanceMap* map = new InstanceMap(mapId, i_gridCleanUpDelay, instanceId, difficulty, team, instanceLock, lfgDungeonsId); ASSERT(map->IsDungeon()); map->LoadRespawnTimes(); @@ -150,7 +151,7 @@ GarrisonMap* MapManager::CreateGarrison(uint32 mapId, uint32 instanceId, Player* - create the instance if it's not created already - the player is not actually added to the instance (only in InstanceMap::Add) */ -Map* MapManager::CreateMap(uint32 mapId, Player* player) +Map* MapManager::CreateMap(uint32 mapId, Player* player, Optional<uint32> lfgDungeonsId /*= {}*/) { if (!player) return nullptr; @@ -225,7 +226,8 @@ Map* MapManager::CreateMap(uint32 mapId, Player* player) if (!map) { - map = CreateInstance(mapId, newInstanceId, instanceLock, difficulty, GetTeamIdForTeam(sCharacterCache->GetCharacterTeamByGuid(instanceOwnerGuid)), group); + map = CreateInstance(mapId, newInstanceId, instanceLock, difficulty, GetTeamIdForTeam(sCharacterCache->GetCharacterTeamByGuid(instanceOwnerGuid)), group, + lfgDungeonsId); if (group) group->SetRecentInstance(mapId, instanceOwnerGuid, newInstanceId); else diff --git a/src/server/game/Maps/MapManager.h b/src/server/game/Maps/MapManager.h index d55262d96d6..54228ddb7cf 100644 --- a/src/server/game/Maps/MapManager.h +++ b/src/server/game/Maps/MapManager.h @@ -21,6 +21,7 @@ #include "GridDefines.h" #include "IteratorPair.h" #include "MapUpdater.h" +#include "Optional.h" #include "Position.h" #include "SharedDefines.h" #include "UniqueTrackablePtr.h" @@ -51,7 +52,7 @@ class TC_GAME_API MapManager static MapManager* instance(); - Map* CreateMap(uint32 mapId, Player* player); + Map* CreateMap(uint32 mapId, Player* player, Optional<uint32> lfgDungeonsId = {}); Map* FindMap(uint32 mapId, uint32 instanceId) const; uint32 FindInstanceIdForPlayer(uint32 mapId, Player const* player) const; @@ -139,7 +140,8 @@ class TC_GAME_API MapManager Map* FindMap_i(uint32 mapId, uint32 instanceId) const; Map* CreateWorldMap(uint32 mapId, uint32 instanceId); - InstanceMap* CreateInstance(uint32 mapId, uint32 instanceId, InstanceLock* instanceLock, Difficulty difficulty, TeamId team, Group* group); + InstanceMap* CreateInstance(uint32 mapId, uint32 instanceId, InstanceLock* instanceLock, Difficulty difficulty, TeamId team, Group* group, + Optional<uint32> lfgDungeonsId); BattlegroundMap* CreateBattleground(uint32 mapId, uint32 instanceId, Battleground* bg); GarrisonMap* CreateGarrison(uint32 mapId, uint32 instanceId, Player* owner); |