[D2NT] Erweitertes Itemlog

04/20/2010 21:29 Muddy Waters#1
Anmerkung: Durch einen groben Fehler in der letzten hochgeladenen Version wird mir im Falle eines World Events euer Spiel und Passwort mitgeteilt. Ich habe schlicht vergessen die entsprechende Funktion, die an sich nur für mich und meine eigenen Chars bestimmt war, vor Release zu entfernen.
Auch wenn ich garantiert nicht eure World Events ausbeuten werde, stellt das trotzdem eine riesen Sicherheitslücke dar, die so nie beabsichtigt war.
Darum sollten diejenigen die sich die Version in den letzten 2-3 Tagen runtergeladen haben auf alle Fälle schnellstmöglich die aktuelle Version runterladen, in der das Problem behoben ist.
Sollte ich Ingame oben genannte Mitteilungen erhalten, schicke ich auch dort nochmal die Aufforderung bitte die schnellstens die aktuelle Version zu verwenden, falls ihr sowas bekommen habt, die aktuelle Version findet sich im Anhang.
Ich kann mich an dieser Stelle nur nochmal entschuldigen, ich hatte nie vor World Events von anderen Leuten auszuhorchen!


Das ganze basiert ursprünglich auf einer Version von agor für D2NT 1.8.
Allerdings weicht sie von dieser mitunter nun sehr stark ab, aber ich wollte den Ursprünglichen Autor wenigstens erwähnt haben.

Ich habe das Log um einige Funktionen erweitert und einige bugs gefixt, sodass jetzt an sich alles recht stabil laufen sollte.
Eine meiner Funktionen überrpüft dabei auch, ob ein Item bereits geloggt ist. Die Auswertung davon habe ich nun verwendet, um auch die üblichen Einträge ins log dahingehend zu verbessern, dass mehrfach Log Einträge von beispielsweise unids drastisch reduziert werden. Die Zeitintervalle die hierbei überprüft werden sind für versierte Leute relativ einfach zu ändern, ich werde hier aber nicht weiter drauf eingehen, schaut euch einfach die NTI_IsLogged() Funktion an.

Features:
- Loggt sämtliche Items die gepickt, dann verkauft oder behalten, aber auch z.B. gegamblete Items in einem xml Itemlog, welches fest gespeichert wird und mit einem Handelsüblichen Browser einsehbar ist
- Überprüfung ob Items bereits im Log enthalten sind innerhalb eines gewissen Zeitrahmens (dies gilt nun auch für das Manager Itemlog, welches sich nun nach dem Rückgabewert meines Itemlogs richtet)
- kleinere Farbanpassungen des normalen Manager logs, sowie Erweiterung um die Anzeige des Fundorts und des Itemlevels
- Bei Bedarf können nun verkaufte Items im Manager Log angezeigt werden sowie auf die XML Log Funktion verzichtet werden
- vermutlich noch weitere die mir gerade nicht einfallen

Die logs werden jeweils für einen Tag angelegt. Ist ein Log sehr voll, können die Laufzeiten durchaus so lang werden, dass es sichtbar wird. Ich selber finde es nicht weiter schlimm, zumal es durch die Tageslogs ohnehin sehr spät auftritt.
Sollte sich jemand mit der Syntax für Dateipointer Operationen in D2NT auskennen, darf er das gerne entsprechend optimieren. ;)

Anmerkungen:
- Merkbare Programmlaufzeiten bei großen Log Files (siehe oben, groß heisst 500 Zeilen aufwärts)
- jeweils ein Logfile für den aktuellen Tag
- nur mit Diablo II auf Englisch getestet, ich kann keine Aussage darüber treffen wie sich das bei einem nicht-englischen D2 verhält

Installation:
Ich habe die modifizierten Scripte in ein Rar-Archiv verpackt, die Ordnerstruktur ist dieselbe wie beim normalen D2NT, ich traue euch also zu, dass ihr das alleine platziert bekommt. Das Archivpasswort lautet "muddy".

Danach findet ihr im Ordner "logs" einen Ordner "CHARNAME". Davon einfach eine Kopie erstellen und nach eurem Char benennen.

