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

124 lines
5.1 KiB
Lua
Raw 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 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