diff options
| author | Tartalo <none@none> | 2010-07-07 22:22:16 +0200 |
|---|---|---|
| committer | Tartalo <none@none> | 2010-07-07 22:22:16 +0200 |
| commit | 7969723527648431fb5d739607956ff14db8ed0d (patch) | |
| tree | f2b844a08f101ca8f8a6e4b925e23bad85ffeea5 | |
| parent | 2ccc475aa507dfdf2b29c471afb2c5a194affce5 (diff) | |
Deny access to instances if other party/user with the same perm id is inside
Fixes #2844
--HG--
branch : trunk
| -rw-r--r-- | src/server/game/Maps/Map.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 476d98afc66..f0d1b5d05ee 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -2395,6 +2395,32 @@ bool InstanceMap::CanEnter(Player *player) return false; } + // cannot enter if instance is in use by another party/soloer that have a + // permanent save in the same instance id + + PlayerList const &playerList = GetPlayers(); + Player *firstInsidePlayer = NULL; + + if (!playerList.isEmpty()) + for (PlayerList::const_iterator i = playerList.begin(); i != playerList.end(); ++i) + if (Player *iPlayer = i->getSource()) + { + if (iPlayer->isGameMaster()) // bypass GMs + continue; + if (!player->GetGroup()) // player has not group and there is someone inside, deny entry + { + player->SendTransferAborted(GetId(), TRANSFER_ABORT_MAX_PLAYERS); + return false; + } + // player inside instance has no group or his groups is different to entering player's one, deny entry + if (!iPlayer->GetGroup() || iPlayer->GetGroup() != player->GetGroup() ) + { + player->SendTransferAborted(GetId(), TRANSFER_ABORT_MAX_PLAYERS); + return false; + } + break; + } + return Map::CanEnter(player); } |
