From afea2d9d4b9cb6d0982c02a775e8198fc2421c53 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 08 十二月 2023 18:21:28 +0800
Subject: [PATCH] 10019 【砍树】回合战斗(增加抗连击、反击、抗反击、吸血、抗吸血属性,玩家及NPC属性接口通用;连击、反击属性效果支持;)
---
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerGeTui.py | 78 +++++++++++++++++++++++++++-----------
1 files changed, 55 insertions(+), 23 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerGeTui.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerGeTui.py
index eea8d25..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,28 +283,35 @@
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):
# 判断BOSS剩余次数, 避免通知频繁
continue
- appID = GameWorld.GetPlayerPlatform(cacheDict.get("AccID", ""))
+ appID = cacheDict.get("AppID", "")
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({GameWorld.GetPlayerPlatform(cacheDict.get("AccID", "")):[[cacheDict.get("GeTuiClientID", ""), playerName]]}, showStr)
+ GeTuiNotify({cacheDict.get("AppID", ""):[[curCache.GeTuiID, playerName]]}, showStr)
return
# 下线时,低级玩家没有离线时间的玩家提示, 上线清空
@@ -326,7 +358,7 @@
return
playerID = curPlayer.GetID()
g_NewGuyNoTJGTime[playerID] = [curPlayer.GetName(), curPlayer.GetGeTuiClientID(), tick,
- GameWorld.GetPlayerPlatform(curPlayer.GetAccID())] # curPlayer.GetGeTuiClientID()
+ GameWorld.GetPlayerPlatform(curPlayer)] # curPlayer.GetGeTuiClientID()
return
# 上线清除
--
Gitblit v1.8.0