135 lines
4.6 KiB
Lua
Executable File
135 lines
4.6 KiB
Lua
Executable File
-- module("ActivityOnlineMin", package.seeall)
|
||
--[[
|
||
|
||
累计在线
|
||
|
||
个人数据:onlinedata
|
||
{
|
||
onlineTime --累计在线时间
|
||
lastLoginTime --登录时间
|
||
loginday--登录天数
|
||
bitState --bit位
|
||
}
|
||
]]--
|
||
OnlineCfg = OnlineTimeRewardConfig
|
||
OnlineTimeconst = OnlineTimeconstConfig
|
||
|
||
--对应的活动配置
|
||
function getOnlineData(pActor)
|
||
local var = Actor.getStaticVar(pActor)
|
||
if var.onlinedata== nil then
|
||
var.onlinedata = {}
|
||
end
|
||
return var.onlinedata
|
||
end
|
||
|
||
function SendOnlineData(pActor)
|
||
local npack = DataPack.allocPacket(pActor, enMiscSystemID, sGetOnlineTime)
|
||
if npack then
|
||
local data = getOnlineData(pActor)
|
||
if data.onlineTime == nil then
|
||
data.onlineTime = 0;
|
||
end
|
||
data.onlineTime = (data.onlineTime or 0) + Actor.getTotalOnlineTime(pActor);
|
||
-- print("SendOnlineData.."..data.onlineTime);
|
||
-- local totalTime = data.onlineTime + Actor.getTotalOnlineTime(pActor);
|
||
DataPack.writeUInt(npack, (data.onlineTime or 0))--累计登录时间
|
||
DataPack.writeUInt(npack, (data.loginday or 0))--累计天数
|
||
DataPack.writeInt(npack, (data.bitState or 0))--礼包的领取标记 32 位
|
||
DataPack.flush(npack)
|
||
end
|
||
end
|
||
|
||
--------------------------------------------------------------------
|
||
-- 客户端请求协议回调
|
||
-------------------------------------------------------------------
|
||
function OnOnlineLogin(pActor)
|
||
local data = getOnlineData(pActor);
|
||
if data.lastLoginTime == nil then
|
||
data.lastLoginTime = System.getCurrMiniTime()
|
||
data.loginday =1
|
||
end
|
||
SendOnlineData(pActor);
|
||
end
|
||
|
||
function OnGetOlineTimeAward(pActor, packet)
|
||
local ntype = DataPack.readByte(packet);
|
||
local nIndex = DataPack.readInt(packet);
|
||
local data = getOnlineData(pActor)
|
||
if data == nil then
|
||
return
|
||
end
|
||
-- print("ntype.."..ntype.."..nIndex.."..nIndex)
|
||
local Cfg= OnlineCfg[ntype]
|
||
if not Cfg or not Cfg[nIndex] then
|
||
Actor.sendTipmsg(pActor, "|C:0xf56f00&T:无此奖励|", tstUI)
|
||
return
|
||
end
|
||
local flag = System.getIntBit(data.bitState, nIndex-1)
|
||
--print("loginGift="..data.levelGift.." flag="..flag)
|
||
if flag == 1 then
|
||
Actor.sendTipmsg(pActor, "|C:0xf56f00&T:奖励已领取|", tstUI)
|
||
return
|
||
end
|
||
if ntype == 1 then
|
||
local totalTime = data.onlineTime + Actor.getTotalOnlineTime(pActor);
|
||
if totalTime < Cfg[nIndex].onlineTimes then
|
||
Actor.sendTipmsg(pActor, "|C:0xf56f00&T:累计在线时间未到|", tstUI)
|
||
return;
|
||
end
|
||
elseif ntype == 2 then
|
||
if data.loginday < Cfg[nIndex].onlineTimes then
|
||
Actor.sendTipmsg(pActor, "|C:0xf56f00&T:累计登录未到|", tstUI)
|
||
return
|
||
end
|
||
end
|
||
|
||
if CommonFunc.Awards.CheckBagIsEnough(pActor,8,tmLeftBagNumNotEnough,tstUI) ~= true then
|
||
return
|
||
end
|
||
data.bitState = System.setIntBit((data.bitState or 0), nIndex-1, true)
|
||
-- print("nIndex.."..nIndex);
|
||
CommonFunc.Awards.Give(pActor, Cfg[nIndex].reward, GameLog.Log_TotalOnlineTime)
|
||
SendOnlineData(pActor)
|
||
end
|
||
--------------------------------------------------------------------
|
||
-- 玩家 回调注册
|
||
--------------------------------------------------------------------
|
||
-- 跨天
|
||
function OnNewDayArrive(pActor,ndiffday)
|
||
local currMiniTime = System.getCurrMiniTime()
|
||
local data = getOnlineData(pActor)
|
||
if data.lastLoginTime then
|
||
if not System.isSameDay(data.lastLoginTime, System.getCurrMiniTime()) then
|
||
data.lastLoginTime = System.getCurrMiniTime()
|
||
data.loginday = data.loginday + 1
|
||
end
|
||
SendOnlineData(pActor)
|
||
end
|
||
end
|
||
|
||
function UpdateOnlineTime(pActor,totalTime)
|
||
-- local currMiniTime = System.getCurrMiniTime()
|
||
|
||
if OnlineTimeconst.limit then
|
||
if Actor.checkCommonLimit(pActor,
|
||
(OnlineTimeconst.limit.level or 0),
|
||
(OnlineTimeconst.limit.zsLevel or 0),
|
||
(OnlineTimeconst.limit.vip or 0),
|
||
(OnlineTimeconst.limit.office or 0) ) == false then
|
||
|
||
return;
|
||
end
|
||
end
|
||
local data = getOnlineData(pActor)
|
||
data.onlineTime = (data.onlineTime or 0) + totalTime;
|
||
-- print("UpdateOnlineTime.."..data.onlineTime.."..totalTime.."..totalTime);
|
||
-- SendOnlineData(pActor);
|
||
end
|
||
|
||
|
||
ActorEventDispatcher.Reg(aeNewDayArrive, OnNewDayArrive, "ActivityOnlineMin.lua")
|
||
|
||
|
||
NetmsgDispatcher.Reg(enMiscSystemID, cGetOnlineTime, OnOnlineLogin)
|
||
NetmsgDispatcher.Reg(enMiscSystemID, cGetOnlineAward, OnGetOlineTimeAward) |