service.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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. // 初始化联盟仓库初始税率
  34. func (p *service) InitStorageRatio(leagueTable *db.MapLeagueTable) {
  35. mapLeagueStorageTable := db.GetMapLeagueStorageTable(leagueTable.LeagueID)
  36. if len(mapLeagueStorageTable.Storage.RatioMap) > 0 {
  37. return
  38. }
  39. // 初始化税率
  40. for _, leagueStorageRow := range data.LeagueStorage.List() {
  41. if leagueStorageRow.InitRate > 0 {
  42. mapLeagueStorageTable.Storage.RatioMap.Put(leagueStorageRow.ID, dbLeague.NewStorageRatio(leagueStorageRow.ID, leagueStorageRow.InitRate))
  43. }
  44. }
  45. mapLeagueStorageTable.Save2Queue()
  46. }
  47. // 联盟资源容量上限检查和初始化
  48. func (p *service) CheckAndInitCapacity(leagueTable *db.MapLeagueTable) {
  49. mapLeagueStorageTable := db.GetMapLeagueStorageTable(leagueTable.LeagueID)
  50. isChange := mapLeagueStorageTable.Storage.CurrencyMap.Check(leagueTable.LeagueInfo.Attrs.GetI64(enum.LeagueAttrResCapacity), enum.LeagueItemMaxNumList)
  51. if isChange {
  52. mapLeagueStorageTable.Save2Queue()
  53. }
  54. }
  55. func (p *service) AddAssets(leagueTable *db.MapLeagueTable, assets types.Assets) {
  56. if len(assets) <= 0 {
  57. clog.Warnf("addAssets empty. leagueID:%d", leagueTable.LeagueID)
  58. return
  59. }
  60. mapLeagueStorageTable := db.GetMapLeagueStorageTable(leagueTable.LeagueID)
  61. for _, asset := range assets {
  62. if !enum.IsLeagueCurrency(asset.ID) {
  63. clog.Warnf("addAssets not league currency : %v", asset)
  64. continue
  65. }
  66. mapLeagueStorageTable.Storage.CurrencyMap.Increase(asset.ID, asset.Num)
  67. }
  68. mapLeagueStorageTable.Save2Queue()
  69. }
  70. // CheckAutoAdd 检查每几秒资源发放情况
  71. func (p *service) CheckAutoAdd(leagueID int64, nowSecond int64) {
  72. var (
  73. save bool
  74. addSecond = data.Const.ItemAddSecond
  75. mapLeagueStorageTable = db.GetMapLeagueStorageTable(leagueID)
  76. mapLeagueTable, _ = db.GetMapLeagueTable(leagueID)
  77. )
  78. for itemID, attrID := range mapItemAttrs {
  79. yield := mapLeagueTable.LeagueInfo.Attrs.GetI64(attrID)
  80. if yield <= 0 {
  81. continue
  82. }
  83. if mapLeagueStorageTable.Storage.CurrencyMap.CheckInitUpdateTime(itemID, nowSecond) {
  84. save = true
  85. }
  86. if !mapLeagueStorageTable.Storage.CurrencyMap.CheckAutoAdd(itemID, nowSecond, yield, addSecond) {
  87. continue
  88. }
  89. save = true
  90. }
  91. if save {
  92. mapLeagueStorageTable.Save2Queue()
  93. }
  94. }