-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathitemset.go
67 lines (61 loc) · 1.37 KB
/
itemset.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package retropg
import (
"context"
"errors"
"strconv"
"strings"
"github.com/kralamoure/retro"
"github.com/kralamoure/retro/retrotyp"
)
func (r *Db) ItemSets(ctx context.Context) (itemSets map[int]retro.ItemSet, err error) {
query := "SELECT id, name, bonus" +
" FROM retro_static.itemsets;"
rows, err := r.pool.Query(ctx, query)
if err != nil {
return
}
defer rows.Close()
itemSets = make(map[int]retro.ItemSet)
for rows.Next() {
var itemSet retro.ItemSet
var bonus string
err = rows.Scan(&itemSet.Id, &itemSet.Name, &bonus)
if err != nil {
return
}
sli := strings.Split(bonus, ";")
itemSet.Bonus = make([][]retrotyp.Effect, len(sli))
for i, v := range sli {
if v == "" {
continue
}
stats := strings.Split(v, ",")
itemSet.Bonus[i] = make([]retrotyp.Effect, len(stats))
for i2, v := range stats {
effectStr := strings.Split(v, ":")
if len(effectStr) != 2 {
err = errors.New("malformed bonus")
return
}
id, err2 := strconv.Atoi(effectStr[0])
if err2 != nil {
err = err2
return
}
diceNum, err2 := strconv.Atoi(effectStr[1])
if err2 != nil {
err = err2
return
}
itemSet.Bonus[i][i2] = retrotyp.Effect{
Id: id,
ZoneShape: retrotyp.EffectZoneShapeCircle,
DiceNum: diceNum,
Hidden: true,
}
}
}
itemSets[itemSet.Id] = itemSet
}
return
}