104 lines
2.3 KiB
Go
104 lines
2.3 KiB
Go
package generators
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"math/rand"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
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))
|
|
}
|
|
}
|
|
|
|
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)
|
|
}
|