package generators import ( "encoding/json" "math/rand" "os" ) type OrcArrays 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"` } func LoadOrcArrays(path string) (OrcArrays, error) { var arrays OrcArrays file, err := os.Open(path) if err != nil { return arrays, err } defer file.Close() decoder := json.NewDecoder(file) err = decoder.Decode(&arrays) return arrays, err } func OrcNameFem(arr *OrcArrays, i int, swearFilter func(string) bool) string { rnd := rand.Intn(len(arr.Nm5)) rnd2 := rand.Intn(len(arr.Nm6)) rnd3 := rand.Intn(len(arr.Nm8)) var nFm string if i < 4 { for rnd < 4 { rnd = rand.Intn(len(arr.Nm5)) } for rnd3 < 5 || arr.Nm8[rnd3] == arr.Nm5[rnd] { rnd3 = rand.Intn(len(arr.Nm8)) } nFm = arr.Nm5[rnd] + arr.Nm6[rnd2] + arr.Nm8[rnd3] } else { rnd4 := rand.Intn(len(arr.Nm7)) rnd5 := rand.Intn(len(arr.Nm6)) for arr.Nm7[rnd4] == arr.Nm8[rnd3] { rnd4 = rand.Intn(len(arr.Nm7)) } nFm = arr.Nm5[rnd] + arr.Nm6[rnd2] + arr.Nm7[rnd4] + arr.Nm6[rnd5] + arr.Nm8[rnd3] } if swearFilter != nil && swearFilter(nFm) { return "" } return nFm } func OrcNameMas(arr *OrcArrays, i int, swearFilter func(string) bool) string { rnd := rand.Intn(len(arr.Nm1)) rnd2 := rand.Intn(len(arr.Nm2)) rnd3 := rand.Intn(len(arr.Nm4)) var nMs string if i < 4 { for rnd < 3 || arr.Nm1[rnd] == arr.Nm4[rnd3] { rnd = rand.Intn(len(arr.Nm1)) } nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm4[rnd3] } else { rnd4 := rand.Intn(len(arr.Nm3)) rnd5 := rand.Intn(len(arr.Nm2)) for arr.Nm3[rnd4] == arr.Nm1[rnd] || arr.Nm3[rnd4] == arr.Nm4[rnd3] { rnd4 = rand.Intn(len(arr.Nm3)) } nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd4] + arr.Nm2[rnd5] + arr.Nm4[rnd3] } if swearFilter != nil && swearFilter(nMs) { return "" } return nMs } func OrcSurname(arr *OrcArrays) string { rSr := rand.Intn(2) if rSr == 0 { return "The " + arr.Nm9[rand.Intn(len(arr.Nm9))] } return arr.Nm10[rand.Intn(len(arr.Nm10))] + " " + arr.Nm11[rand.Intn(len(arr.Nm11))] } func GenerateOrcNames(arr *OrcArrays, gender string, swearFilter func(string) bool) []string { names := make([]string, 0, 10) for i := 0; i < 10; i++ { var n string if gender == "female" { n = OrcNameFem(arr, i, swearFilter) for n == "" { n = OrcNameFem(arr, i, swearFilter) } } else { n = OrcNameMas(arr, i, swearFilter) for n == "" { n = OrcNameMas(arr, i, swearFilter) } } n = n + " " + OrcSurname(arr) names = append(names, n) } return names }