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 ActivitySign = oo.class() ActivitySign.ActivityType = dataType.ActivityType_SignActivity function ActivitySign:Init() end --初始玩家数据 function ActivitySign:InitData( player , activityType ) --跨年签到数据 local activityId,startTime,endTime = skynet.server.activity:GetActivityInfo( player , activityType ) --玩家跨年签到活动相关数据 player.gameData.activity[ activityType ] = {} local cfgActivity = skynet.server.gameConfig:GetPlayerAllCfg( player , "Activity") if activityId > 0 then local cfgSignActivity = skynet.server.gameConfig:GetPlayerCurCfg( player , "SignActivity" , activityId ) --判断当前时间距离活动开始时间有多少天 local nowTime = skynet.GetTime() startTime = skynet.server.common:GetTimeAfterSomeDay(startTime,0) local dayCount = math.ceil((nowTime - startTime)/(24*60*60)) for k ,v in pairs(cfgActivity) do if v.activityType == self.ActivityType and v.activityId == activityId then player.gameData.activity[ activityType ].id = v.id --记录该活动的id break end end player.gameData.activity[ activityType ].signInfo = {} --跨年签到数据赋值 for i = 1 , #cfgSignActivity.dailyReward , 1 do player.gameData.activity[ activityType ].signInfo[ i ] = {} player.gameData.activity[ activityType ].signInfo[ i ].id = i if i <= dayCount then --领取状态 1-无法领取 2-可以领取 3-已经领取 player.gameData.activity[ activityType ].signInfo[ i ].status = 2 else player.gameData.activity[ activityType ].signInfo[ i ].status = 1 end player.gameData.activity[ activityType ].signInfo[ i ].rewardId = cfgSignActivity.dailyReward[ i ] player.gameData.activity[ activityType ].signInfo[ i ].startTime = startTime + (i-1) * 24 * 60 * 60 end --红点系统 for k , v in pairs(player.gameData.activity[ activityType ].signInfo) do if v.status == 2 then skynet.server.msgTips:AddNoNotice(player , 79) end end end end --登录的时候进行修改对应数据 function ActivitySign:LoginInitData( player ) --重置签到红点 skynet.server.msgTips:Reset(player , 79) --判断玩家是否开启活动 if player.gameData.activity[ self.ActivityType ] and next(player.gameData.activity[ self.ActivityType ]) ~= nil then --判断该活动是否到期 local cfgActivity = skynet.server.gameConfig:GetPlayerCurCfg( player , "Activity" , player.gameData.activity[ self.ActivityType ].id ) local endTime = skynet.server.common:GetTime(cfgActivity.endTime) if skynet.GetTime() > endTime then --初始玩家数据 player.gameData.activity[ self.ActivityType ] = {} else --红点系统 for k , v in pairs(player.gameData.activity[ self.ActivityType ].signInfo) do if skynet.GetTime() >= v.startTime and v.status == 1 then v.status = 2 end if v.status == 2 then skynet.server.msgTips:AddNoNotice(player , 79) end end end else self:InitData( player , self.ActivityType ) end end --跨年签到显示 function ActivitySign:Show( player , c2sData , s2cData ) c2sData.data = assert(pb.decode("C2SActivitySignShow", c2sData.data )) local data = {} data.signActivityInfos = {} if not player.gameData.activity[ self.ActivityType ].signInfo then self:LoginInitData( player ) end for k , v in pairs(player.gameData.activity[ self.ActivityType ].signInfo) do table.insert(data.signActivityInfos , {id = v.id , status = v.status , rewardId = v.rewardId}) end s2cData.cmd = pb.enum("MsgType","CMD_S2C_ActivitySignShow") s2cData.data = assert(pb.encode("S2CActivitySignShow", data)) end --跨年签到获取 function ActivitySign:Get( player , c2sData , s2cData ) c2sData.data = assert(pb.decode("C2SActivitySignGet", c2sData.data )) local id = c2sData.data.id local data = {} for k , v in pairs(player.gameData.activity[ self.ActivityType ].signInfo) do if v.id == id and v.status == 2 then --发放对应奖励 local eventId = pb.enum("EnumMoneyChangeEventID","EventID_97") player:GiveReward(v.rewardId , eventId) data.rewardId = v.rewardId --消除对应红点 v.status = 3 data.signActivityInfo = {id = v.id , status = v.status , rewardId = v.rewardId} skynet.server.msgTips:Reduce(player , 79) end end s2cData.cmd = pb.enum("MsgType","CMD_S2C_ActivitySignGet") s2cData.data = assert(pb.encode("S2CActivitySignGet", data)) end skynet.server.activitySign = ActivitySign return ActivitySign