BinSpeak

dev@blog

Archive for November, 2008

Fallout 3 Cheating

November 17th, 2008 by Frobenius

Nach langem habe ich mir mal wieder ein Computer-Spiel gekauft, und meine Wahl fiel auf das Rollenspiel Fallout 3. Leider hat es mich nicht so sehr gefesselt wie ich gehofft habe, deswegen hab ich mich bald damit beschäftigt, wie man am besten Cheaten kann. Und das ist bei Fallout 3 zum Glück schön einfach, da man direkt auf die Script Console kommt, wo man Befehle eingeben kann.

Mit  “^” startet man die Console und kann dort Script-Befehle eingeben. mit help kann man eine komplette Liste der Möglichkeiten ausgeben.

Um auf bestimmte Objekte zuzugreifen benötigt man deren ReferenzID, die man ganz einfach zu sehen bekommt, indem man mit der Maus bei aktiver Console klickt. Meine eigene Spielfigur hat z.B. die ID 00000014.

mit pickRefByID <ReferenzID> kann man nun die Console auf die Referenz des Objekts setzen, und dieses mit weiteren Befehlen manipulieren.

Mit setav <wert> <amount> kann man Werte wie luck, strength usw. setzen.

mit additem <ObjectID> kann man sich selbst Elemente ins Inventar legen.

Die ObjectID ist nicht das gleiche, wie die ReferenzID, und die bisher einzige Möglichkeit die ich kenne um sie herauszubekommen, ist der Befehl inv, der das Inventar inkl ObjectID jedes Elements darin anzeigt. (Wenn jemand eine bessere Methode kennt, bitte Bescheid sagen).

Hier mal ein konkretes Beispiel, wie man sich Kronkorken verschafft (ObjectID für Kronkorken: 0000000F, die führenden Nullen kann man aber weglassen)

mit “^” die Console öffnen:

mit der Maus auf die eigene Spielerfigur klicken. Rechts oben erscheint der Name der Figur und eine 8stellige ID (z.B. 00000014)

in der Console eigeben: pickRefByID 00000014

jetzt ist die eigene Spielerfigur als Referenz ausgewählt.

mit AddItem F 2000 kann man nun 2000 Kronkoren ins eigene Inventar legen.

mit setAV strength 8 kann man seine Stärke auf 8 setzen usw.

Es gibt natürlich noch jede Menge weiter Möglichkeiten, die ich aber noch nicht alle ausprobiert habe.

mit kill ReferenzID kann man einen Character töten. Mit ressurect RefId wiederbeleben.

mit setLevel kann man sein Level setzen.

mit setWeaponHealthPerc kann man den Zustand seiner aktuellen Waffe setzen

mit ModPCSkill kann man seine Feritgkeiten verbessern (ungetestet!)

mit sexChange kann man sogar sein Geschlecht wechseln.

Was mir noch fehlt ist eine Möglichkeit, den Zustand seiner Rüstung zu setzen, falls jemand den entsprechend Befehl findet, immer her damit.

Zum experimentieren habe ich hier die Liste an Befehlen, die der help-Befehl ausspuckt in dieser Datei.

Ich hoffe einigen von euch hilft es weiter, und wenn jemand noch tolle Möglichkeiten herausfindet, das ganze zu nutzen, immer her damit.

Category: general | No Comments »

PDT on Eclipse – Short Review

November 4th, 2008 by Frobenius

