func addItem(c web.C, w http.ResponseWriter, r *http.Request, addTo []string) (string, string) { if len(addTo) != 2 { return "", "" } group := addTo[0] item := addTo[1] switch group { case "vorteil": { vorteil := basiswerte.GetVorteil(item) if vorteil != nil { for _, v := range PageData.Held.Vorteile { if v.Name == vorteil.Name { return "", "" } } PageData.Held.Vorteile = append(PageData.Held.Vorteile, *vorteil) PageData.Held.APAusgeben(vorteil.APKosten) return "/held/page/allgemeines", "" } } case "nachteil": { nachteil := basiswerte.GetNachteil(item) if nachteil != nil { for _, v := range PageData.Held.Nachteile { if v.Name == nachteil.Name { return "", "" } } PageData.Held.Nachteile = append(PageData.Held.Nachteile, *nachteil) PageData.Held.APAusgeben(nachteil.APKosten) return "/held/page/allgemeines", "" } } case "SFToAddAllgemein", "SFToAddKarmal", "SFToAddMagisch", "SFToAddKampf", "SFToAddSprache", "SFToAddSchrift": { var bereich *[]*basiswerte.Sonderfertigkeit switch group { case "SFToAddAllgemein": bereich = &PageData.Held.Sonderfertigkeiten.Allgemeine case "SFToAddKarmal": bereich = &PageData.Held.Sonderfertigkeiten.Karmale case "SFToAddMagisch": bereich = &PageData.Held.Sonderfertigkeiten.Magische case "SFToAddKampf": bereich = &PageData.Held.Sonderfertigkeiten.Kampf case "SFToAddSprache": bereich = &PageData.Held.Sonderfertigkeiten.Sprachen case "SFToAddSchrift": bereich = &PageData.Held.Sonderfertigkeiten.Schriften default: return "", "" } sf := basiswerte.GetSF(item) if sf != nil { for _, v := range *bereich { if v.Name == sf.Name { return "", "" } } *bereich = append(*bereich, sf) PageData.Held.APAusgeben(sf.APKosten) switch group { case "SFToAddAllgemein", "SFToAddSprache", "SFToAddSchrift": return "/held/page/allgemeines", "" case "SFToAddKarmal": return "/held/page/karmales", "" case "SFToAddMagisch": return "/held/page/magie", "" case "SFToAddKampf": return "/held/page/kampftechniken", "" default: return "", "" } } } case "zauber": { ok, _ := erschaffung.VorUndNachteilAvailable(PageData.Held, basiswerte.GetVorteil("Zauberer")) if !ok { return "", "" } _, exists := basiswerte.AlleZauber[item] if !exists { return "", "" } zauber, _ := basiswerte.AlleZauber[item] // first we need to check if there are still zauber left to add in this category... ownCategory := false for _, v := range zauber.Verbreitung { if v == "allgemein" || v == "Allgemein" { ownCategory = true break } lookForSF := fmt.Sprintf("Tradition (%s)", v) for _, s := range PageData.Held.Sonderfertigkeiten.Magische { if s.Name == lookForSF { ownCategory = true break } } } idx := 0 if !ownCategory { idx = 1 } if PageData.Held.ZauberCount[idx] >= PageData.Validator.Grad.Zauber[idx] { // no room left, we cant add it... return "", "Kann Zauber nicht hinzufügen, maximale Anzahl in dieser Kategorie bereits erreicht." } if PageData.Held.Zauber.Exists(item) { return "", "Der Held beherrscht diesen Zauber bereits." } PageData.Held.ZauberCount[idx]++ PageData.Held.NewZauber(&zauber) PageData.Held.Zauber.Get(item).SetMaxErschaffung(PageData.Validator.Grad.Fertigkeit) if zauber.Steigerungsfaktor != "-" { PageData.Held.APAusgeben(basiswerte.Kosten(zauber.Steigerungsfaktor, 0)) } else { PageData.Held.APAusgeben(1) // Zaubertrick + Segnung 1 AP } return "/held/page/magie", "" } case "liturgie": { ok, _ := erschaffung.VorUndNachteilAvailable(PageData.Held, basiswerte.GetVorteil("Geweihter")) if !ok { return "", "" } _, exists := basiswerte.AlleLiturgien[item] if !exists { return "", "" } liturgie, _ := basiswerte.AlleLiturgien[item] PageData.Held.NewLiturgie(&liturgie) PageData.Held.Liturgien.Get(item).SetMaxErschaffung(PageData.Validator.Grad.Fertigkeit) if liturgie.Steigerungsfaktor != "-" { PageData.Held.APAusgeben(basiswerte.Kosten(liturgie.Steigerungsfaktor, 0)) } else { PageData.Held.APAusgeben(1) // Zaubertrick + Segnung 1 AP } return "/held/page/karmales", "" } } return "", "" }
func (h *Held) SetProfession(profession *basiswerte.Profession) error { h.Profession = *profession for _, v := range h.Profession.Talente { fmt.Println(v) talent := v[0] t_num, err := strconv.Atoi(v[1]) if err != nil { return errors.New("Error converting number in profession! Check regeln/profession for bugs in data.") } h.Talente.Get(talent).AddValue(t_num) } for _, v := range h.Profession.Kampftechniken { kt := v[0] k_num, err := strconv.Atoi(v[1]) if err != nil { return errors.New("Error converting number in profession! Check regeln/profession for bugs in data.") } h.Kampftechniken.Get(kt).AddValue(k_num - 6) } for _, v := range h.Profession.Zauber { fmt.Println(v) kt := v[0] k_num, err := strconv.Atoi(v[1]) if err != nil { return errors.New("Error converting number in profession! Check regeln/profession for bugs in data.") } _, exists := basiswerte.AlleZauber[kt] if !exists { return errors.New("Unknown Zauber! Check regeln/profession for bugs in data.") } zauber, _ := basiswerte.AlleZauber[kt] h.NewZauber(&zauber) z := h.Zauber.Get(kt) if z != nil { z.SetMaxErschaffung(h.Erfahrungsgrad.Fertigkeit) z.AddValue(k_num) } } for _, v := range h.Profession.Liturgien { fmt.Println(v) kt := v[0] k_num, err := strconv.Atoi(v[1]) if err != nil { return errors.New("Error converting number in profession! Check regeln/profession for bugs in data.") } _, exists := basiswerte.AlleLiturgien[kt] if !exists { return errors.New("Unknown Liturgie! Check regeln/profession for bugs in data.") } liturgie, _ := basiswerte.AlleLiturgien[kt] h.NewLiturgie(&liturgie) l := h.Liturgien.Get(kt) if l != nil { l.SetMaxErschaffung(h.Erfahrungsgrad.Fertigkeit) l.AddValue(k_num) } } for _, v := range h.Profession.Sonderfertigkeiten { var bereich *[]*basiswerte.Sonderfertigkeit switch basiswerte.GetSFType(v) { case basiswerte.ALLGEMEIN: { bereich = &h.Sonderfertigkeiten.Allgemeine } case basiswerte.KARMAL: { bereich = &h.Sonderfertigkeiten.Karmale } case basiswerte.MAGISCH: { bereich = &h.Sonderfertigkeiten.Magische } case basiswerte.KAMPF: { bereich = &h.Sonderfertigkeiten.Kampf } case basiswerte.SPRACHE: { bereich = &h.Sonderfertigkeiten.Sprachen } case basiswerte.SCHRIFT: { bereich = &h.Sonderfertigkeiten.Schriften } case basiswerte.UNBEKANNT: { bereich = nil } } if bereich == nil { fmt.Printf("Unbekannte Sonderfertigkeit %s! Überspringe!\n", v) } sf := basiswerte.GetSF(v) if sf != nil { found := false for _, v := range *bereich { if v.Name == sf.Name { found = true } } if !found { *bereich = append(*bereich, sf) } } } h.APAusgeben(h.Profession.APKosten) return nil }
func removeItem(c web.C, w http.ResponseWriter, r *http.Request, addTo []string) (string, string) { if len(addTo) != 2 { return "", "" } //Vorteile []string //Nachteile []string group := addTo[0] item := addTo[1] switch group { case "vorteilnachteil": { vorteil := basiswerte.GetVorteil(item) if vorteil != nil { for i, v := range PageData.Held.Vorteile { if v.Name == vorteil.Name { // ok, we need to check if the vorteil stems from the species descrtipion (e.g. Elf -> Zauberer). If so-> no deleting for _, vt := range PageData.Held.Spezies.Vorteile { if vorteil.Name == vt { return "", "" } } PageData.Held.Vorteile = append(PageData.Held.Vorteile[:i], PageData.Held.Vorteile[i+1:]...) PageData.Held.APAusgeben(vorteil.APKosten * -1) return "/held/page/allgemeines", "" } } } // no vorteil found -> continue... nachteil := basiswerte.GetNachteil(item) if nachteil != nil { for i, v := range PageData.Held.Nachteile { if v.Name == nachteil.Name { // ok, we need to check if the vorteil stems from the species descrtipion (e.g. Elf -> Zauberer). If so-> no deleting for _, nt := range PageData.Held.Spezies.Nachteile { if nachteil.Name == nt { return "", "" } } PageData.Held.Nachteile = append(PageData.Held.Nachteile[:i], PageData.Held.Nachteile[i+1:]...) PageData.Held.APAusgeben(nachteil.APKosten * -1) return "/held/page/allgemeines", "" } } } } case "SFToAddAllgemein", "SFToAddKarmal", "SFToAddMagisch", "SFToAddKampf", "SFToAddSprache", "SFToAddSchrift": { var bereich *[]*basiswerte.Sonderfertigkeit switch group { case "SFToAddAllgemein": bereich = &PageData.Held.Sonderfertigkeiten.Allgemeine case "SFToAddKarmal": bereich = &PageData.Held.Sonderfertigkeiten.Karmale case "SFToAddMagisch": bereich = &PageData.Held.Sonderfertigkeiten.Magische case "SFToAddKampf": bereich = &PageData.Held.Sonderfertigkeiten.Kampf case "SFToAddSprache": bereich = &PageData.Held.Sonderfertigkeiten.Sprachen case "SFToAddSchrift": bereich = &PageData.Held.Sonderfertigkeiten.Schriften default: return "", "" } sf := basiswerte.GetSF(item) if sf != nil { for i, v := range *bereich { if v.Name == sf.Name { (*bereich), (*bereich)[len((*bereich))-1] = append((*bereich)[:i], (*bereich)[i+1:]...), nil PageData.Held.APAusgeben(sf.APKosten * -1) switch group { case "SFToAddAllgemein", "SFToAddSprache", "SFToAddSchrift": return "/held/page/allgemeines", "" case "SFToAddKarmal": return "/held/page/karmales", "" case "SFToAddMagisch": return "/held/page/magie", "" case "SFToAddKampf": return "/held/page/kampftechniken", "" default: return "", "" } } } } } } return "", "" }