room_fish_drop.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package gamelogic
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "math/rand"
  6. "os"
  7. "bet24.com/log"
  8. )
  9. type DropInfo struct {
  10. FishId int
  11. ItemId int
  12. Count int
  13. Chance int
  14. }
  15. type room_fish_drop struct {
  16. dropInfoList map[int]*DropInfo
  17. }
  18. func newRoomFishDrop(roomName string) *room_fish_drop {
  19. ret := new(room_fish_drop)
  20. ret.loadConfig(roomName)
  21. return ret
  22. }
  23. func (r *room_fish_drop) loadConfig(roomName string) {
  24. r.dropInfoList = make(map[int]*DropInfo)
  25. fileName := fmt.Sprintf("fish/drop_%v.json", roomName)
  26. data, err := os.ReadFile(fileName)
  27. if err != nil {
  28. log.Release("read drop config failed %v", fileName)
  29. return
  30. }
  31. var dl []DropInfo
  32. err = json.Unmarshal(data, &dl)
  33. if err != nil {
  34. log.Release("Unmarshal drop config failed err:%v", err)
  35. }
  36. for i := 0; i < len(dl); i++ {
  37. r.dropInfoList[dl[i].FishId] = &dl[i]
  38. }
  39. log.Debug("drop config initData ok %v", r.dropInfoList)
  40. }
  41. func (r *room_fish_drop) getDropItem(fishId int) (int, int) {
  42. drop, ok := r.dropInfoList[fishId]
  43. if !ok {
  44. return 0, 0
  45. }
  46. if rand.Intn(10000) < drop.Chance {
  47. return drop.ItemId, drop.Count
  48. }
  49. return 0, 0
  50. }