LuckyCatManager = {}; local this = LuckyCatManager local luckyCatConfig = ConfigManager.GetConfig(ConfigName.LuckyCatConfig) local CHANNEL = 0 --系统频道 local isFirstEnter = true local isNewData = 0 local itemType = 0 local canGetTime = -1 local isFirstStart = true --- 请求数据的下标 local lastMsgId = 0 function this.Initialize() --活动Id this.activityId = 0 --招财类型 this.luckyType = {} --招财次数 this.luckyTime = {} --消耗数量 this.consumeValue = {} --奖励上限 this.valueUp = {} --奖励下限 this.valueDown = {} --限制条件(充值金额) this.rmbValue = {} --抽奖次数 this.getRewardNumber = 0 --掉落物品个数 this.dropNumbers = 0 --活动期间累计充值 this.hasRechargeNum = 0 --世界消息集合 this.worldMessageData = {} this.unitsText = 0 this.tensText = 0 this.hundredsText = 0 this.thousandsText = 0 this.tenThousandsText = 0 --是否进入过招财猫 this.isEnterLuckyCat = false --能够拉去跑马灯数据 this.isCanGetWorldMessage=true --招财猫开放 this.isOpenLuckyCat=false lastMsgId = 0 Game.GlobalEvent:AddEvent(GameEvent.Bag.BagGold, this.CheckRedPoint) end -------招财猫活动相关数据----------- function this.InitLuckyCatData() this.luckyType={} this.luckyTime={} this.consumeValue={} this.valueUp={} this.valueDown={} this.rmbValue={} --Log(" ============= "..#luckyCatConfig) for i, v in ConfigPairs(luckyCatConfig) do --Log(" ============= this.activityId "..this.activityId) if (this.activityId == v.ActivityId) then --Log(" ============= this.activityId 进来了吗") this.luckyType[i] = v.LuckyType this.luckyTime[i]=v.LuckyTime this.consumeValue[i]=v.ConsumeValue this.valueUp[i]=v.ShowMax this.valueDown[i]=v.ValueDown this.rmbValue[i]=v.RmbValue --table.insert(this.luckyType,v.LuckyType) --table.insert(this.luckyTime,v.LuckyTime) --table.insert(this.consumeValue,v.ConsumeValue) --table.insert(this.valueUp,v.ShowMax) --table.insert(this.valueDown,v.ValueDown) --table.insert(this.rmbValue,v.RmbValue) itemType = v.LuckyType end end end -- 每两秒刷新一次数据 function this.TimeUpdate() if(this.isCanGetWorldMessage) then -- Log("请求的数据消息ID是 ------------- " .. lastMsgId) NetManager.RequestChatMsg(CHANNEL, lastMsgId, function(data) this.GetWorldMessageIndication(data) end) end end -- 开始刷新招财猫数据 function this.StartLuckyCatDataUpdate() -- 开始定时刷新 if not this._CountDownTimer then this._CountDownTimer = Timer.New(this.TimeUpdate, 2, -1, true) this._CountDownTimer:Start() end end --关闭招财猫数据刷新 function this.StopLuckyCatUpdate() -- 关闭定时刷新 if this._CountDownTimer then this._CountDownTimer:Stop() this._CountDownTimer = nil end end --招财猫的领取进程数据 function this.GetRewardProgress(mission, activityId, rechargeValue) this.activityId = activityId local getNumbers = {} local index = 0 for n, m in ipairs(mission) do getNumbers[n] = m.progress end for i, v in ipairs(getNumbers) do if (v == 1) then index = index + 1 end end this.getRewardNumber = index this.hasRechargeNum = rechargeValue this.InitLuckyCatData() end --招财猫抽奖请求 function this.GetLuckyCatRequest() NetManager.GetActivityRewardRequest(-1, this.activityId, function(_drop) this.GetDropNumbers(_drop) this.drop = _drop this.getRewardNumber = this.getRewardNumber + 1 CheckRedPointStatus(RedPointType.LuckyCat_GetReward) Game.GlobalEvent:DispatchEvent(GameEvent.Activity.OnLuckyCatRefresh, true) end) end --从drop解析掉落物品个数 function this.GetDropNumbers(drop) if drop.itemlist ~= nil then this.dropNumbers = drop.itemlist[1].itemNum end this.SplitDropNumbers(this.dropNumbers) end --将掉落物品的个数解析为各个位分开 function this.SplitDropNumbers(num) this.unitsText = math.floor(num % 10) this.tensText = math.floor(num % 100 / 10) this.hundredsText = math.floor(num % 1000 / 100) this.thousandsText = math.floor(num % 10000 / 1000) this.tenThousandsText = math.floor(num / 10000) end --通过充值金钱数返回能抽取次数 function this.GetCanRewardTimes(rechargeNum) local canRechargeTime = 0 for i, v in ConfigPairs(luckyCatConfig) do if (this.activityId == v.ActivityId) then if (rechargeNum >= v.RmbValue) then canRechargeTime = v.LuckyTime end end end return canRechargeTime end --监听世界消息推送 function this.GetWorldMessageIndication(data) -- 先对数据排个序 table.sort(data.chatInfo, function(a, b) return a.times < b.times end) -- 判断messageId是否符合要求,新数据得第一条messageId必须比旧数据最后一条大 local listData = {} local msgIdList = {} for i = 1, #data.chatInfo do if (data.chatInfo[i].messageType == 3) then if (data.chatInfo[i].msg ~= "") then table.insert(listData, data.chatInfo[i].msg) msgIdList[#msgIdList+1] = data.chatInfo[i].messageId end end end -- local canInsert = true 原始代码,不知道干啥使的 -- for j, v in pairs(this.worldMessageData) do -- if (listData[#listData] == v) then -- canInsert = false -- end -- end -- 数据没有变化,则不刷新 local len = #listData if len == 0 then -- Log("没有新数据,不需要更新!") return end -- 按照ID再排序 if len > 1 then table.sort(msgIdList,function(a, b) return a < b end) end -- 获取最新的ID local lastId = 0 lastId = msgIdList[#msgIdList] lastMsgId = lastId local oldData = this.worldMessageData this.worldMessageData = {} local startIndex = #listData >= 3 and #listData - 2 or 1 for i = startIndex, #listData do table.insert(oldData, listData[i]) end local newIndex = #oldData >= 3 and #oldData - 2 or 1 for i = newIndex, #oldData do table.insert( this.worldMessageData, oldData[i]) end Game.GlobalEvent:DispatchEvent(GameEvent.Activity.OnLuckyCatWorldMessage) end --充值进行金额记录 function this.SetAccumRechargeValue(value) --this.hasRechargeNum = this.hasRechargeNum + value local activityInfo = ActivityGiftManager.GetActivityTypeInfo(ActivityTypeDef.LuckyCat) if activityInfo and activityInfo.value then this.hasRechargeNum =activityInfo.value end CheckRedPointStatus(RedPointType.LuckyCat_GetReward) end --检测抽取红点 function this.CheckIsShowRedPoint() if ActivityGiftManager.IsActivityTypeOpen(ActivityTypeDef.LuckyCat)==nil then return false end if this.getRewardNumber >= LengthOfTable(this.consumeValue) then--抽完 return false end local canRewardTime = this.GetCanRewardTimes(this.hasRechargeNum) local getRewardNumber = this.getRewardNumber + 1 local curLuckCatConfigData = ConfigManager.TryGetConfigDataByDoubleKey(ConfigName.LuckyCatConfig,"ActivityId",this.activityId,"LuckyTime",getRewardNumber) if curLuckCatConfigData == nil then curLuckCatConfigData = ConfigManager.TryGetConfigDataByDoubleKey(ConfigName.LuckyCatConfig,"ActivityId",this.activityId,"LuckyTime",this.getRewardNumber) end local costItemNum = this.consumeValue[curLuckCatConfigData.Id] --local costItemNum = ConfigManager.GetConfigDataByDoubleKey(ConfigName.LuckyCatConfig,"ActivityId",this.activityId,"LuckyTime",getRewardNumber).ConsumeValue --this.consumeValue[getRewardNumber] local haveItemNum = BagManager.GetItemCountById(itemType) if (costItemNum) then if (haveItemNum >= costItemNum and this.getRewardNumber < canRewardTime) then return true end else return false end local currentTime = 0 --检测有新红点次数未查看显示红点 for i, v in ConfigPairs(luckyCatConfig) do if (this.activityId == v.ActivityId) then if (this.hasRechargeNum >= this.rmbValue[i]) then currentTime = this.luckyTime[i] end end end if (isFirstStart) then local canRewardTime = this.GetCanRewardTimes(this.hasRechargeNum) local isRemaindTime = canRewardTime - this.getRewardNumber isFirstStart=false if(isRemaindTime>=1) then return true else return false end else if (currentTime > canGetTime and this.isEnterLuckyCat == false) then return true else canGetTime = currentTime this.isEnterLuckyCat = false return false end end end --检测妖晶数量变化进行红点检测 function this.CheckRedPoint() local canRewardTime = this.GetCanRewardTimes(VipManager.GetVipLevel()) local getRewardNumber = this.getRewardNumber + 1 local haveItemNum = BagManager.GetItemCountById(itemType) local costItemNum = this.consumeValue[getRewardNumber] if (costItemNum) then if (haveItemNum >= costItemNum and this.getRewardNumber < canRewardTime) then CheckRedPointStatus(RedPointType.LuckyCat_GetReward) end end end return this