• Herzlich Willkommen!

    Nach der Schließung von inDiablo.de wurden die Inhalte und eure Accounts in dieses Forum konvertiert. Ihr könnt euch hier mit eurem alten Account weiterhin einloggen, müsst euch dafür allerdings über die "Passwort vergessen" Funktion ein neues Passwort setzen lassen.

    Solltet ihr keinen Zugriff mehr auf die mit eurem Account verknüpfte Emailadresse haben, so könnt ihr euch unter Angabe eures Accountnamens, eurer alten Emailadresse sowie eurer gewünschten neuen Emailadresse an einen Administrator wenden.

[D2 technisch] ID-Nummer, Dupescanner & more

Status
Für weitere Antworten geschlossen.

nookiestar

Ex-Staffmember, Champion
Ex-Staffmember
Registriert
15 Januar 2002
Beiträge
5.937
Punkte Reaktionen
0
ID-Nummer, Dupescanner & more

Tag zusammen.

Es gab vor einigen Wochen einen netten Thread auf diabloii.net, in dem einige technische Fragen, die schon seit längerem viele D2-Spieler beschäftigen, von den Leuten, die sich damit ein wenig auskennen, etwas näher beleuchtet wurden. So zum Beispiel:
  • Was sind ID-Nummern?
  • Wie funktioniert der Dupescanner?
  • Welche Items haben alle eine ID?
  • Kann es passieren, dass Items, die gar nicht geduped wurden, gelöscht werden, weil sie zufällig die selbe ID haben?
  • Warum werden die alten Stone of Jordans nicht gelöscht?
  • Warum werden ITH-Items nicht gelöscht?
uvm.

Wer den Thread im Original lesen will, kann dies hier tun. (Update: Der Thread wurde bereits vor geraumer Zeit gelöscht.) Für all jene, die des Englischen vielleicht nicht ganz so mächtig sind, habe ich mich mal hingesetzt und eine Übersetzung angefertigt.

Im ersten Teil des Threads geht es hauptsächlich um ID-Nummern und die Funktionsweise des Dupescanners. Der übersetzte Text sowie die Antworten auf die gestellten Fragen stammen von Ruvanal, einigen von euch vielleicht bekannt als einer der technischen Gurus von D2.

Für den ein oder anderen wird das wohl zu technisch, aber vielleicht interessiert es ja doch ein paar Leute.

-------------------------------------------------------------------------------------

Ich wundere mich immer wieder über die Missverständnisse und Fehlleitungen, die im Zusammenhang mit den sogenannten "ID-Nummern" auftauchen. Um es ein für alle mal zu sagen:

Es gibt keine ID-Nummern!

Diablo 2 speichert die Daten für Objekte im allgemeinen (und die Daten der Chars im speziellen) basierend auf ihrem Grundtyp und den nötigen Zusatzinformationen für ihren genauen Aufbau. Für jene Objekte, die man im Inventar mit sich führen kann, gibt es prinzipiell zwei verschiedene Formen der Datenspeicherung.

Die erste ist eine kompakte Form der Speicherung, die sehr wenige Ressourcen verbraucht, da sie nur einige Bits beansprucht. Sie enthält den Grundtyp des Items sowie einen Zeiger (= "pointer") zu jener Datei, in der die restlichen Eigenschaften definiert sind.

Ein passendes Beispiel hierfür ist die GUL-Rune. In den abgespeicherten Daten wird implizit festgelegt, dass ihre Eigenschaften in einer externen Datei (i.d.F. in der "misc.txt") zu finden sind, und das Spiel wird anschließend von dort seine Informationen beziehen (unter Umständen mit ein paar Querverweisen zu anderen Dateien). Das Ganze ist deshalb so sinnvoll, weil es nur _eine_ mögliche Konfiguration (i.d.F. der GUL-Rune) gibt und somit viel Speicherplatz und Performance gespart wird.

Dieser Technik gegenüber steht eine nicht-kompakte Form der Speicherung. Die Eigenschaften der betreffenden Gegenstände variieren also von Item zu Item.

