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

Skillsteigerung Formelbasierend?

B3n0X

Guest
Hi,

ich bastel derzeit an einem Charackterplaner und Mulemanager, welcher alle Calcs unter einen Hut bringt, und möglichst exakt alle interessanten Stats auswertet. Zuerst jedoch ist die Entwicklung des Mulemanagers vorgesehen, der soll so leicht zu bedienen sein wie die Bedienung in D2, das heisst per Drag n' Drop könnt ihr eure Items in das Inventar oder die Truhe eines Charackters schieben, anschließend könnt ihr dann nach belieben eure Mules auswerten lassen z.B. für Itemshops in BBCode :)

Da ich allerdings einen Charackterplaner nachliefern möchte der natürlich auch mit den Objekten arbeitet, die der Mulemanager benutzt (Ich arbeite übrigens mit Java), gestaltet sich das ganze nicht gerade einfach.

Momentan fehlt es mir an den wichtigsten Dingen, die Formeln :) Ich habe mir schon einige Seiten angeschaut, die da recht intensiv drauf eingehen, aber wirklich befriedigt hat mich das ganze noch nicht.

Um es etwas zu verdeutlichen ein kleines Beispiel:

Items können wie ihr alle wisst Aufladungen enthalten oder +Skills, das heisst das Objekt Item benötigt ein Attribut des Typs Fertigkeit, Fertigkeit selber benötigt einen Mechanismus um die Informationen der Fertigkeit abzuspeichern und zu berechnen, dazu gehört Art der Fertigkeit, z.B. Schaden, Aura etc., die aktuelle Stufe der Fertigkeit und die Erhöhung der einzelnen Attribute der Fertigkeit pro sLvL.

Und da wollen wir nun einsteigen, betrachten wir die Fertigkeit "Gebet". Diese Fertigkeit gehört zu den Defensiven Auren des Paladins. Die Entwicklung dieses Skills ist jedoch einigermaßen "merkwürdig", sie scheint nicht auf simplen Formeln zu beruhen, z.B. die Manakosten:

sLvL : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Mana: 1 1,1 1,3 1,5 1,7 1,9 2,1 2,3 2,5 2,6 2,8 3 3,2 3,4 3,6 3,8 4 4,1 4,3 4,5

(Etwas schwer zu lesen ich weiss :) )

Eine Funktion der Art f = mx + b können wir hier leider nicht drauß herleiten, diese Funktion ist ungemein komplexer und vielmehr eine Distribution :)

Für euch und für mich habe ich jedoch diesen Aufwand betrieben und eine mögliche Funktion erstellt die diese Skillentwicklung beschreibt:

result.png


und Rekursiv:

rekursiv.png


Geplottet ergibt diese Funktion:

mana.png


Diese Formel lässt sich auch, zumindest in ihrer rekursiven Form, einigermaßen leicht mit Java und anderen Programmiersprachen realisieren. Ich bin mir nicht sicher ob die Java API die Heaviside und/oder Dirac Distribution beinhaltet aber die sollte ja für unsere Belange in 5 Zeilen programmiert sein :)

Meine Frage ist nun, gibt es eine Formelsammlung mit derartigen, wie von mir erstellten, Formeln? Das würde mir die Arbeit extrem erleichtern.

Bei dieser Skillentwicklung kann es natürlich auch sein, das die Unterschiede (0,1 und 0,2 pro sLvL) auf Rundungen beruhen, da ich davon ausgehe dass D2 intern mit floats arbeitet und für die Ausgabe in integer konvertiert.

Was mich gleich zum nächsten Punkt bringt: Schadenserhöhung bei Waffen.

Auch hier gibt es Ungereimtheiten, wenn man die auf den Uniques angegebene erhöhung des Schadens auf die Items draufrechnet. Oftmals ergibt das Ergebnis einen Wert der teilweise ordentlich abweicht, und wenn es nur 1 Schadenspunkt ist. Auch hier vermute ich eine interne Float berechnung, soll heißen das der Waffenschaden eines Kurmschwerts nicht mit 9-17 sonder mit z.B. 9.21 - 16.65 angegeben ist.

Weiss jemand darüber was genaues?

Würde mich über Hilfe sehr freuen, damit ich mein Projekt schnellstmöglich realisieren kann, was ja auch euch, der Community, zu Gute kommen sollte :)

MfG
 
Da ist gar nichts distributionsartiges - es sind meistens lineare Formeln, die abschnittsweise definiert werden. Gelegentlich gibts auch sogenannte [wiki]Diminishing Returns[/wiki]-Formeln, die Ähnlichkeit mit einem beschränkten Wachstum haben.

Die Formelsammlung dazu gibts im Archiv des Modifikationen-Forums, dort findet man auch, wie man die Daten dazu aus den MPQ-Dateien auslesen kann.

D2 rechnet praktisch nur mit Integern, allerdings werden für viele Werte die Zahlen vor der Berechnung mit einem Faktor multipliziert und danach wieder durch diesen dividiert. Das Manabeispiel läuft in der Hinsicht schon ungewöhnlich, hier wird grundsätzlich in 1/256-Schritten gerechnet, ebenso wie beim Leben. Die Ausgabe des Skillcalcs ist natürlich gerundet, 8 Nachkommastellen will niemand sehen.



Die Berechnung des Waffenschadens erfolgt aber in integern, wo hast du da Abweichungen gefunden?

Das erstmal zum formelmäßigen.
 
Hi,

das hört sich doch sehr gut an, ich werd gleich mal ein Blick in das Modforum werfen :)

Natürlich finde ich jetzt kein passendes Beispiel bezüglich der Schadenserhöhung, möglicherweise waren die Daten auch nur falsch angegeben, hatte den Vergleich damals nicht mit den Items aus der Datenbank von PlanetDiablo :)
 
Um nochmal speziell aufs Beispiel Gebet einzugehen: Wenn man die ganzen Formeln durchgeht und jeweils die Werte für Gebet einsetzt, erhält man eine ganz einfache Formel:
1/16 * (3*skilllvl + 13)
Im Skillcalc und in der Spielanzeige wird auf ganze Zehntel abgerundet. Mehr ist da nicht dahinter.

Die Schadensformeln sind schon etwas aufwändiger, da diese üblicherweise abschnittsweise definiert sind.

Bei seltsamen +1 fällt mir die Verteidigung ein - besitzen Rüstungsgegenstände eine prozentual erhöhte Verteidigung, so wird ihre Grundverteidigung auf 1 über dem Maximalwert gesetzt. Gilt allerdings nicht mehr, wenn die Erhöhung erst durch eine Sockelung kam oder nachdem das Item im Cube zur exceptional- bzw. elite-Version verbessert wurde.
Oh, und Diablo 2 ist voll von solchen seltsamen Spezialfällen ;).
 
Zurück
Oben