123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- --[[
- Descripttion:roll房
- version:
- Author: Neo,Huang
- Date: 2023-11-21 23:01:45
- LastEditors: Neo,Huang
- LastEditTime: 2023-11-21 23:01:59
- --]]
- local code = require("code")
- local lib_game_redis = require("lib_game_redis")
- local redisUtil = require("utils.redisUtil")
- local util_player = require("utils.util_player")
- local timeUtil = require("utils.timeUtil")
- local nodeMgr = require("nodeMgr")
- local userData = require("data.user")
- local payData = require("data.pay")
- local ROLL_MAIN_KEY = "roll:room"
- local root = {}
- local function _get_roll_room_key(rid)
- return string.format("%s:%s", ROLL_MAIN_KEY, tostring(rid))
- end
- -- 打包 - 房间信息
- function root:pack_roll_room_info(rid)
- if is_empty(rid) then
- return
- end
- local key = _get_roll_room_key(rid)
- local isExist = lib_game_redis:exists(key)
- if not isExist then
- -- 房间已不存在
- return
- end
- local info = {
- roomId = rid,
- name = redisUtil.hget(key, "name"),
- bandShareCode = redisUtil.hget(key, "bandShareCode"),
- createTime = redisUtil.hget_int(key, "createTime"),
- showStartTime = redisUtil.hget_int(key, "showStartTime"),
- signupStartTime = redisUtil.hget_int(key, "signupStartTime"),
- signupEndTime = redisUtil.hget_int(key, "signupEndTime"),
- awardTime = redisUtil.hget_int(key, "awardTime"),
- conditions = redisUtil.hget_json(key, "conditions"),
- itemIdList = redisUtil.hget_json(key, "itemIdList")
- }
- -- 玩家信息
- local signupUidList = redisUtil.hget_json(key, "signupUidList")
- if not is_empty(signupUidList) then
- for _, uid in ipairs(signupUidList) do
- local playerInfo = util_player:get_base_info(uid)
- if not is_empty(playerInfo) then
- if info.signupPlayerList == nil then
- info.signupPlayerList = {}
- end
- table.insert(info.signupPlayerList, playerInfo)
- end
- end
- end
- return info
- end
- -- 打包 - 所有活跃房间
- function root:pack_roll_room_info_list()
- local roomIdList = lib_game_redis:smembers(ROLL_MAIN_KEY)
- if is_empty(roomIdList) then
- return
- end
- local roomInfoList = {}
- for _, v in ipairs(roomIdList) do
- local rid = tonumber(v)
- local roomInfo = self:pack_roll_room_info(rid)
- if not is_empty(roomInfo) then
- table.insert(roomInfoList, roomInfo)
- end
- end
- return roomInfoList
- end
- -- 报名
- function root:sign_up(uid, roomId)
- if is_empty(uid) or is_empty(roomId) then
- return code.PARAMTER_ERROR
- end
- local key = _get_roll_room_key(roomId)
- local isExist = lib_game_redis:exists(key)
- if not isExist then
- -- 房间已不存在
- return code.UNKNOWN
- end
- -- 是否已报名
- local signupUidList = redisUtil.hget_json(key, "signupUidList")
- if table.include(signupUidList, uid) then
- return code.UNKNOWN
- end
- -- 是否绑定推广码
- local bandShareCode = redisUtil.hget(key, "bandShareCode")
- if not is_empty(bandShareCode) then
- local _bandShareCode = userData:get_key_info(uid, "bandShareCode")
- if bandShareCode ~= _bandShareCode then
- return code.UNKNOWN
- end
- end
- -- 报名时间
- local currTime = timeUtil.now(uid)
- local signupStartTime = redisUtil.hget_int(key, "signupStartTime")
- if signupStartTime > currTime then
- -- 未开始报名
- return code.UNKNOWN
- end
- local signupEndTime = redisUtil.hget_int(key, "signupEndTime")
- if currTime > signupEndTime then
- -- 报名已结束
- return code.UNKNOWN
- end
- -- 报名条件
- local conditions = redisUtil.hget_json(key, "conditions")
- if not is_empty(conditions) then
- for _, v in ipairs(conditions) do
- local playerValue = nil
- if v.c == "pay_day_totalAmount" then
- -- 今日充值
- playerValue = payData:get_day_total_amount(uid)
- end
- if v.cv > playerValue then
- return code.UNKNOWN
- end
- end
- end
- -- 报名成功
- table.insert(signupUidList, uid)
- redisUtil.hset(key, "signupUidList", signupUidList)
- -- 广播
- local pack = {
- roomId = roomId,
- playerInfo = util_player:get_base_info(uid)
- }
- nodeMgr.broadcast_proto_notify("on_roll_player", pack)
- return code.OK
- end
- return root
|