aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Player
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2018-09-15 17:55:26 +0200
committerShauren <shauren.trinity@gmail.com>2018-09-15 17:55:26 +0200
commit738f37d3cf45d4e10eda9d44a4cb17079b7bbc1b (patch)
tree9db45160ed8a0c68090dec2aebb9b73c9f2ea335 /src/server/game/Entities/Player
parent0f3156d324ff8134171bada01b40f5c23f5c43cc (diff)
Core/Maps: Replaced spawnmask with difficulty list
Diffstat (limited to 'src/server/game/Entities/Player')
-rw-r--r--src/server/game/Entities/Player/Player.cpp50
-rw-r--r--src/server/game/Entities/Player/Player.h8
2 files changed, 37 insertions, 21 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 2aae0333ebf..f956d970992 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -397,8 +397,8 @@ void Player::CleanupsBeforeDelete(bool finalCleanup)
Unit::CleanupsBeforeDelete(finalCleanup);
// clean up player-instance binds, may unload some instance saves
- for (uint8 i = 0; i < MAX_DIFFICULTY; ++i)
- for (BoundInstancesMap::iterator itr = m_boundInstances[i].begin(); itr != m_boundInstances[i].end(); ++itr)
+ for (auto difficultyItr = m_boundInstances.begin(); difficultyItr != m_boundInstances.end(); ++difficultyItr)
+ for (auto itr = difficultyItr->second.begin(); itr != difficultyItr->second.end(); ++itr)
itr->second.save->RemovePlayer(this);
}
@@ -19428,8 +19428,7 @@ void Player::_LoadGroup(PreparedQueryResult result)
void Player::_LoadBoundInstances(PreparedQueryResult result)
{
- for (uint8 i = 0; i < MAX_DIFFICULTY; ++i)
- m_boundInstances[i].clear();
+ m_boundInstances.clear();
Group* group = GetGroup();
@@ -19514,8 +19513,12 @@ InstancePlayerBind* Player::GetBoundInstance(uint32 mapid, Difficulty difficulty
if (!mapDiff)
return nullptr;
- BoundInstancesMap::iterator itr = m_boundInstances[difficulty].find(mapid);
- if (itr != m_boundInstances[difficulty].end())
+ auto difficultyItr = m_boundInstances.find(difficulty);
+ if (difficultyItr == m_boundInstances.end())
+ return nullptr;
+
+ auto itr = difficultyItr->second.find(mapid);
+ if (itr != difficultyItr->second.end())
if (itr->second.extendState || withExpired)
return &itr->second;
return nullptr;
@@ -19528,8 +19531,12 @@ InstancePlayerBind const* Player::GetBoundInstance(uint32 mapid, Difficulty diff
if (!mapDiff)
return nullptr;
- auto itr = m_boundInstances[difficulty].find(mapid);
- if (itr != m_boundInstances[difficulty].end())
+ auto difficultyItr = m_boundInstances.find(difficulty);
+ if (difficultyItr == m_boundInstances.end())
+ return nullptr;
+
+ auto itr = difficultyItr->second.find(mapid);
+ if (itr != difficultyItr->second.end())
return &itr->second;
return nullptr;
@@ -19550,13 +19557,18 @@ InstanceSave* Player::GetInstanceSave(uint32 mapid)
void Player::UnbindInstance(uint32 mapid, Difficulty difficulty, bool unload)
{
- BoundInstancesMap::iterator itr = m_boundInstances[difficulty].find(mapid);
- UnbindInstance(itr, difficulty, unload);
+ auto difficultyItr = m_boundInstances.find(difficulty);
+ if (difficultyItr != m_boundInstances.end())
+ {
+ auto itr = difficultyItr->second.find(mapid);
+ if (itr != difficultyItr->second.end())
+ UnbindInstance(itr, difficultyItr, unload);
+ }
}
-void Player::UnbindInstance(BoundInstancesMap::iterator &itr, Difficulty difficulty, bool unload)
+void Player::UnbindInstance(BoundInstancesMap::mapped_type::iterator& itr, BoundInstancesMap::iterator& difficultyItr, bool unload)
{
- if (itr != m_boundInstances[difficulty].end())
+ if (itr != difficultyItr->second.end())
{
if (!unload)
{
@@ -19572,7 +19584,7 @@ void Player::UnbindInstance(BoundInstancesMap::iterator &itr, Difficulty difficu
GetSession()->SendCalendarRaidLockout(itr->second.save, false);
itr->second.save->RemovePlayer(this); // save can become invalid
- m_boundInstances[difficulty].erase(itr++);
+ difficultyItr->second.erase(itr++);
}
}
@@ -19669,9 +19681,9 @@ void Player::SendRaidInfo()
time_t now = time(nullptr);
- for (uint8 i = 0; i < MAX_DIFFICULTY; ++i)
+ for (auto difficultyItr = m_boundInstances.begin(); difficultyItr != m_boundInstances.end(); ++difficultyItr)
{
- for (BoundInstancesMap::iterator itr = m_boundInstances[i].begin(); itr != m_boundInstances[i].end(); ++itr)
+ for (auto itr = difficultyItr->second.begin(); itr != difficultyItr->second.end(); ++itr)
{
InstancePlayerBind const& bind = itr->second;
if (bind.perm)
@@ -21193,7 +21205,11 @@ void Player::ResetInstances(uint8 method, bool isRaid, bool isLegacy)
diff = GetLegacyRaidDifficultyID();
}
- for (BoundInstancesMap::iterator itr = m_boundInstances[diff].begin(); itr != m_boundInstances[diff].end();)
+ auto difficultyItr = m_boundInstances.find(diff);
+ if (difficultyItr == m_boundInstances.end())
+ return;
+
+ for (auto itr = difficultyItr->second.begin(); itr != difficultyItr->second.end();)
{
InstanceSave* p = itr->second.save;
const MapEntry* entry = sMapStore.LookupEntry(itr->first);
@@ -21227,7 +21243,7 @@ void Player::ResetInstances(uint8 method, bool isRaid, bool isLegacy)
SendResetInstanceSuccess(p->GetMapId());
p->DeleteFromDB();
- m_boundInstances[diff].erase(itr++);
+ difficultyItr->second.erase(itr++);
// the following should remove the instance save from the manager and delete it as well
p->RemovePlayer(this);
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 7cbea6951f0..fd2b6e9a049 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -2234,20 +2234,20 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
/*** INSTANCE SYSTEM ***/
/*********************************************************/
- typedef std::unordered_map< uint32 /*mapId*/, InstancePlayerBind > BoundInstancesMap;
+ typedef std::unordered_map<Difficulty, std::unordered_map<uint32 /*mapId*/, InstancePlayerBind>> BoundInstancesMap;
void UpdateHomebindTime(uint32 time);
uint32 m_HomebindTimer;
bool m_InstanceValid;
// permanent binds and solo binds by difficulty
- BoundInstancesMap m_boundInstances[MAX_DIFFICULTY];
+ BoundInstancesMap m_boundInstances;
InstancePlayerBind* GetBoundInstance(uint32 mapid, Difficulty difficulty, bool withExpired = false);
InstancePlayerBind const* GetBoundInstance(uint32 mapid, Difficulty difficulty) const;
- BoundInstancesMap& GetBoundInstances(Difficulty difficulty) { return m_boundInstances[difficulty]; }
+ BoundInstancesMap::iterator GetBoundInstances(Difficulty difficulty) { return m_boundInstances.find(difficulty); }
InstanceSave* GetInstanceSave(uint32 mapid);
void UnbindInstance(uint32 mapid, Difficulty difficulty, bool unload = false);
- void UnbindInstance(BoundInstancesMap::iterator &itr, Difficulty difficulty, bool unload = false);
+ void UnbindInstance(BoundInstancesMap::mapped_type::iterator& itr, BoundInstancesMap::iterator& difficultyItr, bool unload = false);
InstancePlayerBind* BindToInstance(InstanceSave* save, bool permanent, BindExtensionState extendState = EXTEND_STATE_NORMAL, bool load = false);
void BindToInstance();
void SetPendingBind(uint32 instanceId, uint32 bindTimer);