Mit dem letzten Update sind ein paar neue globale Variablen eingeführt worden die in der Char Config initialisiert werden müssen.
Dazu bitte das hier hinzufügen:
Code:
NTConfig_UseXMLItemlog = true;    // Log kept and sold items as well in a XML log file
    NTConfig_LogSoldItems = true;    // Adds sold items to the manager's itemlog
    NTConfig_ShowGoldPickups = true;    // Show Pickup message whenever gold is picked
    NTConfig_ShowPotionPickups = true;    // Show Pickup message whenever a potion is picked
Die Funktionen der einzelnen Variablen sollten sich von selbst erklären. :)

Das wars an sich schon. Beim Ausführen sollte nun, beim ersten zu loggenden Item, automatisch ein neues Logfile im Ordner eures Chars erstellt werden.
Darüber werdet ihr durch eine Ausgabe in Kenntnis gesetzt.

Die Logfiles können dann z.B. mit dem Firefox geöffnet und eingesehen werden (IE macht Probleme).

Viel Spaß beim Testen!

Bei Rückfragen oder Fehlern bitte melden. :)

LG
Muddy

Anmerkung: Ich werde hier keine Aktualisierungen mehr einfügen, da mir der Aufwand einzelne Scripts zu isolieren zu hoch ist. Die hier hochgeladene Version ist nicht mehr aktuell, eine aktuelle Version findet sich in meinem [Only registered and activated users can see links. Click Here To Register...].
04/20/2010 23:47 6momo6#2
Eine blöde frage:

was ist der unterschied zwischen deins und dem einen von eon? welches ist denn nun besser :) ?
04/21/2010 06:02 jAmMyX#3
Nette Idee, habs aber wieder weg gemacht, nachdem ich die Dateien kopiert und ersetzt hatte, lief der Bot nicht mehr mit der folgenden Mitteilung. In meiner SOrcess_Charname.ntl fehlt irgendwas von wegen NSCU_Essence. Wenn du weisst, wie man das fixen kann, würd ich lieber dein Skript nutzen
04/21/2010 09:27 Muddy Waters#4
Quote:
Originally Posted by 6momo6 View Post
Eine blöde frage:

was ist der unterschied zwischen deins und dem einen von eon? welches ist denn nun besser :) ?
Da ich das nicht kenne kann ich da leider nichts zu sagen. :(

Quote:
Originally Posted by jAmMyX View Post
Nette Idee, habs aber wieder weg gemacht, nachdem ich die Dateien kopiert und ersetzt hatte, lief der Bot nicht mehr mit der folgenden Mitteilung. In meiner SOrcess_Charname.ntl fehlt irgendwas von wegen NSCU_Essence. Wenn du weisst, wie man das fixen kann, würd ich lieber dein Skript nutzen
Die Fehlerbeschreibung ist leider sehr unspezifisch, die genaue Fehlermeldung und der Kontext in dem sie auftrat wären interessant. Und welche D2NT Version du verwendest. ;)

LG
Muddy
04/21/2010 09:48 jAmMyX#5
Verwende die normale 3.1-Version, also kein Bluebird oder so. Die Fehlermeldung kommt direkt nachdem der Bot ein Game erstellt hat. Poste gleich nochmal die ganze Fehlermeldung, bin grad noch unterwegs.
04/21/2010 10:34 jAmMyX#6
So, dieser Fehler kommt sobald der Bot das Spiel installiert, nachdem ich deine Files ins Verzeichnis kopiert habe:

[Only registered and activated users can see links. Click Here To Register...]

LG
jammy

Edit: Habs selbst gelöst, habe die entsprechende Zeile einfach auskommentiert.
04/21/2010 10:47 jAmMyX#7
Dann aber noch ne Frage, gerade kam die Meldung:

Creating new log file for xyz: 2010-04-21-itemlog.xml

oder sowas in der Art. Aber die Datei finde ich nirgends.
04/21/2010 10:49 Muddy Waters#8
Quote:
Originally Posted by jAmMyX View Post
So, dieser Fehler kommt sobald der Bot das Spiel installiert, nachdem ich deine Files ins Verzeichnis kopiert habe:

