Exemplo n.º 1
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 "", ""
}
Exemplo n.º 2
0
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
}
Exemplo n.º 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 "", ""
}