• 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.

[1.09] Fragen an die Experten zu TreasureClasses und mf

Status
Für weitere Antworten geschlossen.

Tub

Well-known member
Ex-Staffmember
Registriert
2 Juli 2001
Beiträge
9.509
Punkte Reaktionen
3
Fragen an die Experten zu TreasureClasses und mf

Hi

ich spiel gerade ein bisschen mit den drop-berechnungen rum und versuche derzeit die TreasureClasses zu reproduzieren.

Meine Formel-Quelle ist hauptsächlich dieser Post von Jarulf:
http://www.d2mods.com//treasureclassex.php

Nun werden ja von einigen ItemTypes automatisch TreasureClasses generiert - nämlich bow,weap,mele,armo und abow


Mir sagt mein Programm folgendes:

Code:
Loading ItemTypes.txt..
Loading TreasureClassEx.txt..
Adding generated TreasureClasses..
Loading Weapons.txt..
Loading Armor.txt..
Loading Misc.txt..
Inserting items into generated TreasureClasses..
Couldn't find TreasureClass "weap0" to add item "decoy dagger" of qlvl 0
Couldn't find TreasureClass "weap0" to add item "Gidbinn" of qlvl 0
Couldn't find TreasureClass "weap0" to add item "Wirt's Leg" of qlvl 0
Couldn't find TreasureClass "weap0" to add item "Horadric Malus" of qlvl 0
Couldn't find TreasureClass "weap0" to add item "Hellforge Hammer" of qlvl 0
Couldn't find TreasureClass "weap0" to add item "Horadric Staff" of qlvl 0
Couldn't find TreasureClass "weap0" to add item "Staff of the Kings" of qlvl 0
Couldn't find TreasureClass "weap0" to add item "KhalimFlail" of qlvl 0
Couldn't find TreasureClass "weap0" to add item "SuperKhalimFlail" of qlvl 0

was mach ich mit denen ? ignorieren ? weap1 ?
Da die ja nur als besondere quest-items droppen können vermute ich: Items mit qlvl = 0 werden nicht in die automatisch generierten TCs eingetragen ?


Nächste Frage:

Einige TCs haben "prob"-Werte angegeben ohne Itemtyp. (z.B. "Act 1 (N) Cpot B")
Werden die prob-Werte ignoriert (als stände dort nichts) oder wird dann einfach ein nodrop erzeugt ?
Ich gehe stark vom ersten aus, aber sicher ist sicher :)


Und gleich noch eine, drop von Meppl Hell:

Code:
                Chance  0.1451: TreasureClass "Runes 1"
                 Chance  0.0871: Dropping item "r01"
                 Chance  0.0580: Dropping item "r02"
Stimmen die soweit ? Habe leider keinen Drop-calc auf dem notebook, und der Rechner mit Drop-calc steht 90 kilometer entfernt und ist heute morgen abgestürzt ;)


Weitere Fragen folgen garantiert, ich hab mich mit den Berechnungen "wann unique/set/rare/magic/..." noch nicht beschäftigt ;)


Danke schonmal!

Mfg
Tub
 
AFAIK werden die Quest Items einfach ignoriert, also ist deine Vermutung korrekt. Ich kann's gleich auch genauer testen - bnet ist ja nicht ATM :D


>Werden die prob-Werte ignoriert (als stände dort nichts) oder wird dann einfach ein nodrop erzeugt ?
>Ich gehe stark vom ersten aus, aber sicher ist sicher :)

Nein, diese werden nicht ignoriert. Sie verhalten sich genauso wie normale TCs, d.h. sie können vom Drop-Mechanismus ganz normal ausgewählt werden und es wird einfach kein Item gedropt. Das ganze verhält sich auch nicht wie der normale NoDrop, welcher ja mit steigender Spielerzahl kleiner wird.


/edit: Mein selbstgeschriebener Calc sagt: Mephi (Hell) [1 Spieler] Chance auf El Rune: 0.006078982514064801
 
Danke schonmal :)

Was die Farbe angeht muss ich das ganze nochmal genauer durchlesen, scheint etwas komplizierter zu sein mit den veränderten chancen und Items die nur magic / weiss oder so werden können.

