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

391 lines
13 KiB
Lua
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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