2025-07-24 07:39:43 +02:00
package gsmaster
2025-07-24 19:18:32 +02:00
import (
2025-07-27 23:50:19 +02:00
"bamort/models"
2025-07-24 19:18:32 +02:00
"fmt"
)
2025-07-24 07:39:43 +02:00
2025-07-24 20:03:16 +02:00
type LernCostRequest struct {
2025-08-21 20:57:55 +02:00
CharId uint ` json:"char_id" binding:"omitempty" ` // Charakter-ID
2025-07-31 13:43:29 +02:00
Name string ` json:"name" binding:"omitempty" ` // Name der Fertigkeit / des Zaubers
2025-07-24 20:03:16 +02:00
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
2025-07-25 08:12:39 +02:00
UseGold int ` json:"use_gold,omitempty" ` // Anzahl der zu verwendenden Goldstücke
2025-07-24 20:03:16 +02:00
// 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
}
2025-07-24 07:39:43 +02:00
// DifficultyData enthält Skills und Trainingskosten für eine Schwierigkeitsstufe
type DifficultyData struct {
LearnCost int ` json:"learncosts" `
Skills [ ] string ` json:"skills" `
TrainCosts map [ int ] int ` json:"traincosts" `
}
// LearningCostsTable strukturiert die Daten aus Lerntabellen.md
type LearningCostsTable2 struct {
// EP-Kosten für 1 Trainingseinheit (TE) pro Charakterklasse und Fertigkeitskategorie
EPPerTE map [ string ] map [ string ] int
// EP-Kosten für 1 Lerneinheit (LE) für Zauber pro Charakterklasse und Zauberschule
2025-07-24 19:18:32 +02:00
SpellEPPerLE map [ string ] map [ string ] int
SpellLEPerLevel map [ int ] int
2025-07-24 07:39:43 +02:00
// LE-Kosten für Fertigkeiten basierend auf Schwierigkeit
BaseLearnCost map [ string ] map [ string ] int
// TE-Kosten für Verbesserungen basierend auf Kategorie, Schwierigkeit und aktuellem Wert
ImprovementCost map [ string ] map [ string ] DifficultyData
}
// learningCostsData enthält alle statischen Lerntabellendaten
var learningCostsData = & LearningCostsTable2 {
// EP-Kosten für 1 Trainingseinheit (TE) nach Klasse und Kategorie
EPPerTE : map [ string ] map [ string ] int {
"As" : { // Assassine
"Alltag" : 20 ,
"Freiland" : 20 ,
"Halbwelt" : 20 ,
"Kampf" : 30 ,
"Körper" : 10 ,
"Sozial" : 20 ,
"Unterwelt" : 10 ,
"Waffen" : 20 ,
"Wissen" : 20 ,
} ,
"Bb" : { // Barbar
"Alltag" : 20 ,
"Freiland" : 10 ,
"Halbwelt" : 30 ,
"Kampf" : 10 ,
"Körper" : 10 ,
"Sozial" : 30 ,
"Unterwelt" : 30 ,
"Waffen" : 20 ,
"Wissen" : 40 ,
} ,
"Gl" : { // Glücksritter
"Alltag" : 20 ,
"Freiland" : 30 ,
"Halbwelt" : 10 ,
"Kampf" : 20 ,
"Körper" : 30 ,
"Sozial" : 10 ,
"Unterwelt" : 30 ,
"Waffen" : 20 ,
"Wissen" : 20 ,
} ,
"Hä" : { // Händler
"Alltag" : 10 ,
"Freiland" : 20 ,
"Halbwelt" : 20 ,
"Kampf" : 20 ,
"Körper" : 20 ,
"Sozial" : 10 ,
"Unterwelt" : 40 ,
"Waffen" : 20 ,
"Wissen" : 20 ,
} ,
"Kr" : { // Krieger
"Alltag" : 20 ,
"Freiland" : 30 ,
"Halbwelt" : 30 ,
"Kampf" : 10 ,
"Körper" : 20 ,
"Sozial" : 20 ,
"Unterwelt" : 30 ,
"Waffen" : 10 ,
"Wissen" : 40 ,
} ,
"Sp" : { // Spitzbube
"Alltag" : 20 ,
"Freiland" : 30 ,
"Halbwelt" : 10 ,
"Kampf" : 40 ,
"Körper" : 10 ,
"Sozial" : 10 ,
"Unterwelt" : 10 ,
"Waffen" : 20 ,
"Wissen" : 30 ,
} ,
"Wa" : { // Waldläufer
"Alltag" : 20 ,
"Freiland" : 10 ,
"Halbwelt" : 20 ,
"Kampf" : 20 ,
"Körper" : 10 ,
"Sozial" : 30 ,
"Unterwelt" : 30 ,
"Waffen" : 20 ,
"Wissen" : 30 ,
} ,
"Ba" : { // Barde
"Alltag" : 10 ,
"Freiland" : 20 ,
"Halbwelt" : 20 ,
"Kampf" : 40 ,
"Körper" : 20 ,
"Sozial" : 30 ,
"Unterwelt" : 40 ,
"Waffen" : 40 ,
"Wissen" : 10 ,
} ,
"Or" : { // Ordenskrieger
"Alltag" : 20 ,
"Freiland" : 30 ,
"Halbwelt" : 40 ,
"Kampf" : 10 ,
"Körper" : 20 ,
"Sozial" : 20 ,
"Unterwelt" : 40 ,
"Waffen" : 10 ,
"Wissen" : 20 ,
} ,
"Dr" : { // Druide
"Alltag" : 20 ,
"Freiland" : 10 ,
"Halbwelt" : 30 ,
"Kampf" : 40 ,
"Körper" : 20 ,
"Sozial" : 30 ,
"Unterwelt" : 40 ,
"Waffen" : 40 ,
"Wissen" : 10 ,
} ,
"Hx" : { // Hexer
"Alltag" : 20 ,
"Freiland" : 20 ,
"Halbwelt" : 30 ,
"Kampf" : 40 ,
"Körper" : 30 ,
"Sozial" : 20 ,
"Unterwelt" : 30 ,
"Waffen" : 40 ,
"Wissen" : 20 ,
} ,
"Ma" : { // Magier
"Alltag" : 20 ,
"Freiland" : 30 ,
"Halbwelt" : 40 ,
"Kampf" : 40 ,
"Körper" : 30 ,
"Sozial" : 30 ,
"Unterwelt" : 40 ,
"Waffen" : 40 ,
"Wissen" : 10 ,
} ,
"PB" : { // Priester Beschützer
"Alltag" : 20 ,
"Freiland" : 30 ,
"Halbwelt" : 30 ,
"Kampf" : 40 ,
"Körper" : 30 ,
"Sozial" : 10 ,
"Unterwelt" : 40 ,
"Waffen" : 40 ,
"Wissen" : 20 ,
} ,
"PS" : { // Priester Streiter
"Alltag" : 20 ,
"Freiland" : 30 ,
"Halbwelt" : 40 ,
"Kampf" : 30 ,
"Körper" : 30 ,
"Sozial" : 30 ,
"Unterwelt" : 40 ,
"Waffen" : 30 ,
"Wissen" : 20 ,
} ,
"Sc" : { // Schamane
"Alltag" : 20 ,
"Freiland" : 10 ,
"Halbwelt" : 40 ,
"Kampf" : 40 ,
"Körper" : 20 ,
"Sozial" : 20 ,
"Unterwelt" : 40 ,
"Waffen" : 40 ,
"Wissen" : 20 ,
} ,
} ,
// EP-Kosten für 1 Lerneinheit (LE) für Zauber pro Charakterklasse und Zauberschule
SpellEPPerLE : map [ string ] map [ string ] int {
"Dr" : { // Druide
"Beherrschen" : 90 ,
"Bewegen" : 60 ,
"Erkennen" : 120 ,
"Erschaffen" : 90 ,
"Formen" : 60 ,
"Verändern" : 90 ,
"Zerstören" : 120 ,
"Wunder" : 0 , // Nicht verfügbar
"Dweomer" : 30 ,
"Lied" : 0 , // Nicht verfügbar
} ,
"Hx" : { // Hexer
"Beherrschen" : 30 ,
"Bewegen" : 90 ,
"Erkennen" : 90 ,
"Erschaffen" : 90 ,
"Formen" : 60 ,
"Verändern" : 30 ,
"Zerstören" : 60 ,
"Wunder" : 0 , // Nicht verfügbar
"Dweomer" : 90 ,
"Lied" : 0 , // Nicht verfügbar
} ,
"Ma" : { // Magier (* = Spezialgebiet für 30 EP)
"Beherrschen" : 60 , // *30
"Bewegen" : 60 , // *30
"Erkennen" : 60 , // *30
"Erschaffen" : 60 , // *30
"Formen" : 60 , // *30
"Verändern" : 60 , // *30
"Zerstören" : 60 , // *30
"Wunder" : 0 , // Nicht verfügbar
"Dweomer" : 120 ,
"Lied" : 0 , // Nicht verfügbar
} ,
"PB" : { // Priester Beschützer
"Beherrschen" : 90 ,
"Bewegen" : 90 ,
"Erkennen" : 60 ,
"Erschaffen" : 90 ,
"Formen" : 90 ,
"Verändern" : 90 ,
"Zerstören" : 90 ,
"Wunder" : 30 ,
"Dweomer" : 120 ,
"Lied" : 0 , // Nicht verfügbar
} ,
"PS" : { // Priester Streiter
"Beherrschen" : 90 ,
"Bewegen" : 90 ,
"Erkennen" : 90 ,
"Erschaffen" : 90 ,
"Formen" : 90 ,
"Verändern" : 90 ,
"Zerstören" : 60 ,
"Wunder" : 30 ,
"Dweomer" : 120 ,
"Lied" : 0 , // Nicht verfügbar
} ,
"Sc" : { // Schamane
"Beherrschen" : 90 ,
"Bewegen" : 90 ,
"Erkennen" : 60 ,
"Erschaffen" : 60 ,
"Formen" : 90 ,
"Verändern" : 90 ,
"Zerstören" : 90 ,
"Wunder" : 30 ,
"Dweomer" : 120 ,
"Lied" : 0 , // Nicht verfügbar
} ,
"Ba" : { // Barde
"Beherrschen" : 0 , // Nicht verfügbar
"Bewegen" : 0 , // Nicht verfügbar
"Erkennen" : 0 , // Nicht verfügbar
"Erschaffen" : 0 , // Nicht verfügbar
"Formen" : 0 , // Nicht verfügbar
"Verändern" : 0 , // Nicht verfügbar
"Zerstören" : 0 , // Nicht verfügbar
"Wunder" : 0 , // Nicht verfügbar
"Dweomer" : 0 , // Nicht verfügbar
"Lied" : 30 ,
} ,
} ,
2025-07-24 19:18:32 +02:00
// Lernen von Zaubern
// LE pro Stufe des Zaubers
SpellLEPerLevel : map [ int ] int { 1 : 1 , 2 : 1 , 3 : 2 , 4 : 3 , 5 : 5 , 6 : 10 , 7 : 15 , 8 : 20 , 9 : 30 , 10 : 40 , 11 : 60 , 12 : 90 } ,
2025-07-24 07:39:43 +02:00
// TE-Kosten für Verbesserungen basierend auf Kategorie, Schwierigkeit und aktuellem Wert
ImprovementCost : map [ string ] map [ string ] DifficultyData {
"Alltag" : {
"leicht" : DifficultyData {
LearnCost : 1 ,
Skills : [ ] string { "Klettern" , "Reiten" , "Seilkunst" , "Bootfahren" , "Glücksspiel" , "Wagenlenken" , "Musizieren" } ,
TrainCosts : map [ int ] int { 9 : 0 , 10 : 0 , 11 : 0 , 12 : 0 , 13 : 1 , 14 : 2 , 15 : 5 , 16 : 10 , 17 : 10 , 18 : 20 } ,
} ,
"normal" : DifficultyData {
LearnCost : 1 ,
Skills : [ ] string { "Schreiben" , "Sprache" } ,
TrainCosts : map [ int ] int { 9 : 1 , 10 : 1 , 11 : 1 , 12 : 1 , 13 : 2 , 14 : 2 , 15 : 5 , 16 : 10 , 17 : 10 , 18 : 20 } ,
} ,
"schwer" : DifficultyData {
LearnCost : 2 ,
Skills : [ ] string { "Erste Hilfe" , "Etikette" } ,
TrainCosts : map [ int ] int { 9 : 2 , 10 : 2 , 11 : 5 , 12 : 5 , 13 : 10 , 14 : 10 , 15 : 20 , 16 : 20 , 17 : 50 , 18 : 50 } ,
} ,
"sehr schwer" : DifficultyData {
LearnCost : 10 ,
Skills : [ ] string { "Gerätekunde" , "Geschäftssinn" } ,
TrainCosts : map [ int ] int { 9 : 5 , 10 : 5 , 11 : 10 , 12 : 10 , 13 : 20 , 14 : 20 , 15 : 50 , 16 : 50 , 17 : 100 , 18 : 100 } ,
} ,
} ,
"Freiland" : {
"leicht" : DifficultyData {
LearnCost : 1 ,
Skills : [ ] string { "Überleben" } ,
TrainCosts : map [ int ] int { 9 : 1 , 10 : 1 , 11 : 1 , 12 : 2 , 13 : 2 , 14 : 2 , 15 : 5 , 16 : 5 , 17 : 10 , 18 : 10 } ,
} ,
"normal" : DifficultyData {
LearnCost : 2 ,
Skills : [ ] string { "Naturkunde" , "Pflanzenkunde" , "Tierkunde" } ,
TrainCosts : map [ int ] int { 9 : 2 , 10 : 5 , 11 : 5 , 12 : 10 , 13 : 10 , 14 : 20 , 15 : 20 , 16 : 20 , 17 : 50 , 18 : 50 } ,
} ,
"schwer" : DifficultyData {
LearnCost : 4 ,
Skills : [ ] string { "Schleichen" , "Spurensuche" , "Tarnen" } ,
TrainCosts : map [ int ] int { 9 : 5 , 10 : 5 , 11 : 10 , 12 : 10 , 13 : 20 , 14 : 20 , 15 : 50 , 16 : 50 , 17 : 100 , 18 : 100 } ,
} ,
} ,
"Halbwelt" : {
"leicht" : DifficultyData {
LearnCost : 1 ,
Skills : [ ] string { "Klettern" , "Glücksspiel" , "Balancieren" } ,
TrainCosts : map [ int ] int { 9 : 0 , 10 : 0 , 11 : 0 , 12 : 0 , 13 : 1 , 14 : 2 , 15 : 5 , 16 : 10 , 17 : 10 , 18 : 20 } ,
} ,
"normal" : DifficultyData {
LearnCost : 2 ,
Skills : [ ] string { "Akrobatik" } ,
TrainCosts : map [ int ] int { 9 : 2 , 10 : 2 , 11 : 5 , 12 : 5 , 13 : 10 , 14 : 10 , 15 : 20 , 16 : 20 , 17 : 50 , 18 : 50 } ,
} ,
"schwer" : DifficultyData {
LearnCost : 2 ,
Skills : [ ] string { "Gassenwissen" , "Stehlen" } ,
TrainCosts : map [ int ] int { 9 : 2 , 10 : 5 , 11 : 5 , 12 : 10 , 13 : 10 , 14 : 20 , 15 : 20 , 16 : 50 , 17 : 50 , 18 : 50 } ,
} ,
"sehr schwer" : DifficultyData {
LearnCost : 10 ,
Skills : [ ] string { "Betäuben" } ,
TrainCosts : map [ int ] int { 9 : 5 , 10 : 10 , 11 : 20 , 12 : 20 , 13 : 30 , 14 : 50 , 15 : 80 , 16 : 80 , 17 : 100 , 18 : 100 } ,
} ,
} ,
"Kampf" : {
"leicht" : DifficultyData {
LearnCost : 1 ,
Skills : [ ] string { "Reiten" } ,
TrainCosts : map [ int ] int { 6 : 0 , 7 : 0 , 8 : 0 , 9 : 0 , 10 : 0 , 11 : 0 , 12 : 0 , 13 : 1 , 14 : 2 , 15 : 5 , 16 : 10 , 17 : 10 , 18 : 20 } ,
} ,
"normal" : DifficultyData {
LearnCost : 2 ,
Skills : [ ] string { "Anführen" , "Athletik" } ,
TrainCosts : map [ int ] int { 6 : 0 , 7 : 0 , 8 : 0 , 9 : 2 , 10 : 2 , 11 : 5 , 12 : 5 , 13 : 10 , 14 : 10 , 15 : 20 , 16 : 20 , 17 : 50 , 18 : 50 } ,
} ,
"schwer" : DifficultyData {
LearnCost : 10 ,
Skills : [ ] string { "Betäuben" } ,
TrainCosts : map [ int ] int { 6 : 0 , 7 : 0 , 8 : 0 , 9 : 5 , 10 : 10 , 11 : 20 , 12 : 20 , 13 : 30 , 14 : 50 , 15 : 80 , 16 : 80 , 17 : 100 , 18 : 100 } ,
} ,
"sehr schwer" : DifficultyData {
LearnCost : 10 ,
Skills : [ ] string { } ,
TrainCosts : map [ int ] int { 6 : 2 , 7 : 5 , 8 : 10 , 9 : 10 , 10 : 20 , 11 : 20 , 12 : 30 , 13 : 50 , 14 : 50 , 15 : 100 , 16 : 100 , 17 : 150 , 18 : 200 } ,
} ,
} ,
"Körper" : {
"leicht" : DifficultyData {
LearnCost : 1 ,
Skills : [ ] string { "Geländelauf" , "Klettern" , "Schwimmen" , "Balancieren" } ,
TrainCosts : map [ int ] int { 9 : 0 , 10 : 0 , 11 : 0 , 12 : 0 , 13 : 1 , 14 : 2 , 15 : 5 , 16 : 10 , 17 : 10 , 18 : 20 } ,
} ,
"normal" : DifficultyData {
LearnCost : 1 ,
Skills : [ ] string { "Tauchen" } ,
TrainCosts : map [ int ] int { 9 : 1 , 10 : 1 , 11 : 2 , 12 : 2 , 13 : 5 , 14 : 10 , 15 : 10 , 16 : 20 , 17 : 20 , 18 : 50 } ,
} ,
"schwer" : DifficultyData {
LearnCost : 2 ,
Skills : [ ] string { "Akrobatik" , "Athletik" , "Laufen" , "Meditieren" } ,
TrainCosts : map [ int ] int { 9 : 2 , 10 : 2 , 11 : 5 , 12 : 5 , 13 : 10 , 14 : 10 , 15 : 20 , 16 : 20 , 17 : 50 , 18 : 50 } ,
} ,
} ,
"Sozial" : {
"leicht" : DifficultyData {
LearnCost : 1 ,
Skills : [ ] string { "Anführen" , "Verführen" , "Verstellen" , "Etikette" } ,
TrainCosts : map [ int ] int { 9 : 2 , 10 : 2 , 11 : 5 , 12 : 5 , 13 : 10 , 14 : 10 , 15 : 20 , 16 : 20 , 17 : 50 , 18 : 50 } ,
} ,
"normal" : DifficultyData {
LearnCost : 2 ,
Skills : [ ] string { "Gassenwissen" , "Beredsamkeit" , "Verhören" } ,
TrainCosts : map [ int ] int { 9 : 2 , 10 : 5 , 11 : 5 , 12 : 10 , 13 : 10 , 14 : 20 , 15 : 20 , 16 : 50 , 17 : 50 , 18 : 50 } ,
} ,
"schwer" : DifficultyData {
LearnCost : 4 ,
Skills : [ ] string { "Menschenkenntnis" } ,
TrainCosts : map [ int ] int { 9 : 5 , 10 : 5 , 11 : 10 , 12 : 10 , 13 : 20 , 14 : 20 , 15 : 50 , 16 : 50 , 17 : 100 , 18 : 100 } ,
} ,
} ,
"Unterwelt" : {
"leicht" : DifficultyData {
LearnCost : 2 ,
Skills : [ ] string { "Gassenwissen" , "Stehlen" } ,
TrainCosts : map [ int ] int { 9 : 2 , 10 : 5 , 11 : 5 , 12 : 10 , 13 : 10 , 14 : 20 , 15 : 20 , 16 : 50 , 17 : 50 , 18 : 50 } ,
} ,
"normal" : DifficultyData {
LearnCost : 4 ,
Skills : [ ] string { "Schleichen" , "Spurensuche" , "Tarnen" , "Fallen entdecken" , "Schlösser öffnen" } ,
TrainCosts : map [ int ] int { 9 : 5 , 10 : 5 , 11 : 10 , 12 : 10 , 13 : 20 , 14 : 20 , 15 : 50 , 16 : 50 , 17 : 100 , 18 : 100 } ,
} ,
"schwer" : DifficultyData {
LearnCost : 10 ,
Skills : [ ] string { "Fallenmechanik" , "Meucheln" , "Menschenkenntnis" } ,
TrainCosts : map [ int ] int { 9 : 5 , 10 : 10 , 11 : 20 , 12 : 20 , 13 : 30 , 14 : 50 , 15 : 80 , 16 : 80 , 17 : 100 , 18 : 100 } ,
} ,
} ,
"Waffen" : {
"leicht" : DifficultyData {
LearnCost : 2 ,
Skills : [ ] string { "Stichwaffen" } ,
TrainCosts : map [ int ] int { 6 : 1 , 7 : 1 , 8 : 1 , 9 : 2 , 10 : 2 , 11 : 5 , 12 : 10 , 13 : 20 , 14 : 50 , 15 : 100 , 16 : 100 , 17 : 150 , 18 : 150 } ,
} ,
"normal" : DifficultyData {
LearnCost : 4 ,
Skills : [ ] string { "Einhandschlagwaffen" } ,
TrainCosts : map [ int ] int { 6 : 1 , 7 : 1 , 8 : 2 , 9 : 2 , 10 : 5 , 11 : 10 , 12 : 20 , 13 : 50 , 14 : 50 , 15 : 100 , 16 : 150 , 17 : 150 , 18 : 200 } ,
} ,
"schwer" : DifficultyData {
LearnCost : 6 ,
Skills : [ ] string { "Zweihandschlagwaffen" } ,
TrainCosts : map [ int ] int { 6 : 1 , 7 : 2 , 8 : 2 , 9 : 5 , 10 : 5 , 11 : 10 , 12 : 20 , 13 : 50 , 14 : 100 , 15 : 150 , 16 : 200 , 17 : 300 , 18 : 300 } ,
} ,
"sehr schwer" : DifficultyData {
LearnCost : 8 ,
Skills : [ ] string { } ,
TrainCosts : map [ int ] int { 6 : 1 , 7 : 2 , 8 : 2 , 9 : 5 , 10 : 10 , 11 : 20 , 12 : 50 , 13 : 100 , 14 : 150 , 15 : 200 , 16 : 300 , 17 : 300 , 18 : 400 } ,
} ,
} ,
"Wissen" : {
"leicht" : DifficultyData {
LearnCost : 1 ,
Skills : [ ] string { "Lesen von Zauberschrift" , "Schreiben" , "Sprache" } ,
TrainCosts : map [ int ] int { 9 : 1 , 10 : 1 , 11 : 1 , 12 : 1 , 13 : 2 , 14 : 2 , 15 : 5 , 16 : 10 , 17 : 10 , 18 : 20 } ,
} ,
"normal" : DifficultyData {
LearnCost : 2 ,
Skills : [ ] string { "Erste Hilfe" , "Meditieren" } ,
TrainCosts : map [ int ] int { 9 : 2 , 10 : 2 , 11 : 5 , 12 : 5 , 13 : 10 , 14 : 10 , 15 : 20 , 16 : 20 , 17 : 50 , 18 : 50 } ,
} ,
"schwer" : DifficultyData {
LearnCost : 2 ,
Skills : [ ] string { "Alchimie" , "Heilkunde" , "Landeskunde" , "Zauberkunde" , "Naturkunde" , "Pflanzenkunde" , "Tierkunde" } ,
TrainCosts : map [ int ] int { 9 : 2 , 10 : 5 , 11 : 5 , 12 : 10 , 13 : 10 , 14 : 20 , 15 : 20 , 16 : 20 , 17 : 50 , 18 : 50 } ,
} ,
} ,
"Schilde und Parierwaffen" : {
"normal" : DifficultyData {
LearnCost : 0 , // Not defined in BaseLearnCost, using 0 as default
Skills : [ ] string { } ,
TrainCosts : map [ int ] int { 2 : 1 , 3 : 2 , 4 : 10 , 5 : 30 , 6 : 50 , 7 : 100 , 8 : 150 } ,
} ,
} ,
} ,
}
2025-07-24 07:45:25 +02:00
// contains checks if a slice contains a specific string
func contains ( slice [ ] string , item string ) bool {
for _ , s := range slice {
if s == item {
return true
}
}
return false
}
//### End of Helper functions ###
2025-08-01 07:19:02 +02:00
// GetSpellInfoNewSystem returns the school and level of a spell from the database
func GetSpellInfoNewSystem ( spellName string ) ( string , int , error ) {
2025-07-24 19:18:32 +02:00
// Create a Spell instance to search in the database
2025-07-27 23:50:19 +02:00
var spell models . Spell
2025-07-24 19:18:32 +02:00
// Search for the spell in the database
err := spell . First ( spellName )
if err != nil {
return "" , 0 , fmt . Errorf ( "spell '%s' not found in database: %w" , spellName , err )
}
return spell . Category , spell . Stufe , nil
}