Vorgegeben Stats werden nicht in der DB Gespeichert sondern direkt aus dem Server (SHN's) gelesen.
die anderen Stats kannst du ja anhand deines beispiels erkennen
- STR = 509
- END = 505
- DEX = 507 (fester wert aus SHN + additional Stats, hier 19)
- INT = 511
- SPR = 513
Um das ganze vielleicht noch etwas verständlicher zu machen, gezählt wird immer ab 0 z.B.:
- - STR ist der erste (0te) Stat und bei 509 abgelegt, 508 enthält dabei 0
- - END ist der zweite (1te) Stat und bei 505 abgelegt, 504 enthält dabei 1
- - DEX ist zwar der dritte (2te) Stat und bei 507 abgelegt, 506 enthält dabei 2
(da fester Stat steht hier ein additional Stat)
- - INT ist demnach der vierte (3te) Stat und bei 511 abgelegt, 510 enthält dabei 3
- - SPR ist letztendlich der fünfte (4te) Stat und bei 513 abgelegt, 512 enthält dabei 4
Die additional Stats werden Clientseitig leider nicht angezeigt und vermutlich auch nicht einmal verarbeitet.
Diese Vermutung würde zumindest die bei der damaligen Einführung der additional stats getroffene,
aber nicht ganz fehlerfreie Aussage seitens Gamigo bestätigen, das diese Stats ja ansich schon immer da waren,
nur nicht im Client angezeigt wurden.
Das Prinzip dahinter ist also folgendermaßen:
Stats sind von nOptionType 504 bis 513 gespeichert, das macht insgesamt 10 Datensätze durch 5 verschiedene Stats = 2 Datensätze
pro Stat (in nOptionData versteht sich) die angeben, welche Art von Stat es ist (STR, END, DEX, INT, SPR) und wieviele StatPunkte
dem Stat zugeordnet sind.
Die Zuweisung sieht dann folgendermaßen aus:
StatType Liste- 0 = STR
- 1 = END
- 2 = DEX
- 3 = INT
- 4 = SPR
Das bedeutet auf gut deutsch,
wenn unter nOptionType 506 bei nOptionData 4 und unter nOptionType 507 bei nOptionData 77 steht, dann hat das Item SPR 77
es sei denn es handelt sich bei dem Item um ein Item das SPR fest zugewiesen bekommen hat, in dem fall wäre die 77 ein additional
Stat.
Es ist nicht festgelegt unter welchem nOptionType ein jeweiliger Stat abgelegt wird, nur das dieser innerhalb von 504 und
513 abgelegt werden muss.
So zum auslesen oder ändern Spezifischer Werte würde diese Info ja schon reichen, aber bestimmt willst du
und andere bestimmt auch nun wissen, wie man einen weiteren "neuen" Stat hinzufügt.
Dazu benötigt man nun nOptionType 503.
Der dort eingetragene Wert gibt an wieviele Stats die Waffe überhaupt hat und berechnet sich aus
der Summe der Stat Datensätze + 1 (nOptionType 503).
Bedenke, das jedem Stat 2 Datensätze zugewiesen sind.
Demnach muss bei nOptionType 503 unter nOptionData folgendes stehen:
nOptionType 503 Liste- 1 Stat = 3
- 2 Stats = 5
- 3 Stats = 7
- 4 Stats = 9
- 5 Stats = 11
Wenn also nun 2 Stats auf dem Item bereits vorhanden sind, dann stehen in der DB
folgende Rows für Stats bei dem Item zur Verfügung:
- nOptionType 503 mit nOptionData = 5
- nOptionType 504 mit Bezeichnung für den ersten Typ (remember StatType Liste)
- nOptionType 505 mit dem Wert der Statpunkte für den ersten Stat
- nOptionType 506 mit Bezeichnung für den zweiten Typ (remember StatType Liste)
- nOptionType 507 mit dem Wert der Statpunkte für den zweiten Stat
Für Jeden neuen/weiteren Stat muss man nun also diese Liste fortführen, also eine neue Row anlegen
und dort dann nItemKey des Items eintragen, und weitermachen mit:
nOptionType = 508, nOptionData = siehe
StatType Liste (darauf achten das kein doppelter Stattyp existiert)
nOptionType = 509. nOptionData = Statpunkte die dieser StatType haben soll
Dann noch nOptionData bei nOptionType 503 anpassen (siehe
nOptionType 503 Liste)
und die neuen Stats werden übernommen. Merke, der Charakter mit dem Item muss natürlich einmal reloggen/in die Charwahl.
Denke müsste nun alles darüber gesagt sein,
falls ich aber doch noch was vergessen habe oder noch Fragen sind dann bin ich nicht da.
Edit: Das wichtigste habe ich ja jetzt fast vergessen
@Nnybe, wenn du alle Stats der Items auslesen willst, dann kommst du nicht drum herum dir aus allen Shn's
die Statdaten zu exportieren und diese in die DB zu laden, es sei denn es gibt eine möglichkeit per PHP oder
anderweitig die SHN's auszulesen.
Möglich wäre es mit Sicherheit sich selber etwas zu coden aber weitaus aufwändiger als die Daten in die Datenbank zu bringen.