From bb284affe6541fa85c492ce9af26b4ee35805aab Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期二, 12 三月 2019 14:25:07 +0800
Subject: [PATCH] 6328 【后端】优化代码eval -- 玩家缓存数据提取常用字段 等级和最后一次发送时间

---
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerGeTui.py |   39 ++++++++++++++++++++++++++-------------
 1 files changed, 26 insertions(+), 13 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerGeTui.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerGeTui.py
index 8f3468d..be9c0d5 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerGeTui.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerGeTui.py
@@ -86,14 +86,6 @@
 
 # 检查是否可以个推,geTuiType小于0的代表默认可推,无VIP限制
 def CheckCanGeTui(playerCache, geTuiType=-1):
-    if not playerCache.get("GeTuiClientID", ""):
-        return False
-    
-    # 离线超过24小时不再推送,目前极光推送的特点是推送ID同机器不同包都是同一个ID
-    if not playerCache.get("Time", 0):
-        return False
-    if time.time() - playerCache.get("Time", 0) > 24*60*60:
-        return False
         
     if not playerCache.get("VIPLV", 0):
         if geTuiType < 0:
@@ -263,6 +255,16 @@
                 return True
     return True
     
+# 个推基础判定
+def CanGeTuiByCache(curCache):
+    if not curCache.GetGeTuiID():
+        return False
+    
+    # 离线超过24小时不再推送,目前极光推送的特点是推送ID同机器不同包都是同一个ID
+    if time.time() - curCache.GetOffTime() > 24*60*60:
+        return False
+    return True
+    
 def BossAttentionGeTui(bossData, bossID):
     if bossData.GetMapID() == ChConfig.Def_FBMapID_SealDemon:
         # 非VIP玩家 封魔坛个推
@@ -281,17 +283,24 @@
         curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
         if curPlayer and not PlayerControl.GetIsTJG(curPlayer):
             continue
-
+        
+        # 离线玩家
+        curCache = PlayerViewCache.ViewCacheMgr.FindCache(playerID)
+        if not curCache:
+            continue
+        
+        if not CanGeTuiByCache(curCache):
+            #无推送资格,减少检索和eval
+            continue
+        
         recordDict = eval(bossAttentionData.RecordData)
         if recordDict.get(bossID, 0) in [0, 9]:
             #0-默认未关注, 1-主动关注, 2-自动关注, 9-主动取消关注
             continue
-        curCache = PlayerViewCache.ViewCacheMgr.FindCache(playerID)
-        if not curCache:
-            continue
+        
         cacheDict = eval(curCache.GetPropData())
         if not CheckCanGeTui(cacheDict, geTuiType):
-            # 过滤个推
+            # 个推逻辑检查
             continue
         
         if not CheckBossGeTuiCnt(playerID, bossID, geTuiType, cacheDict):
@@ -327,6 +336,10 @@
     if not curCache:
         return
 
+    if not CanGeTuiByCache(curCache):
+        #无推送资格,基础判定
+        return
+
     cacheDict = eval(curCache.GetPropData())
     if not CheckCanGeTui(cacheDict, Def_Onoff_Chat):
         # 过滤个推

--
Gitblit v1.8.0