Initial commit

This commit is contained in:
2025-08-01 00:15:34 +01:00
commit 54601b1993
115 changed files with 28375 additions and 0 deletions
+118
View File
@@ -0,0 +1,118 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
"time"
)
type AasimarData struct {
Male 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"`
} `json:"male"`
Female struct {
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"`
} `json:"female"`
}
var aasimarData AasimarData
func LoadAasimarData(path string) error {
file, err := os.Open(path)
if err != nil {
return err
}
defer file.Close()
return json.NewDecoder(file).Decode(&aasimarData)
}
func GenerateAasimarName(gender string) string {
rand.Seed(time.Now().UnixNano())
if gender == "female" {
return generateAasimarFemaleName()
}
return generateAasimarMaleName()
}
func generateAasimarMaleName() string {
nm1 := aasimarData.Male.Nm1
nm2 := aasimarData.Male.Nm2
nm3 := aasimarData.Male.Nm3
nm4 := aasimarData.Male.Nm4
nm5 := aasimarData.Male.Nm5
nm6 := aasimarData.Male.Nm6
i := rand.Intn(10)
var nMs string
if i < 6 {
rnd := rand.Intn(len(nm1))
rnd2 := rand.Intn(len(nm2))
rnd3 := rand.Intn(len(nm3))
rnd4 := rand.Intn(len(nm4))
rnd5 := rand.Intn(len(nm6))
for nm3[rnd3] == nm1[rnd] || nm3[rnd3] == nm6[rnd5] {
rnd3 = rand.Intn(len(nm3))
}
nMs = nm1[rnd] + nm2[rnd2] + nm3[rnd3] + nm4[rnd4] + nm6[rnd5]
} else {
rnd := rand.Intn(len(nm1))
rnd2 := rand.Intn(len(nm2))
rnd3 := rand.Intn(len(nm3))
rnd4 := rand.Intn(len(nm4))
rnd5 := rand.Intn(len(nm6))
rnd6 := rand.Intn(len(nm5))
rnd7 := rand.Intn(len(nm4))
for nm5[rnd6] == nm3[rnd3] || nm5[rnd6] == nm6[rnd5] {
rnd6 = rand.Intn(len(nm5))
}
nMs = nm1[rnd] + nm2[rnd2] + nm3[rnd3] + nm4[rnd4] + nm5[rnd6] + nm4[rnd7] + nm6[rnd5]
}
return nMs
}
func generateAasimarFemaleName() string {
nm7 := aasimarData.Female.Nm7
nm8 := aasimarData.Female.Nm8
nm9 := aasimarData.Female.Nm9
nm10 := aasimarData.Female.Nm10
nm11 := aasimarData.Female.Nm11
nm12 := aasimarData.Female.Nm12
nm13 := aasimarData.Female.Nm13
i := rand.Intn(10)
var nMs string
if i < 6 {
rnd := rand.Intn(len(nm7))
rnd2 := rand.Intn(len(nm8))
rnd3 := rand.Intn(len(nm9))
rnd4 := rand.Intn(len(nm10))
rnd5 := rand.Intn(len(nm13))
for nm9[rnd3] == nm7[rnd] || nm9[rnd3] == nm13[rnd5] {
rnd3 = rand.Intn(len(nm9))
}
nMs = nm7[rnd] + nm8[rnd2] + nm9[rnd3] + nm10[rnd4] + nm13[rnd5]
} else {
rnd := rand.Intn(len(nm7))
rnd2 := rand.Intn(len(nm8))
rnd3 := rand.Intn(len(nm9))
rnd4 := rand.Intn(len(nm10))
rnd5 := rand.Intn(len(nm13))
rnd6 := rand.Intn(len(nm11))
rnd7 := rand.Intn(len(nm12))
for nm11[rnd6] == nm9[rnd3] || nm11[rnd6] == nm13[rnd5] {
rnd6 = rand.Intn(len(nm11))
}
nMs = nm7[rnd] + nm8[rnd2] + nm9[rnd3] + nm10[rnd4] + nm11[rnd6] + nm12[rnd7] + nm13[rnd5]
}
return nMs
}
+50
View File
@@ -0,0 +1,50 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
"strings"
)
type ArakocraArrays struct {
Nm1 []string `json:"nm1"`
Nm2 []string `json:"nm2"`
Nm3 []string `json:"nm3"`
Nm4 []string `json:"nm4"`
Nm5 []string `json:"nm5"`
}
func LoadArakocraArrays(path string) (*ArakocraArrays, error) {
file, err := os.Open(path)
if err != nil {
return nil, err
}
defer file.Close()
var arr ArakocraArrays
if err := json.NewDecoder(file).Decode(&arr); err != nil {
return nil, err
}
return &arr, nil
}
func ArakocraNameMas(arr *ArakocraArrays, check func(string) bool, i int) string {
rnd := rand.Intn(len(arr.Nm1))
rnd2 := rand.Intn(len(arr.Nm2))
rnd3 := rand.Intn(len(arr.Nm5))
var nMs string
if i < 5 {
for arr.Nm1[rnd] == arr.Nm5[rnd3] {
rnd3 = rand.Intn(len(arr.Nm5))
}
nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm5[rnd3]
} else {
rnd4 := rand.Intn(len(arr.Nm3))
rnd5 := rand.Intn(len(arr.Nm4))
nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd4] + arr.Nm4[rnd5] + arr.Nm5[rnd3]
}
if check(strings.ToLower(nMs)) {
return ""
}
return nMs
}
+49
View File
@@ -0,0 +1,49 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
"time"
)
type BugbearArrays struct {
Nm1 []string `json:"nm1"`
Nm2 []string `json:"nm2"`
Nm3 []string `json:"nm3"`
Nm4 []string `json:"nm4"`
Nm5 []string `json:"nm5"`
}
func LoadBugbearArrays(path string) (*BugbearArrays, error) {
file, err := os.Open(path)
if err != nil {
return nil, err
}
defer file.Close()
var arrays BugbearArrays
if err := json.NewDecoder(file).Decode(&arrays); err != nil {
return nil, err
}
return &arrays, nil
}
func BugbearNameMas(arr *BugbearArrays, checkSwear func(string) bool) string {
rand.Seed(time.Now().UnixNano())
nTp := rand.Intn(3)
rnd := rand.Intn(len(arr.Nm1))
rnd2 := rand.Intn(len(arr.Nm4))
rnd3 := rand.Intn(len(arr.Nm5))
var nMs string
if nTp == 0 {
nMs = arr.Nm1[rnd] + arr.Nm4[rnd2] + arr.Nm5[rnd3]
} else {
rnd4 := rand.Intn(len(arr.Nm2))
rnd5 := rand.Intn(len(arr.Nm3))
nMs = arr.Nm1[rnd] + arr.Nm2[rnd4] + arr.Nm3[rnd5] + arr.Nm4[rnd2] + arr.Nm5[rnd3]
}
if checkSwear != nil && checkSwear(nMs) {
return ""
}
return nMs
}
+116
View File
@@ -0,0 +1,116 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
"time"
)
type CentaurData struct {
Male 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"`
} `json:"male"`
Female struct {
Nm8 []string `json:"nm8"`
Nm9 []string `json:"nm9"`
Nm10 []string `json:"nm10"`
Nm11 []string `json:"nm11"`
Nm12 []string `json:"nm12"`
Nm13 []string `json:"nm13"`
Nm14 []string `json:"nm14"`
} `json:"female"`
Surname1 []string `json:"surname1"`
Surname2 []string `json:"surname2"`
}
var centaurData CentaurData
func LoadCentaurData(path string) error {
file, err := os.Open(path)
if err != nil {
return err
}
defer file.Close()
return json.NewDecoder(file).Decode(&centaurData)
}
func GenerateCentaurName(gender string) string {
rand.Seed(time.Now().UnixNano())
var nMs string
if gender == "female" {
nMs = generateCentaurFemaleName()
} else {
nMs = generateCentaurMaleName()
}
sur1 := centaurData.Surname1[rand.Intn(len(centaurData.Surname1))]
sur2 := centaurData.Surname2[rand.Intn(len(centaurData.Surname2))]
return nMs + " " + sur1 + sur2
}
func generateCentaurMaleName() string {
m := centaurData.Male
nTp := rand.Intn(5)
rnd := rand.Intn(len(m.Nm1))
rnd2 := rand.Intn(len(m.Nm2))
rnd5 := rand.Intn(len(m.Nm7))
if nTp == 0 {
for m.Nm1[rnd] == "" {
rnd = rand.Intn(len(m.Nm1))
}
for m.Nm7[rnd5] == "" {
rnd5 = rand.Intn(len(m.Nm7))
}
return m.Nm1[rnd] + m.Nm2[rnd2] + m.Nm7[rnd5]
} else {
rnd3 := rand.Intn(len(m.Nm3))
rnd4 := rand.Intn(len(m.Nm4))
for m.Nm3[rnd3] == m.Nm1[rnd] || m.Nm3[rnd3] == m.Nm7[rnd5] {
rnd3 = rand.Intn(len(m.Nm3))
}
if rnd2 == 0 {
for rnd4 == 0 {
rnd4 = rand.Intn(len(m.Nm4))
}
}
if nTp < 4 {
return m.Nm1[rnd] + m.Nm2[rnd2] + m.Nm3[rnd3] + m.Nm4[rnd4] + m.Nm7[rnd5]
} else {
rnd6 := rand.Intn(len(m.Nm5))
rnd7 := rand.Intn(len(m.Nm6))
for m.Nm3[rnd3] == m.Nm5[rnd6] || m.Nm5[rnd6] == m.Nm7[rnd5] {
rnd6 = rand.Intn(len(m.Nm5))
}
return m.Nm1[rnd] + m.Nm2[rnd2] + m.Nm3[rnd3] + m.Nm4[rnd4] + m.Nm5[rnd6] + m.Nm6[rnd7] + m.Nm7[rnd5]
}
}
}
func generateCentaurFemaleName() string {
f := centaurData.Female
nTp := rand.Intn(3)
rnd := rand.Intn(len(f.Nm8))
rnd2 := rand.Intn(len(f.Nm9))
rnd3 := rand.Intn(len(f.Nm10))
rnd4 := rand.Intn(len(f.Nm13))
rnd5 := rand.Intn(len(f.Nm14))
if nTp < 2 {
for f.Nm8[rnd] == f.Nm10[rnd3] || f.Nm10[rnd3] == f.Nm14[rnd5] {
rnd3 = rand.Intn(len(f.Nm10))
}
return f.Nm8[rnd] + f.Nm9[rnd2] + f.Nm10[rnd3] + f.Nm13[rnd4] + f.Nm14[rnd5]
} else {
rnd6 := rand.Intn(len(f.Nm11))
rnd7 := rand.Intn(len(f.Nm12))
for f.Nm12[rnd7] == f.Nm10[rnd3] || f.Nm12[rnd7] == f.Nm14[rnd5] {
rnd7 = rand.Intn(len(f.Nm12))
}
return f.Nm8[rnd] + f.Nm9[rnd2] + f.Nm10[rnd3] + f.Nm11[rnd6] + f.Nm12[rnd7] + f.Nm13[rnd4] + f.Nm14[rnd5]
}
}
+42
View File
@@ -0,0 +1,42 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
"time"
)
type ChangelingArrays struct {
Nm1 []string `json:"nm1"`
Nm2 []string `json:"nm2"`
Nm3 []string `json:"nm3"`
}
func LoadChangelingArrays(path string) (*ChangelingArrays, error) {
file, err := os.Open(path)
if err != nil {
return nil, err
}
defer file.Close()
var arrays ChangelingArrays
if err := json.NewDecoder(file).Decode(&arrays); err != nil {
return nil, err
}
return &arrays, nil
}
func ChangelingNameMas(arr *ChangelingArrays, checkSwear func(string) bool) string {
rand.Seed(time.Now().UnixNano())
rnd := rand.Intn(len(arr.Nm1))
rnd2 := rand.Intn(len(arr.Nm2))
rnd3 := rand.Intn(len(arr.Nm3))
for arr.Nm1[rnd] == arr.Nm3[rnd3] {
rnd3 = rand.Intn(len(arr.Nm3))
}
nMs := arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd3]
if checkSwear != nil && checkSwear(nMs) {
return ""
}
return nMs
}
+98
View File
@@ -0,0 +1,98 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
"time"
)
type DeepGnomeData struct {
Male struct {
Nm1 []string `json:"nm1"`
Nm2 []string `json:"nm2"`
Nm3 []string `json:"nm3"`
Nm4 []string `json:"nm4"`
Nm5 []string `json:"nm5"`
} `json:"male"`
Female struct {
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"`
} `json:"female"`
Surname1 []string `json:"surname1"`
Surname2 []string `json:"surname2"`
}
var deepGnomeData DeepGnomeData
func LoadDeepGnomeData(path string) error {
file, err := os.Open(path)
if err != nil {
return err
}
defer file.Close()
return json.NewDecoder(file).Decode(&deepGnomeData)
}
func GenerateDeepGnomeName(gender string) string {
rand.Seed(time.Now().UnixNano())
var nMs string
if gender == "female" {
nMs = generateDeepGnomeFemaleName()
} else {
nMs = generateDeepGnomeMaleName()
}
sur1 := deepGnomeData.Surname1[rand.Intn(len(deepGnomeData.Surname1))]
sur2 := deepGnomeData.Surname2[rand.Intn(len(deepGnomeData.Surname2))]
return nMs + " " + sur1 + sur2
}
func generateDeepGnomeMaleName() string {
m := deepGnomeData.Male
rnd := rand.Intn(len(m.Nm1))
rnd2 := rand.Intn(len(m.Nm2))
rnd3 := rand.Intn(len(m.Nm3))
rnd4 := rand.Intn(len(m.Nm4))
rnd5 := rand.Intn(len(m.Nm5))
for m.Nm3[rnd3] == m.Nm1[rnd] || m.Nm3[rnd3] == m.Nm5[rnd5] {
rnd3 = rand.Intn(len(m.Nm3))
}
return m.Nm1[rnd] + m.Nm2[rnd2] + m.Nm3[rnd3] + m.Nm4[rnd4] + m.Nm5[rnd5]
}
func generateDeepGnomeFemaleName() string {
f := deepGnomeData.Female
i := rand.Intn(10)
if i < 5 {
rnd := rand.Intn(len(f.Nm6))
rnd2 := rand.Intn(len(f.Nm7))
rnd3 := rand.Intn(len(f.Nm8))
rnd4 := rand.Intn(len(f.Nm9))
rnd5 := rand.Intn(len(f.Nm12))
if rnd < 5 && rnd5 < 7 {
for rnd5 < 7 {
rnd5 = rand.Intn(len(f.Nm12))
}
}
for f.Nm8[rnd3] == f.Nm6[rnd] || f.Nm8[rnd3] == f.Nm12[rnd5] {
rnd3 = rand.Intn(len(f.Nm8))
}
return f.Nm6[rnd] + f.Nm7[rnd2] + f.Nm8[rnd3] + f.Nm9[rnd4] + f.Nm12[rnd5]
} else {
rnd := rand.Intn(len(f.Nm6))
rnd2 := rand.Intn(len(f.Nm7))
rnd3 := rand.Intn(len(f.Nm8))
rnd4 := rand.Intn(len(f.Nm9))
rnd5 := rand.Intn(len(f.Nm10))
rnd6 := rand.Intn(len(f.Nm11))
for f.Nm10[rnd5] == f.Nm8[rnd3] || f.Nm8[rnd3] == f.Nm6[rnd] {
rnd3 = rand.Intn(len(f.Nm8))
}
return f.Nm6[rnd] + f.Nm7[rnd2] + f.Nm8[rnd3] + f.Nm9[rnd4] + f.Nm10[rnd5] + f.Nm11[rnd6]
}
}
+91
View File
@@ -0,0 +1,91 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
"time"
)
type DevaData struct {
Male struct {
Nm1 []string `json:"nm1"`
Nm2 []string `json:"nm2"`
Nm3 []string `json:"nm3"`
Nm4 []string `json:"nm4"`
Nm5 []string `json:"nm5"`
} `json:"male"`
Female 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"`
} `json:"female"`
}
var devaData DevaData
func LoadDevaData(path string) error {
file, err := os.Open(path)
if err != nil {
return err
}
defer file.Close()
return json.NewDecoder(file).Decode(&devaData)
}
func GenerateDevaName(gender string) string {
rand.Seed(time.Now().UnixNano())
if gender == "female" {
return generateDevaFemaleName()
}
return generateDevaMaleName()
}
func generateDevaMaleName() string {
m := devaData.Male
rnd := rand.Intn(len(m.Nm1))
rnd2 := rand.Intn(len(m.Nm2))
rnd3 := rand.Intn(len(m.Nm3))
rnd4 := rand.Intn(len(m.Nm4))
rnd5 := rand.Intn(len(m.Nm5))
for m.Nm3[rnd3] == m.Nm1[rnd] || m.Nm3[rnd3] == m.Nm5[rnd5] {
rnd3 = rand.Intn(len(m.Nm3))
}
return m.Nm1[rnd] + m.Nm2[rnd2] + m.Nm3[rnd3] + m.Nm4[rnd4] + m.Nm5[rnd5]
}
func generateDevaFemaleName() string {
f := devaData.Female
i := rand.Intn(10)
if i < 6 {
rnd := rand.Intn(len(f.Nm6))
rnd2 := rand.Intn(len(f.Nm7))
rnd3 := rand.Intn(len(f.Nm8))
rnd4 := rand.Intn(len(f.Nm9))
rnd5 := rand.Intn(len(f.Nm11))
for f.Nm8[rnd3] == f.Nm6[rnd] || f.Nm8[rnd3] == f.Nm11[rnd5] {
rnd3 = rand.Intn(len(f.Nm8))
}
return f.Nm6[rnd] + f.Nm7[rnd2] + f.Nm8[rnd3] + f.Nm9[rnd4] + f.Nm11[rnd5]
} else {
rnd := rand.Intn(len(f.Nm6))
rnd2 := rand.Intn(len(f.Nm7))
rnd3 := rand.Intn(len(f.Nm8))
rnd4 := rand.Intn(len(f.Nm9))
rnd5 := rand.Intn(len(f.Nm10))
rnd6 := rand.Intn(len(f.Nm9))
rnd7 := rand.Intn(len(f.Nm11))
for f.Nm10[rnd5] == f.Nm11[rnd7] || f.Nm10[rnd5] == f.Nm8[rnd3] {
rnd5 = rand.Intn(len(f.Nm10))
}
return f.Nm6[rnd] + f.Nm7[rnd2] + f.Nm8[rnd3] + f.Nm9[rnd4] + f.Nm10[rnd5] + f.Nm9[rnd6] + f.Nm11[rnd7]
}
}
+99
View File
@@ -0,0 +1,99 @@
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
}
}
}
+105
View File
@@ -0,0 +1,105 @@
package generators
import (
"encoding/json"
"fmt"
"math/rand"
"os"
"strings"
"time"
)
type DrowData struct {
NmF []string `json:"nmF"`
NmFRf []string `json:"nmFRf"`
NmFRl []string `json:"nmFRl"`
NmFFf []string `json:"nmFFf"`
NmFFl []string `json:"nmFFl"`
NmM []string `json:"nmM"`
NmMRf []string `json:"nmMRf"`
NmMRl []string `json:"nmMRl"`
NmMFf []string `json:"nmMFf"`
NmMFl []string `json:"nmMFl"`
NmS []string `json:"nmS"`
NmSRf []string `json:"nmSRf"`
NmSRl []string `json:"nmSRl"`
NmSFf []string `json:"nmSFf"`
NmSFl []string `json:"nmSFl"`
}
var drowData DrowData
func init() {
file, err := os.Open("data/drow.json")
if err != nil {
panic(fmt.Errorf("failed to open drow.json: %w", err))
}
defer file.Close()
if err := json.NewDecoder(file).Decode(&drowData); err != nil {
panic(fmt.Errorf("failed to decode drow.json: %w", err))
}
rand.Seed(time.Now().UnixNano())
}
func DrowName(gender, surname string) string {
var first, last string
gender = strings.ToLower(gender)
switch gender {
case "male":
first = drowFirstNameMale()
case "female":
first = drowFirstNameFemale()
default:
if rand.Intn(2) == 0 {
first = drowFirstNameMale()
} else {
first = drowFirstNameFemale()
}
}
// Surname logic
if surname == "true" {
last = drowSurname()
}
if last != "" {
return first + " " + last
}
return first
}
func drowFirstNameMale() string {
if rand.Intn(2) == 0 {
return drowData.NmM[rand.Intn(len(drowData.NmM))]
}
return drowData.NmMRf[rand.Intn(len(drowData.NmMRf))] + drowData.NmMRl[rand.Intn(len(drowData.NmMRl))]
}
func drowFirstNameFemale() string {
if rand.Intn(2) == 0 {
return drowData.NmF[rand.Intn(len(drowData.NmF))]
}
return drowData.NmFFf[rand.Intn(len(drowData.NmFFf))] + drowData.NmFFl[rand.Intn(len(drowData.NmFFl))]
}
func drowSurname() string {
if rand.Intn(2) == 0 {
return drowData.NmS[rand.Intn(len(drowData.NmS))]
}
return drowData.NmSRf[rand.Intn(len(drowData.NmSRf))] + drowData.NmSRl[rand.Intn(len(drowData.NmSRl))]
}
// DrowSurname returns a random Drow surname.
func DrowSurname() string {
return drowSurname()
}
// LoadDrowData loads the Drow data from the specified JSON file.
func LoadDrowData(path string) error {
file, err := os.Open(path)
if err != nil {
return err
}
defer file.Close()
return json.NewDecoder(file).Decode(&drowData)
}
+97
View File
@@ -0,0 +1,97 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
)
type DuergarArrays 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 LoadDuergarArrays(path string) (*DuergarArrays, error) {
file, err := os.Open(path)
if err != nil {
return nil, err
}
defer file.Close()
var arrays DuergarArrays
if err := json.NewDecoder(file).Decode(&arrays); err != nil {
return nil, err
}
return &arrays, nil
}
func DuergarNameMas(arr *DuergarArrays, 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 DuergarNameFem(arr *DuergarArrays, 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 DuergarNameSur(arr *DuergarArrays, checkSwear func(string) bool) string {
nTp := rand.Intn(2)
rnd := rand.Intn(len(arr.Nm5))
rnd2 := rand.Intn(len(arr.Nm6))
rnd3 := rand.Intn(len(arr.Nm7))
rnd4 := rand.Intn(len(arr.Nm10))
rnd5 := rand.Intn(len(arr.Nm11))
if nTp == 0 {
for arr.Nm11[rnd5] == arr.Nm7[rnd3] && arr.Nm7[rnd3] == arr.Nm5[rnd] {
rnd3 = rand.Intn(len(arr.Nm7))
}
nMs := arr.Nm5[rnd] + arr.Nm6[rnd2] + arr.Nm7[rnd3] + arr.Nm10[rnd4] + arr.Nm11[rnd5]
if checkSwear != nil && checkSwear(nMs) {
return ""
}
return nMs
} else {
rnd6 := rand.Intn(len(arr.Nm8))
rnd7 := rand.Intn(len(arr.Nm9))
for arr.Nm11[rnd5] == arr.Nm9[rnd6] && arr.Nm9[rnd6] == arr.Nm7[rnd3] {
rnd6 = rand.Intn(len(arr.Nm9))
}
nMs := arr.Nm5[rnd] + arr.Nm6[rnd2] + arr.Nm7[rnd3] + arr.Nm8[rnd6] + arr.Nm9[rnd7] + arr.Nm10[rnd4] + arr.Nm11[rnd5]
if checkSwear != nil && checkSwear(nMs) {
return ""
}
return nMs
}
}
func DuergarNameFull(arr *DuergarArrays, gender string, checkSwear func(string) bool) string {
var first string
if gender == "female" {
first = DuergarNameFem(arr, checkSwear)
} else {
first = DuergarNameMas(arr, checkSwear)
}
surname := DuergarNameSur(arr, checkSwear)
return first + " " + surname
}
+84
View File
@@ -0,0 +1,84 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
"strings"
)
type DwarfArrays 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 LoadDwarfArrays(path string) (*DwarfArrays, error) {
file, err := os.Open(path)
if err != nil {
return nil, err
}
defer file.Close()
var arr DwarfArrays
if err := json.NewDecoder(file).Decode(&arr); err != nil {
return nil, err
}
return &arr, nil
}
func DwarfNameFem(arr *DwarfArrays, check func(string) bool) string {
rnd := rand.Intn(len(arr.Nm3))
rnd2 := rand.Intn(len(arr.Nm4))
nMs := arr.Nm3[rnd] + arr.Nm4[rnd2]
if check(strings.ToLower(nMs)) {
return ""
}
return nMs
}
func DwarfNameMas(arr *DwarfArrays, check func(string) bool) string {
rnd := rand.Intn(len(arr.Nm1))
rnd2 := rand.Intn(len(arr.Nm2))
nMs := arr.Nm1[rnd] + arr.Nm2[rnd2]
if check(strings.ToLower(nMs)) {
return ""
}
return nMs
}
func DwarfNameSur(arr *DwarfArrays, check func(string) bool) string {
nTp := rand.Intn(2)
rnd := rand.Intn(len(arr.Nm5))
rnd2 := rand.Intn(len(arr.Nm6))
rnd3 := rand.Intn(len(arr.Nm7))
rnd4 := rand.Intn(len(arr.Nm10))
rnd5 := rand.Intn(len(arr.Nm11))
var nMs string
if nTp == 0 {
for arr.Nm11[rnd5] == arr.Nm7[rnd3] && arr.Nm7[rnd3] == arr.Nm5[rnd] {
rnd3 = rand.Intn(len(arr.Nm7))
}
nMs = arr.Nm5[rnd] + arr.Nm6[rnd2] + arr.Nm7[rnd3] + arr.Nm10[rnd4] + arr.Nm11[rnd5]
} else {
rnd6 := rand.Intn(len(arr.Nm8))
rnd7 := rand.Intn(len(arr.Nm9))
for arr.Nm11[rnd5] == arr.Nm9[rnd7] || arr.Nm9[rnd7] == arr.Nm7[rnd3] {
rnd7 = rand.Intn(len(arr.Nm9))
}
nMs = arr.Nm5[rnd] + arr.Nm6[rnd2] + arr.Nm7[rnd3] + arr.Nm8[rnd6] + arr.Nm9[rnd7] + arr.Nm10[rnd4] + arr.Nm11[rnd5]
}
if check(strings.ToLower(nMs)) {
return ""
}
return nMs
}
+47
View File
@@ -0,0 +1,47 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
)
type EladrinArrays struct {
Nm1 []string `json:"nm1"`
Nm2 []string `json:"nm2"`
Nm3 []string `json:"nm3"`
Nm4 []string `json:"nm4"`
}
func LoadEladrinArrays(path string) (*EladrinArrays, error) {
file, err := os.Open(path)
if err != nil {
return nil, err
}
defer file.Close()
var arrays EladrinArrays
if err := json.NewDecoder(file).Decode(&arrays); err != nil {
return nil, err
}
return &arrays, nil
}
func EladrinNameMas(arr *EladrinArrays, 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 EladrinNameFem(arr *EladrinArrays, 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
}
+132
View File
@@ -0,0 +1,132 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
"strings"
)
type ElfArrays 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"`
Nm14 []string `json:"nm14"`
Nm15 []string `json:"nm15"`
Nm16 []string `json:"nm16"`
Nm17 []string `json:"nm17"`
Nm18 []string `json:"nm18"`
}
func LoadElfArrays(path string) (*ElfArrays, error) {
file, err := os.Open(path)
if err != nil {
return nil, err
}
defer file.Close()
var arr ElfArrays
if err := json.NewDecoder(file).Decode(&arr); err != nil {
return nil, err
}
return &arr, nil
}
func ElfNameFem(arr *ElfArrays, check func(string) bool) string {
rnd := rand.Intn(len(arr.Nm3))
rnd2 := rand.Intn(len(arr.Nm4))
nMs := arr.Nm3[rnd] + arr.Nm4[rnd2]
if check(strings.ToLower(nMs)) {
return ""
}
return nMs
}
func ElfNameMas(arr *ElfArrays, check func(string) bool) string {
rnd := rand.Intn(len(arr.Nm1))
rnd2 := rand.Intn(len(arr.Nm2))
nMs := arr.Nm1[rnd] + arr.Nm2[rnd2]
if check(strings.ToLower(nMs)) {
return ""
}
return nMs
}
func ElfNameSur(arr *ElfArrays, check func(string) bool) string {
nTp := rand.Intn(8)
rnd := rand.Intn(len(arr.Nm5))
rnd2 := rand.Intn(len(arr.Nm6))
rnd3 := rand.Intn(len(arr.Nm7))
rnd4 := rand.Intn(len(arr.Nm10))
rnd5 := rand.Intn(len(arr.Nm11))
var nMs string
if nTp < 3 {
for arr.Nm11[rnd5] == arr.Nm7[rnd3] && arr.Nm7[rnd3] == arr.Nm5[rnd] {
rnd3 = rand.Intn(len(arr.Nm7))
}
nMs = arr.Nm5[rnd] + arr.Nm6[rnd2] + arr.Nm7[rnd3] + arr.Nm10[rnd4] + arr.Nm11[rnd5]
} else {
rnd6 := rand.Intn(len(arr.Nm8))
rnd7 := rand.Intn(len(arr.Nm9))
for arr.Nm11[rnd5] == arr.Nm9[rnd6] && arr.Nm9[rnd6] == arr.Nm7[rnd3] {
rnd7 = rand.Intn(len(arr.Nm9))
}
if nTp < 6 {
nMs = arr.Nm5[rnd] + arr.Nm6[rnd2] + arr.Nm7[rnd3] + arr.Nm8[rnd6] + arr.Nm9[rnd7] + arr.Nm10[rnd4] + arr.Nm11[rnd5]
} else {
rnd8 := rand.Intn(len(arr.Nm8))
rnd9 := rand.Intn(len(arr.Nm9))
for arr.Nm11[rnd5] == arr.Nm9[rnd6] && arr.Nm9[rnd6] == arr.Nm9[rnd9] {
rnd7 = rand.Intn(len(arr.Nm9))
}
for rnd9 < 8 && rnd7 < 8 {
rnd7 = rand.Intn(len(arr.Nm9))
}
if nTp == 6 {
nMs = arr.Nm5[rnd] + arr.Nm6[rnd2] + arr.Nm7[rnd3] + arr.Nm8[rnd6] + arr.Nm9[rnd7] + arr.Nm8[rnd8] + arr.Nm9[rnd9] + arr.Nm10[rnd4] + arr.Nm11[rnd5]
} else {
nMs = arr.Nm5[rnd] + arr.Nm6[rnd2] + arr.Nm9[rnd7] + arr.Nm8[rnd8] + arr.Nm7[rnd3] + arr.Nm8[rnd6] + arr.Nm9[rnd9] + arr.Nm10[rnd4] + arr.Nm11[rnd5]
}
}
}
if check(strings.ToLower(nMs)) {
return ""
}
return nMs
}
func ElfNameChild(arr *ElfArrays, check func(string) bool) string {
nTp := rand.Intn(2)
rnd := rand.Intn(len(arr.Nm14))
rnd2 := rand.Intn(len(arr.Nm15))
rnd3 := rand.Intn(len(arr.Nm18))
var nMs string
if nTp == 0 {
if arr.Nm14[rnd] == "" {
for arr.Nm18[rnd3] == "" {
rnd3 = rand.Intn(len(arr.Nm18))
}
}
if arr.Nm18[rnd3] == "" {
rnd2 = rand.Intn(7)
}
nMs = arr.Nm14[rnd] + arr.Nm15[rnd2] + arr.Nm18[rnd3]
} else {
rnd4 := rand.Intn(len(arr.Nm16))
rnd5 := rand.Intn(len(arr.Nm17))
nMs = arr.Nm14[rnd] + arr.Nm15[rnd2] + arr.Nm16[rnd4] + arr.Nm17[rnd5] + arr.Nm18[rnd3]
}
if check(strings.ToLower(nMs)) {
return ""
}
return nMs
}
+80
View File
@@ -0,0 +1,80 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
"time"
)
type FairyArrays 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"`
}
func LoadFairyArrays(path string) (FairyArrays, error) {
var arrays FairyArrays
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 GenerateFairyNames(arr FairyArrays, gender string, swearFilter func(string) bool) []string {
rand.Seed(time.Now().UnixNano())
var names []string
for i := 0; i < 10; i++ {
var n string
if gender == "female" {
if i < 3 {
for {
n = arr.Nm3[rand.Intn(len(arr.Nm3))] + arr.Nm4[rand.Intn(len(arr.Nm4))]
if !swearFilter(n) {
break
}
}
} else if i < 6 {
for {
n = arr.Nm7[rand.Intn(len(arr.Nm7))] + arr.Nm8[rand.Intn(len(arr.Nm8))]
if !swearFilter(n) {
break
}
}
} else {
n = arr.Nm10[rand.Intn(len(arr.Nm10))]
}
} else {
if i < 3 {
for {
n = arr.Nm1[rand.Intn(len(arr.Nm1))] + arr.Nm2[rand.Intn(len(arr.Nm2))]
if !swearFilter(n) {
break
}
}
} else if i < 6 {
for {
n = arr.Nm5[rand.Intn(len(arr.Nm5))] + arr.Nm6[rand.Intn(len(arr.Nm6))]
if !swearFilter(n) {
break
}
}
} else {
n = arr.Nm9[rand.Intn(len(arr.Nm9))]
}
}
names = append(names, n)
}
return names
}
+72
View File
@@ -0,0 +1,72 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
)
type GenasiArrays struct {
Nm1 []string `json:"nm1"`
Nm2 []string `json:"nm2"`
Nm3 []string `json:"nm3"`
Nm4 []string `json:"nm4"`
}
func LoadGenasiArrays(path string) (GenasiArrays, error) {
var arrays GenasiArrays
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 GenerateGenasiNames(arr GenasiArrays, swearFilter func(string) bool) []string {
// Copy slices to avoid mutating the original arrays
nm1 := append([]string{}, arr.Nm1...)
nm2 := append([]string{}, arr.Nm2...)
nm3 := append([]string{}, arr.Nm3...)
nm4 := append([]string{}, arr.Nm4...)
var names []string
for i := 0; i < 12; i++ {
var n string
if i < 3 {
if len(nm1) == 0 {
continue
}
rnd := rand.Intn(len(nm1))
n = nm1[rnd]
nm1 = append(nm1[:rnd], nm1[rnd+1:]...)
} else if i < 6 {
if len(nm2) == 0 {
continue
}
rnd := rand.Intn(len(nm2))
n = nm2[rnd]
nm2 = append(nm2[:rnd], nm2[rnd+1:]...)
} else if i < 9 {
if len(nm3) == 0 {
continue
}
rnd := rand.Intn(len(nm3))
n = nm3[rnd]
nm3 = append(nm3[:rnd], nm3[rnd+1:]...)
} else {
if len(nm4) == 0 {
continue
}
rnd := rand.Intn(len(nm4))
n = nm4[rnd]
nm4 = append(nm4[:rnd], nm4[rnd+1:]...)
}
if swearFilter != nil && swearFilter(n) {
continue
}
names = append(names, n)
}
return names
}
+133
View File
@@ -0,0 +1,133 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
)
type GithyankiArrays 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"`
Nm14 []string `json:"nm14"`
}
func LoadGithyankiArrays(path string) (GithyankiArrays, error) {
var arrays GithyankiArrays
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 GithyankiNameFem(arr *GithyankiArrays, swearFilter func(string) bool) string {
for {
nTp := rand.Intn(5)
rnd := rand.Intn(len(arr.Nm8))
rnd2 := rand.Intn(len(arr.Nm9))
rnd3 := rand.Intn(len(arr.Nm14))
rnd4 := rand.Intn(len(arr.Nm10))
rnd5 := rand.Intn(len(arr.Nm11))
for rnd < 4 && rnd4 < 3 {
rnd4 = rand.Intn(len(arr.Nm10))
}
var nMs string
if nTp < 4 {
for arr.Nm10[rnd4] == arr.Nm8[rnd] || arr.Nm10[rnd4] == arr.Nm14[rnd3] {
rnd4 = rand.Intn(len(arr.Nm10))
}
nMs = arr.Nm8[rnd] + arr.Nm9[rnd2] + arr.Nm10[rnd4] + arr.Nm11[rnd5] + arr.Nm14[rnd3]
} else {
rnd6 := rand.Intn(len(arr.Nm12))
rnd7 := rand.Intn(len(arr.Nm13))
for rnd7 < 4 && rnd4 < 3 {
rnd7 = rand.Intn(len(arr.Nm13))
}
for rnd7 < 4 && rnd < 3 {
rnd7 = rand.Intn(len(arr.Nm13))
}
for arr.Nm10[rnd4] == arr.Nm12[rnd6] || arr.Nm12[rnd6] == arr.Nm14[rnd3] {
rnd6 = rand.Intn(len(arr.Nm12))
}
nMs = arr.Nm8[rnd] + arr.Nm9[rnd2] + arr.Nm10[rnd4] + arr.Nm11[rnd5] + arr.Nm12[rnd6] + arr.Nm13[rnd7] + arr.Nm14[rnd3]
}
if swearFilter == nil || !swearFilter(nMs) {
return nMs
}
}
}
func GithyankiNameMas(arr *GithyankiArrays, swearFilter func(string) bool) string {
for {
nTp := rand.Intn(5)
rnd := rand.Intn(len(arr.Nm1))
rnd2 := rand.Intn(len(arr.Nm2))
rnd3 := rand.Intn(len(arr.Nm7))
if nTp == 0 {
for arr.Nm1[rnd] == "" {
rnd = rand.Intn(len(arr.Nm1))
}
for arr.Nm1[rnd] == arr.Nm7[rnd3] || arr.Nm7[rnd3] == "" {
rnd3 = rand.Intn(len(arr.Nm7))
}
nMs := arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm7[rnd3]
if swearFilter == nil || !swearFilter(nMs) {
return nMs
}
} else {
rnd4 := rand.Intn(len(arr.Nm3))
rnd5 := rand.Intn(len(arr.Nm4))
for rnd2 < 3 && rnd5 < 3 {
rnd2 = rand.Intn(len(arr.Nm2))
}
if nTp < 4 {
for arr.Nm3[rnd4] == arr.Nm1[rnd] || arr.Nm3[rnd4] == arr.Nm7[rnd3] {
rnd4 = rand.Intn(len(arr.Nm3))
}
nMs := arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd4] + arr.Nm4[rnd5] + arr.Nm7[rnd3]
if swearFilter == nil || !swearFilter(nMs) {
return nMs
}
} else {
rnd6 := rand.Intn(len(arr.Nm5))
rnd7 := rand.Intn(len(arr.Nm6))
for arr.Nm3[rnd4] == arr.Nm5[rnd6] || arr.Nm5[rnd6] == arr.Nm7[rnd3] {
rnd6 = rand.Intn(len(arr.Nm5))
}
nMs := arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd4] + arr.Nm4[rnd5] + arr.Nm5[rnd6] + arr.Nm6[rnd7] + arr.Nm7[rnd3]
if swearFilter == nil || !swearFilter(nMs) {
return nMs
}
}
}
}
}
func GenerateGithyankiNames(arr *GithyankiArrays, 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 = GithyankiNameFem(arr, swearFilter)
} else {
n = GithyankiNameMas(arr, swearFilter)
}
names = append(names, n)
}
return names
}
+74
View File
@@ -0,0 +1,74 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
)
type GithzeraiArrays struct {
Nm1 []string `json:"nm1"`
Nm2 []string `json:"nm2"`
Nm3 []string `json:"nm3"`
Nm4 []string `json:"nm4"`
}
func LoadGithzeraiArrays(path string) (GithzeraiArrays, error) {
var arrays GithzeraiArrays
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 GithzeraiNameFem(arr *GithzeraiArrays, swearFilter func(string) bool) string {
for {
rnd := rand.Intn(len(arr.Nm3))
rnd2 := rand.Intn(len(arr.Nm4))
charL := arr.Nm3[rnd][len(arr.Nm3[rnd])-1]
charF := arr.Nm4[rnd2][0]
for charL == charF {
rnd2 = rand.Intn(len(arr.Nm4))
charF = arr.Nm4[rnd2][0]
}
nMs := arr.Nm3[rnd] + arr.Nm4[rnd2]
if swearFilter == nil || !swearFilter(nMs) {
return nMs
}
}
}
func GithzeraiNameMas(arr *GithzeraiArrays, swearFilter func(string) bool) string {
for {
rnd := rand.Intn(len(arr.Nm1))
rnd2 := rand.Intn(len(arr.Nm2))
charL := arr.Nm1[rnd][len(arr.Nm1[rnd])-1]
charF := arr.Nm2[rnd2][0]
for charL == charF {
rnd2 = rand.Intn(len(arr.Nm2))
charF = arr.Nm2[rnd2][0]
}
nMs := arr.Nm1[rnd] + arr.Nm2[rnd2]
if swearFilter == nil || !swearFilter(nMs) {
return nMs
}
}
}
func GenerateGithzeraiNames(arr *GithzeraiArrays, 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 = GithzeraiNameFem(arr, swearFilter)
} else {
n = GithzeraiNameMas(arr, swearFilter)
}
names = append(names, n)
}
return names
}
+127
View File
@@ -0,0 +1,127 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
)
type GnomeArrays 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"`
Nm14 []string `json:"nm14"`
}
func LoadGnomeArrays(path string) (GnomeArrays, error) {
var arrays GnomeArrays
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 GnomeNameFem(arr *GnomeArrays, swearFilter func(string) bool) string {
rnd := rand.Intn(len(arr.Nm3))
rnd2 := rand.Intn(len(arr.Nm4))
return arr.Nm3[rnd] + arr.Nm4[rnd2]
}
func GnomeNameMas(arr *GnomeArrays, swearFilter func(string) bool) string {
rnd := rand.Intn(len(arr.Nm1))
rnd2 := rand.Intn(len(arr.Nm2))
return arr.Nm1[rnd] + arr.Nm2[rnd2]
}
func GnomeNameSur(arr *GnomeArrays, swearFilter func(string) bool) string {
nTp := rand.Intn(8)
if nTp < 2 {
rnd := rand.Intn(len(arr.Nm5))
rnd2 := rand.Intn(len(arr.Nm10))
rnd3 := rand.Intn(len(arr.Nm12))
rnd4 := rand.Intn(len(arr.Nm5))
rnd5 := rand.Intn(len(arr.Nm10))
for arr.Nm5[rnd] == "" {
rnd = rand.Intn(len(arr.Nm5))
}
for arr.Nm5[rnd4] == "" {
rnd4 = rand.Intn(len(arr.Nm5))
}
return arr.Nm5[rnd] + arr.Nm10[rnd2] + arr.Nm12[rnd3] + "e" + arr.Nm5[rnd4] + arr.Nm10[rnd5] + arr.Nm12[rnd3] + "e"
} else {
rnd := rand.Intn(len(arr.Nm5))
rnd2 := rand.Intn(len(arr.Nm6))
rnd3 := rand.Intn(len(arr.Nm7))
rnd4 := rand.Intn(len(arr.Nm8))
rnd5 := rand.Intn(len(arr.Nm11))
if nTp < 3 {
for arr.Nm7[rnd3] == arr.Nm5[rnd] || arr.Nm7[rnd3] == arr.Nm11[rnd5] {
rnd3 = rand.Intn(len(arr.Nm7))
}
return arr.Nm5[rnd] + arr.Nm6[rnd2] + arr.Nm7[rnd3] + arr.Nm8[rnd4] + arr.Nm11[rnd5]
} else {
rnd6 := rand.Intn(len(arr.Nm9))
rnd7 := rand.Intn(len(arr.Nm10))
for arr.Nm7[rnd3] == arr.Nm9[rnd6] || arr.Nm9[rnd6] == arr.Nm11[rnd5] {
rnd6 = rand.Intn(len(arr.Nm9))
}
if nTp < 5 {
return arr.Nm5[rnd] + arr.Nm6[rnd2] + arr.Nm7[rnd3] + arr.Nm8[rnd4] + arr.Nm9[rnd6] + arr.Nm10[rnd7] + arr.Nm11[rnd5]
} else {
rnd8 := rand.Intn(len(arr.Nm9))
rnd9 := rand.Intn(len(arr.Nm10))
for arr.Nm7[rnd3] == arr.Nm9[rnd8] || arr.Nm9[rnd6] == arr.Nm9[rnd8] {
rnd8 = rand.Intn(len(arr.Nm9))
}
return arr.Nm5[rnd] + arr.Nm6[rnd2] + arr.Nm7[rnd3] + arr.Nm8[rnd4] + arr.Nm9[rnd6] + arr.Nm10[rnd7] + arr.Nm9[rnd8] + arr.Nm10[rnd9] + arr.Nm11[rnd5]
}
}
}
}
func GenerateGnomeNames(arr *GnomeArrays, gender string, swearFilter func(string) bool) []string {
names := make([]string, 0, 10)
for i := 0; i < 10; i++ {
var nMs, baseName string
if i < 5 {
rnd := rand.Intn(len(arr.Nm13))
rnd2 := rand.Intn(len(arr.Nm14))
for arr.Nm13[rnd] == arr.Nm14[rnd2] {
rnd2 = rand.Intn(len(arr.Nm14))
}
baseName = arr.Nm13[rnd] + arr.Nm14[rnd2]
} else {
baseName = GnomeNameSur(arr, swearFilter)
for baseName == "" {
baseName = GnomeNameSur(arr, swearFilter)
}
}
if gender == "female" {
nMs = GnomeNameFem(arr, swearFilter)
for nMs == "" {
nMs = GnomeNameFem(arr, swearFilter)
}
} else {
nMs = GnomeNameMas(arr, swearFilter)
for nMs == "" {
nMs = GnomeNameMas(arr, swearFilter)
}
}
names = append(names, nMs+" "+baseName)
}
return names
}
+143
View File
@@ -0,0 +1,143 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
)
type GoblinArrays 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"`
}
func LoadGoblinArrays(path string) (GoblinArrays, error) {
var arrays GoblinArrays
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 GoblinNameMas(arr *GoblinArrays, swearFilter func(string) bool) string {
nTp := rand.Intn(3)
rnd := rand.Intn(len(arr.Nm1))
rnd2 := rand.Intn(len(arr.Nm2))
rnd5 := rand.Intn(len(arr.Nm4))
if nTp == 0 {
for arr.Nm1[rnd] == "" {
rnd = rand.Intn(len(arr.Nm1))
}
for arr.Nm4[rnd5] == "" {
rnd5 = rand.Intn(len(arr.Nm4))
}
nMs := arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm4[rnd5]
if swearFilter == nil || !swearFilter(nMs) {
return nMs
}
} else {
rnd3 := rand.Intn(len(arr.Nm3))
rnd4 := rand.Intn(len(arr.Nm2))
for arr.Nm3[rnd3] == arr.Nm1[rnd] || arr.Nm3[rnd3] == arr.Nm4[rnd5] {
rnd3 = rand.Intn(len(arr.Nm3))
}
nMs := arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm2[rnd4] + arr.Nm4[rnd5]
if swearFilter == nil || !swearFilter(nMs) {
return nMs
}
}
return ""
}
func GoblinNameFem(arr *GoblinArrays, swearFilter func(string) bool) string {
nTp := rand.Intn(5)
rnd := rand.Intn(len(arr.Nm5))
rnd2 := rand.Intn(len(arr.Nm6))
rnd5 := rand.Intn(len(arr.Nm9))
if nTp == 0 {
for arr.Nm5[rnd] == "" {
rnd = rand.Intn(len(arr.Nm5))
}
for arr.Nm9[rnd5] == "" {
rnd5 = rand.Intn(len(arr.Nm9))
}
nMs := arr.Nm5[rnd] + arr.Nm6[rnd2] + arr.Nm9[rnd5]
if swearFilter == nil || !swearFilter(nMs) {
return nMs
}
} else {
rnd3 := rand.Intn(len(arr.Nm7))
rnd4 := rand.Intn(len(arr.Nm6))
for arr.Nm7[rnd3] == arr.Nm5[rnd] || arr.Nm7[rnd3] == arr.Nm9[rnd5] {
rnd3 = rand.Intn(len(arr.Nm7))
}
if nTp < 4 {
nMs := arr.Nm5[rnd] + arr.Nm6[rnd2] + arr.Nm7[rnd3] + arr.Nm6[rnd4] + arr.Nm9[rnd5]
if swearFilter == nil || !swearFilter(nMs) {
return nMs
}
} else {
rnd6 := rand.Intn(len(arr.Nm8))
rnd7 := rand.Intn(len(arr.Nm6))
for arr.Nm7[rnd3] == arr.Nm8[rnd6] || arr.Nm8[rnd6] == arr.Nm9[rnd5] {
rnd6 = rand.Intn(len(arr.Nm8))
}
nMs := arr.Nm5[rnd] + arr.Nm6[rnd2] + arr.Nm7[rnd3] + arr.Nm6[rnd4] + arr.Nm8[rnd6] + arr.Nm6[rnd7] + arr.Nm9[rnd5]
if swearFilter == nil || !swearFilter(nMs) {
return nMs
}
}
}
return ""
}
func GenerateGoblinNames(arr *GoblinArrays, gender string, swearFilter func(string) bool) []string {
names := make([]string, 0, 10)
for i := 0; i < 10; i++ {
var nMs string
if i < 5 {
if gender == "female" {
nMs = GoblinNameFem(arr, swearFilter)
for nMs == "" {
nMs = GoblinNameFem(arr, swearFilter)
}
} else {
nMs = GoblinNameMas(arr, swearFilter)
for nMs == "" {
nMs = GoblinNameMas(arr, swearFilter)
}
}
} else {
nTp := rand.Intn(2)
if nTp == 0 {
rnd := rand.Intn(len(arr.Nm10))
nMs = arr.Nm10[rnd]
} else {
rnd := rand.Intn(len(arr.Nm11))
rnd2 := rand.Intn(len(arr.Nm12))
if arr.Nm11[rnd][len(arr.Nm11[rnd])-1] == 'y' || arr.Nm11[rnd][len(arr.Nm11[rnd])-1] == 'e' {
for arr.Nm12[rnd2][0] == 'a' || arr.Nm12[rnd2][0] == 'e' {
rnd2 = rand.Intn(len(arr.Nm12))
}
}
nMs = arr.Nm11[rnd] + arr.Nm12[rnd2]
}
}
names = append(names, nMs)
}
return names
}
+79
View File
@@ -0,0 +1,79 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
)
type GoliathArrays struct {
NmFF []string `json:"nmFF"`
NmFL []string `json:"nmFL"`
NmMF []string `json:"nmMF"`
NmML []string `json:"nmML"`
NmMdF []string `json:"nmMdF"`
NmMdL []string `json:"nmMdL"`
NmSF []string `json:"nmSF"`
NmSL []string `json:"nmSL"`
}
func LoadGoliathArrays(path string) (GoliathArrays, error) {
var arrays GoliathArrays
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 GoliathNameFem(arr *GoliathArrays, swearFilter func(string) bool) string {
rnd := rand.Intn(len(arr.NmFF))
rnd2 := rand.Intn(len(arr.NmFL))
nMs := arr.NmFF[rnd] + arr.NmFL[rnd2]
if swearFilter == nil || !swearFilter(nMs) {
return nMs
}
return ""
}
func GoliathNameMas(arr *GoliathArrays, swearFilter func(string) bool) string {
rnd := rand.Intn(len(arr.NmMF))
rnd2 := rand.Intn(len(arr.NmML))
nMs := arr.NmMF[rnd] + arr.NmML[rnd2]
if swearFilter == nil || !swearFilter(nMs) {
return nMs
}
return ""
}
func GoliathNameSur(arr *GoliathArrays) string {
rnd := rand.Intn(len(arr.NmMdF))
rnd2 := rand.Intn(len(arr.NmMdL))
rnd3 := rand.Intn(len(arr.NmSF))
rnd4 := rand.Intn(len(arr.NmSL))
return arr.NmMdF[rnd] + arr.NmMdL[rnd2] + " " + arr.NmSF[rnd3] + arr.NmSL[rnd4]
}
func GenerateGoliathNames(arr *GoliathArrays, gender string, swearFilter func(string) bool) []string {
names := make([]string, 0, 10)
for i := 0; i < 10; i++ {
nSr := GoliathNameSur(arr)
var nMs string
if gender == "female" {
nMs = GoliathNameFem(arr, swearFilter)
for nMs == "" {
nMs = GoliathNameFem(arr, swearFilter)
}
} else {
nMs = GoliathNameMas(arr, swearFilter)
for nMs == "" {
nMs = GoliathNameMas(arr, swearFilter)
}
}
names = append(names, nMs+" "+nSr)
}
return names
}
+92
View File
@@ -0,0 +1,92 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
"strings"
)
type GrungArrays 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"`
}
func LoadGrungArrays(path string) (GrungArrays, error) {
var arrays GrungArrays
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 GrungName(arr *GrungArrays, swearFilter func(string) bool) string {
for {
nTp := rand.Intn(8)
rnd := rand.Intn(len(arr.Nm1))
rnd3 := rand.Intn(len(arr.Nm3))
rnd4 := rand.Intn(len(arr.Nm4))
var nMs string
if nTp < 4 {
rnd2 := rand.Intn(len(arr.Nm2))
for arr.Nm1[rnd] == arr.Nm2[rnd2] {
rnd2 = rand.Intn(len(arr.Nm2))
}
nTmp := arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm4[rnd4]
nTmp = strings.Title(nTmp)
nMs = arr.Nm1[rnd] + "'" + nTmp
} else if nTp < 6 {
rnd2 := rand.Intn(len(arr.Nm1))
nTmp := arr.Nm3[rnd3]
nTmp = strings.Title(nTmp)
nMs = arr.Nm1[rnd] + "'" + nTmp + arr.Nm4[rnd4] + "'" + arr.Nm1[rnd2] + "'" + nTmp + arr.Nm4[rnd4]
} else {
rnd2 := rand.Intn(len(arr.Nm2))
rnd5 := rand.Intn(len(arr.Nm5))
rnd6 := rand.Intn(len(arr.Nm6))
rnd7 := rand.Intn(len(arr.Nm7))
rnd8 := rand.Intn(len(arr.Nm8))
rnd9 := rand.Intn(len(arr.Nm4))
if nTp == 6 {
for rnd7 < 3 && rnd9 < 3 {
rnd9 = rand.Intn(len(arr.Nm4))
}
nTmp := arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm4[rnd4] + "-" + arr.Nm5[rnd5] + arr.Nm6[rnd6] + arr.Nm7[rnd7] + arr.Nm8[rnd8] + arr.Nm4[rnd9]
nTmp = strings.Title(nTmp)
nMs = arr.Nm1[rnd] + "'" + nTmp
} else {
for rnd5 < 3 && rnd9 < 3 {
rnd9 = rand.Intn(len(arr.Nm4))
}
for rnd5 < 3 && rnd4 < 3 {
rnd4 = rand.Intn(len(arr.Nm4))
}
nTmp := arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm7[rnd7] + arr.Nm8[rnd8] + arr.Nm4[rnd9] + "'" + arr.Nm5[rnd5] + arr.Nm6[rnd6] + arr.Nm4[rnd4]
nTmp = strings.Title(nTmp)
nMs = arr.Nm1[rnd] + "'" + nTmp
}
}
if swearFilter == nil || !swearFilter(nMs) {
return nMs
}
}
}
func GenerateGrungNames(arr *GrungArrays, swearFilter func(string) bool) []string {
names := make([]string, 0, 10)
for i := 0; i < 10; i++ {
n := GrungName(arr, swearFilter)
names = append(names, n)
}
return names
}
+66
View File
@@ -0,0 +1,66 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
)
type HalfElfArrays struct {
Nm1 []string `json:"nm1"`
Nm2 []string `json:"nm2"`
Nm3 []string `json:"nm3"`
Nm4 []string `json:"nm4"`
}
func LoadHalfElfArrays(path string) (HalfElfArrays, error) {
var arrays HalfElfArrays
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 HalfElfNameFem(arr *HalfElfArrays, swearFilter func(string) bool) string {
rnd := rand.Intn(len(arr.Nm3))
rnd2 := rand.Intn(len(arr.Nm4))
nMs := arr.Nm3[rnd] + arr.Nm4[rnd2]
if swearFilter == nil || !swearFilter(nMs) {
return nMs
}
return ""
}
func HalfElfNameMas(arr *HalfElfArrays, swearFilter func(string) bool) string {
rnd := rand.Intn(len(arr.Nm1))
rnd2 := rand.Intn(len(arr.Nm2))
nMs := arr.Nm1[rnd] + arr.Nm2[rnd2]
if swearFilter == nil || !swearFilter(nMs) {
return nMs
}
return ""
}
func GenerateHalfElfNames(arr *HalfElfArrays, gender string, swearFilter func(string) bool) []string {
names := make([]string, 0, 10)
for i := 0; i < 10; i++ {
var nMs string
if gender == "female" {
nMs = HalfElfNameFem(arr, swearFilter)
for nMs == "" {
nMs = HalfElfNameFem(arr, swearFilter)
}
} else {
nMs = HalfElfNameMas(arr, swearFilter)
for nMs == "" {
nMs = HalfElfNameMas(arr, swearFilter)
}
}
names = append(names, nMs)
}
return names
}
+70
View File
@@ -0,0 +1,70 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
)
type HalfOrcArrays 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"`
}
func LoadHalfOrcArrays(path string) (HalfOrcArrays, error) {
var arrays HalfOrcArrays
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 HalfOrcNameFem(arr *HalfOrcArrays, swearFilter func(string) bool) string {
rnd := rand.Intn(len(arr.Nm4))
rnd2 := rand.Intn(len(arr.Nm5))
rnd3 := rand.Intn(len(arr.Nm6))
nMs := arr.Nm4[rnd] + arr.Nm5[rnd2] + arr.Nm6[rnd3]
if swearFilter == nil || !swearFilter(nMs) {
return nMs
}
return ""
}
func HalfOrcNameMas(arr *HalfOrcArrays, swearFilter func(string) bool) string {
rnd := rand.Intn(len(arr.Nm1))
rnd2 := rand.Intn(len(arr.Nm2))
rnd3 := rand.Intn(len(arr.Nm3))
nMs := arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd3]
if swearFilter == nil || !swearFilter(nMs) {
return nMs
}
return ""
}
func GenerateHalfOrcNames(arr *HalfOrcArrays, gender string, swearFilter func(string) bool) []string {
names := make([]string, 0, 10)
for i := 0; i < 10; i++ {
var nMs string
if gender == "female" {
nMs = HalfOrcNameFem(arr, swearFilter)
for nMs == "" {
nMs = HalfOrcNameFem(arr, swearFilter)
}
} else {
nMs = HalfOrcNameMas(arr, swearFilter)
for nMs == "" {
nMs = HalfOrcNameMas(arr, swearFilter)
}
}
names = append(names, nMs)
}
return names
}
+77
View File
@@ -0,0 +1,77 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
)
type HalflingArrays struct {
Nm1 []string `json:"nm1"`
Nm2 []string `json:"nm2"`
Nm3 []string `json:"nm3"`
Nm4 []string `json:"nm4"`
Nm12 []string `json:"nm12"`
Nm13 []string `json:"nm13"`
}
func LoadHalflingArrays(path string) (HalflingArrays, error) {
var arrays HalflingArrays
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 HalflingNameFem(arr *HalflingArrays) string {
rnd := rand.Intn(len(arr.Nm3))
rnd2 := rand.Intn(len(arr.Nm4))
return arr.Nm3[rnd] + arr.Nm4[rnd2]
}
func HalflingNameMas(arr *HalflingArrays, swearFilter func(string) bool) string {
rnd := rand.Intn(len(arr.Nm1))
rnd2 := rand.Intn(len(arr.Nm2))
nMs := arr.Nm1[rnd] + arr.Nm2[rnd2]
if swearFilter == nil || !swearFilter(nMs) {
return nMs
}
return ""
}
func GenerateHalflingNames(arr *HalflingArrays, gender string, swearFilter func(string) bool) []string {
names := make([]string, 0, 10)
nm12 := make([]string, len(arr.Nm12))
nm13 := make([]string, len(arr.Nm13))
copy(nm12, arr.Nm12)
copy(nm13, arr.Nm13)
for i := 0; i < 10; i++ {
var nMs string
if gender == "female" {
nMs = HalflingNameFem(arr)
for nMs == "" {
nMs = HalflingNameFem(arr)
}
} else {
nMs = HalflingNameMas(arr, swearFilter)
for nMs == "" {
nMs = HalflingNameMas(arr, swearFilter)
}
}
// Surname logic
rnd := rand.Intn(len(nm12))
rnd2 := rand.Intn(len(nm13))
for nm12[rnd] == nm13[rnd2] {
rnd2 = rand.Intn(len(nm13))
}
surname := nm12[rnd] + nm13[rnd2]
nm12 = append(nm12[:rnd], nm12[rnd+1:]...)
nm13 = append(nm13[:rnd2], nm13[rnd2+1:]...)
names = append(names, nMs+" "+surname)
}
return names
}
+115
View File
@@ -0,0 +1,115 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
)
type HarengonArrays 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"`
}
func LoadHarengonArrays(path string) (HarengonArrays, error) {
var arrays HarengonArrays
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 HarengonNameFemT(arr *HarengonArrays, swearFilter func(string) bool) string {
rnd := rand.Intn(len(arr.Nm3))
rnd2 := rand.Intn(len(arr.Nm4))
nMs := arr.Nm3[rnd] + arr.Nm4[rnd2]
if swearFilter == nil || !swearFilter(nMs) {
return nMs
}
return ""
}
func HarengonNameMasT(arr *HarengonArrays, swearFilter func(string) bool) string {
rnd := rand.Intn(len(arr.Nm1))
rnd2 := rand.Intn(len(arr.Nm2))
nMs := arr.Nm1[rnd] + arr.Nm2[rnd2]
if swearFilter == nil || !swearFilter(nMs) {
return nMs
}
return ""
}
func GenerateHarengonNames(arr *HarengonArrays, gender string, swearFilter func(string) bool) []string {
names := make([]string, 0, 10)
for i := 0; i < 10; i++ {
var nMs string
if gender == "female" {
if i < 6 {
nMs = HarengonNameFem(arr, swearFilter)
for nMs == "" {
nMs = HarengonNameFem(arr, swearFilter)
}
} else {
nMs = HarengonNameFemT(arr, swearFilter)
for nMs == "" {
nMs = HarengonNameFemT(arr, swearFilter)
}
}
} else {
if i < 6 {
nMs = HarengonNameFem(arr, swearFilter)
for nMs == "" {
nMs = HarengonNameFem(arr, swearFilter)
}
} else {
nMs = HarengonNameMasT(arr, swearFilter)
for nMs == "" {
nMs = HarengonNameMasT(arr, swearFilter)
}
}
}
names = append(names, nMs)
}
return names
}
func HarengonNameFem(arr *HarengonArrays, swearFilter func(string) bool) string {
nTp := rand.Intn(3)
rnd := rand.Intn(len(arr.Nm5))
rnd2 := rand.Intn(len(arr.Nm6))
rnd3 := rand.Intn(len(arr.Nm7))
rnd4 := rand.Intn(len(arr.Nm8))
rnd5 := rand.Intn(len(arr.Nm10))
for arr.Nm7[rnd3] == arr.Nm5[rnd] && arr.Nm10[rnd5] != "" {
rnd3 = rand.Intn(len(arr.Nm7))
}
var nMs string
if nTp < 2 {
nMs = arr.Nm5[rnd] + arr.Nm6[rnd2] + arr.Nm7[rnd3] + arr.Nm8[rnd4] + arr.Nm10[rnd5]
} else {
nTp = rand.Intn(2)
rnd6 := rand.Intn(len(arr.Nm8))
rnd7 := rand.Intn(len(arr.Nm9))
if nTp == 0 {
nMs = arr.Nm5[rnd] + arr.Nm6[rnd2] + arr.Nm7[rnd3] + arr.Nm8[rnd4] + arr.Nm9[rnd7] + arr.Nm8[rnd6] + arr.Nm10[rnd5]
} else {
nMs = arr.Nm5[rnd] + arr.Nm6[rnd2] + arr.Nm9[rnd7] + arr.Nm8[rnd6] + arr.Nm7[rnd3] + arr.Nm8[rnd4] + arr.Nm10[rnd5]
}
}
if swearFilter == nil || !swearFilter(nMs) {
return nMs
}
return ""
}
+80
View File
@@ -0,0 +1,80 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
)
type HobgoblinArrays 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"`
}
func LoadHobgoblinArrays(path string) (HobgoblinArrays, error) {
var arrays HobgoblinArrays
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 HobgoblinName(arr *HobgoblinArrays, swearFilter func(string) bool) string {
nTp := rand.Intn(5)
rnd := rand.Intn(len(arr.Nm1))
rnd2 := rand.Intn(len(arr.Nm2))
rnd5 := rand.Intn(len(arr.Nm7))
var nMs string
if nTp == 0 {
for arr.Nm1[rnd] == "" {
rnd = rand.Intn(len(arr.Nm1))
}
nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm7[rnd5]
} else {
rnd3 := rand.Intn(len(arr.Nm3))
rnd4 := rand.Intn(len(arr.Nm6))
for arr.Nm3[rnd3] == arr.Nm1[rnd] || arr.Nm3[rnd3] == arr.Nm7[rnd5] {
rnd3 = rand.Intn(len(arr.Nm3))
}
if nTp < 4 {
nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm6[rnd4] + arr.Nm7[rnd5]
} else {
rnd6 := rand.Intn(len(arr.Nm5))
rnd7 := rand.Intn(len(arr.Nm4))
for arr.Nm3[rnd3] == arr.Nm5[rnd6] || arr.Nm5[rnd6] == arr.Nm7[rnd5] {
rnd6 = rand.Intn(len(arr.Nm5))
}
nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm4[rnd7] + arr.Nm5[rnd6] + arr.Nm6[rnd4] + arr.Nm7[rnd5]
}
}
if swearFilter == nil || !swearFilter(nMs) {
return nMs
}
return ""
}
func GenerateHobgoblinNames(arr *HobgoblinArrays, swearFilter func(string) bool) []string {
names := make([]string, 0, 10)
for i := 0; i < 10; i++ {
nMs := HobgoblinName(arr, swearFilter)
for nMs == "" {
nMs = HobgoblinName(arr, swearFilter)
}
if i > 4 {
rnd := rand.Intn(len(arr.Nm8))
nMs = nMs + " " + arr.Nm8[rnd]
}
names = append(names, nMs)
}
return names
}
+81
View File
@@ -0,0 +1,81 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
)
type HumanArrays 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"`
Nm14 []string `json:"nm14"`
Nm15 []string `json:"nm15"`
Nm16 []string `json:"nm16"`
Nm17 []string `json:"nm17"`
Nm18 []string `json:"nm18"`
Nm19 []string `json:"nm19"`
Nm20 []string `json:"nm20"`
Nm21 []string `json:"nm21"`
Nm22 []string `json:"nm22"`
}
func LoadHumanArrays(path string) (HumanArrays, error) {
var arrays HumanArrays
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
}
// Example: Generate a simple human name (Calashite male)
func HumanNameCalashiteMas(arr *HumanArrays, swearFilter func(string) bool) string {
rnd := rand.Intn(len(arr.Nm1))
rnd2 := rand.Intn(len(arr.Nm2))
rnd3 := rand.Intn(len(arr.Nm3))
rnd4 := rand.Intn(len(arr.Nm4))
rnd5 := rand.Intn(len(arr.Nm5))
nMs := arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm4[rnd4] + arr.Nm5[rnd5]
if swearFilter == nil || !swearFilter(nMs) {
return nMs
}
return ""
}
// Add more generators for other ethnicities and genders as needed
func GenerateHumanNames(arr *HumanArrays, gender string, swearFilter func(string) bool) []string {
names := make([]string, 0, 10)
for i := 0; i < 10; i++ {
var nMs string
if gender == "female" {
// Placeholder: implement female logic as needed
nMs = HumanNameCalashiteMas(arr, swearFilter) // Replace with actual female logic
for nMs == "" {
nMs = HumanNameCalashiteMas(arr, swearFilter)
}
} else {
nMs = HumanNameCalashiteMas(arr, swearFilter)
for nMs == "" {
nMs = HumanNameCalashiteMas(arr, swearFilter)
}
}
names = append(names, nMs)
}
return names
}
+71
View File
@@ -0,0 +1,71 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
)
type KalashtarArrays 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 LoadKalashtarArrays(path string) (KalashtarArrays, error) {
var arrays KalashtarArrays
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 KalashtarNameMas(arr *KalashtarArrays, swearFilter func(string) bool) string {
nTp := rand.Intn(4)
rnd := rand.Intn(len(arr.Nm1))
rnd2 := rand.Intn(len(arr.Nm2))
var nMs string
if nTp < 2 {
if nTp == 0 {
nMs = arr.Nm1[rnd]
} else {
nMs = arr.Nm1[rnd] + arr.Nm2[rnd2]
}
} else {
rnd3 := rand.Intn(len(arr.Nm3))
rnd4 := rand.Intn(len(arr.Nm4))
if nTp == 2 {
nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd3]
} else {
nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm4[rnd4]
}
}
if swearFilter == nil || !swearFilter(nMs) {
return nMs
}
return ""
}
func GenerateKalashtarNames(arr *KalashtarArrays, swearFilter func(string) bool) []string {
names := make([]string, 0, 10)
for i := 0; i < 10; i++ {
nMs := KalashtarNameMas(arr, swearFilter)
for nMs == "" {
nMs = KalashtarNameMas(arr, swearFilter)
}
names = append(names, nMs)
}
return names
}
+53
View File
@@ -0,0 +1,53 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
)
type KenkuArrays struct {
Nm1 []string `json:"nm1"`
Nm2 []string `json:"nm2"`
Nm3 []string `json:"nm3"`
}
func LoadKenkuArrays(path string) (KenkuArrays, error) {
var arrays KenkuArrays
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 GenerateKenkuNames(arr *KenkuArrays) []string {
names := make([]string, 0, 10)
nm1 := make([]string, len(arr.Nm1))
nm2 := make([]string, len(arr.Nm2))
nm3 := make([]string, len(arr.Nm3))
copy(nm1, arr.Nm1)
copy(nm2, arr.Nm2)
copy(nm3, arr.Nm3)
for i := 0; i < 10; i++ {
var name string
if i < 4 {
rnd := rand.Intn(len(nm1))
name = nm1[rnd]
nm1 = append(nm1[:rnd], nm1[rnd+1:]...)
} else if i < 7 {
rnd := rand.Intn(len(nm2))
name = nm2[rnd]
nm2 = append(nm2[:rnd], nm2[rnd+1:]...)
} else {
rnd := rand.Intn(len(nm3))
name = nm3[rnd]
nm3 = append(nm3[:rnd], nm3[rnd+1:]...)
}
names = append(names, name)
}
return names
}
+70
View File
@@ -0,0 +1,70 @@
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
}
+140
View File
@@ -0,0 +1,140 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
)
type LeoninArrays 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"`
Nm14 []string `json:"nm14"`
Nm16 []string `json:"nm16"`
Nm17 []string `json:"nm17"`
}
func LoadLeoninArrays(path string) (LeoninArrays, error) {
var arrays LeoninArrays
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 LeoninNameFem(arr *LeoninArrays, swearFilter func(string) bool) string {
nTp := rand.Intn(7)
rnd := rand.Intn(len(arr.Nm8))
rnd2 := rand.Intn(len(arr.Nm9))
rnd3 := rand.Intn(len(arr.Nm10))
rnd4 := rand.Intn(len(arr.Nm13))
rnd5 := rand.Intn(len(arr.Nm14))
var nMs string
if nTp < 3 {
for arr.Nm10[rnd3] == arr.Nm14[rnd5] || arr.Nm10[rnd3] == arr.Nm8[rnd] {
rnd3 = rand.Intn(len(arr.Nm10))
}
nMs = arr.Nm8[rnd] + arr.Nm9[rnd2] + arr.Nm10[rnd3] + arr.Nm13[rnd4] + arr.Nm14[rnd5]
} else {
rnd6 := rand.Intn(len(arr.Nm11))
rnd7 := rand.Intn(len(arr.Nm12))
for arr.Nm14[rnd5] == arr.Nm12[rnd7] || arr.Nm12[rnd7] == arr.Nm10[rnd3] {
rnd7 = rand.Intn(len(arr.Nm12))
}
if nTp < 6 {
nMs = arr.Nm8[rnd] + arr.Nm9[rnd2] + arr.Nm10[rnd3] + arr.Nm11[rnd6] + arr.Nm12[rnd7] + arr.Nm13[rnd4] + arr.Nm14[rnd5]
} else {
rnd8 := rand.Intn(len(arr.Nm11))
rnd9 := rand.Intn(len(arr.Nm12))
for arr.Nm14[rnd5] == arr.Nm12[rnd9] || arr.Nm12[rnd9] == arr.Nm12[rnd7] {
rnd9 = rand.Intn(len(arr.Nm12))
}
nMs = arr.Nm8[rnd] + arr.Nm9[rnd2] + arr.Nm10[rnd3] + arr.Nm11[rnd6] + arr.Nm12[rnd7] + arr.Nm11[rnd8] + arr.Nm12[rnd9] + arr.Nm13[rnd4] + arr.Nm14[rnd5]
}
}
if swearFilter == nil || !swearFilter(nMs) {
return nMs
}
return ""
}
func LeoninNameMas(arr *LeoninArrays, swearFilter func(string) bool) string {
nTp := rand.Intn(5)
rnd := rand.Intn(len(arr.Nm1))
rnd2 := rand.Intn(3)
rnd5 := rand.Intn(len(arr.Nm7))
var nMs string
if nTp == 0 {
for arr.Nm1[rnd] == "" {
rnd = rand.Intn(len(arr.Nm1))
}
for arr.Nm7[rnd5] == "" {
rnd5 = rand.Intn(len(arr.Nm7))
}
nMs = arr.Nm1[rnd] + arr.Nm6[rnd2] + arr.Nm7[rnd5]
} else {
if nTp < 4 {
rnd2 = rand.Intn(len(arr.Nm2))
rnd3 := rand.Intn(len(arr.Nm3))
rnd4 := rand.Intn(len(arr.Nm6))
for arr.Nm3[rnd3] == arr.Nm7[rnd5] || arr.Nm3[rnd3] == arr.Nm1[rnd] {
rnd3 = rand.Intn(len(arr.Nm3))
}
nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm6[rnd4] + arr.Nm7[rnd5]
} else {
rnd3 := rand.Intn(len(arr.Nm3))
rnd4 := rand.Intn(len(arr.Nm6))
rnd6 := rand.Intn(len(arr.Nm4))
rnd7 := rand.Intn(len(arr.Nm5))
for arr.Nm3[rnd5] == arr.Nm5[rnd7] || arr.Nm5[rnd7] == arr.Nm7[rnd5] {
rnd7 = rand.Intn(len(arr.Nm5))
}
nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm4[rnd6] + arr.Nm5[rnd7] + arr.Nm6[rnd4] + arr.Nm7[rnd5]
}
}
if swearFilter == nil || !swearFilter(nMs) {
return nMs
}
return ""
}
func GenerateLeoninNames(arr *LeoninArrays, gender string, swearFilter func(string) bool) []string {
names := make([]string, 0, 10)
for i := 0; i < 10; i++ {
var nMs string
if gender == "female" {
nMs = LeoninNameFem(arr, swearFilter)
for nMs == "" {
nMs = LeoninNameFem(arr, swearFilter)
}
} else {
nMs = LeoninNameMas(arr, swearFilter)
for nMs == "" {
nMs = LeoninNameMas(arr, swearFilter)
}
}
rnd := rand.Intn(len(arr.Nm16))
rnd2 := rand.Intn(len(arr.Nm17))
for arr.Nm16[rnd] == arr.Nm17[rnd2] {
rnd2 = rand.Intn(len(arr.Nm17))
}
nMs += " " + arr.Nm16[rnd] + arr.Nm17[rnd2]
names = append(names, nMs)
}
return names
}
+99
View File
@@ -0,0 +1,99 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
)
type LizardfolkArrays 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"`
}
func LoadLizardfolkArrays(path string) (LizardfolkArrays, error) {
var arrays LizardfolkArrays
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 LizardfolkNameMas(arr *LizardfolkArrays, i int, swearFilter func(string) bool) string {
rnd := rand.Intn(len(arr.Nm1))
rnd2 := rand.Intn(len(arr.Nm2))
rnd3 := rand.Intn(len(arr.Nm6))
var nMs string
if i < 2 {
if rnd < 5 {
for arr.Nm6[rnd3] == arr.Nm1[rnd] {
rnd3 = rand.Intn(len(arr.Nm6))
}
}
nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm6[rnd3]
} else {
rnd4 := rand.Intn(len(arr.Nm3))
rnd5 := rand.Intn(len(arr.Nm4))
for arr.Nm3[rnd4] == arr.Nm1[rnd] || arr.Nm3[rnd4] == arr.Nm6[rnd3] {
rnd4 = rand.Intn(len(arr.Nm3))
}
if i < 7 {
nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd4] + arr.Nm4[rnd5] + arr.Nm6[rnd3]
} else {
rnd6 := rand.Intn(len(arr.Nm2))
rnd7 := rand.Intn(len(arr.Nm5))
for arr.Nm5[rnd7] == arr.Nm3[rnd4] || arr.Nm5[rnd7] == arr.Nm6[rnd3] {
rnd7 = rand.Intn(len(arr.Nm5))
}
nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd4] + arr.Nm2[rnd6] + arr.Nm5[rnd7] + arr.Nm4[rnd5] + arr.Nm6[rnd3]
}
}
if swearFilter != nil && swearFilter(nMs) {
return ""
}
return nMs
}
func LizardfolkNameWord(arr *LizardfolkArrays, used map[int]bool) string {
if len(used) >= len(arr.Nm7) {
return ""
}
for {
rnd := rand.Intn(len(arr.Nm7))
if !used[rnd] {
used[rnd] = true
return arr.Nm7[rnd]
}
}
}
func GenerateLizardfolkNames(arr *LizardfolkArrays, gender string, swearFilter func(string) bool) []string {
names := make([]string, 0, 10)
if gender == "female" {
used := make(map[int]bool)
for i := 0; i < 10; i++ {
word := LizardfolkNameWord(arr, used)
if word != "" {
names = append(names, word)
}
}
} else {
for i := 0; i < 10; i++ {
n := LizardfolkNameMas(arr, i, swearFilter)
for n == "" {
n = LizardfolkNameMas(arr, i, swearFilter)
}
names = append(names, n)
}
}
return names
}
+55
View File
@@ -0,0 +1,55 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
)
type LocathahArrays struct {
Nm1 []string `json:"nm1"`
Nm2 []string `json:"nm2"`
Nm3 []string `json:"nm3"`
Nm4 []string `json:"nm4"`
Nm5 []string `json:"nm5"`
}
func LoadLocathahArrays(path string) (LocathahArrays, error) {
var arrays LocathahArrays
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 LocathahNameMas(arr *LocathahArrays, swearFilter func(string) bool) string {
rnd := rand.Intn(len(arr.Nm1))
rnd2 := rand.Intn(len(arr.Nm2))
rnd3 := rand.Intn(len(arr.Nm3))
rnd4 := rand.Intn(len(arr.Nm4))
rnd5 := rand.Intn(len(arr.Nm5))
for arr.Nm3[rnd3] == arr.Nm5[rnd5] || arr.Nm3[rnd3] == arr.Nm1[rnd] {
rnd3 = rand.Intn(len(arr.Nm3))
}
nMs := arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm4[rnd4] + arr.Nm5[rnd5]
if swearFilter != nil && swearFilter(nMs) {
return ""
}
return nMs
}
func GenerateLocathahNames(arr *LocathahArrays, swearFilter func(string) bool) []string {
names := make([]string, 0, 10)
for i := 0; i < 10; i++ {
n := LocathahNameMas(arr, swearFilter)
for n == "" {
n = LocathahNameMas(arr, swearFilter)
}
names = append(names, n)
}
return names
}
+121
View File
@@ -0,0 +1,121 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
)
type LoxodonArrays 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 LoadLoxodonArrays(path string) (LoxodonArrays, error) {
var arrays LoxodonArrays
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 LoxodonNameMas(arr *LoxodonArrays, swearFilter func(string) bool) string {
nTp := rand.Intn(5)
rnd := rand.Intn(len(arr.Nm1))
rnd2 := rand.Intn(len(arr.Nm2))
rnd5 := rand.Intn(len(arr.Nm6))
var nMs string
if nTp == 0 {
for arr.Nm1[rnd] == "" {
rnd = rand.Intn(len(arr.Nm1))
}
nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm6[rnd5]
} else {
rnd3 := rand.Intn(len(arr.Nm3))
rnd4 := rand.Intn(len(arr.Nm4))
for arr.Nm3[rnd3] == arr.Nm1[rnd] || arr.Nm3[rnd3] == arr.Nm6[rnd5] {
rnd3 = rand.Intn(len(arr.Nm3))
}
if rnd2 == 0 {
for rnd4 == 0 {
rnd4 = rand.Intn(len(arr.Nm4))
}
}
if nTp < 4 {
nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm4[rnd4] + arr.Nm6[rnd5]
} else {
rnd6 := rand.Intn(len(arr.Nm5))
for arr.Nm3[rnd3] == arr.Nm5[rnd6] || arr.Nm5[rnd6] == arr.Nm6[rnd5] {
rnd6 = rand.Intn(len(arr.Nm5))
}
nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm4[rnd4] + arr.Nm5[rnd6] + "o" + arr.Nm6[rnd5]
}
}
if swearFilter != nil && swearFilter(nMs) {
return ""
}
return nMs
}
func LoxodonNameFem(arr *LoxodonArrays, swearFilter func(string) bool) string {
nTp := rand.Intn(3)
rnd := rand.Intn(len(arr.Nm7))
rnd2 := rand.Intn(len(arr.Nm8))
rnd3 := rand.Intn(len(arr.Nm9))
rnd4 := rand.Intn(len(arr.Nm12))
rnd5 := rand.Intn(len(arr.Nm13))
var nMs string
if nTp < 2 {
for arr.Nm7[rnd] == arr.Nm9[rnd3] || arr.Nm9[rnd3] == arr.Nm13[rnd5] {
rnd3 = rand.Intn(len(arr.Nm9))
}
nMs = arr.Nm7[rnd] + arr.Nm8[rnd2] + arr.Nm9[rnd3] + arr.Nm12[rnd4] + arr.Nm13[rnd5]
} else {
rnd7 := rand.Intn(len(arr.Nm11))
for arr.Nm11[rnd7] == arr.Nm9[rnd3] || arr.Nm11[rnd7] == arr.Nm13[rnd5] {
rnd7 = rand.Intn(len(arr.Nm11))
}
nMs = arr.Nm7[rnd] + arr.Nm8[rnd2] + arr.Nm9[rnd3] + arr.Nm12[rnd4] + arr.Nm13[rnd5]
}
if swearFilter != nil && swearFilter(nMs) {
return ""
}
return nMs
}
func GenerateLoxodonNames(arr *LoxodonArrays, gender string, swearFilter func(string) bool) []string {
names := make([]string, 0, 10)
if gender == "female" {
for i := 0; i < 10; i++ {
n := LoxodonNameFem(arr, swearFilter)
for n == "" {
n = LoxodonNameFem(arr, swearFilter)
}
names = append(names, n)
}
} else {
for i := 0; i < 10; i++ {
n := LoxodonNameMas(arr, swearFilter)
for n == "" {
n = LoxodonNameMas(arr, swearFilter)
}
names = append(names, n)
}
}
return names
}
+82
View File
@@ -0,0 +1,82 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
)
type MinotaurArrays struct {
NmFF []string `json:"nmFF"`
NmFL []string `json:"nmFL"`
NmMF []string `json:"nmMF"`
NmML []string `json:"nmML"`
NmSF []string `json:"nmSF"`
NmSL []string `json:"nmSL"`
}
func LoadMinotaurArrays(path string) (MinotaurArrays, error) {
var arrays MinotaurArrays
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 MinotaurNameFem(arr *MinotaurArrays, swearFilter func(string) bool) string {
rnd := rand.Intn(len(arr.NmFF))
rnd2 := rand.Intn(len(arr.NmFL))
nMs := arr.NmFF[rnd] + arr.NmFL[rnd2]
if swearFilter != nil && swearFilter(nMs) {
return ""
}
return nMs
}
func MinotaurNameMas(arr *MinotaurArrays, i int, swearFilter func(string) bool) string {
var nMs string
if i < 5 {
rnd := rand.Intn(len(arr.NmFF))
rnd2 := rand.Intn(len(arr.NmFL))
nMs = arr.NmFF[rnd] + arr.NmFL[rnd2]
} else {
rnd := rand.Intn(len(arr.NmMF))
rnd2 := rand.Intn(len(arr.NmML))
nMs = arr.NmMF[rnd] + arr.NmML[rnd2]
}
if swearFilter != nil && swearFilter(nMs) {
return ""
}
return nMs
}
func MinotaurSurname(arr *MinotaurArrays) string {
rnd := rand.Intn(len(arr.NmSF))
rnd2 := rand.Intn(len(arr.NmSL))
return arr.NmSF[rnd] + arr.NmSL[rnd2]
}
func GenerateMinotaurNames(arr *MinotaurArrays, gender string, swearFilter func(string) bool) []string {
names := make([]string, 0, 10)
for i := 0; i < 10; i++ {
var nMs string
if gender == "female" {
nMs = MinotaurNameFem(arr, swearFilter)
for nMs == "" {
nMs = MinotaurNameFem(arr, swearFilter)
}
} else {
nMs = MinotaurNameMas(arr, i, swearFilter)
for nMs == "" {
nMs = MinotaurNameMas(arr, i, swearFilter)
}
}
nMs = nMs + " " + MinotaurSurname(arr)
names = append(names, nMs)
}
return names
}
+74
View File
@@ -0,0 +1,74 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
)
type ModernEnglishArrays 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"`
}
func LoadModernEnglishArrays(path string) (ModernEnglishArrays, error) {
var arr ModernEnglishArrays
f, err := os.Open(path)
if err != nil {
return arr, err
}
defer f.Close()
dec := json.NewDecoder(f)
if err := dec.Decode(&arr); err != nil {
return arr, err
}
return arr, nil
}
// type: 0=male, 1=female, 2=unisex
func GenerateModernEnglishNames(arr *ModernEnglishArrays, swear func(string) bool, t int) []string {
var names []string
for i := 0; i < 10; i++ {
var name string
if t == 1 {
if i < 5 {
rnd := rand.Intn(len(arr.Nm2))
rnd2 := rand.Intn(len(arr.Nm3))
name = arr.Nm2[rnd] + " " + arr.Nm3[rnd2]
} else {
rnd := rand.Intn(len(arr.Nm5))
rnd2 := rand.Intn(len(arr.Nm6))
name = arr.Nm5[rnd] + " " + arr.Nm6[rnd2]
}
} else if t == 2 {
if i < 5 {
rnd := rand.Intn(len(arr.Nm7))
rnd2 := rand.Intn(len(arr.Nm3))
name = arr.Nm7[rnd] + " " + arr.Nm3[rnd2]
} else {
rnd := rand.Intn(len(arr.Nm7))
rnd2 := rand.Intn(len(arr.Nm6))
name = arr.Nm7[rnd] + " " + arr.Nm6[rnd2]
}
} else {
if i < 5 {
rnd := rand.Intn(len(arr.Nm1))
rnd2 := rand.Intn(len(arr.Nm3))
name = arr.Nm1[rnd] + " " + arr.Nm3[rnd2]
} else {
rnd := rand.Intn(len(arr.Nm4))
rnd2 := rand.Intn(len(arr.Nm6))
name = arr.Nm4[rnd] + " " + arr.Nm6[rnd2]
}
}
if !swear(name) {
names = append(names, name)
}
}
return names
}
+75
View File
@@ -0,0 +1,75 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
)
type ModernPortugueseEUArrays 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"`
}
func LoadModernPortugueseEUArrays(path string) (ModernPortugueseEUArrays, error) {
var arr ModernPortugueseEUArrays
f, err := os.Open(path)
if err != nil {
return arr, err
}
defer f.Close()
dec := json.NewDecoder(f)
if err := dec.Decode(&arr); err != nil {
return arr, err
}
return arr, nil
}
// type: 0=male, 1=female, 2=unisex
func GenerateModernPortugueseEUNames(arr *ModernPortugueseEUArrays, swear func(string) bool, t int) []string {
var names []string
for i := 0; i < 10; i++ {
var name string
switch t {
case 1:
if i < 5 {
rnd := rand.Intn(len(arr.Nm2))
rnd2 := rand.Intn(len(arr.Nm3))
name = arr.Nm2[rnd] + " " + arr.Nm3[rnd2]
} else {
rnd := rand.Intn(len(arr.Nm5))
rnd2 := rand.Intn(len(arr.Nm6))
name = arr.Nm5[rnd] + " " + arr.Nm6[rnd2]
}
case 2:
if i < 5 {
rnd := rand.Intn(len(arr.Nm7))
rnd2 := rand.Intn(len(arr.Nm3))
name = arr.Nm7[rnd] + " " + arr.Nm3[rnd2]
} else {
rnd := rand.Intn(len(arr.Nm7))
rnd2 := rand.Intn(len(arr.Nm6))
name = arr.Nm7[rnd] + " " + arr.Nm6[rnd2]
}
default:
if i < 5 {
rnd := rand.Intn(len(arr.Nm1))
rnd2 := rand.Intn(len(arr.Nm3))
name = arr.Nm1[rnd] + " " + arr.Nm3[rnd2]
} else {
rnd := rand.Intn(len(arr.Nm4))
rnd2 := rand.Intn(len(arr.Nm6))
name = arr.Nm4[rnd] + " " + arr.Nm6[rnd2]
}
}
if !swear(name) {
names = append(names, name)
}
}
return names
}
+113
View File
@@ -0,0 +1,113 @@
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
}
+163
View File
@@ -0,0 +1,163 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
)
type SatyrArrays 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"`
Nm14 []string `json:"nm14"`
Nm15 []string `json:"nm15"`
Nm16 []string `json:"nm16"`
Nm17 []string `json:"nm17"`
Nm18 []string `json:"nm18"`
}
func LoadSatyrArrays(path string) (SatyrArrays, error) {
var arrays SatyrArrays
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 SatyrNameMas(arr *SatyrArrays, swearFilter func(string) bool) string {
nTp := rand.Intn(2)
rnd := rand.Intn(len(arr.Nm1))
rnd2 := rand.Intn(len(arr.Nm2))
rnd3 := rand.Intn(len(arr.Nm3))
rnd4 := rand.Intn(len(arr.Nm6))
rnd5 := rand.Intn(len(arr.Nm7))
for rnd2 == 0 && rnd4 == 0 {
rnd2 = rand.Intn(len(arr.Nm2))
}
var nMs string
if nTp == 0 {
for arr.Nm3[rnd3] == arr.Nm7[rnd5] && arr.Nm3[rnd3] == arr.Nm1[rnd] {
rnd3 = rand.Intn(len(arr.Nm3))
}
nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm6[rnd4] + arr.Nm7[rnd5]
} else {
rnd6 := rand.Intn(len(arr.Nm4))
rnd7 := rand.Intn(len(arr.Nm5))
for arr.Nm3[rnd5] == arr.Nm5[rnd3] && arr.Nm3[rnd5] == arr.Nm1[rnd] {
rnd5 = rand.Intn(len(arr.Nm3))
}
for rnd6 == 0 && rnd4 == 0 {
rnd6 = rand.Intn(len(arr.Nm4))
}
nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm4[rnd6] + arr.Nm5[rnd7] + arr.Nm6[rnd4] + arr.Nm7[rnd5]
}
if swearFilter != nil && swearFilter(nMs) {
return ""
}
return nMs
}
func SatyrNameFem(arr *SatyrArrays, swearFilter func(string) bool) string {
nTp := rand.Intn(8)
var nMs string
if nTp == 0 {
rnd := rand.Intn(9)
rnd2 := rand.Intn(3)
nMs = arr.Nm8[rnd] + arr.Nm13[rnd2]
} else {
rnd := rand.Intn(len(arr.Nm8))
rnd2 := rand.Intn(len(arr.Nm9))
rnd3 := rand.Intn(len(arr.Nm10))
rnd4 := rand.Intn(len(arr.Nm13))
if nTp < 3 {
for arr.Nm8[rnd] == arr.Nm10[rnd3] {
rnd3 = rand.Intn(len(arr.Nm10))
}
for rnd2 < 3 {
rnd2 = rand.Intn(len(arr.Nm9))
}
nMs = arr.Nm8[rnd] + arr.Nm9[rnd2] + arr.Nm10[rnd3] + arr.Nm13[rnd4]
} else {
rnd5 := rand.Intn(len(arr.Nm11))
rnd6 := rand.Intn(len(arr.Nm12))
for arr.Nm12[rnd6] == arr.Nm10[rnd3] && arr.Nm10[rnd3] == arr.Nm8[rnd] {
rnd3 = rand.Intn(len(arr.Nm10))
}
for rnd2 < 3 && rnd4 < 3 {
rnd2 = rand.Intn(len(arr.Nm9))
}
nMs = arr.Nm8[rnd] + arr.Nm9[rnd2] + arr.Nm10[rnd3] + arr.Nm11[rnd5] + arr.Nm12[rnd6] + arr.Nm13[rnd4]
}
}
if swearFilter != nil && swearFilter(nMs) {
return ""
}
return nMs
}
func SatyrNameChild(arr *SatyrArrays) string {
nTp := rand.Intn(5)
var nMs string
if nTp == 0 {
rnd := rand.Intn(len(arr.Nm18))
nMs = arr.Nm18[rnd]
} else if nTp < 3 {
rnd := rand.Intn(len(arr.Nm14))
rnd2 := rand.Intn(len(arr.Nm15))
for arr.Nm14[rnd] == arr.Nm15[rnd2] {
rnd2 = rand.Intn(len(arr.Nm15))
}
nMs = arr.Nm14[rnd] + arr.Nm15[rnd2]
} else {
rnd := rand.Intn(len(arr.Nm16))
rnd2 := rand.Intn(len(arr.Nm17))
for arr.Nm16[rnd] == arr.Nm17[rnd2] {
rnd2 = rand.Intn(len(arr.Nm17))
}
nMs = arr.Nm16[rnd] + arr.Nm17[rnd2]
}
return nMs
}
func GenerateSatyrNames(arr *SatyrArrays, gender string, swearFilter func(string) bool) []string {
names := make([]string, 0, 10)
switch gender {
case "child":
for i := 0; i < 10; i++ {
n := SatyrNameChild(arr)
names = append(names, n)
}
case "female":
for i := 0; i < 10; i++ {
n := SatyrNameFem(arr, swearFilter)
for n == "" {
n = SatyrNameFem(arr, swearFilter)
}
names = append(names, n)
}
default:
for i := 0; i < 10; i++ {
n := SatyrNameMas(arr, swearFilter)
for n == "" {
n = SatyrNameMas(arr, swearFilter)
}
names = append(names, n)
}
}
return names
}
+94
View File
@@ -0,0 +1,94 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
"time"
)
type ShadarKaiArrays 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"`
Nm14 []string `json:"nm14"`
}
func LoadShadarKaiArrays(path string) (ShadarKaiArrays, error) {
var arr ShadarKaiArrays
file, err := os.Open(path)
if err != nil {
return arr, err
}
defer file.Close()
decoder := json.NewDecoder(file)
if err := decoder.Decode(&arr); err != nil {
return arr, err
}
return arr, nil
}
func GenerateShadarKaiName(arr ShadarKaiArrays, gender string) string {
rand.Seed(time.Now().UnixNano())
if gender == "female" {
return shadarKaiFemale(arr)
}
return shadarKaiMale(arr)
}
func shadarKaiFemale(a ShadarKaiArrays) string {
nTp := rand.Intn(7)
rnd := rand.Intn(len(a.Nm8))
rnd2 := rand.Intn(len(a.Nm9))
rnd3 := rand.Intn(len(a.Nm10))
rnd4 := rand.Intn(len(a.Nm13))
rnd5 := rand.Intn(len(a.Nm14))
if nTp < 3 {
for a.Nm10[rnd3] == a.Nm14[rnd5] || a.Nm10[rnd3] == a.Nm8[rnd] {
rnd3 = rand.Intn(len(a.Nm10))
}
return a.Nm8[rnd] + a.Nm9[rnd2] + a.Nm10[rnd3] + a.Nm13[rnd4] + a.Nm14[rnd5]
} else {
rnd6 := rand.Intn(len(a.Nm11))
rnd7 := rand.Intn(len(a.Nm12))
for a.Nm14[rnd5] == a.Nm12[rnd7] || a.Nm12[rnd7] == a.Nm10[rnd3] {
rnd7 = rand.Intn(len(a.Nm12))
}
return a.Nm8[rnd] + a.Nm9[rnd2] + a.Nm10[rnd3] + a.Nm11[rnd6] + a.Nm12[rnd7] + a.Nm13[rnd4] + a.Nm14[rnd5]
}
}
func shadarKaiMale(a ShadarKaiArrays) string {
nTp := rand.Intn(8)
rnd := rand.Intn(len(a.Nm1))
rnd2 := rand.Intn(len(a.Nm2))
rnd3 := rand.Intn(len(a.Nm3))
rnd4 := rand.Intn(len(a.Nm6))
rnd5 := rand.Intn(len(a.Nm7))
if nTp < 7 {
for a.Nm3[rnd3] == a.Nm7[rnd5] && a.Nm3[rnd3] == a.Nm1[rnd] {
rnd3 = rand.Intn(len(a.Nm3))
}
return a.Nm1[rnd] + a.Nm2[rnd2] + a.Nm3[rnd3] + a.Nm6[rnd4] + a.Nm7[rnd5]
} else {
rnd6 := rand.Intn(len(a.Nm4))
rnd7 := rand.Intn(len(a.Nm5))
for a.Nm3[rnd5] == a.Nm5[rnd3] && a.Nm3[rnd5] == a.Nm1[rnd] {
rnd5 = rand.Intn(len(a.Nm3))
}
for rnd2 < 4 && rnd6 == 0 {
rnd2 = rand.Intn(len(a.Nm2))
}
return a.Nm1[rnd] + a.Nm2[rnd2] + a.Nm3[rnd3] + a.Nm4[rnd6] + a.Nm5[rnd7] + a.Nm6[rnd4] + a.Nm7[rnd5]
}
}
+23
View File
@@ -0,0 +1,23 @@
package generators
// GenerateShadarKaiNames returns 10 names for the given gender, filtering with CheckSwear
func GenerateShadarKaiNames(arr *ShadarKaiArrays, 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 = GenerateShadarKaiName(*arr, "female")
} else {
n = GenerateShadarKaiName(*arr, "male")
}
for n == "" || swearFilter(n) {
if gender == "female" {
n = GenerateShadarKaiName(*arr, "female")
} else {
n = GenerateShadarKaiName(*arr, "male")
}
}
names = append(names, n)
}
return names
}
+46
View File
@@ -0,0 +1,46 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
"time"
)
type ShardmindArrays struct {
Nm1 []string `json:"nm1"`
Nm2 []string `json:"nm2"`
}
func LoadShardmindArrays(path string) (ShardmindArrays, error) {
var arr ShardmindArrays
file, err := os.Open(path)
if err != nil {
return arr, err
}
defer file.Close()
decoder := json.NewDecoder(file)
if err := decoder.Decode(&arr); err != nil {
return arr, err
}
return arr, nil
}
func GenerateShardmindName(arr ShardmindArrays) string {
rand.Seed(time.Now().UnixNano())
rnd := rand.Intn(len(arr.Nm1))
rnd2 := rand.Intn(len(arr.Nm2))
return arr.Nm1[rnd] + arr.Nm2[rnd2]
}
func GenerateShardmindNames(arr *ShardmindArrays, swearFilter func(string) bool) []string {
names := make([]string, 0, 10)
for i := 0; i < 10; i++ {
n := GenerateShardmindName(*arr)
for n == "" || swearFilter(n) {
n = GenerateShardmindName(*arr)
}
names = append(names, n)
}
return names
}
+59
View File
@@ -0,0 +1,59 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
"time"
)
type ShifterArrays struct {
Names1 []string `json:"names1"`
Names2 []string `json:"names2"`
}
func LoadShifterArrays(path string) (ShifterArrays, error) {
var arr ShifterArrays
file, err := os.Open(path)
if err != nil {
return arr, err
}
defer file.Close()
decoder := json.NewDecoder(file)
if err := decoder.Decode(&arr); err != nil {
return arr, err
}
return arr, nil
}
// gender: "male" or "female"
func GenerateShifterName(arr ShifterArrays, gender string) string {
rand.Seed(time.Now().UnixNano())
if gender == "female" {
rnd := rand.Intn(len(arr.Names2))
return arr.Names2[rnd]
}
rnd := rand.Intn(len(arr.Names1))
return arr.Names1[rnd]
}
func GenerateShifterNames(arr *ShifterArrays, 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 = GenerateShifterName(*arr, "female")
} else {
n = GenerateShifterName(*arr, "male")
}
for n == "" || swearFilter(n) {
if gender == "female" {
n = GenerateShifterName(*arr, "female")
} else {
n = GenerateShifterName(*arr, "male")
}
}
names = append(names, n)
}
return names
}
+134
View File
@@ -0,0 +1,134 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
"time"
)
type SimicHybridArrays 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"`
}
func LoadSimicHybridArrays(path string) (SimicHybridArrays, error) {
var arr SimicHybridArrays
file, err := os.Open(path)
if err != nil {
return arr, err
}
defer file.Close()
decoder := json.NewDecoder(file)
if err := decoder.Decode(&arr); err != nil {
return arr, err
}
return arr, nil
}
func simicHybridNameMas(a SimicHybridArrays) (string, int) {
rand.Seed(time.Now().UnixNano())
nTp := rand.Intn(4)
rnd := rand.Intn(len(a.Nm1))
rnd2 := rand.Intn(len(a.Nm2))
if nTp < 2 {
if nTp == 0 {
return a.Nm1[rnd], nTp
} else {
return a.Nm1[rnd] + a.Nm2[rnd2], nTp
}
} else {
rnd3 := rand.Intn(len(a.Nm3))
rnd4 := rand.Intn(len(a.Nm4))
if nTp == 2 {
return a.Nm1[rnd] + a.Nm2[rnd2] + a.Nm3[rnd3], nTp
} else {
return a.Nm1[rnd] + a.Nm2[rnd2] + a.Nm3[rnd3] + a.Nm4[rnd4], nTp
}
}
}
func simicHybridNameFir(a SimicHybridArrays) string {
rand.Seed(time.Now().UnixNano())
rnd := rand.Intn(len(a.Nm7))
rnd2 := rand.Intn(len(a.Nm8))
return a.Nm7[rnd] + a.Nm8[rnd2]
}
func simicHybridNameSec(a SimicHybridArrays) string {
rand.Seed(time.Now().UnixNano())
rnd := rand.Intn(len(a.Nm9))
rnd2 := rand.Intn(len(a.Nm10))
return a.Nm9[rnd] + a.Nm10[rnd2]
}
func GenerateSimicHybridNames(arr *SimicHybridArrays, gender string, swearFilter func(string) bool) []string {
names := make([]string, 0, 10)
for i := 0; i < 10; i++ {
var nMs string
if i < 5 {
var nTp int
nMs, nTp = simicHybridNameMas(*arr)
if gender == "female" {
rnd := rand.Intn(3)
if nTp == 0 || nTp == 3 {
nMs = nMs + arr.Nm6[rnd]
} else {
rnd += 3
nMs = nMs + arr.Nm6[rnd]
}
} else {
if nTp == 0 || nTp == 3 {
nMs = nMs + arr.Nm5[0]
} else {
rnd := rand.Intn(5)
nMs = nMs + arr.Nm5[rnd+1]
}
}
} else {
if gender == "female" {
nMs = simicHybridNameSec(*arr)
} else {
nMs = simicHybridNameFir(*arr)
}
}
for nMs == "" || swearFilter(nMs) {
if i < 5 {
var nTp int
nMs, nTp = simicHybridNameMas(*arr)
if gender == "female" {
rnd := rand.Intn(3)
if nTp == 0 || nTp == 3 {
nMs = nMs + arr.Nm6[rnd]
} else {
rnd += 3
nMs = nMs + arr.Nm6[rnd]
}
} else {
if nTp == 0 || nTp == 3 {
nMs = nMs + arr.Nm5[0]
} else {
rnd := rand.Intn(5)
nMs = nMs + arr.Nm5[rnd+1]
}
}
} else {
if gender == "female" {
nMs = simicHybridNameSec(*arr)
} else {
nMs = simicHybridNameFir(*arr)
}
}
}
names = append(names, nMs)
}
return names
}
+96
View File
@@ -0,0 +1,96 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
"time"
)
type TabaxiArrays struct {
Nm1 []string `json:"nm1"`
Nm2 []string `json:"nm2"`
Nm3 []string `json:"nm3"`
Nm4 []string `json:"nm4"`
Nm5 []string `json:"nm5"`
}
func LoadTabaxiArrays(path string) (TabaxiArrays, error) {
var arr TabaxiArrays
file, err := os.Open(path)
if err != nil {
return arr, err
}
defer file.Close()
decoder := json.NewDecoder(file)
if err := decoder.Decode(&arr); err != nil {
return arr, err
}
return arr, nil
}
func GenerateTabaxiNames(arr *TabaxiArrays, gender string, swearFilter func(string) bool) []string {
names := make([]string, 0, 10)
r := rand.New(rand.NewSource(time.Now().UnixNano()))
if gender == "female" {
for i := 0; i < 10; i++ {
rnd := r.Intn(len(arr.Nm4))
rnd2 := r.Intn(len(arr.Nm5))
name := "The " + arr.Nm4[rnd] + " " + arr.Nm5[rnd2] + " Clan"
for name == "" || swearFilter(name) {
rnd = r.Intn(len(arr.Nm4))
rnd2 = r.Intn(len(arr.Nm5))
name = "The " + arr.Nm4[rnd] + " " + arr.Nm5[rnd2] + " Clan"
}
names = append(names, name)
}
return names
}
// For main type, ensure unique draws for nm1, nm2, nm3 as in JS
nm1 := make([]string, len(arr.Nm1))
copy(nm1, arr.Nm1)
nm2 := make([]string, len(arr.Nm2))
copy(nm2, arr.Nm2)
nm3 := make([]string, len(arr.Nm3))
copy(nm3, arr.Nm3)
for i := 0; i < 10; i++ {
var name string
if i < 5 {
rnd := r.Intn(len(nm1))
name = nm1[rnd]
nm1 = append(nm1[:rnd], nm1[rnd+1:]...)
} else {
rnd := r.Intn(len(nm2))
rnd2 := r.Intn(len(nm3))
nTp := r.Intn(2)
if nTp == 0 {
name = nm2[rnd] + " " + nm3[rnd2] + " (" + nm2[rnd] + ")"
} else {
name = nm2[rnd] + " " + nm3[rnd2] + " (" + nm3[rnd2] + ")"
}
nm2 = append(nm2[:rnd], nm2[rnd+1:]...)
nm3 = append(nm3[:rnd2], nm3[rnd2+1:]...)
}
for name == "" || swearFilter(name) {
// repeat logic for unique draws
if i < 5 && len(nm1) > 0 {
rnd := r.Intn(len(nm1))
name = nm1[rnd]
nm1 = append(nm1[:rnd], nm1[rnd+1:]...)
} else if len(nm2) > 0 && len(nm3) > 0 {
rnd := r.Intn(len(nm2))
rnd2 := r.Intn(len(nm3))
nTp := r.Intn(2)
if nTp == 0 {
name = nm2[rnd] + " " + nm3[rnd2] + " (" + nm2[rnd] + ")"
} else {
name = nm2[rnd] + " " + nm3[rnd2] + " (" + nm3[rnd2] + ")"
}
nm2 = append(nm2[:rnd], nm2[rnd+1:]...)
nm3 = append(nm3[:rnd2], nm3[rnd2+1:]...)
}
}
names = append(names, name)
}
return names
}
+74
View File
@@ -0,0 +1,74 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
"time"
)
type TieflingArrays struct {
Nm1 []string `json:"nm1"`
Nm2 []string `json:"nm2"`
Nm3 []string `json:"nm3"`
Nm4 []string `json:"nm4"`
Nm5 []string `json:"nm5"`
}
func LoadTieflingArrays(path string) (TieflingArrays, error) {
var arr TieflingArrays
file, err := os.Open(path)
if err != nil {
return arr, err
}
defer file.Close()
decoder := json.NewDecoder(file)
if err := decoder.Decode(&arr); err != nil {
return arr, err
}
return arr, nil
}
func GenerateTieflingName(arr *TieflingArrays, gender string) string {
rand.Seed(time.Now().UnixNano())
switch gender {
case "female":
rnd := rand.Intn(len(arr.Nm4))
rnd2 := rand.Intn(len(arr.Nm5))
return arr.Nm4[rnd] + arr.Nm5[rnd2]
case "virtue":
rnd := rand.Intn(len(arr.Nm3))
return arr.Nm3[rnd]
default:
rnd := rand.Intn(len(arr.Nm1))
rnd2 := rand.Intn(len(arr.Nm2))
return arr.Nm1[rnd] + arr.Nm2[rnd2]
}
}
func GenerateTieflingNames(arr *TieflingArrays, gender string, swearFilter func(string) bool) []string {
names := make([]string, 0, 10)
for i := 0; i < 10; i++ {
var n string
switch gender {
case "female":
n = GenerateTieflingName(arr, "female")
case "virtue":
n = GenerateTieflingName(arr, "virtue")
default:
n = GenerateTieflingName(arr, "male")
}
for n == "" || swearFilter(n) {
switch gender {
case "female":
n = GenerateTieflingName(arr, "female")
case "virtue":
n = GenerateTieflingName(arr, "virtue")
default:
n = GenerateTieflingName(arr, "male")
}
}
names = append(names, n)
}
return names
}
+70
View File
@@ -0,0 +1,70 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
"time"
)
type TortleArrays struct {
Nm1 []string `json:"nm1"`
Nm2 []string `json:"nm2"`
Nm3 []string `json:"nm3"`
Nm4 []string `json:"nm4"`
Nm5 []string `json:"nm5"`
}
func LoadTortleArrays(path string) (TortleArrays, error) {
var arr TortleArrays
file, err := os.Open(path)
if err != nil {
return arr, err
}
defer file.Close()
decoder := json.NewDecoder(file)
if err := decoder.Decode(&arr); err != nil {
return arr, err
}
return arr, nil
}
func GenerateTortleNames(arr *TortleArrays, swearFilter func(string) bool) []string {
names := make([]string, 0, 10)
r := rand.New(rand.NewSource(time.Now().UnixNano()))
for i := 0; i < 10; i++ {
var nMs string
nTp := r.Intn(3)
rnd := r.Intn(len(arr.Nm1))
rnd2 := r.Intn(len(arr.Nm2))
rnd3 := r.Intn(len(arr.Nm5))
if nTp == 0 {
for arr.Nm1[rnd] == "" && arr.Nm5[rnd3] == "" {
rnd = r.Intn(len(arr.Nm1))
}
nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm5[rnd3]
} else {
rnd4 := r.Intn(len(arr.Nm4))
rnd5 := r.Intn(len(arr.Nm3))
nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd5] + arr.Nm4[rnd4] + arr.Nm5[rnd3]
}
for nMs == "" || swearFilter(nMs) {
nTp = r.Intn(3)
rnd = r.Intn(len(arr.Nm1))
rnd2 = r.Intn(len(arr.Nm2))
rnd3 = r.Intn(len(arr.Nm5))
if nTp == 0 {
for arr.Nm1[rnd] == "" && arr.Nm5[rnd3] == "" {
rnd = r.Intn(len(arr.Nm1))
}
nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm5[rnd3]
} else {
rnd4 := r.Intn(len(arr.Nm4))
rnd5 := r.Intn(len(arr.Nm3))
nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd5] + arr.Nm4[rnd4] + arr.Nm5[rnd3]
}
}
names = append(names, nMs)
}
return names
}
+106
View File
@@ -0,0 +1,106 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
"time"
)
type TritonArrays 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 LoadTritonArrays(path string) (TritonArrays, error) {
var arr TritonArrays
file, err := os.Open(path)
if err != nil {
return arr, err
}
defer file.Close()
decoder := json.NewDecoder(file)
if err := decoder.Decode(&arr); err != nil {
return arr, err
}
return arr, nil
}
func tritonSurname(a TritonArrays, r *rand.Rand) string {
for {
rnd := r.Intn(len(a.Nm9))
rnd2 := r.Intn(len(a.Nm10))
rnd3 := r.Intn(len(a.Nm11))
rnd4 := r.Intn(len(a.Nm12))
rnd5 := r.Intn(len(a.Nm13))
if a.Nm11[rnd3] != a.Nm9[rnd] && a.Nm11[rnd3] != a.Nm13[rnd5] {
return a.Nm9[rnd] + a.Nm10[rnd2] + a.Nm11[rnd3] + a.Nm12[rnd4] + a.Nm13[rnd5] + "ath"
}
}
}
func tritonNameFem(a TritonArrays, r *rand.Rand, i int) string {
for {
rnd := r.Intn(len(a.Nm4))
rnd2 := r.Intn(len(a.Nm5))
rnd3 := r.Intn(len(a.Nm6))
rnd4 := r.Intn(len(a.Nm8))
if a.Nm6[rnd3] != a.Nm4[rnd] {
if i < 5 {
return a.Nm4[rnd] + a.Nm5[rnd2] + a.Nm6[rnd3] + a.Nm8[rnd4] + "n"
} else {
rnd5 := r.Intn(len(a.Nm5))
rnd6 := r.Intn(len(a.Nm7))
if a.Nm7[rnd6] != a.Nm6[rnd3] {
return a.Nm4[rnd] + a.Nm5[rnd2] + a.Nm6[rnd3] + a.Nm5[rnd5] + a.Nm7[rnd6] + a.Nm8[rnd4] + "n"
}
}
}
}
}
func tritonNameMas(a TritonArrays, r *rand.Rand) string {
for {
rnd := r.Intn(len(a.Nm1))
rnd2 := r.Intn(len(a.Nm2))
rnd3 := r.Intn(len(a.Nm3))
if a.Nm1[rnd] != a.Nm3[rnd3] {
return a.Nm1[rnd] + a.Nm2[rnd2] + a.Nm3[rnd3] + a.Nm2[rnd2] + "s"
}
}
}
func GenerateTritonNames(arr *TritonArrays, gender string, swearFilter func(string) bool) []string {
names := make([]string, 0, 10)
r := rand.New(rand.NewSource(time.Now().UnixNano()))
for i := 0; i < 10; i++ {
surname := tritonSurname(*arr, r)
var name string
if gender == "female" {
name = tritonNameFem(*arr, r, i) + " " + surname
} else {
name = tritonNameMas(*arr, r) + " " + surname
}
for name == "" || swearFilter(name) {
surname = tritonSurname(*arr, r)
if gender == "female" {
name = tritonNameFem(*arr, r, i) + " " + surname
} else {
name = tritonNameMas(*arr, r) + " " + surname
}
}
names = append(names, name)
}
return names
}
+108
View File
@@ -0,0 +1,108 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
"time"
)
type VedalkenArrays 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"`
}
func LoadVedalkenArrays(path string) (VedalkenArrays, error) {
var arr VedalkenArrays
file, err := os.Open(path)
if err != nil {
return arr, err
}
defer file.Close()
decoder := json.NewDecoder(file)
if err := decoder.Decode(&arr); err != nil {
return arr, err
}
return arr, nil
}
func vedalkenNameMas(a VedalkenArrays, r *rand.Rand) string {
nTp := r.Intn(3)
rnd := r.Intn(len(a.Nm1))
rnd2 := r.Intn(len(a.Nm2))
rnd3 := r.Intn(len(a.Nm3))
rnd4 := r.Intn(len(a.Nm2))
rnd5 := r.Intn(len(a.Nm5))
if nTp < 2 {
for a.Nm1[rnd] == a.Nm3[rnd3] || a.Nm3[rnd3] == a.Nm5[rnd5] {
rnd3 = r.Intn(len(a.Nm3))
}
return a.Nm1[rnd] + a.Nm2[rnd2] + a.Nm3[rnd3] + a.Nm2[rnd4] + a.Nm5[rnd5]
} else {
rnd6 := r.Intn(len(a.Nm2))
rnd7 := r.Intn(len(a.Nm4))
for a.Nm4[rnd7] == a.Nm3[rnd3] || a.Nm4[rnd7] == a.Nm5[rnd5] {
rnd7 = r.Intn(len(a.Nm4))
}
return a.Nm1[rnd] + a.Nm2[rnd2] + a.Nm3[rnd3] + a.Nm2[rnd4] + a.Nm4[rnd7] + a.Nm2[rnd6] + a.Nm5[rnd5]
}
}
func vedalkenNameFem(a VedalkenArrays, r *rand.Rand) string {
nTp := r.Intn(3)
rnd := r.Intn(len(a.Nm6))
rnd2 := r.Intn(len(a.Nm7))
rnd3 := r.Intn(len(a.Nm8))
rnd4 := r.Intn(len(a.Nm11))
rnd5 := r.Intn(len(a.Nm12))
if rnd2 < 4 {
for rnd4 < 3 {
rnd4 = r.Intn(len(a.Nm11))
}
}
if nTp < 2 {
for a.Nm6[rnd] == a.Nm8[rnd3] || a.Nm8[rnd3] == a.Nm12[rnd5] {
rnd3 = r.Intn(len(a.Nm8))
}
return a.Nm6[rnd] + a.Nm7[rnd2] + a.Nm8[rnd3] + a.Nm11[rnd4] + a.Nm12[rnd5]
} else {
rnd6 := r.Intn(len(a.Nm9))
rnd7 := r.Intn(len(a.Nm10))
for a.Nm10[rnd7] == a.Nm8[rnd3] || a.Nm10[rnd7] == a.Nm12[rnd5] {
rnd7 = r.Intn(len(a.Nm10))
}
return a.Nm6[rnd] + a.Nm7[rnd2] + a.Nm8[rnd3] + a.Nm9[rnd6] + a.Nm10[rnd7] + a.Nm11[rnd4] + a.Nm12[rnd5]
}
}
func GenerateVedalkenNames(arr *VedalkenArrays, gender string, swearFilter func(string) bool) []string {
names := make([]string, 0, 10)
r := rand.New(rand.NewSource(time.Now().UnixNano()))
for i := 0; i < 10; i++ {
var n string
if gender == "female" {
n = vedalkenNameFem(*arr, r)
} else {
n = vedalkenNameMas(*arr, r)
}
for n == "" || swearFilter(n) {
if gender == "female" {
n = vedalkenNameFem(*arr, r)
} else {
n = vedalkenNameMas(*arr, r)
}
}
names = append(names, n)
}
return names
}
+96
View File
@@ -0,0 +1,96 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
"time"
)
type VerdanArrays 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"`
}
func LoadVerdanArrays(path string) (VerdanArrays, error) {
var arr VerdanArrays
file, err := os.Open(path)
if err != nil {
return arr, err
}
defer file.Close()
decoder := json.NewDecoder(file)
if err := decoder.Decode(&arr); err != nil {
return arr, err
}
return arr, nil
}
func GenerateVerdanNames(arr *VerdanArrays, swearFilter func(string) bool) []string {
names := make([]string, 0, 10)
r := rand.New(rand.NewSource(time.Now().UnixNano()))
for i := 0; i < 10; i++ {
var nMs string
nTp := r.Intn(5)
rnd := r.Intn(len(arr.Nm1))
rnd2 := r.Intn(len(arr.Nm2))
rnd5 := r.Intn(len(arr.Nm7))
if nTp < 2 {
for arr.Nm7[rnd5] == "" {
rnd5 = r.Intn(len(arr.Nm7))
}
nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm7[rnd5]
} else if nTp < 4 {
rnd3 := r.Intn(len(arr.Nm3))
rnd4 := r.Intn(len(arr.Nm4))
for arr.Nm3[rnd3] == arr.Nm7[rnd5] || arr.Nm3[rnd3] == arr.Nm1[rnd] {
rnd3 = r.Intn(len(arr.Nm3))
}
nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm4[rnd4] + arr.Nm7[rnd5]
} else {
rnd3 := r.Intn(len(arr.Nm3))
rnd4 := r.Intn(len(arr.Nm4))
rnd6 := r.Intn(len(arr.Nm6))
rnd7 := r.Intn(len(arr.Nm5))
for arr.Nm3[rnd5] == arr.Nm5[rnd7] || arr.Nm5[rnd7] == arr.Nm7[rnd5] {
rnd7 = r.Intn(len(arr.Nm5))
}
nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm4[rnd4] + arr.Nm5[rnd7] + arr.Nm6[rnd6] + arr.Nm7[rnd5]
}
for nMs == "" || swearFilter(nMs) {
nTp = r.Intn(5)
rnd = r.Intn(len(arr.Nm1))
rnd2 = r.Intn(len(arr.Nm2))
rnd5 = r.Intn(len(arr.Nm7))
if nTp < 2 {
for arr.Nm7[rnd5] == "" {
rnd5 = r.Intn(len(arr.Nm7))
}
nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm7[rnd5]
} else if nTp < 4 {
rnd3 := r.Intn(len(arr.Nm3))
rnd4 := r.Intn(len(arr.Nm4))
for arr.Nm3[rnd3] == arr.Nm7[rnd5] || arr.Nm3[rnd3] == arr.Nm1[rnd] {
rnd3 = r.Intn(len(arr.Nm3))
}
nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm4[rnd4] + arr.Nm7[rnd5]
} else {
rnd3 := r.Intn(len(arr.Nm3))
rnd4 := r.Intn(len(arr.Nm4))
rnd6 := r.Intn(len(arr.Nm6))
rnd7 := r.Intn(len(arr.Nm5))
for arr.Nm3[rnd5] == arr.Nm5[rnd7] || arr.Nm5[rnd7] == arr.Nm7[rnd5] {
rnd7 = r.Intn(len(arr.Nm5))
}
nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm4[rnd4] + arr.Nm5[rnd7] + arr.Nm6[rnd6] + arr.Nm7[rnd5]
}
}
names = append(names, nMs)
}
return names
}
+42
View File
@@ -0,0 +1,42 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
"time"
)
type WarforgedArrays struct {
Nm1 []string `json:"nm1"`
}
func LoadWarforgedArrays(path string) (WarforgedArrays, error) {
var arr WarforgedArrays
file, err := os.Open(path)
if err != nil {
return arr, err
}
defer file.Close()
decoder := json.NewDecoder(file)
if err := decoder.Decode(&arr); err != nil {
return arr, err
}
return arr, nil
}
func GenerateWarforgedNames(arr *WarforgedArrays, swearFilter func(string) bool) []string {
names := make([]string, 0, 10)
r := rand.New(rand.NewSource(time.Now().UnixNano()))
for i := 0; i < 10; i++ {
var n string
rnd := r.Intn(len(arr.Nm1))
n = arr.Nm1[rnd]
for n == "" || swearFilter(n) {
rnd = r.Intn(len(arr.Nm1))
n = arr.Nm1[rnd]
}
names = append(names, n)
}
return names
}
+57
View File
@@ -0,0 +1,57 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
)
type WildenArrays struct {
NmMFf []string `json:"nmMFf"`
NmMFl []string `json:"nmMFl"`
NmMSf []string `json:"nmMSf"`
NmMSl []string `json:"nmMSl"`
NmFF []string `json:"nmFF"`
NmFL []string `json:"nmFL"`
}
func LoadWildenArrays(path string) (WildenArrays, error) {
var arr WildenArrays
f, err := os.Open(path)
if err != nil {
return arr, err
}
defer f.Close()
dec := json.NewDecoder(f)
if err := dec.Decode(&arr); err != nil {
return arr, err
}
return arr, nil
}
// type: "female" or "male" (default male)
func GenerateWildenNames(arr *WildenArrays, swear func(string) bool, gender string) []string {
var names []string
for i := 0; i < 10; i++ {
var name string
if gender == "female" {
rnd := rand.Intn(len(arr.NmFF))
rnd2 := rand.Intn(len(arr.NmFL))
name = arr.NmFF[rnd] + arr.NmFL[rnd2]
} else {
if i < 5 {
rnd := rand.Intn(len(arr.NmMFf))
rnd2 := rand.Intn(len(arr.NmMFl))
name = arr.NmMFf[rnd] + arr.NmMFl[rnd2]
} else {
rnd := rand.Intn(len(arr.NmMSf))
rnd2 := rand.Intn(len(arr.NmMSl))
name = arr.NmMSf[rnd] + arr.NmMSl[rnd2]
}
}
if !swear(name) {
names = append(names, name)
}
}
return names
}
+59
View File
@@ -0,0 +1,59 @@
package generators
import (
"encoding/json"
"math/rand"
"os"
)
type YuanTiArrays 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"`
}
func LoadYuanTiArrays(path string) (YuanTiArrays, error) {
var arr YuanTiArrays
f, err := os.Open(path)
if err != nil {
return arr, err
}
defer f.Close()
dec := json.NewDecoder(f)
if err := dec.Decode(&arr); err != nil {
return arr, err
}
return arr, nil
}
func GenerateYuanTiNames(arr *YuanTiArrays, swear func(string) bool) []string {
var names []string
for i := 0; i < 10; i++ {
var name string
rnd := rand.Intn(len(arr.Nm1))
rnd2 := rand.Intn(len(arr.Nm2))
rnd3 := rand.Intn(len(arr.Nm3))
rnd4 := rand.Intn(len(arr.Nm5))
rnd5 := rand.Intn(len(arr.Nm6))
if i < 6 {
for arr.Nm1[rnd] == arr.Nm3[rnd3] || arr.Nm3[rnd3] == arr.Nm6[rnd5] {
rnd3 = rand.Intn(len(arr.Nm3))
}
name = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm5[rnd4] + arr.Nm6[rnd5]
} else {
rnd6 := rand.Intn(len(arr.Nm4))
rnd7 := rand.Intn(len(arr.Nm2))
for arr.Nm3[rnd4] == arr.Nm4[rnd6] || arr.Nm4[rnd6] == arr.Nm6[rnd5] {
rnd6 = rand.Intn(len(arr.Nm4))
}
name = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm2[rnd7] + arr.Nm4[rnd6] + arr.Nm5[rnd4] + arr.Nm6[rnd5]
}
if !swear(name) {
names = append(names, name)
}
}
return names
}