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
import (
"bamort/database"
"bamort/bmrt/models"
"bamort/database"
"fmt"
"net/http"
@@ -160,28 +160,49 @@ func AddPracticePoint(c *gin.Context) {
}
// Praxispunkt zur entsprechenden Fertigkeit hinzufügen
found := false
foundSkill := false
for i := range character.Fertigkeiten {
if character.Fertigkeiten[i].Name == targetSkillName {
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
}
}
if !found {
if !foundSkill && !foundWeaponSkill {
respondWithError(c, http.StatusBadRequest, "Fertigkeit nicht gefunden: "+targetSkillName)
return
}
// Fertigkeiten explizit speichern
for i := range character.Fertigkeiten {
if character.Fertigkeiten[i].Name == targetSkillName {
if err := database.DB.Save(&character.Fertigkeiten[i]).Error; err != nil {
respondWithError(c, http.StatusInternalServerError, "Fehler beim Speichern der Fertigkeit: "+err.Error())
return
if foundSkill {
for i := range character.Fertigkeiten {
if character.Fertigkeiten[i].Name == targetSkillName {
if err := database.DB.Save(&character.Fertigkeiten[i]).Error; err != nil {
respondWithError(c, http.StatusInternalServerError, "Fehler beim Speichern der Fertigkeit: "+err.Error())
return
}
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
}
break
}
}
@@ -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
var message string
if isSpellFlag {
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"
} else if foundWeaponSkill {
message = "Praxispunkt für Waffenfertigkeit '" + targetSkillName + "' hinzugefügt"
}
response := PracticePointActionResponse{
@@ -263,12 +295,25 @@ func UsePracticePoint(c *gin.Context) {
}
// Praxispunkt von der entsprechenden Fertigkeit abziehen
found := false
foundSkill := false
for i := range character.Fertigkeiten {
if character.Fertigkeiten[i].Name == targetSkillName {
if 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 {
respondWithError(c, http.StatusBadRequest, "Nicht genügend Praxispunkte verfügbar")
return
@@ -277,19 +322,32 @@ func UsePracticePoint(c *gin.Context) {
}
}
if !found {
if !foundSkill && !foundWeaponSkill {
respondWithError(c, http.StatusBadRequest, "Fertigkeit nicht gefunden: "+targetSkillName)
return
}
// Fertigkeiten explizit speichern
for i := range character.Fertigkeiten {
if character.Fertigkeiten[i].Name == targetSkillName {
if err := database.DB.Save(&character.Fertigkeiten[i]).Error; err != nil {
respondWithError(c, http.StatusInternalServerError, "Fehler beim Speichern der Fertigkeit: "+err.Error())
return
if foundSkill {
for i := range character.Fertigkeiten {
if character.Fertigkeiten[i].Name == targetSkillName {
if err := database.DB.Save(&character.Fertigkeiten[i]).Error; err != nil {
respondWithError(c, http.StatusInternalServerError, "Fehler beim Speichern der Fertigkeit: "+err.Error())
return
}
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
}
break
}
}
@@ -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{
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,
TargetSkill: targetSkillName,
IsSpell: isSpellFlag,