Parcourir la source

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.
DS il y a 6 mois
Parent
commit
6106e4e72b
2 fichiers modifiés avec 6 ajouts et 5 suppressions
  1. 3 2
      src/server.cpp
  2. 3 3
      src/serverenvironment.cpp

+ 3 - 2
src/server.cpp

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

+ 3 - 3
src/serverenvironment.cpp

@@ -1638,11 +1638,11 @@ u32 ServerEnvironment::addParticleSpawner(float exptime)
 	float time = exptime > 0.f ? exptime : PARTICLE_SPAWNER_NO_EXPIRY;
 
 	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)
 			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[free_id] = time;