aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2015-10-15 23:29:19 +0200
committerShauren <shauren.trinity@gmail.com>2015-10-29 18:59:06 +0100
commitc7bad70e55e02fa4270f225e2dc42fd080db4abd (patch)
tree44fc4f231e8e988ac50eb167f37459f39895a00f /src
parentb1b72dafd05fac354df42583c325099cc34ad575 (diff)
Core/Players: Check if player can enter the instance during login before trying to add him to map
* Fixes name displaying as "Unknown" (cherry picked from commit 45994a177c128dc83ea01b0697377f7b74b5c4ba)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp16
-rw-r--r--src/server/game/Entities/Player/Player.h2
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp2
3 files changed, 9 insertions, 11 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 26f2e912725..6730d1545f4 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -17453,7 +17453,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
}
else if (map->IsDungeon()) // if map is dungeon...
{
- if (!((InstanceMap*)map)->CanEnter(this)) // ... and can't enter map, then look for entry point.
+ if (!((InstanceMap*)map)->CanEnter(this) || !CheckInstanceLoginValid(map)) // ... and can't enter map, then look for entry point.
{
areaTrigger = sObjectMgr->GetGoBackTrigger(mapId);
check = true;
@@ -17480,6 +17480,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
{
TC_LOG_ERROR("entities.player", "Player %s %s Map: %u, X: %f, Y: %f, Z: %f, O: %f. Areatrigger not found.",
m_name.c_str(), guid.ToString().c_str(), mapId, GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation());
+ RelocateToHomebind();
map = NULL;
}
}
@@ -19010,15 +19011,12 @@ bool Player::Satisfy(AccessRequirement const* ar, uint32 target_map, bool report
return true;
}
-bool Player::CheckInstanceLoginValid()
+bool Player::CheckInstanceLoginValid(Map* map)
{
- if (!FindMap())
- return false;
-
- if (!GetMap()->IsDungeon() || IsGameMaster())
+ if (!map->IsDungeon() || IsGameMaster())
return true;
- if (GetMap()->IsRaid())
+ if (map->IsRaid())
{
// cannot be in raid instance without a group
if (!GetGroup())
@@ -19027,12 +19025,12 @@ bool Player::CheckInstanceLoginValid()
else
{
// cannot be in normal instance without a group and more players than 1 in instance
- if (!GetGroup() && GetMap()->GetPlayersCountExceptGMs() > 1)
+ if (!GetGroup() && map->GetPlayersCountExceptGMs() > 1)
return false;
}
// do checks for satisfy accessreqs, instance full, encounter in progress (raid), perm bind group != perm bind player
- return sMapMgr->CanPlayerEnter(GetMap()->GetId(), this, true);
+ return sMapMgr->CanPlayerEnter(map->GetId(), this, true);
}
bool Player::CheckInstanceCount(uint32 instanceId) const
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 4cfe6a3697e..0fc8e716ad8 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -2198,7 +2198,7 @@ class Player : public Unit, public GridObject<Player>
void SendSavedInstances();
static void ConvertInstancesToGroup(Player* player, Group* group, bool switchLeader);
bool Satisfy(AccessRequirement const* ar, uint32 target_map, bool report = false);
- bool CheckInstanceLoginValid();
+ bool CheckInstanceLoginValid(Map* map);
bool CheckInstanceCount(uint32 instanceId) const;
void AddInstanceEnterTime(uint32 instanceId, time_t enterTime);
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp
index 29761ead707..cea45039e88 100644
--- a/src/server/game/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Handlers/CharacterHandler.cpp
@@ -887,7 +887,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder)
}
}
- if (!pCurrChar->GetMap()->AddPlayerToMap(pCurrChar) || !pCurrChar->CheckInstanceLoginValid())
+ if (!pCurrChar->GetMap()->AddPlayerToMap(pCurrChar))
{
AreaTrigger const* at = sObjectMgr->GetGoBackTrigger(pCurrChar->GetMapId());
if (at)