Go binary/server for helping run/build sessions for the Maze Rats TTRPG
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

43 lines
946 B

package helpers
import (
"mazeratsgen/internal/dice"
"path"
"runtime"
)
func LocalFile(filepath string) string {
_, thisFile, _, _ := runtime.Caller(1)
return path.Join(path.Dir(thisFile), filepath)
}
type genFunc func([2]int) string
func GenUniqueItems(total int, fn genFunc, seed int64) []string {
roller := dice.NewRoller(seed)
items := []string{}
// Generate initial items
for i := 0; i < total; i++ {
items = append(items, fn(roller.TableRoll()))
}
// Walk items and check if they match any other item. If they do then replace
// it with a fresh item. This doesn't guarantee unique items, but prevents
// Denial of Service attacks (a bit) by only doing 5 passes.
passes := 5
for p := 0; p <= passes; p++ {
for i, _ := range items {
for x := 0; x < len(items); x++ {
if x == i {
break
}
if items[x] == items[i] {
items[i] = fn(roller.TableRoll())
break
}
}
}
}
return items
}