service.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. package leagueStorage
  2. import (
  3. "f1-game/internal/data"
  4. "f1-game/internal/enum"
  5. "f1-game/internal/types"
  6. "f1-game/nodes/map/internal/db"
  7. dbLeague "f1-game/nodes/map/internal/db/data/league"
  8. mapFacade "f1-game/nodes/map/internal/facade"
  9. clog "github.com/cherry-game/cherry/logger"
  10. )
  11. var (
  12. mapItemAttrs = map[int32]int32{
  13. enum.LeagueItemIDWood: enum.LeagueAttrWoodYield,
  14. enum.LeagueItemIDIron: enum.LeagueAttrIronYield,
  15. enum.LeagueItemIDStone: enum.LeagueAttrStoneYield,
  16. enum.LeagueItemIDGrain: enum.LeagueAttrGrainYield,
  17. }
  18. )
  19. func Service() *service {
  20. return &service{}
  21. }
  22. type service struct {
  23. mapFacade.LeagueServiceBase[*db.MapLeagueTable]
  24. }
  25. func (p *service) OnInit(leagueTable *db.MapLeagueTable) {
  26. // 初始化税率
  27. p.InitStorageRatio(leagueTable)
  28. // 初始化资源容量
  29. p.CheckAndInitCapacity(leagueTable)
  30. // 添加初始资源
  31. p.AddAssets(leagueTable, data.Const.LeagueInitItems)
  32. }
  33. func (p *service) OnReset(leagueTable *db.MapLeagueTable) {
  34. if leagueTable.Stats.IsDayReset {
  35. leagueStorageTable := db.GetMapLeagueStorageTable(leagueTable.LeagueID)
  36. // 重置F币分红次数
  37. leagueStorageTable.Storage.FundBonusCount = 0
  38. for _, ratio := range leagueStorageTable.Storage.RatioMap {
  39. ratio.AdjustCount = 0
  40. }
  41. leagueStorageTable.Save2Queue()
  42. }
  43. }
  44. // 初始化联盟仓库初始税率
  45. func (p *service) InitStorageRatio(leagueTable *db.MapLeagueTable) {
  46. mapLeagueStorageTable := db.GetMapLeagueStorageTable(leagueTable.LeagueID)
  47. if len(mapLeagueStorageTable.Storage.RatioMap) > 0 {
  48. return
  49. }
  50. // 初始化税率
  51. for _, leagueStorageRow := range data.LeagueStorage.List() {
  52. if leagueStorageRow.InitRate > 0 {
  53. mapLeagueStorageTable.Storage.RatioMap.Put(leagueStorageRow.ID, dbLeague.NewStorageRatio(leagueStorageRow.ID, leagueStorageRow.InitRate))
  54. }
  55. }
  56. mapLeagueStorageTable.Save2Queue()
  57. }
  58. // 联盟资源容量上限检查和初始化
  59. func (p *service) CheckAndInitCapacity(leagueTable *db.MapLeagueTable) {
  60. mapLeagueStorageTable := db.GetMapLeagueStorageTable(leagueTable.LeagueID)
  61. isChange := mapLeagueStorageTable.Storage.CurrencyMap.Check(leagueTable.LeagueInfo.Attrs.GetI64(enum.LeagueAttrResCapacity), enum.LeagueItemMaxNumList)
  62. if isChange {
  63. mapLeagueStorageTable.Save2Queue()
  64. }
  65. }
  66. func (p *service) AddAssets(leagueTable *db.MapLeagueTable, assets types.Assets) {
  67. if len(assets) <= 0 {
  68. clog.Warnf("addAssets empty. leagueID:%d", leagueTable.LeagueID)
  69. return
  70. }
  71. mapLeagueStorageTable := db.GetMapLeagueStorageTable(leagueTable.LeagueID)
  72. for _, asset := range assets {
  73. if !enum.IsLeagueCurrency(asset.ID) {
  74. clog.Warnf("addAssets not league currency : %v", asset)
  75. continue
  76. }
  77. mapLeagueStorageTable.Storage.CurrencyMap.Increase(asset.ID, asset.Num)
  78. }
  79. mapLeagueStorageTable.Save2Queue()
  80. }
  81. // CheckAutoAdd 检查每几秒资源发放情况
  82. func (p *service) CheckAutoAdd(leagueID int64, nowSecond int64) {
  83. var (
  84. save bool
  85. addSecond = data.Const.ItemAddSecond
  86. mapLeagueStorageTable = db.GetMapLeagueStorageTable(leagueID)
  87. mapLeagueTable, _ = db.GetMapLeagueTable(leagueID)
  88. )
  89. for itemID, attrID := range mapItemAttrs {
  90. yield := mapLeagueTable.LeagueInfo.Attrs.GetI64(attrID)
  91. if yield <= 0 {
  92. continue
  93. }
  94. if mapLeagueStorageTable.Storage.CurrencyMap.CheckInitUpdateTime(itemID, nowSecond) {
  95. save = true
  96. }
  97. if !mapLeagueStorageTable.Storage.CurrencyMap.CheckAutoAdd(itemID, nowSecond, yield, addSecond) {
  98. continue
  99. }
  100. save = true
  101. }
  102. if save {
  103. mapLeagueStorageTable.Save2Queue()
  104. }
  105. }