HomeServer/Server/AllServer/GameServer/ExtraRevenue.lua

124 lines
5.1 KiB
Lua
Raw Permalink 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 --双倍领取
ExtraRevenue.OnlineIntervalTime = 2 --在线间隔时间(分钟)
ExtraRevenue.OfflineIntervalTime = 5 --离线间隔时间(分钟)
--计算离线收益
function ExtraRevenue:LoginInitData( player )
local cfgLevel = skynet.server.gameConfig:GetPlayerCurCfg( player , "Level" , player.gameData.level )
if cfgLevel then
local lastTime = player.basicInfo.lastGameTime
local extraRevenue = player.gameData.extraRevenue
local offlineTime = math.floor((skynet.GetTime() - lastTime) / 60) --离线分钟数
if offlineTime > 0 then
extraRevenue.offlineTime = extraRevenue.offlineTime + offlineTime
if extraRevenue.offlineTime > cfgLevel.offlineUpperTime then
extraRevenue.offlineTime = cfgLevel.offlineUpperTime
end
end
end
end
--额外收益
function ExtraRevenue:Start( player , c2sData , s2cData )
c2sData.data = assert(pb.decode("C2SExtraRevenue", c2sData.data ))
local data = {}
local allCount = 0
local opType = c2sData.data.opType
local level = player.gameData.level
local cfgLevel = skynet.server.gameConfig:GetPlayerCurCfg( player , "Level" , level )
log.debug(string.format("玩家 %d 额外收益 开始 操作类型 %d ", player.userId , opType ))
if not opType then
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
elseif not cfgLevel then
s2cData.code = errorInfo.ErrorCode.NoExistCfg
else
--计算下在线收益
self:CalcOnline( player )
local extraRevenue = player.gameData.extraRevenue
local onlineTime = extraRevenue.onlineTime
local offlineTime = extraRevenue.offlineTime
local onlineCoinCount = math.floor( onlineTime / self.OnlineIntervalTime ) * cfgLevel.onlineRatio
local offlineCoinCount = math.floor( offlineTime / self.OfflineIntervalTime ) * cfgLevel.offlineRatio
local allCoinCount = 0
--第一次未领取只能给20不能再多了
if not player:GetOnceSign( "isFirstExtraRevenue" ) then
onlineTime = 0
onlineCoinCount = 20
offlineTime = 0
offlineCoinCount = 0
end
allCount = onlineCoinCount + offlineCoinCount
if self.OPType_GainRevenue == opType or self.OPType_GainDouble == opType then
if not player:GetOnceSign( "isFirstExtraRevenue" ) then
player:SetOnceSign( "isFirstExtraRevenue" , true) --打上第一次领取标记
end
if self.OPType_GainDouble == opType then
allCount = allCount * 2
end
--发放金币
local eventId = pb.enum("EnumMoneyChangeEventID","EventID_23")
player:MoneyChange( dataType.MoneyType_Coin , allCount , eventId)
--触发相关任务
if allCount > 0 then
skynet.server.levelTask:Modify( player , 44 , 1)
skynet.server.dailyTask:Modify( player , 44 , 1)
skynet.server.taskListEvent:Modify( player ,44, 1)
extraRevenue.onlineTime = 0
extraRevenue.offlineTime = 0
end
end
data.opType = opType
data.onlineTime = onlineTime
data.onlineCoinCount = onlineCoinCount
data.offlineTime = offlineTime
data.offlineCoinCount = offlineCoinCount
--data.coinCount = onlineCoinCount + offlineCoinCount --需要注释
--data.totalTime = onlineTime + offlineTime --需要注释
log.debug(string.format("玩家 %d 额外收益 操作类型 %d 在线时间 %d 在线金币 %d 离线时间 %d 离线金币 %d", player.userId , data.opType , data.onlineTime , data.onlineCoinCount , data.offlineTime , data.offlineCoinCount ))
end
s2cData.cmd = pb.enum("MsgType","CMD_S2C_ExtraRevenue")
s2cData.data = assert(pb.encode("S2CExtraRevenue", data))
end
--计算在线收益
function ExtraRevenue:CalcOnline( player )
local lastTime = player.tmpData.lastOnlineTime
local cfgLevel = skynet.server.gameConfig:GetPlayerCurCfg( player , "Level" , player.gameData.level )
local extraRevenue = player.gameData.extraRevenue
local onlineTime = math.floor((skynet.GetTime() - lastTime) / 60) --在线分钟数
if onlineTime > 0 then
extraRevenue.onlineTime = extraRevenue.onlineTime + onlineTime
if extraRevenue.onlineTime > cfgLevel.onlineUpperTime then
extraRevenue.onlineTime = cfgLevel.onlineUpperTime
end
player.tmpData.lastOnlineTime = skynet.GetTime()
end
end
skynet.server.extraRevenue = ExtraRevenue
return ExtraRevenue