Gehe ich recht in der Annahme:

- erst wird berechnet ob's unique, set, rare, magic, superior, normal, low quality wird
- DANACH wird geprüft ob's überhaupt so werden darf und evtl. angepasst

? Oder hab ich da was falsch mitgekriegt?


Edit: MIST, wer von uns hat jetzt den Formelfehler ? :(
meiner sagt konsequent:
Chance: 0.0871 code: r01 name: "El Rune"
dabei wird allerdings nur EIN drop aus der TC genommen, nicht 6. Könnte es daran liegen ?
Hier mal der komplette weg durch die TCs zum vergleichen:
Code:
Chance  3.7500: TreasureClass "Act 4 (H) Good"
 Chance  0.4038: TreasureClass "Runes 16"
  Chance  0.4038: TreasureClass "Runes 15"
   Chance  0.4038: TreasureClass "Runes 14"
    Chance  0.4037: TreasureClass "Runes 13"
     Chance  0.4035: TreasureClass "Runes 12"
      Chance  0.4032: TreasureClass "Runes 11"
       Chance  0.4025: TreasureClass "Runes 10"
        Chance  0.4011: TreasureClass "Runes 9"
         Chance  0.3983: TreasureClass "Runes 8"
          Chance  0.3929: TreasureClass "Runes 7"
           Chance  0.3822: TreasureClass "Runes 6"
            Chance  0.3621: TreasureClass "Runes 5"
             Chance  0.3292: TreasureClass "Runes 4"
              Chance  0.2822: TreasureClass "Runes 3"
               Chance  0.2257: TreasureClass "Runes 2"
                Chance  0.1451: TreasureClass "Runes 1"
                 Chance  0.0871: Dropping item r01 "El Rune"



Mfg
Tub
 
>>>Edit: MIST, wer von uns hat jetzt den Formelfehler ? :(

Der Calc meines Vertrauens spuckt ebenfalls das Ergebnis von black_spy aus ... bei diesem hier erhält man allerdings deins.^^

Keine Ahnung warum, muss ich nochmal genauer schauen.

>>>- erst wird berechnet ob's unique, set, rare, magic, superior,
>>>normal, low quality wird
>>>- DANACH wird geprüft ob's überhaupt so werden darf und
>>>evtl. angepasst

Welchen Check meinst du? Gibt ja mehrere ...

cu
 
>Chance: 0.0871 code: r01 name: "El Rune"
>dabei wird allerdings nur EIN drop aus der TC genommen, nicht 6. Könnte es daran liegen ?

Bei einem Pick stimmts, da hab ich auch 8.70...E-4 stehen; hab das am Anfang nicht bedacht. Ausserdem rechnet mein Calc noch mit 7 Picks, da er die Daten generisch aus den MPQs ausliest (*notier*: Update machen).


>- erst wird berechnet ob's unique, set, rare, magic, superior, normal, low quality wird
>- DANACH wird geprüft ob's überhaupt so werden darf und evtl. angepasst

Jup. low quality wird nur nicht explizit gerpüft.

Für diese Berechnungen sind einige Faktoren wichtig: itemratio.txt (Basischancen der Monster), treasureclassex.txt (individuelle Erhöhungen der Chancen nach TC), mlvl und qlvl


/edit:
@nookie: die Differenz kommt daher, dass Thott's Calc die Picks nicht berechnet, so wie Tub, während meiner und Hammermans diese bereits miteinberechnet haben. [1 - (1 - p)^7 bei Meppel]

@Tub: Darf ich fragen was für eine DS du zur Darstellung der TCs verwendest?
 
>>>Für diese Berechnungen sind einige Faktoren wichtig:
>>>itemratio.txt (Basischancen der Monster), treasureclassex.txt
>>> (individuelle Erhöhungen der Chancen nach TC), mlvl und qlvl

Gibt noch ein paar zusätzliche "Hürden".

Mir fallen spontan der "Unique-Item-bereits-gedroppt-im-Game?"-Check sowie der Check, ob überhaupt ein entsprechendes Set-/Unique-Item existiert, ein.

>>>@nookie: die Differenz kommt daher, dass Thott's Calc die
>>>Picks nicht berechnet, so wie Tub, während meiner und
>>>Hammermans diese bereits miteinberechnet haben. [1 - (1 -
>>>p)^7 bei Meppel]

Stimmt.:)

cu
 
Alles klar, dann ist's bis jetzt doch richtig *schweissabwisch*

A propos picks: sicher dass die picks bei 6 gekappt werden ? Oder werden 8 picks ausgewürfelt, aber maximal 6 items wirklich gedroppt ? (nur falls dir langweilig ist ;))

