aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Maps/Map.h
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2015-12-31 19:51:07 +0100
committerShauren <shauren.trinity@gmail.com>2016-03-21 19:41:28 +0100
commit7422557d03b3cbb5b00a39b16c52f879c2f31fdd (patch)
treec379a50a7ba112b8a4f5149f6c89973939a8675d /src/server/game/Maps/Map.h
parent96ca739a0b0d2b34a28fbac0593e076fb3c42f1b (diff)
Merge pull request #16110 from Treeston/3.3.5-instancerevive
Game/Maps: Clean up instance zone-in handling (cherry picked from commit eb3dc8a4f064d89b78248a511bcf67f805ea3314)
Diffstat (limited to 'src/server/game/Maps/Map.h')
-rw-r--r--src/server/game/Maps/Map.h22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h
index 34aa00e4bf9..d51f05bc32a 100644
--- a/src/server/game/Maps/Map.h
+++ b/src/server/game/Maps/Map.h
@@ -365,7 +365,23 @@ class Map : public GridRefManager<NGridType>
uint32 GetInstanceId() const { return i_InstanceId; }
uint8 GetSpawnMode() const { return (i_spawnMode); }
- virtual bool CanEnter(Player* /*player*/) { return true; }
+
+ enum EnterState
+ {
+ CAN_ENTER = 0,
+ CANNOT_ENTER_ALREADY_IN_MAP = 1, // Player is already in the map
+ CANNOT_ENTER_NO_ENTRY, // No map entry was found for the target map ID
+ CANNOT_ENTER_UNINSTANCED_DUNGEON, // No instance template was found for dungeon map
+ CANNOT_ENTER_DIFFICULTY_UNAVAILABLE, // Requested instance difficulty is not available for target map
+ CANNOT_ENTER_NOT_IN_RAID, // Target instance is a raid instance and the player is not in a raid group
+ CANNOT_ENTER_CORPSE_IN_DIFFERENT_INSTANCE, // Player is dead and their corpse is not in target instance
+ CANNOT_ENTER_INSTANCE_BIND_MISMATCH, // Player's permanent instance save is not compatible with their group's current instance bind
+ CANNOT_ENTER_TOO_MANY_INSTANCES, // Player has entered too many instances recently
+ CANNOT_ENTER_MAX_PLAYERS, // Target map already has the maximum number of players allowed
+ CANNOT_ENTER_ZONE_IN_COMBAT, // A boss encounter is currently in progress on the target map
+ CANNOT_ENTER_UNSPECIFIED_REASON
+ };
+ virtual EnterState CannotEnter(Player* /*player*/) { return CAN_ENTER; }
const char* GetMapName() const;
// have meaning only for instanced map (that have set real difficulty)
@@ -751,7 +767,7 @@ class InstanceMap : public Map
InstanceScript* GetInstanceScript() { return i_data; }
void PermBindAllPlayers(Player* source);
void UnloadAll() override;
- bool CanEnter(Player* player) override;
+ EnterState CannotEnter(Player* player) override;
void SendResetWarnings(uint32 timeLeft) const;
void SetResetSchedule(bool on);
@@ -774,7 +790,7 @@ class BattlegroundMap : public Map
bool AddPlayerToMap(Player* player, bool initPlayer = true) override;
void RemovePlayerFromMap(Player*, bool) override;
- bool CanEnter(Player* player) override;
+ EnterState CannotEnter(Player* player) override;
void SetUnload();
//void UnloadAll(bool pForce);
void RemoveAllPlayers() override;