--[[ 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