neue Funktion GetAvailableSkillsNewSystem

Nutzt das neue Lernsystem
This commit is contained in:
2025-07-31 10:28:35 +02:00
parent a41fe0df0d
commit 2a956e114a
2 changed files with 89 additions and 1 deletions
+87
View File
@@ -1321,6 +1321,93 @@ func GetRewardTypes(c *gin.Context) {
// GetAvailableSkills gibt alle verfügbaren Fertigkeiten mit Lernkosten zurück
func GetAvailableSkills(c *gin.Context) {
characterID := c.Param("id")
//rewardType := c.Query("reward_type")
var character models.Char
if err := database.DB.Preload("Fertigkeiten").Preload("Erfahrungsschatz").Preload("Vermoegen").First(&character, characterID).Error; err != nil {
respondWithError(c, http.StatusNotFound, "Character not found")
return
}
// Hole alle verfügbaren Fertigkeiten aus der gsmaster Datenbank, aber filtere Placeholder aus
var allSkills []models.Skill
allSkills, err := models.SelectSkills("", "")
if err != nil {
respondWithError(c, http.StatusInternalServerError, "Failed to retrieve skills from gsmaster")
return
}
/*if err := database.DB.Where("name != ?", "Placeholder").Find(&allSkills).Error; err != nil {
respondWithError(c, http.StatusInternalServerError, "Failed to retrieve skills")
return
}
*/
// Erstelle eine Map der bereits gelernten Fertigkeiten
learnedSkills := make(map[string]bool)
for _, skill := range character.Fertigkeiten {
learnedSkills[skill.Name] = true
}
// Organisiere Fertigkeiten nach Kategorien
skillsByCategory := make(map[string][]gin.H)
for _, skill := range allSkills {
// Überspringe bereits gelernte Fertigkeiten
if learnedSkills[skill.Name] {
continue
}
// Überspringe Placeholder-Fertigkeiten (zusätzliche Sicherheit)
if skill.Name == "Placeholder" {
continue
}
request := gsmaster.LernCostRequest{
CharId: character.ID,
Name: skill.Name,
CurrentLevel: 0, // Nicht gelernt
TargetLevel: 1, // Auf Level 1 lernen
Type: "skill",
Action: "learn",
UsePP: 0, // Keine PP für neue Fertigkeiten
UseGold: 0, // Keine Gold für neue Fertigkeiten
Reward: &[]string{"default"}[0], // Belohnungstyp aus Query-Parameter
}
levelResult := &gsmaster.SkillCostResultNew{}
remainingPP := request.UsePP
remainingGold := request.UseGold
spellInfo := &models.SkillLearningInfo{}
// Berechne Lernkosten mit GetLernCostNextLevel
//epCost, goldCost := calculateSkillLearningCosts(skill, character, rewardType)
err := calculateSkillLearnCostNewSystem(&request, levelResult, &remainingPP, &remainingGold, spellInfo)
epCost := 10000
goldCost := 50000
if err == nil {
epCost = levelResult.EP
goldCost = levelResult.GoldCost
}
skillInfo := gin.H{
"name": skill.Name,
"epCost": epCost,
"goldCost": goldCost,
}
category := skill.Category
if category == "" {
category = "Sonstige"
}
skillsByCategory[category] = append(skillsByCategory[category], skillInfo)
}
c.JSON(http.StatusOK, gin.H{
"skills_by_category": skillsByCategory,
})
}
// GetAvailableSkills gibt alle verfügbaren Fertigkeiten mit Lernkosten zurück
func GetAvailableSkillsNewSystem(c *gin.Context) {
characterID := c.Param("id")
rewardType := c.Query("reward_type")
+2 -1
View File
@@ -31,7 +31,8 @@ func RegisterRoutes(r *gin.RouterGroup) {
charGrp.POST("/:id/learn-spell", LearnSpell) // Zauber lernen
// Fertigkeiten-Information
charGrp.GET("/:id/available-skills", GetAvailableSkills) // Verfügbare Fertigkeiten mit Kosten (bereits gelernte ausgeschlossen)
charGrp.GET("/:id/available-skills", GetAvailableSkills) // Verfügbare Fertigkeiten mit Kosten (bereits gelernte ausgeschlossen)
charGrp.GET("/:id/available-skills-new", GetAvailableSkillsNewSystem) // Verfügbare Fertigkeiten mit Kosten (bereits gelernte ausgeschlossen)
// Belohnungsarten für verschiedene Lernszenarien
charGrp.GET("/:id/reward-types", GetRewardTypes) // Verfügbare Belohnungsarten je nach Kontext