391 lines
13 KiB
Lua
391 lines
13 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 json =require "json"
|
||
local dataType = require "DataType"
|
||
local ActivityLimitedAccum = oo.class()
|
||
|
||
ActivityLimitedAccum.ActivityType = dataType.ActivityType_LimitedAccum
|
||
|
||
--构造函数
|
||
function ActivityLimitedAccum:Init()
|
||
|
||
end
|
||
|
||
-- 每次登录需要进行修改的数据
|
||
function ActivityLimitedAccum:LoginInitData(player)
|
||
|
||
--判断模块是否开启
|
||
if not player:IsUnlockSystem( dataType.UnlockSystem_DesignHouse ) then
|
||
log.debug("限时累充模块未开启")
|
||
return
|
||
end
|
||
|
||
--活动结束
|
||
local cfgLimitedAccum = self:CheckDataAndGetActivity(player)
|
||
if cfgLimitedAccum == nil then
|
||
|
||
log.debug("限时累充活动已结束")
|
||
return
|
||
end
|
||
|
||
--迁移数据
|
||
self:PortalData(player)
|
||
|
||
-- 处理红点
|
||
skynet.server.msgTips:Reset(player, 94)
|
||
|
||
log.debug("限时累充活动进行中")
|
||
end
|
||
|
||
--移植老的活动数据
|
||
function ActivityLimitedAccum:PortalData(player)
|
||
|
||
--不存在数据直接返回
|
||
if player.gameData.design == nil or player.gameData.design.timeCardPoints == nil then
|
||
return
|
||
end
|
||
|
||
for activityId, oldValue in pairs(player.gameData.design.timeCardPoints) do
|
||
|
||
--local activityId =oldValue.raffleId
|
||
if player.gameData.LimitedAccumMap[activityId] == nil then
|
||
player.gameData.LimitedAccumMap[activityId]={}
|
||
end
|
||
|
||
--是否导入
|
||
if player.gameData.LimitedAccumMap[activityId].isPortal then
|
||
goto continue
|
||
end
|
||
|
||
if player.gameData.LimitedAccumMap[activityId].pointsInfo == nil then
|
||
player.gameData.LimitedAccumMap[activityId].pointsInfo={}
|
||
end
|
||
|
||
player.gameData.LimitedAccumMap[activityId].activityId = activityId
|
||
player.gameData.LimitedAccumMap[activityId].LoginDate = skynet.GetTime() --登录天数
|
||
|
||
--处理积分
|
||
if player.gameData.LimitedAccumMap[activityId].points ~=nil
|
||
and player.gameData.LimitedAccumMap[activityId].points > 0 then
|
||
player.gameData.LimitedAccumMap[activityId].points=player.gameData.LimitedAccumMap[activityId].points+oldValue.points
|
||
else
|
||
player.gameData.LimitedAccumMap[activityId].points=oldValue.points
|
||
end
|
||
if oldValue.pointsInfo ~= nil then
|
||
for _, points in pairs(oldValue.pointsInfo) do
|
||
|
||
local isExist = false
|
||
for index, temp in ipairs(player.gameData.LimitedAccumMap[activityId].pointsInfo) do
|
||
if temp.id == points.id then
|
||
isExist = true
|
||
if player.gameData.LimitedAccumMap[activityId].pointsInfo[index].isGet ~=2 then
|
||
player.gameData.LimitedAccumMap[activityId].pointsInfo[index].isGet = points.isGet
|
||
end
|
||
break
|
||
end
|
||
end
|
||
|
||
if not isExist then
|
||
table.insert(player.gameData.LimitedAccumMap[activityId].pointsInfo, points)
|
||
end
|
||
end
|
||
end
|
||
|
||
--升序排序
|
||
table.sort(player.gameData.LimitedAccumMap[activityId].pointsInfo,function(a,b)
|
||
return a.id < b.id
|
||
end)
|
||
|
||
--判断积分是否达到可以领取对应的积分奖励
|
||
local cfgLimitedAccum = skynet.server.gameConfig:GetPlayerCurCfg( player , "LimitedAccum" , activityId )
|
||
|
||
for index ,v1 in ipairs(player.gameData.LimitedAccumMap[activityId].pointsInfo) do
|
||
if player.gameData.LimitedAccumMap[activityId].points >= cfgLimitedAccum.value[index] and v1.isGet == 0 then
|
||
player.gameData.LimitedAccumMap[activityId].pointsInfo[index].isGet = 1--修改为可以领取
|
||
end
|
||
end
|
||
|
||
--标记已经导入
|
||
player.gameData.LimitedAccumMap[activityId].isPortal = true
|
||
::continue::
|
||
end
|
||
end
|
||
|
||
--初始玩家数据,返回活动信息,
|
||
function ActivityLimitedAccum:CheckDataAndGetActivity(player)
|
||
|
||
--默认空活动
|
||
local cfgLimitedAccum = nil
|
||
|
||
if player==nil then
|
||
log.debug("限时累充CheckDataAndGetActivity, player is nil")
|
||
return cfgLimitedAccum
|
||
end
|
||
|
||
--判断等级是否开启
|
||
if not player:IsUnlockSystem( dataType.UnlockSystem_ActivitySignPack) then
|
||
log.debug("限时累充等级不足")
|
||
return cfgLimitedAccum
|
||
end
|
||
|
||
--获取开启的活动
|
||
local activityId, _, _, _ = activity:GetActivityInfo(player, ActivityLimitedAccum.ActivityType)
|
||
|
||
--没有开启的活动
|
||
if activityId == 0 then
|
||
log.debug("限时累充未开启-未获取到有效的活动1")
|
||
return cfgLimitedAccum
|
||
end
|
||
|
||
--初始化
|
||
if player.gameData.LimitedAccumMap==nil then
|
||
player.gameData.LimitedAccumMap={}
|
||
end
|
||
|
||
--获取活动配置
|
||
cfgLimitedAccum=self:GetLimitedAccumConfig(player,activityId)
|
||
|
||
--未获取到有效的活动
|
||
if cfgLimitedAccum == nil then
|
||
log.debug("限时累充未开启-未获取到有效的活动2")
|
||
return cfgLimitedAccum
|
||
end
|
||
|
||
--如果玩家已经存在活动不需要检查
|
||
if player.gameData.LimitedAccumMap[activityId] then
|
||
|
||
player.gameData.LimitedAccumMap[activityId].LoginDate = skynet.GetTime() --更新登录时间 补发奖励用
|
||
|
||
return cfgLimitedAccum
|
||
end
|
||
|
||
--存在活动初始化玩家数据
|
||
local LimitedAccum = {}
|
||
LimitedAccum.activityId = cfgLimitedAccum.id
|
||
LimitedAccum.points = 0--灵感积分
|
||
LimitedAccum.LoginDate = skynet.GetTime() --登录天数
|
||
LimitedAccum.pointsInfo = {} --奖励列表
|
||
|
||
for index, _ in ipairs(cfgLimitedAccum.value) do
|
||
table.insert(LimitedAccum.pointsInfo, {id = index, isGet = 0}) --0 不可领取 1 可以领取 2 已领取
|
||
end
|
||
|
||
--更新缓存
|
||
player.gameData.LimitedAccumMap[activityId] = LimitedAccum
|
||
|
||
return cfgLimitedAccum
|
||
|
||
end
|
||
|
||
--可领取奖励列表
|
||
function ActivityLimitedAccum:IfConDrawReward(player)
|
||
|
||
--不存在开启的活动
|
||
local cfgLimitedAccum=self:CheckDataAndGetActivity(player)
|
||
|
||
--活动未开启
|
||
if cfgLimitedAccum == nil then
|
||
log.debug("限时累充未开启-未获取到有效的活动")
|
||
return cfgLimitedAccum
|
||
end
|
||
|
||
--获取玩家信息
|
||
local activityId, _, _, _ = activity:GetActivityInfo(player, ActivityLimitedAccum.ActivityType)
|
||
local limitedAccum = player.gameData.LimitedAccumMap[activityId]
|
||
|
||
for _, v1 in pairs(limitedAccum.pointsInfo) do
|
||
if v1.isGet == 1 then
|
||
return true
|
||
end
|
||
end
|
||
|
||
return false
|
||
end
|
||
|
||
--获取配置信息
|
||
function ActivityLimitedAccum:GetLimitedAccumConfig(player,activityId)
|
||
|
||
local cfLimitedAccum = nil
|
||
|
||
--获取该活动的默认初始关卡
|
||
local cfLimitedAccums=skynet.server.gameConfig:GetPlayerAllCfg(player, "LimitedAccum")
|
||
if cfLimitedAccums==nil then
|
||
|
||
log.debug("cfLimitedAccums is nil")
|
||
return cfLimitedAccum
|
||
end
|
||
|
||
for index, value in pairs(cfLimitedAccums) do
|
||
if value.id==activityId then
|
||
cfLimitedAccum=value
|
||
break
|
||
end
|
||
end
|
||
|
||
return cfLimitedAccum
|
||
end
|
||
|
||
--是否付费签到
|
||
function ActivityLimitedAccum:Pay(player,storeId)
|
||
|
||
--检查显示是否开启
|
||
local cfgLimitedAccum=self:CheckDataAndGetActivity(player)
|
||
|
||
if cfgLimitedAccum == nil then
|
||
return
|
||
end
|
||
|
||
--对应限时累充数据修改
|
||
--找到对应礼包充值价格
|
||
local packPrice = 0
|
||
local cfgAllStorePrice = skynet.server.gameConfig:GetPlayerAllCfg( player , "StorePrice")
|
||
for k , v in pairs(cfgAllStorePrice) do
|
||
if v.storePackId == storeId then
|
||
packPrice = v.price
|
||
break
|
||
end
|
||
end
|
||
|
||
--获取玩家信息
|
||
local activityId, _, _, _ = activity:GetActivityInfo(player, ActivityLimitedAccum.ActivityType)
|
||
local limitedAccum = player.gameData.LimitedAccumMap[activityId]
|
||
|
||
--修改玩家的卡池累充额度
|
||
local cfgSValue = skynet.server.gameConfig:GetPlayerAllCfg( player , "SValue" )
|
||
limitedAccum.points = limitedAccum.points + packPrice/100 * cfgSValue.valueAccumulatePoint
|
||
|
||
--判断积分是否达到可以领取对应的积分奖励
|
||
local cfgLimitedAccum = skynet.server.gameConfig:GetPlayerCurCfg( player , "LimitedAccum" , activityId )
|
||
|
||
for index ,v1 in ipairs(limitedAccum.pointsInfo) do
|
||
if limitedAccum.points >= cfgLimitedAccum.value[index] and v1.isGet == 0 then
|
||
v1.isGet = 1 --修改为可以领取
|
||
end
|
||
end
|
||
|
||
if self:IfConDrawReward(player) then
|
||
skynet.server.msgTips:Add(player , 94) --同时添加对应红点
|
||
end
|
||
|
||
--通知客户端
|
||
local data = {}
|
||
data.points = limitedAccum.points
|
||
skynet.server.gameServer:SendMsgToUser(player.userId, "CMD_S2C_ActivityLimitedAccumPointChange", data)
|
||
end
|
||
|
||
--添加积分
|
||
function ActivityLimitedAccum:AddPoints(player,points)
|
||
|
||
--新版累充积分
|
||
local activityId, _, _, _ = activity:GetActivityInfo(player, dataType.ActivityType_LimitedAccum)
|
||
if activityId == 0 then
|
||
return
|
||
end
|
||
|
||
if player.gameData.LimitedAccumMap == nil then
|
||
player.gameData.LimitedAccumMap={}
|
||
end
|
||
|
||
if player.gameData.LimitedAccumMap[activityId] == nil then
|
||
player.gameData.LimitedAccumMap[activityId]={}
|
||
end
|
||
|
||
local limitedAccum = player.gameData.LimitedAccumMap[activityId]
|
||
if limitedAccum.points == nil then
|
||
limitedAccum.points=0
|
||
end
|
||
|
||
limitedAccum.points = limitedAccum.points + points
|
||
|
||
--判断积分是否达到可以领取对应的积分奖励
|
||
local cfgLimitedAccum = skynet.server.gameConfig:GetPlayerCurCfg( player , "LimitedAccum" , activityId )
|
||
|
||
for index ,v1 in ipairs(limitedAccum.pointsInfo) do
|
||
if limitedAccum.points >= cfgLimitedAccum.value[index] and v1.isGet == 0 then
|
||
v1.isGet = 1 --修改为可以领取
|
||
end
|
||
end
|
||
|
||
--通知客户端
|
||
local data = {}
|
||
data.points = limitedAccum.points
|
||
skynet.server.gameServer:SendMsgToUser(player.userId, "CMD_S2C_ActivityLimitedAccumPointChange", data)
|
||
end
|
||
|
||
--限时累积充值展示
|
||
function ActivityLimitedAccum:TimePointsShow( player , c2sData ,s2cData )
|
||
s2cData.cmd = pb.enum("MsgType","CMD_S2C_DesignTimePointsShow")
|
||
c2sData.data = assert(pb.decode("C2SDesignTimePointsShow", c2sData.data ))
|
||
local data = {}
|
||
|
||
--检查显示是否开启
|
||
local cfgLimitedAccum=self:CheckDataAndGetActivity(player)
|
||
|
||
if cfgLimitedAccum == nil then
|
||
s2cData.code = errorInfo.ErrorCode.ActivityClosed
|
||
return
|
||
end
|
||
|
||
--获取玩家信息
|
||
local activityId, _, _, _ = activity:GetActivityInfo(player, ActivityLimitedAccum.ActivityType)
|
||
local limitedAccum = player.gameData.LimitedAccumMap[activityId]
|
||
|
||
data.points = limitedAccum.points
|
||
data.pointsInfos = {}
|
||
|
||
for k1 ,v1 in pairs(limitedAccum.pointsInfo) do
|
||
table.insert(data.pointsInfos , v1)
|
||
end
|
||
|
||
data.accumId = limitedAccum.activityId
|
||
|
||
s2cData.data = assert(pb.encode("S2CDesignTimePointsShow", data))
|
||
end
|
||
|
||
--限时累积充值获取
|
||
function ActivityLimitedAccum:TimePointsGet( player , c2sData ,s2cData )
|
||
s2cData.cmd = pb.enum("MsgType","CMD_S2C_DesignTimePointsGet")
|
||
c2sData.data = assert(pb.decode("C2SDesignTimePointsGet", c2sData.data ))
|
||
local id = c2sData.data.id
|
||
local data = {}
|
||
data.id = id
|
||
data.pointsInfos = {}
|
||
|
||
--检查显示是否开启
|
||
local cfgLimitedAccum=self:CheckDataAndGetActivity(player)
|
||
|
||
if cfgLimitedAccum == nil then
|
||
s2cData.code = errorInfo.ErrorCode.ActivityClosed
|
||
return
|
||
end
|
||
|
||
--获取玩家信息
|
||
local activityId, _, _, _ = activity:GetActivityInfo(player, ActivityLimitedAccum.ActivityType)
|
||
local limitedAccum = player.gameData.LimitedAccumMap[activityId]
|
||
|
||
local cfgLimitedAccum = skynet.server.gameConfig:GetPlayerCurCfg( player , "LimitedAccum" , limitedAccum.activityId )
|
||
for index ,v1 in ipairs(limitedAccum.pointsInfo) do
|
||
if v1.id == id and v1.isGet == 1 then
|
||
--进行发放奖励
|
||
local eventId = pb.enum("EnumMoneyChangeEventID","EventID_107")
|
||
player:GiveReward(cfgLimitedAccum.rewardId[index], eventId , 1)
|
||
v1.isGet = 2
|
||
end
|
||
table.insert(data.pointsInfos,v1)
|
||
end
|
||
|
||
if not self:IfConDrawReward(player) then
|
||
skynet.server.msgTips:ReduceAll(player , 94)
|
||
end
|
||
|
||
data.accumId = limitedAccum.activityId
|
||
s2cData.data = assert(pb.encode("S2CDesignTimePointsGet", data))
|
||
end
|
||
|
||
skynet.server.activityLimitedAccum = ActivityLimitedAccum
|
||
return ActivityLimitedAccum |