Ein passendes Beispiel hierfür ist ein Dolch. Der Dolch könnte 'in rissigem Zustand', 'normal', 'gut', magisch, set, rare, unique, gecrafted, mit oder ohne Sockel etc sein. In Version 1.00 erstellte Diablo 2, um die Speicherbelastung zu minimieren, zwei zufällige Quellenwerte (bestehend aus jeweils 4 Bytes) in der Itemdatendatei. Diese beiden Werte wurden dann von Diablo 2 in einer vorbestimmten Weise ausgelesen, um die eigentlichen Eigenschaften des Items zu bestimmen.

Wenn der Dolch also z.B. magisch war, enthielten die Quellenwerte Angaben, ob das Item einen Präfix, einen Suffix oder sogar beides hatte und welche dieser Affixe aus dem Affix-Pool das waren.

Jedes Mal wenn der Char das Item hielt, wurden also die Werte des Items neu ausgelesen, und mit Hilfe der Quellenwerte reproduziert. Ein Problem dieser Technik war, dass wenn die Reihenfolge der Affixe im Affixpool oder die erlaubte Range der Affix-Variablen geändert wurden, die meisten der Items im Spiel ihre Eigenschaften willkürlich veränderten (das passierte seinerzeit einige Male bei dem Aufspielen von serverseitigen Patches). Außerdem wurde es dadurch unmöglich, einige der Bugs im Spiel zu fixen (wie zum Beispiel den "n-1"-Bug, der die Reichweite der Itemwerte pre-LoD auf ihren Maximalwert minus 1 beschränkte).

Mit der Einführung von LoD wurde die Methode der Datenspeicherung von Items grundlegend überarbeitet. Dies geschah unter anderem dadurch, dass die Speichermenge pro Item erhöht wurde. Die zwei Quellenwerte werden nach wie vor bei jedem Item generiert. Sie werden auch nach wie vor dazu benutzt, einige der Eigenschaften des Items zu bestimmen, aber lange nicht mehr in dem Ausmaße wie vor dem Release des Expansion-Sets.

Die Items, die diese Quellenwerte haben, sind ausnahmslos alle Waffen und Rüstungen, ohne Berücksichtigung, ob das Item "magisch" ist oder nicht. Also auch weiße Items besitzen diese Quellenwerte, zum Beispiel um den genauen AC-Wert einer Rüstung, der ja variieren kann, festzulegen. Es gibt auch diverse "miscellanous" Items (also all jene Gegenstände, die nicht zu Rüstungen oder Waffen gehören) mit Quellenwerten, vor allem jene, die ebenfalls über eine variable Range von Eigenschaften verfügen (und zum Beispiel eine Chance haben, magisch zu werden).

Diese Quellenwerte sind tatsächlich das, was viele als "ID-Nummern" bezeichnen. Da beide Quellenwerte zusammengenommen die Riesenanzahl von 18,446,744,073,709,551,615 (~18 Trillionen) verschiedenen Werten annehmen können, geht die Chance, zwei verschiedene Dolche mit exakt der selben ID-Nummer zu finden, gegen Null. Wenn sie beide Unique sind, wird das ganze sogar noch viel unwahrscheinlicher.

Als die ersten Dupewellen vor der Veröffentlichung des Expansion-Sets auftraten, gab es zu diesem Thema eine Diskussion in der Lurker Lounge (einige der Programmierer von D2 waren damals regelmäßige Poster in der LL). Ein Ergebnis der damaligen Debatte war, dass die Quellenwerte als eine "Art" ID-Nummer betrachtet werden können - und zwar aufgrund der Quasi-Unmöglichkeit des Auftretens von exakt der selben Nummer auf zwei verschiedenen Uniques .

Frage: Bleiben die Nummern jenen Items zugeordnet, die nie vom Boden aufgehoben werden und mit dem Ende des Spiels verschwinden? Oder werden sie neu vergeben?

