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