local skynet = require "skynet" local oo = require "Class" local log = require "Log" local pb = require "pb" local dataType = require "DataType" local errorInfo = require "ErrorInfo" local activity = require "Activity" local json =require "json" local dataType = require "DataType" local ActivityDailyRiddle = oo.class() ActivityDailyRiddle.ActivityType = dataType.ActivityType_DailyRiddle --构造函数 function ActivityDailyRiddle:Init() end --获取默认题目 function ActivityDailyRiddle:GetDefaultRiddle(player,riddleId) local today= self:GetTodayOpenNum(player) --默认题目 local data ={riddleId=riddleId,state= riddleId == today and 1 or 0,answerTime=0,buyTip = false,buyAnswer=false} if riddleId < today then data.state = 2 end return data end -- 每次登录需要进行修改的数据 function ActivityDailyRiddle:LoginInitData(player) --功能未开启 if not player:IsUnlockSystem( dataType.UnlockSystem_ActivityDailyRiddle ) then log.debug("每日灯谜未开启-等级不足") return end --结算 self:ActivitySettle(player) --活动是否开启 if not self:CheckDataAndGetActivity(player) then log.debug("每日灯谜未开启") return end -- 处理红点 skynet.server.msgTips:Reset(player, 119) skynet.server.msgTips:Reset(player, 120) log.debug("每日灯谜活动进行中") end --初始玩家数据,返回活动信息, function ActivityDailyRiddle:CheckDataAndGetActivity(player) --默认空活动 local cfgRiddle = nil if player==nil then log.debug("每日灯谜未开启") return cfgRiddle end --判断等级是否开启 if not player:IsUnlockSystem( dataType.UnlockSystem_ActivityDailyRiddle) then log.debug("每日灯谜等级不足") return cfgRiddle end --获取开启的活动 local activityId,_, _, _ = activity:GetActivityInfo(player, ActivityDailyRiddle.ActivityType) --没有开启的活动 if activityId == 0 then return cfgRiddle end --初始化 if player.gameData.DailyRiddleMap==nil then player.gameData.DailyRiddleMap={} end --获取活动配置 local cfgRiddle=self:GetRiddleConfig(player,activityId) --未获取到有效的活动 if cfgRiddle == nil then log.debug("每日灯谜未开启-未获取到有效的活动2") return cfgRiddle end --如果玩家已经存在活动不需要检查 if player.gameData.DailyRiddleMap[activityId] then --是否跨天 if os.date("%Y-%m-%d",player.gameData.DailyRiddleMap[activityId].LoginDate) ~= os.date("%Y-%m-%d",skynet.GetTime()) then player.gameData.DailyRiddleMap[activityId].adSkipCount=0 player.gameData.DailyRiddleMap[activityId].adAnswerCount=0 player.gameData.DailyRiddleMap[activityId].LoginDate=skynet.GetTime() local day=self:GetTodayOpenNum(player) for _, riddleInfo in ipairs(player.gameData.DailyRiddleMap[activityId].riddleInfoList) do --过期的题目,没有购买,状态不是已完成的 if riddleInfo.riddleId= rewardInfo[1] then --是否领取 local ifDraw=false for _, value in ipairs(playerDailyRiddle.rewardInfoList) do if rewardInfo[1] == value then ifDraw=true break end end --没有领取 if not ifDraw then return true end end end return false end --获取当日是开启的多少天 function ActivityDailyRiddle:GetTodayOpenNum( player) --获取开启的活动 local activityId, startTime, _, _ = activity:GetActivityInfo(player, ActivityDailyRiddle.ActivityType) if activityId == 0 then return 0 end local startTimeDate = os.date("*t", startTime) --由于活动开启时间是10点,这里统计时间设置成0点 local startTimeTemp=os.time({ year = startTimeDate.year, month = startTimeDate.month, day=startTimeDate.day, hour=0, min=0, sec=0 }) --计算当前是哪天 local day =math.ceil((skynet.GetTime()-startTimeTemp)/dataType.OneDaySec) --log.debug(string.format("获取每日灯谜开启天数 day:%d",day)) return day end --当日是否有灯谜可答 function ActivityDailyRiddle:isCanAnswer( player) --活动是否开启 local cfgDailyRiddle =self:CheckDataAndGetActivity(player) if cfgDailyRiddle ==nil then return false end --玩家每日灯谜信息 local playerDailyRiddle=player.gameData.DailyRiddleMap[cfgDailyRiddle.id] local openDay=self:GetTodayOpenNum(player) for _, day in ipairs(cfgDailyRiddle.riddleId) do --是否完成 local ifComplete=true --是否存在 local ifExist=false --如果是当日 可能为空数据 if day==openDay then for _, playerData in pairs(playerDailyRiddle.riddleInfoList) do if day == playerData.riddleId then ifExist = true break end end --当日未作答 if not ifExist then return true end end for _, playerData in pairs(playerDailyRiddle.riddleInfoList) do if day == playerData.riddleId and (playerData.answerTime==0 or (playerData.answerTime+cfgDailyRiddle.answerCd ) <= skynet.GetTime())--未在cd中 and playerData.state == 1 then--可答题 ifComplete=false break end end if not ifComplete then log.info("存在可答题的灯谜",ifComplete,ifExist) return true end end return false end --活动结束补发奖励 function ActivityDailyRiddle:ActivitySettle(player) if player.gameData.DailyRiddleMap == nil or not next(player.gameData.DailyRiddleMap) then return end local cfgActivitys = skynet.server.gameConfig:GetPlayerAllCfg(player, "Activity") if cfgActivitys == nil then return end --获取开启的活动 local openActivityId,_, _, _ = activity:GetActivityInfo(player, ActivityDailyRiddle.ActivityType) --循环玩家活动数据 for activityId, dailyRiddle in pairs(player.gameData.DailyRiddleMap) do --当前活动正在开启 if activityId == openActivityId or activityId == 0 then goto continue end --获取配置 local cfgRiddle=self:GetRiddleConfig(player,activityId) --配置不存在 if cfgRiddle== nil then goto continue end if #cfgRiddle.limitReward == #dailyRiddle.rewardInfoList then goto continue end --奖励列表 local award = {} for _, value in ipairs(cfgRiddle.limitReward) do local rewardInfo = skynet.server.common:Split(value,"_" ) local rewardInfo1,rewardInfo2 = tonumber(rewardInfo[1]),tonumber(rewardInfo[2]) if dailyRiddle.totalAnswerNum >= rewardInfo1 then --是否领取 local ifDraw=false for _, value in ipairs(dailyRiddle.rewardInfoList) do if value==rewardInfo1 then ifDraw=true break end end if not ifDraw then local reward = skynet.server.playerLand:GetRewardInfo(player , rewardInfo2)--对应的奖励信息 for _ ,v1 in pairs( reward ) do table.insert(award , v1 ) end table.insert(dailyRiddle.rewardInfoList,rewardInfo1) end end end --存在未领取的奖励 if next(award) then skynet.server.mail:AddNewMail( player , skynet.server.mail.MailType_Award,"灯谜奖励补发", "本次灯谜活动已结束,小蜗们忘记领取的奖励已经通过邮件发放咯,请小蜗们及时领取!", award, true) log.info(string.format("玩家 %d 每日灯谜奖励补发", player.userId )) end ::continue:: end end --获取每日灯谜信息 function ActivityDailyRiddle:Show( player , c2sData , s2cData ) c2sData.data = assert(pb.decode("C2SActivityDailyRiddleShow", c2sData.data )) s2cData.cmd = pb.enum("MsgType","CMD_S2C_ActivityDailyRiddleShow") local data = {} --检查并且获取活动信息 local cfgRiddle=self:CheckDataAndGetActivity(player) if cfgRiddle == nil then s2cData.code = errorInfo.ErrorCode.ActivityClosed return end local playerDailyRiddle=player.gameData.DailyRiddleMap[cfgRiddle.id] data.curDay=self:GetTodayOpenNum(player) data.totalAnswerNum=playerDailyRiddle.totalAnswerNum data.adAnswerCount=playerDailyRiddle.adAnswerCount data.adSkipCount=playerDailyRiddle.adSkipCount data.riddleInfoList={} --组装每日灯谜信息 for _, day in ipairs(cfgRiddle.riddleId) do --默认未解锁 local dataInfo=self:GetDefaultRiddle(player,day) --是否解锁 if day > data.curDay then table.insert(data.riddleInfoList,dataInfo) goto continue end for playerDay, value in pairs(playerDailyRiddle.riddleInfoList) do if day == playerDay then dataInfo.state=value.state dataInfo.buyTip=value.buyTip dataInfo.buyAnswer=value.buyAnswer dataInfo.answerTime=value.answerTime table.insert(data.riddleInfoList,dataInfo) goto continue end end --不是今天的 if dataInfo.state == 0 then dataInfo.state=2 end table.insert(data.riddleInfoList,dataInfo) ::continue:: end data.rewardInfoList={} --组装累计奖励信息 for _, value in ipairs(cfgRiddle.limitReward) do local rewardInfo = skynet.server.common:Split(value,"_" ) rewardInfo[1],rewardInfo[2] = tonumber(rewardInfo[1]),tonumber(rewardInfo[2]) --默认未解锁 local dataInfo={id = rewardInfo[1],status = 0,needCount=rewardInfo[1],rewardId=rewardInfo[2]} --是否解锁 if playerDailyRiddle.totalAnswerNum < rewardInfo[1] then table.insert(data.rewardInfoList,dataInfo) goto continue end for _, num in ipairs(playerDailyRiddle.rewardInfoList) do if rewardInfo[1] == num then dataInfo.status = 2 table.insert(data.rewardInfoList,dataInfo) goto continue end end dataInfo.status = 1 table.insert(data.rewardInfoList,dataInfo) ::continue:: end --返回信息 s2cData.data = assert(pb.encode("S2CActivityDailyRiddleShow", data)) end --购买提示 function ActivityDailyRiddle:BuyTip( player , c2sData , s2cData ) c2sData.data = assert(pb.decode("C2SActivityDailyRiddleBuyTip", c2sData.data )) s2cData.cmd = pb.enum("MsgType","CMD_S2C_ActivityDailyRiddleBuyTip") local riddleId =c2sData.data.riddleId local data = {riddleId=riddleId} --检查并且获取活动信息 local cfgRiddle=self:CheckDataAndGetActivity(player) if cfgRiddle == nil then s2cData.code = errorInfo.ErrorCode.ActivityClosed return end local playerDailyRiddle=player.gameData.DailyRiddleMap[cfgRiddle.id] if playerDailyRiddle.riddleInfoList[riddleId] == nil then playerDailyRiddle.riddleInfoList[riddleId]=self:GetDefaultRiddle(player,riddleId) end --是否已经购买 if playerDailyRiddle.riddleInfoList[riddleId].buyTip then s2cData.code = errorInfo.ErrorCode.AlreadyBuyTip return end --扣除奖励 local helpCoin=skynet.server.common:Split(cfgRiddle.helpCoin,"_" ) local type,num =tonumber(helpCoin[1]),tonumber(helpCoin[2]) local eventId = pb.enum("EnumMoneyChangeEventID","EventID_139" ) if not player:MoneyChange( type,-num , eventId ) then log.info(string.format("每日灯谜 购买提示 扣除物品失败 data:%s",cfgRiddle.helpCoin)) s2cData.code = errorInfo.ErrorCode.NotEnoughGoods return end --修改数据 playerDailyRiddle.riddleInfoList[riddleId].buyTip = true --返回信息 s2cData.data = assert(pb.encode("S2CActivityDailyRiddleBuyTip", data)) end --开始答题 function ActivityDailyRiddle:Start( player , c2sData , s2cData ) c2sData.data = assert(pb.decode("C2SActivityDailyRiddleStart", c2sData.data )) s2cData.cmd = pb.enum("MsgType","CMD_S2C_ActivityDailyRiddleStart") local riddleId =c2sData.data.riddleId local answer =c2sData.data.answer local answerType =c2sData.data.answerType local data = {riddleId=riddleId} --检查并且获取活动信息 local cfgRiddle=self:CheckDataAndGetActivity(player) if cfgRiddle == nil then s2cData.code = errorInfo.ErrorCode.ActivityClosed return end --获取今日题目 local day = self:GetTodayOpenNum(player) if riddleId > day then s2cData.code = errorInfo.ErrorCode.OpFailed return end local playerDailyRiddle=player.gameData.DailyRiddleMap[cfgRiddle.id] if playerDailyRiddle.riddleInfoList[riddleId] == nil then playerDailyRiddle.riddleInfoList[riddleId]=self:GetDefaultRiddle(player,riddleId) end --是否已经购买 if playerDailyRiddle.riddleInfoList[riddleId].state ~=1 then-- 0:未解锁 1:可答题 2:补答题 3:已答对 s2cData.code = errorInfo.ErrorCode.OpFailed return end --判断CD if playerDailyRiddle.riddleInfoList[riddleId].answerTime>skynet.GetTime() then log.info(string.format("每日灯谜 开始答题 CD中 %d",playerDailyRiddle.riddleInfoList[riddleId].answerTime)) s2cData.code = errorInfo.ErrorCode.OpFailed return end --答案错误 local cfgRiddleLevel=skynet.server.gameConfig:GetPlayerCurCfg(player, "RiddleLevel",riddleId) if cfgRiddleLevel==nil then log.info(string.format("每日灯谜 开始答题 未找到配置 %d",day)) s2cData.code = errorInfo.ErrorCode.OpFailed return end --log.info(string.format("每日灯谜 开始答题 答题%s,答案:%s",answer,cfgRiddleLevel.answer)) --判断答案 --回答错误 if answer ~= cfgRiddleLevel.answer then playerDailyRiddle.riddleInfoList[riddleId].answerTime=skynet.GetTime() else --发奖 local eventId = pb.enum("EnumMoneyChangeEventID","EventID_137") player:GiveReward(cfgRiddleLevel.rewardId ,eventId,1) playerDailyRiddle.riddleInfoList[riddleId].answerTime=0 playerDailyRiddle.riddleInfoList[riddleId].state = 3-- 0:未解锁 1:可答题 2:补答题 3:已答对 playerDailyRiddle.totalAnswerNum =playerDailyRiddle.totalAnswerNum + 1 end if not self:isCanAnswer(player) then skynet.server.msgTips:ReduceAll(player, 119) end if self:isCanDraw(player) then skynet.server.msgTips:Add(player, 120) end data.curDay=day data.totalAnswerNum=playerDailyRiddle.totalAnswerNum data.riddleId=riddleId data.isRight=answer == cfgRiddleLevel.answer data.rewardId=cfgRiddleLevel.rewardId data.riddleInfoList={} --组装每日灯谜信息 for _, day in ipairs(cfgRiddle.riddleId) do --默认未解锁 local dataInfo=self:GetDefaultRiddle(player,day) --是否解锁 if day > data.curDay then table.insert(data.riddleInfoList,dataInfo) goto continue end for playerDay, value in pairs(playerDailyRiddle.riddleInfoList) do if day == playerDay then dataInfo.state=value.state dataInfo.buyTip=value.buyTip dataInfo.answerTime=value.answerTime table.insert(data.riddleInfoList,dataInfo) goto continue end end --不是今天的 if dataInfo.state == 0 then dataInfo.state=2 end table.insert(data.riddleInfoList,dataInfo) ::continue:: end data.rewardInfoList={} --组装累计奖励信息 for _, value in ipairs(cfgRiddle.limitReward) do local rewardInfo = skynet.server.common:Split(value,"_" ) rewardInfo[1],rewardInfo[2] = tonumber(rewardInfo[1]),tonumber(rewardInfo[2]) --默认未解锁 local dataInfo={id = rewardInfo[1],status = 0,needCount=rewardInfo[1],rewardId=rewardInfo[2]} --是否解锁 if playerDailyRiddle.totalAnswerNum < rewardInfo[1] then table.insert(data.rewardInfoList,dataInfo) goto continue end for _, num in ipairs(playerDailyRiddle.rewardInfoList) do if rewardInfo[1] == num then dataInfo.status = 2 table.insert(data.rewardInfoList,dataInfo) goto continue end end dataInfo.status = 1 table.insert(data.rewardInfoList,dataInfo) ::continue:: end --返回信息 s2cData.data = assert(pb.encode("S2CActivityDailyRiddleStart", data)) end --领取累计奖励 function ActivityDailyRiddle:GetReward( player , c2sData , s2cData ) c2sData.data = assert(pb.decode("C2SActivityDailyRiddleGetReward", c2sData.data )) s2cData.cmd = pb.enum("MsgType","CMD_S2C_ActivityDailyRiddleGetReward") local totalNum =c2sData.data.num local data = {} --检查并且获取活动信息 local cfgRiddle=self:CheckDataAndGetActivity(player) if cfgRiddle == nil then s2cData.code = errorInfo.ErrorCode.ActivityClosed return end local playerDailyRiddle=player.gameData.DailyRiddleMap[cfgRiddle.id] --判断进度 if playerDailyRiddle.totalAnswerNum < totalNum then log.info(string.format("每日灯谜 领取奖励 未解锁 %d",totalNum)) s2cData.code = errorInfo.ErrorCode.OpFailed return end local ifExist =false local rewardId =nil --判断配置是否存在 for _, value in ipairs(cfgRiddle.limitReward) do local rewardInfo = skynet.server.common:Split(value,"_" ) if tonumber(rewardInfo[1]) == totalNum then ifExist =true rewardId=tonumber(rewardInfo[2]) break end end if not ifExist then log.info(string.format("每日灯谜 领取奖励 配置不存在 %d",totalNum)) s2cData.code = errorInfo.ErrorCode.OpFailed return end --是否已经领取 for _, value in ipairs(playerDailyRiddle.rewardInfoList) do if value == totalNum then log.info(string.format("每日灯谜 领取奖励 已领取 %d",totalNum)) s2cData.code = errorInfo.ErrorCode.OpFailed return end end --发奖励 local eventId = pb.enum("EnumMoneyChangeEventID","EventID_139") player:GiveReward(rewardId ,eventId,1) --添加领取内容 table.insert(playerDailyRiddle.rewardInfoList,totalNum) --红点 if not self:isCanDraw(player) then skynet.server.msgTips:ReduceAll(player, 120) end data.curDay=self:GetTodayOpenNum(player) data.totalAnswerNum=playerDailyRiddle.totalAnswerNum data.rewardId=rewardId data.riddleInfoList={} --组装每日灯谜信息 for _, day in ipairs(cfgRiddle.riddleId) do --默认未解锁 local dataInfo=self:GetDefaultRiddle(player,day) --是否解锁 if day > data.curDay then table.insert(data.riddleInfoList,dataInfo) goto continue end for playerDay, value in pairs(playerDailyRiddle.riddleInfoList) do if day == playerDay then dataInfo.state=value.state dataInfo.buyTip=value.buyTip dataInfo.answerTime=value.answerTime table.insert(data.riddleInfoList,dataInfo) goto continue end end --不是今天的 if dataInfo.state == 0 then dataInfo.state=2 end table.insert(data.riddleInfoList,dataInfo) ::continue:: end data.rewardInfoList={} --组装累计奖励信息 for _, value in ipairs(cfgRiddle.limitReward) do local rewardInfo = skynet.server.common:Split(value,"_" ) rewardInfo[1],rewardInfo[2] = tonumber(rewardInfo[1]),tonumber(rewardInfo[2]) --默认未解锁 local dataInfo={id = rewardInfo[1],status = 0,needCount=rewardInfo[1],rewardId=rewardInfo[2]} --是否解锁 if playerDailyRiddle.totalAnswerNum < rewardInfo[1] then table.insert(data.rewardInfoList,dataInfo) goto continue end for _, num in ipairs(playerDailyRiddle.rewardInfoList) do if rewardInfo[1] == num then dataInfo.status = 2 table.insert(data.rewardInfoList,dataInfo) goto continue end end dataInfo.status = 1 table.insert(data.rewardInfoList,dataInfo) ::continue:: end --返回信息 s2cData.data = assert(pb.encode("S2CActivityDailyRiddleGetReward", data)) end --跳过CD function ActivityDailyRiddle:SkipCD( player , c2sData , s2cData ) c2sData.data = assert(pb.decode("C2SActivityDailyRiddleSkipCD", c2sData.data )) s2cData.cmd = pb.enum("MsgType","CMD_S2C_ActivityDailyRiddleSkipCD") local riddleId =c2sData.data.riddleId local skipType =c2sData.data.skipType --跳过类型 1:广告 2:加速器 3:蜗壳币 local data = {} --检查并且获取活动信息 local cfgRiddle=self:CheckDataAndGetActivity(player) if cfgRiddle == nil then s2cData.code = errorInfo.ErrorCode.ActivityClosed return end local playerDailyRiddle=player.gameData.DailyRiddleMap[cfgRiddle.id] --判断是否存在CD,不在CD中 if playerDailyRiddle.riddleInfoList[riddleId] == nil or playerDailyRiddle.riddleInfoList[riddleId].answerTime + cfgRiddle.answerCd < skynet.GetTime() then log.info(string.format("每日灯谜 跳过CD 不存在/不在CD中 %d",riddleId)) s2cData.code = errorInfo.ErrorCode.OpFailed return end --获取配置 local cfgSValue = skynet.server.gameConfig:GetPlayerAllCfg( player , "SValue") if skipType ==1 then--广告 if playerDailyRiddle.adSkipCount >= cfgRiddle.limit then log.info(string.format("每日灯谜 跳过CD 广告次数已用完 %d",riddleId)) s2cData.code = errorInfo.ErrorCode.OpFailed return end playerDailyRiddle.adSkipCount=playerDailyRiddle.adSkipCount+1 playerDailyRiddle.riddleInfoList[riddleId].answerTime=0 elseif skipType == 2 then--加速券 --指定加速券 local goodsId = 6 --是否正确 if skynet.server.bag:GetGoodsCount(player,dataType.GoodsType_Prop,goodsId) <= 0 then s2cData.code = errorInfo.ErrorCode.NotEnoughGoods return end --扣除资源 skynet.server.bag:RemoveGoods(player,dataType.GoodsType_Prop,goodsId,1) --移除cd playerDailyRiddle.riddleInfoList[riddleId].answerTime=playerDailyRiddle.riddleInfoList[riddleId].answerTime-(cfgSValue.speedCouponTime*60) if playerDailyRiddle.riddleInfoList[riddleId].answerTime + cfgRiddle.answerCd < skynet.GetTime() then playerDailyRiddle.riddleInfoList[riddleId].answerTime=0 end else --蜗壳币 --剩余秒钟 local time = playerDailyRiddle.riddleInfoList[riddleId].answerTime+cfgRiddle.answerCd-skynet.GetTime() if time<0 then log.info(string.format("每日灯谜 跳过CD 秒数不足 %d",time)) return end --扣除奖励 local type,num =dataType.GoodsType_Volute,math.ceil(math.ceil(time/60)/cfgSValue.timeExchangeVoluteCoin[1])*cfgSValue.timeExchangeVoluteCoin[1] local eventId = pb.enum("EnumMoneyChangeEventID","EventID_139" ) if not player:MoneyChange( type,-num , eventId ) then log.info(string.format("每日灯谜 跳过CD 蜗壳币不足 %d",num)) s2cData.code = errorInfo.ErrorCode.NotEnoughGoods return end playerDailyRiddle.riddleInfoList[riddleId].answerTime=0 end --红点 if not self:isCanAnswer(player) then skynet.server.msgTips:Add(player, 119) end data.riddleInfoList={} data.curDay=self:GetTodayOpenNum(player) --组装每日灯谜信息 for _, day in ipairs(cfgRiddle.riddleId) do --默认未解锁 local dataInfo=self:GetDefaultRiddle(player,day) --是否解锁 if day > data.curDay then table.insert(data.riddleInfoList,dataInfo) goto continue end for playerDay, value in pairs(playerDailyRiddle.riddleInfoList) do if day == playerDay then dataInfo.state=value.state dataInfo.buyTip=value.buyTip dataInfo.answerTime=value.answerTime table.insert(data.riddleInfoList,dataInfo) goto continue end end --不是今天的,未初始化,直接就需要补卡 if dataInfo.state == 0 then dataInfo.state=2 end table.insert(data.riddleInfoList,dataInfo) ::continue:: end --返回信息 s2cData.data = assert(pb.encode("S2CActivityDailyRiddleSkipCD", data)) end --购买补答题 function ActivityDailyRiddle:BuyAnswer( player , c2sData , s2cData ) c2sData.data = assert(pb.decode("C2SActivityDailyRiddleBuyAnswer", c2sData.data )) s2cData.cmd = pb.enum("MsgType","CMD_S2C_ActivityDailyRiddleBuyAnswer") local riddleId =c2sData.data.riddleId local answerType =c2sData.data.answerType --跳过类型 1:货币购买 2:广告购买 local data = {} --检查并且获取活动信息 local cfgRiddle=self:CheckDataAndGetActivity(player) if cfgRiddle == nil then s2cData.code = errorInfo.ErrorCode.ActivityClosed return end local playerDailyRiddle=player.gameData.DailyRiddleMap[cfgRiddle.id] --是否是当日题目 local todayRiddileId =self:GetTodayOpenNum(player) if todayRiddileId <= riddleId then log.info(string.format("每日灯谜 购买补答题 大于/等于当日题目 %d",riddleId)) s2cData.code = errorInfo.ErrorCode.OpFailed return end if playerDailyRiddle.riddleInfoList[riddleId] == nil then playerDailyRiddle.riddleInfoList[riddleId]=self:GetDefaultRiddle(player,riddleId) end --判断是否是可答题 if playerDailyRiddle.riddleInfoList[riddleId].buyAnswer then--0:未解锁 1:可答题 2:补答题 3:已答对 log.info(string.format("每日灯谜 购买补答题 不可补答题 %d",riddleId)) s2cData.code = errorInfo.ErrorCode.OpFailed return end if answerType ==2 then--广告 if playerDailyRiddle.adAnswerCount >= cfgRiddle.limit then log.info(string.format("每日灯谜 购买补答题 广告次数已用完 %d",riddleId)) s2cData.code = errorInfo.ErrorCode.OpFailed return end playerDailyRiddle.adAnswerCount=playerDailyRiddle.adAnswerCount+1 else --蜗壳币 --资源是否足够 local answerCoin = skynet.server.common:Split(cfgRiddle.answerCoin,"_" ) local type,num = tonumber(answerCoin[1]),tonumber(answerCoin[2]) local eventId = pb.enum("EnumMoneyChangeEventID","EventID_139" ) if not player:MoneyChange( type,-num , eventId ) then s2cData.code = errorInfo.ErrorCode.NotEnoughGoods return end end playerDailyRiddle.riddleInfoList[riddleId].state=1 playerDailyRiddle.riddleInfoList[riddleId].buyAnswer=true if self:isCanAnswer(player) then skynet.server.msgTips:Add(player, 119) end data.riddleInfo=playerDailyRiddle.riddleInfoList[riddleId] --返回信息 s2cData.data = assert(pb.encode("S2CActivityDailyRiddleBuyAnswer", data)) end skynet.server.activityDailyRiddle = ActivityDailyRiddle return ActivityDailyRiddle