124 lines
5.1 KiB
Lua
124 lines
5.1 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 --双倍领取
|
||
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
|