Speicherstand mit Prüfsumme und Prüfung beim Laden

Snapshots tragen jetzt eine Prüfsumme (Format 2). Beim Wiederherstellen
werden Zustände abgelehnt, die die Regeln nie erzeugen: zu große Takte,
mehr als vier Spieler online, doppelte Schlüssel, unmögliche
Wartezeiten. World::load ersetzt den öffentlichen Aufruf von
set_all_offline. Die festgeschriebenen Werte sind bewusst angepasst und
um einen Offline-Spieler und das Kartenformat ergänzt.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
Steven Wroblewski
2026-10-01 10:17:03 +02:00
parent 8573a68901
commit ef728cd100
6 changed files with 324 additions and 35 deletions
+5 -3
View File
@@ -95,9 +95,11 @@ impl World {
.map(|index| PlayerId(index as u8))
}
/// Marks every player as offline. Used after loading a save from disk,
/// when nobody has joined yet.
pub fn set_all_offline(&mut self) {
/// Marks every player as offline. Only [`World::load`] uses it: a loaded
/// save starts a new session, which nobody has joined yet. Called during
/// a running session on one machine, it would split the worlds of the
/// players apart.
pub(crate) fn set_all_offline(&mut self) {
for player in &mut self.players {
player.online = false;
}