313 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			Lua
		
	
			
		
		
	
	
			313 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			Lua
		
	
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 |