aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.cpp2
-rw-r--r--src/server/game/Entities/Player/Player.h3
-rw-r--r--src/server/game/Handlers/MovementHandler.cpp2
-rw-r--r--src/server/game/Maps/Map.cpp5
-rw-r--r--src/server/game/Maps/Map.h5
-rw-r--r--src/server/game/Maps/MapManager.cpp10
-rw-r--r--src/server/game/Maps/MapManager.h6
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);