func (h *Held) SetSpezies(spezies string) error { _, existing := basiswerte.AlleSpezies[spezies] if !existing { return errors.New("Spezies unbekannt!") } h.Spezies = basiswerte.AlleSpezies[spezies] for _, v := range h.Spezies.Vorteile { vorteil := basiswerte.GetVorteil(v) if vorteil != nil { tmpVorteil := basiswerte.VorUndNachteil{Name: vorteil.Name, Vorraussetzungen: vorteil.Vorraussetzungen, APKosten: vorteil.APKosten, FromSpezies: true} h.Vorteile = append(h.Vorteile, tmpVorteil) //h.Vorteile = append(h.Vorteile, vorteil) } } for _, v := range h.Spezies.Nachteile { nachteil := basiswerte.GetNachteil(v) if nachteil != nil { tmpNachteil := basiswerte.VorUndNachteil{Name: nachteil.Name, Vorraussetzungen: nachteil.Vorraussetzungen, APKosten: nachteil.APKosten, FromSpezies: true} h.Nachteile = append(h.Nachteile, tmpNachteil) //h.Nachteile = append(h.Nachteile, nachteil) } } h.Basiswerte = *basiswerte.InitBerechneteWerte(&h.Spezies, &h.Eigenschaften) return nil }
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 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 "", "" }