util_roll.lua 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. --[[
  2. Descripttion:roll房
  3. version:
  4. Author: Neo,Huang
  5. Date: 2023-11-21 23:01:45
  6. LastEditors: Neo,Huang
  7. LastEditTime: 2023-11-21 23:01:59
  8. --]]
  9. local code = require("code")
  10. local lib_game_redis = require("lib_game_redis")
  11. local redisUtil = require("utils.redisUtil")
  12. local util_player = require("utils.util_player")
  13. local timeUtil = require("utils.timeUtil")
  14. local nodeMgr = require("nodeMgr")
  15. local userData = require("data.user")
  16. local payData = require("data.pay")
  17. local ROLL_MAIN_KEY = "roll:room"
  18. local root = {}
  19. local function _get_roll_room_key(rid)
  20. return string.format("%s:%s", ROLL_MAIN_KEY, tostring(rid))
  21. end
  22. -- 打包 - 房间信息
  23. function root:pack_roll_room_info(rid)
  24. if is_empty(rid) then
  25. return
  26. end
  27. local key = _get_roll_room_key(rid)
  28. local isExist = lib_game_redis:exists(key)
  29. if not isExist then
  30. -- 房间已不存在
  31. return
  32. end
  33. local info = {
  34. roomId = rid,
  35. name = redisUtil.hget(key, "name"),
  36. bandShareCode = redisUtil.hget(key, "bandShareCode"),
  37. createTime = redisUtil.hget_int(key, "createTime"),
  38. showStartTime = redisUtil.hget_int(key, "showStartTime"),
  39. signupStartTime = redisUtil.hget_int(key, "signupStartTime"),
  40. signupEndTime = redisUtil.hget_int(key, "signupEndTime"),
  41. awardTime = redisUtil.hget_int(key, "awardTime"),
  42. conditions = redisUtil.hget_json(key, "conditions"),
  43. itemIdList = redisUtil.hget_json(key, "itemIdList")
  44. }
  45. -- 玩家信息
  46. local signupUidList = redisUtil.hget_json(key, "signupUidList")
  47. if not is_empty(signupUidList) then
  48. for _, uid in ipairs(signupUidList) do
  49. local playerInfo = util_player:get_base_info(uid)
  50. if not is_empty(playerInfo) then
  51. if info.signupPlayerList == nil then
  52. info.signupPlayerList = {}
  53. end
  54. table.insert(info.signupPlayerList, playerInfo)
  55. end
  56. end
  57. end
  58. return info
  59. end
  60. -- 打包 - 所有活跃房间
  61. function root:pack_roll_room_info_list()
  62. local roomIdList = lib_game_redis:smembers(ROLL_MAIN_KEY)
  63. if is_empty(roomIdList) then
  64. return
  65. end
  66. local roomInfoList = {}
  67. for _, v in ipairs(roomIdList) do
  68. local rid = tonumber(v)
  69. local roomInfo = self:pack_roll_room_info(rid)
  70. if not is_empty(roomInfo) then
  71. table.insert(roomInfoList, roomInfo)
  72. end
  73. end
  74. return roomInfoList
  75. end
  76. -- 报名
  77. function root:sign_up(uid, roomId)
  78. if is_empty(uid) or is_empty(roomId) then
  79. return code.PARAMTER_ERROR
  80. end
  81. local key = _get_roll_room_key(roomId)
  82. local isExist = lib_game_redis:exists(key)
  83. if not isExist then
  84. -- 房间已不存在
  85. return code.UNKNOWN
  86. end
  87. -- 是否已报名
  88. local signupUidList = redisUtil.hget_json(key, "signupUidList")
  89. if table.include(signupUidList, uid) then
  90. return code.UNKNOWN
  91. end
  92. -- 是否绑定推广码
  93. local bandShareCode = redisUtil.hget(key, "bandShareCode")
  94. if not is_empty(bandShareCode) then
  95. local _bandShareCode = userData:get_key_info(uid, "bandShareCode")
  96. if bandShareCode ~= _bandShareCode then
  97. return code.UNKNOWN
  98. end
  99. end
  100. -- 报名时间
  101. local currTime = timeUtil.now(uid)
  102. local signupStartTime = redisUtil.hget_int(key, "signupStartTime")
  103. if signupStartTime > currTime then
  104. -- 未开始报名
  105. return code.UNKNOWN
  106. end
  107. local signupEndTime = redisUtil.hget_int(key, "signupEndTime")
  108. if currTime > signupEndTime then
  109. -- 报名已结束
  110. return code.UNKNOWN
  111. end
  112. -- 报名条件
  113. local conditions = redisUtil.hget_json(key, "conditions")
  114. if not is_empty(conditions) then
  115. for _, v in ipairs(conditions) do
  116. local playerValue = nil
  117. if v.c == "pay_day_totalAmount" then
  118. -- 今日充值
  119. playerValue = payData:get_day_total_amount(uid)
  120. end
  121. if v.cv > playerValue then
  122. return code.UNKNOWN
  123. end
  124. end
  125. end
  126. -- 报名成功
  127. table.insert(signupUidList, uid)
  128. redisUtil.hset(key, "signupUidList", signupUidList)
  129. -- 广播
  130. local pack = {
  131. roomId = roomId,
  132. playerInfo = util_player:get_base_info(uid)
  133. }
  134. nodeMgr.broadcast_proto_notify("on_roll_player", pack)
  135. return code.OK
  136. end
  137. return root