[Only registered and activated users can see links. Click Here To Register...]

LG
jammy

Edit: Habs selbst gelöst, habe die entsprechende Zeile einfach auskommentiert.
Auskommentieren löst das Problem aber nicht, das kehrt es höchstens unter den Tisch. :D

Danke für die Infos, habe es angepasst, neue Version ist im Anhang. :)

LG
Muddy
04/21/2010 10:55 Muddy Waters#9
Quote:
Originally Posted by jAmMyX View Post
Dann aber noch ne Frage, gerade kam die Meldung:

Creating new log file for xyz: 2010-04-21-itemlog.xml

oder sowas in der Art. Aber die Datei finde ich nirgends.
Diese Meldung kommt immer dann, wenn kein passendes Logfile für den jeweiligen Tag existiert und somit ein neues angelegt wird.

Das Logfile findest du im ordner "...\logs\<dein charname>\".

Übertragen auf das obige sollte das Logfile also folgenden Pfad haben: "...\logs\xyz\04-21-10_itemlog.xml"

LG
Muddy
04/21/2010 11:01 jAmMyX#10
Quote:
Originally Posted by Muddy_Waters View Post
Übertragen auf das obige sollte das Logfile also folgenden Pfad haben: "...\logs\xyz\04-21-10_itemlog.xml"
hm, also hab den CHARNAME ordner vorhin kopiert und mit dem Namen der Sorc versehen, so wie auch das ..sorceress_CHARNAME.ntl.

Oder muss ich den Profilnamen des Bots nehmen? Weil im Ordner logs habe ich aktuell nur folgendes:

3 Ordner (CHARNAME, loc und den mit dem namen meiner Sorc)

In letztgenannten sind zwei Dateien:
- tooltip.js
- itemlog.xsl

sonst nix. im "normalen" D2NT Itemlogger im D2NT-Manager wurden gerade eine Pul-Rune sowie eine Regenbogenfacette geloggt. Hast du ne Ahnung wieso er das angeblich erstellte File für den heutigen Tag doch nicht erstellt hat? Was mache ich falsch? :/ Sicher dass es mit 3.1 geht?
04/21/2010 11:12 Muddy Waters#11
Quote:
Originally Posted by jAmMyX View Post
hm, also hab den CHARNAME ordner vorhin kopiert und mit dem Namen der Sorc versehen, so wie auch das ..sorceress_CHARNAME.ntl.

Oder muss ich den Profilnamen des Bots nehmen? Weil im Ordner logs habe ich aktuell nur folgendes:

3 Ordner (CHARNAME, loc und den mit dem namen meiner Sorc)

In letztgenannten sind zwei Dateien:
- tooltip.js
- itemlog.xsl

sonst nix. im "normalen" D2NT Itemlogger im D2NT-Manager wurden gerade eine Pul-Rune sowie eine Regenbogenfacette geloggt. Hast du ne Ahnung wieso er das angeblich erstellte File für den heutigen Tag doch nicht erstellt hat? Was mache ich falsch? :/ Sicher dass es mit 3.1 geht?
Wurde die PUL Rune im Manager in orange geloggt, steht dahinter der Fundort und am Ende des Stats Tooltips das Item Level?

Hat der Ordner den exakten Namen deiner Sorc? (also nicht "Sorceress_" davor oder sowas, nur den exakten Namen des Chars)

Achja, und wenn er das tatsächlich nicht erstellt hat, müsste er bei jedem Item versuchen ein neues Logfile zu erstellen mit der dazu üblichen Meldung.
Ist das nicht der Fall, muss das Logfile existieren.

Und ja, ich habs zwar an sich nur mit 3.0 getestet, aber bis auf die Sache mit den Essenzen mit der du anfangs Probleme hattest sollte sich nicht so viel an den Scripten geändert haben.

LG
Muddy
04/21/2010 11:17 jAmMyX#12
Ja, die Rune ist orange geloggt, Fundort ist dabei und das ilvl im Tooltip ebenfalls vorhanden.

