源战役客户端
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 
 

254 行
9.3 KiB

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