Technik

Exiled Kingdoms-Spielstände bearbeiten

17. Mai 2022 · Spiele · andreas · 5 Kommentare

Auch wenn es meist der erste Schritt ist, jeglichen Spielspaß zu runinieren, so gibt es ab und an Situationen, in denen man eine kleine Korrektur an einem Spielstand vornehmen möchte. Nachdem die Suche nach “Exiled Kingdoms savegame editor” zu keinerlei Treffern geführt hat, hieß es selbst tätig werden.

Exiled Kingdoms

Zuerst müssen die Spielstände aus dem geschützen Speicher des Android-Geräts in einen zugänglichen Bereich exportiert werden, dies geschieht im Spiel mittels der Funktion “Continue Game” / “Export & Cloud Save” / “Export your saves to a file”. Im Datenverzeichnis des Android-Geräts (i.d.R. “/storage/emulated/0/”) wird eine Datei “EK.bak” angelegt, welche die Spielstände enthält.

Das Bearbeiten erledigt man am einfachsten am PC, wohin die Datei als nächstes übertragen wird. Bei der “EK.bak” handelt es sich um eine normale ZIP-Datei:

$ file EK.bak EK.bak: Zip archive data, at least v2.0 to extract

Umbenennen ist nicht notwendig, die Datei kann direkt ausgepackt werden:

$ unzip EK.bak Archive: EK.bak inflating: saves/0/auto.sav inflating: saves/0/auto.sav.nfo ... inflating: saves/global.sav

Nach dem Entpacken liegen die einzelnen Spielstände im Verzeichnis “./saves/0”, eine Beschreibung des Spielstands kann der jeweiligen “nfo”-Datei entnommen werden:

$ cat auto.sav.nfo Frozen Depths [GREEN]Level 9.[] Day 36, 4 AM

Die Spielstände selbst sind allerdings (noch) nicht direkt bearbeitbar, sondern wurden im “base64”-Format kodiert. Die Umwandlung ist allerdings schnell erledigt:

$ base64 -d auto.sav > auto.txt

Jetzt kann die Datei “auto.txt” mit einem Texteditor geöffnet und bearbeitet werden. Hierbei sollte nach Möglichkeit ein Texteditor verwendet werden, der weder die Zeichenkodierung noch die Zeilenenden verändert.

... stats: { cached_maxhp: 99 characterRace: HUMAN cached_level: 9 missingHP: 126 XP: 41911 characterClass: WARRIOR cache_valid: true } ...

Sobald die gewünschten Änderungen durchgeführt wurden, wird die Datei wieder zurückkodiert und die Textdatei (sofern gewünscht) wieder gelöscht:

$ base64 -w 0 auto.txt > auto.sav $ unlink auto.txt

Dann wird das ZIP aktualisiert

$ zip -f -r EK.bak saves/ freshening: saves/0/auto.sav (deflated 86%)

Anschließend wird die “EK.bak” zurückkopiert und in Exiled Kingdoms mittels der Schritte “Continue Game” / “Export & Cloud Save” / “Restore your saves from a file” wieder importiert.

Diese Beschreibung bezieht sich auf die Spielstände der Exiled Kingdoms Android-Version 1.3.1182, bei anderen Versionen kann die Vorgehensweise unterschiedlich sein.

Bessere Fehlerbehandlung mit Try::Tiny

14. April 2022 · Programmierung · andreas · Kein Kommentar

Die im Beitrag “MIME::Lite Fehlerbehandlung” implementierte Fehlerbehandlung mit “eval” funktioniert zwar in den meisten Fällen, kann aber in bestimmten Situationen doch nicht zum gewünschten Ergebnis führen.

Eine bessere Alternative ist die Verwendung von z.B. Try::Tiny, welches sich mit den aus anderen Sprachen bekannten “try”, “catch” und “finally”-Anweisungen um die Fehlerbehandlung kümmert:

test.pl
use strict; use warnings; use MIME::Lite; use Try::Tiny; MIME::Lite->send('smtp', 'mailserver', Debug => 0); my $msg = MIME::Lite->new( From => 'me@whereever.net', To => 'you@somewhereelse.net', Data => 'Hello World!', Subject => 'testmail', ); try { $msg->send; } catch { warn "you DON'T have mail!"; }; print "... still running ...";

