player_sign_in.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. package mapPlayer
  2. import (
  3. "f1-game/internal/code"
  4. "f1-game/internal/data"
  5. nameRemote "f1-game/internal/name/remote"
  6. "f1-game/internal/pb"
  7. ao "f1-game/nodes/game/player/asset/origin"
  8. "f1-game/nodes/map/internal/db"
  9. mapFacade "f1-game/nodes/map/internal/facade"
  10. signIn "f1-game/nodes/map/player/sign_in"
  11. cproto "github.com/cherry-game/cherry/net/proto"
  12. )
  13. func (p *actorPlayer) initSignIn() {
  14. p.Local().Register(nameRemote.MapPlayer_DailySignIn, p.dailySignIn)
  15. p.Local().Register(nameRemote.MapPlayer_ReDailySignIn, p.reDailySignIn)
  16. p.Local().Register(nameRemote.MapPlayer_DailySignInReward, p.dailySignInReward)
  17. }
  18. func (p *actorPlayer) dailySignIn(session *cproto.Session, _ *pb.None) {
  19. var (
  20. playerTable = db.GetMapPlayerTable(p.playerID)
  21. poolID = playerTable.SignIn.PoolID
  22. currentDay = signIn.Service().GetCurrentDay(playerTable)
  23. )
  24. // 已签到过
  25. if playerTable.SignIn.HasSignedIn(currentDay) {
  26. p.ResponseCode(session, code.SignInAlreadySigned)
  27. return
  28. }
  29. // 查看配置是否存在
  30. signInRow, found := data.SignIn.GetByPoolIDDays(poolID, currentDay)
  31. if !found {
  32. p.ResponseCode(session, code.SignInConfigNotFound)
  33. return
  34. }
  35. _, errCode := mapFacade.Storage.AssetAdds(p.playerID, signInRow.Rewards, ao.SignInReward, true)
  36. if code.IsFail(errCode) {
  37. p.ResponseCode(session, errCode)
  38. return
  39. }
  40. // 更新签到数据
  41. playerTable.SignIn.AddSignInDay(currentDay)
  42. playerTable.Save2Queue()
  43. resp := &pb.I32I32{
  44. Key: currentDay,
  45. Value: playerTable.SignIn.TotalSignInDays,
  46. }
  47. p.Response(session, resp)
  48. }
  49. // 补签
  50. func (p *actorPlayer) reDailySignIn(session *cproto.Session, req *pb.I32) {
  51. var (
  52. playerTable = db.GetMapPlayerTable(p.playerID)
  53. reSignInDays = req.Value
  54. currentDays = signIn.Service().GetCurrentDay(playerTable)
  55. )
  56. // 判断是否等于当天签到天数
  57. if reSignInDays == currentDays {
  58. p.ResponseCode(session, code.SignInReSignNotCan)
  59. return
  60. }
  61. // 是否还有补签次数
  62. if !playerTable.SignIn.HasReSignInCount() {
  63. p.ResponseCode(session, code.SignInReSignCountNotEnough)
  64. return
  65. }
  66. // 判断补签天数是否已经签到过
  67. if playerTable.SignIn.HasSignedIn(reSignInDays) {
  68. p.ResponseCode(session, code.SignInAlreadySigned)
  69. return
  70. }
  71. var (
  72. // TODO 当前总补签天数默认为1 后续如果接入vip增加补签天数再更新获取
  73. totalReSignInDays = int32(1)
  74. canReSignInDays = totalReSignInDays - playerTable.SignIn.ReSignInCount
  75. )
  76. // 补签次数不足
  77. if canReSignInDays <= 0 {
  78. p.ResponseCode(session, code.SignInReSignCountNotEnough)
  79. return
  80. }
  81. // 检测是否可以补签
  82. errCode := signIn.Service().CheckCanReSignIn(playerTable, reSignInDays, canReSignInDays)
  83. if code.IsFail(errCode) {
  84. p.ResponseCode(session, errCode)
  85. return
  86. }
  87. signInRow, found := data.SignIn.GetByPoolIDDays(playerTable.SignIn.PoolID, reSignInDays)
  88. if !found {
  89. p.ResponseCode(session, code.SignInConfigNotFound)
  90. return
  91. }
  92. _, errCode = mapFacade.Storage.AssetAdds(p.playerID, signInRow.Rewards, ao.ReSignInReward, true)
  93. if code.IsFail(errCode) {
  94. p.ResponseCode(session, errCode)
  95. return
  96. }
  97. playerTable.SignIn.AddSignInDay(reSignInDays)
  98. playerTable.SignIn.UseReSignInCount()
  99. playerTable.Save2Queue()
  100. resp := &pb.ReSignIn{
  101. ReSignInDays: reSignInDays,
  102. TotalSignInDays: playerTable.SignIn.TotalSignInDays,
  103. ReSignInCount: playerTable.SignIn.ReSignInCount,
  104. }
  105. p.Response(session, resp)
  106. }
  107. // 领取累计签到奖励
  108. func (p *actorPlayer) dailySignInReward(session *cproto.Session, req *pb.I32) {
  109. var (
  110. playerTable = db.GetMapPlayerTable(p.playerID)
  111. rewardID = req.GetValue()
  112. )
  113. signInRewardRow, found := data.SignInReward.GetByRewardID(rewardID)
  114. if !found {
  115. p.ResponseCode(session, code.SignInRewardConfigNotFound)
  116. return
  117. }
  118. if playerTable.SignIn.TotalSignInDays < signInRewardRow.NeedDays {
  119. p.ResponseCode(session, code.SignInDaysNotEnough)
  120. return
  121. }
  122. if playerTable.SignIn.HasReceivedAward(rewardID) {
  123. p.ResponseCode(session, code.SignInRewardAlreadyReceived)
  124. return
  125. }
  126. _, errCode := mapFacade.Storage.AssetAdds(p.playerID, signInRewardRow.CumRewards, ao.CumSignInReward)
  127. if code.IsFail(errCode) {
  128. p.ResponseCode(session, errCode)
  129. return
  130. }
  131. playerTable.SignIn.ReceiveAward(rewardID)
  132. playerTable.Save2Queue()
  133. resp := &pb.I32{
  134. Value: rewardID,
  135. }
  136. p.Response(session, resp)
  137. }