add and remove PP for Weaponskill fixed

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
2026-05-01 14:38:49 +02:00
parent dc42cd7f24
commit a8fc01b427
@@ -1,8 +1,8 @@
package character package character
import ( import (
"bamort/database"
"bamort/bmrt/models" "bamort/bmrt/models"
"bamort/database"
"fmt" "fmt"
"net/http" "net/http"
@@ -160,21 +160,30 @@ func AddPracticePoint(c *gin.Context) {
} }
// Praxispunkt zur entsprechenden Fertigkeit hinzufügen // Praxispunkt zur entsprechenden Fertigkeit hinzufügen
found := false foundSkill := false
for i := range character.Fertigkeiten { for i := range character.Fertigkeiten {
if character.Fertigkeiten[i].Name == targetSkillName { if character.Fertigkeiten[i].Name == targetSkillName {
character.Fertigkeiten[i].Pp += request.Amount character.Fertigkeiten[i].Pp += request.Amount
found = true foundSkill = true
break
}
}
foundWeaponSkill := false
for i := range character.Waffenfertigkeiten {
if character.Waffenfertigkeiten[i].Name == targetSkillName {
character.Waffenfertigkeiten[i].Pp += request.Amount
foundWeaponSkill = true
break break
} }
} }
if !found { if !foundSkill && !foundWeaponSkill {
respondWithError(c, http.StatusBadRequest, "Fertigkeit nicht gefunden: "+targetSkillName) respondWithError(c, http.StatusBadRequest, "Fertigkeit nicht gefunden: "+targetSkillName)
return return
} }
// Fertigkeiten explizit speichern // Fertigkeiten explizit speichern
if foundSkill {
for i := range character.Fertigkeiten { for i := range character.Fertigkeiten {
if character.Fertigkeiten[i].Name == targetSkillName { if character.Fertigkeiten[i].Name == targetSkillName {
if err := database.DB.Save(&character.Fertigkeiten[i]).Error; err != nil { if err := database.DB.Save(&character.Fertigkeiten[i]).Error; err != nil {
@@ -184,6 +193,18 @@ func AddPracticePoint(c *gin.Context) {
break break
} }
} }
}
if foundWeaponSkill {
for i := range character.Waffenfertigkeiten {
if character.Waffenfertigkeiten[i].Name == targetSkillName {
if err := database.DB.Save(&character.Waffenfertigkeiten[i]).Error; err != nil {
respondWithError(c, http.StatusInternalServerError, "Fehler beim Speichern der Waffenfertigkeit: "+err.Error())
return
}
break
}
}
}
// Aktualisierte Praxispunkte sammeln // Aktualisierte Praxispunkte sammeln
var practicePoints []PracticePointResponse var practicePoints []PracticePointResponse
@@ -196,12 +217,23 @@ func AddPracticePoint(c *gin.Context) {
} }
} }
for _, skill := range character.Waffenfertigkeiten {
if skill.Pp > 0 {
practicePoints = append(practicePoints, PracticePointResponse{
SkillName: skill.Name,
Amount: skill.Pp,
})
}
}
// Erfolgreiche Response mit Details zurückgeben // Erfolgreiche Response mit Details zurückgeben
var message string var message string
if isSpellFlag { if isSpellFlag {
message = "Praxispunkt für Zauber '" + request.SkillName + "' wurde der Zaubergruppe '" + targetSkillName + "' hinzugefügt" message = "Praxispunkt für Zauber '" + request.SkillName + "' wurde der Zaubergruppe '" + targetSkillName + "' hinzugefügt"
} else { } else if foundSkill {
message = "Praxispunkt für Fertigkeit '" + targetSkillName + "' hinzugefügt" message = "Praxispunkt für Fertigkeit '" + targetSkillName + "' hinzugefügt"
} else if foundWeaponSkill {
message = "Praxispunkt für Waffenfertigkeit '" + targetSkillName + "' hinzugefügt"
} }
response := PracticePointActionResponse{ response := PracticePointActionResponse{
@@ -263,12 +295,25 @@ func UsePracticePoint(c *gin.Context) {
} }
// Praxispunkt von der entsprechenden Fertigkeit abziehen // Praxispunkt von der entsprechenden Fertigkeit abziehen
found := false foundSkill := false
for i := range character.Fertigkeiten { for i := range character.Fertigkeiten {
if character.Fertigkeiten[i].Name == targetSkillName { if character.Fertigkeiten[i].Name == targetSkillName {
if character.Fertigkeiten[i].Pp >= request.Amount { if character.Fertigkeiten[i].Pp >= request.Amount {
character.Fertigkeiten[i].Pp -= request.Amount character.Fertigkeiten[i].Pp -= request.Amount
found = true foundSkill = true
} else {
respondWithError(c, http.StatusBadRequest, "Nicht genügend Praxispunkte verfügbar")
return
}
break
}
}
foundWeaponSkill := false
for i := range character.Waffenfertigkeiten {
if character.Waffenfertigkeiten[i].Name == targetSkillName {
if character.Waffenfertigkeiten[i].Pp >= request.Amount {
character.Waffenfertigkeiten[i].Pp -= request.Amount
foundWeaponSkill = true
} else { } else {
respondWithError(c, http.StatusBadRequest, "Nicht genügend Praxispunkte verfügbar") respondWithError(c, http.StatusBadRequest, "Nicht genügend Praxispunkte verfügbar")
return return
@@ -277,12 +322,13 @@ func UsePracticePoint(c *gin.Context) {
} }
} }
if !found { if !foundSkill && !foundWeaponSkill {
respondWithError(c, http.StatusBadRequest, "Fertigkeit nicht gefunden: "+targetSkillName) respondWithError(c, http.StatusBadRequest, "Fertigkeit nicht gefunden: "+targetSkillName)
return return
} }
// Fertigkeiten explizit speichern // Fertigkeiten explizit speichern
if foundSkill {
for i := range character.Fertigkeiten { for i := range character.Fertigkeiten {
if character.Fertigkeiten[i].Name == targetSkillName { if character.Fertigkeiten[i].Name == targetSkillName {
if err := database.DB.Save(&character.Fertigkeiten[i]).Error; err != nil { if err := database.DB.Save(&character.Fertigkeiten[i]).Error; err != nil {
@@ -292,6 +338,18 @@ func UsePracticePoint(c *gin.Context) {
break break
} }
} }
}
if foundWeaponSkill {
for i := range character.Waffenfertigkeiten {
if character.Waffenfertigkeiten[i].Name == targetSkillName {
if err := database.DB.Save(&character.Waffenfertigkeiten[i]).Error; err != nil {
respondWithError(c, http.StatusInternalServerError, "Fehler beim Speichern der Waffenfertigkeit: "+err.Error())
return
}
break
}
}
}
// Erfolgreiche Antwort mit detaillierten Informationen und aktueller PP-Liste // Erfolgreiche Antwort mit detaillierten Informationen und aktueller PP-Liste
var practicePoints []PracticePointResponse var practicePoints []PracticePointResponse
@@ -304,9 +362,18 @@ func UsePracticePoint(c *gin.Context) {
} }
} }
for _, skill := range character.Waffenfertigkeiten {
if skill.Pp > 0 {
practicePoints = append(practicePoints, PracticePointResponse{
SkillName: skill.Name,
Amount: skill.Pp,
})
}
}
response := PracticePointActionResponse{ response := PracticePointActionResponse{
Success: true, Success: true,
Message: fmt.Sprintf("%d Übungspunkte erfolgreich von %s verwendet", request.Amount, targetSkillName), Message: fmt.Sprintf("%d Praxispunkte erfolgreich von %s verwendet/reduziert", request.Amount, targetSkillName),
RequestedSkill: request.SkillName, RequestedSkill: request.SkillName,
TargetSkill: targetSkillName, TargetSkill: targetSkillName,
IsSpell: isSpellFlag, IsSpell: isSpellFlag,