Dosbis
Guest
Hi
Da recht wenig hierüber bekannt zu sein scheint und es durchaus passieren kann, daß ich die Daten zum Thema, zwecks Ordnung und Übersichtlichkeit, eines Tages löschen werde, habe ich mich entschlossen mir bekannte Informationen und eigene Tests vorher doch einmal zusammenzutragen.
Die Kostenberechnung ist von vielen Einflußfaktoren abhängig, daher erhebt diese Ansammlung absolut keinen Anspruch auf Vollständigkeit.
Obwohl schon etwas älter und mit nicht mehr funktionierenden Links, soll folgendes nicht unerwähnt bleiben:
http://phrozenkeep.it-point.com/for...12&sid=41f8064b59871a48f1e979e36d027ea4#25112
Einiges ist dort zwar nicht (mehr?) ganz korrekt, aber ich finde es ist eigentlich ganz gut erklärt. Ich hoffe, daß Ungültiges erkenntlich wird.
----prinzipielle Formeln:
---Kaufpreis:
Der Wert eines Gegenstandes wird also durch seine Basiskosten und seine Modifikatoren (modifier) bestimmt.
Zuerst wird ein Wert für jeden Modifikator errechnet:
[(base_cost * eff * mult) / 1024] + add = modX
Wenn hier "base_cost * eff" 65536 oder mehr beträgt, wird erst durch 1024 geteilt und dann mit "mult" multipliziert!
Also bei base_cost * eff >= 65536 gilt:
[(base_cost * eff) / 1024] * mult + add = modX
Die Ergebnisse werden dann zusammengezählt und am Ende wird base_cost addiert.
Also:
mod1 + mod2 + ... + base_cost = cost
Cost ist nun schon der Wert des Gegenstandes, aber das Ergebnis wird noch in Abhängigkeit von den NPCs modifiziert. Dies geschieht anhand der entsprechenden "mult"-Einträge in der npc.txt:
--NPC-Modifikation (NPC-Mod.):
(cost * npc_mult) / 1024 = fin_cost
Wenn cost >= 65536 gilt hier:
[cost / 1024] * npc_mult = fin_cost
Bei gelöster Rabattquest nochmal "(cost * npc_questmult) / 1024" oder eben "[cost / 1024] * npc_questmult" hinterher.
---Verkaufspreis:
Der Verkaufspreis wird eigentlich genau wie der Kaufpreis berechnet. Bei der Berechnung der einzelnen Werte für die Modifikatoren ist aber zu beachten, daß bei Skill-Modifikatoren (z.B. skillonattack oder charged_skill) durch 4096 statt 1024 geteilt wird. Außerdem werden charakterspezifische Gegenstände vor der NPC-Mod. durch 4 geteilt. Der Rest ist aber gleich und npc_mult ist hier stets 512.
---Reparatur:
Hier wird der "cost"-Wert des Kaufpreises genommen, dann wird folgendermaßen berechnet:
[(cost * (max_dur - dur)) / max_dur] = r_cost
Danach noch NPC-Mod.; npc_mult ist hier stets 128.
base_cost = cost-Eintrag in weapons.txt, armor.txt oder misc.txt; wenn es sich um einen Rüstungsgegenstand handelt, ist base_cost = (armor.txt-Eintrag * ac) / maxac
ac = aktuelle Basisverteidigung des Gegenstandes (modifiziert durch z.B. "ätherisch", nicht aber durch ed% [xx% verbesserte Verteidigung])
maxac = maxac-Eintrag in armor.txt
mult = multiply-Eintrag in itemstatcost.txt oder auch skills.txt
add = add-Eintrag in itemstatcost.txt oder auch skills.txt
eff = die "Effektivität" des Modifikators (z.B. bei "Feuer-Widerstand +6%" wäre eff=6)
modX(mod1, mod2...) = errechnete Werte für die Modifikatoren (Zwischenwerte)
cost = Zwischenwert
npc_mult = entsprechender Eintrag in npc.txt (hierbei ist zu beachten, daß die Einträge aus der Sicht der NPCs sind; "buy_mult" wird also z.B. für den Verkaufspreis benötigt)
fin_cost = endgültige Kosten
dur = aktuelle Haltbarkeit
max_dur = maximale Haltbarkeit
r_cost = Zwischenwert
--weitere Einflüsse/Erklärungen:
-Modifikatoren, die bereits "natürlich" auf Gegenständen vorkommen (wie z.B. "50% Schaden an Untoten" auf einigen Waffen) haben keinen Einfluß auf die Kosten
-Sockel sind ebenfalls "umsonst" (in jedem Fall gilt dies für "graue" Gegenstände; ich habe es zwar nicht getestet, aber für "Sockel-Affixe" scheint es auch zu gelten)
-Automodifikatoren sind auf normalen (und grauen) Gegenständen auch ohne Bedeutung für die Kosten; auf "guten", magischen oder auch seltenen Gegenständen müssen sie aber als normale Modifikatoren mitberechnet werden
-gesockelte Edelsteine oder Runen erhöhen den errechneten "cost"-Wert um die Hälfte ihres eigenen Wertes (weitestgehend ungetestet aus dem Link übernommen)
-gesockelte Juwelen erhöhen den errechneten "cost"-Wert um 500 (weitestgehend ungetestet aus dem Link übernommen)
-Gegenstände schlechter Qualität werden vor der NPC-Mod. durch 2 geteilt (den Wert ausnahmsweise aufrunden)
-ätherische Gegenstände werden vor der NPC-Mod. durch 4 geteilt
-bei Unique- und Setgegenständen werden nicht die einzelnen Modifikatoren berechnet; diese Gegenstände haben ihre eigenen mult/add-Einträge in der uniqueitems.txt bzw. in der setitems.txt, mit denen die Kosten ermittelt werden
Manches verlangt nun noch nach einer Sonderbehandlung, wie "füllt die Menge auf", welches wohl in Reparaturkosten von 1 resultiert. Da wollen auch die "staffmods" nicht nachstehen und haben eine etwas veränderte Formel bekommen. Ich werde jetzt versuchen ohne größere Erklärungen auszukommen und hoffe, daß es, vor dem Hintergrund der bisherigen Ausführungen, verständlich bleibt.
----Staffmods:
---Staffmods alleine (nur normale [und graue] Gegenstände):
--Kaufpreis:
1. ([(base_cost * mult) / 1024] + add) * (eff + eff - 1) = sk_modX
Wenn hier base_cost >= 65536 dann:
([mult / 1024] * base_cost + add) * (eff + eff - 1) = sk_modX
2. sk_mod1 + sk_mod2 + sk_mod3 + base_cost = cost
Danach noch NPC-Mod.
--Verkaufspreis:
Jeweils durch 4096 statt 1024 dividieren, sonst wie der staffmod-Kaufpreis.
--Reparatur:
cost vom staffmod-Kaufpreis, dann normale Rep.-Formel.
---"gute" Gegenstände mit staffmods:
--Kaufpreis:
1. ([(base_cost * mult) / 1024] + add) * (eff + eff - 1) = sk_modX
Wenn hier base_cost >= 65536 dann:
([mult / 1024] * base_cost + add) * (eff + eff - 1) = sk_modX
2. sk_mod1 + sk_mod2 + sk_mod3 + base_cost = cost_a
3. [(cost_a * eff * mult) / 1024] + add = modX
Wenn hier cost_a * eff >= 65536 dann:
[(cost_a * eff) / 1024] * mult + add = modX
4. mod1 + mod2 + ... + cost_a = cost
Danach noch NPC-Mod.
--Verkaufspreis:
Ähnlich wie der Kaufpreis von "guten Gegenständen mit staffmods", nur bei 1. wird jeweils durch 4096 statt 1024 geteilt und bei 3. wird für alle Skill-Modifikatoren durch 4096 statt 1024 geteilt (alle anderen Modifikatoren bleiben bei 1024).
--Reparatur:
cost vom Kaufpreis von "guten Gegenständen mit staffmods", dann normale Rep.-Formel.
---magische Gegenstände mit staffmods:
--Kaufpreis:
1. [(base_cost * eff * mult) / 1024] + add = modX
Wenn hier base_cost * eff >= 65536 dann:
[(base_cost * eff) / 1024] * mult + add = modX
2. mod1 + mod2 + ... + base_cost = cost_a
3. ([(cost_a * mult) / 1024] + add) * (eff + eff - 1) = sk_modX
Wenn hier cost_a >= 65536 dann:
([mult / 1024] * cost_a + add) * (eff + eff - 1) = sk_modX
4. sk_mod1 + sk_mod2 + sk_mod3 + cost_a = cost
Danach noch NPC-Mod.
--Verkaufspreis:
Ähnlich wie der Kaufpreis von "magischen Gegenständen mit staffmods", nur bei 1. wird für alle Skill-Modifikatoren durch 4096 statt 1024 geteilt und bei 3. wird stets durch 4096 statt 1024 geteilt.
--Reparatur:
cost vom Kaufpreis von "magischen Gegenständen mit staffmods", dann normale Rep.-Formel.
sk_modX (sk_mod1, ...) = Zwischenwerte, die nur mit den staffmods berechnet werden (nicht mit anderen Modifikatoren!)
cost_a = Zwischenwert
Folgendes habe ich nur flüchtig angeschaut, es ist also mit einer gewissen Vorsicht zu genießen:
----Ladungen:
Ladungen sind in Bezug auf Kauf- und Verkaufspreis als normale Modifikatoren anzusehen. eff ist dabei das Skill-Level der Ladungen, mult und add kommen aus der skills.txt. Bei der Reparatur werden aber zum normalen Reparaturpreis noch verbrauchte Ladungen addiert. Der Wert dieser errechnet sich wohl folgendermaßen:
(([((slvl + id_add * 2 + 2) * 10000 * mult) / 1024] + add) * (max_stack - stack)) / max_stack
oder wenn (slvl + id_add * 2 + 2) * 10000 >= 65536 dann:
(([((slvl + id_add * 2 + 2) * 10000) / 1024] * mult + add) * (max_stack - stack)) / max_stack
slvl = Skill-Level
id_add = wohl ein Wert, der in Abhängigkeit von der skill-id in der skills.txt festgelegt wird; vermutlich so: die 5 Skills einer jeden Charakterklasse, die die jeweils niedrigsten ids haben, bekommen id_add = 0, bei den nächsten 5 ist id_add = 1, bei den nächsten ist es 2, usw.; id_add ist also ein Wert von 0 bis 5
max_stack = maximale Anzahl Ladungen (Menge Wurfwaffen)
stack = verbleibende Anzahl Ladungen (Menge Wurfwaffen)
----Wurfwaffen:
--Kaufpreis:
Zunächst werden ganz normal die Werte für die Modifikatoren bestimmt, danach kommt folgendes:
[(mod1 + mod2 + ...) / max_stack] + base_cost = cost
jetzt kommt NPC-Mod., das Ergebnis dann * max_stack = fin_cost
--Verkaufspreis:
Im Prinzip wie Kaufpreis (evtl. abweichende Modifikatoren-Berechnung und ähnliches beachten). Von "fin_cost" wird aber noch der "Verbrauch" abgezogen:
fin_cost - [(cost * 128) / 1024] * (max_stack - stack)
oder eben bei cost >= 65536:
fin_cost - [cost / 1024] * 128 * (max_stack - stack)
--Reparatur:
Der Subtrahend kann wohl auch als Reparaturformel angesehen werden, wobei "cost" wahrscheinlich vom Kaufpreis übernommen wird:
[(cost * 128) / 1024] * (max_stack - stack) = r_cost
oder bei cost >= 65536:
[cost / 1024] * 128 * (max_stack - stack) = r_cost
Bleibt noch zu sagen, daß sich die Angaben auf die normale (unveränderte) Version 1.10 beziehen, obwohl sie (teilweise?) auch für andere Patches gelten könnten.
Im übrigen ist das Beispiel im Link wenigstens für 1.10 falsch, die angegebenen modifier basieren wiederum auf "mindamage" bzw. "maxdamage", deren mult/add-Werte sind 25/122 bzw. 16/94.
Vielleicht bestand ja doch Interesse...
MfG
Da recht wenig hierüber bekannt zu sein scheint und es durchaus passieren kann, daß ich die Daten zum Thema, zwecks Ordnung und Übersichtlichkeit, eines Tages löschen werde, habe ich mich entschlossen mir bekannte Informationen und eigene Tests vorher doch einmal zusammenzutragen.
Die Kostenberechnung ist von vielen Einflußfaktoren abhängig, daher erhebt diese Ansammlung absolut keinen Anspruch auf Vollständigkeit.
Obwohl schon etwas älter und mit nicht mehr funktionierenden Links, soll folgendes nicht unerwähnt bleiben:
http://phrozenkeep.it-point.com/for...12&sid=41f8064b59871a48f1e979e36d027ea4#25112
Einiges ist dort zwar nicht (mehr?) ganz korrekt, aber ich finde es ist eigentlich ganz gut erklärt. Ich hoffe, daß Ungültiges erkenntlich wird.
----prinzipielle Formeln:
---Kaufpreis:
Der Wert eines Gegenstandes wird also durch seine Basiskosten und seine Modifikatoren (modifier) bestimmt.
Zuerst wird ein Wert für jeden Modifikator errechnet:
[(base_cost * eff * mult) / 1024] + add = modX
Wenn hier "base_cost * eff" 65536 oder mehr beträgt, wird erst durch 1024 geteilt und dann mit "mult" multipliziert!
Also bei base_cost * eff >= 65536 gilt:
[(base_cost * eff) / 1024] * mult + add = modX
Die Ergebnisse werden dann zusammengezählt und am Ende wird base_cost addiert.
Also:
mod1 + mod2 + ... + base_cost = cost
Cost ist nun schon der Wert des Gegenstandes, aber das Ergebnis wird noch in Abhängigkeit von den NPCs modifiziert. Dies geschieht anhand der entsprechenden "mult"-Einträge in der npc.txt:
--NPC-Modifikation (NPC-Mod.):
(cost * npc_mult) / 1024 = fin_cost
Wenn cost >= 65536 gilt hier:
[cost / 1024] * npc_mult = fin_cost
Bei gelöster Rabattquest nochmal "(cost * npc_questmult) / 1024" oder eben "[cost / 1024] * npc_questmult" hinterher.
---Verkaufspreis:
Der Verkaufspreis wird eigentlich genau wie der Kaufpreis berechnet. Bei der Berechnung der einzelnen Werte für die Modifikatoren ist aber zu beachten, daß bei Skill-Modifikatoren (z.B. skillonattack oder charged_skill) durch 4096 statt 1024 geteilt wird. Außerdem werden charakterspezifische Gegenstände vor der NPC-Mod. durch 4 geteilt. Der Rest ist aber gleich und npc_mult ist hier stets 512.
---Reparatur:
Hier wird der "cost"-Wert des Kaufpreises genommen, dann wird folgendermaßen berechnet:
[(cost * (max_dur - dur)) / max_dur] = r_cost
Danach noch NPC-Mod.; npc_mult ist hier stets 128.
base_cost = cost-Eintrag in weapons.txt, armor.txt oder misc.txt; wenn es sich um einen Rüstungsgegenstand handelt, ist base_cost = (armor.txt-Eintrag * ac) / maxac
ac = aktuelle Basisverteidigung des Gegenstandes (modifiziert durch z.B. "ätherisch", nicht aber durch ed% [xx% verbesserte Verteidigung])
maxac = maxac-Eintrag in armor.txt
mult = multiply-Eintrag in itemstatcost.txt oder auch skills.txt
add = add-Eintrag in itemstatcost.txt oder auch skills.txt
eff = die "Effektivität" des Modifikators (z.B. bei "Feuer-Widerstand +6%" wäre eff=6)
modX(mod1, mod2...) = errechnete Werte für die Modifikatoren (Zwischenwerte)
cost = Zwischenwert
npc_mult = entsprechender Eintrag in npc.txt (hierbei ist zu beachten, daß die Einträge aus der Sicht der NPCs sind; "buy_mult" wird also z.B. für den Verkaufspreis benötigt)
fin_cost = endgültige Kosten
dur = aktuelle Haltbarkeit
max_dur = maximale Haltbarkeit
r_cost = Zwischenwert
--weitere Einflüsse/Erklärungen:
-Modifikatoren, die bereits "natürlich" auf Gegenständen vorkommen (wie z.B. "50% Schaden an Untoten" auf einigen Waffen) haben keinen Einfluß auf die Kosten
-Sockel sind ebenfalls "umsonst" (in jedem Fall gilt dies für "graue" Gegenstände; ich habe es zwar nicht getestet, aber für "Sockel-Affixe" scheint es auch zu gelten)
-Automodifikatoren sind auf normalen (und grauen) Gegenständen auch ohne Bedeutung für die Kosten; auf "guten", magischen oder auch seltenen Gegenständen müssen sie aber als normale Modifikatoren mitberechnet werden
-gesockelte Edelsteine oder Runen erhöhen den errechneten "cost"-Wert um die Hälfte ihres eigenen Wertes (weitestgehend ungetestet aus dem Link übernommen)
-gesockelte Juwelen erhöhen den errechneten "cost"-Wert um 500 (weitestgehend ungetestet aus dem Link übernommen)
-Gegenstände schlechter Qualität werden vor der NPC-Mod. durch 2 geteilt (den Wert ausnahmsweise aufrunden)
-ätherische Gegenstände werden vor der NPC-Mod. durch 4 geteilt
-bei Unique- und Setgegenständen werden nicht die einzelnen Modifikatoren berechnet; diese Gegenstände haben ihre eigenen mult/add-Einträge in der uniqueitems.txt bzw. in der setitems.txt, mit denen die Kosten ermittelt werden
Manches verlangt nun noch nach einer Sonderbehandlung, wie "füllt die Menge auf", welches wohl in Reparaturkosten von 1 resultiert. Da wollen auch die "staffmods" nicht nachstehen und haben eine etwas veränderte Formel bekommen. Ich werde jetzt versuchen ohne größere Erklärungen auszukommen und hoffe, daß es, vor dem Hintergrund der bisherigen Ausführungen, verständlich bleibt.
----Staffmods:
---Staffmods alleine (nur normale [und graue] Gegenstände):
--Kaufpreis:
1. ([(base_cost * mult) / 1024] + add) * (eff + eff - 1) = sk_modX
Wenn hier base_cost >= 65536 dann:
([mult / 1024] * base_cost + add) * (eff + eff - 1) = sk_modX
2. sk_mod1 + sk_mod2 + sk_mod3 + base_cost = cost
Danach noch NPC-Mod.
--Verkaufspreis:
Jeweils durch 4096 statt 1024 dividieren, sonst wie der staffmod-Kaufpreis.
--Reparatur:
cost vom staffmod-Kaufpreis, dann normale Rep.-Formel.
---"gute" Gegenstände mit staffmods:
--Kaufpreis:
1. ([(base_cost * mult) / 1024] + add) * (eff + eff - 1) = sk_modX
Wenn hier base_cost >= 65536 dann:
([mult / 1024] * base_cost + add) * (eff + eff - 1) = sk_modX
2. sk_mod1 + sk_mod2 + sk_mod3 + base_cost = cost_a
3. [(cost_a * eff * mult) / 1024] + add = modX
Wenn hier cost_a * eff >= 65536 dann:
[(cost_a * eff) / 1024] * mult + add = modX
4. mod1 + mod2 + ... + cost_a = cost
Danach noch NPC-Mod.
--Verkaufspreis:
Ähnlich wie der Kaufpreis von "guten Gegenständen mit staffmods", nur bei 1. wird jeweils durch 4096 statt 1024 geteilt und bei 3. wird für alle Skill-Modifikatoren durch 4096 statt 1024 geteilt (alle anderen Modifikatoren bleiben bei 1024).
--Reparatur:
cost vom Kaufpreis von "guten Gegenständen mit staffmods", dann normale Rep.-Formel.
---magische Gegenstände mit staffmods:
--Kaufpreis:
1. [(base_cost * eff * mult) / 1024] + add = modX
Wenn hier base_cost * eff >= 65536 dann:
[(base_cost * eff) / 1024] * mult + add = modX
2. mod1 + mod2 + ... + base_cost = cost_a
3. ([(cost_a * mult) / 1024] + add) * (eff + eff - 1) = sk_modX
Wenn hier cost_a >= 65536 dann:
([mult / 1024] * cost_a + add) * (eff + eff - 1) = sk_modX
4. sk_mod1 + sk_mod2 + sk_mod3 + cost_a = cost
Danach noch NPC-Mod.
--Verkaufspreis:
Ähnlich wie der Kaufpreis von "magischen Gegenständen mit staffmods", nur bei 1. wird für alle Skill-Modifikatoren durch 4096 statt 1024 geteilt und bei 3. wird stets durch 4096 statt 1024 geteilt.
--Reparatur:
cost vom Kaufpreis von "magischen Gegenständen mit staffmods", dann normale Rep.-Formel.
sk_modX (sk_mod1, ...) = Zwischenwerte, die nur mit den staffmods berechnet werden (nicht mit anderen Modifikatoren!)
cost_a = Zwischenwert
Folgendes habe ich nur flüchtig angeschaut, es ist also mit einer gewissen Vorsicht zu genießen:
----Ladungen:
Ladungen sind in Bezug auf Kauf- und Verkaufspreis als normale Modifikatoren anzusehen. eff ist dabei das Skill-Level der Ladungen, mult und add kommen aus der skills.txt. Bei der Reparatur werden aber zum normalen Reparaturpreis noch verbrauchte Ladungen addiert. Der Wert dieser errechnet sich wohl folgendermaßen:
(([((slvl + id_add * 2 + 2) * 10000 * mult) / 1024] + add) * (max_stack - stack)) / max_stack
oder wenn (slvl + id_add * 2 + 2) * 10000 >= 65536 dann:
(([((slvl + id_add * 2 + 2) * 10000) / 1024] * mult + add) * (max_stack - stack)) / max_stack
slvl = Skill-Level
id_add = wohl ein Wert, der in Abhängigkeit von der skill-id in der skills.txt festgelegt wird; vermutlich so: die 5 Skills einer jeden Charakterklasse, die die jeweils niedrigsten ids haben, bekommen id_add = 0, bei den nächsten 5 ist id_add = 1, bei den nächsten ist es 2, usw.; id_add ist also ein Wert von 0 bis 5
max_stack = maximale Anzahl Ladungen (Menge Wurfwaffen)
stack = verbleibende Anzahl Ladungen (Menge Wurfwaffen)
----Wurfwaffen:
--Kaufpreis:
Zunächst werden ganz normal die Werte für die Modifikatoren bestimmt, danach kommt folgendes:
[(mod1 + mod2 + ...) / max_stack] + base_cost = cost
jetzt kommt NPC-Mod., das Ergebnis dann * max_stack = fin_cost
--Verkaufspreis:
Im Prinzip wie Kaufpreis (evtl. abweichende Modifikatoren-Berechnung und ähnliches beachten). Von "fin_cost" wird aber noch der "Verbrauch" abgezogen:
fin_cost - [(cost * 128) / 1024] * (max_stack - stack)
oder eben bei cost >= 65536:
fin_cost - [cost / 1024] * 128 * (max_stack - stack)
--Reparatur:
Der Subtrahend kann wohl auch als Reparaturformel angesehen werden, wobei "cost" wahrscheinlich vom Kaufpreis übernommen wird:
[(cost * 128) / 1024] * (max_stack - stack) = r_cost
oder bei cost >= 65536:
[cost / 1024] * 128 * (max_stack - stack) = r_cost
Bleibt noch zu sagen, daß sich die Angaben auf die normale (unveränderte) Version 1.10 beziehen, obwohl sie (teilweise?) auch für andere Patches gelten könnten.
Im übrigen ist das Beispiel im Link wenigstens für 1.10 falsch, die angegebenen modifier basieren wiederum auf "mindamage" bzw. "maxdamage", deren mult/add-Werte sind 25/122 bzw. 16/94.
Vielleicht bestand ja doch Interesse...
MfG