3a7e699507
calculation of Bonus values defence zaubern and other values that depend on base stats
2.0 KiB
2.0 KiB
Derived Values Implementation
Summary
Static derived values (Resistenz Körper, Resistenz Geist, Abwehr, Zaubern, Raufen) are now stored in the database as part of the Char model. These values can increase when a new grade is reached.
Bonus values are calculated on-demand from the character's attributes using the CalculateBonuses() method.
Database Fields Added to Char
ResistenzKoerper(int) - Resistenz Körper base valueResistenzGeist(int) - Resistenz Geist base valueAbwehr(int) - Abwehr base valueZaubern(int) - Zaubern base valueRaufen(int) - Raufen base value
Calculated Bonuses (Not Stored)
The following bonuses are calculated from attributes and are NOT stored in the database:
AusdauerBonus= Ko/10 + St/20SchadensBonus= St/20 + Gs/30 - 3AngriffsBonus= attribute bonus from GsAbwehrBonus= attribute bonus from GwZauberBonus= attribute bonus from ZtResistenzBonusKoerper= attribute/race bonus from KoResistenzBonusGeist= attribute/race bonus from In
Usage Example
// Load character from database
var char models.Char
err := char.FirstID("123")
// Get static derived values (stored in DB)
resistenzKoerper := char.ResistenzKoerper
abwehr := char.Abwehr
// Calculate bonuses from attributes (on-demand)
bonuses := char.CalculateBonuses()
abwehrBonus := bonuses.AbwehrBonus
zauberBonus := bonuses.ZauberBonus
// Total values
totalAbwehr := char.Abwehr + bonuses.AbwehrBonus
totalZaubern := char.Zaubern + bonuses.ZauberBonus
When Grade Increases
When a character reaches a new grade, the static derived values may increase. To update them:
// After grade increase, recalculate and update static values
char.Grad++
char.ResistenzKoerper++ // or apply the appropriate grade bonus
char.Abwehr++
// Save updated character
database.DB.Save(&char)
Bonuses will automatically reflect any attribute changes without needing to update the database, as they are calculated on-demand from the Eigenschaften values.