Antwort: Die Quellenwerte des Items bleiben bestehen solange das Item existiert. Es gibt keine "Wiedervergabe" von Nummern, da jedes Item völlig zufällig und unabhängig seine Quellenwerte erhält.

Frage: Wenn man sich überlegt, wie viele Items es eigentlich gibt im Vergleich zu dem kleinen Teil jener Items, die tatsächlich aufgehoben werden ... das muss ja eine riesige Anzahl sein. Wenn man eine Stunde lang MF-Runs macht, produziert man doch mindestens 200 Items ... wenn man davon ausgeht, dass man einen Mephirun pro Minute macht und dabei jedes mal 4 Items droppen ... und jedes Mal eine neue ID...

Antwort: In Wirklichkeit sind es wohl viel mehr als 200 Quellenwerte. Die benötigte Rechenzeit zur Generierung der beiden Quellenwerte ist außerdem eher zu vernachlässigen, wenn man die geringe Anzahl der generierten Items mal mit den anderen Belastungen für den Prozessor vergleicht (D2 erstellt ständig Zufallszahlen, zum Beispiel um Monster zu generieren, Trefferchancen zu errechnen, Schadensberechnungen durchzuführen etc.).

Wenn ihr die benötigte Zeit der Itemgenerierung mal beobachten wollt, erstellt ein SP-Game und geht zu Elrix (NM oder Hell), um sein Angebot zu sehen. Aufgrund eines Fehlers in der armor.txt wird er im Durchschnitt ungefähr 8200 klassenspezifische Items für den Verkauf generieren (allerdings passen nur ein paar von ihnen ins Fenster). Das ist mit weitem Abstand die Situation mit den meisten Itemgenerierungen auf einmal im ganzen Spiel.

Frage: Na und? Der Server muss doch ständig jede ID checken um herauszufinden, ob jemand das Item im Inventar oder in der Truhe hat, und ob es das Item zweimal gibt. Das klingt nach einer verdammt großen Belastung.

Antwort: Es wäre eine verdammt große Belastung, wenn der Server alle IDs gegeneinander checken müsste. Um das zu tun, müsste der Code _jedes_ Item mit jedem anderen Item im Spiel vergleichen. Das würde die Anzahl der durchzuführenden Checks auf (n-1)^2 erhöhen.

Wenn man sich überlegt, dass (100-1)^2 = 9801 und (1000-1)^1 = 998.001 sind, wird man sehr schnell feststellen, dass es praktisch unmöglich ist, _alle_ Items im Spiel zu vergleichen (oder auch nur zum Beispiel alle Waffen).

Wenn man diese Checks auf das wirkliche Gameplay (Joinen von Games/Quitten) und wenige Itemtypen reduziert, kann man die Anzahl so niedrig halten, dass sie die Performance der Server nicht mehr allzu negativ beeinflusst. Ich kann mir vorstellen, dass Blizzard nur alle Unique Waffen und Rüstungen jeweils im selben Spiel checken lässt, da dies die Anzahl der Checks normalerweise in einem vertretbarem Rahmen belassen würde.

Frage: Haben weiße und graue Items IDs? Wie ist das mit Runenwörtern und "ITH"-Items?

Antwort: Weiße und graue Items sowie Runenwörter haben ebenfalls Quellenwerte, auch ITH-Items. Wenn man sich die Itemdaten für ITHs jedoch ansieht, wird man feststellen, dass sie als weiße/graue Items erscheinen. Es würde für den Code und den Prozessor daher eine große Belastung darstellen, wenn man sie herausfischen wollte - sowohl schwer zu programmieren als auch zeitaufwändig und mit großen Belastungen auf die CPU verbunden (--> Lag).

Frage: Wie groß ist die Chance, dass zwei Items genau die gleiche ID bekommen, ohne geduped worden zu sein?

Antwort: So groß, wie dreimal hintereinander einen 6er im Lotto zu haben.

Frage: Wie genau funktioniert der Dupescanner?

