Tub schrieb:
re
Tub schrieb:
nummer 2:
habe die Levels.txt eingelesen und wollte unbenutzte Monster über diese aussortieren.
Tjo.. Diablo, Mephisto und Baal stehen nich in der Levels.txt und sind jetzt ausm Calc raus

Macht nix, dafür ist Pindle drin
TigerSeele konnte mir auch nicht weiterhelfen.. hast du ne Idee wie ich unbenutzte Monster zuverlässig löschen kann?
Einfach alle drinlassen ist nicht drin, dann erscheint z.B. Nihlatak auch bei den normalen Monstern (mit mlvl = 95 statt 98) - also filtern muss sein. Die eBoss oder spawned-Spalten nutzen bringt auch nicht weiter.
Wo kommt Diablo ins Spiel rein? Irgendwie muss ich dem Calc beibringen dass er den nicht löschen soll, nur wie?
Lilly konnte mir damals auch nicht helfen; im PK und LL fand ich auch nichts.
Monstererkennung ist halt nicht so einfach, da der Mechanismus aus 3 Teilen besteht:
1. Levels.txt M1-25 Spalten
2. Levels.txt S1-25 Spalten
3. Maps (DS1-Dateien)
Vorallem Punkt 3 ist der Knackpunkt hierbei, weil Superuniques, Aktbosse und einge andere Monster direkt über die Maps erstellt werden. Der Aufbau dieser Dateien ist nicht gerade trivial und die Zuordnungsvorschrift Monster -> IDs in Mapfiles ist auch nicht bekannt, so dass vieles dort eher empirisch ist und auf wackligen Füssen steht.
Die einfachste Vorgehensweise ist, dass man versucht möglichst viel über die monstats.txt zu filtern und für den Rest manuelle Filter (Superuniques.txt) erstellt.
Tub schrieb:
nummer 3:
wenn ich die Level schon drin hab kann ich mich auch gleich an die Truhen-drops machen

Wie funktionieren die eigentlich ? In der Levels.txt oder so habe ich keine TreasureClass gefunden. TreasureClasses mit Ebenen-namen gibt's auch keine. Benutzen die ein komplett anderes System oder habe ich da was übersehen ?
Zuordnung der TCs zu den Truhen ist recht einfach:
Du nimmst die Level-IDs eines Aktes, teilst ihre Spanne x durch 3 und ordnest den ersten x/3 Maps die entsprechende A TC zu, den folgeden x/3 die B und dem Rest C.
Die Droproutine - tja, die ist nicht wirklich einfach:
1. Normale (zufällige) Kisten - gehen analog zu Monstern
2. goldene (bzw. feste generierte) Kisten:
Zunächst wird die Qualtität bestimmt:
2% Unique
4% Set
6% Rare
20% Magic (Variante 1)
30% Magic (Variante 2)
38% Magic (Variante 3)
Dann wird die zugehörige Chest-TC betrachtet und ihre 4 Drops bestimmt, wobei immer die oben gewählte Qualität gedropt wird, wenn möglich. Dabei können 0 bis 4 Gegenstände fallen.
Unique, Set und Rare:
Danach untersucht das Spiel den letzten generierten Gegenstand, wenn dieser nicht mind. magisch ist, wird erneut ein Drop mit der oben gewählten Qulität ausgeführt.
Ist der vorherige Check ohne Erfolg gewesen -sprich kein Gegenstand generiert worden- oder der zusätzliche Drop nicht mind. magisch, dann geht's wie folgt weiter:
1. Es werden 10 Drops aus der entsprechenden TC versucht - die Qualität ist diesmal magisch. [0 bis 4 Gegenstände pro Drop möglich]. Dabei wird bei jeden Drop wieder der letzte generierte Gegenstand untersucht. Wenn er magisch ist, ist dieser Schritt zu ende. Die Anzahl der Drops, also der Iterationen von diesem Schritt wird mitgezählt.
2. Ist die Zahl der Drops im vorherigen Schritt < 4, so werden wieder 4 Drops mit zufälliger Qualität ausgeführt.
3. 5 Gold Haufen, 2 Mana Pötte + 2 Heiltränke
Magic (Variante 1):
10 Drops (0-4 Gegenstände), jeweils der letzte generierte Gegenstand wird betrachtet. Wenn 3 magische Gegenstände dabei sind ist Ende. War keiner der untersuchten ein Gegenstand, geht's mit dem obigen Verfahren weiter.
Magic (Variante 2):
10 Drops, jeweils der ... . Ende bei 2 magischen Gegenständen. War wie bei Variante 1 kein Gegenstand bei den untersuchten dabei, erfolgt ein zusätzlicher Drop + Goldhaufen.
Magic (Variante 3):
Ein Drop -> kein Gegenstand -> Gold.
Viel Spass beim Berechnen
Tub schrieb:
nummer 4:
Dein durchgerechneter drop:
Code:
base_chance = myratio[6] - (mlvl - qlvl)/myratio[7];
chance_before_playermf = 128 * base_chance - (128 * base_chance * cm_magic / 1024);
dmf_playermf = MF;
chance_after_playermf = chance_before_playermf * 100 / (100 + dmf_playermf);
if (chance_after_playermf <= 128) { chance_magic = chance_left; return; }
chance_magic = 128 / chance_after_playermf * chance_left;
chance_left -= chance_magic;
per hand durchgerechnet:
Adlerkugel: class = 1, uber = 0
magic = 17
magicdiv = 6
base_chance = 17 - (90-2)/6 = 7/3
chance_before_playermf = 128 * 7/3 - (128 * 7/3 * 0/1024) = 128*7/3
chance_after_playermf = (128*7/3) * 100 / (100 + 0) = 128*7/3
chance_magic = 128 / (128*7/3) = 3/7
ehm, formelfehler, hab ich ne falsche ratio, oder was ist jetzt schiefgelaufen ?!
In Jarulfs Guide fehlen die Gaussklammern zum Abrunden (und ich hab sie damals auch nicht angeben, wie mir gerade auffiel):
17 - [(90 - 1)/6] = 17 - [14 + 5/6] = 17 - 14 = 3
Ergo: chance_magic = 1/3
Hier die Korrekturen:
base_chance = base - [(mlvl - qlvl)/divisor]
chance_before_playermf = 128*base_chance - [128*base_chance(cq/1024)]
chance_after_playermf = [chance_before_playermf * 100/(100+mf)]