> Für diese Berechnungen sind einige Faktoren wichtig:
> itemratio.txt (Basischancen der Monster), treasureclassex.txt
> (individuelle Erhöhungen der Chancen nach TC), mlvl und qlvl

jau, soweit habe ich jarulf noch folgen können. Nur die checks was jetzt unique werden kann und was nicht sehen etwas komplexer aus. Aber das wird schon noch.

Btw: jarulf sagt:
Chance= Value - (mlvl-qlvl)/divisor
itemratio.txt sagt:
Ratio - (Monster Level / Ratio Divisor)

was nun? Wird das qlvl abgezogen oder nicht ?

jarulf spricht in seinem post auch nur von der einen Zeile in der itemratio.txt, da sind aber noch 3 andere aktive. Wofür sind die da ?


@nookie: ja, das fällt aber in meine zweite Zeile:
>- DANACH wird geprüft ob's überhaupt so werden darf und evtl. angepasst

erstmal die Formel für die Farbe hinkriegen, eins nach dem anderen ;)


>> Tub: Darf ich fragen was für eine DS du zur Darstellung der TCs verwendest?
Fragen darfst du alles, vorausgesetzt du verrätst mir was du mit DS meinst. Ne Asn-Falle wird's nicht sein, und sonst hab ich die Abkürzung noch nie gehört ;)


Mfg
Tub
 
>>>>Für diese Berechnungen sind einige Faktoren wichtig:
>>>>itemratio.txt (Basischancen der Monster), treasureclassex.txt
>>>> (individuelle Erhöhungen der Chancen nach TC), mlvl und qlvl
>Gibt noch ein paar zusätzliche "Hürden".
>Mir fallen spontan der >"Unique-Item-bereits-gedroppt-im-Game?"-Check sowie der Check,
>ob überhaupt ein entsprechendes Set-/Unique-Item existiert, ein.

Diese werden erst geprüft, wenn über die Qualität entschieden wurde. Ich denke, dass Tub dies mit >>DANACH wird geprüft ob's überhaupt so werden darf und evtl. angepasst<< meinte. Wenn ein Unique Gegenstand aus irgendwelchen Gründen (die du ja teilweise schon genannt hast) nicht generiert werden kann, dann wird daraus ein Rare erzeugt; bei Sets analog ein Magic.
 
>was nun? Wird das qlvl abgezogen oder nicht ?

AFAIK sind das noch alte Einträge und es wird tatsächlich die von Jarulf angegebene Formel verwendet.


>A propos picks: sicher dass die picks bei 6 gekappt werden ?
>Oder werden 8 picks ausgewürfelt, aber maximal 6 items wirklich gedroppt ?

Ich bin mir bei dem Cap von 6 Gegenständen sicher (In meiner Mod-Version von D2 rennen alle Monster mit 10 oder -10 Picks rum und droppen alle immer nur 6 Gegenstände). IMHO läuft das ganze etwa so ab:
Code:
for (int i = 0; (i < picks) && (i < 6); i++) {
	CreateItem();
}
8 Gegenstände zu generieren und dann erst entscheiden, ob und wieviele droppen wäre Ressourcenverschwendung.


>Jarulf spricht in seinem post auch nur von der einen Zeile in der itemratio.txt,
>da sind aber noch 3 andere aktive. Wofür sind die da ?

