3a7e699507
calculation of Bonus values defence zaubern and other values that depend on base stats
64 lines
2.0 KiB
Markdown
64 lines
2.0 KiB
Markdown
# 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 value
|
|
- `ResistenzGeist` (int) - Resistenz Geist base value
|
|
- `Abwehr` (int) - Abwehr base value
|
|
- `Zaubern` (int) - Zaubern base value
|
|
- `Raufen` (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/20
|
|
- `SchadensBonus` = St/20 + Gs/30 - 3
|
|
- `AngriffsBonus` = attribute bonus from Gs
|
|
- `AbwehrBonus` = attribute bonus from Gw
|
|
- `ZauberBonus` = attribute bonus from Zt
|
|
- `ResistenzBonusKoerper` = attribute/race bonus from Ko
|
|
- `ResistenzBonusGeist` = attribute/race bonus from In
|
|
|
|
## Usage Example
|
|
|
|
```go
|
|
// 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:
|
|
|
|
```go
|
|
// 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.
|