Knowledgebase Article 76


Replay-Fehler isolieren

Sinn und Zweck von Replays

Replays sind ein sehr pratisches Feature, um zu sehen, was in der letzten Runde im Bereich des eigenen Radars so vor sich gegangen ist. Es besitzt aber noch eine zweite ganz wichtige Funktion: Cheat-Detection.

Da ASC auf den lokalen Rechnern der einzelnen Spieler läuft, gibt es keine Möglichkeit, zu verhindert, dass dort gecheatet wird. Aber es gibt eine Möglichkeit, nachzuweisen, OB gecheatet wurde, nämlich indem die gleichen Befehle auch auf dem eigenen Rechner durchgeführt werden und geschaut wird, ob das gleiche Ergebnis rauskommt. Ist dies nicht der Fall, gibt es eine Replay-Warnmeldung.

Ursachen von Replay-Fehlern

Leider gibt es auch Bugs im Replay, die dazu führen, dass eine Warnmeldung im Replay erscheint, ohne dass gecheatet wurde. Unser Ziel muss sein, die Replay-Bugs einer nach dem anderen zu eliminieren, so dass am Ende jede Warnmeldung ernst genommen werden kann und ein Cheaten sofort auffällt.

Da das Eingrenzen von Replay-Bugs durchaus etwas Arbeit ist, haben wir im PBP eine kleine Belohnung (50.000 EMF) für jeden Replay-Bug ausgesetzt, den ihr helft, zu finden. Im folgenden eine Beschreibung, wie man Replay-Bugs indentifiziert. Einfach eine Mail zu schreiben "bei mir im Replay sind ein paar Meldungen aufgetaucht" ist nämlich nicht genug ;-)

Replay-Meldungen tauchen übrigens auch auf, wenn Einheiten-Updates eingespielt werden. Für ASC selbst ist es nicht zu unterscheiden, ob die Veränderungen an den Einheiten jetzt gewollt sind (offizielle Updates) oder ob sie in bösartiger Absicht gemacht wurden. Nach Einheiten-Updates können Fehlermeldungen im Replay also schonmal vorkommen. Aber man sollte natürlich trotzdem ein Auge darauf werfen, was das für Meldungen sind. Wenn in einem Gebäude auf einmal 100.000 Material hinzugekommen sind ist wäre eine solche Meldung trotzdem sehr verdächtig ;-)

Isolieren fehlerhafter Aktionen

Nun also eine kleine Anleitung, wie man Replay-Bugs identifiziert: Als erstes aktiviert ihr in den Optionen view own replay. Nun werdet ihr nach jeder Runde gefragt, ob ihr euer eigenes Replay anschauen wollt. Beim eigenen Replay dürfen NIE Fehlermeldungen auftreten - wenn doch, handelt es sich garantiert um einen Bug. Nun muss dieser nur noch eingegrenzt werden.

Hier mal ein konkretes Beispiel, wie ich einen Bug eingegrenzt habe, der mir in der RC10 begegnet ist und der in der RC11 gefixt ist. Um das Vorgehen zu verdeutlichen, halte ich mich nicht so genau an die Realität, wundert Euch nicht, wenn Eure Baufahrzeuge nicht so viel auf einmal können - meins kann's eigentlich auch nicht ;-)

Ich ziehe in einem Email-Spiel und bewege dabei dutzende von Einheiten. Am Ende meiner Runde schaue ich mir mein eigenes Replay an und bekomme dabei eine Meldung, dass in der Einheit auf Feld 10/11 eine Resourcendifferenz aufgetreten ist. Ich lade das autosav.sav Savegame, das automatisch beim Rundenwechsel erzeugt wurde. Mit Ctrl-G gehe ich zum Feld 10/11, dort steht ein Gebäudebaufahrzeug.

