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
|