Aus der itemratio.txt sind alle Zeilen wichtig ;)
Du musst dir nur die richtige anhand deines Gegenstandes raussuchen:
  • Version steht für LoD (= 1) oder Classic (= 0)
  • Bei klassen-spezifischen Gegenständen muss Class Specific = 1 sein
  • Uber steht für Elite
Dann nimmst du dir die entsprechenden Einträge und berechnest die erste Chance, die du dann später noch weiter modifizieren musst.

Aber verwende nicht die von Jarulf angegebene Formel fürs Spieler MF, die nämlich falsch. Es müsste diese hier sein:
Code:
uf = 100 + [250*(MF-100)/(MF+150))]
sf = 100 + [500*(MF-100)/(MF+400))]
rf = 100 + [600*(MF-100)/(MF+500))]
mf = MF


>>> Tub: Darf ich fragen was für eine DS du zur Darstellung der TCs verwendest?
>Fragen darfst du alles, vorausgesetzt du verrätst mir was du mit DS meinst.
>Ne Asn-Falle wird's nicht sein, und sonst hab ich die Abkürzung noch nie gehört ;)

DS steht für Datenstruktur. Ich hab die TCs in einem gerichteten Graphen gespeichert, so ist es ganz einfach die TCs abzusuchen, es spart Platz und es ist schnell.



/edit:
:wand: Das sollte eigentlich oben rein editiert werden :wand:
 
>>A propos picks: sicher dass die picks bei 6 gekappt werden ?
>>Oder werden 8 picks ausgewürfelt, aber maximal 6 items wirklich gedroppt ?
>[....]
>8 Gegenstände zu generieren und dann erst entscheiden, ob und wieviele droppen wäre Ressourcenverschwendung.
Ich bin auch nicht von absichtlicher Planung, sondern von einem "feature" ausgegangen ;) Bemerken würde man das nur wenn durchschnittlich mehr Gegenstände droppen als der nodrop-Wert vermuten liesse.

>[*]Uber steht für Elite
Also alle Elite-items ? Erkennbar an "ubercode == code" in armor/weapon.txt ?

>Aber verwende nicht die von Jarulf angegebene Formel fürs Spieler MF, die nämlich falsch. Es müsste diese hier sein:
thx

>DS steht für Datenstruktur. Ich hab die TCs in einem gerichteten Graphen gespeichert, so ist es ganz einfach die TCs abzusuchen, es spart Platz und es ist schnell.
hmm.. dann wirst du mich jetzt auslachen :D

Code:
class TreasureClass
{
 public:
	TreasureClass();
	void fillValues(char *text);
	TreasureClass *findTreasureClass(char *code);
	void SimulateDrops(float chance, int level, bool verbose);
	TreasureClass *next;
	char code[32];
	int picks;
	int unique, set, rare, magic;
	int nodrop;
	char linkname[MAX_TC_CONTENT][32];
	char linktype[MAX_TC_CONTENT]; // 1 = item, 2 = tc
	int prob[MAX_TC_CONTENT];
	TreasureClass *subtc[MAX_TC_CONTENT];
	Item *item[MAX_TC_CONTENT];
};
Im Moment spiele ich nur mit den Formeln rum etc, sollte es später Geschwindigkeitsprobleme geben kann ich ja immer noch rumbasteln.


>:wand: Das sollte eigentlich oben rein editiert werden :wand:
mach doch nix :)


Mfg
Tub
 
>Ich bin auch nicht von absichtlicher Planung,
>sondern von einem "feature" ausgegangen ;)
>Bemerken würde man das nur wenn durchschnittlich mehr
>Gegenstände droppen als der nodrop-Wert vermuten liesse.

Da müsste man ja viele Messreihen machen.


>>[*]Uber steht für Elite
>Also alle Elite-items ? Erkennbar an "ubercode == code" in armor/weapon.txt ?

ultracode == code :irre:
Die Logik von Blizzard ist manchmal echt beeindruckend.


>hmm.. dann wirst du mich jetzt auslachen :D
[snip]
>Im Moment spiele ich nur mit den Formeln rum etc, sollte es später
>Geschwindigkeitsprobleme geben kann ich ja immer noch rumbasteln.

