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() } }