Multilevel lernkosten
This commit is contained in:
@@ -65,25 +65,10 @@ type MultiLevelCostResponse struct {
|
||||
CanAffordTotal bool `json:"can_afford_total"`
|
||||
}
|
||||
|
||||
type LernCostRequest struct {
|
||||
CharId uint `json:"char_id" binding:"required"` // Charakter-ID
|
||||
Name string `json:"name" binding:"required"` // Name der Fertigkeit / des Zaubers
|
||||
CurrentLevel int `json:"current_level,omitempty"` // Aktueller Wert (nur für Verbesserung)
|
||||
Type string `json:"type" binding:"required,oneof=skill spell weapon"` // 'skill', 'spell' oder 'weapon' Waffenfertigkeiten sind normale Fertigkeiten (evtl. kann hier später der Name der Waffe angegeben werden )
|
||||
Action string `json:"action" binding:"required,oneof=learn improve"` // 'learn' oder 'improve'
|
||||
TargetLevel int `json:"target_level,omitempty"` // Zielwert (optional, für Kostenberechnung bis zu einem bestimmten Level)
|
||||
UsePP int `json:"use_pp,omitempty"` // Anzahl der zu verwendenden Praxispunkte
|
||||
// Belohnungsoptionen
|
||||
Reward *string `json:"reward" binding:"required,oneof=default noGold halveep halveepnoGold"` // Belohnungsoptionen Lernen als Belohnung
|
||||
// default
|
||||
// learn: ohne Gold
|
||||
// improve/spell: halbe EP kein Gold
|
||||
}
|
||||
|
||||
// GetLernCost
|
||||
func GetLernCost(c *gin.Context) {
|
||||
// Request-Parameter abrufen
|
||||
var request LernCostRequest
|
||||
var request gsmaster.LernCostRequest
|
||||
if err := c.ShouldBindJSON(&request); err != nil {
|
||||
respondWithError(c, http.StatusBadRequest, "Ungültige Anfrageparameter: "+err.Error())
|
||||
return
|
||||
@@ -102,37 +87,22 @@ func GetLernCost(c *gin.Context) {
|
||||
costResult.SkillName = strings.TrimSpace(request.Name)
|
||||
costResult.Category = gsmaster.GetSkillCategory(request.Name)
|
||||
costResult.Difficulty = gsmaster.GetSkillDifficulty(costResult.Category, costResult.SkillName)
|
||||
|
||||
switch {
|
||||
case request.Action == "learn" && request.Type == "skill":
|
||||
err := gsmaster.CalcSkillLernCost(&costResult, request.Reward)
|
||||
var response []gsmaster.SkillCostResultNew
|
||||
for i := request.CurrentLevel + 1; i <= 18; i++ {
|
||||
response = append(response, gsmaster.SkillCostResultNew{
|
||||
CharacterID: costResult.CharacterID,
|
||||
CharacterClass: costResult.CharacterClass,
|
||||
SkillName: costResult.SkillName,
|
||||
Category: costResult.Category,
|
||||
Difficulty: costResult.Difficulty,
|
||||
TargetLevel: i})
|
||||
err := gsmaster.GetLernCostNextLevel(&request, &response[i], request.Reward, i, character.Typ)
|
||||
if err != nil {
|
||||
respondWithError(c, http.StatusBadRequest, "Fehler bei der Kostenberechnung: "+err.Error())
|
||||
return
|
||||
}
|
||||
// extrakosten für elfen
|
||||
if character.Typ == "Elf" {
|
||||
costResult.EP += 6
|
||||
}
|
||||
case request.Action == "learn" && request.Type == "spell":
|
||||
err := gsmaster.CalcSpellLernCost(&costResult, request.Reward)
|
||||
if err != nil {
|
||||
respondWithError(c, http.StatusBadRequest, "Fehler bei der Kostenberechnung: "+err.Error())
|
||||
return
|
||||
}
|
||||
// extrakosten für elfen
|
||||
if character.Typ == "Elf" {
|
||||
costResult.EP += 6
|
||||
}
|
||||
case request.Action == "improve" && request.Type == "skill":
|
||||
err := gsmaster.CalcSkillImproveCost(&costResult, request.CurrentLevel, request.Reward)
|
||||
if err != nil {
|
||||
respondWithError(c, http.StatusBadRequest, "Fehler bei der Kostenberechnung: "+err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
default:
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, costResult)
|
||||
}
|
||||
|
||||
@@ -645,7 +615,7 @@ func applyPPReduction(request *SkillCostRequest, cost *gsmaster.LearnCost, avail
|
||||
return finalEP, finalLE, reduction
|
||||
}
|
||||
|
||||
func CalcSkillLearnCost(req *LernCostRequest, skillCostInfo *gsmaster.SkillCostResultNew) error {
|
||||
func CalcSkillLearnCost(req *gsmaster.LernCostRequest, skillCostInfo *gsmaster.SkillCostResultNew) error {
|
||||
// Fallback-Werte für Skills ohne definierte Kategorie/Schwierigkeit
|
||||
|
||||
result, err := gsmaster.CalculateSkillLearningCosts(skillCostInfo.CharacterClass, skillCostInfo.Category, skillCostInfo.Difficulty)
|
||||
|
||||
@@ -431,6 +431,7 @@ type SkillCostResultNew struct {
|
||||
LE int `json:"le"`
|
||||
GoldCost int `json:"gold_cost"`
|
||||
PPUsed int `json:"pp_used"`
|
||||
TargetLevel int `json:"target_level"`
|
||||
Details map[string]interface{} `json:"details"`
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,21 @@ import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
type LernCostRequest struct {
|
||||
CharId uint `json:"char_id" binding:"required"` // Charakter-ID
|
||||
Name string `json:"name" binding:"required"` // Name der Fertigkeit / des Zaubers
|
||||
CurrentLevel int `json:"current_level,omitempty"` // Aktueller Wert (nur für Verbesserung)
|
||||
Type string `json:"type" binding:"required,oneof=skill spell weapon"` // 'skill', 'spell' oder 'weapon' Waffenfertigkeiten sind normale Fertigkeiten (evtl. kann hier später der Name der Waffe angegeben werden )
|
||||
Action string `json:"action" binding:"required,oneof=learn improve"` // 'learn' oder 'improve'
|
||||
TargetLevel int `json:"target_level,omitempty"` // Zielwert (optional, für Kostenberechnung bis zu einem bestimmten Level)
|
||||
UsePP int `json:"use_pp,omitempty"` // Anzahl der zu verwendenden Praxispunkte
|
||||
// Belohnungsoptionen
|
||||
Reward *string `json:"reward" binding:"required,oneof=default noGold halveep halveepnoGold"` // Belohnungsoptionen Lernen als Belohnung
|
||||
// default
|
||||
// learn: ohne Gold
|
||||
// improve/spell: halbe EP kein Gold
|
||||
}
|
||||
|
||||
// DifficultyData enthält Skills und Trainingskosten für eine Schwierigkeitsstufe
|
||||
type DifficultyData struct {
|
||||
LearnCost int `json:"learncosts"`
|
||||
@@ -781,3 +796,38 @@ func CalcSpellLernCost(costResult *SkillCostResultNew, reward *string) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetLernCostNextLevel(request *LernCostRequest, costResult *SkillCostResultNew, reward *string, level int, characterTyp string) error {
|
||||
// Diese Funktion berechnet die Kosten für das Erlernen oder Verbessern einer Fertigkeit oder eines Zaubers
|
||||
// abhängig von der Aktion (learn/improve) und der Belohnung.
|
||||
// die Berechnung erfolgt immer für genau 1 Level
|
||||
// Diese Funktion wird in GetLernCost aufgerufen.
|
||||
switch {
|
||||
case request.Action == "learn" && request.Type == "skill":
|
||||
err := CalcSkillLernCost(costResult, request.Reward)
|
||||
if err != nil {
|
||||
return fmt.Errorf("fehler bei der Kostenberechnung: %w", err)
|
||||
}
|
||||
// extrakosten für elfen
|
||||
if characterTyp == "Elf" {
|
||||
costResult.EP += 6
|
||||
}
|
||||
case request.Action == "learn" && request.Type == "spell":
|
||||
err := CalcSpellLernCost(costResult, request.Reward)
|
||||
if err != nil {
|
||||
return fmt.Errorf("fehler bei der Kostenberechnung: %w", err)
|
||||
}
|
||||
// extrakosten für elfen
|
||||
if characterTyp == "Elf" {
|
||||
costResult.EP += 6
|
||||
}
|
||||
case request.Action == "improve" && request.Type == "skill":
|
||||
err := CalcSkillImproveCost(costResult, request.CurrentLevel, request.Reward)
|
||||
if err != nil {
|
||||
return fmt.Errorf("fehler bei der Kostenberechnung: %w", err)
|
||||
}
|
||||
|
||||
default:
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user