|
|
- RedPacketModel = RedPacketModel or BaseClass(BaseModel)
-
- RedPacketModel.REQUEST_CCMD_EVENT = "RedPacketModel.REQUEST_CCMD_EVENT"
- RedPacketModel.UPDATE_GUILD_RP_LIST = "RedPacketModel.UPDATE_GUILD_RP_LIST"
- RedPacketModel.OPEN_GUILD_REDPACKET_VIEW = "RedPacketModel.OPEN_GUILD_REDPACKET_VIEW" --打开社团红包界面
- RedPacketModel.OPEN_GUILD_REDPACKET_RESULT_VIEW = "RedPacketModel.OPEN_GUILD_REDPACKET_RESULT_VIEW" --打开社团红包领取结果界面
- RedPacketModel.UPDATE_GUILD_REDPACKET_RED = "RedPacketModel.UPDATE_GUILD_REDPACKET_RED" --更新社团红包红点
-
- function RedPacketModel:__init()
- RedPacketModel.Instance = self
- self.red_packet_list = {}
- -- self.has_not_look_list = {} -- 已查看的红包列表,格式为红包唯一id = true
- self.guild_rp_times = 0 -- 今日已领社团红包个数
- self.guild_rp_gold = 0 -- 今日已领社团红包彩钻
- self.guild_rp_bgold = 0 -- 今日已领社团红包红钻
- self.guild_rp_limit = 0 -- 社团红包上限个数
- self.guild_rp_red = false -- 社团红包红点缓存
- end
-
- function RedPacketModel:GetInstance()
- if RedPacketModel.Instance == nil then
- RedPacketModel.New()
- end
- return RedPacketModel.Instance
- end
-
- function RedPacketModel:CheckShowMsgTip(forceShow)
- -- local flag = forceShow or self:GetGuildRedPacketRed()
- -- if flag then
- -- MsgManager:getInstance():Add({type=Config.ConfigMainIcon.TipType.guild_redpacket, zoom=true})
- -- else
- -- if MsgManager:getInstance():IsMsgTypeShow(Config.ConfigMainIcon.TipType.guild_redpacket) then
- -- MsgManager:getInstance():Remove(Config.ConfigMainIcon.TipType.guild_redpacket)
- -- end
- -- end
- end
-
- -- 检查红点
- function RedPacketModel:CheckGuildRedPacketRed()
- -- 初始化红点
- self.guild_rp_red = false
- -- 有加入社团才有红点
- local guild_id = RoleManager.Instance.mainRoleInfo.guild_id
- if guild_id ~= 0 then
- -- 是否已经达到红钻红包的领取限制
- local bgold_rp_limit = self:IsGuildRedPacketInLimit()
- --把其他人待发的红包过滤掉 条件:其他人、status为0
- local my_role_id = RoleManager.Instance.mainRoleInfo.role_id
- local rp_temp_cfg
- for k, v in pairs(self.red_packet_list) do
- if (v.status == 0 and v.role_id == my_role_id) then -- 自己有可以发的红包
- self.guild_rp_red = true
- break
- else
- if (v.receive_status == 1 and v.status == 1) then
- rp_temp_cfg = Config.Redpacket[v.packet_id]
- if rp_temp_cfg.kind == 3 then -- 交易券红包,有了就有红点
- self.guild_rp_red = true
- break
- elseif rp_temp_cfg.kind == 2 and not bgold_rp_limit then -- 红钻,需要判断是否达到了当日红钻红包领取限制
- self.guild_rp_red = true
- break
- end
- end
- end
- end
- end
-
- self:Fire(RedPacketModel.UPDATE_GUILD_REDPACKET_RED, self.guild_rp_red)
- return self.guild_rp_red
- end
- function RedPacketModel:GetGuildRedPacketRed( )
- return self.guild_rp_red
- end
- -- 获取社团红包列表 33901
- function RedPacketModel:SetGuildRedpacketList(vo)
- if not vo then return end
- vo.red_packet_list = self:SortRedPacketList(vo.red_packet_list)
- self.red_packet_list = vo.red_packet_list
- end
-
- function RedPacketModel:SortRedPacketList(list)
- --把其他人待发的红包过滤掉 条件:其他人、status为0
- local my_role_id = RoleManager.Instance.mainRoleInfo.role_id
- for k = #list, 1, -1 do
- if list[k].status == 0 and list[k].role_id ~= my_role_id then
- table.remove(list, k)
- end
- end
-
- for k, v in pairs(list) do
- if v.status == 0 then -- 还没发的红包,置顶
- v.sort_level = 1
- elseif v.status == 1 then -- 发出去的红包,收到协议时未领完
- if v.receive_status == 3 then -- 已经领了的放到4
- v.sort_level = 4
- elseif v.receive_status == 2 then -- 领不到了,统一到4
- v.sort_level = 3
- elseif v.receive_status == 1 then -- 还能领,排在2
- v.sort_level = 2
- end
- elseif v.status == 2 then -- 已领完,去4
- if v.receive_status == 2 then -- 已经领了的放到4
- v.sort_level = 3
- else -- 领不到了,统一到4
- v.sort_level = 4
- end
- end
- end
- local sort_func = function ( a, b )
- if a.sort_level ~= b.sort_level then
- return a.sort_level < b.sort_level
- else
- return a.id < b.id -- 同排序等级则按id排序
- end
- end
- table.sort(list, sort_func)
- return list
- end
-
- function RedPacketModel:GetGuildRedpacketList( )
- return self.red_packet_list
- end
-
- -- 玩家领取红包,更新缓存红包状态并展示 33902
- function RedPacketModel:UpdateGuildRedpacket(vo)
- -- 打开新红包,清除前端新红包列表缓存
- -- self.has_not_look_list[tonumber(vo.red_envelopes_id)] = nil
- for k,v in pairs(self.red_packet_list) do
- if v.id == vo.red_envelopes_id then
- v.has_look = 1
- v.status = vo.status
- v.receive_money = vo.receive_money
- v.receive_status = vo.receive_money == 0 and 2 or 3
- break
- end
- end
- self:SortRedPacketList(self.red_packet_list)
- end
-
- --收到社团新红包 33904
- function RedPacketModel:UpdateGuildNewRedPacket(vo)
- -- 先遍历已有的红包列表,确认这个红包不存在再插入到红包表中
- local exist_rp_list = {}
- for k, v in pairs(self.red_packet_list) do
- exist_rp_list[v.id] = v.id
- end
- for k, v in pairs(vo.red_envelopes_list) do
- if not exist_rp_list[v.id] then
- -- 前端缓存这个红包尚未查看
- -- self.has_not_look_list[tonumber(v.id)] = true
- table.insert(self.red_packet_list, 1, v)
- else--如果发现列表中已经有这个红包,那必然是玩家刚刚发的红包,直接覆盖原数据
- -- self.has_not_look_list[tonumber(v.id)] = true
- for kk,vv in pairs(self.red_packet_list) do
- if vv.id == v.id then
- self.red_packet_list[kk] = v
- end
- end
- end
- end
- self:SortRedPacketList(self.red_packet_list)
- end
-
- -- 获取社团红包的领取情况 33908
- function RedPacketModel:SetGuildRedPacketRecord(vo)
- if not vo then return end
- self.guild_rp_times = vo.times
- self.guild_rp_gold = vo.gold
- self.guild_rp_bgold = vo.bgold
- self.guild_rp_limit = vo.limit
- end
-
- -- 判断【红钻】红包领取是否达到上限,交易券红包不会被这个判断影响,注意区分
- function RedPacketModel:IsGuildRedPacketInLimit( )
- local guild_bgold_limit_cfg = GuildModel:getInstance():GetGuildKvByKey("red_packet_limit")
- local bgold_limit = guild_bgold_limit_cfg and guild_bgold_limit_cfg.val or 0
- return self.guild_rp_times >= self.guild_rp_limit or self.guild_rp_bgold >= bgold_limit
- end
-
- function RedPacketModel:GetGuildRedPacketRecord( )
- return self.guild_rp_times, self.guild_rp_limit, self.guild_rp_bgold
- end
-
- --设置在线人数
- -- function RedPacketModel:SetOnlineNum(vo )
- -- self.on_line_num = vo
- -- end
- -- function RedPacketModel:GetOnlineNum( )
- -- return self.on_line_num
- -- end
-
- --设置红包个人奖励领取上限
- -- function RedPacketModel:SetSingleGetAwardLimit ( vo )
- -- self.single_get_limnt = vo
- -- end
-
- --获得红包可领数量
- function RedPacketModel:GetRedPacketNumCan( )
- local guild_id = RoleManager.Instance.mainRoleInfo.guild_id
- -- 没加入社团就没有红包可以拿
- if guild_id == 0 then return 0 end
-
- local red_list = self:GetGuildRedpacketList()
- local my_role_id = RoleManager.Instance.mainRoleInfo.role_id
- local guild_rp_times, guild_rp_limit, guild_rp_bgold = self:GetGuildRedPacketRecord( )
- local max_rest_time = math.abs(guild_rp_times - guild_rp_limit)
- local bgold_rp_limit = self:IsGuildRedPacketInLimit()
- -------------------------
- local red_num = 0
- -------------------------
- local rp_temp_cfg
- if max_rest_time > 0 then
- for k,v in pairs(red_list) do
- if (v.receive_status == 1 and v.status == 1) then
- rp_temp_cfg = Config.Redpacket[v.packet_id]
- if rp_temp_cfg.kind == 3 then -- 交易券,没有限制
- red_num = red_num + 1
- elseif rp_temp_cfg.kind == 2 and not bgold_rp_limit then -- 红钻,需要限制
- red_num = red_num + 1
- end
- end
- end
- end
- return max_rest_time > red_num and red_num or max_rest_time
- end
-
- --获取一个可领红包 igonre_id:忽略的红包唯一id
- function RedPacketModel:GetOneRedPacketCan(igonre_id)
- local red_list = self:GetGuildRedpacketList()
- local my_role_id = RoleManager.Instance.mainRoleInfo.role_id
- local guild_rp_times, guild_rp_limit, guild_rp_bgold = self:GetGuildRedPacketRecord( )
- local max_rest_time = math.abs(guild_rp_times - guild_rp_limit)
- local bgold_rp_limit = self:IsGuildRedPacketInLimit()
- -------------------------
- local get_data = false
- -------------------------
- local rp_temp_cfg
- if max_rest_time > 0 then
- for k,v in pairs(red_list) do
- if (v.receive_status == 1 and v.status == 1) and ((igonre_id and igonre_id ~= v.id) or not igonre_id) then
- rp_temp_cfg = Config.Redpacket[v.packet_id]
- if rp_temp_cfg.kind == 3 then -- 交易券,可以直接开
- get_data = v
- break
- elseif rp_temp_cfg.kind == 2 and not bgold_rp_limit then -- 红钻,判断是否到达限制
- get_data = v
- break
- end
- end
- end
- end
- return get_data
- end
|