[D2NT] Anpassen der Spielnummerierung

03/05/2011 02:18 Muddy Waters#1
Hallo zusammen,

anbei möchte ich eine kleine Anleitung geben, wie man das Format der Spielnummerierung für D2NT 3.1 anpassen kann.

Da es sich hier über eine nachträgliche Änderung der D2NT Manager.exe handelt, welche bei sämtlichen D2NT Mods identisch ist, gilt das hier gezeigte ebenfalls für sämtliche Versionen.

Wer die Änderungen selber durchführen und nicht auf meinen Anhang zurückgreifen möchte, dem sei gesagt, dass das nachträgliche Ändern einer compilierten Anwendung eine recht sensible Sache ist, bei der kleinste Fehler dazu führen können, dass sich die Anwendung nach der Änderung nicht mehr ausführen lässt.

Sofern ihr also selber Hand anlegt, experimentiert nach Möglichkeit mit einem Backup.

Zunächst mal benötigt ihr einen Hex Editor. Eine freeware Version davon findet ihr beispielsweise [Only registered and activated users can see links. Click Here To Register...]. Es gibt aber beispielsweise auch ein Hex Editor Plugin für Notepad++, was für diese einfachen Änderungen mehr als ausreichend ist.

Jetzt öffnet ihr das Backup eurer D2NT Manager.exe.

Was ihr jetzt seht, ist der binäre Inhalt der Anwendung in einer Darstellung aus Hexadezimalzahlen. Auf der rechten Seite findet ihr ausserdem die ASCII Darstellung dieser Hexadezimalzahlen.

Wie man sich leicht Vorstellen kann, gestaltet sich die Suche hier als schwierig, es sei denn man weiss sehr genau, wonach man eigentlich sucht, oder kennt den Offset der für die Anpassung wichtigen Position.

In dem Fall habt ihr Glück, weil ihr den Offset der anzupassenden Zeile kennt, dieser lautet nämlich 0x31590.

Bewegt man sich nun zu diesem Offset, trifft man auf folgende Zeile:
Code:
Offset      00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F        ASCII Text
-----------------------------------------------------------------------------------
00031590    25 00 73 00[ 2D 00 25 00 30 00 32 00 64 00 00 00        %.s.-.%.0.2.d...
Da das hier ja weniger eine Bastelanleitung, als viel mehr informativ werden soll, gehe ich im folgenden auf die Farblich hervorgehobenen Elemente ein.

25 00 73 00 (%.s.) - Diese ersten vier Bytes werden durch den String ersetzt, welcher im Profil in der Textbox mit dem Label Room bzw. Game Name angegeben wurde.

2D 00 (-.) - Das vierte und fünfte Byte belegt ein konstantes Zeichen, welches hinter dem Spielnamen eingefügt wird. In diesem Fall ein Bindestrich.

25 00 30 00 32 00 64 00 (%.0.2.d.) - Womit wir beim eigentlich interessanten Teil dieser kleinen Abhandlung wären. Das 8. bis 14. Byte belegt ein Ausdruck, der durch die Spielnummer ersetzt wird und zusätzlich noch eine Zahlenformatierung enthält.
Die Formatierung wird durch das "02" ausgedrückt. Dieser Ausdruck legt fest, dass die Ausgabezahl immer zwei Ziffern hat und dass bei weniger Ziffern mit dem Zeichen '0' aufgefüllt wird.

Somit ist es auch dieser Formatierungsausdruck, der dafür sorgt, dass nach Spiel Nummer 99 wieder bei 00 begonnen wird.

Die Formatierung geht auf die C Funktion printf() zurück, eine Referenz findet sich [Only registered and activated users can see links. Click Here To Register...].

Um das zu ändern machen wir das denkbar einfachste: Wir entfernen diese Formatierung komplett. Den ganzen Formatierungs String stört diese Änderung wenig, da wir zum einen den Anfangsoffset des Strings unberührt lassen und nach wie vor das Ende des Strings durch ein Byte mit dem Wert Null gekennzeichnet wird.

Führt man diese Änderung durch, sollte die Zeile danach so aussehen:
Code:
Offset      00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F        ASCII Text
-----------------------------------------------------------------------------------
00031590    25 00 73 00 2D 00 25 00 64 00 00 00 00 00 00 00        %.s.-.%.d.......
Das Wirkung dieser Änderung ist nun, dass keine Formatierung der Spielnummer mehr stattfindet.
Somit hat das erste Spiel die Nummer 1 und wird danach bis ins unendliche inkrementiert (natürlich nur theoretisch, vorher gäbe es einen Integer Überlauf).

Das Nutzen dieser veränderten Formatierung stellt aber gewisse Anforderungen an den Nutzer.

Durch die fehlende Formatierung ist die konstante Anzahl von zwei Ziffern nicht mehr gegeben.
Diablo 2 Spielnamen dürfen Maximal 15 Zeichen lang sein.
Gehen wir nun davon aus, dass Zahlen mit mehr als 4 Ziffern unrealistisch sind, kommen wir zu dem Schluss, dass 5 Zeichen für Ziffern und Trennzeichen ('-') eingeplant werden müssen.

Damit darf der eigentliche Spielname eine Länge von 10 Zeichen auf keinen Fall überschreiten!

Im Anhang findet ihr eine entsprechend veränderte D2NT Manager.exe, falls ihr euch die Änderung selber nicht zutraut.

Lg
Muddy

03/05/2011 14:19 kal_el#2
... und wenn ich jetzt anstatt
Quote:
%.s.-.%.0.2.d...
schreiben würde
Quote:
%.s.-.%.0.3.d...
geht´s dann 3-stellig?
unendlich ist natürlich eh besser, aber nur interessehalber.
03/05/2011 14:26 Muddy Waters#3
Ja genau, dann ginge es bei 001 los und würde bis 999 hochlaufen, wobei auf 999 dann 000 folgen würde.

Lg
Muddy
03/07/2011 15:03 lanara#4
:handsdown: Muddy :handsdown:
03/07/2011 23:53 Tyon#5
Wie müsste das Ganze dann aussehen, damit ich den Bindestrich entferne?

Edit: Hat sich erledigt war doch simpler als gedacht. KukBot anfaken *yea*
03/10/2011 16:40 onkelxlc#6
Komisch.
Also ich hab deinen Tweaked manager in mein Bot kopiert.
Aber nach Spiel 99 geht er in channel schreibt next game is XXXXbaal-100
und macht ein spiel auf das xxxxbaal-0 heisst :confused:

€: Im channel schreibt er Next game is xxxxbaal-05 er macht aber xxxxbaal-5 ohne 0 oO
03/10/2011 21:57 Muddy Waters#7
Quote:
Originally Posted by onkelxlc View Post
Komisch.
Also ich hab deinen Tweaked manager in mein Bot kopiert.
Aber nach Spiel 99 geht er in channel schreibt next game is XXXXbaal-100
und macht ein spiel auf das xxxxbaal-0 heisst :confused:

€: Im channel schreibt er Next game is xxxxbaal-05 er macht aber xxxxbaal-5 ohne 0 oO
Grundsätzlich merke ich mal an, dass diese Lösung recht theoretischer Natur ist und von mir nicht in der Praxis getestet wurde.
Es könnte durchaus sein, dass das gar nicht funktioniert. ;)

