miduo_client/Assets/ManagedResources/~Lua/Modules/LuckyTurnTable/LuckyTurnTableManager.lua

479 lines
15 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

LuckyTurnTableManager = {};
local this = LuckyTurnTableManager
this.luckyData={}---服务器幸运探宝跑马灯 物品数据 indication、刷新同一数据
this.advancedData={}---服务器高级探宝跑马灯 物品数据
this.luckyTempData={}---幸运探宝 临时数据(包含Drop)
this.advancedTempData={}---高级探宝 临时数据
this.dialRewardConfig={}---表数据
local activityRewardConfig= {}
this.dialRewardSettingConfig={}
this.gameSettingConfig = ConfigManager.GetConfigData(ConfigName.GameSetting,1)
---下次免费刷新时间倒计时
this.luckyFreeTime=0
this.advancedFreeTime=0
---幸运积分宝箱数据
this.boxReward_One={}
this.boxReward_Two={}
this.curTreasureType=nil---当前探宝类型
--- 上次请求数据的最后一位标识位
--- 幸运探宝
this.lastMsgId = 0
--- 高级探宝
this.upperLastMsgId = 0
--- 显示数据本地存放
this.luckMsgStrList = {}
this.upperLuckMsgList = {}
this.allTurnData={}
---探宝类型
local TreasureType={
Lucky=30,
Advanced=31,
}
this.luckyTimes = 0
this.advanceTimes = 0
function this.SetTimes(_luckyTimes,_advanceTimes)
if _luckyTimes then
this.luckyTimes = _luckyTimes
end
if _advanceTimes then
this.advanceTimes = _advanceTimes
end
end
function this.Initialize()
--世界跑马灯数据存储
this.worldMessageData={}
this.luckMsgStrList = {}
this.upperLuckMsgList = {}
this.lastMsgId = 0
this.upperLastMsgId = 0
--幸运值积分
this.integralGetNumber=0
this.luckyCountDownTimer = Timer.New(nil, 1, -1, true)
this.advancedCountDownTimer=Timer.New(nil,1,-1,true)
---能够获取跑马灯数据
this.isCanGetWorldMessage=true
activityRewardConfig= ConfigManager.GetConfig(ConfigName.ActivityRewardConfig)
for i, v in ConfigPairs(activityRewardConfig) do
if(v.ActivityId==ActivityTypeDef.LuckyTurnTable_One) then
table.insert(this.boxReward_One,v)
elseif(v.ActivityId==ActivityTypeDef.LuckyTurnTable_Two) then
table.insert(this.boxReward_Two,v)
end
end
LuckyTurnTableManager.InitTableData()
end
----------------------------------------------------
---初始化幸运转盘数据读取表数据
function this.InitTableData()
this.dialRewardSettingConfig=ConfigManager.GetConfig(ConfigName.DialRewardSetting)
this.dialRewardConfig=ConfigManager.GetConfig(ConfigName.DialRewardConfig)
this.gameSettingConfig=ConfigManager.GetConfigData(ConfigName.GameSetting,1)
end
---接收服务器数据(每日5点刷新刷新)
function this.ReceiveServerDataForFive(data1,data2)
--Log("接收5点数据=================")
this.luckyData=data1
this.advancedData=data2
--for i, v in ipairs(this.luckyData) do
-- Log("服务器推送幸运探宝5点数据"..tostring(v))
--end
--for i, v in ipairs(this.advancedData) do
-- Log("服务器推送高级探宝5点数据"..tostring(v))
--end
Game.GlobalEvent:DispatchEvent(GameEvent.Activity.OnLuckyTableZeroRefresh)
end
function this.SetServerDataForFive(data)
this.allTurnData={}
if data then
for i = 1, #data do
this.allTurnData[data[i].activityId]=data[i].rewardInfo
end
end
end
---请求活动数据
function this.GetLuckyTurnRequest(func)
NetManager.GetLuckyTurnRequest(function(msg)
this.luckyData= msg.posInfos
this.advancedData=msg.posInfosAdvance
--this.luckyFreeTime=20 --假设返回时间戳
--this.advancedFreeTime=10800
if func then
func(msg)
end
end)
end
---接收服务器数据(监听服务器推送)
function this.ReceiveServerData(data1,data2)
this.luckyData=data1
--for i, v in ipairs(this.luckyData) do
-- Log("服务器推送幸运探宝物品数据"..tostring(v))
--end
this.advancedData=data2
--for i, v in ipairs(this.advancedData) do
-- Log("服务器推送高级探宝物品数据"..tostring(v))
--end
--this.luckyFreeTime=10800
--this.advancedFreeTime=10800
end
---探宝 1探宝类型ID 2是否多次false单次 true多次 3回调
function this.GetLuckyTurnRankRequest(activityId,repeated,priId,func)
this.luckyTempData={}
this.advancedTempData={}
NetManager.GetLuckyTurnRankRequest(activityId,repeated, priId,function(msg)
--if activityId==TreasureType.Lucky then
this.luckyTempData=msg --存储临时数据 主要包括Drop
--this.luckyData=msg.dialInfo.rewardInfo
--在登陆时 服务器会把所有物品数据推给我posInfos 包括已抽取次数 我可以把数据先保存下来 在每次请求数据时 通过回调的数据来动态改变现有数据的属性
for i = 1, #this.luckyData do
--Log("原数据 位置"..this.luckyData[i].pos.." luckId"..this.luckyData[i].luckId.." 已抽次数"..this.luckyData[i].luckTimes)
for j = 1, #msg.dialInfo.rewardInfo do
if this.luckyData[i].luckId==msg.dialInfo.rewardInfo[j].luckId then
this.luckyData[i].luckTimes=msg.dialInfo.rewardInfo[j].luckTimes
end
end
end
ActivityGiftManager.SetActivityInfoProgress(activityId,activityId,msg.accumulativeNum)
--for i = 1, #this.luckyData do
-- Log("现数据 位置"..this.luckyData[i].pos.." luckId"..this.luckyData[i].luckId.." 已抽次数"..this.luckyData[i].luckTimes)
--end
-- elseif activityId==TreasureType.Advanced then
-- this.advancedTempData=msg
-- for i = 1, #this.advancedData do
-- --Log("原数据 位置"..this.advancedData[i].pos.." luckId"..this.advancedData[i].luckId.." 已抽次数"..this.advancedData[i].luckTimes)
-- for j = 1, #msg.posInfos do
-- if this.advancedData[i].luckId==msg.posInfos[j].luckId then
-- this.advancedData[i].luckTimes=msg.posInfos[j].luckTimes
-- end
-- end
-- end
-- end
if func then
func()
end
end)
end
---刷新跑马灯物品
function this.GetLuckyTurnRefreshRequest(activityId,isFree,func)
NetManager.GetLuckyTurnRefreshRequest(activityId,isFree,function(msg)
if activityId==TreasureType.Lucky then
--Log("==YSP== 幸运刷新返回的是什么"..tostring(msg))
this.luckyData=msg.posInfos
elseif activityId==TreasureType.Advanced then
--Log("==YSP== 高级刷新返回的是什么"..tostring(msg))
this.advancedData=msg.posInfos
end
if func then
func(msg)
end
end)
end
-------------------------------------------------------------
---开始刷新转盘记录数据
function this.StartLuckyTurnRecordDataUpdate()
-- 开始定时刷新
if not this._CountDownTimer then
this.lastMsgId = 0
this.upperLastMsgId = 0
this._CountDownTimer = Timer.New(this.TimeUpdate, 2, -1, true)
this._CountDownTimer:Start()
end
end
---每两秒刷新一次数据
function this.TimeUpdate()
if (this.isCanGetWorldMessage) then
local msgId = this.curTreasureType==TreasureType.Lucky and this.lastMsgId or this.upperLastMsgId
-- Log("上次的消息号ID " .. tostring(msgId))
NetManager.RequestChatMsg(0, msgId, function(data)
this.GetWorldMessageIndication(data)
end)
end
end
---监听世界消息推送
function this.GetWorldMessageIndication(data)
-- 先对数据排个序
-- table.sort(data.chatInfo, function(a, b)
-- return a.times < b.times
-- end)
-- 判断messageId是否符合要求新数据得第一条messageId必须比旧数据最后一条大
local listData = {}
local luckMsgIdList = {}
if this.curTreasureType==TreasureType.Lucky then
for i = 1, #data.chatInfo do
if (data.chatInfo[i].messageType == 5) then
if (data.chatInfo[i].msg ~= "") then
table.insert(listData, data.chatInfo[i].msg)
luckMsgIdList[#luckMsgIdList + 1] = data.chatInfo[i].messageId
end
end
end
elseif this.curTreasureType==TreasureType.Advanced then
for i = 1, #data.chatInfo do
if (data.chatInfo[i].messageType == 6) then
if (data.chatInfo[i].msg ~= "") then
table.insert(listData, data.chatInfo[i].msg)
luckMsgIdList[#luckMsgIdList + 1] = data.chatInfo[i].messageId
-- Log("消息号ID --- " .. data.chatInfo[i].messageId)
end
end
end
end
-- 数据没有变化,则不刷新
local len = #listData
if len == 0 then
-- Log("没有数据更新!")
return
end
--- ID大小排序
if len > 1 then
table.sort(luckMsgIdList, function(a, b)
return a < b
end)
end
local showData = {}
local msgIdList = {}
local startIndex = #listData >= 6 and #listData - 5 or 1
-- Log("消息列表长度" .. #listData)
for i = startIndex, #listData do
showData[#showData + 1] = listData[i]
msgIdList[#msgIdList + 1] = luckMsgIdList[i]
end
this.SetLocalShowData(showData, this.curTreasureType)
local lastIndex = #msgIdList
local msgId = 0
msgId = msgIdList[lastIndex]
if lastIndex > 0 then -- 有数据更新更新ID和本地缓存的数据
--- 根据界面类型更新ID
if this.curTreasureType==TreasureType.Lucky then
this.lastMsgId = msgId
elseif this.curTreasureType==TreasureType.Advanced then
this.upperLastMsgId = msgId
end
end
Game.GlobalEvent:DispatchEvent(GameEvent.Activity.OnLuckyTableWorldMessage, this.curTreasureType)
end
function this.SetLocalShowData(showData, type)
for i = 1, #showData do
if type == TreasureType.Lucky then
this.luckMsgStrList[#this.luckMsgStrList + 1] = showData[i]
elseif type == TreasureType.Advanced then
this.upperLuckMsgList[#this.upperLuckMsgList + 1] = showData[i]
end
end
--- 只保留最新的6条数据
local oldData = type == TreasureType.Lucky and this.luckMsgStrList or this.upperLuckMsgList
if type == TreasureType.Lucky then
this.luckMsgStrList = {}
this.luckMsgStrList = this.ReplaceData(oldData)
elseif type == TreasureType.Advanced then
this.upperLuckMsgList = {}
this.upperLuckMsgList = this.ReplaceData(oldData)
end
end
function this.ReplaceData(oldData)
local list = {}
local index = #oldData >= 6 and #oldData - 5 or 1
for i = index, #oldData do
list[#list + 1] = oldData[i]
end
return list
end
function this.GetShowDataByType(type)
local oldData = type == TreasureType.Lucky and this.luckMsgStrList or this.upperLuckMsgList
return oldData
end
---面板退出时清空数据
function this.ClearSaveData()
this.luckMsgStrList = {}
this.upperLuckMsgList = {}
this.lastMsgId = 0
this.upperLastMsgId = 0
end
---获取探宝券数量 1探宝类型
function this.GetTreasureTicketNum(treasureType)
-- if treasureType==TreasureType.Lucky then
-- return BagManager.GetItemCountById(16)--返回幸运探宝所需物品
-- elseif treasureType==TreasureType.Advanced then
-- return BagManager.GetItemCountById(16)--返回高级探宝所需物品
-- end
return BagManager.GetItemCountById(16)
end
---获取刷新按钮消耗材料数
function this.GetRefreshItemNum()
return BagManager.GetItemCountById(16)
end
---获取探宝1/多次按钮信息 1探宝类型
function this.GetTreasureBtnInfo(spLoader, treasureType)
local isShow = false
local config=ConfigManager.GetConfigDataByKey(ConfigName.DialRewardSetting,"ActivityType",treasureType)
local index=config.Id
if BagManager.GetItemCountById(16) >= this.dialRewardSettingConfig[index].MultipleCostItem[2][4] then
isShow = true
end
local oneData={this.dialRewardSettingConfig[index].PerTime,this.dialRewardSettingConfig[index].CostItem[2][4],isShow}
local moreData={this.dialRewardSettingConfig[index].ExtractingTime,this.dialRewardSettingConfig[index].MultipleCostItem[2][4],isShow}
local icon = SetIcon(spLoader, 16)
return oneData,moreData,icon
end
---设置幸运值相关
function this.SetLuckyValue()
for i, v in pairs(ActivityGiftManager.mission) do
--Log(tostring(v))--v.activityId活动Id 活动记录值v.value
if (v.activityId == ActivityTypeDef.LuckyTurnTable_One) then
this.value_1=v.value
elseif (v.activityId == ActivityTypeDef.LuckyTurnTable_Two) then
this.value_2=v.value
end
end
end
---获取幸运值相关
function this.GetLuckyValue()
if this.curTreasureType==TreasureType.Lucky then
return this.value_1
elseif this.curTreasureType==TreasureType.Advanced then
return this.value_2
end
end
---获取奖励盒状态
function this.GetRewardState(activityId,missionId)
for i, v in pairs(ActivityGiftManager.mission) do
if v.activityId==activityId then
for n, m in ipairs(v.mission) do
if m.missionId==missionId then
return m.state
end
end
end
end
end
-- 获取免费探宝刷新时间
function this.GetItemRecoverTime(itemId)
for _, data in ipairs(this.gameSettingConfig.ItemAdd) do
if data[1] == itemId then
return data[3]
end
end
end
-------红点相关--------------
function this.ReturnRedPointState()
if ActivityGiftManager.IsActivityTypeOpen(ActivityTypeDef.LuckyTurnTable_One) then
if BagManager.GetItemCountById(60) >= this.dialRewardSettingConfig[1].MultipleCostItem[2][4] then
return true
end
if this.ReturnRewardBoxRedPoint() then
return true
end
return false
else
--Log("红点返回False")
return false
end
end
---限时活动关联幸运探宝红点显示
function this.ReturnRewardBoxRedPoint()
for i, v in pairs(ActivityGiftManager.mission) do
if (v.activityId == ActivityTypeDef.LuckyTurnTable_One) then
this.value_1=v.value
elseif (v.activityId == ActivityTypeDef.LuckyTurnTable_Two) then
this.value_2=v.value
end
end
if this.CheckLuckyRedPoint() or this.CheckAdvancedRedPoint() then
--Log("红点返回True")
return true
else
--Log("红点返回False")
return false
end
end
---本地检查红点
function this.CheckLuckyRedPoint()
local tab={}
for i = 1, 5 do--遍历所有达到领取奖励要求 且未领取奖励的宝箱状态 存入tab
if this.value_1>=this.boxReward_One[i].Values[1][1] then
if this.GetRewardState(30,this.boxReward_One[i].Id)==0 then
table.insert(tab,0)
end
end
end
if #tab>0 then --如果有未领取的奖励 显示红点
return true
else
return false
end
end
function this.CheckAdvancedRedPoint()
local tab={}
for i = 1, 5 do
if this.value_2>=this.boxReward_Two[i].Values[1][1] then
if this.GetRewardState(31,this.boxReward_Two[i].Id)==0 then
table.insert(tab,0)
end
end
end
if #tab>0 then
return true
else
return false
end
end
return this