item.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  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. i.Num += num
  90. i.Total += num
  91. }
  92. }
  93. func (ib ItemBasePack) AddItem(item []data.ItemReward) {
  94. for _, i := range item {
  95. if i.ItemID == ItemAllRoll {
  96. if _, ok := ib[ItemRoll]; ok {
  97. ib[ItemRoll].MaxNum += i.Amount
  98. ib[ItemRoll].Num += i.Amount
  99. ib[ItemRoll].Total += i.Amount
  100. }
  101. } else {
  102. if _, ok := ib[i.ItemID]; ok {
  103. ib[i.ItemID].Num += i.Amount
  104. ib[i.ItemID].Total += i.Amount
  105. }
  106. }
  107. }
  108. }
  109. func (ai AddItem) Add(item []data.ItemReward) AddItem {
  110. if ai == nil {
  111. ai = make(map[int]*data.ItemReward)
  112. }
  113. for _, v := range item {
  114. if _, ok := ai[v.ItemID]; !ok {
  115. ai[v.ItemID] = &data.ItemReward{
  116. ItemID: v.ItemID,
  117. ItemBaseType: v.ItemBaseType,
  118. }
  119. }
  120. ai[v.ItemID].Amount += v.Amount
  121. }
  122. return ai
  123. }
  124. func (si SubItem) Add(item []data.ItemReward) {
  125. if si == nil {
  126. si = make(map[int]*data.ItemReward)
  127. }
  128. for _, v := range item {
  129. if _, ok := si[v.ItemID]; !ok {
  130. si[v.ItemID] = &data.ItemReward{
  131. ItemID: v.ItemID,
  132. ItemBaseType: v.ItemBaseType,
  133. }
  134. }
  135. si[v.ItemID].Amount += v.Amount
  136. }
  137. }
  138. func (ai AddItem) AddById(id, num int) AddItem {
  139. if ai == nil {
  140. ai = make(map[int]*data.ItemReward)
  141. }
  142. ret, _ := data.ItemConfig.Get(id)
  143. if _, ok := ai[id]; !ok {
  144. ai[id] = &data.ItemReward{
  145. ItemID: id,
  146. ItemBaseType: ret.Type,
  147. }
  148. }
  149. ai[id].Amount += num
  150. return ai
  151. }
  152. func (ai SubItem) AddById(id, num int) SubItem {
  153. if ai == nil {
  154. ai = make(map[int]*data.ItemReward)
  155. }
  156. ret, _ := data.ItemConfig.Get(id)
  157. if _, ok := ai[id]; !ok {
  158. ai[id] = &data.ItemReward{
  159. ItemID: id,
  160. ItemBaseType: ret.Type,
  161. }
  162. }
  163. ai[id].Amount += num
  164. return ai
  165. }