From 8c4813b40cff97893a73d07105d950425ea98e9f Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期五, 21 六月 2024 19:31:23 +0800 Subject: [PATCH] 10185 【越南】【港台】【主干】BOSS凭证修改(增加仙盟充值互助活动;) --- ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerGeTui.py | 74 ++++++++++++++++++++++++++---------- 1 files changed, 53 insertions(+), 21 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerGeTui.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerGeTui.py index db39caa..28611ad 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerGeTui.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerGeTui.py @@ -37,6 +37,7 @@ #非VIP权限 Def_GeTui_FMT = -2 # 封魔坛 +Def_GeTui_ZhuXianBoss = -3 # 诛仙BOSS # 新玩家还没有脱机时间 有利于挽回流失玩家 g_NewGuyNoTJGTime = {} # {playerID:[playername,getuiid, tick]} @@ -85,21 +86,13 @@ # 检查是否可以个推,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 @@ -235,8 +228,21 @@ 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, {}) @@ -249,10 +255,23 @@ 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 @@ -264,17 +283,24 @@ 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): @@ -285,7 +311,7 @@ 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: @@ -296,6 +322,8 @@ 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)) # 文字信息 @@ -304,17 +332,21 @@ # 私聊 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 # 下线时,低级玩家没有离线时间的玩家提示, 上线清空 -- Gitblit v1.8.0