Fixed unloading of chunks that contain player entities (#4508)
Co-authored-by: peterbell10 <peterbell10@live.co.uk> Co-authored-by: mluchterhand <mluchterhand@max.de>
This commit is contained in:
@@ -194,10 +194,25 @@ void cChunk::MarkRegenerating(void)
|
||||
|
||||
|
||||
|
||||
bool cChunk::HasPlayerEntities()
|
||||
{
|
||||
return std::any_of(m_Entities.begin(), m_Entities.end(),
|
||||
[](std::unique_ptr<cEntity>& Entity)
|
||||
{
|
||||
return Entity->IsPlayer();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
bool cChunk::CanUnload(void)
|
||||
{
|
||||
return
|
||||
m_LoadedByClient.empty() && // The chunk is not used by any client
|
||||
!HasPlayerEntities() && // Ensure not only the absence of ClientHandlers, but also of cPlayer objects
|
||||
!m_IsDirty && // The chunk has been saved properly or hasn't been touched since the load / gen
|
||||
(m_StayCount == 0) && // The chunk is not in a ChunkStay
|
||||
(m_Presence != cpQueued) ; // The chunk is not queued for loading / generating (otherwise multi-load / multi-gen could occur)
|
||||
@@ -211,6 +226,7 @@ bool cChunk::CanUnloadAfterSaving(void)
|
||||
{
|
||||
return
|
||||
m_LoadedByClient.empty() && // The chunk is not used by any client
|
||||
!HasPlayerEntities() && // Ensure not only the absence of ClientHandlers, but also of cPlayer objects
|
||||
m_IsDirty && // The chunk is dirty
|
||||
(m_StayCount == 0) && // The chunk is not in a ChunkStay
|
||||
(m_Presence != cpQueued) ; // The chunk is not queued for loading / generating (otherwise multi-load / multi-gen could occur)
|
||||
|
||||
Reference in New Issue
Block a user