Verschlüsseln von Spielständen

Warum?

Die Welt von heute ist nicht die Welt von Gestern, eine kapitalistische Oligarchie (Herrschaft von Wenigen) bestimmt die Welt und drängt uns zu konsumieren um diese Zahnräder unserer verrotteten Gesellschaft am laufen zu halten. Genauso ist der größte Markt für Video Spiele heutzutage der Mobile Sektor. Es ist ein Markt für arme Seelen die zwanghaft digitale Inhalte konsumieren müssen, um ihren miserablen Alltag, oder einfach jeden freien Moment indem sie mal keine Güter produzieren oder Dienstleistungen anbieten für die führende Gesellschaftsklasse, zu vergessen. Diese Individuen müssen sich auf ihre Videospiele konzentrieren, den wenn sie es nicht tun, erfüllt es sie mit enormer panischer Angst. Daher gehen sie soweit, dass sie dafür Geld bezahlen, um ihre Erfahrungen und ihren bevorzugten Lebensweg durch diese In-App Käufe und virtueller Währung zu befriedigen.

Aber was wäre, wenn jemand einen Weg finden würde, die gespeicherten Spiele zu bearbeiten und die Gegenstände und die Währung mühelos zuzuweisen? Das wäre schrecklich, weil es den Spielern helfen würde, den Inhalt viel schneller zu konsumieren und ihn daher früher als erwartet zu verbrauchen. Wenn das passiert, werden sie nichts haben, was sie daran hindert zu denken, und die enorme Qual, ihre eigene Irrelevanz zu erkennen, würde wieder ihr Leben übernehmen.

Nein, wir wollen definitiv nicht, dass das passiert, also lasst uns sehen, wie man Savegames verschlüsselt und die Weltordnung schützt.

Wie?

Die Klasse File kann eine Datei an einem Speicherort öffnen und Daten (Ganzzahlen, Zeichenfolgen und Varianten) lesen bzw. schreiben. Es unterstützt auch die Verschlüsselung. Um eine verschlüsselte Datei zu erstellen, muss ein Passwort wie folgt angegeben werden:

var f = File.new()
var err = f.open_encrypted_with_pass("user://savedata.bin", File.WRITE, "mypass")
f.store_var(game_state)
f.close()
var f = new File();
var err = f.OpenEncryptedWithPass("user://savedata.bin", (int)File.ModeFlags.Write, "mypass");
f.StoreVar(gameState);
f.Close();

Dadurch wird die Datei für Benutzer unlesbar, sie kann aber immer noch weitergegeben werden. Verwenden Sie zur Lösung dieses Problems die eindeutige ID des Geräts oder eine eindeutige Benutzerkennung, z.B.:

var f = File.new()
var err = f.open_encrypted_with_pass("user://savedata.bin", File.WRITE, OS.get_unique_id())
f.store_var(game_state)
f.close()
var f = new File();
var err = f.OpenEncryptedWithPass("user://savedata.bin", (int)File.ModeFlags.Write, OS.GetUniqueId());
f.StoreVar(gameState);
f.Close();

Beachte dass OS.get_unique_id() nicht mit UWP oder HTML5 zusammenarbeitet.

Das war's! Danke für die Zusammenarbeit, Bürger.

Bemerkung

Diese Methode kann Spieler nicht wirklich daran hindern, ihre Spielstände lokal zu verändern. Da der Schlüssel (Encryption key) im Spiel gespeichert ist, kann der Spieler die Datei dennoch selbst entschlüsseln und bearbeiten. Die einzige Möglichkeit, dies zu verhindern, besteht darin, die Spielstandsdaten auf einem Remote-Server zu speichern, auf dem Spieler nur autorisierte Änderungen an ihrem Savegame vornehmen können. Wenn Ihr Spiel mit echtem Geld zu tun hat, müssen Sie dies sogar auf diese Weise tun.