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
|