Antwort: Ich habe mich mit der genauen Funktionsweise des Scanners nicht beschäftigt (interessierte mich nie wirklich). Ausgehend von dem was ich gehört habe, vermute ich, dass beim Betreten/Verlassen des Spiels (eher beim Verlassen) eine Übersicht über die Quellenwerte der Unique Waffen und Rüstungen erstellt wird. Wenn nun ein zweites Item mit exakt dem selben Quellenwert auftaucht, wird dieses Item beim Verlassen nicht gespeichert. Es scheint übrigens so, dass diese Checks nicht für "miscellaneous" (= Verschiedenes) Items durchgeführt werden. (Ringe gehören zu misc Items -> SoJs)

Frage: Also könnten all die gedupeten Sojs gelöscht werden, wenn man die Checks auf misc Items erweitert? Autsch!

Antwort: Die Stone of Jordans wurden schon einmal bei einem der ersten Dupescans vor Release des Expansion Sets gelöscht. Anscheinend seitdem nicht mehr. Das ist wahrscheinlich auf die große CPU-Belastung zurückzuführen, die entstehen würde (Erstellen der Listen, Gegenchecken der Listen --> Lag beim Verlassen des Spiels von einem anderen Spieler). Vergessen wir nicht, dass jeder der Server ungefähr 100 Games gleichzeitig handlen kann. Ein ausgeprägter Lag in _einem_ Spiel würde die Geschwindigkeit aller anderen Games auf dem Server ebenfalls einschränken, also nicht nur das eigene Spiel beeinflussen.

Frage: Sehr interessant. Also wenn jedes Item seine Quellenwerte erhält, dann ist es ja theoretisch möglich, dass auch nicht-gedupete Items gelöscht werden (weil sie die selbe ID haben). Scheint, als ob das System nicht ganz perfekt ist...

Antwort: Nun, mal sollte sich dabei vor Augen halten, wie hoch die tatsächliche Chance ist, dass zwei identische Items generiert werden und im selben Game zu finden sind. Zunächst mal braucht man z.B. zwei Kettenrüstungen, die erstens unique sind und, zweitens, genau die selben Quellenwerte haben. Diese Quellenwerte müssten bei einer Speichergröße von 64 Bit übereinstimmen (Wahrscheinlichkeit: 1 zu 18.446.744.073.709.551.616). Zum Vergleich: Das wären 3.074.457.345 Kombinationen für jeden Mensch auf der Erde. Ich bezweifle, dass es Spieler gibt, die 3 Milliarden Items von exakt dem selben Itemtyp im Spiel gefunden haben (schon gar nicht als Unique Version), um überhaupt die entfernte Chance zu sehen, dass es je zwei identische Quellenwerte gibt.

---------------------------------------------------------------------------------------

Der zweite Teil des Threads handelt von der Erstellung von Zufallszahlen. Ihr findet ihn hier.

Edit (8.April 2003): Korrektur eines Übersetzungsfehlers (danke Venthara) sowie einiger anderer Kleinigkeiten.

Edit (13.Mai 2004): Korrektur eines numerischen Übersetzungsfehlers (danke galaxyranger).

Edit (8.September 2005): Kleinere Überarbeitungen.

Edit (16.Februar 2006): Erneut kleinere Überarbeitungen.
 
:top:
aber ich denke mit der isenharts kiste bringt das jeder hin. ich meine die dropp rate für gleiche "ID" nummer :clown:
 
:top: feine sache. und n lob @ nooki für die abeit.

@ holy das mit den isenharts könnte sogar hinkommen :) vielleicht nicht nur 2 gleiche sondern n ganzer haufen mehr:)
 
man man ich sollte lotto spielen, bei meinem glück auf isenharts, müsste ich ja 3 6ser hintereinander haben :D
ist das leben nicht schön, blos weil ich d2 spiele werde ich millionär :clown:
 
mit statistik kann man VIIIIIIIIIIIIIIIIIIIIEEEEEEEEEEEEEL quatsch Beweisen ^^


merke: statistik nur zum betrachten benutzen, nicht zum lieblings-standpunkt erklären missbrauchen ^^
 
