invite.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package models
  2. import (
  3. "github.com/mhaya/game/game_cluster/internal/data"
  4. mhayaLogger "github.com/mhaya/logger"
  5. )
  6. type InviteReward struct {
  7. IsClaim int `json:"isClaim" bson:"isClaim"`
  8. Reward []data.ItemReward `json:"reward" bson:"reward"`
  9. RewardTime int64 `json:"rewardTime" bson:"rewardTime"`
  10. }
  11. type Invite map[int]*InviteModel
  12. type InviteModel struct {
  13. Type int `json:"type" bson:"type"` //2普通3会员
  14. Num int `json:"num" bson:"num"`
  15. Reward map[int]*data.ItemReward `json:"reward" bson:"reward"`
  16. }
  17. func NewInvite() map[int]*InviteModel {
  18. var invite = make(map[int]*InviteModel)
  19. invite[InvitePlayer] = &InviteModel{
  20. Type: InvitePlayer,
  21. Num: 0,
  22. }
  23. invite[InvitePlayer].Reward = make(map[int]*data.ItemReward)
  24. invite[InviteVipPlayer] = &InviteModel{
  25. Type: InviteVipPlayer,
  26. Num: 0,
  27. }
  28. invite[InviteVipPlayer].Reward = make(map[int]*data.ItemReward)
  29. return invite
  30. }
  31. func (i Invite) Set(tp int, reward []data.ItemReward) {
  32. if _, ok := i[tp]; ok {
  33. i[tp].Num += 1
  34. mhayaLogger.Infof("player set total invite, tp=%v,num=%v", tp, i[tp].Num)
  35. for _, v := range reward {
  36. if _, ok = i[tp].Reward[v.ItemID]; ok {
  37. i[tp].Reward[v.ItemID].Amount += v.Amount
  38. } else {
  39. i[tp].Reward[v.ItemID] = &v
  40. }
  41. }
  42. }
  43. }
  44. func (ir *InviteReward) Merge() {
  45. m := make(map[int]int)
  46. for _, kv := range ir.Reward {
  47. m[kv.ItemID] += kv.Amount
  48. }
  49. result := make([]data.ItemReward, 0, len(m))
  50. for k, v := range m {
  51. result = append(result, data.ItemReward{ItemID: k, Amount: v, ItemBaseType: 1})
  52. }
  53. ir.Reward = result
  54. }