- 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:
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.
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?
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.