123 lines
5.2 KiB
Lua
123 lines
5.2 KiB
Lua
|
|
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
|