Dass die Spiel Ansagen damit nicht funktionieren ist jedoch klar, da diese schließlich aus dem Namen des letzten Spiels abgeleitet werden und sich dabei nach dem D2NT Standard Format richten.
Um das zu ändern müsste man die Funktionen, die den Spielnamen herleiten entsprechend auf das neue Format anpassen. :)

Lg
Muddy
03/11/2011 16:54 kal_el#8
ich hab einfachmal nur probiert und das genutzt
Quote:
%.s.-.%.0.3.d...
um zu sehn was passiert.
er macht game-001
bis
game-099
dann folgt
game-000
dann gehts wieder weiter mit
game-001
das schreibt er auch so ins game create fenster.

im manager -common log zählt er aber durch 101, 102 ....
03/11/2011 17:20 Muddy Waters#9
Schade eigentlich, in dem Fall ist die Sache natürlich witzlos. :'(

Ich werde den Text bei Zeiten mal etwas anpassen.

Die Überschrift passt schließlich immernoch, Anpassen der Nummerierung geht ja, nur eben nicht so, wie wir es gerne hätten. :D

In dem Fall müssen wir wohl doch warten, bis sich der nette Herr aus Korea erbarmt und den Quellcode rausrückt. :(

Lg
Muddy
03/11/2011 18:36 kal_el#10
und was machte das da?
war aber fürn vorgänger nt
-> [Only registered and activated users can see links. Click Here To Register...]
03/11/2011 20:43 Muddy Waters#11
Quote:
Originally Posted by kal_el View Post
und was machte das da?
war aber fürn vorgänger nt
-> [Only registered and activated users can see links. Click Here To Register...]
Sieht für mich nach kurzem Überfliegen nach einem relativ simplen Ansatz aus, um Spiele im Channel anzusagen, mehr allerdings nicht.

Man könnte das ganze natürlich auch mit nem Workaround angehen, bei dem man einfach die komplette Spielerstellung selber umsetzt, und das nicht vom Manager machen soll.
Allerdings würde dann auch nichts mitgezählt, wirklich elegante wäre so eine Lösung darum nicht. :(

Lg
Muddy
03/15/2011 23:29 ldevil#12
Quote:
Originally Posted by Muddy_Waters View Post
Allerdings würde dann auch nichts mitgezählt, wirklich elegante wäre so eine Lösung darum nicht. :(
Was wird denn momentan mit gezählt?
03/15/2011 23:54 Muddy Waters#13
Quote:
Originally Posted by ldevil View Post
Was wird denn momentan mit gezählt?
Beispielsweise die Anzahl der Runs. ;)

Die wäre bei nem Workaround vermutlich 0.

Auch wenn ich sagen muss, dass ich es mir noch nicht genau angeschaut habe, meine Hand lege ich für die Aussage daher vorerst nicht ins Feuer. :D

Lg
Muddy
03/16/2011 14:58 onkelxlc#14
Hat vielleicht sonst noch jemand ein versuch da, dass der bot nach 99 mit 100.101,102 usw weiter macht
03/16/2011 22:16 speCt0R#15
sehr geil muddy!

thX