Der Ordner heisst genauso wie die Sorc jap. Muss ich den CHARNAME vllt löschen? Oder müssen es nur Großbuchstaben sein im Ordnernamen? Die Meldung über die Logfile-Erstellung erscheint nicht mehr.

Aber das Logfile ist definitiv nicht in dem Ordner mit dem Sorcnamen drin :/
04/21/2010 12:31 Muddy Waters#13
Quote:
Originally Posted by jAmMyX View Post
Ja, die Rune ist orange geloggt, Fundort ist dabei und das ilvl im Tooltip ebenfalls vorhanden.

Der Ordner heisst genauso wie die Sorc jap. Muss ich den CHARNAME vllt löschen? Oder müssen es nur Großbuchstaben sein im Ordnernamen? Die Meldung über die Logfile-Erstellung erscheint nicht mehr.

Aber das Logfile ist definitiv nicht in dem Ordner mit dem Sorcnamen drin :/
Ersteres klingt schonmal gut.

Der CHARNAME Ordner ist egal, in den wird eh nicht geschrieben.
Hier mal ein kurzer Asuzug aus dem Quelltext, in dem man sehr schön sieht, nach welchem Muster Logfiles erstellt werden:
Code:
var currentDate = new Date();
var dateString = currentDate.toLocaleFormat("%m-%d-%y");
var filehandle = FileOpen("logs/"+me.charname+"/"+dateString+"_itemlog.xml", 2);
Interessant ist also nur der Ordner welcher vom Namen her dem Wert der Objektvariablen me.charname entspricht, was nichts anderes ist als der exakte Name deines Chars.
Schau mal ob der Ordnername auch in Punkto Groß- und Kleinschreibung mit deinem Charnamen übereinstimmt, auch wenn das an dieser Stelle an sich nicht das Problem sein sollte.
Ich werde das mal selber mit ner frischen 3.1er Version Testen, mal schauen ob ich da auch derartige Probleme habe, ich vermute aber eher nicht. :)

Achja, ich habe nochmal ein Update hochgeladen. Es stimmte was im Ausgabelayout nicht, sodass das Log einer recht unstrukturierten Wand aus Text entsprach. Also in jedem Fall darauf achten, dass die aktuelle "itemlog.xsl" aus dem CHARNAME Ordner benutzt wird, ansonsten ist das Logfile nicht wirklich brauchbar.

LG
Muddy
04/21/2010 12:38 jAmMyX#14
Hab jetzt mal im Ordner mti dem Charnamen eine .xml mit dem an sich richtigen Namen von heute erstellt und dann wieder gelöscht. Aber das erkennt er auch nicht, sprich normal müsste er dann ja davon ausgehen dass keine für heute angelegt ist und sie erstellen. Passiert aber auch nicht :/
04/21/2010 12:55 Muddy Waters#15
Quote:
Originally Posted by jAmMyX View Post
Hab jetzt mal im Ordner mti dem Charnamen eine .xml mit dem an sich richtigen Namen von heute erstellt und dann wieder gelöscht. Aber das erkennt er auch nicht, sprich normal müsste er dann ja davon ausgehen dass keine für heute angelegt ist und sie erstellen. Passiert aber auch nicht :/
Ich habe es gerade bei mir mit 3.1 getestet, funktionierte problemlos.

Dein Problem erscheint mir immer seltsamer, kannst ja mal ein paar Screenshots eventuell Interessanter Ordner machen und mir per PM schicken, dann müssen wir das hier nicht weiter öffentlich diskutieren.

Was mich bei der Sache sehr wundert:
Die normale Manager Logausgabe ist vom Itemlog abhängig, um dort mehrfach Einträge zu vermeiden. Heisst, es arbeitet mit Rückgabewerten und sollte irgendwas beim schreiben des Logs schief gehen würde dementsprechend auch ein "false" zurückgegeben.
Anders ausgedrückt: Wenn das mein Itemlog nicht erfolgreich schreibt, würde es auch das Log des Managers nicht. Was es bei dir aber tut... :rolleyes:

Lg
Muddy