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.

But what if someone were to find a way to edit the saved games and assign the items and currency without effort? That would be terrible, because it would help players consume the content much faster, and therefore run out of it sooner than expected. If that happens, they will have nothing that prevents them from thinking, and the tremendous agony of realizing their own irrelevance would again take over their life.

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();

Beachten Sie das 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.