|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | # 检查是否可以个推,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 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | recordDict = json.loads(bossAttentionData.RecordData) | 
|---|
|  |  |  | if recordDict.get(str(bossID), 0) in [0, 9]: | 
|---|
|  |  |  | #0-默认未关注, 1-主动关注, 2-自动关注, 9-主动取消关注 | 
|---|
|  |  |  | continue | 
|---|
|  |  |  | curCache = PlayerViewCache.ViewCacheMgr.FindCache(playerID) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | # 离线玩家 | 
|---|
|  |  |  | curCache = PlayerViewCache.FindViewCache(playerID) | 
|---|
|  |  |  | if not curCache: | 
|---|
|  |  |  | continue | 
|---|
|  |  |  | cacheDict = json.loads(curCache.GetPropData()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if not CanGeTuiByCache(curCache): | 
|---|
|  |  |  | #无推送资格,减少检索和eval | 
|---|
|  |  |  | continue | 
|---|
|  |  |  |  | 
|---|
|  |  |  | recordDict = eval(bossAttentionData.RecordData) | 
|---|
|  |  |  | if recordDict.get(bossID, 0) in [0, 9]: | 
|---|
|  |  |  | #0-默认未关注, 1-主动关注, 2-自动关注, 9-主动取消关注 | 
|---|
|  |  |  | continue | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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 = json.loads(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 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | # 下线时,低级玩家没有离线时间的玩家提示, 上线清空 | 
|---|