package generators import ( "encoding/json" "math/rand" "os" ) type KoboldArrays struct { Nm1 []string `json:"nm1"` Nm2 []string `json:"nm2"` Nm3 []string `json:"nm3"` Nm4 []string `json:"nm4"` } func LoadKoboldArrays(path string) (KoboldArrays, error) { var arrays KoboldArrays 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 KoboldNameMas(arr *KoboldArrays, i int, swearFilter func(string) bool) string { rnd := rand.Intn(len(arr.Nm1)) rnd2 := rand.Intn(len(arr.Nm2)) rnd4 := rand.Intn(len(arr.Nm4)) var nMs string if i < 4 { for rnd < 4 { rnd = rand.Intn(len(arr.Nm1)) } for rnd4 < 5 || arr.Nm4[rnd4] == arr.Nm1[rnd] { rnd4 = rand.Intn(len(arr.Nm4)) } nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm4[rnd4] } else { rnd3 := rand.Intn(len(arr.Nm3)) rnd5 := rand.Intn(len(arr.Nm2)) if rnd < 4 { for rnd4 < 5 { rnd4 = rand.Intn(len(arr.Nm4)) } } for arr.Nm3[rnd3] == arr.Nm1[rnd] || arr.Nm3[rnd3] == arr.Nm4[rnd4] { rnd3 = rand.Intn(len(arr.Nm3)) } nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm2[rnd5] + arr.Nm4[rnd2] } if swearFilter == nil || !swearFilter(nMs) { return nMs } return "" } func GenerateKoboldNames(arr *KoboldArrays, swearFilter func(string) bool) []string { names := make([]string, 0, 10) for i := 0; i < 10; i++ { nMs := KoboldNameMas(arr, i, swearFilter) for nMs == "" { nMs = KoboldNameMas(arr, i, swearFilter) } names = append(names, nMs) } return names }