|  |  | 
 |  |  | 
 | 
 |  |  | # 检查是否可以个推,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:
 | 
 |  |  | 
 |  |  |                 return True
 | 
 |  |  |     return True
 | 
 |  |  |     
 | 
 |  |  | # 个推基础判定
 | 
 |  |  | def CanGeTuiByCache(curCache):
 | 
 |  |  |     if not curCache.GeTuiID:
 | 
 |  |  |         return False
 | 
 |  |  |      | 
 |  |  |     # 离线超过24小时不再推送,目前极光推送的特点是推送ID同机器不同包都是同一个ID
 | 
 |  |  |     if time.time() - curCache.OffTime > 24*60*60:
 | 
 |  |  |         return False
 | 
 |  |  |     return True
 | 
 |  |  |      | 
 |  |  | def BossAttentionGeTui(bossData, bossID):
 | 
 |  |  |     if bossData.GetMapID() == ChConfig.Def_FBMapID_SealDemon:
 | 
 |  |  |         # 非VIP玩家 封魔坛个推
 | 
 |  |  | 
 |  |  |         curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
 | 
 |  |  |         if curPlayer and not PlayerControl.GetIsTJG(curPlayer):
 | 
 |  |  |             continue
 | 
 |  |  | 
 | 
 |  |  |          | 
 |  |  |         # 离线玩家
 | 
 |  |  |         curCache = PlayerViewCache.FindViewCache(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())
 | 
 |  |  |          | 
 |  |  |         cacheDict = PlayerViewCache.GetCachePropDataDict(curCache)
 | 
 |  |  |         if not CheckCanGeTui(cacheDict, geTuiType):
 | 
 |  |  |             # 过滤个推
 | 
 |  |  |             # 个推逻辑检查
 | 
 |  |  |             continue
 | 
 |  |  |         
 | 
 |  |  |         if not CheckBossGeTuiCnt(playerID, bossID, geTuiType, cacheDict):
 | 
 |  |  | 
 |  |  |         if appID not in appIDDict:
 | 
 |  |  |             appIDDict[appID] = []
 | 
 |  |  |             
 | 
 |  |  |         appIDDict[appID].append([cacheDict.get("GeTuiClientID", ""), cacheDict.get("Name", "")])
 | 
 |  |  |         appIDDict[appID].append([curCache.GeTuiID, cacheDict.get("Name", "")])
 | 
 |  |  |              
 | 
 |  |  | 
 | 
 |  |  |     if not appIDDict:
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | # 私聊
 | 
 |  |  | def ChatMiGeTui(playerID, playerName, tagPlayerName):
 | 
 |  |  |     curCache = PlayerViewCache.ViewCacheMgr.FindCache(playerID)
 | 
 |  |  |     curCache = PlayerViewCache.FindViewCache(playerID)
 | 
 |  |  |     if not curCache:
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     cacheDict = eval(curCache.GetPropData())
 | 
 |  |  |     if not CanGeTuiByCache(curCache):
 | 
 |  |  |         #无推送资格,基础判定
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     cacheDict = PlayerViewCache.GetCachePropDataDict(curCache)
 | 
 |  |  |     if not CheckCanGeTui(cacheDict, Def_Onoff_Chat):
 | 
 |  |  |         # 过滤个推
 | 
 |  |  |         return
 | 
 |  |  |     
 | 
 |  |  |     showStr = GameWorld.GbkToCode(IpyGameDataPY.GetFuncCfg("GeTuiOffLine", 3))%(tagPlayerName)    # 文字信息
 | 
 |  |  |     GeTuiNotify({cacheDict.get("AppID", ""):[[cacheDict.get("GeTuiClientID", ""), playerName]]}, showStr)
 | 
 |  |  |     GeTuiNotify({cacheDict.get("AppID", ""):[[curCache.GeTuiID, playerName]]}, showStr)
 | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | # 下线时,低级玩家没有离线时间的玩家提示, 上线清空
 |