HomeServer/lualib-src/Server-main/AllServer/GameServer/ExtraRevenue.lua

106 lines
4.9 KiB
Lua
Raw Normal View History

2024-11-20 15:41:09 +08:00
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