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