Nach der Warnung “you DON’T have mail!” wird das Programm mit “… still running …” fortgesetzt.


MIME::Lite Fehlerbehandlung

13. April 2022 · Programmierung · andreas · Kein Kommentar

Ein Skript, welches MIME::Lite zum Versenden von Mails verwendet, hat sich im Fehlerfall lieber direkt mit einem “SMTP Failed to connect to mail server: Bad file descriptor” beendet, statt gemäß Dokumentation auf den Fehler zu reagieren.

test.pl
use strict; use warnings; use MIME::Lite; MIME::Lite->send('smtp', 'mailserver', Debug => 0); my $msg = MIME::Lite->new( From => 'me@whereever.net', To => 'you@somewhereelse.net', Data => 'Hello World!', Subject => 'testmail', ); $msg->send || die "you DON'T have mail!"; print "... still running ...";

Weder “you DON’T have mail!” noch “… still running …” werden ausgegeben, da diese Stellen im Code auf Grund des Programmabbruchs nicht mehr erreicht werden.

Leider ist die Erläuterung zum Verhalten der Funktion “$msg->send” nicht wirklich hilfreich:

Returns whatever the mail-handling routine returns: this should be true on success, false/exception on error.

Eine Suche im Internet führte zum Blogbeitrag “Perl exception handling”, welcher genau das aufgetretene Verhalten beschreibt und eine Lösungsmöglichkeit mittels “eval” aufzeigt:

test.pl
use strict; use warnings; use MIME::Lite; MIME::Lite->send('smtp', 'mailserver', Debug => 0); my $msg = MIME::Lite->new( From => 'me@whereever.net', To => 'you@somewhereelse.net', Data => 'Hello World!', Subject => 'testmail', ); eval { $msg->send; }; if ($@) { print "you DON'T have mail!"; } print "... still running ...";

So gekapselt läuft das Skript auch nach einem gescheiterten “$msg->send” weiter und auf einen eventuellen Fehler kann reagiert werden.


Netzwerk-Streaming mit PulseAudio

26. Februar 2022 · Anwendungen · andreas · Kein Kommentar

Manchmal wäre es ganz schön, die Audioausgabe des eigenen PCs auf einem anderen Gerät wie z.B. der heimischen Stereoanlage ausgeben zu können.

Während dem Verlegen von langen Kabeln physikalische (und ggf. auch ästhetische) Grenzen gesetzt sind und Bluetooth je nach Gerätestandort den Weg nicht störunsgfrei überbrücken kann, bietet sich ein Rasperry Pi an, der- entweder über LAN oder WiFi angebunden - die Ausgabe übernimmt.

Ein Raspberry Pi der ersten Generation ist hierfür vollkommen ausreichend, ebenso wie eine SD-Karte mit 4GB Speicherplatz.

Sofern auf dem PC Linux eingesetzt wird, lässt sich das Projekt mit wenig Aufwand und Bordmitteln realisieren. Die meisten aktuellen Linux-Distributionen setzen für die Audioausgabe auf PulseAudio, welches die benötigte Funktionalität bereits mitbringt.

Weiterlesen


Vodafone CallYa Classic und das MB-Rätsel - Update 2

20. Februar 2022 · Anwendungen · andreas · Kein Kommentar

Nochmal ein kurzes (und voraussichlich letztes) Update zur Vodafone CallYa-Karte im Auto: wie bereits im ersten Update geschildert, scheinen nach einem internen Verfahren auch Bruchteile eines Megabytes zu 1 cent abgerechnet zu werden. Im Beitrag “Wie ist die Datentaktung beim Tarif CallYa Classic?” im Vodafone-Forum errechnen die Foren-Mitglieder anhand eines EVNs eines Forenmitglieds eine wahrscheinliche Blockgröße von 378,72 kB. Irgendwie seltsam, daß es hierzu offensichtlich wirklich keine offiziellen Informationen gibt.

Der exakte Abrechnungsmodus ist zwar noch immer unbekannt, aber bei aufgelaufenen Kosten von 91 cent für alle Online-Verbindungen des Autos seit 12. Dezember 2021 erübrigen sich alle weiteren Überlegungen und Nachforschungen - einmal Motor starten kostet jedenfalls deutlich mehr.