package leagueAttr import ( "f1-game/internal/data" "f1-game/internal/types" "f1-game/nodes/map/internal/db" mapFacade "f1-game/nodes/map/internal/facade" ) func Service() *service { return &service{} } type service struct { mapFacade.LeagueServiceBase[*db.MapLeagueTable] } func (p *service) OnInit(leagueTable *db.MapLeagueTable) { // 初始化联盟属性 p.UpdateAttrs(leagueTable) leagueTable.Save2Queue() } // 更新联盟属性 func (p *service) UpdateAttrs(leagueTable *db.MapLeagueTable) { attrs := types.NewAttrs() // 联盟等级属性 if leagueLevelRow, found := data.LeagueLevel.GetByLevel(leagueTable.LeagueInfo.Level); found { for k, v := range leagueLevelRow.LevelAttrs { attrs.Add(k, v) } } // 联盟科技对应等级的属性 for _, tech := range leagueTable.Techs.Techs { if levelRow, ok := data.LeagueTechLevel.GetByTechIDLevel(tech.TechID, tech.Level); ok { for k, v := range levelRow.Attrs { attrs.Add(k, v) } } } // 联盟建筑增加属性 for _, build := range leagueTable.Builds.Builds { if mapBuildUpgradeRow, ok := data.MapBuildUpgrade.GetByConfigIDLevel(build.ConfigID, build.Level); ok { for k, v := range mapBuildUpgradeRow.LeagueBuildAttrs { attrs.Add(k, v) } } } leagueTable.LeagueInfo.Attrs = attrs }