Files
bamort/backend/models/model_skills.go
T

113 lines
2.9 KiB
Go

package models
import (
"bamort/database"
"strings"
)
type SkFertigkeit struct {
BamortCharTrait
Beschreibung string `json:"beschreibung"`
Fertigkeitswert int `json:"fertigkeitswert"`
BasisWert int `json:"basiswert"`
Bonus int `json:"bonus,omitempty"`
Pp int `json:"pp,omitempty"` //Praxispunkte
Bemerkung string `json:"bemerkung"`
Improvable bool `json:"improvable"`
Category string `json:"category"`
LearningCost LearnCost `gorm:"-" json:"learncost"`
}
type SkWaffenfertigkeit struct {
SkFertigkeit
}
type SkAngeboreneFertigkeit struct {
SkFertigkeit
}
type SkZauber struct {
BamortCharTrait
Beschreibung string `json:"beschreibung"`
Bonus int `json:"bonus"`
Quelle string `json:"quelle"`
}
func (object *SkFertigkeit) TableName() string {
dbPrefix := "char"
return dbPrefix + "_" + "skills"
}
func (object *SkWaffenfertigkeit) TableName() string {
dbPrefix := "char"
return dbPrefix + "_" + "weaponskills"
}
func (object *SkZauber) TableName() string {
dbPrefix := "char"
return dbPrefix + "_" + "spells"
}
func (object *SkFertigkeit) GetSkillByName() *Skill {
var gsmsk Skill
gsmsk.First(object.Name)
if gsmsk.ID == 0 {
return nil
}
return &gsmsk
}
func (object *SkWaffenfertigkeit) GetSkillByName() *Skill {
// For weapon skills, we need to look in the WeaponSkill table
var weaponSkill WeaponSkill
err := weaponSkill.First(object.Name)
if err != nil || weaponSkill.ID == 0 {
return nil
}
// Return the embedded Skill from WeaponSkill
return &weaponSkill.Skill
}
func (object *SkFertigkeit) GetCategory() string {
// Always fetch category from gsmaster, ignoring the category field in char_skills
var gsmsk Skill
gsmsk.First(object.Name)
if gsmsk.ID == 0 {
return "Unkategorisiert"
}
// Fetch category from learning_skill_category_difficulties table
// Order by ID to get the lowest ID when multiple categories exist
var scd SkillCategoryDifficulty
err := database.DB.Where("skill_id = ?", gsmsk.ID).
Order("id ASC").
Preload("SkillCategory").
First(&scd).Error
if err != nil {
// If not found in learning table, fall back to Unkategorisiert
return "Unkategorisiert"
}
// Use the SCategory field which contains the category name
category := strings.TrimSpace(scd.SCategory)
if category == "" {
return "Unkategorisiert"
}
return category
}
func (object *SkWaffenfertigkeit) GetCategory() string {
// Weapon skills don't use the learning_skill_category_difficulties table
// They have their category directly in gsm_weaponskills
var weaponSkill WeaponSkill
err := weaponSkill.First(object.Name)
if err != nil || weaponSkill.ID == 0 {
return "Waffenfertigkeiten"
}
// Trim whitespace from category to handle inconsistent data
category := strings.TrimSpace(weaponSkill.Category)
if category == "" {
return "Waffenfertigkeiten"
}
return category
}