invite.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package player
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/mhaya/game/game_cluster/internal/code"
  6. "github.com/mhaya/game/game_cluster/internal/constant"
  7. "github.com/mhaya/game/game_cluster/internal/data"
  8. "github.com/mhaya/game/game_cluster/internal/mdb"
  9. "github.com/mhaya/game/game_cluster/internal/mdb/models"
  10. "github.com/mhaya/game/game_cluster/internal/param"
  11. clog "github.com/mhaya/logger"
  12. )
  13. func (p *actorPlayer) invite(req *param.InviteReq) int32 {
  14. if !p.isOnline {
  15. return code.PlayerNotLogin
  16. }
  17. if p.Player.Pid != "" {
  18. return code.InviteEmpoweringOthersError
  19. }
  20. exists := mdb.RDB.Exists(context.Background(), fmt.Sprintf("%v:1:%v", constant.InviteKey, req.ParentName)).Val()
  21. if exists > 0 {
  22. return code.Error
  23. }
  24. p.dirty = true
  25. p.Player.Pid = req.ParentName
  26. p.Player.SetInvite(req.ParentName)
  27. //添加日志
  28. clog.Info("玩家邀请成功,玩家ID:%v,邀请玩家ID:%v", p.Player.UserName, req.ParentName)
  29. return code.OK
  30. }
  31. func (p *actorPlayer) inviteRecord() (*param.WeeklyRankConfigResp, int32) {
  32. if !p.isOnline {
  33. return nil, code.PlayerNotLogin
  34. }
  35. var resp param.WeeklyRankConfigResp
  36. if d, ok := p.Player.Invite[models.InvitePlayer]; ok {
  37. resp.InviteNum = d.Num
  38. for _, v := range d.Reward {
  39. resp.InviteTotalReward = append(resp.InviteTotalReward, data.ItemReward{ItemID: v.ItemID, ItemBaseType: v.ItemBaseType, Amount: v.Amount})
  40. }
  41. }
  42. if d, ok := p.Player.Invite[models.InviteVipPlayer]; ok {
  43. resp.VipInviteNum = d.Num
  44. for _, v := range d.Reward {
  45. resp.VipInviteTotalReward = append(resp.VipInviteTotalReward, data.ItemReward{ItemID: v.ItemID, ItemBaseType: v.ItemBaseType, Amount: v.Amount})
  46. }
  47. }
  48. return &resp, code.OK
  49. }
  50. func (p *actorPlayer) inviteReward(req *param.InviteReq) (*int, int32) {
  51. if !p.isOnline {
  52. p.InitBase(req.ParentName)
  53. }
  54. p.dirty = true
  55. p.isOnline = true
  56. addItem := models.NewAddItem()
  57. switch req.Type {
  58. case models.InvitePlayer:
  59. ret, ok := data.DiscreteRuleConfig.Get(models.InvitePlayer)
  60. if !ok {
  61. return &p.Player.IsLeader, code.Error
  62. }
  63. addItem.Add(ret.Reward)
  64. p.Player.Item.AddItem(ret.Reward)
  65. addItem.AddById(models.ItemInvite, 1)
  66. p.Player.SetPlayerRewardLog(models.SourceInvite, models.InvitePlayer, ret.Reward, []data.ItemReward{}, 2)
  67. case models.InviteVipPlayer:
  68. ret, ok := data.DiscreteRuleConfig.Get(models.InviteVipPlayer)
  69. if !ok {
  70. return &p.Player.IsLeader, code.Error
  71. }
  72. addItem.Add(ret.Reward)
  73. p.Player.Item.AddItem(ret.Reward)
  74. addItem.AddById(models.ItemInvite, 1)
  75. p.Player.SetPlayerRewardLog(models.SourceInvite, models.InviteVipPlayer, ret.Reward, []data.ItemReward{}, 2)
  76. }
  77. //社区长邀请
  78. if p.Player.IsLeader == 1 {
  79. ret, ok := data.DiscreteRuleConfig.Get(models.InvitePlayerByLeader)
  80. if !ok {
  81. return &p.Player.IsLeader, code.Error
  82. }
  83. addItem.Add(ret.Reward)
  84. p.Player.Item.AddItem(ret.Reward)
  85. p.Player.SetPlayerRewardLog(models.SourceInvite, models.InvitePlayerByLeader, ret.Reward, []data.ItemReward{}, 2)
  86. }
  87. //设置邀请榜单
  88. models.SetRank(constant.RankSourceInvite, p.Player.IsRobot, p.Player.UserName, 1)
  89. p.Player.LevelUp()
  90. p.Player.FinishAchieveTaskByType2()
  91. return &p.Player.IsLeader, code.OK
  92. }