|
|
|
@ -18,18 +18,24 @@ func GenUniqueItems(total int, fn genFunc, seed int64) []string { |
|
|
|
|
items := []string{} |
|
|
|
|
|
|
|
|
|
// Generate initial items
|
|
|
|
|
for i := 0; i <= total; i++ { |
|
|
|
|
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)
|
|
|
|
|
for i, item := range items { |
|
|
|
|
for x := 0; x < len(items); x++ { |
|
|
|
|
if items[x] == item { |
|
|
|
|
items[i] = fn(roller.TableRoll()) |
|
|
|
|
break |
|
|
|
|
// 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 |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|