aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Maps
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2015-05-01 15:44:43 +0200
committerShauren <shauren.trinity@gmail.com>2015-05-01 15:44:43 +0200
commit68bd33b6549563ac3b719c27aa16cc4ebd33890a (patch)
treef3b12dbac650877fcc2f5cfa3ab714d1de44ddea /src/server/game/Maps
parent522ae49c6a17e51826ad7f62d2588e0866eb2639 (diff)
Core/Player: Implemented seamless teleporting
Diffstat (limited to 'src/server/game/Maps')
-rw-r--r--src/server/game/Maps/Map.cpp14
-rw-r--r--src/server/game/Maps/Map.h6
2 files changed, 11 insertions, 9 deletions
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index ebfdaaf3b73..44517427e0a 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -473,7 +473,7 @@ void Map::LoadGrid(float x, float y)
EnsureGridLoaded(Cell(x, y));
}
-bool Map::AddPlayerToMap(Player* player)
+bool Map::AddPlayerToMap(Player* player, bool initPlayer /*= true*/)
{
CellCoord cellCoord = Trinity::ComputeCellCoord(player->GetPositionX(), player->GetPositionY());
if (!cellCoord.IsCoordValid())
@@ -491,7 +491,9 @@ bool Map::AddPlayerToMap(Player* player)
player->SetMap(this);
player->AddToWorld();
- SendInitSelf(player);
+ if (initPlayer)
+ SendInitSelf(player);
+
SendInitTransports(player);
SendZoneDynamicInfo(player);
@@ -2955,7 +2957,7 @@ bool InstanceMap::CanEnter(Player* player)
/*
Do map specific checks and add the player to the map if successful.
*/
-bool InstanceMap::AddPlayerToMap(Player* player)
+bool InstanceMap::AddPlayerToMap(Player* player, bool initPlayer /*= true*/)
{
/// @todo Not sure about checking player level: already done in HandleAreaTriggerOpcode
// GMs still can teleport player in instance.
@@ -3065,7 +3067,7 @@ bool InstanceMap::AddPlayerToMap(Player* player)
}
// this will acquire the same mutex so it cannot be in the previous block
- Map::AddPlayerToMap(player);
+ Map::AddPlayerToMap(player, initPlayer);
if (i_data)
i_data->OnPlayerEnter(player);
@@ -3323,7 +3325,7 @@ bool BattlegroundMap::CanEnter(Player* player)
return Map::CanEnter(player);
}
-bool BattlegroundMap::AddPlayerToMap(Player* player)
+bool BattlegroundMap::AddPlayerToMap(Player* player, bool initPlayer /*= true*/)
{
{
std::lock_guard<std::mutex> lock(_mapLock);
@@ -3333,7 +3335,7 @@ bool BattlegroundMap::AddPlayerToMap(Player* player)
// reset instance validity, battleground maps do not homebind
player->m_InstanceValid = true;
}
- return Map::AddPlayerToMap(player);
+ return Map::AddPlayerToMap(player, initPlayer);
}
void BattlegroundMap::RemovePlayerFromMap(Player* player, bool remove)
diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h
index 1394808b2cc..02a8292777a 100644
--- a/src/server/game/Maps/Map.h
+++ b/src/server/game/Maps/Map.h
@@ -274,7 +274,7 @@ class Map : public GridRefManager<NGridType>
return false;
}
- virtual bool AddPlayerToMap(Player*);
+ virtual bool AddPlayerToMap(Player* player, bool initPlayer = true);
virtual void RemovePlayerFromMap(Player*, bool);
template<class T> bool AddToMap(T *);
template<class T> void RemoveFromMap(T *, bool);
@@ -725,7 +725,7 @@ class InstanceMap : public Map
public:
InstanceMap(uint32 id, time_t, uint32 InstanceId, uint8 SpawnMode, Map* _parent);
~InstanceMap();
- bool AddPlayerToMap(Player*) override;
+ bool AddPlayerToMap(Player* player, bool initPlayer = true) override;
void RemovePlayerFromMap(Player*, bool) override;
void Update(const uint32) override;
void CreateInstanceData(bool load);
@@ -755,7 +755,7 @@ class BattlegroundMap : public Map
BattlegroundMap(uint32 id, time_t, uint32 InstanceId, Map* _parent, uint8 spawnMode);
~BattlegroundMap();
- bool AddPlayerToMap(Player*) override;
+ bool AddPlayerToMap(Player* player, bool initPlayer = true) override;
void RemovePlayerFromMap(Player*, bool) override;
bool CanEnter(Player* player) override;
void SetUnload();