item.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. package models
  2. import "github.com/mhaya/game/game_cluster/internal/data"
  3. const (
  4. ItemRoll = 1
  5. ItemInvite = 2
  6. ItemU = 3
  7. ItemTon = 4
  8. ItemScore = 5
  9. ItemAllRoll = 6
  10. ItemDrawsNumber = 7
  11. )
  12. type Item struct {
  13. ID int `json:"id" bson:"id"`
  14. ItemType int `json:"itemType" bson:"itemType"`
  15. ItemKey string `json:"itemKey" bson:"itemKey"`
  16. Num int `json:"num" bson:"num"`
  17. CurNum int `json:"curNum" bson:"curNum"`
  18. Total int `json:"total" bson:"total"`
  19. MaxNum int `json:"maxNum" bson:"maxNum"`
  20. }
  21. type ItemBasePack map[int]*Item
  22. type AddItem map[int]*data.ItemReward
  23. type SubItem map[int]*data.ItemReward
  24. func NewAddItem() AddItem {
  25. return make(map[int]*data.ItemReward, 10)
  26. }
  27. func NewSubItem() SubItem {
  28. return make(map[int]*data.ItemReward, 10)
  29. }
  30. func NewItem() ItemBasePack {
  31. ret := data.ItemConfig
  32. initItem, _ := data.DiscreteRuleConfig.Get(InitRoll)
  33. var m = make(map[int]*Item)
  34. maxNum := 0
  35. for k, v := range ret.GetMap() {
  36. m[k] = &Item{
  37. ID: v.ID,
  38. ItemType: v.Type,
  39. ItemKey: v.ItemKey,
  40. }
  41. for _, j := range initItem.Reward {
  42. if k == j.ItemID {
  43. if k == ItemAllRoll {
  44. maxNum = j.Amount
  45. } else {
  46. m[k].Num = j.Amount
  47. m[k].Total = j.Amount
  48. }
  49. }
  50. }
  51. delete(m, ItemAllRoll)
  52. }
  53. m[ItemRoll].MaxNum = maxNum
  54. return m
  55. }
  56. func (i *Item) Add(num int) {
  57. if num < 0 {
  58. return
  59. }
  60. i.Num += num
  61. i.Total += num
  62. }
  63. func (i *Item) Sub(num int) {
  64. if num < 0 || i.Num < num {
  65. return
  66. }
  67. i.Num -= num
  68. i.CurNum += num
  69. }
  70. func (i *Item) AddAll() int {
  71. if i.Num < i.MaxNum {
  72. i.Num = i.MaxNum
  73. i.Total += i.MaxNum - i.Num
  74. return i.MaxNum - i.Num
  75. }
  76. return 0
  77. }
  78. func (i *Item) AddSame() int {
  79. if i.Num < i.MaxNum/4 {
  80. i.Num = i.MaxNum / 4
  81. i.Total += i.MaxNum / 4
  82. return i.MaxNum / 4
  83. }
  84. return 0
  85. }
  86. func (i *Item) AddMaxNum(num int) {
  87. if i.ID == ItemRoll {
  88. i.MaxNum += num
  89. }
  90. }
  91. func (ib ItemBasePack) AddItem(item []data.ItemReward) {
  92. for _, i := range item {
  93. if i.ItemID == ItemAllRoll {
  94. if _, ok := ib[ItemRoll]; ok {
  95. ib[ItemRoll].MaxNum += i.Amount
  96. }
  97. } else {
  98. if _, ok := ib[i.ItemID]; ok {
  99. ib[i.ItemID].Num += i.Amount
  100. ib[i.ItemID].Total += i.Amount
  101. }
  102. }
  103. }
  104. }
  105. func (ai AddItem) Add(item []data.ItemReward) AddItem {
  106. if ai == nil {
  107. ai = make(map[int]*data.ItemReward)
  108. }
  109. for _, v := range item {
  110. if _, ok := ai[v.ItemID]; !ok {
  111. ai[v.ItemID] = &data.ItemReward{
  112. ItemID: v.ItemID,
  113. ItemBaseType: v.ItemBaseType,
  114. }
  115. }
  116. ai[v.ItemID].Amount += v.Amount
  117. }
  118. return ai
  119. }
  120. func (si SubItem) Add(item []data.ItemReward) {
  121. if si == nil {
  122. si = make(map[int]*data.ItemReward)
  123. }
  124. for _, v := range item {
  125. if _, ok := si[v.ItemID]; !ok {
  126. si[v.ItemID] = &data.ItemReward{
  127. ItemID: v.ItemID,
  128. ItemBaseType: v.ItemBaseType,
  129. }
  130. }
  131. si[v.ItemID].Amount += v.Amount
  132. }
  133. }
  134. func (ai AddItem) AddById(id, num int) AddItem {
  135. if ai == nil {
  136. ai = make(map[int]*data.ItemReward)
  137. }
  138. ret, _ := data.ItemConfig.Get(id)
  139. if _, ok := ai[id]; !ok {
  140. ai[id] = &data.ItemReward{
  141. ItemID: id,
  142. ItemBaseType: ret.Type,
  143. }
  144. }
  145. ai[id].Amount += num
  146. return ai
  147. }
  148. func (ai SubItem) AddById(id, num int) SubItem {
  149. if ai == nil {
  150. ai = make(map[int]*data.ItemReward)
  151. }
  152. ret, _ := data.ItemConfig.Get(id)
  153. if _, ok := ai[id]; !ok {
  154. ai[id] = &data.ItemReward{
  155. ItemID: id,
  156. ItemBaseType: ret.Type,
  157. }
  158. }
  159. ai[id].Amount += num
  160. return ai
  161. }