106 lines
4.9 KiB
Lua
106 lines
4.9 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 ExtraRevenue = oo.class()
|
|
--挂机
|
|
|
|
ExtraRevenue.OPType_LastCount = 1 --获取最新收益
|
|
ExtraRevenue.OPType_GainRevenue = 2 --领取收益
|
|
ExtraRevenue.OPType_GainDouble = 3 --双倍领取
|
|
|
|
--额外收益
|
|
function ExtraRevenue:Start( player , c2sData , s2cData )
|
|
c2sData.data = assert(pb.decode("C2SExtraRevenue", c2sData.data ))
|
|
local data = {}
|
|
local allCount = 0
|
|
local opType = c2sData.data.opType
|
|
|
|
if not opType then
|
|
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
|
|
else
|
|
--计算下在线收益
|
|
self:CalcOnline( player )
|
|
|
|
allCount = player.gameData.extraRevenue.online + player.gameData.extraRevenue.offline
|
|
local firstOpType = dataType.FirstOpType_ExtraRevenue
|
|
--第一次没领显示20
|
|
if false == player.gameData.firstOp[ firstOpType ] then
|
|
allCount = 20
|
|
end
|
|
|
|
if self.OPType_GainRevenue == opType or self.OPType_GainDouble == opType then
|
|
if self.OPType_GainRevenue == opType then
|
|
--第一次领取时只有20
|
|
local firstOpType = dataType.FirstOpType_ExtraRevenue
|
|
if false == player.gameData.firstOp[ firstOpType ] then
|
|
allCount = 20
|
|
player.gameData.firstOp[ firstOpType ] = true
|
|
end
|
|
player:MoneyChange( dataType.MoneyType_Coin , allCount )
|
|
elseif self.OPType_GainDouble == opType then
|
|
player:MoneyChange( dataType.MoneyType_Coin , allCount * 2)
|
|
end
|
|
|
|
if allCount > 0 then
|
|
skynet.server.levelTask:Modify( player , 44 , 1)
|
|
skynet.server.dailyTask:Modify( player , 44 , 1)
|
|
local curPlayerList = skynet.server.playerCenter:Get( player.userId )
|
|
curPlayerList.lastExtraRevenueTime = skynet.GetTime()
|
|
player.gameData.extraRevenue.online = 0
|
|
player.gameData.extraRevenue.offline = 0
|
|
log.info(string.format("玩家 %d 额外收益 类型 %d 获得金币 %d", player.userId , opType , allCount))
|
|
end
|
|
end
|
|
end
|
|
|
|
data.opType = opType
|
|
data.coinCount = allCount
|
|
s2cData.cmd = pb.enum("MsgType","CMD_S2C_ExtraRevenue")
|
|
s2cData.data = assert(pb.encode("S2CExtraRevenue", data))
|
|
end
|
|
|
|
--计算在线收益
|
|
function ExtraRevenue:CalcOnline( player )
|
|
local curPlayerList = skynet.server.playerCenter:Get( player.userId )
|
|
if player.userId and curPlayerList then
|
|
local lastTime = curPlayerList.lastExtraRevenueTime
|
|
local cfgLevel = skynet.server.gameConfig.Level[ player.gameData.level ]
|
|
|
|
--计算在线时间
|
|
--if skynet.GetTime() > lastTime + 60 then
|
|
local onlineTime = math.floor((skynet.GetTime() - lastTime) / 60)
|
|
player.gameData.extraRevenue.online = math.floor(onlineTime * cfgLevel.onlineRatio)
|
|
player.gameData.extraRevenue.online = player.gameData.extraRevenue.online < cfgLevel.earningUpper and player.gameData.extraRevenue.online or cfgLevel.earningUpper
|
|
log.info(string.format("玩家 %d 额外收益 计算在线 时间 %d 金币 %d 最终数量 %d", player.userId ,onlineTime , onlineTime * cfgLevel.onlineRatio , player.gameData.extraRevenue.online ))
|
|
--end
|
|
else
|
|
log.info(string.format("玩家 %d 额外收益 计算在线收益不存在", player.userId or 0))
|
|
end
|
|
end
|
|
|
|
--计算离线收益
|
|
function ExtraRevenue:CalcOffline( player )
|
|
local cfgLevel = skynet.server.gameConfig.Level[ player.gameData.level ]
|
|
if cfgLevel then
|
|
--计算离线时间
|
|
local offlineTime = math.floor((skynet.GetTime() - player.basicInfo.lastGameTime) / 60)
|
|
offlineTime = offlineTime < cfgLevel.offlineUpperTime and offlineTime or cfgLevel.offlineUpperTime
|
|
|
|
if offlineTime ~= 0 then
|
|
--计算收益
|
|
player.gameData.extraRevenue.offline = player.gameData.extraRevenue.offline + player.gameData.extraRevenue.online --把在线的金币也加到离线里
|
|
player.gameData.extraRevenue.offline = math.floor(player.gameData.extraRevenue.offline + offlineTime * cfgLevel.offlineRatio)
|
|
player.gameData.extraRevenue.offline = player.gameData.extraRevenue.offline < cfgLevel.earningUpper and player.gameData.extraRevenue.offline or cfgLevel.earningUpper
|
|
player.basicInfo.lastGameTime = skynet.GetTime()
|
|
log.info(string.format("玩家 %d 额外收益 计算离线 时间 %d 金币 %d 最终数量 %d", player.userId ,offlineTime , offlineTime * cfgLevel.offlineRatio , player.gameData.extraRevenue.offline ))
|
|
end
|
|
end
|
|
end
|
|
|
|
skynet.server.extraRevenue = ExtraRevenue
|
|
return ExtraRevenue
|