97 lines
2.4 KiB
Go
97 lines
2.4 KiB
Go
package common
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"encoding/json"
|
||
|
|
"fmt"
|
||
|
|
"sort"
|
||
|
|
"strconv"
|
||
|
|
)
|
||
|
|
|
||
|
|
type CurrencyWarsTrailblazeGood struct {
|
||
|
|
ID uint32 `json:"id"`
|
||
|
|
Kind string `json:"kind"`
|
||
|
|
Cost uint32 `json:"cost"`
|
||
|
|
Father uint32 `json:"father"`
|
||
|
|
Params []uint32 `json:"params"`
|
||
|
|
}
|
||
|
|
|
||
|
|
type CurrencyWarsTrailblazeCatalog struct {
|
||
|
|
Goods map[uint32]CurrencyWarsTrailblazeGood
|
||
|
|
GoodsList []CurrencyWarsTrailblazeGood
|
||
|
|
LayerParams map[uint32][]uint32
|
||
|
|
PomThreshold uint32
|
||
|
|
InitialGoodID uint32
|
||
|
|
RefreshGoodID uint32
|
||
|
|
PomGoodID uint32
|
||
|
|
}
|
||
|
|
|
||
|
|
func LoadCurrencyWarsTrailblaze() (*CurrencyWarsTrailblazeCatalog, error) {
|
||
|
|
raw, err := ReadResourceFile("resources/CurrencyWarsTrailblaze.json")
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
var r struct {
|
||
|
|
Goods []CurrencyWarsTrailblazeGood `json:"goods"`
|
||
|
|
LayerParams map[string][]uint32 `json:"layer_params"`
|
||
|
|
PomThreshold uint32 `json:"pom_threshold"`
|
||
|
|
InitialGood uint32 `json:"initial_goods_id"`
|
||
|
|
RefreshGood uint32 `json:"refresh_goods_id"`
|
||
|
|
PomGood uint32 `json:"pom_goods_id"`
|
||
|
|
}
|
||
|
|
if err = json.Unmarshal(raw, &r); err != nil {
|
||
|
|
return nil, fmt.Errorf("unmarshal CurrencyWarsTrailblaze: %w", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
cat := &CurrencyWarsTrailblazeCatalog{
|
||
|
|
Goods: make(map[uint32]CurrencyWarsTrailblazeGood, len(r.Goods)),
|
||
|
|
GoodsList: r.Goods,
|
||
|
|
LayerParams: make(map[uint32][]uint32, len(r.LayerParams)),
|
||
|
|
PomThreshold: r.PomThreshold,
|
||
|
|
InitialGoodID: r.InitialGood,
|
||
|
|
RefreshGoodID: r.RefreshGood,
|
||
|
|
PomGoodID: r.PomGood,
|
||
|
|
}
|
||
|
|
if cat.InitialGoodID == 0 {
|
||
|
|
cat.InitialGoodID = 101
|
||
|
|
}
|
||
|
|
if cat.RefreshGoodID == 0 {
|
||
|
|
cat.RefreshGoodID = 999
|
||
|
|
}
|
||
|
|
if cat.PomGoodID == 0 {
|
||
|
|
cat.PomGoodID = 507
|
||
|
|
}
|
||
|
|
if cat.PomThreshold == 0 {
|
||
|
|
cat.PomThreshold = 300
|
||
|
|
}
|
||
|
|
|
||
|
|
for _, g := range r.Goods {
|
||
|
|
cat.Goods[g.ID] = g
|
||
|
|
}
|
||
|
|
|
||
|
|
for k, v := range r.LayerParams {
|
||
|
|
layer, err := strconv.ParseUint(k, 10, 32)
|
||
|
|
if err == nil {
|
||
|
|
cat.LayerParams[uint32(layer)] = v
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
sort.Slice(cat.GoodsList, func(i, j int) bool {
|
||
|
|
return cat.GoodsList[i].ID < cat.GoodsList[j].ID
|
||
|
|
})
|
||
|
|
|
||
|
|
return cat, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func (c *CurrencyWarsTrailblazeCatalog) Tier(layer uint32) uint32 {
|
||
|
|
if params, ok := c.LayerParams[layer]; ok && len(params) > 0 {
|
||
|
|
return params[0]
|
||
|
|
}
|
||
|
|
return 1
|
||
|
|
}
|
||
|
|
|
||
|
|
func (c *CurrencyWarsTrailblazeCatalog) Income(layer uint32) uint32 {
|
||
|
|
if params, ok := c.LayerParams[layer]; ok && len(params) > 1 {
|
||
|
|
return params[1]
|
||
|
|
}
|
||
|
|
return 0
|
||
|
|
}
|