signin.go 924 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package proto
  2. import (
  3. "bet24.com/log"
  4. item "bet24.com/servers/micros/item_inventory/proto"
  5. "math/rand"
  6. )
  7. type Signin struct {
  8. Id int
  9. Award []RandomPrize
  10. DoubleVipLevel int // vip?加倍,0表示没有
  11. SignTime int // 签到时间,0表示未签
  12. }
  13. type SigninInfo struct {
  14. SigninTable []Signin
  15. Signable bool
  16. }
  17. type RandomPrize struct {
  18. item.ItemPack
  19. Odds int `json:",omitempty"` // 概率
  20. }
  21. func (s *Signin) GetPrize() *item.ItemPack {
  22. if len(s.Award) == 0 {
  23. return nil
  24. }
  25. if len(s.Award) == 1 {
  26. return &s.Award[0].ItemPack
  27. }
  28. total := 0
  29. for _, v := range s.Award {
  30. total += v.Odds
  31. }
  32. if total == 0 {
  33. return nil
  34. }
  35. r := rand.Intn(total)
  36. inc := 0
  37. for i := 0; i < len(s.Award); i++ {
  38. inc += s.Award[i].Odds
  39. if r < inc {
  40. return &s.Award[i].ItemPack
  41. }
  42. }
  43. log.Release("Signin.GetPrize return nil total[%d]r[%d]inc[%d]", total, r, inc)
  44. return nil
  45. }