diff options
author | Shauren <shauren.trinity@gmail.com> | 2021-01-16 22:17:11 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-10-04 00:19:38 +0200 |
commit | 4cbaaa343543e0fde5d90b87f762804997f1dbac (patch) | |
tree | 00a1db83e32b96d19f3f945c0f6afe6fbfab9b3b /src/server/game/Maps/Map.cpp | |
parent | 1e99011edf5e74ef51a7b6f84ca0529e5dbf2492 (diff) |
Core/Instances: Save instance entrance based on completed encounters
Diffstat (limited to 'src/server/game/Maps/Map.cpp')
-rw-r--r-- | src/server/game/Maps/Map.cpp | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index d2295ac58c9..fbf89f37050 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -3017,8 +3017,8 @@ void InstanceMap::UpdateInstanceLock(UpdateBossStateSaveDataEvent const& updateS CharacterDatabaseTransaction trans = CharacterDatabase.BeginTransaction(); if (entries.IsInstanceIdBound()) - sInstanceLockMgr.UpdateSharedInstanceLock(trans, - { GetInstanceId(), i_data->GetSaveData(), instanceCompletedEncounters, updateSaveDataEvent.DungeonEncounter }); + sInstanceLockMgr.UpdateSharedInstanceLock(trans, InstanceLockUpdateEvent(GetInstanceId(), i_data->GetSaveData(), + instanceCompletedEncounters, updateSaveDataEvent.DungeonEncounter, i_data->GetEntranceLocationForCompletedEncounters(instanceCompletedEncounters))); for (MapReference& mapReference : m_mapRefManager) { @@ -3029,13 +3029,18 @@ void InstanceMap::UpdateInstanceLock(UpdateBossStateSaveDataEvent const& updateS InstanceLock const* playerLock = sInstanceLockMgr.FindActiveInstanceLock(player->GetGUID(), entries); std::string const* oldData = nullptr; + uint32 playerCompletedEncounters = 0; if (playerLock) + { oldData = &playerLock->GetData()->Data; + playerCompletedEncounters = playerLock->GetData()->CompletedEncountersMask | (1u << updateSaveDataEvent.DungeonEncounter->Bit); + } bool isNewLock = !playerLock || !playerLock->GetData()->CompletedEncountersMask || playerLock->IsExpired(); InstanceLock const* newLock = sInstanceLockMgr.UpdateInstanceLockForPlayer(trans, player->GetGUID(), entries, - { GetInstanceId(), i_data->UpdateBossStateSaveData(oldData ? *oldData : "", updateSaveDataEvent), instanceCompletedEncounters, updateSaveDataEvent.DungeonEncounter }); + InstanceLockUpdateEvent(GetInstanceId(), i_data->UpdateBossStateSaveData(oldData ? *oldData : "", updateSaveDataEvent), + instanceCompletedEncounters, updateSaveDataEvent.DungeonEncounter, i_data->GetEntranceLocationForCompletedEncounters(playerCompletedEncounters))); if (isNewLock) { @@ -3062,8 +3067,8 @@ void InstanceMap::UpdateInstanceLock(UpdateAdditionalSaveDataEvent const& update CharacterDatabaseTransaction trans = CharacterDatabase.BeginTransaction(); if (entries.IsInstanceIdBound()) - sInstanceLockMgr.UpdateSharedInstanceLock(trans, - { GetInstanceId(), i_data->GetSaveData(), instanceCompletedEncounters, nullptr }); + sInstanceLockMgr.UpdateSharedInstanceLock(trans, InstanceLockUpdateEvent(GetInstanceId(), i_data->GetSaveData(), + instanceCompletedEncounters, nullptr, {})); for (MapReference& mapReference : m_mapRefManager) { @@ -3080,7 +3085,8 @@ void InstanceMap::UpdateInstanceLock(UpdateAdditionalSaveDataEvent const& update bool isNewLock = !playerLock || !playerLock->GetData()->CompletedEncountersMask || playerLock->IsExpired(); InstanceLock const* newLock = sInstanceLockMgr.UpdateInstanceLockForPlayer(trans, player->GetGUID(), entries, - { GetInstanceId(), i_data->UpdateAdditionalSaveData(oldData ? *oldData : "", updateSaveDataEvent), instanceCompletedEncounters, nullptr }); + InstanceLockUpdateEvent(GetInstanceId(), i_data->UpdateAdditionalSaveData(oldData ? *oldData : "", updateSaveDataEvent), + instanceCompletedEncounters, nullptr, {})); if (isNewLock) { @@ -3106,7 +3112,7 @@ void InstanceMap::CreateInstanceLockForPlayer(Player* player) CharacterDatabaseTransaction trans = CharacterDatabase.BeginTransaction(); InstanceLock const* newLock = sInstanceLockMgr.UpdateInstanceLockForPlayer(trans, player->GetGUID(), entries, - { GetInstanceId(), i_data->GetSaveData(), i_instanceLock->GetData()->CompletedEncountersMask, nullptr }); + InstanceLockUpdateEvent(GetInstanceId(), i_data->GetSaveData(), i_instanceLock->GetData()->CompletedEncountersMask, nullptr, {})); CharacterDatabase.CommitTransaction(trans); |