func calculateAvailable() { PageData.Available.Nachteile = PageData.Available.Nachteile[:0] PageData.Available.Vorteile = PageData.Available.Vorteile[:0] PageData.Available.SF_Allgemein = PageData.Available.SF_Allgemein[:0] PageData.Available.SF_Karmal = PageData.Available.SF_Karmal[:0] PageData.Available.SF_Magisch = PageData.Available.SF_Magisch[:0] PageData.Available.SF_Kampf = PageData.Available.SF_Kampf[:0] PageData.Available.ProfessionenNachKulturUndSpezies = PageData.Available.ProfessionenNachKulturUndSpezies[:0] PageData.Available.SF_Sprachen = PageData.Available.SF_Sprachen[:0] PageData.Available.SF_Schriften = PageData.Available.SF_Schriften[:0] for _, v := range basiswerte.Nachteile { ok, _ := erschaffung.VorUndNachteilAvailable(PageData.Held, &v) if ok { // only append if not already selected selected := false for _, w := range PageData.Held.Nachteile { if w.Name == v.Name { selected = true break } } if !selected { PageData.Available.Nachteile = append(PageData.Available.Nachteile, v) } } } for _, v := range basiswerte.Vorteile { ok, _ := erschaffung.VorUndNachteilAvailable(PageData.Held, &v) if ok { // only append if not already selected selected := false for _, w := range PageData.Held.Vorteile { if w.Name == v.Name { selected = true break } } if !selected { PageData.Available.Vorteile = append(PageData.Available.Vorteile, v) } } } for _, v := range basiswerte.AllgemeineSF { ok, _ := erschaffung.SFAvailable(PageData.Held, &v) if ok { // only append if not already selected selected := false for _, w := range PageData.Held.Sonderfertigkeiten.Allgemeine { if w.Name == v.Name { selected = true break } } if !selected { PageData.Available.SF_Allgemein = append(PageData.Available.SF_Allgemein, v) } } } for _, v := range basiswerte.KarmaleSF { ok, _ := erschaffung.SFAvailable(PageData.Held, &v) if ok { // only append if not already selected selected := false for _, w := range PageData.Held.Sonderfertigkeiten.Karmale { if w.Name == v.Name { selected = true break } } if !selected { PageData.Available.SF_Karmal = append(PageData.Available.SF_Karmal, v) } } } for _, v := range basiswerte.MagischeSF { ok, _ := erschaffung.SFAvailable(PageData.Held, &v) if ok { // only append if not already selected selected := false for _, w := range PageData.Held.Sonderfertigkeiten.Magische { if w.Name == v.Name { selected = true break } } if !selected { PageData.Available.SF_Magisch = append(PageData.Available.SF_Magisch, v) } } } for _, v := range basiswerte.KampfSF { ok, _ := erschaffung.SFAvailable(PageData.Held, &v) if ok { // only append if not already selected selected := false for _, w := range PageData.Held.Sonderfertigkeiten.Kampf { if w.Name == v.Name { selected = true break } } if !selected { PageData.Available.SF_Kampf = append(PageData.Available.SF_Kampf, v) } } } for _, v := range basiswerte.SprachenSF { ok, _ := erschaffung.SFAvailable(PageData.Held, &v) if ok { // only append if not already selected selected := false for _, w := range PageData.Held.Sonderfertigkeiten.Sprachen { if w.Name == v.Name { selected = true break } } if !selected { PageData.Available.SF_Sprachen = append(PageData.Available.SF_Sprachen, v) } } } for _, v := range basiswerte.SchriftenSF { ok, _ := erschaffung.SFAvailable(PageData.Held, &v) if ok { // only append if not already selected selected := false for _, w := range PageData.Held.Sonderfertigkeiten.Schriften { if w.Name == v.Name { selected = true break } } if !selected { PageData.Available.SF_Schriften = append(PageData.Available.SF_Schriften, v) } } } PageData.Available.ProfessionenNachKulturUndSpezies = basiswerte.AlleProfessionen.NachKulturUndSpezies(PageData.Held.Kultur.Name, PageData.Held.Spezies.Name) }
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 "", "" }