So hat meins auch angefangen; aber in Java und nicht in C - das Berechnen der Dropchancen hat dann 30+ min gedauert auf meinen Celeron 650 (und das mal 8^^) und mein P4 hats auch nur auf ~15 min gebracht.
 
>>Ich bin auch nicht von absichtlicher Planung,
>>sondern von einem "feature" ausgegangen ;)
>>Bemerken würde man das nur wenn durchschnittlich mehr
>>Gegenstände droppen als der nodrop-Wert vermuten liesse.
>Da müsste man ja viele Messreihen machen.

nodrop = 50%, picks = 12
im schnitt 3 drops -> cap
verhältnismässig oft 6 drops -> bug

>>>[*]Uber steht für Elite
>>Also alle Elite-items ? Erkennbar an "ubercode == code" in armor/weapon.txt ?
>ultracode == code :irre:
>Die Logik von Blizzard ist manchmal echt beeindruckend.

Logik von Blizzard ?
Intelligenz von Barbaren ?
Schönheit von Britney Spears ?

^^

>>hmm.. dann wirst du mich jetzt auslachen :D
>>[snip]
>>Im Moment spiele ich nur mit den Formeln rum etc, sollte es später
>>Geschwindigkeitsprobleme geben kann ich ja immer noch rumbasteln.
>So hat meins auch angefangen; aber in Java und nicht in C -
> das Berechnen der Dropchancen hat dann 30+ min gedauert
> auf meinen Celeron 650 (und das mal 8^^) und mein P4 hats
> auch nur auf ~15 min gebracht.

Ich mach's hier auf nem notebook PIII 1 Ghz @ 700 MHz, in C ist's noch schnell genug. Wie gesagt, erstmal die Formeln, dann mal schauen ;)


Ich bin heut abend weg, morgen THW, morgen Abend ne linux-kiste einrichten, sonntag werd ich evtl. weitercoden. Bis dahin habt ihr mit ein bisschen Glück ruhe vor meinen Fragen ;)

Danke euch beiden! :)


Mfg
Tub
 
>>>>was nun? Wird das qlvl abgezogen oder nicht ?
>>>
>>>AFAIK sind das noch alte Einträge und es wird tatsächlich die
>>>von Jarulf angegebene Formel verwendet.

IMHO sind das einfach nur _falsche_ Einträge.

Die Beschreibungs-Spalten bieten ja schon traditionsgemäß das ein oder andere Schmankerl, wirklich verlassen würde ich mich auf sie nicht.

Ausgelesen wird die Spalte in jedem Fall _nicht_.

>>>Aus der itemratio.txt sind alle Zeilen wichtig ;)

Bist du dir sicher?

Jarulf schien sich ja damals noch nicht im Klaren darüber zu sein, ob eine Diversifizierung tatsächlich schon serverseitig implementiert wurde ...

cu
 
>Bist du dir sicher?
>Jarulf schien sich ja damals noch nicht im Klaren darüber zu sein,
>ob eine Diversifizierung tatsächlich schon serverseitig implementiert wurde ...

Im PK wirds zu mindest so dargestellt. Ich werd das hier gleich mal testen, muss aber vorher noch mein D2 auf meinem linux laptop zum laufen bekommen.


>nodrop = 50%, picks = 12
>im schnitt 3 drops -> cap
>verhältnismässig oft 6 drops -> bug

Stimmt, wird auch gleich mal getestet :-)


>morgen Abend ne linux-kiste einrichten

Das hab ich zum Glück hinter mir ;-) und solange kein neuer 2.4.x Kernel rauskommt, wird da auch nichts dran verändert.
 
ok leute ich hab mir das hier tapfer durchgelesen, die sachen teilweise auch begriffen und teilweise ueberhaupt nicht....is wohlk auch nicht schlimm, man muss ja nicht alles koennen

aber eine frage beschaeftigt mich doch immens :

WARUM ??? Wozu dieser aufwand, also was soll da mal draus werden ?
 
>>>WARUM ??? Wozu dieser aufwand, also was soll da mal
>>>draus werden ?

