| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- package leagueStorage
- import (
- "f1-game/internal/data"
- "f1-game/internal/enum"
- "f1-game/internal/types"
- "f1-game/nodes/map/internal/db"
- dbLeague "f1-game/nodes/map/internal/db/data/league"
- mapFacade "f1-game/nodes/map/internal/facade"
- clog "github.com/cherry-game/cherry/logger"
- )
- var (
- mapItemAttrs = map[int32]int32{
- enum.LeagueItemIDWood: enum.LeagueAttrWoodYield,
- enum.LeagueItemIDIron: enum.LeagueAttrIronYield,
- enum.LeagueItemIDStone: enum.LeagueAttrStoneYield,
- enum.LeagueItemIDGrain: enum.LeagueAttrGrainYield,
- }
- )
- func Service() *service {
- return &service{}
- }
- type service struct {
- mapFacade.LeagueServiceBase[*db.MapLeagueTable]
- }
- func (p *service) OnInit(leagueTable *db.MapLeagueTable) {
- // 初始化税率
- p.InitStorageRatio(leagueTable)
- // 初始化资源容量
- p.CheckAndInitCapacity(leagueTable)
- // 添加初始资源
- p.AddAssets(leagueTable, data.Const.LeagueInitItems)
- }
- // 初始化联盟仓库初始税率
- func (p *service) InitStorageRatio(leagueTable *db.MapLeagueTable) {
- mapLeagueStorageTable := db.GetMapLeagueStorageTable(leagueTable.LeagueID)
- if len(mapLeagueStorageTable.Storage.RatioMap) > 0 {
- return
- }
- // 初始化税率
- for _, leagueStorageRow := range data.LeagueStorage.List() {
- if leagueStorageRow.InitRate > 0 {
- mapLeagueStorageTable.Storage.RatioMap.Put(leagueStorageRow.ID, dbLeague.NewStorageRatio(leagueStorageRow.ID, leagueStorageRow.InitRate))
- }
- }
- mapLeagueStorageTable.Save2Queue()
- }
- // 联盟资源容量上限检查和初始化
- func (p *service) CheckAndInitCapacity(leagueTable *db.MapLeagueTable) {
- mapLeagueStorageTable := db.GetMapLeagueStorageTable(leagueTable.LeagueID)
- isChange := mapLeagueStorageTable.Storage.CurrencyMap.Check(leagueTable.LeagueInfo.Attrs.GetI64(enum.LeagueAttrResCapacity), enum.LeagueItemMaxNumList)
- if isChange {
- mapLeagueStorageTable.Save2Queue()
- }
- }
- func (p *service) AddAssets(leagueTable *db.MapLeagueTable, assets types.Assets) {
- if len(assets) <= 0 {
- clog.Warnf("addAssets empty. leagueID:%d", leagueTable.LeagueID)
- return
- }
- mapLeagueStorageTable := db.GetMapLeagueStorageTable(leagueTable.LeagueID)
- for _, asset := range assets {
- if !enum.IsLeagueCurrency(asset.ID) {
- clog.Warnf("addAssets not league currency : %v", asset)
- continue
- }
- mapLeagueStorageTable.Storage.CurrencyMap.Increase(asset.ID, asset.Num)
- }
- mapLeagueStorageTable.Save2Queue()
- }
- // CheckAutoAdd 检查每几秒资源发放情况
- func (p *service) CheckAutoAdd(leagueID int64, nowSecond int64) {
- var (
- save bool
- addSecond = data.Const.ItemAddSecond
- mapLeagueStorageTable = db.GetMapLeagueStorageTable(leagueID)
- mapLeagueTable, _ = db.GetMapLeagueTable(leagueID)
- )
- for itemID, attrID := range mapItemAttrs {
- yield := mapLeagueTable.LeagueInfo.Attrs.GetI64(attrID)
- if yield <= 0 {
- continue
- }
- if mapLeagueStorageTable.Storage.CurrencyMap.CheckInitUpdateTime(itemID, nowSecond) {
- save = true
- }
- if !mapLeagueStorageTable.Storage.CurrencyMap.CheckAutoAdd(itemID, nowSecond, yield, addSecond) {
- continue
- }
- save = true
- }
- if save {
- mapLeagueStorageTable.Save2Queue()
- }
- }
|