Files
GaCy-GO/internal/common/currency_wars_trailblaze.go
T

98 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
}