Nun erinnere ich mich daran, welche Aktionen ich mit dieser Einheit durchgeführt habe - ich hatte die Einheit bewegt, aufgetankt, nochmal bewegt und dann ein Gebäude gebaut. Ich habe also 4 Aktionen gemacht. Jetzt schaue ich erst, ob es wirlich an dieser Einheit gelegen hat. Ich lade also die ursprüngliche .ASCPBM - Datei und mache in meiner Runde nur diese 4 Züge: Gebäudebauer bewegen, auftanken, bewegen und bauen. Ich schaue mir wieder das Replay an - die Fehlermeldung erscheint erneut, also liegt es wirklich an einer dieser 4 Aktionen. Nun muss ich erkennen, welche dieser 4 Aktionen den Fehler verursacht. Ich lade erneut das ursprungs-Savegame und führe nur die ersten beiden Aktionen aus: bewegen und auftanken. End Turn, Replay angeschaut - und es erscheint keine Fehlermeldung. Die warens es nicht. Nun lade ich wieder das autosav-Savegame, führe die 3. Aktion durch. Wieder End-Turn, Replay - und wieder keine Fehlermeldung. Es muss also an Aktion Nr. 4 liegen. Das auch nochmal getestet, es ist wirklich das Gebäudebauen.

Nun weiß ich, wo der Fehler liegt. An Eurer Stelle müsst ihr mir nun noch diese Daten mitteilen. Dafür brauche ich ein Savegame VOR der eigentlichen fehlerhaften Aktion. In diesem Fall also ein Savegame, bei dem der Gebäudebauer zwar gefahren, aufgetankt und wieder gefahren ist, aber NOCH NICHT gebaut hat. Ihr schickt mir dann das Savegame und schreibt dazu: "wenn man mit dem Gebäudebauer auf 10/11 ein Bergwerk mit dem Eingang auf Feld 10/12 baut, gibt es einen Fehler im Replay". Nun kann ich diese Aktion Schritt für Schritt im Debugger nachspielen, den Fehler im Source-Code finden und beheben.

Isolation über Action Script

Anstatt alle Aktionen manuell durchzuspielen, kann man auch auf Lua-Skripting zurückgreifen.

Am Ende der Runde führt man Action / save script aus. In der dortigen Datei werden alle Befehle abgelegt, die man durchgeführt hat. Diese Datei kann man per Action/Run Script wieder ausführen, dazu muss natürlich der Anfangs-Spielstand der Runde geladen werden.

Diese Datei kann man nun anpassen. Ein Ansatz wäre, mit einem TextEditor die zweite Hälfte zu entfernen und nur die erste Hälfte laufen zu lassen. Dann abspeichern. Replay anschauen. Wenn ein Fehler auftritt, ist der fehlerhafte Befehl in der ersten Hälfte. Wenn nicht, in der zweiten Hälfte. Durch zerteilen in immer kleinere Stücke kann man den Fehler isolieren.

Wenn das Replay hart abstürzt, kann man auch den Zähler im Replay beobachten, um die Position des Befehls in der Lua-Script-Datei einzugrenzen.

Benötigte Infos für Report

Lange Rede, kurzer Sinn: die ausgeschriebene Belohnung gibt es nur dann, wenn ihr den Fehler so genau eingrenzt, dass ich den Fehler reproduzieren und beheben kann. Dafür brauche ich: - ein Savegame direkt vor der fehlerhaften Aktion (ein Replay dieses Savegames darf keine Fehlermeldungen produzieren) - die genaue Angabe, welche Aktion nun durchgeführt wurde - nach dem durchführen dieser Aktion muss das Replay eine Fehlermeldung bringen

Aufwandsentschädigung für PBP Teilnehmer

Das ganze ist etwas Arbeit, das ist leider nicht zu vermeiden. Aber zur Motivationssteigerung gibts für PBP-Teilnehmer auch 50.000 Energy, 50.000 Material und 50.000 Fuel als Belohnung. Und ganz nebenbei sollte ja auch jeder beim PBP ein Interesse dran haben, dass Cheaten sofort auffällt und geahndet werden kann.

Last change: Sat, 2010-04-03 13:05


search knowledgebase
browse knowledgebase