예제 #1
0
파일: held.go 프로젝트: Schokomuesl1/bowie
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
}
예제 #2
0
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 "", ""
}
예제 #3
0
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 "", ""
}