Files
chuanqi-server-instance/LogicServer/data/functions/Activity/ActivityOnlineMin.lua
2024-12-16 20:45:03 +08:00

135 lines
4.6 KiB
Lua
Executable File
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.

-- 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)