>>>aber ich denke mit der isenharts kiste bringt das jeder hin.
>>>ich meine die dropp rate für gleiche "ID" nummer

Och, wenn man mal davon ausgeht, dass jeder der 20.000 Spieler auf dem Europe Realm 1x pro Sekunde ne Isenharts Kiste findet, würde es immer noch über 29 Millionen Jahre dauern, bis alle theoretischen Kombinationen ausgeschöpft sind, und zwangsläufig ein Quellenwert entstünde, der schonmal da war.:D

Geschweige denn im selben Spiel auftaucht.^^

cu
 
Ich denke es dürfte auch vom Gameplay selbst sein, dass eine "ID" niemals doppelt in einem Game erstellt wird, d.h. es wird überprüft ob die "ID" schonmal generiert wurde und bei zufälliger Übereinstimmung eine neue erstellt wird. Da es sich nur in einem minimalen Bit-bereich bewegt, dürfte das Abfangen einer doppelten "ID" im selben Spiel ohne Probleme laufen.
...Theoretisch... :rolleyes: :D
 
falsch! es wird zufällig erstellt, wenn es jedes mal überprüfen müsste ob die "ID" schon vorhanden ist wenn ein item dropt, egal welches, dann hättest du bei jedem dropp ein fettes LAG.
 
Neee, wird nicht nochmal überprüft.

Statistisch gesehen ist die Chance zwei identische Quellenwerte in einem Spiel zu erstellen, Null.

Wozu dann bei jeder Item-Generierung den Aufwand des Abgleichs mit allen anderen bisher erstellten IDs betreiben? Würde stark an der Performance nagen, und weniger als nichts bringen.

Dupes fängt man dadurch ja auch nicht.

Uniques können ebenfalls nicht zweimal im selben Game droppen, dafür existiert ein Check.

Edit: Oh, blau ich bin. Und das ohne einen Tropfen Alkohol.

cu
 
nookiestar schrieb:
Och, wenn man mal davon ausgeht, dass jeder der 20.000 Spieler auf dem Europe Realm 1x pro Sekunde ne Isenharts Kiste findet, würde es immer noch über 29 Millionen Jahre dauern, bis alle theoretischen Kombinationen ausgeschöpft sind, und zwangsläufig ein Quellenwert entstünde, der schonmal da war.:D

Geschweige denn im selben Spiel auftaucht.^^
aber wies der zufall so will, muss es eben nicht so lange dauern ... ich gebe mal das _geburtstagsproblem_ als beispiel ;)


>Edit: Oh, blau ich bin. Und das ohne einen Tropfen Alkohol.

heute ist halt nikolaus und da gibts auch kleine geschenke - GRATS :keks:
 
Vielleicht kann man das geschickt programmieren und nur so lange checken, wie der Spieler sowieso Lag hat. :hammer:


Bin gespannt auf den Zusatz mit den Zufallszahlen, denn der grosse Wertebereich ist nur so gut wie die Erzeugung dieser. Es sollte den Hobbykryptologen unter euch bekannt sein daß die Erzeugung von guten Zufallszahlen enorm wichtig ist, da sich sonst der theoretische Wertebereich drastisch reduzieren kann.
 
zufallszahlen sind vorallem im randberreich, sprich nach oben und nach unten sehr interessant :D
viel vergnügen beim coden, ich habs mal in C++ probiert, dass alle zahlen so ziemlich zufällig kommen. aber am schluss kommen immer die im randbereich zu kurz, ist wirklich krass da was gutes hinzubekommen. hut ab vor blizz wenn die das geschaft haben. :keks:
 
the_holyman schrieb:
zufallszahlen sind vorallem im randberreich, sprich nach oben und nach unten sehr interessant :D
viel vergnügen beim coden, ich habs mal in C++ probiert, dass alle zahlen so ziemlich zufällig kommen. aber am schluss kommen immer die im randbereich zu kurz, ist wirklich krass da was gutes hinzubekommen. hut ab vor blizz wenn die das geschaft haben. :keks:

