| | |
| | |
|
| | | #非VIP权限
|
| | | Def_GeTui_FMT = -2 # 封魔坛
|
| | | Def_GeTui_ZhuXianBoss = -3 # 诛仙BOSS
|
| | |
|
| | | # 新玩家还没有脱机时间 有利于挽回流失玩家
|
| | | g_NewGuyNoTJGTime = {} # {playerID:[playername,getuiid, tick]}
|
| | |
| | |
|
| | | # 检查是否可以个推,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 False
|
| | |
|
| | | if geTuiType == Def_GeTui_FMT:
|
| | | if geTuiType in [Def_GeTui_FMT, Def_GeTui_ZhuXianBoss]:
|
| | | # 封魔坛受VIP的关注BOSS开关影响
|
| | | geTuiType = Def_Onoff_Boss
|
| | |
|
| | |
| | | return False
|
| | |
|
| | | g_FMTGeTuiLimit[playerID][bossID] = int(time.time())
|
| | | |
| | | |
| | | elif geTuiType == Def_GeTui_ZhuXianBoss:
|
| | | if not cacheDict.get("CntMark_%s"%ChConfig.Def_FBMapID_ZhuXianBoss, 0):
|
| | | return False
|
| | | |
| | | # 比较频繁默认1小时通知一次
|
| | | if playerID not in g_FMTGeTuiLimit:
|
| | | g_FMTGeTuiLimit[playerID] = {}
|
| | | |
| | | lastTime = g_FMTGeTuiLimit[playerID].get(bossID, 0)
|
| | | if lastTime != 0 and time.time() - lastTime < 3600:
|
| | | # 离上次通知还没超过1小时
|
| | | return False
|
| | | |
| | | g_FMTGeTuiLimit[playerID][bossID] = int(time.time())
|
| | | |
| | | elif geTuiType == Def_Onoff_Boss:
|
| | | #重生boss
|
| | | killBossCntLimitDict = IpyGameDataPY.GetFuncEvalCfg('KillBossCntLimit', 1, {})
|
| | |
| | | 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玩家 封魔坛个推
|
| | | geTuiType = Def_GeTui_FMT
|
| | | elif bossData.GetMapID() == ChConfig.Def_FBMapID_ZhuXianBoss:
|
| | | # 非VIP玩家 诛仙BOSS个推
|
| | | geTuiType = Def_GeTui_ZhuXianBoss
|
| | | else:
|
| | | geTuiType = Def_Onoff_Boss
|
| | |
|
| | |
| | | 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:
|
| | |
| | |
|
| | | if geTuiType == Def_GeTui_FMT:
|
| | | showStr = GameWorld.GbkToCode(IpyGameDataPY.GetFuncCfg("GeTuiOffLine", 1)%(npcName, npcLV)) # 文字信息
|
| | | elif geTuiType == Def_GeTui_ZhuXianBoss:
|
| | | showStr = GameWorld.GbkToCode(IpyGameDataPY.GetFuncCfg("GeTuiOffLine", 5)%(npcName, npcLV)) # 文字信息
|
| | | elif geTuiType == Def_Onoff_Boss:
|
| | | showStr = GameWorld.GbkToCode(IpyGameDataPY.GetFuncCfg("GeTuiOffLine", 2)%(bossData.GetSourceName(), npcName, npcLV)) # 文字信息
|
| | |
|
| | |
| | |
|
| | | # 私聊
|
| | | 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
|
| | |
|
| | | # 下线时,低级玩家没有离线时间的玩家提示, 上线清空
|