479 lines
15 KiB
Lua
479 lines
15 KiB
Lua
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 |