Vor kurzem habe ich für die Entwicklung an einem PHP-Projekt meine Umgebung von Text-Editor (PSPad) auf Eclipse mit den PHP Development Tools (PDT) umgestellt. Als erstes Fazit folgt hier eine kleine Liste von Dingen die mir aufgefallen sind.

  • Gleich zu Beginn viel mir eins der größten Manko’s auf: man kann keine Dateien mit Eclipse aus dem Explorer öffnen. Weder mit einem Doppelklick (natürlich nachdem ich das Standardprogramm auf Eclipse gestellt habe), noch “öffnen mit..” oder “senden an…” funktioniert. Ich habe auch mit Googles Hilfe bisher keine Lösung dafür gefunden, falls jemand eine (einfache) hat, immer her damit.
    Dieses Problem führt dazu, das man nur vernünftig mit Eclipse arbeiten kann, wenn man ein Projekt anlegt, in dem alle Dateien verwaltet werden.
  • Mit Hilfe von Subclipse ist das anlegen eines Projekts durch einen Checkout aus Subversion ziemlich einfach und praktisch.
  • Eins der tollsten Features einer anständigen IDE ist natürlich die kontextsensitive Code-Vervollständigung. Das klappt auch ziemlich gut (wenn alle Dateien Teil des Projekts sind) , sowohl Methoden von Klassen (inkl. Oberklassen) als auch die Anzeige von Funktions-Parametern erleichtern das arbeiten enorm. die Vervollständigung von Funktionsnamen mit STRG+Leer finde ich etwas unhandlich, da ist z.B. PSPad besser, da kann man mit dem Mausrad arbeiten.
    Das ganze funktioniert natürlich nur gut, wenn der Code anständig mit PHPDoc-Code dokumentiert wurde, weil Eclipse aus diesen Angaben Parameter- und Rückgabetypen zieht. Die fehlende Typsicherheit in PHP ist an der Stelle natürlich (wie immer) ein Problem.
  • Super ist es, mit F3 direkt zur Definition der am Maus-Cursor geschriebenen Funktion zu springen.
  • Etwas Schade finde ich es, das man mit F1 nicht eine Hilfe für die aktuelle Funktion bekommt.
  • Die Refactoring-Punkte (z.B. Rename) funktionieren bei mir leider nicht.
  • Die Suche fand ich in Eclipse noch nie gut gelungen, irgendwie sucht man immer erstmal falsch. Wenn ich nach einem Text in mehreren Dateien suche, bekomme ich nur eine Liste der Dateien, nicht der einzelnen Fundstellen. Da ist PSPad auch besser, der zeigt mir alle Zeilen an, die den Text enthalten.
  • Navigator, Outline der aktuellen Datei und auch die anderen Sidebars sind recht gut zu bedienen, und man will sie schnell nicht mehr hergeben.
  • Wie in Eclipse üblich, ist es immer etwas kompliziert, alles so einzustellen wie man es will (Formatierung, Coding Style etc), aber man findet irgendwann (fast) jede Option die man braucht.

Alles in allem werde ich wohl in Zukunft mit Eclipse arbeiten, wenn ich ein PHP-Projekt umzusetzen habe. Nur wenn schnell mal in eine einzelne Datei schauen will, und nicht gleich ein Projekt anlegen, ist es ziemlich schlecht, das man das per Drag & Drop machen muss. Mittlerweile ist jedenfalls PSPad bei mir wieder Standardprogramm für PHP-Files.
Demnächst werde ich das einrichten eines Debuggers testen und auch die Subclipse-Funktionen muß ich noch genauer testen. Darüber  also bald mehr.

Category: general | No Comments »

Elemente eines Arrays löschen

November 4th, 2008 by Frobenius

Gerade hatte ich mal wieder ein kleines Problem bei dem Versuch mehrere Elemente in einer Iteration aus einem Array zu löschen. Den Fehler hab ich schon öfters gemacht und doch denke ich im ersten Moment nie daran. Folgendes (vereinfacht) habe ich gemacht (hier in PHP):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    $a = array(2,2,1);
    $cnt = count($a);
    for($i = 0; $i &lt; cnt; $i++) {
        if($a[$i] == 2) {
            array_splice($a, $i, 1);
        }
    }
    var_dump($a);
 
/*  Ausgabe:
array(2) {
   [0] =&gt;
   int(2)
   [1] =&gt;
   int(1)
}
*/

Der Versuch alle Elemente, die 2 sind zu löschen ging schief, weil man das Array selbst während der Iteration geändert hat. Nachdem man den ersten Eintrag gelöscht hat, steht $i auf 1, an Index-Position 1 des Array ist jetzt aber nicht die zweite 2, sondern die 1, weil ja das Array nur noch zwei Element hat. Die Lösung für das Problem ist ganz einfach (auch ohne foreach). Man geht einfach rückwärts durch das Array:

    $a = array(2, 2, 1);
    for($i = count($a)-1; $i >= 0; $i--) {
        if($a[$i] == 2) {
             array_splice($a, $i, 1);
        }
    }

    var_dump($a);
/* Ausgabe:
array(1) {
  [0] =>
  int(1)
}
*/

Diesmal geht alles gut, weil wir nach dem löschen eines Elements nur Indizies betrachten, die vor dem gelöschten liegen, und damit nicht von dessen Löschung beinflusst werden.

Als zweite Variante bietet sich an, in der ersten Schleife anstatt array_splice die Funktion unset zu verwenden, die löscht nämlich den Wert im Array, passt aber die Indizes nicht an. Das ist imho ein ziemlich bescheuertes Verhalten, aber in diesem Fall nützlich. Nach dem löschen muß man dann allerdings aufpassen, weil es gibt kein $a[0] Element mehr, sondern nur noch ein $a[2] Element.

Category: general | 28 Comments »