From 2b86c7b9ca3a719dc0f25ce3df11296b87795ef2 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 23 五月 2022 17:00:20 +0800
Subject: [PATCH] 9415 【BT】【后端】古神战场(采集阵营buff时每个在线阵营玩家增加个人开奖贡献)
---
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py | 87 ++++++++++++++++++++++++++++++++++++++-----
1 files changed, 76 insertions(+), 11 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py
index 390f82b..2348d7e 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py
@@ -38,6 +38,62 @@
AssistType_TeamFB, # 组队副本
) = range(3)
+def RemoveOutofdateAssistThanks():
+ ## 移除过期的未完结感谢数据
+
+ timeoutDate = GameWorld.GetDatetimeByDiffDays(-7)
+ assistThanksMgr = PyDataManager.GetPlayerAssistThanksPyManager()
+ maxDoCount = len(assistThanksMgr.allAssistThanksList)
+ syncPlayerIDList = []
+ removeCountTotal, delNoThanksCount, delUnGetThanksCount = 0, 0, 0
+ doCount = 0
+ while doCount < maxDoCount and assistThanksMgr.allAssistThanksList:
+ doCount += 1
+ thanks = assistThanksMgr.allAssistThanksList[0]
+ thanksDate = GameWorld.ChangeStrToDatetime(thanks.TimeStr)
+ if thanksDate > timeoutDate:
+ break
+
+ removeCountTotal += 1
+ # 移除过期的感谢数据
+ popThanks = assistThanksMgr.allAssistThanksList.pop(0)
+ playerID = popThanks.PlayerID
+ GUID = popThanks.GUID
+ assistPlayerIDList = popThanks.AssistPlayerDict.keys()
+
+ if playerID in assistThanksMgr.playerThanksDict:
+ playerThanksList = assistThanksMgr.playerThanksDict[playerID]
+ for i, thanks in enumerate(playerThanksList):
+ if GUID == thanks.GUID:
+ delNoThanksCount += 1
+ playerThanksList.pop(i)
+ #GameWorld.DebugLog(" 移除未感谢的数据: i=%s,GUID=%s,len=%s" % (i, thanks.GUID, len(playerThanksList)))
+ break
+
+ for assistPlayerID in assistPlayerIDList:
+ if assistPlayerID not in assistThanksMgr.assistPlayerThanksDict:
+ continue
+ assistThanksList = assistThanksMgr.assistPlayerThanksDict[assistPlayerID]
+ for i, thanks in enumerate(assistThanksList):
+ if GUID == thanks.GUID:
+ delUnGetThanksCount += 1
+ assistThanksList.pop(i)
+ #GameWorld.DebugLog(" 移除未接受感谢的数据: i=%s,GUID=%s,assistPlayerID=%s,len=%s" % (i, thanks.GUID, assistPlayerID, len(assistThanksList)))
+ if assistPlayerID not in syncPlayerIDList:
+ syncPlayerIDList.append(assistPlayerID)
+ break
+
+ playerMgr = GameWorld.GetPlayerManager()
+ for playerID in syncPlayerIDList:
+ assistPlayer = playerMgr.FindPlayerByID(playerID)
+ if assistPlayer:
+ SyncCanGetAssistThanksGiftCount(assistPlayer, isForce=True)
+
+ if removeCountTotal:
+ GameWorld.DebugLog("移除过期的未完结感谢数据: doCount=%s,maxDoCount=%s,removeCountTotal=%s,delNoThanksCount=%s,delUnGetThanksCount=%s,remainCount=%s"
+ % (doCount, maxDoCount, removeCountTotal, delNoThanksCount, delUnGetThanksCount, len(assistThanksMgr.allAssistThanksList)))
+ return
+
def OnPlayerLogin(curPlayer, isTJ=False):
## 玩家上线
@@ -813,23 +869,29 @@
playerID = curPlayer.GetPlayerID()
assistThanksMgr = PyDataManager.GetPlayerAssistThanksPyManager()
+ useThanks = None
if playerID not in assistThanksMgr.playerThanksDict:
GameWorld.ErrLog("玩家没有可使用的协助感谢礼盒!", playerID)
- return
- useThanks = None
- playerThanksList = assistThanksMgr.playerThanksDict[playerID]
- for thanks in playerThanksList:
- if itemID == thanks.ItemID:
- useThanks = thanks
- break
+ else:
+ playerThanksList = assistThanksMgr.playerThanksDict[playerID]
+ for thanks in playerThanksList:
+ if itemID == thanks.ItemID:
+ useThanks = thanks
+ break
if not useThanks:
GameWorld.ErrLog("玩家没有该协助感谢礼盒!itemID=%s" % (itemID), playerID)
- return
+ #20210226 优化为找不到协助信息也可以使用,防止地图扣除物品失败导致协助礼盒一直留着而无法使用
+ #return
GameWorld.DebugLog("玩家使用协助感谢礼盒!itemID=%s,isPreview=%s" % (itemID, isPreview), playerID)
# 预览
if isPreview:
previewPack = ChPyNetSendPack.tagGCUseAssistThanksGiftPreview()
+ if not useThanks:
+ previewPack.ItemID = itemID
+ previewPack.MapID = 31140 # 暂随意给一个可协助的地图ID
+ NetPackCommon.SendFakePack(curPlayer, previewPack)
+ return
previewPack.ItemID = useThanks.ItemID
previewPack.MapID = useThanks.MapID
previewPack.LineID = useThanks.LineID
@@ -854,12 +916,15 @@
ipyData = IpyGameDataPY.GetIpyGameData("AssistThanksGift", itemID)
if not ipyData:
return
-
- useThanks.ThanksState = 1 # 设置为已感谢
- playerThanksList.remove(useThanks) # 移除已感谢
+
queryData = [itemID]
QueryPlayerResult_PlayerAssist(curPlayer, "UseAssistThanksGift", queryData)
+ if not useThanks:
+ return
+ useThanks.ThanksState = 1 # 设置为已感谢
+ playerThanksList.remove(useThanks) # 移除已感谢
+
# 通知协助玩家可接收的感谢个数
playerMgr = GameWorld.GetPlayerManager()
for assistPlayerID in useThanks.AssistPlayerDict.keys():
--
Gitblit v1.8.0