player_sign_in.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  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. // 找到第一个没签到的天数 然后判断是否等于当前补签天数
  72. missSignInDays, errCode := signIn.Service().GetFirstMissSignInDays(playerTable)
  73. if code.IsFail(errCode) {
  74. p.ResponseCode(session, errCode)
  75. return
  76. }
  77. if missSignInDays != reSignInDays {
  78. p.ResponseCode(session, code.SignInReSignNotCan)
  79. return
  80. }
  81. signInRow, found := data.SignIn.GetByPoolIDDays(playerTable.SignIn.PoolID, reSignInDays)
  82. if !found {
  83. p.ResponseCode(session, code.SignInConfigNotFound)
  84. return
  85. }
  86. _, errCode = mapFacade.Storage.AssetAdds(p.playerID, signInRow.Rewards, ao.ReSignInReward, true)
  87. if code.IsFail(errCode) {
  88. p.ResponseCode(session, errCode)
  89. return
  90. }
  91. playerTable.SignIn.AddSignInDay(reSignInDays)
  92. playerTable.SignIn.UseReSignInCount()
  93. playerTable.Save2Queue()
  94. resp := &pb.ReSignIn{
  95. ReSignInDays: reSignInDays,
  96. TotalSignInDays: playerTable.SignIn.TotalSignInDays,
  97. ReSignInCount: playerTable.SignIn.ReSignInCount,
  98. }
  99. p.Response(session, resp)
  100. }
  101. // 领取累计签到奖励
  102. func (p *actorPlayer) dailySignInReward(session *cproto.Session, req *pb.I32) {
  103. var (
  104. playerTable = db.GetMapPlayerTable(p.playerID)
  105. rewardID = req.GetValue()
  106. )
  107. signInRewardRow, found := data.SignInReward.GetByRewardID(rewardID)
  108. if !found {
  109. p.ResponseCode(session, code.SignInRewardConfigNotFound)
  110. return
  111. }
  112. if playerTable.SignIn.TotalSignInDays < signInRewardRow.NeedDays {
  113. p.ResponseCode(session, code.SignInDaysNotEnough)
  114. return
  115. }
  116. if playerTable.SignIn.HasReceivedAward(rewardID) {
  117. p.ResponseCode(session, code.SignInRewardAlreadyReceived)
  118. return
  119. }
  120. _, errCode := mapFacade.Storage.AssetAdds(p.playerID, signInRewardRow.CumRewards, ao.CumSignInReward)
  121. if code.IsFail(errCode) {
  122. p.ResponseCode(session, errCode)
  123. return
  124. }
  125. playerTable.SignIn.ReceiveAward(rewardID)
  126. playerTable.Save2Queue()
  127. resp := &pb.I32{
  128. Value: rewardID,
  129. }
  130. p.Response(session, resp)
  131. }