259 lines
10 KiB
Lua
259 lines
10 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 json =require "json"
|
|||
|
|
local redisKeyUrl = require "RedisKeyUrl"
|
|||
|
|
|
|||
|
|
local LuxuryCard = oo.class()
|
|||
|
|
LuxuryCard.MaxBuyDayNum = 180 --最大购买天数
|
|||
|
|
|
|||
|
|
function LuxuryCard:Init()
|
|||
|
|
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--检查是否过期
|
|||
|
|
function LuxuryCard:CheckOutOfTime( nowTime , player )
|
|||
|
|
local luxuryCard = player.gameData.luxuryCard
|
|||
|
|
if nowTime >= luxuryCard.expireTime then
|
|||
|
|
--豪华月卡已经过期
|
|||
|
|
luxuryCard.isActivate = false
|
|||
|
|
--如果使用了自定义头像则重置为默认头像
|
|||
|
|
if player.gameData.personal.headId == 0 then
|
|||
|
|
player.gameData.personal.headId = 1
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--豪华月卡 显示信息
|
|||
|
|
function LuxuryCard:Show( player , c2sData , s2cData )
|
|||
|
|
c2sData.data = assert(pb.decode("C2SLuxuryCardShow", c2sData.data ))
|
|||
|
|
local data = {}
|
|||
|
|
local luxuryCard = player.gameData.luxuryCard
|
|||
|
|
|
|||
|
|
if not luxuryCard.isActivate then
|
|||
|
|
s2cData.code = errorInfo.ErrorCode.NoActivateLuxuryCard
|
|||
|
|
else
|
|||
|
|
local todayGain = player.gameData.todayGain
|
|||
|
|
local monthGain = player.gameData.monthGain
|
|||
|
|
|
|||
|
|
data.isActivate = luxuryCard.isActivate
|
|||
|
|
if luxuryCard.isActivate then
|
|||
|
|
data.day = skynet.server.common:GetTimeGap(luxuryCard.expireTime)
|
|||
|
|
else
|
|||
|
|
data.day = 0
|
|||
|
|
end
|
|||
|
|
data.isGainDaliyReward = todayGain.isGetLuxuryCardDaliyReward
|
|||
|
|
data.isGainMonthReward = monthGain.isGetLuxuryCardMonthReward
|
|||
|
|
data.luxuryCardID = self:GetCurMonthId( player )
|
|||
|
|
|
|||
|
|
log.debug(string.format("豪华月卡 玩家 %s 是否激活 %s 当日是否领取 %s 当月是否领取 %s ",
|
|||
|
|
player.userId , luxuryCard.isActivate , todayGain.isGetLuxuryCardDaliyReward , monthGain.isGetLuxuryCardMonthReward))
|
|||
|
|
end
|
|||
|
|
s2cData.cmd = pb.enum("MsgType","CMD_S2C_LuxuryCardShow")
|
|||
|
|
s2cData.data = assert(pb.encode("S2CLuxuryCardShow", data))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--豪华月卡 获得每日奖励
|
|||
|
|
function LuxuryCard:GetDaliyReward( player , c2sData , s2cData )
|
|||
|
|
c2sData.data = assert(pb.decode("C2SLuxuryCardGetDaliyReward", c2sData.data ))
|
|||
|
|
local data = {}
|
|||
|
|
|
|||
|
|
local luxuryCard = player.gameData.luxuryCard
|
|||
|
|
local todayGain = player.gameData.todayGain
|
|||
|
|
if not luxuryCard.isActivate then
|
|||
|
|
s2cData.code = errorInfo.ErrorCode.NoActivateLuxuryCard
|
|||
|
|
elseif todayGain.isGetLuxuryCardDaliyReward then
|
|||
|
|
s2cData.code = errorInfo.ErrorCode.AlreadyGet
|
|||
|
|
else
|
|||
|
|
todayGain.isGetLuxuryCardDaliyReward = true
|
|||
|
|
|
|||
|
|
--获取配置中的每日奖励
|
|||
|
|
local cfgSValue = skynet.server.gameConfig:GetPlayerAllCfg( player , "SValue")
|
|||
|
|
local rewardId = cfgSValue.luxuryCardDailyReward
|
|||
|
|
|
|||
|
|
--发放奖励
|
|||
|
|
local eventId = pb.enum("EnumMoneyChangeEventID","EventID_125")
|
|||
|
|
player:GiveReward( rewardId , eventId , 1)
|
|||
|
|
data.rewardId = rewardId
|
|||
|
|
log.debug(string.format("豪华月卡 玩家 %s 是获得每日奖励 %d", player.userId , rewardId))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
s2cData.cmd = pb.enum("MsgType","CMD_S2C_LuxuryCardGetDaliyReward")
|
|||
|
|
s2cData.data = assert(pb.encode("S2CLuxuryCardGetDaliyReward", data))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--豪华月卡 获得每月奖励
|
|||
|
|
function LuxuryCard:GetMonthReward( player , c2sData , s2cData )
|
|||
|
|
c2sData.data = assert(pb.decode("C2SLuxuryCardGetMonthReward", c2sData.data ))
|
|||
|
|
local data = {}
|
|||
|
|
|
|||
|
|
local luxuryCard = player.gameData.luxuryCard
|
|||
|
|
local monthGain = player.gameData.monthGain
|
|||
|
|
|
|||
|
|
if not luxuryCard.isActivate then
|
|||
|
|
s2cData.code = errorInfo.ErrorCode.NoActivateLuxuryCard
|
|||
|
|
elseif monthGain.isGetLuxuryCardMonthReward then
|
|||
|
|
s2cData.code = errorInfo.ErrorCode.AlreadyGet
|
|||
|
|
else
|
|||
|
|
monthGain.isGetLuxuryCardMonthReward = true
|
|||
|
|
|
|||
|
|
--获取配置中的每月奖励
|
|||
|
|
local rewardId = self:GetCurMonthReward( player )
|
|||
|
|
|
|||
|
|
--发放奖励
|
|||
|
|
local eventId = pb.enum("EnumMoneyChangeEventID","EventID_125")
|
|||
|
|
player:GiveReward( rewardId , eventId , 1)
|
|||
|
|
data.rewardId = rewardId
|
|||
|
|
log.debug(string.format("豪华月卡 玩家 %s 是获得每月奖励 %d", player.userId , rewardId))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
s2cData.cmd = pb.enum("MsgType","CMD_S2C_LuxuryCardGetMonthReward")
|
|||
|
|
s2cData.data = assert(pb.encode("S2CLuxuryCardGetMonthReward", data))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--购买
|
|||
|
|
function LuxuryCard:Buy( player, c2sData , s2cData )
|
|||
|
|
c2sData.data = assert(pb.decode("C2SLuxuryMonthCardBuy", c2sData.data ))
|
|||
|
|
local data = {}
|
|||
|
|
if not self:IsReBuy( player ) then
|
|||
|
|
s2cData.code=errorInfo.ErrorCode.LuxuryCardOver180Days
|
|||
|
|
else
|
|||
|
|
local luxuryCard = player.gameData.luxuryCard
|
|||
|
|
local nowTime = skynet.GetTime()
|
|||
|
|
luxuryCard.isActivate = true
|
|||
|
|
luxuryCard.buyTime = nowTime
|
|||
|
|
|
|||
|
|
--发放豪华月卡购买奖励
|
|||
|
|
local cfgSValue = skynet.server.gameConfig:GetPlayerAllCfg( player , "SValue")
|
|||
|
|
local eventId = pb.enum("EnumMoneyChangeEventID","EventID_126")
|
|||
|
|
player:GiveReward(cfgSValue.luxuryCardReward , eventId , 1)
|
|||
|
|
|
|||
|
|
--如果购买时,当前时间大于过期时间,表示玩家未激活,则用现在时间来计算过期时间,否则用过期时间加30天来计算
|
|||
|
|
if nowTime >= luxuryCard.expireTime then
|
|||
|
|
luxuryCard.expireTime = skynet.server.common:GetTimeAfterSomeDayHMS( nowTime , 30 )
|
|||
|
|
self:CardBenefit(player)
|
|||
|
|
else
|
|||
|
|
luxuryCard.expireTime = skynet.server.common:GetTimeAfterSomeDayHMS( luxuryCard.expireTime , 30 )
|
|||
|
|
end
|
|||
|
|
data.buyStatus = luxuryCard.isActivate
|
|||
|
|
data.day = skynet.server.common:GetTimeGap(luxuryCard.expireTime)
|
|||
|
|
data.isGainDaliyReward = player.gameData.todayGain.isGetLuxuryCardDaliyReward
|
|||
|
|
data.isGainMonthReward = player.gameData.monthGain.isGetLuxuryCardMonthReward
|
|||
|
|
end
|
|||
|
|
s2cData.cmd = pb.enum("MsgType","CMD_S2C_LuxuryMonthCardBuy")
|
|||
|
|
s2cData.data = assert(pb.encode("S2CLuxuryMonthCardBuy", data))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--上传自定义头像
|
|||
|
|
function LuxuryCard:UploadDIYHead( player , c2sData , s2cData )
|
|||
|
|
c2sData.data = assert(pb.decode("C2SLuxuryCardDIYHeadUpload",c2sData.data))
|
|||
|
|
local data = {}
|
|||
|
|
data.DIYHeadInfo = {}
|
|||
|
|
if not self:IsActivate( player) then
|
|||
|
|
s2cData.code = errorInfo.ErrorCode.NoActivateLuxuryCard
|
|||
|
|
else
|
|||
|
|
local myPartnerId = player.gameData.partner.id
|
|||
|
|
|
|||
|
|
--保存自定义头像信息,并将头像id设置为0代表启用自定义头像
|
|||
|
|
player.gameData.personal.diyHeadInfo = c2sData.data.DIYHeadInfo
|
|||
|
|
player.gameData.personal.headId = 0
|
|||
|
|
|
|||
|
|
skynet.server.personal:SetDetail( myPartnerId , "headId" , player.gameData.personal.headId , "DIYHeadInfo" , json:encode(player.gameData.personal.diyHeadInfo))
|
|||
|
|
data.DIYHeadInfo = c2sData.data.DIYHeadInfo
|
|||
|
|
end
|
|||
|
|
s2cData.cmd = pb.enum("MsgType","CMD_S2C_LuxuryCardDIYHeadUpload")
|
|||
|
|
s2cData.data = assert(pb.encode("S2CLuxuryCardDIYHeadUpload", data))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
|
|||
|
|
--主动推送豪华月卡信息
|
|||
|
|
function LuxuryCard:SendLuxuryCardInfoToUser(player)
|
|||
|
|
local data = {}
|
|||
|
|
local luxuryCard = player.gameData.luxuryCard
|
|||
|
|
if luxuryCard then
|
|||
|
|
local todayGain = player.gameData.todayGain
|
|||
|
|
local monthGain = player.gameData.monthGain
|
|||
|
|
|
|||
|
|
data.isActivate = luxuryCard.isActivate
|
|||
|
|
if luxuryCard.isActivate then
|
|||
|
|
data.day = skynet.server.common:GetTimeGap(luxuryCard.expireTime)
|
|||
|
|
else
|
|||
|
|
data.day = 0
|
|||
|
|
end
|
|||
|
|
data.isGainDaliyReward = todayGain.isGetLuxuryCardDaliyReward
|
|||
|
|
data.isGainMonthReward = monthGain.isGetLuxuryCardMonthReward
|
|||
|
|
data.luxuryCardID = self:GetCurMonthId( player )
|
|||
|
|
end
|
|||
|
|
skynet.server.gameServer:SendMsgToUser( player.userId , "CMD_S2C_LuxuryCardShow" , data )
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--获取当前月的奖励ID
|
|||
|
|
function LuxuryCard:GetCurMonthReward( player )
|
|||
|
|
local curYear , curMonth , curDay = skynet.server.common:GetYearMonthDay()
|
|||
|
|
local cfgAllLuxuryCard = skynet.server.gameConfig:GetPlayerAllCfg( player , "LuxuryCard")
|
|||
|
|
for k, v in pairs( cfgAllLuxuryCard ) do
|
|||
|
|
if curYear == v.month[1] and curMonth == v.month[2] then
|
|||
|
|
return v.rewardId
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
return 0
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--获取当前月的奖励ID
|
|||
|
|
function LuxuryCard:GetCurMonthId( player )
|
|||
|
|
local curYear , curMonth , curDay = skynet.server.common:GetYearMonthDay()
|
|||
|
|
local cfgAllLuxuryCard = skynet.server.gameConfig:GetPlayerAllCfg( player , "LuxuryCard")
|
|||
|
|
for k, v in pairs( cfgAllLuxuryCard ) do
|
|||
|
|
if curYear == v.month[1] and curMonth == v.month[2] then
|
|||
|
|
return v.id
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
return 0
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--豪华月卡开通权益 需要特殊处理的权益在此处处理
|
|||
|
|
function LuxuryCard:CardBenefit( player )
|
|||
|
|
local cfgSValue = skynet.server.gameConfig:GetPlayerAllCfg( player , "SValue")
|
|||
|
|
--造型间权益 将当前剪刀数乘权益系数
|
|||
|
|
local styleShop = player.gameData.shop[ dataType.ShopType_Style ]
|
|||
|
|
if styleShop then
|
|||
|
|
styleShop.energy.energy = styleShop.energy.energy * cfgSValue.luxuryCardScissorsModulus
|
|||
|
|
if styleShop.energy.energy ~= skynet.server.styleShop:GetMaxRestoreEnergy( player ) then
|
|||
|
|
styleShop.energy.nextRefillTime = skynet.GetTime() + skynet.server.styleShop:GetMaxCDTime( player )
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--是否能续费
|
|||
|
|
function LuxuryCard:IsReBuy( player )
|
|||
|
|
local luxuryCard = player.gameData.luxuryCard
|
|||
|
|
local nowTime = skynet.GetTime()
|
|||
|
|
|
|||
|
|
--计算剩余秒数
|
|||
|
|
local leftTime = luxuryCard.expireTime - nowTime
|
|||
|
|
if leftTime < 0 then
|
|||
|
|
log.debug(string.format("豪华月卡 玩家 %s 可以购买 剩余天数 %d", player.userId , 0 ))
|
|||
|
|
return true
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--计算剩余天数
|
|||
|
|
local leftDayNum = math.floor( leftTime / dataType.OneDaySec )
|
|||
|
|
if leftDayNum <= self.MaxBuyDayNum then
|
|||
|
|
log.debug(string.format("豪华月卡 玩家 %s 可以购买 剩余天数 %d", player.userId , leftDayNum ))
|
|||
|
|
return true
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
log.debug(string.format("豪华月卡 玩家 %s 无法购买 剩余天数 %d", player.userId , leftDayNum ))
|
|||
|
|
return false
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--是否激活
|
|||
|
|
function LuxuryCard:IsActivate( player)
|
|||
|
|
return player.gameData.luxuryCard.isActivate
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
skynet.server.luxuryCard = LuxuryCard
|
|||
|
|
return LuxuryCard
|