package generators import ( "encoding/json" "math/rand" "os" ) type DragonbornArrays struct { Nm1 []string `json:"nm1"` Nm2 []string `json:"nm2"` Nm3 []string `json:"nm3"` Nm4 []string `json:"nm4"` Nm5 []string `json:"nm5"` Nm6 []string `json:"nm6"` Nm7 []string `json:"nm7"` Nm8 []string `json:"nm8"` Nm9 []string `json:"nm9"` Nm10 []string `json:"nm10"` Nm11 []string `json:"nm11"` Nm12 []string `json:"nm12"` Nm13 []string `json:"nm13"` } func LoadDragonbornArrays(path string) (*DragonbornArrays, error) { file, err := os.Open(path) if err != nil { return nil, err } defer file.Close() var arrays DragonbornArrays if err := json.NewDecoder(file).Decode(&arrays); err != nil { return nil, err } return &arrays, nil } func DragonbornNameMas(arr *DragonbornArrays, checkSwear func(string) bool) string { rnd := rand.Intn(len(arr.Nm1)) rnd2 := rand.Intn(len(arr.Nm2)) nMs := arr.Nm1[rnd] + arr.Nm2[rnd2] if checkSwear != nil && checkSwear(nMs) { return "" } return nMs } func DragonbornNameFem(arr *DragonbornArrays, checkSwear func(string) bool) string { rnd := rand.Intn(len(arr.Nm3)) rnd2 := rand.Intn(len(arr.Nm4)) nMs := arr.Nm3[rnd] + arr.Nm4[rnd2] if checkSwear != nil && checkSwear(nMs) { return "" } return nMs } func DragonbornNameSur(arr *DragonbornArrays, checkSwear func(string) bool) string { ntp := rand.Intn(10) rnd := rand.Intn(len(arr.Nm5)) rnd2 := rand.Intn(len(arr.Nm6)) rnd3 := rand.Intn(len(arr.Nm7)) rnd4 := rand.Intn(len(arr.Nm6)) rnd5 := rand.Intn(len(arr.Nm10)) for arr.Nm7[rnd3] == arr.Nm5[rnd] || arr.Nm7[rnd3] == arr.Nm10[rnd5] { rnd3 = rand.Intn(len(arr.Nm7)) } if ntp < 4 { nSr := arr.Nm5[rnd] + arr.Nm6[rnd2] + arr.Nm7[rnd3] + arr.Nm6[rnd4] + arr.Nm10[rnd5] if checkSwear != nil && checkSwear(nSr) { return "" } return nSr } else { rnd6 := rand.Intn(len(arr.Nm6)) rnd7 := rand.Intn(len(arr.Nm8)) for arr.Nm7[rnd3] == arr.Nm8[rnd7] || arr.Nm8[rnd7] == arr.Nm10[rnd5] { rnd7 = rand.Intn(len(arr.Nm8)) } if ntp < 7 { nSr := arr.Nm5[rnd] + arr.Nm6[rnd2] + arr.Nm7[rnd3] + arr.Nm6[rnd4] + arr.Nm8[rnd7] + arr.Nm6[rnd6] + arr.Nm10[rnd5] if checkSwear != nil && checkSwear(nSr) { return "" } return nSr } else { rnd8 := rand.Intn(len(arr.Nm6)) rnd9 := rand.Intn(len(arr.Nm9)) for arr.Nm9[rnd9] == arr.Nm8[rnd7] || arr.Nm9[rnd9] == arr.Nm10[rnd5] { rnd9 = rand.Intn(len(arr.Nm9)) } nSr := arr.Nm5[rnd] + arr.Nm6[rnd2] + arr.Nm7[rnd3] + arr.Nm6[rnd4] + arr.Nm8[rnd7] + arr.Nm6[rnd6] + arr.Nm9[rnd9] + arr.Nm6[rnd8] + arr.Nm10[rnd5] if checkSwear != nil && checkSwear(nSr) { return "" } return nSr } } }