From e671cc640668d05194dc7a6bc13427a4f70ed1c6 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期二, 23 七月 2019 21:12:58 +0800 Subject: [PATCH] 8154 【后端】【主干】【300】拍卖行优化(系统中间商自动回购并上架一件新装备支持) --- ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py | 32 ++++++++++++++++++++++++++++++++ 1 files changed, 32 insertions(+), 0 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py index 12d0d56..57b01ad 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py @@ -128,6 +128,7 @@ #玩家队伍初始化 PlayerTeam.OnPlayerLoginRefreshTeam(curPlayer, tick) PlayerCompensation.NotifyPlayerCompensation(curPlayer) + __UpdOnedayJobPlayerLoginoffTime(curPlayer) if not PlayerControl.GetIsTJG(curPlayer): # 只有通知逻辑的应该放此处减少IO,如有逻辑处理存储等不可放在此处 @@ -189,6 +190,36 @@ #骑宠boss状态通知 PlayerHorsePetBoss.OnLogin(curPlayer) GMT_CTG.OnPlayerLogin(curPlayer) + return + +def __UpdOnedayJobPlayerLoginoffTime(curPlayer): + ## 更新一天内职业对应玩家登录、离线时间 + job = curPlayer.GetJob() + playerID = curPlayer.GetPlayerID() + if job not in PyGameData.g_onedayJobPlayerLoginoffTimeDict: + PyGameData.g_onedayJobPlayerLoginoffTimeDict[job] = {} + playerLoginoffTimeDict = PyGameData.g_onedayJobPlayerLoginoffTimeDict[job] + playerLoginoffTimeDict[playerID] = int(time.time()) + #GameWorld.DebugLog("更新职业对应玩家登录离线时间: %s" % PyGameData.g_onedayJobPlayerLoginoffTimeDict) + return + +def CheckOnedayJobPlayerLoginoffTimeout(): + ## 检查一天内职业对应玩家登录、离线时间超时玩家,每小时检查一次 + + maxTime = 24 * 3600 # 暂定24小时 + curTime = int(time.time()) + #GameWorld.DebugLog("处理24小时内在线的角色职业玩家: curTime=%s,maxTime=%s, %s" % (curTime, maxTime, PyGameData.g_onedayJobPlayerLoginoffTimeDict)) + + playerManager = GameWorld.GetPlayerManager() + for playerDict in PyGameData.g_onedayJobPlayerLoginoffTimeDict.values(): + for playerID, loginoffTime in playerDict.items(): + if playerManager.FindPlayerByID(playerID): + #GameWorld.DebugLog(" 在线不处理, playerID=%s" % playerID) + continue + if curTime - loginoffTime > maxTime: + playerDict.pop(playerID) + #GameWorld.DebugLog(" 超时玩家,移除! playerID=%s,loginoffTime=%s" % (playerID, loginoffTime)) + #GameWorld.DebugLog(" 处理完毕,剩余玩家! %s" % PyGameData.g_onedayJobPlayerLoginoffTimeDict) return ## 增加高手玩家上线广播 @@ -505,6 +536,7 @@ PlayerFamily.PlayerLogoffRefreshFamily(curPlayer, tick) PlayerFriend.OnPlayerDisconnect(curPlayer, tick) + __UpdOnedayJobPlayerLoginoffTime(curPlayer) PlayerGeTui.NewGuyCallBackGeTui(curPlayer, tick) # 设置家族成员离线时间 SetPlayerOfflineTime(curPlayer) -- Gitblit v1.8.0