Wenn daraus mal ein wirklich zuverlässiger und komfortabler Drop-Calculator wird (imho das einzige was dieser Seite wirklich noch fehlt), dann profitieren am Ende alle davon.

Mir fehlen leider die programmiertechnischen Grundlagen, sonst würd ich gerne helfen. Aber denke mal, mit Tub und black_spy haben wir da zwei äußerst kompetente Leute am Werk.

Wär wirklich schön wenn das klappt, leicht ist es gewiss nicht.

cu
 
Hab jetzt eine Weile getestet.


>Ich bin auch nicht von absichtlicher Planung, sondern von einem "feature" ausgegangen ;)
>Bemerken würde man das nur wenn durchschnittlich mehr
>Gegenstände droppen als der nodrop-Wert vermuten liesse.

Es scheint so als wäre deine Vermutung vom Feature korrekt, die ersten Tests weisen zumindest darauf hin.
Code:
Picks = 12 => 70% der Drops mit mehr als 3 Gegenständen
Picks = 24 => 90% der Drops mit mehr als 3 Gegenständen
Picks = 6  => Ziemlich ausgeglichene Drops, vorallem häufiger auch mal 2 oder weniger, im Vergleich zu den beiden Reihen vorher
Allerdings waren die Tests nur kurz: je zwei Durchläufe "Höhle des Bösen", wobei jedes Monster dort NoDrop = 15 und Donnerhammer = 15 hatte.
Was also doch auf eine Itemgenerierung dieser Art schliessen läßt:
Code:
void dropItems() {
  #define MAX_DROPS = 6 // B. Stroustrup soll das bitte nicht zu Gesicht bekommen ;-)
  int items_generated = 0;
  int i = 0;
  while ((i < picks) && (items_generated < MAX_DROPS)) {
    i++;
    p_item = CreateItem();
    items_generated += (p_item == 0) ? 0 : 1;
    foo(p_item);
  }
}


>>[*]Uber steht für Elite
>Also alle Elite-items ? Erkennbar an "ubercode == code" in armor/weapon.txt ?

Hierzu ein kleines Update: Uber steht für Elite *und* Except, also (ubercode == code) || (ultracode == code).
Und es werden definitiv alle Zeilen benutzt; zum Glück wird dort dividiert, so dass man sich schöne Exceptions heraufbeschwören kann :D
Und gerechnet wird mit Jarulfs Formel.
 
B-Man[DaD] schrieb:
WARUM ??? Wozu dieser aufwand, also was soll da mal draus werden ?
Liebster B-Man, schau in deine Signatur und du wirst erkennen warum ich das mache :D

na gut.. eigentlich hat nookie recht, d2.de fehlt ein korrekter drop-calc :)


@black_spy: erstmal gratz :)

dann.. ich scheine mittlerweile instinktiv zu verstehen wie Blizzard programmiert. Ich sollte mir echt sorgen machen :( ;)
Wenn du noch ein paar mal die Höhle leerst und zu genaueren Ergebnissen kommst, lass es mich bitte wissen.

nochmal danke für die Formeln (wiederhol ich mich? :D ), ich werde demnächst weiter rumproggern.


Mfg
Tub
 
>@black_spy: erstmal gratz :)

Thx, das kam ja total überraschend.


>dann.. ich scheine mittlerweile instinktiv zu verstehen wie Blizzard
>programmiert. Ich sollte mir echt sorgen machen :( ;)

Solange man es nur versteht würde ich mir keine Sorgen machen, aber sobald du anfängst intuitiv so wie die zu programmieren, ....


>Wenn du noch ein paar mal die Höhle leerst und zu genaueren
>Ergebnissen kommst, lass es mich bitte wissen.

Werd' ich morgen früh oder abends, wenn Star Trek kommt mal weiter testen.


>nochmal danke für die Formeln (wiederhol ich mich? :D ),
>ich werde demnächst weiter rumproggern.

NP, aber ich bin sicher, die Formeln hättest du sicherlich auch ohne meine Hilfe gefunden ;)
 
>>>das kam ja total überraschend.

:eek:
Gratulation auch von mir.:) :keks:

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