Es kommt drauf an. Bei C++ gibts ja die lustie Funktin Random, die das ganze normal ja automatisch macht. Wer sagt aber, dass die so 100% "zufällig" in einem gewissen Wertebereich Zahlen zurückgiebt? Microsoft? :rolleyes:
Einmal das Prinzip und die Funktionsweise dieser Random-Funktion erkannt, kann man durch aus auch selbst eine erstellen (Blizz...) und in dieser die Zufallsgeneration etwas umstrukturieren.
Evtl. wars auch, einfach gesagt nur Pech, dass der Randbereich nicht so hervor trat. Ist letztlich ja nur ein "Zufall", welche Zahlen zurückgegeben werden. :)
 
klar gibts die funktion, aber ich wollte selber ne funktion schreiben, was gar nicht soooooooo einfach ist. glaubs mit und was ist den zufall :D berechnet wirds eh, also nix mit zufall :D wenn ich blizz wär würd ich einfach durchnummerieren, gibt die gleiche anzahl, wenn du fertig bist fängst du wieder forne an. :D
dürfte wohl einfacher sein :D und die chance auf die gleiche zahl beim gleichen item ist dann imho so ziemlich gleich
 
>>>aber wies der zufall so will, muss es eben nicht so lange
>>>dauern ... ich gebe mal das _geburtstagsproblem_ als
>>>beispiel ;)

Und wies der Zufall so will, ist der zweite Teil nun fertig.:)

Mehr zum B-Day Paradoxon gibts findet ihr auch dort.

cu
 
Gute Sache :top:

klitzekleiner Schönheitsfehler:
Im Englischen:
Millionen
Billionen
Trillionen
Quadrillionen

Im Deutschen
Millionen
Milliarden
Billionen
Billiarden

warum ? ka.

@Statistik:
Praktisch gesehen ist die Chance Null. Rein theoretisch wäre es möglich. Sollte man der Grösste Pechvogel/Glückspilz im Universum sein und ein Item bekommen, dass eine schon vorhandene ID besitzt, so fallen mir spontan 10 Faktoren ein, die das ganze wieder zu Irrelevanz reduzieren:
1. Ist die ID bestimmt nich auf dem selben Item
2. Ist das Item bestimmt nicht vom gleichen Typ
3. Wirst man wahrscheinlich nie mit dem anderen Item in einem Game sein
4. könnte es auch sein, dass der verlust garnicht auffällt.
5. ist die Wahrscheinlich nicht gross, dass das evtl dann gelöschte Item einen Wert hat, dessen Verlust der nutzer zu beklagen hätte.
6. wird der Ex-Besitzer wohl nichts von der hier diskutierten ID-Lücke wissen, und es für einen, durch einen Hack erschaffenen, Dupe halten.
7. Sollte er es doch wissen, wäre seine einzige Möglichkeit, beim Support zu betteln. Beweisen kann er es wohl nicht.
8. Sollte er es beweisen können, hat er wohl den Server gehackt und verliert wegen Verstoßes gegen die "unterklickten" Benutzungbestimmungen auch noch Accounts und CD-Key.
9. Sollte er es beweisen können ohne den Server gehackt zu haben, dann macht der Support 3 Klicks und die Sache ist gegessen.
10. Sollte der Support nichts tun, fehlt dem Ex-Besitzer auch noch jegliche Rechtsgrundlage um sein Item einzuklagen, schliesslich ist eh alles Eigentum von Blizzard.
 
Interessante Darstellung der Dinge. Bisschen hohe Zahlen, mit denen da herumgespielt wird, liegt irgendwie jenseits aller Vorstellungskraft ...

@nookistar Zwei gleiche Unis können sehrwohl im gleichen Spiel droppen, sogar vom selben Monster. :D

Tandandor
 
>>>@nookistar Zwei gleiche Unis können sehrwohl im gleichen
>>>Spiel droppen, sogar vom selben Monster. :D

Nein, definitiv nicht.:hy:

cu
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben