Archive for August, 2008

Stress und Fortschritt …

Sonntag, August 10th, 2008

Ich habe ihn schon beinahe vermisst. Der Stress, den ein RO Server irgendwie zwangsläufig mit sich bringt. Die Gewissheit, dass, egal wie lange man etwas vorbereitet, irgendetwas trotzdem schief gehen wird und man gezwungen ist, zu improvisieren.
Ein bezeichnendes Beispiel wäre das erste WoE mit verbuggten Castle Flags und fehlenden Monster Spawns, vom Ausbleiben der Broadcasts ganz zu schweigen. Dank dem erstaunlich niedrigen Qualitätsniveau Gravities und Athenas hat sich die RO Community wahrscheinlich mittlerweile daran gewöhnt, dass vieles nur halbherzig implementiert ist. Sofern ich es schaffe, versuche ich soviel wie möglich zu korrigieren – die Resonanz ist jedes Mal schlichtweg überwältigend.

Spieler: Wieso ist das plötzlich so???
Admin: Es war verbuggt, in der letzten Wartung wurde es gefixt. Steht aber alles in der Patch Notice..
Spieler: LOL
Spieler: Ich les doch keine Patch Notice xDD

Abseits dieser nervenzehrenden Konversationen geht es allerdings gut voran. Nach vielen Stunden Debugging und Reversing rückt die Fertigstellung des GlobeRO Clients v1.1 in greifbare Nähe. Ein besonderer Leckerbissen des Updates ist das neue EXP Watch. Nach dem vierten Rewrite wird es nun endlich meinen Vorstellungen vollends entsprechen.

Das Fenster ist verschiebbar, durchklickbar (wenn man darauf klickt, läuft man zur darunterliegenden Zelle) und per Doppelklick fixierbar. Für ein ausführliches Stresstesting hat die Zeit bisher nicht gereicht, das wird die GlobeRO Community übernehmen müssen.

Die Support Area im GlobeRO Community House (Screenshot) wird nun ebenfalls unterstützt. Der große Raum ist von Izlude aus zu erreichen, die kleinen Räume sind für Einzelgespräche mit Spielern gedacht. Die Gänge sind nur von GMs begehbar, für Spieler erscheinen sie als unbegehbar. Da der Client bei richtigen unbegehbaren Zellen die Bewegungen von GMs durch diese nicht anzeigen würde, musste ich dafür einiges am Client ändern. Nun kann der Server eine Liste senden, welche Zellen nicht anklickbar sind – Routenberechnung durch diese ist weiterhin möglich.

Die Hooks greifen inzwischen tiefgreifend in den RO Client ein und verwenden größtenteils Gravity Klassen. Der Klassenpointer (this) wird im ecx Register übergeben – dank deren Klassensucht sehen viele meiner C Hooks mittlerweile so aus:

Nun gibt es neben stdcall und cdecl noch die Calling Convention fastcall (Info). Man könnte also auch einen Hook als fastcall definieren und über den ersten Parameter auf ecx zugreifen. Das funktioniert auch soweit:

Auf Dauer ist es aber relativ unübersichtlich, wenn jede Funktion dummy Parameter hat. Permanente Verwendung von inline Assembler dient aber auch nicht gerade der Übersichtlichkeit. Daher habe ich mich entschlossen, meine DLL auf C++ zu portieren. Da ich eh seit längerem vor hatte, mich in C++ einzuarbeiten, kommt mir das sehr gelegen.

Die CWindow Klasse hat derzeit noch 23 ‘unknown’ Werte (von 35 :( ), dafür ist die Calltable mittlerweile größtenteils mit Namen gefüllt. Und die ‘unkown’ Werte werden früher oder später schon meiner Langeweile weichen müssen…. =)