HomeServer/Server/AllServer/GameServer/Activity/ActivitySign.lua
2024-11-20 15:41:37 +08:00

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