Files
Main/Assets/GameAssets/Resources/Lua/Logic/LuckyDrawWeek/LuckyDrawWeekSystem.lua
2025-01-25 04:38:09 +08:00

319 lines
11 KiB
Lua
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

------------------------------------------------
-- 作者: 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