319 lines
11 KiB
Lua
319 lines
11 KiB
Lua
------------------------------------------------
|
||
-- 作者: gzg
|
||
-- 日期: 2020-08-25
|
||
-- 文件: LuckyDrawWeekSystem.lua
|
||
-- 模块: LuckyDrawWeekSystem
|
||
-- 描述: 每周福利之幸运抽奖
|
||
------------------------------------------------
|
||
local LuckyDrawAwardItem = require "Logic.LuckyDrawWeek.LuckyDrawAwardItem";
|
||
local LuckyDrawRecord = require "Logic.LuckyDrawWeek.LuckyDrawRecord";
|
||
local LuckyDrawVolume = require "Logic.LuckyDrawWeek.LuckyDrawVolume";
|
||
local TimeUtils = CS.Thousandto.Core.Base.TimeUtils;
|
||
|
||
--奖励等级的数量
|
||
local CN_AWARD_TYPE_COUNT = 4;
|
||
--可以选中的奖励
|
||
local CN_AWARD_TYPE_CANSELECT = 2;
|
||
|
||
local LuckyDrawWeekSystem = {
|
||
--配置表奖励列表 List
|
||
CfgAwardsList = nil,
|
||
--根据类型获取的配置表奖励数据
|
||
CfgAwardsDict = nil,
|
||
--服务器抽奖记录
|
||
GlobalRecords = nil,
|
||
--自己的抽奖记录
|
||
MeRecords = nil,
|
||
--领取奖卷
|
||
GetVolumesDict = nil,
|
||
--抽奖次数
|
||
AwardTimes = 0,
|
||
--所有的奖励数据
|
||
AwardList = nil,
|
||
}
|
||
|
||
function LuckyDrawWeekSystem:Initialize()
|
||
--把所有奖励置为nil,用于判断配置是否读取过
|
||
self.CfgAwardsList = nil;
|
||
self.CfgAwardsDict = Dictionary:New();
|
||
--初始化记录
|
||
self.GlobalRecords = List:New();
|
||
self.MeRecords = List:New();
|
||
--初始领取信息
|
||
self.GetVolumesDict = Dictionary:New();
|
||
self.AwardTimes = 0;
|
||
self.AwardList = List:New()
|
||
end
|
||
|
||
function LuckyDrawWeekSystem:UnInitialize()
|
||
self.CfgAwardsList = nil;
|
||
self.CfgAwardsDict = nil;
|
||
self.GlobalRecords = nil;
|
||
self.MeRecords = nil;
|
||
self.GetVolumesDict = nil;
|
||
self.AwardTimes = 0;
|
||
self.AwardList = nil;
|
||
end
|
||
|
||
function LuckyDrawWeekSystem:PraseCfgAwards()
|
||
if self.CfgAwardsList == nil then
|
||
self.CfgAwardsList = List:New();
|
||
self.CfgAwardsDict:Clear()
|
||
local _occ = GameCenter.GameSceneSystem:GetLocalPlayer().IntOcc
|
||
DataConfig.DataWeekWelfareReward:Foreach(
|
||
function(_,_cfgData)
|
||
self.CfgAwardsList[_cfgData.Type+1] = _cfgData
|
||
if _cfgData.Type < CN_AWARD_TYPE_CANSELECT then
|
||
if not self.CfgAwardsDict:ContainsKey(_cfgData.Type) then
|
||
local _rewards = Utils.SplitStr(_cfgData.RewardPool, ';');
|
||
local _list = List:New()
|
||
for i = 1, #_rewards do
|
||
local _reward = Utils.SplitNumber(_rewards[i], '_')
|
||
if _reward[4] == 9 or _reward[4] == _occ then
|
||
local _data = {
|
||
Index = 0,
|
||
Rewards = _rewards[i],
|
||
RewardType = _cfgData.Type,
|
||
MaxNum = _cfgData.Num,
|
||
Selected = false,
|
||
}
|
||
_list:Add(_data)
|
||
end
|
||
end
|
||
self.CfgAwardsDict:Add(_cfgData.Type, _list)
|
||
end
|
||
end
|
||
end
|
||
);
|
||
end
|
||
return self.CfgAwardsList;
|
||
end
|
||
|
||
function LuckyDrawWeekSystem:SetRedPoint()
|
||
local _luckyDrawPoint = GameCenter.ItemContianerSystem:GetEconomyWithType(ItemTypeCode.LuckyDraw)
|
||
local _days = Utils.SplitNumber(DataConfig.DataGlobal[1898].Params, "_")
|
||
local _isLuckDay = false
|
||
local _curServerTime = math.floor(GameCenter.HeartSystem.ServerTime + GameCenter.HeartSystem.ServerZoneOffset)
|
||
local _curWeekDay = TimeUtils.GetStampTimeWeeklyNotZone(math.floor(_curServerTime))
|
||
if _curWeekDay == 0 then
|
||
_curWeekDay = 7
|
||
end
|
||
for i = 1, #_days do
|
||
if _curWeekDay == _days[i] then
|
||
_isLuckDay = true
|
||
break
|
||
end
|
||
end
|
||
local _showRedPoint = false
|
||
if _isLuckDay and _luckyDrawPoint > 0 then
|
||
_showRedPoint = true
|
||
end
|
||
if self.GetVolumesDict:Count() > 0 then
|
||
local _keys = self.GetVolumesDict:GetKeys()
|
||
for i = 1, #_keys do
|
||
local _volumes = self.GetVolumesDict[_keys[i]]
|
||
if not _volumes.IsGet and _volumes.Progress >= _volumes.MaxCount then
|
||
_showRedPoint = true
|
||
break
|
||
end
|
||
end
|
||
end
|
||
GameCenter.MainFunctionSystem:SetAlertFlag(FunctionStartIdCode.LuckyDrawWeek, _showRedPoint)
|
||
end
|
||
|
||
--1.请求抽奖面板信息
|
||
function LuckyDrawWeekSystem:ReqOpenLuckyDrawPanel()
|
||
GameCenter.Network.Send("MSG_LuckyDraw.ReqOpenLuckyDrawPanel", {})
|
||
end
|
||
--2.进行抽奖请求
|
||
function LuckyDrawWeekSystem:ReqLuckyDraw()
|
||
GameCenter.Network.Send("MSG_LuckyDraw.ReqLuckyDraw", {})
|
||
end
|
||
--3.请求获取抽奖卷
|
||
function LuckyDrawWeekSystem:ReqGetLuckyDrawVolume(vid)
|
||
GameCenter.Network.Send("MSG_LuckyDraw.ReqGetLuckyDrawVolume", {id = vid})
|
||
end
|
||
--4.更换奖励请求
|
||
function LuckyDrawWeekSystem:ReqChangeAwardIndex(param)
|
||
--参数格式 :{ items = { { awardType = 0, indexes = { 1 } }, { awardType = 1,indexes = { 1 , 2 } } } };
|
||
GameCenter.Network.Send("MSG_LuckyDraw.ReqChangeAwardIndex", param)
|
||
end
|
||
--6.关闭抽奖面板的消息
|
||
function LuckyDrawWeekSystem:ReqCloseLuckyDrawPanel()
|
||
GameCenter.Network.Send("MSG_LuckyDraw.ReqCloseLuckyDrawPanel", {})
|
||
end
|
||
|
||
--上线的消息
|
||
function LuckyDrawWeekSystem:ResLuckyDrawOnlineResult(msg)
|
||
self:PraseCfgAwards()
|
||
--0.记录抽奖次数
|
||
self.AwardTimes = msg.awardtimes;
|
||
self.AwardList:Clear()
|
||
--奖励列表
|
||
local _sItems = msg.items;
|
||
--这里会是4个数据,对应几个等级的奖励
|
||
for i = 1, #_sItems do
|
||
local _sAwardInfo = _sItems[i]
|
||
local _cfgData = self.CfgAwardsList[_sAwardInfo.awardType + 1]
|
||
for j = 1, #_sAwardInfo.indexes do
|
||
local _rewardItem = LuckyDrawAwardItem:New(_cfgData, _sAwardInfo.indexes[j])
|
||
self.AwardList:Add(_rewardItem)
|
||
end
|
||
end
|
||
|
||
--2.填充服务器记录
|
||
local _recs = msg.records;
|
||
self.GlobalRecords:Clear();
|
||
if _recs then
|
||
for i = 1, #_recs do
|
||
local _rec = _recs[i]
|
||
if _rec.awardType <= 2 then
|
||
self.GlobalRecords:Add(
|
||
LuckyDrawRecord:New(_recs[i], 0)
|
||
);
|
||
end
|
||
end
|
||
end
|
||
self.GlobalRecords = self:ReverseList(self.GlobalRecords)
|
||
--3.填充个人记录
|
||
_recs = msg.selfRecords;
|
||
self.MeRecords:Clear();
|
||
if _recs then
|
||
for i = 1, #_recs do
|
||
self.MeRecords:Add(
|
||
LuckyDrawRecord:New(_recs[i], 1)
|
||
);
|
||
end
|
||
end
|
||
self.MeRecords = self:ReverseList(self.MeRecords)
|
||
--4.奖卷领取信息
|
||
local _getVs = msg.getVolumes;
|
||
self.GetVolumesDict:Clear();
|
||
for i = 1, #_getVs do
|
||
local _id = _getVs[i].id
|
||
if not self.GetVolumesDict:ContainsKey(_id) then
|
||
self.GetVolumesDict:Add(_id, LuckyDrawVolume:New(_getVs[i]))
|
||
else
|
||
self.GetVolumesDict[_id] = LuckyDrawVolume:New(_getVs[i])
|
||
end
|
||
end
|
||
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_LUCK_DRAW_WEEK_DATA_REFESH)
|
||
self:SetRedPoint()
|
||
end
|
||
|
||
--1.返回抽奖的所有信息
|
||
function LuckyDrawWeekSystem:ResOpenLuckyDrawPanelResult(msg)
|
||
self.AwardTimes = msg.awardtimes
|
||
--4.奖卷领取信息
|
||
local _getVs = msg.getVolumes;
|
||
self.GetVolumesDict:Clear();
|
||
for i = 1, #_getVs do
|
||
local _id = _getVs[i].id
|
||
if not self.GetVolumesDict:ContainsKey(_id) then
|
||
self.GetVolumesDict:Add(_id, LuckyDrawVolume:New(_getVs[i]))
|
||
else
|
||
self.GetVolumesDict[_id] = LuckyDrawVolume:New(_getVs[i])
|
||
end
|
||
end
|
||
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_LUCK_DRAW_WEEK_DATA_REFESH)
|
||
self:SetRedPoint()
|
||
end
|
||
|
||
--2.抽奖的结果
|
||
function LuckyDrawWeekSystem:ResLuckyDrawResult(msg)
|
||
local _resultCode = msg.retcode
|
||
if _resultCode >= 0 then
|
||
local _rewardData =
|
||
{
|
||
--抽中的奖励等级 0:特等奖,1:一等奖,2:二等奖,3:三等奖
|
||
AwardType = msg.awardType,
|
||
--抽中配置的奖励列表中的索引.
|
||
AwardIndex = msg.awardIndex,
|
||
}
|
||
self.AwardTimes = self.AwardTimes + 1
|
||
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_LUCK_DRAW_WEEK_DATA_REFESH)
|
||
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_LUCK_DRAW_REWARD_REFESH, _rewardData)
|
||
self:SetRedPoint()
|
||
else
|
||
--错误提示
|
||
if _resultCode == -1 then
|
||
Utils.ShowPromptByEnum("LUCK_DRAW_ERROR_TIPS_1")
|
||
elseif _resultCode == -8 then
|
||
Utils.ShowPromptByEnum("LUCK_DRAW_ERROR_TIPS_2")
|
||
else
|
||
Utils.ShowPromptByEnum("MainTaskNoBagCell")
|
||
end
|
||
end
|
||
end
|
||
|
||
--3.获取抽奖卷结果
|
||
function LuckyDrawWeekSystem:ResGetLuckyDrawVolumeResult(msg)
|
||
local _volumeData = msg.getVolume
|
||
if self.GetVolumesDict:ContainsKey(_volumeData.id) then
|
||
self.GetVolumesDict[_volumeData.id]:UpdateSdata(_volumeData)
|
||
end
|
||
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_LUCK_DRAW_WEEK_DATA_REFESH)
|
||
self:SetRedPoint()
|
||
end
|
||
|
||
--4.更换奖励结果
|
||
function LuckyDrawWeekSystem:ResChangeAwardIndexResult(msg)
|
||
if msg.retcode >= 0 then
|
||
local _sItems = msg.items;
|
||
local _awardIndex = 1
|
||
for i = 1, #_sItems do
|
||
local _indexs = _sItems[i].indexes
|
||
local _awardType = _sItems[i].awardType
|
||
local _cfgData = self.CfgAwardsList[_awardType + 1]
|
||
for j = 1, #_indexs do
|
||
self.AwardList[_awardIndex]:RefeshData(_cfgData, _indexs[j])
|
||
_awardIndex = _awardIndex + 1
|
||
end
|
||
end
|
||
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_LUCK_DRAW_CHANGE_SUCCESS)
|
||
end
|
||
end
|
||
|
||
--5.抽奖记录
|
||
function LuckyDrawWeekSystem:ResDrawnRecord(msg)
|
||
if msg.record then
|
||
local _p = GameCenter.GameSceneSystem:GetLocalPlayer()
|
||
if _p ~= nil and _p.Name == msg.record.playername then
|
||
local _record = LuckyDrawRecord:New(msg.record, 1);
|
||
self.MeRecords:Insert(_record, 1)
|
||
if #self.MeRecords > 20 then
|
||
self.MeRecords:RemoveAt()
|
||
end
|
||
end
|
||
--全服只保留2等级及以上的记录
|
||
if msg.record.awardType <= 2 then
|
||
local _record = LuckyDrawRecord:New(msg.record, 0);
|
||
self.GlobalRecords:Insert(_record, 1)
|
||
end
|
||
end
|
||
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_LUCK_DRAW_WEEK_RECORD_REFESH)
|
||
end
|
||
|
||
--逆序
|
||
function LuckyDrawWeekSystem:ReverseList(targetList)
|
||
local _tmpList = List:New()
|
||
for i = 1, #targetList do
|
||
_tmpList[i] = table.remove(targetList)
|
||
end
|
||
return _tmpList
|
||
end
|
||
|
||
--检查最大限制,把数据限制下
|
||
function LuckyDrawWeekSystem:RemoveMoreData(targetList)
|
||
local _count = #targetList
|
||
--最大的保存数
|
||
local _maxNum = 20
|
||
if _count > _maxNum then
|
||
for i = _maxNum, _count do
|
||
targetList:RemoveAt(i)
|
||
end
|
||
end
|
||
end
|
||
|
||
return LuckyDrawWeekSystem
|