Fix sound and particlespawner id generation (#14059)

* Fix server sound ids being reused to early

* Fix particlespawner id generation

It always returned 0.
Also, now the ids always grow, to make a conflict with ids in lua unlikely.
This commit is contained in:
DS 2023-12-01 00:09:53 +01:00 committed by GitHub
parent a7e5456099
commit 6106e4e72b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 5 deletions

@ -2172,7 +2172,7 @@ void Server::SendPlayerSpeed(session_t peer_id, const v3f &added_vel)
inline s32 Server::nextSoundId() inline s32 Server::nextSoundId()
{ {
s32 free_id = m_playing_sounds_id_last_used; s32 free_id = m_playing_sounds_id_last_used;
while (free_id == 0 || m_playing_sounds.find(free_id) != m_playing_sounds.end()) { do {
if (free_id == INT32_MAX) if (free_id == INT32_MAX)
free_id = 0; // signed overflow is undefined free_id = 0; // signed overflow is undefined
else else
@ -2180,7 +2180,8 @@ inline s32 Server::nextSoundId()
if (free_id == m_playing_sounds_id_last_used) if (free_id == m_playing_sounds_id_last_used)
return 0; return 0;
} } while (free_id == 0 || m_playing_sounds.find(free_id) != m_playing_sounds.end());
m_playing_sounds_id_last_used = free_id; m_playing_sounds_id_last_used = free_id;
return free_id; return free_id;
} }

@ -1638,11 +1638,11 @@ u32 ServerEnvironment::addParticleSpawner(float exptime)
float time = exptime > 0.f ? exptime : PARTICLE_SPAWNER_NO_EXPIRY; float time = exptime > 0.f ? exptime : PARTICLE_SPAWNER_NO_EXPIRY;
u32 free_id = m_particle_spawners_id_last_used; u32 free_id = m_particle_spawners_id_last_used;
while (free_id == 0 || m_particle_spawners.find(free_id) != m_particle_spawners.end()) { do {
free_id++;
if (free_id == m_particle_spawners_id_last_used) if (free_id == m_particle_spawners_id_last_used)
return 0; // full return 0; // full
free_id++; } while (free_id == 0 || m_particle_spawners.find(free_id) != m_particle_spawners.end());
}
m_particle_spawners_id_last_used = free_id; m_particle_spawners_id_last_used = free_id;
m_particle_spawners[free_id] = time; m_particle_spawners[free_id] = time;